【发布时间】:2015-08-28 13:07:18
【问题描述】:
一项任务包括以下内容:需要为用户提供更改应用程序界面语言的可能性(ru、en、uk,以及默认情况下将选择 en)。为了实现这个功能,它已经完成了:
1) 创建了资源文件夹:values、values - uk、values - ru、values - en,其中包含内容翻译的文件 strings.xml。
2) 通过 Spinner 取出并写在 SharedPreferences 语言 id 中。
3) 在应用程序开始时使用 onCreate 本地化:
SharedPreferences preferences = context.getSharedPreferences(Constants.APP_PREFERENCES, Context.MODE_PRIVATE);
String lang = preferences.getString(Constants.LANGUAGE, "default");
if (lang.equals("default")) {
lang=context.getResources().getConfiguration().locale.getCountry();
}
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
Log.i("Lang change", "Locale=" + locale);
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
几乎所有的人都会提出申请,但不是全部。即,在某些地方(在某些对话和 BaseAdapters 中,NavigationDrawer)会准确地提取系统语言的本地化。例如,在乌克兰语本地化的设备上,默认为英语,并且在应用程序中选择了俄语,然后在应用程序中的较高指示位置的总体中,除了基本的俄语之外,还会提取乌克兰语内容。
在onConfigurationChanged()中突破处理:
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, null);
}
并从 manifest.xml android 中的每个活动中清除:configChanges = "locale"。
没有帮助。
可能有什么问题?
【问题讨论】:
-
我们也有类似的问题。你的解决了吗?如果是 - 请让我联系:*.com/questions/51839689/…
标签: android localization locale