Android编程如何获取设备当前选中的语言?
正确获取Android设备当前语言并实现自动本地化的方案
你的代码问题所在
你使用的getConfiguration().locale是Android 7.0(API 24)已废弃的API,在高版本系统下,这个方法可能无法正确获取当前系统选中的语言,甚至会返回应用缓存的旧语言值(比如你提到的"es")。另外,如果你的应用没有配置对应语言的资源文件,系统也会 fallback 到默认语言资源。
不同Android版本的正确获取方式
1. Android 7.0(API 24)及以上
使用getLocales()获取当前优先语言:
Locale currentLocale = getApplicationContext().getResources().getConfiguration().getLocales().get(0); String language = currentLocale.getLanguage(); // 比如日语返回"ja"
2. Android 7.0以下(API 23及更低)
通过版本判断做兼容处理:
Locale currentLocale; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { currentLocale = getApplicationContext().getResources().getConfiguration().getLocales().get(0); } else { currentLocale = getApplicationContext().getResources().getConfiguration().locale; } String language = currentLocale.getLanguage();
实现应用自动本地化的注意事项
- 配置对应语言的资源文件:在
res目录下创建对应语言的资源文件夹,比如日语对应values-ja、英语对应values-en,每个文件夹内放置该语言的strings.xml。如果缺少对应语言的资源,系统会自动使用默认values目录下的资源。 - 避免硬编码语言设置:不要在代码中强制固定语言,让应用默认跟随系统语言配置即可。如果需要支持手动切换语言,切换后需重启Activity或Application才能生效。
- 监听系统语言变化:如果需要在系统语言切换时实时更新应用语言,可以重写
onConfigurationChanged方法,在语言变化时重新加载资源并刷新界面:
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // 重新获取当前语言并更新界面 Locale currentLocale = newConfig.getLocales().get(0); // 执行界面刷新逻辑,比如重新设置文本内容等 }
内容的提问来源于stack exchange,提问作者MARSH
相关产品推荐
相关产品推荐

