世界上的语言有成百上千中,不只有英文,俄文,法文,西班牙文,中文这样的广义语言,还有方言,古语等狭义语言,比如美式英语,英式英语,简体中文,繁体中文,文言文,吴语,粤语等。地理分布越广,文化组成越复杂的语言,其分支往往越多。中文尤其复杂。
如果要设计一个互联网应用,并希望支持多语言,就有很多问题需要考虑。
支持哪些语言
一个互联网应用几乎不可能支持全部语言。
- 语言的数量太多了,要翻译成如此多的语言是一件非常困难的事情,而且成本很高。
- 很多语言没有广泛的用户群体。由于缺乏相应语言的应用,小语种用户会选择英语,德语,中文等被广泛支持的语言。
- 语言的边界并不精确。比如中文有简体中文和繁体中文的分法,也有中文(中国),中文(台湾),中文(香港)的分法。然而,大陆,台湾,香港都有简体和繁体的使用者,香港和台湾的繁体也有诸多不同。两种分界都不完善。
互联网应用支持的语言,应该是由用户的语言习惯决定的。
如果是一个本地应用,则支持本地的主要语言即可。比如中国的京东,百度百科的用户主要来自中国大陆,主要使用简体中文。而芬兰有两种官方语言,芬兰语和瑞典语,前者占大多数,即使瑞典语为母语的芬兰居民,通常也能说芬兰语。芬兰本地的互联网应用通常支持芬兰语,有些也支持瑞典语。芬兰银行,教育机构和政府的网站通常支持芬兰语,瑞典语,英语。
如果是无国界的应用,比如维基百科和 Reddit ,则首要目的是覆盖最广泛的用户群体。首要语言应该是英语,法语,荷兰语,德语,西班牙语,葡萄牙语,俄语,中文,日语等。其中几种语言需要再进行细致地区分。循序渐进地增加更多语言的支持。比如 Twitter 和 Steam 邀请用户参与翻译界面和内容,不断增加所支持的语言。
英文的分法
绝大多数应用支持通用的“英语”。虽然英国,美国,加拿大,澳大利亚的英语都有些区别,但绝大多数词汇是相同的,语法几乎没有差异。对于大量内容网站,如维基百科,只支持一种通用英语是最有效率的。
用户界面的文字较少,可以支持英式英语和美式英语,比如 Facebook , KDE , Mozilla Thunderbird 。维基百科用户界面支持英语,英式英语和加拿大英语。
中文的分法
中文的分法可能是最为复杂的。
一个国际化应用不得不对中文进行区分,中文各个分支的字形,词汇都有很大差异。几十年前,经历过汉字简化过程的那些人懂繁体字也懂简体字。而现在这一代人,受简体中文教育的,读繁体中文常会认错字;而受繁体中文教育的,读简体中文也有困难。大陆,香港,澳门,台湾,新加坡,马来西亚等地的词汇,尤其是新生词汇和外文译名,相差很多。比如 Software 在大陆叫软件,在台湾叫软体。
在 IANA 网站的注册语言中,有约五十种中文语言标签,包含大量方言。
除了一些历史,文化,民俗网站,很少有互联网应用会使用吴语,粤语,闽南语等方言或者文言文等古代语言。对于规模尚小的应用,这些语言可以以后再考虑。维基百科也是最近几年才添加了吴语,文言文等版本,但内容很少。
那么剩下的问题就是如何处理简体繁体,以及大陆,台湾,港澳,新马等地的中文差异了。
维基百科只有一个中文版。通过技术上的简繁转换,将同一篇文章自动转换成大陆简体,香港繁体,澳门繁体,马新简体,台湾繁体。然而这样的问题很大,需要一个极为庞大的字典库,并使用特殊语法处理一些机器转换不能识别的内容;编辑内容时仍能经常看到繁体和简体混杂在一起,引发冲突。
最为广泛的区分是简体/繁体两种。在法律上,大陆规定使用简体,新马书写使用简体中文,而港澳台则规定使用繁体。由于大中华区敏感的政治问题,这种分法可以避开一些地区性矛盾。中国大陆有最多的简体使用者,而台湾有最多的繁体使用者。而港澳繁体,马新简体的使用者总计只有两千多万。马新简体与大陆简体的字形词汇更为接近。港澳繁体和台湾繁体书写基本相同。因而归为简体中文和繁体中文并不会造成太大障碍。
另一种分法是按地区划分:中文(中国),中文(台湾),中文(香港),中文(澳门),中文(新加坡),中文(马来西亚)。这种划分更加精确,为每个文化圈的用户提供他们最熟悉的语言。但是缺点比较多:
- 这样多的语言让内容翻译的工作量翻了好多倍。用户界面可以这样翻译,文(中国大陆),中文(中国台湾),中文(中国香港),中文(中国澳门)。但内容这样翻译就不现实了。
- 命名有争议,香港澳门属于中华人民共和国,而大陆和台湾两岸都认为自己才是正统。或许应该改成:中文(中国大陆),中文(中国台湾),中文(中国香港),中文(中国澳门)。
不需要区分方言变体的语言
主要在一国使用的语言,通常保持着高度的一致性,尤其是书写语言,如日语,越南语,俄语,法语,芬兰语,瑞典语,丹麦语,德语,荷兰语。
英语,西班牙语,葡萄牙语等随着殖民运动传播到世界各地。在不同地区的同种语言虽有变化,但互相之间还是能够互相理解的,不加区分问题也不大。
语言代码
语言代码使程序能够理解语言的类型。比如 en 代表英语,zh-Hans 代表简体中文。
麻烦的是,语言代码有很多标准。有用两个字母表示,也有用三个字母表示的。在软件行业最常用的是用两个字母表示语言,添加后缀以区分地区或变种。如:
- ar
- de
- en
- fr
- ja
- ko
- zh-Hans
- zh-Hant
- zh-CN
- zh-TW
- zh-HK
开头两个字母是 ISO 639-1 定义的语言代码,而后缀则是 ISO 3166 国家代码。完整的语言代码列表非常长[IANA链接],有很多非“语言-地区”结构的代码。HTML 支持此种类型的语言代码。软件翻译工具如 GNU Gettext 也支持。
发表回复