Skip to content

Simplified the use of transChoice() #7205

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 39 additions & 2 deletions components/translation/usage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -253,16 +253,39 @@ 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 apple left.|There are %count% apples left.',
10,
array('%count%' => 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.

.. versionadded:: 3.2

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',
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
Expand Down Expand Up @@ -366,11 +389,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
--------------------------------

Expand Down