Генерация переводов
Первое что необходимо сделать это в местах, где будут использоваться переводы применить функцию 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
Добавить комментарий