2013-02-01 51 views
8

रेल i18n में, कैसे का उपयोग करने के लिए एक निश्चित कुंजी के लिए सभी मूल्यों को प्राप्त करने के लिए निम्न:रेल i18n एक निश्चित कुंजी के लिए सभी मान कैसे प्राप्त करें?

translations = I18n.backend.send(:translations) 

सभी कुंजियों मिल

मैं उदाहरण के लिए एक निश्चित अनुभाग प्राप्त करने में सक्षम होने की जरूरत है केवल "घर"

en: 
    home: 
    test: test 

उत्तर

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, जो ट्रॅन का खुलासा नहीं करता है आप के लिए स्लैश (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