2011-06-04 21 views
10

Uygulamamda dil seçimi seçeneğim var.Başvurumun dilini nasıl değiştirebilirim?

Üç dil vardır: İngilizce, Almanca & İspanyolca. Bir seçenek belirlediğimde, tüm uygulama dili değiştirilmelidir.

Bunu nasıl mümkün yapabilirim?

+2

Bir soru hazırlamak ve editör denetimlerini kullanın, doğrudan HTML etiketlerini kullanmadığınızda önizleme penceresinde bakınız. Soru metniniz hiç gösterilmiyordu. – Mat

+3

Yeni adama yardım ettiğin için teşekkürler, @Mat. – DOK

cevap

21

Telefondaki varsayılan dilden başka bir dil kullanmak istediğiniz anlamına mı geliyor? Tek bir uygulamada var ve yapmak zorunda olduğum şey bu.

AndroidManifest.xml

<activity 
    android:name=".ui.SomeActivity" 
    android:configChanges="locale" 
    : 
    : 
</activity> 

sizin etkinlik bildiriye bu ekleme Ve sonra aktivitesinde onCreate gelen böyle bir yöntemi çağırmak:

public static void setLanguage(Context context, String languageToLoad) { 
    Log.d(TAG, "setting language"); 
    Locale locale = new Locale(languageToLoad); //e.g "sv" 
    Locale systemLocale = SystemLocale.getInstance().getCurrentLocale(context); 
    if (systemLocale != null && systemLocale.equals(locale)) { 
     Log.d(TAG, "Already correct language set"); 
     return; 
    } 
    Locale.setDefault(locale); 
    android.content.res.Configuration config = new android.content.res.Configuration(); 
    config.locale = locale; 
    context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
    Log.d(TAG, "Language set"); 
} 
+0

Yani, iki şey üzerinde yaptıktan sonra sadece özgeçmiş dosyası (belirli bir dil desteği için R.String.Values.xml) ve uygulama ayarlarının dilini ayarlayabilmem gerekir. Sağ ? –

+2

SystemLocale ve TAG'ı nereden buldunuz? – Teysz

+1

'SystemLocale ....' yerine 'Locale.getDefault()' kullanılmalıdır. –

0

Sadece dile göre değer klasör eklemek . Örneğin, 3 dil ekledim: İngilizce, Arapça ve Hintçe. res klasöründe, arabic için values-ar ve hindi'nin uygulamada kullanılan tüm dizeleri tutması için values-hi oluşturun. Artık dillerin bir listesini görüyorum. Kullanıcı dilden birini tıkladığında, uygulama dili değişecek ve telefon dili aynı kalacaktır. İşte .. kodudur

listview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // When clicked, show a toast with the TextView text 
      String language = ((TextView) view).getText().toString(); 
      if (language.equals("English")) { 
       Locale locale = new Locale("en"); 
       Locale.setDefault(locale); 
       Configuration config = new Configuration(); 
       config.locale = locale; 
       getBaseContext().getResources() 
         .updateConfiguration(
           config, 
           getBaseContext().getResources() 
             .getDisplayMetrics()); 
       Toast.makeText(ChangeLanguage.this, "Locale in English", 
         Toast.LENGTH_LONG).show(); 

      } else if (language.equals("Arabic")) { 

       Locale locale = new Locale("ar"); 
       Locale.setDefault(locale); 
       Configuration config = new Configuration(); 
       config.locale = locale; 
       getBaseContext().getResources() 
         .updateConfiguration(
           config, 
           getBaseContext().getResources() 
             .getDisplayMetrics()); 
       Toast.makeText(ChangeLanguage.this, "Locale in Arabic", 
         Toast.LENGTH_LONG).show(); 
      }else if (language.equals("Hindi")) { 

       Locale locale = new Locale("hi"); 
       Locale.setDefault(locale); 
       Configuration config = new Configuration(); 
       config.locale = locale; 
       getBaseContext().getResources() 
         .updateConfiguration(
           config, 
           getBaseContext().getResources() 
             .getDisplayMetrics()); 
       Toast.makeText(ChangeLanguage.this, "Locale in Hindi", 
         Toast.LENGTH_LONG).show(); 
      } else { 
       Toast.makeText(ChangeLanguage.this, 
         "Locale in not changed!", Toast.LENGTH_LONG).show(); 
      } 
      /* 
      * Toast.makeText(getApplicationContext(), language, 
      * Toast.LENGTH_SHORT) .show(); 
      */ 

      GetterSetter.getInstance().setLanguage(changelanguage); 
      startActivity(new Intent(ChangeLanguage.this, 
        MainSettings.class)); 
      main.tabhost.setCurrentTab(3); 
     } 
    }); 
+0

Kodunuzu kesinlikle DRY yapmalısınız. – JJD

İlgili konular