我在大多数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 :(得分: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”);