Yii2 локализация

Yii2 локализация

За локализацию приложения Yii2 отвечает класс yii\i18n\I18N. Данные локазиции могут зраниться как в БД так и просто в файле - описание этого способа и описывается в данной статье.

Компонент il8n как и некоторые другие включены в приложение по-умолчанию и не требуют явной записи в файле конфига, но если мы собираемся его править то придется прописать его там явно.

...,
// язык перевода определяет, в каком виде будет отображаться текущая страница
'language' => 'en-US', // 'ru-RU'
...,
'components' => [
    'i18n' => [
        'translations'=>[
            // app* - это шаблон, который определяет, какие категории
            // обрабатываются источником. В нашем случае, мы обрабатываем все, что начинается с app
            'app*'=>[
                'class'=>yii\i18n\PhpMessageSource::className(),
                //
                'basePath'=>'@app/messages',
                // исходный язык
                'sourceLanguage'=>'ru-RU',
                // определяет, какой файл будет подключаться для определённой категории
                'fileMap'=>[
                    'app'=>'app.php',
                    'app/error'=>'error.php',
                ]
            ],
        ]
    ],
...

Если вы не хотите конфигурировать fileMap, можно положиться на соглашение, что название категории является именем файла. Например, категория app/error относится к файлу app/error.php в рамках basePath.

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

// app - категория
echo \Yii::t('app', 'Авторизация');

Если язык приложения en-US, то переводя сообщение \Yii::t('app', 'Авторизация') Yii будет искать файл @app/messages/en-US/app.php, чтобы получить список доступных переводов:

// Файл перевода @app/messages/en-US/app.php
return [
    'Авторизация'=>'Authorization',
    ...
];

Переводы по умолчанию

    ...,
'components' => [
    'i18n' => [
        'translations'=>[
            // переводы по умолчанию для категорий, которые не попадают в другие переводы
            '*' => [
                'class' => 'yii\i18n\PhpMessageSource'
            ],
    ...
echo Yii::t('not_specified_category', 'message from unspecified category');

- Перевод будет загружен из файла @app/messages/<LanguageCode>/not_specified_category.php

Написано на основании статьи: Yii2 Интернационализация

Добавить комментарий


Защитный код
Обновить


Кто на сайте
Сейчас 9 гостей онлайн