【发布时间】:2017-04-28 07:26:27
【问题描述】:
我正在向 android 应用程序添加一项新功能,使用户能够在两种语言之间切换。
到目前为止,为了测试语言环境的变化,我一直在我的一个活动中使用以下代码。
Locale myLocale = new Locale("ru");
Locale.setDefault(myLocale);
Resources res = this.getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
Locale current = getResources().getConfiguration().locale;
if (current.getLanguage().equals(myLocale.getLanguage())){
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
conf.setLocale(myLocale);
createConfigurationContext(conf);
recreate();
}else{
conf.locale = myLocale;
res.updateConfiguration(conf, res.getDisplayMetrics());
recreate();
}
}
setContentView(R.layout.activity_main);
检查版本代码的原因是 createConfigurationContext() 需要 API 级别 17,而我正在使用 API 级别 16。所以这个条件允许我使用已弃用的 updateConfiguration() 以及 createConfigurationContext()。
我还为相关语言创建了 strings.xml 并添加了一些值用于测试。
到目前为止所取得的成就是日期以翻译语言显示,这告诉我语言环境实际上已更改为正确的语言。其他应该从 strings.xml (ru) 中获取的字符串根本没有改变。
是否以与布局 xml 不同的方式调用具有多个翻译的字符串(参见下面的代码)?还是我的结构不对?
android:text="@string/upcoming_title"
【问题讨论】:
-
您是在扩展布局之前还是之后更改区域设置?它不会神奇地更新您的膨胀视图。只有在 更改后加载的字符串会受到影响,通常需要重新启动活动
-
是的,并且活动正在通过 recreate() 方法重新启动,并且可以通过日志确认正在发生。
标签: android locale multilingual