У меня есть расширенный шаблон Yii2, я хочу установить перевод для своих интерфейсных просмотров, вот что я сделал:
frontend/config/main.php:
'sourceLanguage'=>'en-US', 'language'=>'en-US', 'components' => [ 'i18n' => [ 'translations' => [ 'app*' => [ 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@common/messages', 'sourceLanguage' => 'en-US', 'fileMap' => [ 'app' => 'app.php', 'app/error' => 'error.php', ], ], ], ], ]
то я добавил i18n.php
в common/config:
<?php return [ 'sourcePath' => __DIR__. '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR, 'languages' => ['fr-FR','en-US'], //Add languages to the array for the language files to be generated. 'translator' => 'Yii::t', 'sort' => false, 'removeUnused' => false, 'only' => ['*.php'], 'except' => [ '.svn', '.git', '.gitignore', '.gitkeep', '.hgignore', '.hgkeep', '/messages', '/vendor', ], 'format' => 'php', 'messagePath' => __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'messages', 'overwrite' => true, ];
и common/messages/en-US/app.php:
<?php return[ // Menu texts 'menu.login'=>'login', ];
и я использовал его в представлениях как: Yii::t('app', 'menu.login');
но перевод не сработал, он отображается как menu.login
Вы просто следуете этим шагам ……
Шаг 1. В common
каталоге создайте папку messages
.
Шаг 2. Создайте файл i18n.php
внутри каталога common/config
со следующим содержимым:
<?php return [ 'sourcePath' => __DIR__. '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR, 'languages' => ['en-EN', 'ru-RU'], //Add languages to the array for the language files to be generated, here are English and Russian. 'translator' => 'Yii::t', 'sort' => false, 'removeUnused' => false, 'only' => ['*.php'], 'except' => [ '.svn', '.git', '.gitignore', '.gitkeep', '.hgignore', '.hgkeep', '/messages', '/vendor', ], 'format' => 'php', 'messagePath' => __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'messages', //path of messages folder created above 'overwrite' => true, ];
Примечание. Обязательно добавьте все необходимые языки в массив 'languages'. В приведенном выше примере я добавил английский и русский для создания многоязыкового языка Yii2 Framework.
Шаг 3: добавьте компонент i18n
в config
файл common/main.php
следующим образом:
'components' => [ ... 'i18n' => [ 'translations' => [ 'frontend*' => [ 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@common/messages', ], 'backend*' => [ 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@common/messages', ], ], ], ... ],
Шаг 4:
Добавьте языковой модуль в общий файл конфигурации, чтобы использовать язык по умолчанию в вашем приложении, например:
'language' => 'en-EN'
внутри common/main.php
.
Теперь вы можете использовать Yii::$app->language = 'en-EN'
в любой среде выполнения, такой как URL-запрос, код запроса.
Примечание. В любой модели, Controller Generate by Gii вы можете увидеть вариант Enable I18n ticket, просто включите это для языка Multi. Gii Tool автоматически сгенерирует модель, предварительно определенную ниже, из-за frontent
или backend
:
Yii::t('frontend', 'Translatable String'); Yii::t('backend', 'Translatable String');
Шаг 5: Запустите эту командную строку из папки приложений Yii2:
yii message/extract @common/config/i18n.php
Эта командная строка будет генерировать файлы перевода нескольких языков Yii2 Framework внутри common/messages
и делиться на frontend
и backend
папки.
For example: Yii message will generate the translation files as follows: common/ ..... messages/ en-EN/ backend.php frontend.php ru-RU/ backend.php frontend.php .....
Если вы хотите отредактировать текст перевода, просто откройте backend.php
или frontend.php
и отредактируйте.