Перевод Yii2 не работает

У меня есть расширенный шаблон 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 и отредактируйте.