我们正在网站上创建多语言子站点。
我想使用两个字母的语言代码。 西班牙语和法语很容易。 它们将获得以下URL:
mydomain.com/es
mydomain.com/fr
但我在繁体中文和简体中文方面遇到了问题。是否有规定使用哪些两个字母代码表示这些语言?
mydomain.com/zh
mydomain.com/?
我们正在网站上创建多语言子站点。
我想使用两个字母的语言代码。 西班牙语和法语很容易。 它们将获得以下URL:
mydomain.com/es
mydomain.com/fr
但我在繁体中文和简体中文方面遇到了问题。是否有规定使用哪些两个字母代码表示这些语言?
mydomain.com/zh
mydomain.com/?
@dkarp提供了一个很好的通用答案。我会补充一些关于中文的具体信息:
有几个国家使用中文作为主要书写语言。它们之间的主要区别在于是否使用简体或繁体字,但也存在一些地方性的差异(如词汇等)。区分它们的标准方式是使用国家代码,例如zh_CN
表示中国大陆,zh_SG
表示新加坡,zh_TW
表示台湾,zh_HK
表示香港。
中国大陆和新加坡都使用简体字,而其他国家则使用繁体字。由于中国和台湾人口最多,因此通常只使用zh_CN
和zh_TW
来区分网站的简体和繁体版本。
技术上更为正确但实际上不常用的方式是使用zh_HANS
表示(通用的)简体中文字符,使用zh_HANT
表示繁体中文字符,除非在有意义区分不同国家时才使用特定国家代码。
zh_HANS
),以及实际上在一般使用中的是什么(zh_CN
)。你可以通过谷歌搜索这两个术语——有7比1的差距,支持使用zh_CN
,这比我预期的要少。 - dkarpinurl:zh_CN
有430万个结果;inurl:zh_HANS
只有2万个结果。不过,这仍然是一个非常有信息量的答案。 - dkarp确实有一种标准表示方法。因为人们遇到了与您看到的完全相同的问题——同一种语言但不同的方言或字符——他们使用了一个两个字母的语言代码和一个两个字母的区域代码。所以你可能会在mydomain.com/fr
上拥有一个通用的法语页面,但为了面向加拿大法语读者进行国际化,你会得到mydomain.com/fr_CA
(加拿大)和 mydomain.com/fr_FR
(法国)。一些平台使用破折号而不是下划线来分隔语言和地区代码(因此对应的就是fr-CA
和fr-FR
)。
简体中文的标准语言环境为zh_CN
。繁体中文的标准语言环境为zh_TW
。
我不太敢指向实际的BCP 47标准文档,因为它们过于详细而缺乏可读性。只需使用标准语言环境标识符,如Java中的语言环境标识符,您就可以放心使用。
这里放一下。
代码 | 语言 | 形式 | 地区 |
---|---|---|---|
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 | 中文 | 繁体汉字 | 台湾 |
语言是根据所使用的地方而定的(当然!),因此语言和区域代码反映了这一现实。 zh
是基本的语言代码,但由于它有两种主要形式,因此有 zh_Hans
和 zh_Hant
,但它们仍然只是语言代码,而不是区域设置。
特定于位置
要完全指定在 特定 位置使用哪种语言,仍然必须加上国家代码后缀,因此使得简体中文和繁体中文都在香港使用时分别为 zh_Hans_HK
和 zh_Hant_HK
。
实际上,在许多国家,通常需要比国家代码更具体的东西,但这可能会大大增加诸如 CLDR 等数据库的复杂性和维护成本,而支持其进入的支持基础设施(例如 IP 到位置详细信息提取)通常不可用或精度不够。
固定文本
现在,如果代码只是用于指定在用户界面中使用哪组固定字符串,甚至整个站点上的页面集,则不真正需要国家后缀,除非有更多的地方语言变化足够显著(基于位置的信息)以麻烦创建一个完全独立的资源集。
资源集越大,就越有可能需要基于区域设置的语言代码 [在这种情况下,仅是语言属性,而不是真正的区域设置,因此您可以称其为任何名称!],但至少只有在必要时才需要这样做。
即时值
但是,如果想要即时格式化特定变量值,例如日期、时间、货币和数字,则区域设置变得很重要,因为支持此类功能的所有工具(如基于 Unicode CLDR 数据的工具)都期望它们。用于这些需求的区域设置需要成为 单独的设置,而不是内部生成的 UI 语言所设置的代码,除非您想为 每个 已知的区域设置创建资源集,并无限期地维护它们!
浏览器语言工具
请注意,在指定可编辑的网页的区域设置时,例如输入框中启用了属性或 CSS 的拼写检查字段,浏览器的语言工具将根据该区域设置对该字段进行拼写检查。
标准
您必须清楚资源集提供的内容,因此请考虑:
电子表格以最小化维护开销
我使用电子表格来存储UI字符串,其中每个语言代码都有一个父代码。因此,每个字符串的单元格都有一个公式,该公式从其父级获取其字符串。为了为该语言和字符串创建自定义字符串,我只需用确切的文本覆盖单元格公式即可。这样可以最大程度地减少资源维护量。最后,我运行一个宏来为每种语言生成完整的资源文件。