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

Jak*_*ter 32 ruby translation localization ruby-on-rails rails-i18n

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

def body_color_enum
  [
    ['Aqua', '#009c9c'],
    ['Grey', '#6d6e71'],
    ['Yellow', '#ffe600'],
    ['White', 'white']
  ]
end
Run Code Online (Sandbox Code Playgroud)

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

en:
  group:
    hero:
      hex1: '#6d6e71'
      name1: 'Dark grey'
      hex2: '#ccc'
      name2: 'Light grey'
      hex3: '#0099ce'
      name3: 'Blue'
      hex4: '#ffffff'
      name4: 'White'
Run Code Online (Sandbox Code Playgroud)

我试过这个:

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

但我得到这个错误:

undefined method `t' for #<Group:0x007fabad847ac8>
Run Code Online (Sandbox Code Playgroud)

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

Bro*_*tse 86

呼叫:

I18n.t 
Run Code Online (Sandbox Code Playgroud)

而不是简单t.t是一个只在视图中可用的辅助方法,将整个逻辑委托给I18n模块.

更新:

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

  • 解释原因:这是因为`t`是一个视图助手.模型(以及其他地方)中没有查看帮助程序,因此需要完全调用"I18n.t". (8认同)
  • 值得一提的是,`I18n.t`与在视图中调用`translate`并不相同https://github.com/rails/rails/blob/v5.1.1/actionview/lib/action_view/helpers/translation_helper.rb #L18 (2认同)