2015-09-28 153 views
6

我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', 
       ], 
      ], 
     ], 
    ], 
] 

然後我在common/config:

添加 i18n.php
<?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

+0

要使用基於密鑰的消息文件,請確保您啓用了'forceTranslation',因爲默認語言的應用程序不會自動翻譯消息 –

回答

10

你只要按照這個步驟......

步驟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, 
]; 

注:確保所有必需的語言添加到 '語言' 陣列。在上面的例子中,我爲生成Yii2框架多語言添加了英語和俄語。

步驟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請求,查詢代碼。

注意:在任何模型中,通過Gii控制器生成,您可以看到啓用I18n票證選擇,只需爲多語言啓用此選項即可。 GII工具將自動產生一個模型已經預先定義如下,由於frontentbackend文件夾:

Yii::t('frontend', 'Translatable String'); 

Yii::t('backend', 'Translatable String'); 

步驟5:運行從Yii2 app文件夾此命令行:

yii message/extract @common/config/i18n.php 

這命令行會在common/messages裏面生成Yii2 Framework多語言翻譯文件,並分成frontendbackend文件夾。

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.phpfrontend.php文件和編輯。