2015-12-28 104 views
0

我目前正在嘗試本地化我的android應用程序,我已經設置了一切,但它會一直加載相同的字符串資源,只要我嘗試更改語言。從資源的Android本地化

我有以下字符串資源

values 
values-am 
values-om 

SharedPreferences sharedPreferences = getSharedPreferences("MY_SHARED_PREF", MODE_PRIVATE); 
String languageLocale = sharedPreferences.getString("SAVED_LANGUAGE_LOCALE", "am"); 

    Log.d(TAG,languageLocale); 

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

我也是用下面的代碼在不同的活動

RadioGroup.OnCheckedChangeListener radioGroupOnCheckedChangeListener = 
     new RadioGroup.OnCheckedChangeListener(){ 

      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 

       RadioButton checkedRadioButton = (RadioButton)mRadioGroup.findViewById(checkedId); 
       int checkedIndex = mRadioGroup.indexOfChild(checkedRadioButton); 
       //AppController languageSetting = (AppController)getApplication(); 
       SavePreferences(KEY_SAVED_RADIO_BUTTON_INDEX, checkedIndex); 
       mLanguageId = checkedIndex + 1; 
       languageSetting.setLanguageId(mLanguageId); 
       switch (mLanguageId){ 
        case 1: 
         SavePreferencesLocale(KEY_SAVED_LANGUAGE_LOCALE,"en"); 
         mTest = "en"; 
         break; 
        case 2: 
         SavePreferencesLocale(KEY_SAVED_LANGUAGE_LOCALE,"am"); 
         mTest = "am"; 
         break; 
        case 3: 
         SavePreferencesLocale(KEY_SAVED_LANGUAGE_LOCALE,"om"); 
         mTest = "om"; 
         break; 
       } 

      }}; 

現在的問題是,每當應用程序啓動選擇的語言第一次加載正確的字符串資源,但是當我改變語言時,它保持相同的字符串資源。這意味着例如。如果應用程序以values-am字符串資源開頭,當我將其更改爲值-om時,儘管區域設置分配有正確的值(「om」),但我仍然可以看到值-m字符串

+0

通過「保持相同的字符串資源」 - 你的意思是它沒有意見,本地化那些更新當前值? – aelimill

+0

@aelimill是的,這就是我的意思。 –

+0

您需要手動更新所有需要的視圖或在活動中調用recreate()。可悲的是,但這是我知道使它自動工作的唯一途徑 – aelimill

回答

0

您需要致電在onCheckedChanged()的每個語言選擇代碼下面。

Locale locale = new Locale("Selected language code comes here"); 
Locale.setDefault(locale); 
Configuration config = new Configuration(); 
config.locale = locale; 
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 

設置區域設置後,使用recreate()重新啓動活動。

+0

我已經嘗試過,但仍然沒有運氣。以下是我所做的更改 –

+0

我通過清除緩存並終止應用程序的進程來解決問題。換句話說,我必須再次手動啓動應用程序。我覺得我的解決方案並不完美,我認爲還有更好的方法。 –

0

這裏是東西:

String languageLocale = sharedPreferences.getString("SAVED_LANGUAGE_LOCALE", "am"); 

由**

sharedPreferences.getString( 「」 SAVED_LANGUAGE_LOCALE」, 「是」);

**你不需要串「am」。This 「am」您只需要.putStr ing()

應該看起來像

String languageLocale = sharedPreferences.getString("KEY_SAVED_LANGUAGE_LOCALE"); 
+0

我正在使用它來訪問我在共享首選項中保存的內容。我已經使用Log.d(TAG,languageLocale)對它進行了測試,它正是給了我所需要的。字符串「am」只是一個默認值 –

+0

putString()是哪裏? –

+0

如果您在我的第一篇文章中看到函數SavePreferencesLocale()被稱爲'private void SavePreferencesLocale(String key,String value)SharedPreferences sharedPreferences = getSharedPreferences(「MY_SHARED_PREF」,MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(key,value); 編輯。承諾(); }' –

0

意圖刷新,並呼籲

Locale locale = new Locale("ar"); 
Locale.setDefault(locale); 
Configuration config = new Configuration(); 
config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 

this.setContentView(R.layout.activity_main_category_page);