2015-04-07 194 views
5

我在我的Yii2應用程序中使用基於關鍵字的翻譯(我知道,這不是最佳選擇,但我沒有其他)。我已經使用關鍵字準備@app/messages/pl/app.php@app/messages/en/app.php文件與翻譯字符串,而不是全功能的句子或單詞:翻譯源語言在Yii2應用程序中不起作用

<?php 
    return [ 
     'name_english'=>'Name in English', 
     'keywords_english'=>'Keywords in English' 
    ]; 
?> 

我已經把我的應用程序使用波蘭語言作爲默認:

'language' => 'pl', 
'sourceLanguage' => 'en', 

而且我調用翻譯:

Yii::t('app', 'keywords_english'); 

一切正常,當語言實際上設置爲基礎,波蘭pl):

enter image description here

但是,當我將其更改爲英語en;無論是在運行時或更改應用程序配置)設置Yii::$app->language,不進行翻譯和我得到keywords_english

enter image description here

我已經把die()@app/messages/pl/app.php@app/messages/en/app.php文件開始,我可以清楚地看到,當語言設置爲英文時,第二個文件未被Yii2包含(應用程序運行如下),而當語言爲波蘭文時,包含第一個文件,並且該應用程序流程中斷die()

我錯過了什麼?爲什麼Yii2不使用@app/messages/en/app.php文件的翻譯,如果語言設置爲Englishen)?

編輯:默認情況下,我沒有改變默認i18n組件配置在我的應用程序的配置,因爲我發現沒有必要的。翻譯文件存儲在默認位置(@app/messages/<language>/),並使用默認類別(yii\i18n\PhpMessageSource)。這適用於除sourceLanguage之外的所有語言。在某些時候,我試圖改變配置:

'i18n' => [ 
    'translations' => [ 
     '*' => [ 
      'class' => 'yii\i18n\PhpMessageSource', 
      'sourceLanguage' => 'en', 
      'basePath' => '@app/messages' 
     ], 
    ], 
], 

但是,它並沒有帶來變化(何必呢 - 它仍然使用默認設置)。

+0

中設置的類別設置從配置顯示'i18n' –

+0

查看更新的問題。我沒有以任何方式配置'i18n'。我爲什麼要?我想使用默認設置,這應該適用於'en',如果它適用於'pl',對吧? – trejder

+1

嘗試:''translations'=> [''app''=>'''''>'yii \ i18n \ PhpMessageSource', 'basePath'=>'@app/messages', 'sourceLanguage' =>'en_US', 'fileMap'=> [ 'app'=>'app.php', ], ],' –

回答

6

根據samdark at Yii Forum,這是設計。如果language = sourceLangage,則不執行翻譯。

要解決這個問題並強制轉換,必須將forceTranslation設置爲true

因此,必須添加/修改i18n成分components應用程序的配置一節中類似這樣的方式:

'i18n' => [ 
    'translations' => [ 
     'app' => [ 
      'class' => 'yii\i18n\PhpMessageSource', 
      'forceTranslation' => true 
     ], 
    ], 
], 
1

解決方案:

'translations' => [ 
      'app*' => [ 
       'class' => 'yii\i18n\PhpMessageSource', 
       'basePath' => '@app/messages', 
       'sourceLanguage' => 'en_US', 
       'fileMap' => [ 
        'app' => 'app.php', 
       ], 
      ], 

答案的評論:

1)'sourceLanguage' => 'en_US' - 您必須使用完整的語言環境。由於英文區域設置可能是en_US,en_UK和e.t.c. The format for the language/locale is ll-CC where ll is a two- or three-letter lowercase code for a language according to ISO-639 and CC is the country code according to ISO-3166. from [doc][1]

2)在關鍵使用類別。並在Yii::t('category'...)