दिलचस्प पोस्ट
एंड्रॉइड के लिए सॉफ्ट कीबोर्ड कैसे विकसित किया जाए? एसएमटीपी के लिए जीमेल का उपयोग करते समय, आप एक अलग "से" पता सेट कर सकते हैं? कैसे jQuery के प्रत्येक लूप को तोड़ने के लिए क्या यह नामस्थान ब्लॉक में # शामिल करने के लिए एक अच्छा विचार है? पृष्ठ के ताज़ा करें को रोकने के लिए जब अंदर स्थित बटन पर क्लिक किया जाता है अंडरस्कोर या अंडरस्कोर करने के लिए नहीं, यह सवाल है JavaScript का उपयोग करते हुए JSON ऑब्जेक्ट के लिए नया विशेषता (तत्व) जोड़ें जावास्क्रिप्ट में स्ट्रिंग को सॉर्ट करने के लिए कैसे करें गिट उथले submodules सी में सभी संख्याओं की कुल राशि की गणना करें: प्रत्येक पाश के लिए दो एक्सेल फाइलों के सभी कोशिकाओं की तुलना करने के लिए VBA मैक्रो फ्लेक्स आइटम सामग्री चौड़ाई लेते हैं, माता-पिता कंटेनर की चौड़ाई नहीं दस्तावेज़ के विकल्प क्या हैं? लिखिए? PhpMailer बनाम स्विफ्ट मेलर? IE 8: पृष्ठभूमि-आकार तय

कैसे एंड्रॉइड में अलग-अलग लोकेशनों से स्ट्रिंग पाने के लिए?

इसलिए मुझे डिवाइस / ऐप की वर्तमान लोकेल सेटिंग की परवाह किए बिना कई लोकेलों में स्ट्रिंग का मान प्राप्त करना है। मैं कैसे करूं?

असल में मुझे क्या चाहिए getString(int id, String locale) बजाय एक समारोह getString(int id, String locale) getString(int id)

ऐसा कैसे किया जा सकता था?

धन्यवाद

वेब के समाधान से एकत्रित समाधान "कैसे एंड्रॉइड में अलग-अलग लोकेशनों से स्ट्रिंग पाने के लिए?"

नोट यदि आपकी न्यूनतम एपीआई 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); 

वैकल्पिक रूप से, आप ज्योतिप्रकाश द्वारा निर्देशित विधि का उपयोग करके अपनी गतिविधि को पुनः आरंभ कर सकते हैं।

नोट 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.setLocale() उपयोग करना चाहिए। यदि आप दायां-से-बाएं और बाएं-से-दाएँ लोकेल के बीच स्विच करना चाहते हैं, तो यह कॉन्फ़िगरेशन के लेआउट दिशा को ठीक से अपडेट कर देगा। (लेआउट दिशा 17 में पेश की गई थी)

कोई नया Configuration ऑब्जेक्ट बनाने में कोई मतलब नहीं है (जैसा कि @नुलानो एक टिप्पणी में सुझाव देता है) क्योंकि कॉलिंग updateConfiguration कॉन्फ़िगरेशन res.getConfiguration() को कॉल करके मूल कॉन्फ़िगरेशन को परिवर्तित करने जा रहा है।

मैं इसे getString(int id, String locale) पद्धति में बंडल करने में संकोच करूंगा यदि आप एक लोकेल के लिए कई स्ट्रिंग संसाधनों को लोड करने जा रहे हैं लोकल बदलना (या तो नुस्खा का उपयोग करके) सभी संसाधनों को रिबिंड करने के लिए कई कार्य करने के लिए ढांचे के लिए कॉल करता है एक बार लोकेल अपडेट करने के लिए, आपको जो भी चीज की ज़रूरत है उसे पुनः प्राप्त करने के लिए बेहतर है, और फिर लोकेल वापस सेट करें

संपादित करें (मेरीगोड के लिए धन्यवाद):

यदि आपका न्यूनतम एपीआई स्तर 17+ है, तो एक बेहतर तरीका है, जैसा कि इस उत्तर में दूसरे धागे पर दिखाया गया है। उदाहरण के लिए, आप कई Resource वस्तुएं बना सकते हैं, प्रत्येक स्थान के लिए आपको एक के साथ:

 @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 ऑब्जेक्ट से पसंद करते हैं। संसाधनों को पुनर्प्राप्त करने के बाद कुछ भी रीसेट करने की कोई आवश्यकता नहीं है।

टेड हॉप द्वारा वर्णित दृष्टिकोणों का एक संयुक्त संस्करण यहाँ है इस तरह, कोड किसी भी एंड्रॉइड वर्जन के लिए काम करता है:

 public static String getLocaleStringResource(Locale requestedLocale, int resourceId, Context context) { String result; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { // use latest api Configuration config = new Configuration(context.getResources().getConfiguration()); config.setLocale(requestedLocale); result = context.createConfigurationContext(config).getText(resourceId).toString(); } else { // support older android versions Resources resources = context.getResources(); Configuration conf = resources.getConfiguration(); Locale savedLocale = conf.locale; conf.locale = requestedLocale; resources.updateConfiguration(conf, null); // retrieve resources from desired locale result = resources.getString(resourceId); // restore original locale conf.locale = savedLocale; resources.updateConfiguration(conf, null); } return result; } 

उपयोग का उदाहरण:

 String englishName = getLocaleStringResource(new Locale("en"), id, R.string.name); 

ध्यान दें

जैसा कि मूल उत्तर में पहले से ही बताया गया है, यह एक एकल विन्यास परिवर्तन और एकाधिक resources.getString () कॉल के साथ उपरोक्त कोड के एकाधिक कॉल को बदलने के लिए अधिक कुशल हो सकता है।

आप जो खोज रहे हैं उसे संसाधन बंडल श्रेणी कहा जाता है। यहां लिंक है:

संसाधन बंडल के लिए Google डॉक्स