Интернационализация (i18n) является частью процесса разработки приложения, которое может быть адаптировано для нескольких языков без изменения программной логики. Это особенно важно для веб-приложений, так как потенциальные пользователи могут приходить из разных стран.
В Yii приложении определены два языка: исходный язык и язык перевода. На исходном языке написаны сообщения в коде приложения. Если исходным языком задан английский, то в коде можно использовать конструкцию:
echo \Yii::t('app', 'I am a message!');
Язык перевода определяет, в каком виде будет отображаться текущая страница, т.е. на какой язык будут переведены оригинальные сообщения. Этот параметр может быть задан в конфигурации приложения:
<?php
/*
* Файл config/web.php
*/
$config = [
/* ... */
'language' => 'ru-RU', // язык перевода — русский
/* ... */
];
Кроме того, значение языка перевода можно установить в самом приложении:
\Yii::$app->language = 'ru-RU';
Значение по умолчанию для исходного языка — английский.
Перевод сообщений
<?php
/*
* Файл config/web.php
*/
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
// язык перевода — русский
'language' => 'ru-RU',
'components' => [
/* ... */
'i18n' => [
'translations' => [
'app*' => [
'class' => 'yii\i18n\PhpMessageSource',
// все переводы будут в файле messages/ru_RU/app.php
'fileMap' => [
'app' => 'app.php',
],
],
],
],
],
/* ... */
];
<?php
/*
* Файл messages/ru_RU/app.php
*/
return [
'Create' => 'Добавить',
'Update' => 'Обновить',
'Delete' => 'Удалить',
'Submit' => 'Отправить',
];
Кроме хранения переводов в php-файлах (используя PhpMessageSource), Yii2 предоставляет ещё два класса:
- yii\i18n\GettextMessageSource, использующий GNU Gettext для MO или PO файлов.
- yii\i18n\DbMessageSource, использующий базу данных.