代码之家  ›  专栏  ›  技术社区  ›  Manfred Moser

简体中文和繁体中文与地区

  •  67
  • Manfred Moser  · 技术社区  · 14 年前

    在我的Android应用程序中实现繁体中文和简体中文支持的过程中,我搞不清楚这应该如何工作。

    所以从阅读 documentation 以及一些类似的讨论 this this 我把简体中文输入

    • 值zh
    • 值zh rCN
    • 值zh rSG

    和繁体中文

    • 值zh rTW
    • 值zh rHK

    这一切都很好,但不知怎的对我没有意义(对不起,如果我不了解足够的中文简体与传统用法)。

    根据我在emulator和根电话中检查语言环境设置对话框的了解,用户可以将语言环境更改为简体中文或繁体中文。

    现在问题来了。系统如何知道从何处获取简体或繁体中文strings.xml。有没有一种假设是这样的:如果我要显示简体中文,从值zh获取它,从值zh rTW获取繁体?

    但如果用户位于香港,并将其设备设置为显示简体中文怎么办?或者,如果一个移民在世界其他地方将他的设备设置为传统的中国,但他的地区是美国或加州,那会怎么样?

    我需要做什么才能允许我的用户设置他们的区域设置并让我的应用程序以正确的区域设置出现?

    更新:

    从进一步的调查我相信,一个Android手机用户不能把国家和语言分开设置。他们只能在UI中设置所谓的区域设置。它由语言和国家组成,但清单是有限的,因此许多组合是不可能的。

    E、 一个居住在美国的中国人想要使用繁体中文,可以将语言设置为繁体中文(至少在一个有根的手机上),然后将语言环境设置为zh rTW。他决不能把他的国家和我们分开。以类似的方式,任何一种移民都不能把他们的母语和他们目前居住的国家联系起来。。

    基本上,这意味着只支持语言和国家的组合。现在的问题是如何找出他们是谁?

    3 回复  |  直到 14 年前
        1
  •  54
  •   gordon Manfred Moser    8 年前

    所以我想在进一步调查之后,加上马克的回答,我会自己提供一个答案。下面是:

    开箱即用的Android只有两种语言环境zhúrCN(简体中文)和zhúrTW(繁体中文)。从设置应用程序中可以看到,这些是唯一提供的区域设置:

    https://android.googlesource.com/platform/packages/apps/Settings/+/master/res/

    然而,Android系统的任何其他创造者,例如在中国销售的手机,都可能改变他们的添加内容。通过查看icu4c应用程序中的区域设置列表,可以找到理论上支持的总体设置:

    https://android.googlesource.com/platform/external/icu4c.git/+/master/data/locales/ 你可以看到中国人有

    • zh.txt文件
    • 中文版
    • 中文香港.txt
    • zh_Hans.txt文件
    • 中文版
    • zh_Hans_HK.txt
    • zh_Hans_MO.txt文件
    • zh_Hans_SG.txt文件
    • zh_Hant.txt文件
    • zh_Hant_HK.txt
    • zh_Hant_MO.txt文件
    • zh_Hant_TW.txt文件
    • zh_MO.txt文件
    • zh_SG.txt文件
    • zh_TW.txt文件

    Hant是繁体中文的ISO代码,Hans是简体中文的ISO代码。所以理论上这意味着我们可以

    • 中国、香港、澳门和新加坡的简体中文
    • 港澳台地区的繁体中文

    不过,请记住,必须修改设置应用程序才能选择不同的区域设置。所以在这个阶段,简体中文翻译成zhúrCN和繁体zhúrTW,你应该为那些拥有这样一个修改过的Android镜像并支持其他语言环境的用户而分道扬镳。

    在任何情况下,您都可以使用配置类来获取区域设置,例如在应用程序类中使用getResources().get Configuration().locale。

    例如,您可以记录这些数据并将其发送到您的跟踪系统(无论您使用什么),或者您可以检查受支持的数据,并在消息中抛出区域设置的异常,然后该异常将显示在您的市场界面中。。。不过,这意味着你的应用程序至少会崩溃一次(如果你很在行,你可以在几分钟后发布和更新…)

    所以概括一下。。最低限度的设置是镜像在设置应用程序中所做的操作(只有zh rCN和zh rTW),但是如果您想为新加坡、香港、澳门提供默认的中文语言环境,您也可以这样做,它应该可以工作。但是,我没有证据表明这种配置在任何地方都使用。。

    希望能有所帮助。

        2
  •  8
  •   Suragch Shmidt    7 年前

    更新的答案

    这个问题和以前的答案都很老了。很难说他们还有多正确。这个答案是对其他来这里的人来说的,他们只是想在他们的应用程序中同时支持繁体中文和简体中文,但并不过分关注本地的细节。

    添加 string.xml 繁体和简体中文文件

    在Android Studio中,右键单击 res 文件夹和选择 新建>Android资源文件 . 键入 strings 对于 文件名 然后选择 地区 从名单上。

    enter image description here

    向下滚动至 zh公司 为了语言。添加一个 文件 CN:中国 (简体)和一个 台湾:台湾 (传统)。如果你只使用一个,那就选择 任何地区 .

    据我所知 documentation ,查找将首先检查语言和区域是否完全匹配(例如:中国传统台湾)。然后,它将回落到更广泛的检查。(此系统从Android 7.0开始。)

    1. zh-Hant-TW   // Chinese - Traditional - Taiwan
    2. zh-Hant      // Chinese - Traditional
    3. zh           // Chinese
    

    我不太清楚这是怎么回事,所以请看 this this 文档。

    在我自己的应用程序中遵循此方法,在传统和简化之间切换系统设置也更改了应用程序显示。

    在传统和简化之间转换

    如果您已经有一个传统或简化的翻译,您可以在线自动转换文本。从Google Translate开始转换到另一个(只需粘贴到 strings.xml 文件)。它已经做得相当好了。然后使用许多在线转换器中的一个再次进行多次。使用文本比较工具或网站( text-compare.com 很好)来比较转换的结果。这将帮助你抓住谷歌犯下的任何错误。

        3
  •  4
  •   Angel Koh Sergey Kalinichenko    6 年前

    https://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources

    Android 7.0(API级别24)引入了对BCP 47语言的支持 标记,可用于限定特定于语言和区域的 资源。语言标记由一个或多个序列组成 子标记,每个子标记都细化或缩小了语言的范围 由总标签标识。

    现在您可以使用BCP 47标记定义传统的或简化的。(若要使用BCP 47语言标记,请连接b+和两个字母的ISO 639-1语言代码,然后可选地附加以+分隔的子标记。)

    更具体地说:-

    简化 :

    values-b+zh (defaults to simplified) 
    values-b+zh+Hans or
    values-b+zh+Hans+CN (if you want to include regions)
    

    传统的 :

    values-b+zh+Hant or
    values-b+zh+TW (defaults to traditional)
    values-b+zh+Hant+TW (if you want to include regions)
    

    你可以看看 https://tools.ietf.org/html/bcp47 其他有趣的组合。包括:-

      zh-cmn-Hans-CN (Chinese, Mandarin, Simplified script, as used in
      China)
    
      cmn-Hans-CN (Mandarin Chinese, Simplified script, as used in
      China)
    
      zh-yue-HK (Chinese, Cantonese, as used in Hong Kong SAR)
    
      yue-HK (Cantonese Chinese, as used in Hong Kong SAR)
    
      zh-nan-TW (min nan Chinese, as used in Taiwan)
    
      zh-hak-CN (Chinese, Hakka, China).
    

    记住在每个标签中添加-b并替换-in+