Search code examples
symfonytranslationplural

Symfony2 plural translation with specific rules (when number ends in specific digit)


I'm trying to translate results count to Lithuanian and there are some specific rules. I'll try to explain them:

  • All counts ending with zero (0, 10, 20 ... 1050, 1060...) and between 12 & 19 inclusive (12...19)
  • All counts ending with one, except ending with 11 (1, 21, 31 ... 1221, 1231... but not 11, 111, 211 ... 2311, 2411)
  • All other not listed above (2...9 inclusive and more than 21 to which above rules does not apply)

I tried something like this (using YAML), but even number 40 doesn't match the rules:

'%count% Results, ': '{0,*0}%count% rezultatų |{1,*1}%count% rezultatas |]1,10[%count% rezultatai |]10,20[%count% rezultatų '

Is it even possible to do something like that using YAML? With the above example I get:

An exception has been thrown during the rendering of a template ("Unable to choose a translation for "{0,*0}%count% rezultatų |{1,*1}%count% rezultatas |]1,10[%count% rezultatai |]10,20[%count% rezultatų " with locale "lt". Double check that this translation has the correct plural options (e.g. "There is one apple|There are %count% apples").")


Solution

  • So I was trying to solve my problem following Wouters answer and found out that there is Symfony\Component\Translation\PluralizationRules and Lithuanian is already there. All I had to do is remove intervals from my translation line and it works as expected now.

    '%count% Results, ': '%count% rezultatas |%count% rezultatai |%count% rezultatų '