适合人群
本文适合于、创业者、项目经理、技术经理/主管等,或者准备成为这类人群的人。
为何要国际化
咱们不是天天在吵着要与国际接轨么,你还在搞中国特色怎么行呢。这是一个冠冕堂皇的话,咱们说点实际的。首先,中国的互联网生态极其恶劣,大家争相抄袭,用户不愿意为应用付费,而在欧美等国家要好得多,所以对于一些创业者者来说,从中国用户中赚吆喝,从欧美用户中赚钱,也不失为一种活下去的好办法。第二,国内竞争激烈,抄袭太多,不如另辟蹊径,直接杀入国外市场,屏蔽国内用户,单纯英文肯定满足了需求。第三,老板雄心勃勃,虽然产品只有那么一点点,但总想搞十种八种语言。不要捂着嘴笑,真有这种人,如果你是这个项目的负责人,忍着吧,谁让他给你发工资呢。
该不该国际化
对于没有决定权的人来说,可以直接忽略此段,因为方案已经定了,你需要的是执行,直接看如何国际化即可。对于复杂的项目,除非必要,否则应该慎重考虑国际化,例如像新浪这种新闻类的网站,国际化是一个很头疼的事情,倒不如分开成为两个网站。对于UGC及工具应用类的网站或软件,如果不是非常本地化的项目, 应该在项目初期就考虑国际化。虽然你现在可能只需要简体中文,但指不定你哪天强大了又需要英文等语言了,难道不成Copy再改改,那样的话后期的维护升级 将是一件异常复杂的事情?对于复杂的项目来说,我们也可以考虑将部分重要的功能拿出来国际化,比如说像一些在线商旅网站,就会把机票与酒店预订部分拿出来国际化,而像目的地指南这些内容,因为涉及到的翻译太多,就只有中文了。
如何国际化
国际化说起来也是一个很麻烦的事情,首先你得考虑到不同文化之间的差异,其次才是语言的问题,再次就是开发的层面的问题。要说文化差异这个问题,得根据具体的项目来具体分析,我打算从项目与开发的角度来谈一谈。
一、 项目应该是UTF-8的编码,其实这一点很重要,不管你是否需要国际化,都应该统一采用UTF-8的编码,并且文件名、变量、目录只能出现ASCII字符。因为许多服务器可能是英文,如果你是采用虚拟主机,那就更可能会是英文了。而且非UTF-8编码容易产生一些怪怪的问题,比如说在参数的传递上、AJAX、数据库等地方,不同编码都可能产生一些意想不到的情况。我就见过许多公司的项目采用GB2312的编码,甚至有些项目中间会用中文做枚举,虽然 现在编译器允许这做,但仍然应该使用ASCII字符。
二、多语言显示的问题,其实这个问题是比较好办的,比如说PHP会提供GetText来实现国际化,使用起来非常方便,我之前曾经专门写了一个扫描GetText函数中文本的小工具GetTextTools, 可以快速地从PHP文件中将GetText函数中的文字提取出来。Asp.Net中可以使用Resources进行解决国际化的问题,其它像Java也应 该会有自己的国际化解决方案。但从我比较喜欢使用Xml来解决国际化的问题,控制起来比较方便,在网站上我特别喜欢使用XSLT+Xml,因为这种解决方 案除了国际化之外,还有其它很多的好处。
三、数据库的问题,首先在建库的时候自然应该要国际化了,一般来说,只需要在数据库中增加语言 标识的字段即可。总之一个原则,对于全局唯一类型的,可采取增加语言附表的方式,例如全际国家名称的国际化,应当添加一个子表来实现国际化;一般情况可以 采用添加语言字段标识即可,例如文章类,不同语言的用户读取不同的文章,标识即可;还有一种复杂的,需要具体情况具体分析了,比如说一个产品,描述和图片 都不一样,但要求它们有所关系,这个需要具体分析。
四、脚本及AJAX,首先是脚本,应当将文本部分的脚本全部提取出来,不要在JS脚本中出现文本型的内容。对于Ajax,服务器返回的信息可以采用代码的方式,例如MSN的错误代码,然后JS中有一个代码与提示的对应关系。还有种方式是 服务器端根据不同的语言给出不同的提示,这种方式也是可以的。
五、样式,不同的语言样式是不一样的,起码字体与字号是不一样的,另外网页中可能还会有一些特定的图片是带有文字的,比如说有些按钮为了效果,图片上就带有文字。这个时候可以把CSS根据不同的语言放到不同的文件夹中,图片可以放到一个文件夹即可。
六、 域名及网站,如果你是一个大网站,不同语言可以采用不同国家的后缀,比如像微软的网站,不过像这种大型的网站国际化还要复杂,一般会将核心业务做成 Services的方式,因为他们不同语言的网站差异化很大。一般网站可采用子域名的方式,例如cn.iove.net表示中文,而 en.iove.net表示英文。当然也可以采用参数的方式,例如像Google的hl=zh-cn。我个人比较推荐这种方式,因为对于小网站来说,没有 必要使用子域名分散权重。但为了用户方便,可以采用子域名或者独立域名进行301重定向,例如把cn.iove.net重定向到 iove.net/?lang=zh-cn,或者把iove.fr重定向到iove.net/?lang=fr。
七、文件夹,其实这个地方容易受到忽略,一般建议语言文件放到i18n下,然后用语言代码建文件夹,例如zh-cn、en-us等。javascript和css也应该有单独的i18n文件夹,如果图片也有蛮多的不一致,建议也为它们建立i18n的文件夹。