2014-11-23 68 views
8

我已經在大多數的Android API版本的運行設置應用這種方法使用的語言(字符串等)棒棒糖設置默認本地不起作用

protected void setDefaultLocale(Context context, Locale locale) { 
    Locale.setDefault(locale); 
    Configuration appConfig = new Configuration(); 
    appConfig.locale = locale; 
    context.getResources() 
      .updateConfiguration(appConfig, context.getResources().getDisplayMetrics()); 
    System.out.println("trad" + locale.getLanguage()); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
    String language = sharedPref.getString("pref_language", "he_IL"); 
    if (!language.equals("")) 
     setDefaultLocale(this, new Locale(language)); 

    super.onCreate(savedInstanceState); 


} 

當使用該棒棒糖上運行的設備沒有任何變化。

任何人都知道如何解決這個問題?

+0

其中'locale locale = new Locale(「your_locale」);'? – Riad 2014-11-23 08:33:00

+0

編輯該帖子:) – SacreDeveloper 2014-11-23 08:36:04

回答

0

終於找到了答案。

答案是使用「iw」而不是he_il。

String language = sharedPref.getString(「pref_language」,「iw」);

2

我注意到在棒棒糖中有類似的行爲,但在以前版本的API中沒有發現。

在我的情況下,問題是因爲我像你一樣設置語言代碼和國家代碼,但我的資源文件夾是特定於語言的,只有「values-fr」和「values-es」等。

如果這條線

String language = sharedPref.getString("pref_language", "he_IL"); 

設置爲

String language = sharedPref.getString("pref_language", "he"); 

它按預期工作?

我只需要語言代碼,所以設置只是爲我解決了它。

+0

thx,問題是iw。+ 1 – SacreDeveloper 2014-11-25 13:44:32

23

迴應上述工作,但只是爲語言,當你想使用,例如:

NumberFormat numberFormat = NumberFormat.getCurrencyInstance(Locale.getDefault()); 

之前修改默認的語言環境,因爲它在以前的Android版本中那樣不起作用了。

已經改變了語言環境的初始化方式(我不知道爲什麼,我看了一下API並且什麼都沒說)。

所以改變你初始化語言環境的方式,從這個:

Locale locale = Locale("en_US") 

這樣:

Locale locale = new Locale("en", "US"); 

,它就像一個魅力:)

希望這有助於有人在未來。

乾杯

+1

是的,你確實拯救了我的夜晚睡眠。 – Nostradamus 2016-04-26 21:41:58