2010-02-24 10 views
35

में अनुपलब्ध होने पर अनुवाद डिफ़ॉल्ट भाषा में वापस आना, मैं "अनुवाद गायब" के बजाय डिफ़ॉल्ट लोकेल से अनुवाद दिखाना चाहता हूं - इसके लिए टिकट है लेकिन ऐसा लगता है कि यह है अभी भी लंबित:एक अंतरराष्ट्रीयकृत रेल (2.3.5) ऐप में

https://rails.lighthouseapp.com/projects/8994/tickets/2637-patch-i18n-look-up-a-translation-with-the-default-locale-when-its-missed-with-another-specific-locale

उदाहरण के लिए दो अनुवाद फ़ाइलें, en.yml और es.yml साथ (टिकट से लिया गया),:

en: 

    hello: 'hello' 

    hello_world: 'hello world' 



es: 

    hello_world: 'hola mundo' 

मुझे इस कोड को निष्पादित करें:

0,123,
I18n.t :hello, :locale => :es 

रेल "अनुवाद गायब" के साथ एक अवधि के बजाय "हैलो" लौटाता है।

टिकट अभी भी लंबित है, मैं इस कार्यक्षमता को कैसे कार्यान्वित कर सकता हूं? मुझे पता है कि मैं अपने सभी I18n.t कॉलों को बदल सकता हूं और इन्हें बदल सकता हूं: डिफ़ॉल्ट विकल्प, लेकिन अगर मैं इससे बच सकता हूं तो मुझे सभी विचारों से गुज़रना पड़ेगा! चूंकि यह एक पैच है, मुझे लगता है कि मैं इसे रेल जमे हुए रत्नों पर लागू कर सकता हूं, लेकिन अगर मैं कर सकता हूं तो मैं इससे बचूंगा।

उत्तर

18

आपके द्वारा दी गई है कि आप नवीनतम I18n मणि का उपयोग करें, रेल 2 का उपयोग कर रहे हैं, तो एक प्रारंभकर्ता से जोड़ें:

I18n.backend.class.send(:include, I18n::Backend::Fallbacks) 

तो फिर तुम इस तरह अपने फ़ॉलबैक जोड़ सकते हैं:

I18n.fallbacks.map('es' => 'en') 
+0

समस्या हल हो रहा है यही कारण है कि (मैं i18n मणि स्थापित करने के लिए किया था - मैंने सोचा कि यह रेल में शामिल किया गया था, लेकिन फिर भी यह अब अच्छी तरह से काम कर रहा है, धन्यवाद आप अपने उत्तर के लिए बहुत कुछ!) चीयर्स डेव –

+0

मूल कार्यक्षमता रेल में शामिल है, लेकिन मणि में उदाहरण के लिए एक सक्रियरेकॉर्ड बैकएंड की तरह और अधिक बेहतर इंटरपोलेशन और ऐसे शामिल हैं। और रेल 3 से मुझे लगता है कि यह पूरी तरह से आंतरिक को बदल देता है। –

+0

शायद नीचे दिए गए के लिए चयनित उत्तर अपडेट करना चाहिए, क्योंकि अब यह आज के सही उत्तर है :) – jakeonrails

-1

यदि आप अपने रेल मणि को पैच लागू नहीं करना चाहते हैं, तो आप पैच युक्त अपना कोड बना सकते हैं और उन्हें मणि के साथ मिला सकते हैं।

पैच को देखते समय, आपको कोड को दो स्थानों पर अपडेट करना होगा (तीसरा स्थान परीक्षण भाग है)।

पहले भाग (i18n.rb) एक मॉड्यूल है, इसलिए इस

module I18n 
    @@use_default_locale_on_missing_translation = false 
    ...etc... 
end 

की तरह एक कुछ फ़ाइल युक्त आप संशोधित कोड जोड़ सकते हैं लिख कर रहा है। दूसरी फ़ाइल (simple.rb) को उसी तरह से अपडेट किया जा सकता है, सिवाय इसके कि यह एक कक्षा है जिसे आप अपडेट कर रहे हैं।

संशोधनों वाली 2 फाइलें बनाने के बाद, आपको इन दो फ़ाइलों को application.rb या इसी तरह के स्थान पर शामिल करने की आवश्यकता है। और रेल मणि का कोड आपके कस्टम कोड के साथ अपडेट किया जाना चाहिए।

0

मुझे लगता है कि इसे अपनी कॉन्फ़िगरेशन फ़ाइलों में जोड़ना सबसे आसान है (उदाहरण के लिए application.rb):

config.i18n.fallbacks = true 

यह एन-यूएस, एन-सीए, आदि जैसे क्षेत्रीय लोकेशंस के लिए बहुत उपयोगी है क्योंकि वे स्वचालित रूप से लोकेल एन में फॉलबैक कर सकते हैं।

I18n.fallbacks.map('es' => 'en') 
137

Nowdays अलग i18n मणि का उपयोग कर, सादे रेल 3.0.6 और ऊपर (5 पर के लिए कोई ज़रूरत नहीं है:

जिमी बताते हैं के रूप में, तुम भी साथ वापस आने तंत्र बदल सकते हैं।0 शामिल है) स्थापना, fallbacks मूल्य निम्नलिखित में से एक हो सकते हैं:

# application.rb 

# rails will fallback to config.i18n.default_locale translation 
config.i18n.fallbacks = true 

# rails will fallback to en, no matter what is set as config.i18n.default_locale 
config.i18n.fallbacks = [:en] 

# fallbacks value can also be a hash - a map of fallbacks if you will 
# missing translations of es and fr languages will fallback to english 
# missing translations in german will fallback to french ('de' => 'fr') 
config.i18n.fallbacks = {'es' => 'en', 'fr' => 'en', 'de' => 'fr'} 
+17

यह सही उत्तर –

+2

@AlexeyZakharov अच्छा होना चाहिए जो आपके द्वारा उपयोग किए जा रहे रेल संस्करण पर निर्भर करता है। मूल प्रश्न ** रेल 2.3.5 ** के संदर्भ में था, जबकि यह उत्तर ** रेल के लिए प्रासंगिक है 3.0.6 ** –

+0

रेल 4 में काम करता है, धन्यवाद! – dusan

संबंधित मुद्दे