2011-06-20 137 views
6

我希望根據用戶的喜好設置應用程序語言,但到目前爲止,它不工作,我希望它。在Android中設置應用程序的語言首選項

我已經設置了默認值:strings.xml,還有西班牙語裏面的strings.xml文件。我有一個菜單選項,它將用戶帶到首選活動,在那裏他可以選擇語言。

因此,這裏是代碼的一部分摘錄:

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()); 
      } 
     } 
    } 

所以,當我改變了語言它的工作原理,但後來當我回來以後或重新啓動仿真語言變回默認語言環境EN_US和應用程序語言再次變回默認值。我能做些什麼來整理?

我知道我可以得到這個偏好(我可以從我的所有活動中獲得),然後每次設置語言環境,但我覺得它有點沉重,沒有辦法在更多優雅的方式

我想要做的是如果用戶設置語言,所以當他回來2天后他不必再次更改語言。

任何想法?

回答

11

確定它可以幫助某人。我已經加入瞭如下因素的主要活動清單:

android:configChanges="locale"

然後,當用戶的動產偏好我已經把一個確認按鈕,然後此按鈕,您的主要活動,這就是爲什麼lnagages被重置。

我有一個靜態類,我有這樣的代碼更改地區:

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); 
    } 
} 

末在每一次活動我也喜歡他們的20我之前調用這個方法:

setContentView(R.layout.list_event);

使用這些方法當我旋轉屏幕的活動不會改變語言 這裏是鏈接到博客,幫助我: http://adrianvintu.com/blogengine/post/Force-Locale-on-Android.aspx

1

我認爲你需要在MainActivity onCreate方法中設置語言環境。與onSharedPreferenceChanged方法相同的方式進行設置。

+1

我已經完成了你所說的事情,但是這隻會改變主要活動中的語言環境。然後,我會在所有活動開始時添加相同的代碼。謝謝 – vallllll

+0

我不得不承認我從來沒有嘗試過當地的事情。看起來它是基於用戶設置的。你看過嗎? http://developer.android.com/resources/tutorials/localization/index.html – bytebender

+0

是的,我已經設置了一個默認語言和2種語言:西班牙語和加泰羅尼亞語,我需要用戶能夠選擇他自己的語言環境。僅使用手機確定區域設置是不夠的。 – vallllll

相關問題