2013-02-01 9 views

答えて

12

戻り値I18n.backend.send(:translations)はちょうどハッシュなので、適切なキーを渡すだけでサブセットにアクセスできます。

あなたが持っている場合:

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

次にあなたがbar下ハッシュのサブセットを取得することができます:

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

おかげで私その間にI18n.t( 'home')も動作することがわかりました – Rubytastic

+0

ニース、ありがとう!実際のキー名を取得する方法を探していたので、これは素晴らしいものでした。 – richddr

5

デフォルトの国際化のバックエンドの下にあるすべてのものを返すTRANを公開しない、I18n::Backend::Simpleですあなたにスレートを送る。 (I18.backend.translationsは保護されたメソッドです)

この情報は本当に必要で、ファイルを解析できない場合は、バックエンドクラスを拡張することができます。

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

次に、I18n.backend.translations_storeを呼び出して、解析された翻訳を取得できます。おそらく長期的な戦略としてこれに頼るべきではありませんが、今必要な情報が得られます。

0

その後、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 
関連する問題