2011-03-18 12 views
5

मुझे अपना एंड्रॉइड एप्लिकेशन 3 भाषाओं अर्थात जर्मन, अंग्रेजी और डच में बनाना है। मैंने अपने एंड्रॉइड एप्लिकेशन नाम values-de और values-nl में रेस निर्देशिका में तीन फ़ोल्डर्स बनाए हैं। अब जब उपयोगकर्ता एक विशिष्ट भाषा मैं निम्नलिखित कोड प्रदर्शन का चयन करता है:बहु भाषा एंड्रॉइड एप्लिकेशन?

Resources res = getResources(); 
Configuration newConfig = new Configuration(res.getConfiguration()); 
newConfig.locale = Locale.ENGLISH; 
res.updateConfiguration(newConfig, null); 

सभी विभिन्न मूल्यों फ़ोल्डरों एक ही नाम है में तार, मूल्यों फ़ोल्डर में नाम add_site साथ एक स्ट्रिंग यानी में एक ही नाम है the values-de फ़ोल्डर लेकिन एक अलग मूल्य के साथ। जब मैं लोकेल को जर्मन में सेट करता हूं तो मेरा एप्लिकेशन जर्मन मान लोड नहीं कर रहा है? क्या समस्या हो सकती है?

आपकी मदद के लिए धन्यवाद।

+0

यह मेरी समझ है कि स्थानीय प्राथमिकताओं को सिस्टम वरीयताओं के अनुसार एंड्रॉइड द्वारा स्वचालित रूप से संभाला जाता है। क्या आपके पास किसी भी कारण से उपयोगकर्ताओं को आपके आवेदन के भीतर से लोकेल सेट करने में सक्षम होना चाहिए? – KPthunder

+0

हां। ऐसा इसलिए है क्योंकि सिर्फ मेरे आवेदन को देखने के लिए उपयोगकर्ता को सिस्टम कॉन्फ़िगरेशन बदलना होगा जिसके परिणामस्वरूप उस भाषा में सभी एप्लिकेशन सेट हो जाएंगे .... जो मुझे विश्वास है कि अनावश्यक है। हालांकि अब जब मैं सिस्टम कॉन्फ़िगरेशन बदलता हूं तो कोड ठीक काम कर रहा है, जिसका अर्थ है कि जब मैंने सिस्टम लोकेल को जर्मन में सेट किया है तो जर्मन टेक्स्ट दिखाया जा रहा है ... मैं इसे – user590849

+0

के भीतर से प्राप्त करना चाहता हूं कुछ विस्तार करने के लिए एक सुविधा के रूप में अच्छा विचार है लेकिन ध्यान रखें कि यह एंड्रॉइड पर अन्य सभी एप्लिकेशन स्टॉक अनुप्रयोगों के काम के तरीके के खिलाफ है। वे सभी स्वचालित रूप से आपके लोकेल का पता लगाते हैं और उपयोगकर्ता हस्तक्षेप के बिना फ्लाई पर सही संसाधन लोड करते हैं। जब तक कि वास्तव में कोई अच्छा कारण नहीं है, मैं इस डिफ़ॉल्ट व्यवहार को तोड़ नहीं दूंगा। –

उत्तर

5

super.onCreate करने के लिए सिर्फ कॉल के बाद onCreate() में इस डाल प्रयास करें:

Locale locale = new Locale("de"); 
Locale.setDefault(locale); 
Configuration config = new Configuration(); 
config.locale = locale; 
getBaseContext().getResources().updateConfiguration(config, 
     getBaseContext().getResources().getDisplayMetrics()); 

संपादित करें:Here's another approach। ऐसा लगता है कि यह बहुत लचीला प्रतीत होता है, लेकिन टिप्पणियों में कुछ असहमति होती है कि यह सभी एंड्रॉइड संस्करणों पर काम करता है या नहीं।

+0

मैं उपयोगकर्ता को केवल तभी बदलना चाहता हूं जब उपयोगकर्ता चाहता है। यानी एक भाषा.जावा फ़ाइल है जहां चेकबॉक्स के माध्यम से, मैं उपयोगकर्ता को भाषा का चयन करता हूं और एक और गतिविधि sitelisting.java है जहां मैं परिवर्तन देखना चाहता हूं .... – user590849

0

कॉन्फ़िगरेशन लोकेल सेट करने के लिए पर्याप्त नहीं है यदि आप ऐसी भाषा का भी समर्थन करते हैं जिसमें एक अलग लेआउट दिशा एलटीआर या आरटीएल है।

 Resources res = getResources(); 
     Configuration newConfig = new Configuration(res.getConfiguration()); 
     Locale locale = new Locale(appLanguage); 
     newConfig.locale = locale; 
     newConfig.setLayoutDirection(locale); 
     res.updateConfiguration(newConfig, null); 
संबंधित मुद्दे