Ale*_*iks 28 android locale localization
如何获知当前Android应用用于向用户显示文本的语言(语言环境)?
我知道我可以Locale.getDefault()用来获取默认的操作系统区域设置.但它可能与应用程序用于显示文本和其他资源的区域设置不同,如果app不支持此区域设置.
我需要确定应用程序显示的语言(语言环境),因此应用程序可以将语言传递给服务器,因此它可以本地化返回的结果.
Ale*_*iks 46
我自己的解决方案是添加strings.xml键值对locale=<locale code>,因此context.getResources().getString(R.string.locale)将返回特定于使用的语言环境的语言环境代码.
sot*_*cha 31
这是你的应用程序配置,所以你可以得到它:
getResources().getConfiguration().locale
Run Code Online (Sandbox Code Playgroud)
这不同于
Locale.getDefault()
Run Code Online (Sandbox Code Playgroud)
并显示应用程序使用的区域设置可能不同.
它可能不同,因为开发人员可以通过更新应用程序配置来更改它,请检查:Resources.updateConfiguration
以下代码对我有用:
@TargetApi(Build.VERSION_CODES.M)
private String getCurrentDefaultLocaleStr(Context context) {
Locale locale = context.getResources().getConfiguration().locale;
return locale.getDefault().toString();
}
Run Code Online (Sandbox Code Playgroud)
注意:在Build.VERSION_CODES.N上获取语言环境的方式略有变化。对于N或更高版本,代码应类似于下面的代码块;但是,我只在上面的代码块中对M及以下执行此操作,并且对N及以上也兼容。
// Build.VERSION_CODES.N
Locale locale = context.getResources().getConfiguration().getLocales().get(0);
Run Code Online (Sandbox Code Playgroud)
关于支持的本国语言,我得到了以下信息:
English: en
Traditional Chinese: zh_TW_#Hant
Simplified Chinese: zh_CN_#Hans
Spanish: es_ES
French: fr_FR
Japanese: ja_JP
German: de_DE
Run Code Online (Sandbox Code Playgroud)
有一系列方法以不同的格式提供相同的语言环境信息:
locale.getDefault()。getCountry();
locale.getDefault()。getISO3Language();
locale.getDefault()。getISO3Country();
locale.getDefault()。getDisplayCountry();
locale.getDefault()。getDisplayName();
locale.getDefault()。getDisplayLanguage();
locale.getDefault()。getLanguage();
locale.getDefault()。toString();