Интернационализация (i18n) является частью процесса разработки приложения, которое может быть адаптировано для нескольких языков без изменения программной логики. Это особенно важно для веб-приложений, так как потенциальные пользователи могут приходить из разных стран.
В Yii приложении определены два языка: исходный язык и язык перевода. На исходном языке написаны сообщения в коде приложения. Если исходным языком задан английский, то в коде можно использовать конструкцию:
1 | echo \Yii::t( 'app' , 'I am a message!' ); |
Язык перевода определяет, в каком виде будет отображаться текущая страница, т.е. на какой язык будут переведены оригинальные сообщения. Этот параметр может быть задан в конфигурации приложения:
1 2 3 4 5 6 7 8 9 | <?php /* * Файл config/web.php */ $config = [ /* ... */ 'language' => 'ru-RU' , // язык перевода — русский /* ... */ ]; |
Кроме того, значение языка перевода можно установить в самом приложении:
1 | \Yii::$app->language = 'ru-RU'; |
Значение по умолчанию для исходного языка — английский.
Перевод сообщений
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?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, использующий базу данных.