<rmcreative>

RSS

Все заметки с тегом «i18n»

Можно уточнить:

    (3)
    (3)
  1. (1)
  1. Yii2: перевод сообщений

    17 октября 2013

    Доделали полностью перевод сообщений. В Yii2 он намного лучше, чем в 1.1. Удалось выкинуть мегабайты данных CLDR и использовать вместо всего этого расширение intl. Синтаксис и возможности поразительные. Например, можно вот так:

    echo \Yii::t('app', '{n,number} is spelled as {n, spellout}', array(
        'n' => 42,
    ));

    При переводе эта строка честно выдаст нам 42 проговаривается как сорок два.

    echo \Yii::t('app', '{name} is {gender} and {gender, select, female{she} male{he} other{it}} loves Yii!', array(
        'name' => 'Snoopy',
        'gender' => 'dog',
    ));

    Выдаст без перевода Snoopy is dog and it loves Yii!.

    Множественные формы также никуда не делись:

    echo \Yii::t('app', 'There {n, plural, =0{are no cats} =1{is one cat} other{are # cats}}!', array(
        'n' => 0,
    ));

    Строка перевода будет вот такая:

    Здесь {n, plural, =0{котов нет} =1{есть один кот} one{# кот} few{# кота} many{# котов} other{# кота}}!
    

    Не обошлось, правда, без исследования исходника расширения и исправления найденных багов средствами PHP, но результат радует.

    22 комментария
  2. Yii::t и исходный язык для сообщений

    16 мая 2011

    При выборе исходного языка для сообщений, а именно того, который используется в Yii::t('app', 'message'), стоит задуматься о будущем.

    Выбрав Русский вы изначально усложняете себе жизнь: над переводами смогут работать только те, кто знает Русский. С Английским дела обстоят намного лучше: вторым языком его изучают почти во всём мире.

    5 комментариев
  3. 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' => 'огурец|огурца|огурцов|огурца',

    На выходе:

    огурца
    

    Полное описание можно найти на странице «Интернационализация» полного руководства.

    10 комментариев
  4. Yii::t и перевод множественных форм слова по CLDR

    13 января 2011

    В транк Yii попала ещё одна интересная возможность, которая облегчит жизнь всем, кто имеет дело с мультиязычными проектами, а именно поддержка перевода множественных форм слова по правилам CLDR в Yii::t.

    Теперь для человеческого перевода строк вроде «10 яблок», «51 яблоко» не нужно писать страшные правила, а процесс будет выглядеть как показано ниже.

    В коде делаем всё как обычно:

    echo '10 '.Yii::t('app', 'apple', array(10));
    echo '51 '.Yii::t('app', 'apple', array(51));

    В файле перевода для Русского записываем:

    return array(
        'apple' => 'яблоко|яблока|яблок',
    );

    Для Английского, соответственно будет:

    return array(
        'apple' => 'apple|apples',
    );

    Полный список правил доступен на сайте CLDR.

    17 комментариев