我把简体中文放在values- zh -rCN,zh把繁体中文放在values-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();
}发布于 2018-01-05 14:57:08
在Android 7中,默认情况下支持许多新的语言环境。在某些情况下,正确支持旧语言环境和新语言环境可能很棘手;在这里,我将讨论一个我碰巧知道的语言:中文。
基本背景:
中文是用两种不同的脚本编写的:简体和繁体每个说中文的地区通常只使用一个脚本,而理想情况下每个地区都有一个本地化的脚本,我们在这里假设每个脚本只有一个资源集。
在Android 7之前,可以使用以下中文语言环境:
zh-CN (简体) zh-TW (繁体)在某些情况下: zh-SG (简体) zh-HK (繁体) zh-MO (繁体)支持上述区域设置,同时最大限度地减少资源重复的通用资源布局方案为:
values-zh:繁体值-zh-rCN:简化值-zh-rSG:简化换言之,传统资源放在根上,zh-TW、zh-HK和zh-MO包含在回退中。
在Android 7中,旧的语言区域区域设置消失了,取而代之的是:
zh-Hans-CN zh-Hans-MO zh-Hans-HK zh-Hans-SG zh-Hant-TW zh-Hant-Hant-HK zh-Hant-MO注:
脚本和区域是单独指定的,现在有默认的区域设置,在传统的传统区域中指定简化的脚本: zh-Hans-MO和zh-Hans-HK。在Android 7中使用旧方案时出现问题:
zh-Hans-*在zh的任何子代之前回落到zh,因此看起来是传统的而不是简化的zh-Hans看起来根本不被识别这表明倾向于zh是简化的,而不是传统的。然而,SDK本身并不清楚这一点,它只有zh-CN、zh-HK和zh-TW资源。zh-Hant-*回退到zh-Hant,然后是默认值,因此看起来就像en Just zh和zh-Hant足以覆盖Android 7区域设置,但我们需要保持对Android 6和更早版本的支持。因此,现在最小的正确资源布局是:
values-zh:简化值-zh-rTW:繁体值-zh-rHK:繁体值-zh-rMO:繁体值-b+zh+Hans+HK:简化值-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
https://stackoverflow.com/questions/44714408
复制相似问题