2011-06-04 90 views
10

在我的應用程序中,我有一個語言選擇選項。如何更改我的應用程序的語言?

有三種語言:英語,德語&西班牙語。當我選擇一個選項時,應該更改整個應用程序語言。

我該如何做到這一點?

+2

請看預覽窗口,當你準備一個問題,不直接使用HTML標籤,可以使用編輯器控件。你的問題文本根本沒有顯示。 – Mat 2011-06-04 10:01:28

+3

感謝您幫助新人@Mat。 – DOK 2011-06-04 10:03:09

回答

21

您的意思是說您要使用手機中默認語言以外的其他語言嗎?我在一個應用程序中有這個,這就是我必須做的。

AndroidManifest.xml

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

添加到您的活動宣言,​​然後在活動從onCreate調用這樣的方法:

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

因此,在完成以上兩件事之後,我只需創建資源文件(R.String.Values.xml以獲得特定語言支持),並根據應用程序設置我可以設置應用程序運行時的語言。對 ? – 2013-01-02 09:09:52

+2

你從哪裏得到SystemLocale和TAG? – Teysz 2013-06-23 02:18:41

+1

我認爲'Locale.getDefault()'應該用來代替'SystemLocale ....' – 2013-10-12 15:47:55

0

你只根據語言添加值的文件夾。例如,我添加了3種語言:英語,阿拉伯語和印地語。 在res文件夾中創建values-ar阿拉伯語和values-hi對於印地語來保存應用程序中使用的所有字符串。 現在我有一個語言列表視圖。因此,當用戶點擊其中一種語言時,應用程序的語言將會改變,手機語言將保持不變。 這裏是代碼..

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

你應該明確地幹你的代碼。 – JJD 2014-03-18 09:21:37

相關問題