棒棒糖设置默认本地不起作用

时间:2014-11-23 08:27:28

标签: android android-5.0-lollipop

我在大多数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);


}

在棒棒糖运行设备上使用时,没有任何改变。

任何人都知道如何解决这个问题?

3 个答案:

答案 0 :(得分:23)

响应以上工作但仅针对语言,例如:

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

之前修改默认语言环境,不再像以前的Android版本那样工作了。

已经改变了语言环境的初始化方式(我不知道为什么,我看了一下API,什么都没说)。

因此,请更改初始化语言环境的方式:

Locale locale = Locale("en_US")

到此:

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

它就像一个魅力:)

希望这有助于将来。

干杯

答案 1 :(得分:2)

我注意到在棒棒糖中有类似的行为,但在以前的API版本中没有。

在我的情况下,问题是因为我像你一样设置语言代码和国家代码,但我的资源文件夹是特定于语言的,只有“values-fr”和“values-es”等。

如果设置此行

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

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

是否按预期工作?

我只需要语言代码,所以设置就是为我解决了这个问题。

答案 2 :(得分:0)

终于找到了答案。

答案是使用“iw”代替he_il。

String language = sharedPref.getString(“pref_language”,“iw”);