Интернационализация — Yii2

Интернационализация (i18n) является частью процесса разработки приложения, которое может быть адаптировано для нескольких языков без изменения программной логики. Это особенно важно для веб-приложений, так как потенциальные пользователи могут приходить из разных стран.

В Yii приложении определены два языка: исходный язык и язык перевода. На исходном языке написаны сообщения в коде приложения. Если исходным языком задан английский, то в коде можно использовать конструкцию:

echo \Yii::t('app', 'I am a message!');

Язык перевода определяет, в каком виде будет отображаться текущая страница, т.е. на какой язык будут переведены оригинальные сообщения. Этот параметр может быть задан в конфигурации приложения:

<?php
/*
 * Файл config/web.php
 */
$config = [
    /* ... */
    'language' => 'ru-RU', // язык перевода — русский
    /* ... */
];

Кроме того, значение языка перевода можно установить в самом приложении:

\Yii::$app->language = 'ru-RU';

Значение по умолчанию для исходного языка — английский.

Перевод сообщений

<?php
/*
 * Файл config/web.php
 */
$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    // язык перевода — русский
    'language' => 'ru-RU',
    'components' => [
        /* ... */
        'i18n' => [
            'translations' => [
                'app*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    // все переводы будут в файле messages/ru_RU/app.php
                    'fileMap' => [
                        'app' => 'app.php',
                    ],
                ],
            ],
        ],
    ],
    /* ... */
];
<?php
/*
 * Файл messages/ru_RU/app.php
 */
return [
    'Create' => 'Добавить',
    'Update' => 'Обновить',
    'Delete' => 'Удалить',
    'Submit' => 'Отправить',
];

Кроме хранения переводов в php-файлах (используя PhpMessageSource), Yii2 предоставляет ещё два класса:

  • yii\i18n\GettextMessageSource, использующий GNU Gettext для MO или PO файлов.
  • yii\i18n\DbMessageSource, использующий базу данных.

Leave a Comment