Yii::t и перевод множественных форм слова по CLDR 2
16 января 2011
После мощного брейншторма первоначальной реализации и сбора идей воедино, было решено дополнить перевод множественных форм некоторыми полезными штуками.
Подстановка параметров, число передаётся как {n}
Yii::t('test', '{username} has a cucumber|{username} has {n} cucumbers', array(5, '{username}' => 'samdark'));
Получим:
samdark has 5 cucumbers
Замена параметра {n}
function convertNumber($number) { // число прописью return $number; } Yii::t('test', '{n} cucumber|{n} cucumbers', array(5, '{n}' => convertNumber(5)));
Получим:
five cucumbers
Дробные числа
Yii::t('app', 'cucumber|cucumbers', 1.5);
В файле перевода за дроби в Русском отвечает четвёртый параметр:
'cucumber|cucumbers' => 'огурец|огурца|огурцов|огурца',
На выходе:
огурца
Полное описание можно найти на странице «Интернационализация» полного руководства.
Комментарии RSS по email OK
Ура, мой репорт даром не прошел :)
I Love Yii!
А как можно сделать тоже самое, но когда сайт не многоязычный ?
Ekstazi Ну решение в лоб это использование того же Yii::t(), но не создавая файлов перевода и установив правильный язык приложения через соотв. свойство. Но наверняка есть какой-то способ элегантней.
У меня есть тоже фичареквест: Хочется что-бы для числа "0" также можно было задать значение, например, "Нет огурцов". Чтобы не использовать дополнительную проверку. Или уже можно как-то?
Ekstazi, так же использовать
Yii::t
, но выставитьsourceLanguage
иlanguage
одинаковыми. Вот только, если потребуется перевод надо будет по-быстрому перевести все параметры на английский, иначе переводчикам будет худо.Tokolist, для нуля в Русском используется то же значение, что и для
many
. Изменить это вряд-ли получится т.к. правила не наши, а взяты из CLDR.Sam Жаль :( Придется вот так вот делать.
echo $cucumbersCount<1 ? Yii::t('test','No cucumbers') : Yii::t('test', '{n} cucumber|{n} cucumbers', array($cucumbersCount));
Достаточно sourceLanguage т.к. language по умолчанию равен sourceLanguage. http://code.google.com/p/yii/source/browse/tags/1.1.5/framework/base/CApplication.php#275
PS мне почему-то на емейл не приходят оповещения о новых комментариях.
Sam, вовсе нет, как вариант язык приложения по умолчанию указать русский, и с него уже переводить на остальные языки.
Tokolist, скорее всего в спаме.
Ekstazi, Русский менее распространён, чем Английский, поэтому переводить с него сможет меньшее количество переводчиков.
Письма не приходят вообще, в т.ч. нету в спаме, ну да ладно это не смертельно :)