我们正在网站上创建多语言子网站。
我想使用2个字母的语言代码。西班牙语和法语很容易。他们将获得以下网址:
mydomain.com/es
mydomain.com/fr
但是我遇到了繁体中文和简体中文的问题。是否有两种字母代码用于这些语言的标准?
mydomain.com/zh
mydomain.com/?
答案 0 :(得分:137)
@dkarp给出了一个很好的一般答案。我将添加一些关于中文的其他细节:
有几个国家的中文是主要的书面语言。它们之间的主要区别在于它们是使用简化字符还是传统字符,但也存在较小的区域差异(词汇表等)。区分这些的标准方法是使用国家代码,例如中国大陆为zh_CN
,新加坡为zh_SG
,台湾为zh_TW
,香港为zh_HK
。
中国大陆和新加坡都使用简体字,其他人使用传统字符。由于中国和台湾是人口最多的两个,因此zh_CN
和zh_TW
通常用于区分网站的简体和繁体字版本。
更正确,但是,zh_HANS
用于(通用)简体中文字符,zh_HANT
用于繁体中文字符,但极少数情况下使用有意义地区分不同的国家。
答案 1 :(得分:29)
确实有一个标准的代表。由于人们遇到了你所看到的完全相同的问题 - 相同的语言,但不同的方言或字符 - 他们用两个字母的区域代码扩展了两个字母的语言代码。所以你可能在mydomain.com/fr
有一个通用的法语页面,但是对于加拿大法语读者的国际化可能会给你留下mydomain.com/fr_CA
(加拿大)和mydomain.com/fr_FR
(法国)。某些平台使用短划线而不是下划线来分隔语言和区域代码(因此fr-CA
和fr-FR
)。
简体中文的标准区域设置为 zh_CN
。繁体中文的标准区域设置为 zh_TW
。
我毫不犹豫地向您指出实际的BCP 47标准文件,因为它们,呃,对细节有点沉重,对可读性有点了解。只需使用标准区域设置标识符,例如the ones in used by Java,您就可以了。
答案 2 :(得分:1)
语言取决于语言的位置(doh!),因此语言和语言环境代码反映了这一现实。 zh
是基本语言代码,但由于它有两种主要形式,有zh_Hans
和zh_Hant
,但它们仍然只是语言代码,而不是语言环境。
位置特异性强>
要完全指定在特定位置使用的语言,国家/地区代码仍然必须加上后缀,因此对于简体中文和繁体中文,请设置zh_Hans_HK
和zh_Hant_HK
,两者都是在香港说的。
实际上,现实情况是,许多国家/地区经常需要比国家/地区代码更具体的内容,但这可能会成倍增加CLDR等数据库的复杂性和维护,加上支持基础设施,如IP位置详细信息提取,通常不可用或不够准确。
已修复文字
现在,如果代码只是指定在用户界面中使用哪组固定字符串,甚至是网站上的整个页面集,那么国家后缀并不是必需的,除非有多个地方在哪里语言变化很大(基于位置的信息),无法创建一个完整的独立资源集。
资源集越大,基于语言环境的语言代码[在此上下文中,只是语言属性,而不是真正的语言环境,因此您可以按照您喜欢的方式调用它!]的可能性越大,但是至少你只需要在必要时这样做。
动态值
但是,如果想要格式化特定变量值(如日期,时间,货币和数字),那么语言环境就变得很重要,因为所有支持此类功能的工具(如基于Unicode CLDR数据的工具)都需要他们。这些区域设置需要是单独设置到内部生成的UI语言设置使用的代码,除非您要为每个创建资源集已知的语言环境,并保持它们的恶心!
浏览器语言工具
请注意,在为可以编辑的网页指定区域设置时,如在输入框中,并且已为字段启用属性或css中的拼写检查,浏览器的语言工具将根据该字段拼写检查字段区域设置。
<强>标准强>
您必须清楚资源集提供的内容,因此请考虑:
电子表格以最大限度地减少维护费用
我使用电子表格来保存每个语言代码都有父代码的UI字符串,以便其字符串版本的单元格具有从父代表中获取字符串的公式。要为该语言和字符串创建自定义字符串,我只需使用确切的文本覆盖单元格公式。这最大限度地减少了资源维护量。我在最后运行一个宏,为每种语言生成一个完整的资源文件。