2012-03-30 81 views
5

首先要確認的是我不打算在數據庫中提供多種語言的任何東西。我只是在談論頁面上的文字。在Rails 3中推薦的I18n導軌方式3

我感到有點困惑的聲明Rails Guide

的國際化庫負責區域設置鍵務實的態度(經過一番討論),只包括區域(「語言」)的部分,如: en,:pl,而不是區域部分,例如:en-US或:en-GB,傳統上用於區分「語言」和「區域設置」或「方言」。許多國際應用程序僅使用語言環境的「語言」元素,例如:cs,:th或:es(捷克語,泰語和西班牙語)。但是,不同語言羣體之間也存在區域差異,這可能很重要。例如,在:en-US區域設置中,您將有$作爲貨幣符號,而在:en-GB中,您將有£。沒有什麼能阻止你以這種方式區分區域設置和其他設置:你只需在en-GB字典中提供完整的「英語 - 英國」語言環境。

假設我想擁有一套完整的英文本地化版本,其中包含美國版和英文版。

所以我需要有en.ymlen-US.ymlen-GB.yml,在語言文件夾3個文件,

-- Rails Root 
    |-- config 
    |-- locale 
     | 
     |-- en.yml 
     |-- en-US.yml 
     |-- en-GB.yml 

而當我設I18n.locale = 'en-US'那麼它會使用文本翻譯中en-US.yml。推薦使用軌道3中的I18n嗎?

而且它的好處是,我保持相同的部分en.yml(如星期一星期二,他們是在美國和GB相同),並保持不同的東西分隔的文件en-US.ymlen-GB.yml(像貨幣符號)?是否有可能導軌可以自動找到en.yml中的相同部分?正如我測試,它不支持開箱即用

+2

http://stackoverflow.com/a/7886246/772874 – 2012-03-30 08:36:57

回答

5

爲避免重複en-US和en-GB的所有翻譯,您可以爲不同的翻譯定義自定義回退路線。

I18n.fallbacks.map(:"en-GB" => :"en") 

I18n.fallbacks[:"en-GB"] # => [:"en-US", :en] 

所以應該EN-GB不是有一定的翻譯,你可以回落到en.yml或EN-US.yml。通過這種方式,您可以在en-US.yml和en-GB.yml中保留區域特定的翻譯,而他們共有的所有內容都可以在en中,並且當您無法找到en-US.yml或en-GB.yml中的特定翻譯。