Android Simplified Chinese and traditional chinese not working

Jat*_*der 2 android locale localization

I have put simplified Chinese in values-zh-rCN , zh and traditional Chinese in values-zh-rTW. But on changing locale it always load strings from zH. Here is how i am changing Locale.

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();
}
Run Code Online (Sandbox Code Playgroud)

小智 7

在 Android 7 中,默认支持许多新的区域设置。在某些情况下,正确支持旧语言环境和新语言环境可能很棘手;在这里我要讨论一个我碰巧知道的:中文。

基本背景:

中文以两种不同的文字书写:简体和繁体 每个华语地区通常只使用一种文字。虽然理想情况下会针对每个地区进行本地化,但我们在此假设我们只为每种文字设置一种资源。

在 Android 7 之前,可以使用以下中文语言环境:

zh-CN (Simplified)
zh-TW (Traditional)
Run Code Online (Sandbox Code Playgroud)

在某些情况下:

zh-SG (Simplified)
zh-HK (Traditional)
zh-MO (Traditional)
Run Code Online (Sandbox Code Playgroud)

支持上述区域设置同时最大限度地减少资源重复的常见资源布局方案是:

values-zh: Traditional
values-zh-rCN: Simplified
values-zh-rSG: Simplified
Run Code Online (Sandbox Code Playgroud)

换句话说,传统资源被放在根部,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-HK
zh-Hant-MO
Run Code Online (Sandbox Code Playgroud)

笔记:

脚本和区域是单独指定的现在有默认区域设置在传统的繁体区域中指定简化脚本: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。仅 zh 和 zh-Hant 就足以覆盖 Android 7 语言环境,但我们需要保持对 Android 6 及更早版本的支持。

因此,现在最小的正确资源布局是:

values-zh: Simplified
values-zh-rTW: Traditional
values-zh-rHK: Traditional
values-zh-rMO: Traditional
values-b+zh+Hans+HK: Simplified
values-b+zh+Hans+MO: Simplified
Run Code Online (Sandbox Code Playgroud)

这样我们就得到了想要的行为:

在 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 有特定资源(简体)

您可以从这个帖子链接查看详细信息