В zf2
у вас есть помощник представления translatePlural
. Который можно использовать следующим образом;
echo $this->translatePlural('car', 'cars', $num);
Итак, когда $num == 1
, это говорит car
, иначе cars
(в зависимости от правила множественного числа, но сейчас используйте английское правило).
Чтобы перевести это, по файлу. Вы должны использовать такой массив, как;
'car' => [
'auto',
'autos',
],
Итак, теперь вы получаете auto
, если $num == 1
, иначе autos
.
Если у вас есть еще какое-то место в вашем коде для перевода car
, вы можете сделать translate('car')
, но это вернется к уведомлению array to string coverstion
, что, очевидно, не то, что нам нужно.
Итак, чтобы иметь возможность также переводить только car
и использовать множественное число, мне теперь нужно изменить код на что-то вроде;
echo $this->translatePlural('car_plural', 'cars', $num);
И языковая конфигурация;
'car_plural' => [
'auto',
'autos',
],
'car' => 'auto',
И вам нужно добавить английский перевод для car_plural
. Таким образом, сообщения по умолчанию translatePlural
становятся практически бесполезными в настройках по умолчанию, если только вы не используете translatePlural
не для перевода, а просто для выбора между car
или cars
и не переводите его.
Но если вместо этого translatePlural
просто посмотрел на $num
, тогда используйте pluralRule
для выбора между единственным (автомобиль) и множественным (автомобили). Затем используйте помощник translate
для перевода единственного или множественного числа, у вас может быть простая конфигурация, например, и сообщение по умолчанию внезапно снова заработает;
'car' => 'auto',
'cars' => 'autos',
Никаких странных ключей, вам не нужен английский перевод или что-то еще странное.
Итак, вопрос /tldr;
Почему во множественном числе ZF2 используется массив, а не просто проверить, какой из них использовать, и перевести его? Мне кажется, это лучший метод.