2013-02-01 82 views

回答

12

I18n.backend.send(:translations)的返回值只是一個散列值,所以只需傳入相應的鍵即可訪問子集。

例如如果您有:

en: 
    foo: 
    bar: 
     some_term: "a translation" 
     some_other_term: "another translation" 

然後你就可以得到哈希的子集bar下有:

I18n.backend.send(:translations)[:en][:foo][:bar] 
#=> { :some_term=>"a translation", :some_other_term => "another translation"} 
+2

感謝我在此期間發現I18n.t('home')的作品也是 – Rubytastic

+0

不錯,謝謝!這對我很好,因爲我正在尋找一種方法來獲取實際的密鑰名稱。 – richddr

5

默認的I18n後端返回一切都是I18n::Backend::Simple,不暴露TRAN給你看。 (I18.backend.translations是一種受保護的方法。)

這通常不是一個好主意,但如果您確實需要此信息並且無法解析文件,則可以擴展後端類。

class I18n::Backend::Simple 
    def translations_store 
    translations 
    end 
end 

然後,您可以撥打I18n.backend.translations_store來獲得解析的翻譯。你可能不應該依賴這個作爲長期戰略,但它會讓你獲得你現在需要的信息。

0

設置I18n.locale然後做I18n.t正常工作,如:

def self.all_t(string) 
    I18n.locale = :en 
    en = I18n.t("pages.home.#{string}") 
    I18n.locale = :fr 
    fr = I18n.("pages.home.#{string}") 
    [en, fr] 
end 
相關問題