2014-01-16 48 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

內「固定」好點,謝謝 –