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 Интернационализация