Генерация переводов
Первое что необходимо сделать это в местах, где будут использоваться переводы применить функцию Yii::t. Например:
class LoginForm extends Model
{
...
public function attributeLabels()
{
return [
'username' => Yii::t('app/user', 'Username'),
'password' => Yii::t('app/user', 'Password'),
'rememberMe' => Yii::t('app/user', 'Remember Me'),
];
}
}
После нам необходимо создать файл конфигурации для сканера сообщений. Код необходимо выполнить в командной строке с правами администратора в корневом каталоге проекта.
cd <путь к каталогу с Yii2> yii message/config-template common/config/messages.php
В Yii2 есть 3 варианта работы с переводами это
- PHP файл с переводами
- Gettext файл (*.po, *.mo)
- Перевод с БД
Я буду использовать 2 вариант Gettext. Содержимое файла common/config/messages.php меняем на:
<?
return [
'sourcePath' => 'frontend',
'languages' => ['kz'],
'translator' => 'Yii::t',
'sort' => false,
'removeUnused' => false,
'markUnused' => true,
'only' => ['*.php'],
'except' => [
'.svn',
'.git',
'.gitignore',
'.gitkeep',
'.hgignore',
'.hgkeep',
'/messages',
'/vendor',
],
// php вариант
// 'format' => 'php',
// 'messagePath' => 'frontend/messages',
// 'overwrite' => true,
// 'po' output format is for saving messages to gettext po files.
'format' => 'po',
// Root directory containing message translations.
'messagePath' => 'frontend/messages',
// Name of the file that will be used for translations.
'catalog' => 'messages',
// boolean, whether the message file should be overwritten with the merged messages
'overwrite' => true,
'ignoreCategories' => [
'yii',
],
];
Ниже приведенный код выполнит сбор всех текстов, где используется Yii::t. Необходимо создать каталог frontend/messages и выполняем в командной строке
yii message common/config/messages.php
После выполненного кода в каталоге frontend/messages появятся каталоги с файлами *.po
Использование переводов
Подключаем мультиязычность в проекте. В файле common/config/main.php добавляем следующий код в раздел components:
'i18n' => [
'translations' => [
'app*' => [
'class' => 'yii\i18n\GettextMessageSource',
'sourceLanguage' => 'ru',
],
],
],
Теперь можно в главном файле views/layout/main.php после body добавить язык по умолчанию
<?Yii::$app->language = 'kz';?>
Для удобного редактирования файлов перевода (*.po) можно использовать программу PoEdit

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