在我的Android应用程序中实现传统和简体中文支持的过程中,我对这应该如何工作感到困惑。
所以从阅读documentation 以及this和this之类的讨论,我已将简体中文放入
和繁体中文进入
这一切都运行正常但不知何故对我来说没有意义(对不起,如果我对中文简化与传统用法不太了解)。
根据我的理解,通过检查模拟器中的语言环境设置对话框以及根电话,用户可以将语言环境更改为简体中文或繁体中文。
现在问题就在这里。系统如何知道从哪里获得简体或繁体中文strings.xml。是否存在某种假设,如果我应该显示简体中文从values-zh获取它并从值-zh-rTW获得传统?
但是,如果用户位于香港并将其设备设置为显示简体中文,该怎么办?或者,如果世界上其他地方的移民将他的设备设置为繁体中文,但他的地区是例如美国还是CA?
我必须做些什么才能让我的用户设置他们的区域设置并让我的应用显示正确的区域设置?
更新:
通过进一步调查,我认为Android手机用户无法将该国家/地区与该语言分开设置。他们只能在UI中设置所谓的语言环境。它由语言和国家组成,但列表有限,因此无法进行多种组合。
E.g。一个生活在美国想要使用繁体中文的中国人可以将语言设置为繁体中文(至少在根电话上),然后会有一个zh-rTW的语言环境。他绝不能将他的国家单独设置为美国。以类似的方式,任何类型的移民都不能将他们的母语与他们目前居住的国家设置在一起。
基本上,这意味着只支持一堆语言和国家/地区的组合。现在的问题是如何找出它们是哪些?
答案 0 :(得分:53)
所以我想在经过进一步调查后,马克斯回答我会自己提供一个答案。这是:
开箱即用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/ 你可以看到中文有
Hant是简体中文的传统和汉语的ISO代码。所以理论上这意味着我们可以拥有
但请注意,必须修改“设置”应用以选择不同的区域设置。因此,在这个阶段,简体中文转换为zh_rCN和传统的zh_rTW,对于拥有支持其他语言环境的修改过的Android映像的用户,您应该分开。
在任何情况下,在保存方面,您可以使用Configuration类来获取区域设置,例如在您的Application类中使用getResources()。getConfiguration()。locale。
你可以,例如记录并将数据发送到您的跟踪系统(无论您使用什么),或者您可以检查支持的数据并使用消息中的区域设置抛出异常,然后将显示在您的市场界面中...但这意味着你的应用程序至少有一次崩溃(如果你在球上,你可以在几分钟之后发布和更新......)
所以回顾一下......最小的设置是镜像在设置应用程序中完成的操作(只有zh-rCN和zh-rTW),但如果你想为新加坡,香港,澳门提供传统的默认语言环境中文默认你也可以这样做,它应该工作。但是我没有证据表明在任何地方使用过这样的配置..
希望有所帮助。
答案 1 :(得分:6)
问题和以前的答案都很古老。很难说它们仍然是多么正确。这个答案适用于其他来这里的人,他们只想在他们的应用程序中支持繁体中文和简体中文,但并不过分关注地方的细节。
string.xml
个文件在Android Studio中右键单击res
文件夹,然后选择新建> Android资源文件。为文件名键入strings
,然后从列表中选择区域设置。
向下滚动到 zh 获取该语言。为 CN:中国(简体)添加一个strings
文件,为 TW:台湾(传统)添加一个1. zh-Hant-TW // Chinese - Traditional - Taiwan
2. zh-Hant // Chinese - Traditional
3. zh // Chinese
文件。如果您只使用一个,那么只需选择任意地区。
据我了解documentation,查找将首先检查语言和区域是否完全匹配(例如:Chinese-Traditional-Taiwan)。然后它会回到更广泛的检查。 (此系统是从Android 7.0开始的。)
strings.xml
我不完全确定这一切是如何运作的,所以请阅读this和this文档。
在我自己的应用程序中使用此方法后,在Traditional和Simplified之间切换系统设置也会改变应用程序显示。
如果您已经有一个繁体或简体的翻译,您可以在线自动转换文本。从Google翻译开始转换为另一个(只需粘贴到Integer
文件中)。它已经做得相当不错。然后使用众多在线转换器中的一个再次执行此操作。使用文本比较工具或网站(text-compare.com很好)来比较转化结果。这将有助于您发现Google所犯的任何错误。
答案 2 :(得分:1)
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并将-替换为+