From 5beaee85f911a8fe8cfc40f834b925c7c8d1700e Mon Sep 17 00:00:00 2001 From: Sylvain Fabre Date: Thu, 16 Dec 2021 18:33:26 +0100 Subject: [PATCH] [Translation] Translatable parameters --- src/Symfony/Component/Translation/CHANGELOG.md | 5 +++++ src/Symfony/Component/Translation/Tests/TranslatorTest.php | 6 +++++- src/Symfony/Component/Translation/Translator.php | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Translation/CHANGELOG.md b/src/Symfony/Component/Translation/CHANGELOG.md index 160b5e694fbcb..df6efa94e30c7 100644 --- a/src/Symfony/Component/Translation/CHANGELOG.md +++ b/src/Symfony/Component/Translation/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +6.1 +--- + + * Parameters implementing `TranslatableInterface` are processed + 5.4 --- diff --git a/src/Symfony/Component/Translation/Tests/TranslatorTest.php b/src/Symfony/Component/Translation/Tests/TranslatorTest.php index f4f46788d106c..57f5456d950cd 100644 --- a/src/Symfony/Component/Translation/Tests/TranslatorTest.php +++ b/src/Symfony/Component/Translation/Tests/TranslatorTest.php @@ -17,6 +17,7 @@ use Symfony\Component\Translation\Exception\RuntimeException; use Symfony\Component\Translation\Loader\ArrayLoader; use Symfony\Component\Translation\MessageCatalogue; +use Symfony\Component\Translation\TranslatableMessage; use Symfony\Component\Translation\Translator; class TranslatorTest extends TestCase @@ -467,11 +468,14 @@ public function getTransFileTests() ]; } - public function getTransTests() + public function getTransTests(): iterable { + $param = new TranslatableMessage('Symfony is %what%!', ['%what%' => 'awesome'], ''); + return [ ['Symfony est super !', 'Symfony is great!', 'Symfony est super !', [], 'fr', ''], ['Symfony est awesome !', 'Symfony is %what%!', 'Symfony est %what% !', ['%what%' => 'awesome'], 'fr', ''], + ['Symfony est Symfony est awesome ! !', 'Symfony is %what%!', 'Symfony est %what% !', ['%what%' => $param], 'fr', ''], ['Symfony est super !', new StringClass('Symfony is great!'), 'Symfony est super !', [], 'fr', ''], ['', null, '', [], 'fr', ''], ]; diff --git a/src/Symfony/Component/Translation/Translator.php b/src/Symfony/Component/Translation/Translator.php index ba7126d5d1f82..d2e5c73f24a70 100644 --- a/src/Symfony/Component/Translation/Translator.php +++ b/src/Symfony/Component/Translation/Translator.php @@ -22,6 +22,7 @@ use Symfony\Component\Translation\Formatter\MessageFormatterInterface; use Symfony\Component\Translation\Loader\LoaderInterface; use Symfony\Contracts\Translation\LocaleAwareInterface; +use Symfony\Contracts\Translation\TranslatableInterface; use Symfony\Contracts\Translation\TranslatorInterface; // Help opcache.preload discover always-needed symbols @@ -194,6 +195,10 @@ public function trans(?string $id, array $parameters = [], string $domain = null } } + $parameters = array_map(function ($parameter) use ($locale) { + return $parameter instanceof TranslatableInterface ? $parameter->trans($this, $locale) : $parameter; + }, $parameters); + $len = \strlen(MessageCatalogue::INTL_DOMAIN_SUFFIX); if ($this->hasIntlFormatter && ($catalogue->defines($id, $domain.MessageCatalogue::INTL_DOMAIN_SUFFIX)