2012-09-01 11 views
16

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

उत्तर

31

आप स्पिनर में इस कोड को या किसी भी तरह आप चाहते हैं

String languageToLoad = "en"; // your language 
Locale locale = new Locale(languageToLoad); 
Locale.setDefault(locale); 
Configuration config = new Configuration(); 
config.locale = locale; 
getBaseContext().getResources().updateConfiguration(config, 
getBaseContext().getResources().getDisplayMetrics()); 

उपयोग कर सकते हैं तो आप इस

SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE); 
SharedPreferences.Editor editor = languagepref.edit(); 
editor.putString("languageToLoad",languageToLoad); 
editor.commit(); 

और उपयोग की तरह भाषा को बचाने चाहिए onCreate() में languageToLoad को साझा करने के लिए onCreate() में प्रत्येक गतिविधि में एक ही कोड

+0

क्या यह परिवर्तन पूरे एंड्रॉइड सिस्टम में लांग होगा या यह केवल एप्लिकेशन के लिए बदल जाएगा? मैं यह पूछ रहा हूं कि जब उपयोगकर्ता एप्लिकेशन छोड़ देता है, तो वे एंड्रॉइड डिफ़ॉल्ट लैंग –

+0

@ करयूबेन्सनकेयर के साथ आगे बढ़ने में सक्षम होंगे, यह केवल एप्लिकेशन में बदल जाएगा। –

+0

ठीक है, आपकी प्रतिक्रिया के लिए धन्यवाद –

5

उपयोगकर्ता द्वारा चुने गए भाषा का ट्रैक रखने के लिए साझा किए गए संदर्भों का उपयोग करें, और उसके बाद गतिविधियों को उस भाषा का उपयोग करने के लिए ऑनक्रेट(), और शायद रेस्यूम() विधि में सेट करें। इस तरह से यह ऐप पुन: प्रारंभ आदि भर में बना रहेगा

+1

क्या सभी डेवलपर इस तरह से ऐप्स में उपयोग करते हैं, मुझे लगता है कि यह बहुत स्पष्ट नहीं है! –

+1

मैं अन्य डेवलपर्स के लिए बात नहीं कर सकता क्योंकि मेरे पास उनके कोडम –

+1

तक पहुंच नहीं है, हां, यह एक गतिविधि में आपके पास एक गतिविधि में अन्य गतिविधियों के लिए जानकारी देने के लिए अनुशंसित और क्लीनर तरीका है। दूसरा, ऐसा करने के लिए अधिक हैकी/अनुचित तरीका यह है कि डेटा को गतिविधि में स्थिर क्षेत्र के रूप में रखना और अन्य गतिविधियों से इसका उपयोग करना है, लेकिन अगर कोई पूछता है, तो मैंने आपको यह नहीं बताया! :) –

2

यह एक पुराना प्रश्न है, लेकिन मैं इसका उत्तर दूंगा: -) आप प्रत्येक गतिविधि पर Abol3z के समाधान को लागू करने के लिए आवेदन कक्षा का विस्तार कर सकते हैं। प्रकट में

public class MyApplication extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
     String lang = preferences.getString("lang", "en"); 
     Locale locale = new Locale(lang); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     getBaseContext().getResources().updateConfiguration(config, 
       getBaseContext().getResources().getDisplayMetrics());  
    } 
} 

और आवेदन वर्ग के रूप में MyApplication सेट: कक्षा बनाएं लैंग मूल्य (अपने स्पिनर में)

<application 
     android:name=".MyApplication" 
     ... 
/> 

आप सेट कर सकते हैं:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext()); 
preferences.edit().putString("lang", "en").commit(); 
+1

[दस्तावेज़ीकरण] के अनुसार धन्यवाद (https://developer.android.com/reference/android/app/Application.html#onCreate()) एप्लिकेशन ऑनक्रेट() को केवल ऐप शुरू करने के लिए कहा जाता है । तो आप रनटाइम में भाषा को वास्तव में नहीं बदल रहे हैं, लेकिन अगले ऐप पर, सही है? संपादित करें: मूल प्रश्न दोबारा पढ़ें, आपके रास्ते में समस्या हल हो गई है। – Micha

1
btnChange.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext); 
      //preferences.edit().putString("lang", "bn").commit(); 

      String lang = preferences.getString("lang", "en"); 
      //Log.e("lang", "lang in Main Activity:"+lang); 
      if (lang.equalsIgnoreCase("en")){ 
       setLocale("bn"); 
       preferences.edit().putString("lang", "bn").commit(); 
       btnChange.setText("Eng"); 
      }else if(lang.equalsIgnoreCase("bn")){ 
       setLocale("en"); 
       preferences.edit().putString("lang", "en").commit(); 
       btnChange.setText("বাংলা"); 
      } 
     } 
    }); 


public void setLocale(String lang) { 

    myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, MainActivity.class); 
    startActivity(refresh); 
    finish(); 
} 

उपयोग हम परीक्षण उद्देश्य के लिए दो भाषा। सभी स्ट्रिंग को अलग-अलग फ़ोल्डर में मूल्यों और मानों-बीएन में रखें।

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