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


74

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

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

  • 值-zh
  • 值-zh-rCN
  • 值-zh-rSG

和繁体中文成

  • 值-zh-rTW
  • 价值观-zh-rHK

一切正常,但对我来说不知何故(对不起,如果我对简体中文和传统用法不甚了解)。

据我了解,通过在模拟器以及有根电话中检查区域设置对话框,用户可以将区域设置更改为简体中文或繁体中文。

现在是问题。系统如何知道从何处获取简体或繁体中文strings.xml。是否存在某种假设,即如果我应该显示简体中文,则可以从values-zh中获取它,而从values-zh-rTW中获取传统的东西?

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

我该怎么做才能允许我的用户设置他们的语言环境,并让我的应用以正确的语言环境显示?

更新:

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

例如,居住在美国的中国人想要使用繁体中文,可以将语言设置为繁体中文(至少在有根电话的情况下),然后将其设置为zh-rTW。他决不能将自己的国家单独设置为美国。以类似的方式,任何类型的移民都无法在他们当前居住的国家/地区设置母语。

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


我知道我可以尝试通过阅读源代码来弄清楚这一点..如果没有人帮助我,我可能会..
Manfred Moser 2010年

Answers:


58

因此,我认为经过进一步调查并获得Marks答复后,我将自己提供一个答复。这是去:

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
  • 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

汉特是繁体中文的ISO代码,汉斯是简体中文的代码。所以从理论上讲,这意味着我们可以

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

但是请记住,必须修改“设置”应用以具有不同的语言环境选择。因此,在此阶段,简体中文可以翻译为zh_rCN和传统的zh_rTW,对于拥有支持其他语言环境的经过修改的Android图像的用户,您应该与众不同。

无论如何,都可以使用Configuration类来获取语言环境,例如,在您的Application类中使用getResources()。getConfiguration()。locale。

例如,您可以记录该日志并将数据发送到跟踪系统(无论使用什么),也可以检查受支持的日志并在消息中使用语言环境设置引发异常,然后该异常将显示在市场界面中……但是,这将意味着您的应用至少崩溃了一次(如果您处于崩溃状态,则可以在几分钟后发布和更新。)

因此,回顾一下..最小设置将反映在设置应用程序中所做的操作(仅具有zh-rCN和zh-rTW),但是如果要为新加坡,香港,澳门提供默认语言环境,则默认提供繁体中文您也可以这样做,它应该可以工作。但是,我没有证据表明可以在任何地方使用这种配置。

希望能有所帮助。


从Android 7.0开始,如果用户选择zh-rSG,它将查找zh-rSG,如果找不到它,它将使用简化的脚本查找zh-rCN或任何其他语言环境。–同样,如果用户选择sv-rFI,则会按顺序查找:sv-rFI,sv,sv-rSE
Liggliluff

当前存储库确实提供了values-zh-rHK
考拉杨

1
values-zh-rCN将无法编译。它说无效的资源目录名称。
Janusz

10

更新的答案

这个问题和以前的答案很老。很难说出它们仍然是多么正确。此答案适用于来到这里的其他人,他们只是想在其应用程序中同时支持繁体中文和简体中文,但又不太在意本地细节。

添加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

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

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

在繁体和简体之间转换

如果您已经有繁体或简体两种翻译,则可以在线自动转换文本。首先从Google翻译开始转换为其他翻译(只需粘贴到strings.xml文件中)。它已经做得相当不错。然后使用许多在线转换器之一再次进行几次。使用文字比较工具或网站(最好使用text-compare.com)比较转换结果。这将帮助您发现Google犯的任何错误。


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并将-替换为+


1
这应该是正确的答案,尤其是当您只想提供两种翻译时:汉斯和汉特适用于所有地区。汉斯(Hans)用于中国大陆和新加坡,汉特(Hant)用于香港和台湾。而且,如果您想通过文本到语音来提供音频内容,那么此答案的第二部分可能会很好。
ZZZ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.