我把简体中文放在了值-zh-rCN,zh和繁体中文的值-zh-rTW中。但是在更改语言环境时,它总是从zH加载字符串。以下是我如何更改区域设置。
public void setLanguage(String languageCode, String countryCode){
Locale locale = new Locale(languageCode, countryCode);
Locale.setDefault(locale);
Configuration config = getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
setSystemLocale(config, locale);
} else {
setSystemLocaleLegacy(config, locale);
}
BaseSharedPreference.getInstance().setLanguage(locale.getLanguage());
recreate();
}
答案 0 :(得分:-1)
在Android 7中,默认支持许多新的语言环境。在某些情况下,正确支持旧语言环境和新语言环境可能很棘手;在这里,我将讨论一个我碰巧知道的问题:中文。
基本背景:
中文用两种不同的脚本编写:简体和繁体 每个中文区域通常只使用一个脚本 虽然理想情况下可以为每个区域进行本地化,但我们假设每个脚本只有一个资源集。
在Android 7之前,可以使用以下中文语言环境:
zh-CN(简体) zh-TW(繁体) 在某些情况下: zh-SG(简体) zh-HK(繁体) zh-MO(繁体) 支持上述语言环境同时最小化资源重复的公共资源布局方案是:
values-zh:传统 values-zh-rCN:简化 values-zh-rSG:简化 换句话说,传统资源放在根部,zh-TW,zh-HK和zh-MO由回退覆盖。
在Android 7中,较旧的语言区域语言环境消失了,取而代之的是:
ZH-汉斯-CN ZH-汉斯-MO ZH-汉斯-HK ZH-汉斯 - SG ZH-汉特-TW ZH-汉特-HK ZH-汉特-MO 注意:
脚本和区域是单独指定的 现在,默认语言环境在传统的传统区域中指定简化脚本:zh-Hans-MO和zh-Hans-HK。 在Android 7中使用旧方案的问题:
zh-Hans- *在zh之前的任何子节点之前回到zh,因此将显示为Traditional而不是Simplified zh-Hans似乎根本没有得到承认 这表明zh的偏好是简化的,而不是繁体的。然而,SDK本身并不清楚,它本身只有zh-CN,zh-HK和zh-TW资源。 zh-Hant- *回退到zh-Hant然后是默认值,因此会显示为en 只需zh和zh-Hant足以覆盖Android 7语言环境,但我们需要保持对Android 6及更早版本的支持。因此,现在最小的正确资源布局是:
values-zh:简化 values-zh-rTW:传统的 values-zh-rHK:传统的 values-zh-rMO:传统的 values-b + zh + Hans + HK:简化 values-b + zh + Hans + MO:简化 有了这个,我们得到了理想的行为:
在Android 6及更早版本中:
zh-CN和zh-SG回归zh(简体) zh-TW,zh-HK和zh-MO有特定资源(繁体) 在Android 7上:
zh-Hans-CN和zh-Hans-SG回归zh(简体) zh-Hant-TW,zh-Hant-HK和zh-Hant-MO回归到他们的语言区域语言环境(繁体) zh-Hans-HK和zh-Hans-MO有特定资源(简体)
您可以在此帖Link
中查看详细信息