2011-06-20 21 views
6

Uygulama dilinin kullanıcı tercihlerine göre ayarlanmasını isterim ancak şimdiye kadar nasıl olmasını istediğim işe yaramıyor.Android kurulumlarda uygulama dilini ayarlama

Varsayılan değerleri belirledim: strings.xml ve aynı zamanda ispanyolca içinde bir strings.xml ile değerler. Kullanıcıyı dilini seçen şeyleri tercih edebilecekleri bir Tercih etkinliğine getiren bir menü seçeneğim var.

public class Preference extends PreferenceActivity implements 
     OnSharedPreferenceChangeListener { 
...... 
// Set up a listener whenever a key changes 
     getPreferenceScreen().getSharedPreferences() 
       .registerOnSharedPreferenceChangeListener(this); 


...} 
//(......) 

//and here I have the listener so when the language pref changes value the locale gets changed. 
    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
      String key) { 
     if (key.equals("listPref2")) { 
      String idioma = sharedPreferences.getString("listPref2", "catala"); 
      if ("castella".equals(idioma)) { 
       idioma = "es_ES"; 

       Locale locale = new Locale(idioma); 
       Locale.setDefault(locale); 
       Configuration config = new Configuration(); 
       config.locale = locale; 
       getApplicationContext().getResources().updateConfiguration(config, 
         getBaseContext().getResources().getDisplayMetrics()); 
      } 
     } 
    } 

ben dilini değiştirmek zaman sonra gelirim veya dil en_US yerel ayarı varsayılan geri alır emülatörünü yeniden ve ne zaman Yani çalışıyor ama sonra:

Yani burada bazı kod özleri vardır Uygulama dili tekrar varsayılan olarak değiştirilir. Bunu çözmek için ne yapabilirim?

Bu tercihimi (tüm etkinliklerimden erişebileceğim) alabildiğimi biliyorum ve her seferinde yerel ayarı ayarlıyorum ama biraz ağır buluyorum. Daha fazla zarif bir şekilde?

Yapmak istediğim, eğer kullanıcı dili kurarsa 2 gün sonra dili tekrar değiştirmek zorunda kalmaz.

Herhangi bir fikrin var mı?

cevap

11

Tamam, birilerine yardımcı olabilir. Ben ana faaliyet beyannamesine folowing ekledi:

android:configChanges="locale"

kullanıcı bir onaylama butonuna koyduk ve sonra bu düğme lnagages sıfırlanır alır neden olduğunu, ana faaliyeti getiren tercihleri ​​choses Sonra

.

setContentView(R.layout.list_event);

: Daha önce bu yöntemi diyoruz bunlardan 20 gibi var her etkinliğinde

public static void updateLanguage(Context context, String idioma) { 
    if (!"".equals(idioma)) { 
     if ("castella".equals(idioma)) { 
      idioma = "es_ES"; 
     } else if ("catala".equals(idioma)) { 
      idioma = "ca_ES"; 
     } 
     Locale locale = new Locale(idioma); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     context.getResources().updateConfiguration(config, null); 
    } 
} 

ucunu:

Ben yerel değiştirmek için bu kodu var statik sınıf var

Ekranı döndürdüğümde bu yöntemler ile aktiviteler dilini değiştirmiyor bana yardımcı olan bir blogun bağlantısı: http://adrianvintu.com/blogengine/post/Force-Locale-on-Android.aspx

1

Yerel ayarı MainActivity onCreate yönteminde ayarlamanız gerektiğini düşünürdüm. onSharedPreferenceChanged yöntemi ile ayarlandığında, aynı şekilde.

+1

Size anlattığınız şeyi yaptım ancak bu, yalnızca ana etkinlikteki yerel ayarları değiştiriyor. Daha sonra tüm kodlarımın başında aynı kodu ekleyeceğim. teşekkürler – vallllll

+0

itiraf etmeliyim asla yerel şey denemedim. Bir kullanıcı ayarına dayalı olarak görünüyor. şuna baktın mı? http://developer.android.com/resources/tutorials/localization/index.html – bytebender

+0

evet Zaten bir varsayılan kira ve 2 dil kurdum: ispanyolca ve katalanca ve kullanıcının kendi yerini seçebilmesi için kullanıcıya ihtiyacım var. Yerel ayarı yalnızca telefonla belirlemek yeterli değildir. – vallllll