2014-09-04 73 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