2016-08-17 37 views
1

我是i18n主題的新手,我嘗試設置國際化的web應用程序。 通讀不同的文檔和例子,它看起來像,都提供了可能性的作品幾乎相同,這意味着:Yii2 i18n翻譯和冗餘源語言文本

在視圖方面我在源語言的文本:

echo Yii:t('contact','This is a log text about contact informations.');

在平移文件(與CPhpMessageSource或GNU的gettext格式)或轉換表,我必須再次重複這個源文本作爲錨,就像在我的-DE立案CPhpMessageSource:

return array(
    'This is a log text about contact informations.' 
     => 'Des is a langa Text üba Kontakt Infoamadiona.', 
); 

這意味着,我必須保持源文本冗餘(視圖和非常單一的翻譯文件),這不是維護內容的最佳選擇。

引起我可以設置一個ID /錨代替源文本的,如:

echo Yii:t('contact','ContactInfo');

返回陣列( '的ContactInfo' =>「DES是一種蘭加文本UBA KONTAKT Infoamadiona。 ' );

但在這種情況下,我不能注入動態元素/變量到文本中。

我的問題:

  1. 請問這樣的ID /錨的概念(情況2)與Yii2 sourceLanguage機制是否有效?
  2. 那麼,我是否瞭解i18n Yii-Application設計的概念?
  3. 是否可以做這樣的事情

(sourceLanguage和TARGETLANGUAGE只有一次)

return array(
    'ContactInfo' => array(
     'en-US' => 'This is a log text about contact informations.', 
     'by-DE' => 'Des is a langa Text üba Kontakt Infoamadiona.' 
    ) 
); 
+0

請參閱我的答案http://stackoverflow.com/questions/32831288/yii2-translation-does-not-work/32835641#32835641 – vishuB

回答

1

[Yii的2]後面需要重複翻譯的原文的原因是爲了提供這個文本的標識符。
可以使用某種類型的標籤,而不是但你不能得到默認的文本(未標記)時,有沒有必要轉換(目標語言是相同的源語言)除非力它在配置:

'components' => [ 
    'i18n' => [ 
     'translations' => [ 
      'category' => [ 
       // ... 
       'forceTranslation' => true, 
      ], 
     ], 
    ], 
], 

現在你可以使用\Yii::t('category', 'Label1')和郵件文件,你可以添加:

return [ 
    'Label1' => 'This is expanded text behind the Label1.', 
]; 

至於變量在這裏你CA n使用它們沒有任何問題,即:

\Yii::t('category', 'Label1', ['aaa' => 1, 'bbb' => 2]) 

並在消息文件中:

return [ 
    'Label1' => 'Label1 with variables: aaa is {aaa} and bbb is {bbb}.', 
]; 

至於問題#3 - 這是不可能沒有一些特別的準備。

+0

這意味着:在翻譯文本中使用變量,而不是標籤/ sourceLanguage將工作! ? –

+0

我不確定我是否遵循...有什麼區別? – Bizley

+0

我雖然,我必須從視圖,其中翻譯標籤存在,直到消息文件傳遞參數佔位符。 (如:「這是al標籤 - 文本參數:{aaa}」)。但在你的例子中,我只能看到消息文件中的參數佔位符。這是很好的知道。 –