2014-01-16 46 views
28

我有我的模式是:访问翻译文件(国际化)轨道模型

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方法中设置我的值。

+0

'I18n.t( 'group.hero.name1')' –

回答

71

电话:

I18n.t 

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

UPDATE:

正如在评论中提到的,视图助手不仅委托给I18n模块,它可以确保您可以使用默认范围为好。

+7

要解释原因:出现这种情况是因为't'是一个视图助手。视图助手在模型(其他地方)中不可用,因此需要对'I18n.t'完全调用。 – joanwolk

+1

可爱的东西。我需要这个在一个“单元格”内访问i18n - 像魅力一样工作。 –

+1

值得一提的是,'I18n.t'与在视图中调用'translate'不一样https://github.com/rails/rails/blob/v5.1.1/actionview/lib/action_view/helpers/translation_helper。 rb#L18 –

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

对于像德语这样的语言,每个名词都以大写字母开头的语言不起作用。大写是语言本身的问题,不应该在代码 – BroiSatse

+0

内“固定”好点,谢谢 –