Thanks for your explanation. It's clearer now :-) Documentation was not clear on this point...
your link for pluralforms is now in my favorite link (would be very usefull later, i think) 2013/10/4 Bas Kamer <[email protected]> > Hi > > Well there are two thing you are doing incorrect. > > The array for plurals should contain an indexed based array, with as many > translation the plural rules dictates for the language. A default rule is > 'nplurals=2; plural=n != 1;' meaning there are two plural forms for a > language. The first (index based 0) if the number given is not 1. So for 0 > use index 1, for 1 use index 0, for 2 use index 1, etc… The array should > contain these indexes. > > Here are more complex rules for other languages > http://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html > > I see that for french the rule is 'nplurals=2; plural=(n > 1);' index > position 0 (jour) for zero and one days, index position 1 (jours) for more > than one day. > > Perhaps now you see why you get j and o as translations. > > The second thing you should be doing is use placeholders for the actual > number given. Since in every language the position of the number relative > to the translation could be different. I found it useful to use anything > that can be fed into sprintf. Doing it this way also prevent regular > translations to be overwritten by the plural forms, since the keys (or > messages) MUST be unique within one textdomain... > > return array( > '' => array( > 'plural_forms' => 'nplurals=2; plural=n!=1;' > ), > 'day => 'jour', // regular non plural translation > '%s day' => array( > '%s jour', > '%s jours', > ), > ); > > > usage is than with the placeholders > $translator->translatePlural('%s day', %s days', $n); > $translator->translate('day'); > > > The translatePlural method will use the first argument as the message (or > lookup key) to be translated. It will return it when no plural translation > has been found and the plural rules dictates an index position of 0. The > second argument is only used when no plural translation has been found and > if the plural rule dictates the second plural form is appropriate. As far > as I know, these plural fallbacks can only work correctly if the plural > rule defines maximum of two possible plural forms - as there are no more > fallback arguments. > > Hope this explains a bit > > > On 17 sep. 2013, at 17:18, MadCat <[email protected]> wrote: > > > Hi all, > > > > I have a problem using translatePlural helper (translation in php array) > > My translator is well defined, no problem with other translations in > website > > > > Doing this in a view: > > > > $this->translatePlural('day', 'days', $numberDay); > > > > In my translation file (named fr_FR.php) > > > > return array( > > ... > > 'day' => 'jour', > > 'days' => 'jours' > > ) > > > > In French, 'day' should be 'jour' and 'days' should be 'jours'. > > > > But i get: > > 'day' translated by 'j' > > 'days' translated by 'o' > > > > > > Is there a special syntax to translate plural using phparray translator ? > > > > Thanks > >
