From 8677cb49de996d1b8d2e1b1a5da0c37fb5e8f9f7 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Wed, 30 Nov 2016 17:24:08 +0100 Subject: [PATCH 1/3] Simplified the use of transChoice() --- components/translation/usage.rst | 33 +++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/components/translation/usage.rst b/components/translation/usage.rst index 00887e5bb12..7048e331c9b 100644 --- a/components/translation/usage.rst +++ b/components/translation/usage.rst @@ -255,14 +255,27 @@ To translate pluralized messages, use the $translator->transChoice( 'There is one apple|There are %count% apples', - 10, - array('%count%' => 10) + 10 ); The second argument (``10`` in this example) is the *number* of objects being described and is used to determine which translation to use and also to populate the ``%count%`` placeholder. +.. note:: + + Before Symfony 3.2, the ``transChoice()`` method required a third argument + defining the value of each translation placeholder:: + + $translator->transChoice( + 'There is one apple|There are %count% apples', + 10, + array('%count%' => 10) + ); + + Starting from Symfony 3.2, when the only placeholder is ``%count%``, you + don't have to pass this third argument. + Based on the given number, the translator chooses the right plural form. In English, most words have a singular form when there is exactly one object and a plural form for all other numbers (0, 2, 3...). So, if ``count`` is @@ -366,11 +379,25 @@ use for translation:: $translator->transChoice( '{0} There are no apples|{1} There is one apple|]1,Inf[ There are %count% apples', 10, - array('%count%' => 10), + array(), 'messages', 'fr_FR' ); +.. note:: + + Starting from Symfony 3.2, the third argument of ``transChoice()`` is + optional when the only placeholder in use is ``%count%``. In previous + Symfony versions you needed to define it always:: + + $translator->transChoice( + '{0} There are no apples|{1} There is one apple|]1,Inf[ There are %count% apples', + 10, + array('%count%' => 10), + 'messages', + 'fr_FR' + ); + Retrieving the Message Catalogue -------------------------------- From 744747df0c22479ee22df3ebc43e288a4f3272b3 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Mon, 24 Apr 2017 12:54:42 +0200 Subject: [PATCH 2/3] Reworded and improved --- components/translation/usage.rst | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/components/translation/usage.rst b/components/translation/usage.rst index 7048e331c9b..7f4661f3772 100644 --- a/components/translation/usage.rst +++ b/components/translation/usage.rst @@ -253,19 +253,29 @@ all the forms as a string separated by a pipe (``|``):: To translate pluralized messages, use the :method:`Symfony\\Component\\Translation\\Translator::transChoice` method:: + // the %count% placeholder is assigned to the second argument... $translator->transChoice( 'There is one apple|There are %count% apples', 10 ); + // ...but you can define more placeholders if needed + $translator->transChoice( + 'Hurry up %name%! There is one ticket left.|There are %count% tickets left.', + 10, + // no need to include %count% here; Symfony does that for you + array('%name%' => $user->getName()) + ); + The second argument (``10`` in this example) is the *number* of objects being described and is used to determine which translation to use and also to populate the ``%count%`` placeholder. -.. note:: +.. versionadded:: 3.2 - Before Symfony 3.2, the ``transChoice()`` method required a third argument - defining the value of each translation placeholder:: + Before Symfony 3.2, the placeholder used to select the plural (``%count%`` + in this example) must be included in the third optional argument of the + ``transChoice()`` method:: $translator->transChoice( 'There is one apple|There are %count% apples', From f4525a3ecee982901ba7edbb199380469facafc5 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Mon, 24 Apr 2017 12:55:46 +0200 Subject: [PATCH 3/3] Reuse the same "apple" example of the rest of the article --- components/translation/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/translation/usage.rst b/components/translation/usage.rst index 7f4661f3772..659998753e1 100644 --- a/components/translation/usage.rst +++ b/components/translation/usage.rst @@ -261,7 +261,7 @@ To translate pluralized messages, use the // ...but you can define more placeholders if needed $translator->transChoice( - 'Hurry up %name%! There is one ticket left.|There are %count% tickets left.', + 'Hurry up %name%! There is one apple left.|There are %count% apples left.', 10, // no need to include %count% here; Symfony does that for you array('%name%' => $user->getName())