android - Android根据设备语言设置应用语言
问题描述
我有一个应用程序,如果用户的设备语言设置为斯洛伐克语,则应用程序语言为斯洛伐克语,否则为 EN。所以语言没有在应用程序中改变,而是来自安装 SK 或 EN。
String languageToLoad = Resources.getSystem().getConfiguration().locale.getLanguage();
String lng = "sk".equals(languageToLoad) ? "sk" : "en";
Locale locale = new Locale(lng);Locale.setDefault(locale);
Configuration config = new Configuration();config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
我注意到,Configuration 中的语言环境已被弃用,并且 Resources 中的 updateConfiguration(Configuration, DisplayMetrics) 已被 android N 弃用(我认为)。
然而由于某种原因,它仍然适用于更高的 Android 版本,但 Android Studio 表示它已被弃用。
所以我尝试将代码分开:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
String languageToLoad = Resources.getSystem().getConfiguration().getLocales().get(0).getLanguage();
String lng = "sk".equals(languageToLoad) ? "sk" : "en";
Locale locale = new Locale(lng);Locale.setDefault(locale);
Configuration config = new Configuration();config.setLocale(locale);
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
} else {
String languageToLoad = Resources.getSystem().getConfiguration().locale.getLanguage();
String lng = "sk".equals(languageToLoad) ? "sk" : "en";
Locale locale = new Locale(lng);Locale.setDefault(locale);
Configuration config = new Configuration();config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
但是第一个条件(对于> = N)不行,我不确定如何替换当前代码。它仍然说 updateConfiguration 已被弃用。
即使我尝试getBaseContext().createConfigurationContext(config);
它也不会改变语言
解决方案
当 API >= N 时,替换为:
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
这样:
context.createConfigurationContext(config);
但是,您必须创建自定义上下文包装器,并确保重新启动活动。请参阅下一个接受的答案:
推荐阅读
- r - 使用 R 优化/向量化数据库查询
- lxd - LXD/LXC 安装问题与 snap
- mysql - 将准备好的语句与 CONCAT 一起使用时 MySQL 语法错误
- functional-programming - 为什么总和(或有区别的联合或不相交的联合)是乘积的倒数?
- python - Python Regex:如何使用正则表达式读取多行文件,并从每行中提取单词以创建两个不同的列表
- java - “基本”属性类型不应是持久性实体
- r - 如何在 ggarrange 中编辑常见的图例标题?
- google-analytics - 从服务器端向谷歌分析发送自定义数据
- python - Python 请求:将 iter_content 块流式传输到 pandas read_csv 函数
- java - 更新 Google Play 服务包后,将无法构建较旧的 Xamarin Android 项目。java.lang.IllegalArgumentException