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