2014-09-04 48 views
2

所以我on Rails的3.2使用Ruby與真棒國際化模塊的末尾單獨的語言鍵。Rails的國際化:在樹

我仍然不是100%肯定的文件和關鍵結構是如何工作的,但我得到了它在我的情況下工作:

my_file.yml(顯然文件名無所謂):

en: 
    first: 
    second: 
     key: 'Hello Stackoverflow' 
fr: 
    first: 
    second: 
     key: 'Bonjour Stackoverflow' 

在我的觀點:

= t('first.second.key') # will return the sting 

但我寧願有以下路徑:

first: 
    second: 
    key: 
     en: 'Hello Stackoverflow' 
     fr: 'Bonjour Stackoverflow' 

我能做到這一點?

我看到了如下優點這樣做:

  • 容易維護:如果一個鍵被改成了需要改變的只有一次
  • 更容易翻譯:不同的語言版本alonside。如果翻譯缺失
  • 更好的文件管理很明顯:通過組織內容文件,而不是語言
  • 更好地處理默認值:想像一個關鍵是不要用任何語言進行翻譯。你可以寫

translations.yml

not_translatable_key: 'Stackoverflow' 
translatable_key: 
    en: 'is awesome' 
    fr: 'est génial' 

如果這是不可能的,我可以定製國際化我自己的方式來實現這一目標。

回答

1

首先,警告:您如何獲得自定義I18n值(如count)?

如果你真的想這樣做,也許你可以覆蓋的/i18n/backend/base.rbload_yml功能...

def load_yml(filename) 
    begin 
    result = YAML.load_file(filename) 
    reverse_keys(result) 
    rescue TypeError, ScriptError, StandardError => e 
    raise InvalidLocaleData.new(filename, e.inspect) 
    end 
end 

然後,功能reverse_keys返回到標準的I18n文件格式...

h = { :translatable_key => { :en => 'is awesome', :fr => 'est trop cool' } } 

reverse_keys(h) 
=> { :en => { :translatable_key => 'is awesome' }, 
    :fr => { :translatable_key => 'est trop cool' } } 
+0

謝謝,我要去嘗試,圍繞。你可以詳細'定製的I18n values'預警多一點?我可能確實錯過了一些東西...... – 2014-09-04 16:55:34