From 395204213327d13ce2ce68400b5771851415ad59 Mon Sep 17 00:00:00 2001 From: Robert Korulczyk Date: Sat, 13 May 2023 13:20:31 +0200 Subject: [PATCH] [Translation] Improve handling of non-string messages in `ArrayLoader` --- src/Symfony/Component/Translation/Loader/ArrayLoader.php | 8 +++++--- .../Translation/Tests/Loader/YamlFileLoaderTest.php | 9 +++++++++ .../Component/Translation/Tests/fixtures/non-string.yml | 5 +++++ 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 src/Symfony/Component/Translation/Tests/fixtures/non-string.yml diff --git a/src/Symfony/Component/Translation/Loader/ArrayLoader.php b/src/Symfony/Component/Translation/Loader/ArrayLoader.php index 0758da8b59a54..550c0f32ba8f4 100644 --- a/src/Symfony/Component/Translation/Loader/ArrayLoader.php +++ b/src/Symfony/Component/Translation/Loader/ArrayLoader.php @@ -46,10 +46,12 @@ private function flatten(array $messages): array foreach ($messages as $key => $value) { if (\is_array($value)) { foreach ($this->flatten($value) as $k => $v) { - $result[$key.'.'.$k] = $v; + if (null !== $v) { + $result[$key.'.'.$k] = (string) $v; + } } - } else { - $result[$key] = $value; + } elseif (null !== $value) { + $result[$key] = (string) $value; } } diff --git a/src/Symfony/Component/Translation/Tests/Loader/YamlFileLoaderTest.php b/src/Symfony/Component/Translation/Tests/Loader/YamlFileLoaderTest.php index 230c02e539e45..1e50f7f6b056b 100644 --- a/src/Symfony/Component/Translation/Tests/Loader/YamlFileLoaderTest.php +++ b/src/Symfony/Component/Translation/Tests/Loader/YamlFileLoaderTest.php @@ -30,6 +30,15 @@ public function testLoad() $this->assertEquals([new FileResource($resource)], $catalogue->getResources()); } + public function testLoadNonStringMessages() + { + $loader = new YamlFileLoader(); + $resource = __DIR__.'/../fixtures/non-string.yml'; + $catalogue = $loader->load($resource, 'en', 'domain1'); + + $this->assertSame(['root.foo2' => '', 'root.bar' => 'bar', 'root.baz' => '1'], $catalogue->all('domain1')); + } + public function testLoadDoesNothingIfEmpty() { $loader = new YamlFileLoader(); diff --git a/src/Symfony/Component/Translation/Tests/fixtures/non-string.yml b/src/Symfony/Component/Translation/Tests/fixtures/non-string.yml new file mode 100644 index 0000000000000..afb087aa9ee84 --- /dev/null +++ b/src/Symfony/Component/Translation/Tests/fixtures/non-string.yml @@ -0,0 +1,5 @@ +root: + foo1: + foo2: '' + bar: 'bar' + baz: 1