2011-03-09 123 views
4

可能重複:
Change language programatically in Android運行系統語言改變的Android

我可以改變應用程序的語言運行時根據如用戶通過使用Android本地化支持(不是某些自己的/第三方解決方案)在菜單中選擇?

非常感謝

+1

以下文章將幫助你[http://stackoverflow.com/questions/2900023/change-language-programatically-in-android](http://stackoverflow.com/questions/2900023/change-language-programatically-在Android) – ingsaurabh 2011-03-09 05:12:28

回答

5

我實現按鈕按下語言切換中的應用程序。這在Android中並不直接,但可以完成。有兩個主要問題: 1)更改語言環境不會更改系統配置 - 系統區域設置。例如,在您的應用中將語言更改爲法語,並不會改變您的設備設置爲英語等事實。因此,在應用程序的任何其他配置更改 - 方向,鍵盤隱藏等,應用程序的區域設置將返回到系統區域設置。 2)另一個問題是,更改應用程序中的區域設置不會刷新UI,它不會重新繪製視圖。這使得在運行時很難切換。刷新/重新加載必須手動完成,這意味着必須有一種方法使用本地化的文本/消息/值刷新每個視圖。因此,首先您需要定義本地化資源:value,value-en,value-fr等。然後這將是按鈕按下開關的代碼。

private Locale myLocale; 

private void onFR_langClicked(View v){ 
    myLocale = new Locale("fr"); 
    // set the new locale 
    Locale.setDefault(myLocale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 

    // refresh UI - get values from localized resources 
    ((RadioButton) findViewById(R.id.butn1)).setText(R.string.butn1); 
    ((RadioButton) findViewById(R.id.butn2)).setText(R.string.butn2); 
    spin.setPromptId(R.string.line_spinner_prompt); 
    ... 
} 

在兩種方法中分離兩個步驟是一種很好的做法:一種是切換調用UI刷新的區域設置。

然後你還需要處理配置更改,並確保語言保持你的意圖。 Google建議您不要自行處理配置更改。清單必須包含這每一個活動:

<activity 
android:name=". ..." 
android:configChanges="locale|orientation|keyboardHidden" > 

,它允許你定義自己的變化處理程序:

@Override 
public void onConfigurationChanged(Configuration newConfig){ 
    super.onConfigurationChanged(newConfig); 
    if (myLocale != null){ 
     newConfig.locale = myLocale; 
     Locale.setDefault(myLocale); 
     getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics()); 
    } 
} 

希望這有助於。希望你瞭解這個原則。

+0

笏,如果我不需要改變我的配置....因爲我有layout-land佈局,其中xml需要b重定向,而方向chnage? – sheetal 2012-09-25 12:21:38

+0

問題是如果你不覆蓋onConfigurationChange,任何配置更改(包含方向)都會將語言切換回系統配置 - 系統語言。您目前不會看到它,因爲它再次不會更改UI,但會轉到另一個活動,並且它將採用系統語言,而不是您設置的那個。 – MSquare 2012-11-15 09:24:15