नोट यदि आपका न्यूनतम API 17+ है, इस सवाल का जवाब की तह तक सीधे जाओ। ,
Configuration conf = getResources().getConfiguration();
conf.locale = new Locale("pl");
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Resources resources = new Resources(getAssets(), metrics, conf);
String str = resources.getString(id);
वैकल्पिक रूप से आप सिर्फ @ द्वारा उपयोग करते हुए विधि की ओर इशारा किया अपनी गतिविधि को पुनः आरंभ कर सकते हैं: अन्यथा, पर पढ़ें ...
आप अलग अलग स्थानों के लिए विभिन्न रेस फ़ोल्डरों है, तो आप कुछ इस तरह कर सकते हैं jyotiprakash।
नोटResources
कॉलर इस तरह के कन्स्ट्रक्टर को एंड्रॉइड में आंतरिक रूप से कुछ बदलता है। चीज़ों को वापस पाने के लिए आपको अपने मूल लोकेल के साथ कन्स्ट्रक्टर का आह्वान करना होगा।
संपादित एक थोड़ा अलग (और कुछ हद क्लीनर) एक विशिष्ट स्थान से संसाधनों वापस लाने के लिए नुस्खा है:
Resources res = getResources();
Configuration conf = res.getConfiguration();
Locale savedLocale = conf.locale;
conf.locale = desiredLocale; // whatever you want here
res.updateConfiguration(conf, null); // second arg null means don't change
// retrieve resources from desired locale
String str = res.getString(id);
// restore original locale
conf.locale = savedLocale;
res.updateConfiguration(conf, null);
एपीआई स्तर 17 के रूप में, आप conf.setLocale()
बजाय सीधे conf.locale
स्थापित करने का उपयोग करना चाहिए। यदि आप दाएं से बाएं और बाएं से दाएं स्थान के बीच स्विचिंग करते हैं तो यह कॉन्फ़िगरेशन की लेआउट दिशा को सही ढंग से अपडेट करेगा। (लेआउट दिशा 17. में पेश किया गया था)
वहाँ (के रूप में @Nulano एक टिप्पणी में पता चलता है) एक नई Configuration
वस्तु बनाने का कोई मतलब नहीं है, क्योंकि फोन करने updateConfiguration
res.getConfiguration()
फोन करके प्राप्त मूल विन्यास को बदलने के लिए जा रहा है।
यदि आप लोकेल के लिए कई स्ट्रिंग संसाधन लोड करने जा रहे हैं तो मैं इसे getString(int id, String locale)
विधि में बंडल करने में संकोच करूंगा। स्थानीय स्थान बदलना (या तो रेसिपी का उपयोग करके) ढांचे के लिए सभी संसाधनों को पुनर्निर्मित करने के लिए बहुत सारे काम करने के लिए कहते हैं। स्थानीय लोगों को एक बार अपडेट करना बेहतर होता है, आपको जो भी चाहिए उसे पुनः प्राप्त करें, और फिर लोकेल को वापस सेट करें।
संपादित (धन्यवाद @Mygod के लिए):
यदि आपका न्यूनतम API स्तर 17+ है, वहाँ, एक बेहतर तरीका है के रूप में एक और धागा पर this answer में दिखाया गया है।
@NonNull Resources getLocalizedResources(Context context, Locale desiredLocale) {
Configuration conf = context.getResources().getConfiguration();
conf = new Configuration(conf);
conf.setLocale(desiredLocale);
Context localizedContext = context.createConfigurationContext(conf);
return localizedContext.getResources();
}
तो बस संसाधनों आप स्थानीय Resource
वस्तु इस विधि द्वारा लौटाए से पसंद को पुनः प्राप्त: उदाहरण के लिए, आप एक से अधिक Resource
वस्तुओं, प्रत्येक स्थान में आप की जरूरत के लिए एक, के साथ बना सकते हैं। संसाधनों को पुनर्प्राप्त करने के बाद कुछ भी रीसेट करने की आवश्यकता नहीं है।
आपने वास्तव में इसे कैसे कार्यान्वित किया ?? कृपया उत्तर दें :) –
स्वीकृत उत्तर –
के रूप में संपत्ति का संदर्भ देने के लिए 'संसाधन बंडल' है ?? या वे हमारे res फ़ोल्डर का उपयोग कर सकते हैं? –