从rails模型中访问转换文件(i18n)

时间:2014-01-16 12:21:44

标签: ruby-on-rails ruby localization translation rails-i18n

我的模型中包含的内容是:

def body_color_enum
  [
    ['Aqua', '#009c9c'],
    ['Grey', '#6d6e71'],
    ['Yellow', '#ffe600'],
    ['White', 'white']
  ]
end

我希望这些值来自翻译文件'en.yml'

en:
  group:
    hero:
      hex1: '#6d6e71'
      name1: 'Dark grey'
      hex2: '#ccc'
      name2: 'Light grey'
      hex3: '#0099ce'
      name3: 'Blue'
      hex4: '#ffffff'
      name4: 'White'

我试过这个:

def body_color_enum
  [
    [t('group.hero.name1'), '#009c9c'],
    ['Grey', '#6d6e71'],
    ['Yellow', '#ffe600'],
    ['White', 'white']
  ]
end

但是我收到了这个错误:

undefined method `t' for #<Group:0x007fabad847ac8>

所以我问的是如何从模型中访问我的本地文件,以便我可以在body_color_enum方法中设置我的值。

2 个答案:

答案 0 :(得分:82)

呼叫:

I18n.t 

而不是简单的tt是仅在视图中可用的辅助方法,将整个逻辑委派给I18n模块。

更新:

正如评论中所提到的,视图帮助器不仅委托给I18n模块,它还确保您也可以使用默认范围。

答案 1 :(得分:1)

# constants
def self.option_enum
    [ 
      [ I18n.t('enum.amount'), 'A' ], 
      [ I18n.t('enum.percentage'), 'P' ] 
    ]
end