简体中文和繁体中文的语言代码是什么?

104

我们正在网站上创建多语言子站点。

我想使用两个字母的语言代码。 西班牙语和法语很容易。 它们将获得以下URL:

mydomain.com/es
mydomain.com/fr

但我在繁体中文和简体中文方面遇到了问题。是否有规定使用哪些两个字母代码表示这些语言?

mydomain.com/zh
mydomain.com/?

2
你说西班牙语和法语很容易,但是CLDR数据库分别列出了26个和47个特定于每个国家的变体!这只取决于你提供的资源有多少依赖于这些差异。 - Patanjali
https://www.loc.gov/standards/iso639-2/faq.html#23 - undefined
4个回答

207

@dkarp提供了一个很好的通用答案。我会补充一些关于中文的具体信息:

有几个国家使用中文作为主要书写语言。它们之间的主要区别在于是否使用简体或繁体字,但也存在一些地方性的差异(如词汇等)。区分它们的标准方式是使用国家代码,例如zh_CN表示中国大陆,zh_SG表示新加坡,zh_TW表示台湾,zh_HK表示香港。

中国大陆和新加坡都使用简体字,而其他国家则使用繁体字。由于中国和台湾人口最多,因此通常只使用zh_CNzh_TW来区分网站的简体和繁体版本。

技术上更为正确但实际上不常用的方式是使用zh_HANS表示(通用的)简体中文字符,使用zh_HANT表示繁体中文字符,除非在有意义区分不同国家时才使用特定国家代码。


13
这是一个很好的回答,写得很好,可能大多数人不知道。它很好地区分了什么是技术上更正确的(zh_HANS),以及实际上在一般使用中的是什么(zh_CN)。你可以通过谷歌搜索这两个术语——有7比1的差距,支持使用zh_CN,这比我预期的要少。 - dkarp
11
实际上,URL中的差异与我预期的一样大。 inurl:zh_CN有430万个结果;inurl:zh_HANS只有2万个结果。不过,这仍然是一个非常有信息量的答案。 - dkarp
4
HANS和HANT之间的区别不如CN和TW有用,因为差异不仅在于字符,而且还与地区特定的用法有关。例如,“subroutine”在中国大陆被翻译为“子程序”,但在台湾被翻译为“子程式”。在这个例子中,简体中文和繁体中文的字符是相同的,但翻译仍应该不同。 - Yongwei Wu
1
我正在尝试理解为什么它以“zh”开头,而不是“ch”,希望不是因为赵家。 - Alex Bin Zhao
3
@AlexBinZhao 语言代码“zh”来自于汉语的中文名称“中文”。您可以在此处找到所有ISO 639-1语言代码的列表:https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes。 - Todd Owen
2
@AlexBinZhao Todd Owen是正确的,zh是ISO标准中的代码,来自于中文“中文”的单词。然而,这忽略了韩语或日语有适合不同罗马化方式的单词,但ISO标准化了它们。此外,ISO总部位于瑞士,该国代码为CH,拉丁语为Confoederatio Helvetica,小心地使用一种死语言,以显示对其四种官方语言没有偏好。我认为当时使用ch代表中国很容易与代表瑞士的ch混淆。 - dlamblin

41

确实有一种标准表示方法。因为人们遇到了与您看到的完全相同的问题——同一种语言但不同的方言或字符——他们使用了一个两个字母的语言代码和一个两个字母的区域代码。所以你可能会在mydomain.com/fr上拥有一个通用的法语页面,但为了面向加拿大法语读者进行国际化,你会得到mydomain.com/fr_CA(加拿大)和 mydomain.com/fr_FR (法国)。一些平台使用破折号而不是下划线来分隔语言和地区代码(因此对应的就是fr-CAfr-FR)。

简体中文的标准语言环境为zh_CN。繁体中文的标准语言环境为zh_TW

我不太敢指向实际的BCP 47标准文档,因为它们过于详细而缺乏可读性。只需使用标准语言环境标识符,如Java中的语言环境标识符,您就可以放心使用。


我觉得使用下划线是不标准的,而使用破折号是标准的:https://en.wikipedia.org/wiki/IETF_language_tag ISO规范定义了有效的代码(fr,zh,Hans,SG,CA),IETF标准定义了如何组合它们(fr-CA,zh-Hans,zh-SG),使用破折号。 - Eric Burel

6

这里放一下。

代码 语言 形式 地区
zh 中文 - -
zh_Hans 中文 简体汉字 -
zh_Hans_CN 中文 简体汉字 中国
zh_Hans_HK 中文 简体汉字 香港特别行政区
zh_Hans_MO 中文 简体汉字 澳门特别行政区
zh_Hans_SG 中文 简体汉字 新加坡
zh_Hant 中文 繁体汉字 -
zh_Hant_HK 中文 繁体汉字 香港特别行政区
zh_Hant_MO 中文 繁体汉字 澳门特别行政区
zh_Hant_TW 中文 繁体汉字 台湾

3

语言是根据所使用的地方而定的(当然!),因此语言和区域代码反映了这一现实。 zh 是基本的语言代码,但由于它有两种主要形式,因此有 zh_Hanszh_Hant,但它们仍然只是语言代码,而不是区域设置。

特定于位置

要完全指定在 特定 位置使用哪种语言,仍然必须加上国家代码后缀,因此使得简体中文和繁体中文都在香港使用时分别为 zh_Hans_HKzh_Hant_HK

实际上,在许多国家,通常需要比国家代码更具体的东西,但这可能会大大增加诸如 CLDR 等数据库的复杂性和维护成本,而支持其进入的支持基础设施(例如 IP 到位置详细信息提取)通常不可用或精度不够。

固定文本

现在,如果代码只是用于指定在用户界面中使用哪组固定字符串,甚至整个站点上的页面集,则不真正需要国家后缀,除非有更多的地方语言变化足够显著(基于位置的信息)以麻烦创建一个完全独立的资源集。

资源集越大,就越有可能需要基于区域设置的语言代码 [在这种情况下,仅是语言属性,而不是真正的区域设置,因此您可以称其为任何名称!],但至少只有在必要时才需要这样做。

即时值

但是,如果想要即时格式化特定变量值,例如日期、时间、货币和数字,则区域设置变得很重要,因为支持此类功能的所有工具(如基于 Unicode CLDR 数据的工具)都期望它们。用于这些需求的区域设置需要成为 单独的设置,而不是内部生成的 UI 语言所设置的代码,除非您想为 每个 已知的区域设置创建资源集,并无限期地维护它们!

浏览器语言工具

请注意,在指定可编辑的网页的区域设置时,例如输入框中启用了属性或 CSS 的拼写检查字段,浏览器的语言工具将根据该区域设置对该字段进行拼写检查。

标准

您必须清楚资源集提供的内容,因此请考虑:

  • 固定字符串?仅语言。
  • 即时格式化?区域设置。
  • 在查看环境中进行拼写检查?区域设置。
  • 整个页面/子站点?仅语言,否则区域设置(作为语言变体),如果需要显着不同的内容。

电子表格以最小化维护开销

我使用电子表格来存储UI字符串,其中每个语言代码都有一个父代码。因此,每个字符串的单元格都有一个公式,该公式从其父级获取其字符串。为了为该语言和字符串创建自定义字符串,我只需用确切的文本覆盖单元格公式即可。这样可以最大程度地减少资源维护量。最后,我运行一个宏来为每种语言生成完整的资源文件。

我的想法是,如果你的编程语言(比如Java)或者语言匹配框架支持zh-hans_CN类型格式,那就使用它。如果不支持,那么国家部分就意味着“脚本”,例如Hans被认为是zh_CN、zh_SG的默认脚本,而Hant则被认为是zh_TW、zh_HK的默认脚本。因此,可以省略脚本部分。如果你的系统根本没有国家匹配,比如大多数语言都有en/fr/de/es,那么至少对于某些语言(比如Drupal大多数情况下都是这样),可能会有zh_hans/zh_hant类型的格式,以便与我的Drupal CMS API匹配。 - armyofda12mnkeys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接