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

Man*_*ser 70 android internationalization

在我的Android应用程序中实现传统和简体中文支持的过程中,我对如何工作感到困惑.

因此,从阅读的文档 ,以及像一些讨论这个这个我已经把简化中国成

  • 值-ZH
  • 值-ZH-RCN
  • 值-ZH-RSG

和繁体中文

  • 值-ZH-RTW
  • 值-ZH-RHK

这一切都很好,但不知何故对我来说没有意义(对不起,如果我不太了解中文简体与传统用法).

根据我在模拟器和根电话中检查区域设置对话框的理解,用户可以将区域设置更改为简体中文或繁体中文.

现在问题就在这里.系统如何知道从哪里获得简体或繁体中文strings.xml.是否存在某种假设,如果我应该显示简体中文从值-zh获取它并从值-zh-rTW获得传统?

但是,如果用户位于香港并将其设备设置为显示简体中文,该怎么办?或者,如果世界上其他地方的移民将他的设备设置为繁体中文,但他的地区是美国或加拿大?

我该怎么做才能允许我的用户设置他们的区域设置并让我的应用程序显示正确的区域设置?

更新:

通过进一步调查,我认为Android手机用户无法将该国家/地区与该语言分开设置.他们只能在UI中设置所谓的语言环境.它由语言和国家组成,但列表有限,因此无法进行多种组合.

例如,生活在美国的中国人想要使用繁体中文可以将语言设置为繁体中文(至少在根电话上),然后会有一个zh-rTW的语言环境.他绝不能将他的国家单独设置为美国.以类似的方式,任何类型的移民都不能将他们的母语设置为他们目前居住的国家.

基本上这意味着只支持一堆语言和国家组合.现在的问题是如何找出它们是哪些?

Man*_*ser 54

所以我认为经过进一步的调查和Marks的回答,我将自己提供一个答案.这是:

开箱即用的Android只有两个语言环境zh_rCN,简体中文和zh_rTW,这是繁体中文.正如您在Settings应用程序中看到的那样,这些是唯一提供的语言环境:

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
  • zh_CN.txt
  • zh_HK.txt
  • zh_Hans.txt
  • zh_Hans_CN.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代码.所以理论上这意味着我们可以拥有

  • 简体中文在中国,香港,澳门和新加坡
  • 香港,澳门和台湾的繁体中文

但请记住,必须修改"设置"应用以选择不同的区域设置.因此,在这个阶段,简体中文转换为zh_rCN和传统的zh_rTW,对于拥有支持其他语言环境的修改过的Android映像的用户,您应该分开.

在任何情况下,在保存方面,您可以使用Configuration类来获取语言环境,例如在Application类中使用getResources().getConfiguration().locale.

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

所以要回顾一下......最小的设置是镜像在设置应用程序中完成的操作(只有zh-rCN和zh-rTW),但如果你想为新加坡提供默认的语言环境,香港,澳门提供繁体中文默认你也可以这样做,它应该工作.但是我没有证据表明在任何地方都使用过这样的配置.

希望有所帮助.


Sur*_*gch 8

更新的答案

问题和以前的答案都很古老.很难说它们仍然是多么正确.这个答案适用于其他来这里的人,他们只想在他们的应用中支持繁体中文和简体中文,但并不过分关注地方的细节.

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

在Android Studio中右键单击该res文件夹,然后选择" 新建">"Android资源文件".键入strings文件名,选择区域设置从列表中.

在此输入图像描述

向下滚动到zh语言.stringsCN添加一个文件:中国(简体)和一个TW:台湾(传统).如果您只使用一个,那么只需选择任何区域.

据我了解文档,查找将首先检查语言和区域是否完全匹配(例如:Chinese-Traditional-Taiwan).然后它会回到更广泛的检查.(此系统是从Android 7.0开始的.)

1. zh-Hant-TW   // Chinese - Traditional - Taiwan
2. zh-Hant      // Chinese - Traditional
3. zh           // Chinese
Run Code Online (Sandbox Code Playgroud)

我不能完全肯定这一切是如何工作这么请仔细阅读这个文档.

在我自己的应用程序中使用此方法后,在Traditional和Simplified之间切换系统设置也会更改应用程序显示.

在传统和简化之间转换

如果您已有传统或简体中的一种翻译,则可以在线自动转换文本.从谷歌翻译开始转换为另一个(只需粘贴到您的strings.xml文件中).它已经做得相当不错.然后使用众多在线转换器中的一个再次执行此操作.使用文本比较工具或站点(text-compare.com是好的)来比较转换的结果.这将有助于您发现Google所犯的任何错误.


Ang*_*Koh 7

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

传统的

values-b+zh+Hant or
values-b+zh+TW (defaults to traditional)
values-b+zh+Hant+TW (if you want to include regions)
Run Code Online (Sandbox Code Playgroud)

您可以查看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).
Run Code Online (Sandbox Code Playgroud)

记得添加 -b 并将每个标签中的 - 替换为 +

  • 这应该是正确的答案,尤其是当您只想提供 2 个翻译时:所有地区的 Hans 和 Hant。Hans在中国大陆和新加坡使用,Hant在香港和台湾使用。如果你想通过文本到语音提供音频内容,这个答案的第二部分可能很好。 (2认同)