近日,公司要做一个多语言的网站,今天在网上收集资料,下面是个人觉得很不错的文章,有兴趣的朋友可以参考下:
-----------------------
多语言网站,顾名思义就是能够以多种语言(而不是单种语言)为用户提供信息服务,让使用不同语言的用户都能够从同个网站获得内容相同的信息。多语言网站实现方案
1 ,静态:就是为每种语言分别准备一套页面文件,要么通过文件后缀名来区分不同语言,要么通过子目录来区分不同语言。
例如对于首页文件 index_en.htm 提供英语界面, index_gb.htm 提供简体中文界面, index_big.htm 提供繁体中文界面,或者是 en/index.htm 提供英语界面, gb/index.htm 提供简体中文界面, big/index.htm 提供繁体中文界面,一旦用户选择了需要的语言后,自动跳转到相应的页面,首页以下其他链接也是按照同样方式处理。从维护的角度来看,通过子目录比通过文件后缀名来区分不同语言版本显得要简单明了。 补充笔记:静态仅适用于内容很少,不需要更新的网站,这种方法现在其实已经不适用了。
2 ,动态:站点内所有页面文件都是动态页面文件( PHP , ASP 等)而不是静态页面文件,在需要输出语言文字的地方统一采用语言变量来表示,这些语言变量可以根据用户选择不同的语言赋予不同的值,从而能够实现在不同的语言环境下输出不同的文字。
例如:语言变量 ln_name ,当用户选择的语言是英语时赋值为 “Name” ,当用户选择的语言是简体中文时赋值为 “ 姓名 ” ,这样就可以适应不同语言时的输出。
采用静态方式的优点是页面直接输出到客户端,不需要在服务器上运行,占用服务器的资源比较少,系统能够支持的并发连接数较多,缺点是要为每种语言制作一套页面文件,很多内容即使是和语言无关的也要分不同语言来存储,因此占用的存储空间较多。
采用动态方式和静态方式的优缺点正好相反,它的优点是动态页面文件只有一套,不同语言的文字使用语言变量来存储,和语言无关的内容只存储一份,占用的存储空间较少,并且扩展新语言比较容易,缺点需要在服务器上运行,然后把结果输入到客户端,占用服务器的资源比较多,系统能够支持的并发连接数较少。 补充笔记:很多人用session保存用户选择的语言,这样并不好,一旦session过期或者用户再次访问,那么又需要选择一次语言,更好的选择是使用cookie,并且设置为永不过期。
动态数据存贮涉及的一些技术问题
由于现在网站上动态应用日益增多,相当多的网站还会使用文件或者数据库来存储应用信息,因此如果文件或者数据库中存储的内容与语言相关时,还需要特别注意。对于存储在数据库中信息,可以采取以下几种方式支持多语言:
1 ,在数据库级别支持多语言:为每种语言建立独立的数据库,不同语言的用户操作不同的数据库。
2 ,在表级别支持多语言:为每种语言建立独立的表,不同语言的用户操作不同的表,但是它们在同一个数据库中。
3 ,在字段级别支持多语言:在同一个表中为每种语言建立独立的字段,不同语言的用户操作不同的字段,它们在同一个表中。
由于数据库中有大量的信息(如标志,编码,数字等)是用于内部处理使用的,与语言无关的,因此在数据库级别支持多语言会导致空间的极大浪费,在字段级别支持多语言最大的问题是一旦需要支持新的语言,由于需要修改表结构,维护起来非常麻烦,可扩展性不好。
相比之下,在表级别支持多语言比较好,因为并不是所有的表都需要支持多语言,对于与语言无关的表,不同语言的用户共用一套,那些和语言相关的表根据支持语言的种类来建立,不同语言的用户存取访问不同的表格。这样使得维护简单,节省了存储空间,即使是扩展起来也比较方便,只要把需要支持多语言的表,多建立一套即可。
还需要注意的问题是:有些表中某些字段是不同语言版本的表共享的(例如库存量),由于各种语言的表之间的相对独立性,使得数据共享有些困难。解决的方法有两个:
1 ,不同语言的表的共享字段同步:也就是说,只要修改了其中一个表的共享字段,其他语言表中该字段也作相应改变,实际上当不同语言的用户同时访问时处理还是比较麻烦的,并且扩充新语言时修改工作比较大。
2 ,增加一个新的表:把所有语言共享的字段(例如货物编号,产地编码等)全部放在这个表,支持多语言的表只存放与各种语言相关的字段。不同语言的用户在使用数据库时,需要操作两个数据表。 比较而言,第二种方法比较简单,并且效率比较高,维护也比较方便。 补充笔记:还有一个选择是使用json文件(或xml文件,但个人不喜欢xml)保存各语言的值,适用于数据量没那么大并且简单的单词或短语,在调用时也很方便,无需访问数据库。 应用字符集的选择
一个定位于不同语言国家的企业网站势必需要提供多种语言版本的产品和销售信息来满足其世界各地使用不同语言的客户和合作伙伴,其中包括法语、德语、意大利语、葡萄牙语、西班牙语、阿拉伯语等等。但有一个问题却极易被网站设计者们所忽略。这就是网站的字符集设置问题。
一般我们使用的是简体中文 (GB2312) 字符集,而对多语言网站来说,中文字符集却可能会使你辛辛苦苦的努力功亏一篑。原因很简单:就是这个毫不起眼的小小字符集在作怪。
计算机应用领域中存在着几十种互不相同的字符集,而不同语言客户在浏览不同语言网页时,往往会因为相互间所使用字符集无法兼容而出现乱码情况。我们在浏览国外一些网站时,往往也会出现为了能正常地看到网站上的信息而不得不在各种字符集之间来回切换的情况。
试想一下:如果一个网站提供了中,英,法,德等多种语言版本的内容,内容全之又全,设计美仑美奂。我们在中文编码环境下浏览这些非中文版本的页面觉得非常完美,现在一个法国客户对你的产品发生了兴趣,当他进到法语版面一看 — 乱码多多,甚至可能整个版面都一塌里糊涂。你的网站再下大工夫又有什么意义呢 ?
所以对提供了多语言版本的网站来说, Unicode 字符集应该是最理想的选择。它是一种双字节编码机制的字符集,不管是东方文字还是西方文字,在 Unicode 中一律用两个字节来表示,因而至少可以定义 65536 个不同的字符,几乎可以涵盖世界上目前所有通用的语言的每一种字符。 所以在设计和开发多语言网站时,一定要注意先把非中文页面的字符集定义为 “utf-8” 格式。
这一步非常重要,原因在于若等页面做好之后再更改字符集设置,可说是一件非常非常吃力不讨好的工作,有时候甚至可能需要从头再来,重新输入网站的文字内容。
HTML 中的 META 标签:
<META HTTP-EQUIV=“Content-Type” CONTENT=“text/html; CHARSET= 字符集 "> 不写,根据浏览器默认字符集显示
charset=gb2312 简体中文
charset=big5 繁体中文
charset=EUC_KR 韩语
charset=Shift_JIS 或 EUC_JP 日语
charset= KOI8-R / Windows-1251 俄语
charset=iso-8859-1 西欧语系(荷兰语 , 英语 , 法语 , 德语 , 意大利语 , 挪威语 , 葡萄牙语 , 瑞士语 . 等十八种语言) http://www.microsoft/
charset=iso-8859-2 中欧语系
charset=iso-8859-5 斯拉夫语系(保加利亚语 ,Byelorussian 语 , 马其顿语 , 俄语 , 塞尔维亚语 , 乌克兰语等)
charset=uft-8 unicode 多语言 ASP 与脚本引擎页码的概念
由于我们传统使用的内码像 Big5,GB2312 与 unicode 并不是一一对应 , 故两者之间的转换要靠 codepage( 页码 ) 来实现
<%@ Language=VBScript CodePage=xxx%> 不写,根据服务器端解析引擎默认代码页自动解析并返回浏览器。
如果制作的网页脚本与 WEB 服务端的默认代码页不同,则必须指明代码页:
codepage=936 简体中文 GBK
codepage=950 繁体中文 BIG5
codepage=437 美国 / 加拿大英语
codepage=932 日文
codepage=949 韩文
codepage=866 俄文
codepage=65001 unicode UFT-8 建议采用 utf8 的静态和动态文档。即: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 补充笔记:这部分其实有点过时,asp现在基本没有淘汰。网页编码只要用utf-8就万能了,其他编码可以了解(尤其在采集时会用到),但是不建议自己建站时使用。 ----------------------- 个人的补充说明 多语种网站其实需要考虑到很多问题,上面列出的只是一小部分,这里补充一点遗漏的。 1.域名的选择
一般来说不同语种的网站,用不同的域名比较好。比如sleda英文站,sleda中文站,但这样要申请很多域名,经济条件允许的情况下推荐此种方法。 所以还可以用不同的二级域名来做,比如www.sleda英文站,cn.sleda中文站,jp.sleda日文站,这是比较折中的方法,可以优先选择。
另外一种办法就是用不同的目录来做,比如www.sleda/en/英文站,www.sleda/cn/中文站,可以直接用子目录建站,也可以使用伪静态的形式。
还有就是使用参数形式,比如www.sleda/index.php?lang=en,www.sleda/index.php?lang=jp,但是这种方法不推荐使用。
2.翻译方式的选择 最理想的选择当然是人工翻译每一篇文章,不过这样成本比较大,尤其是没有合适的人才储备时。其次还有使用google或其他网站提供的js即时翻译,但并不推荐使用这样的方法,因为一会影响网站排版,二来翻译速度慢,三来接口不稳定,第四不利于搜索引擎收录。第三种选择就是使用自动翻译软件翻译后保存在数据库,然后直接调用,算是一个比较折中的方法。
对于搜索引擎来说,不同的域名(不管是顶级域名还是二级域名)的网站都当做独立的网站来对待,收录或者权重会更有利。
3.各语言的切换
如果没有添加多语言切换方式,那么用户无法在你的网站页面中自由切换语言,从而没法找到自己想要的语言版本,那么之前的工作也算白做了。
一般来说,语言切换方式最常见到的地方有3个,一个是首页或第一次访问网站时,一个是网页的右上角,还有网页的底部,当然也可以放在其他位置,只要美观并且方便用户找到切换位置就可以了。切换时可以直接把各种支持的语言列出来,也可以用下拉菜单,也可以用弹出框。这是做多语言版本网站必须要重视的一个小细节。
有的网站会在每一种语言选项的前面添加一个小国旗,这样会显得语言选项更加醒目,使用户感觉网站更加正规和情切,从而让你的网站充满了国际范。
4.各种语言的一致性 建立了多语言网站就需要保证各种语言的一致性, 比如经常见到一个产品有中文,但是没英文,除非确实市场策略就是如此,否则应该保持同步。 或者英文站一个样式,中文站一个样式,url结构不同等等,为了保证整体的对外效果,还是使用同一个样式为好。 过去流行使用一个欢迎界面,然后让用户选择语言,但是现在流行检测用户操作系统或浏览器语音,然后直接跳转,并且任意页面均可自由切换至其他语言。 要做多语言,就一定要做彻底,不要中英文混排,或者漏翻译,包括图片也应该完全是针对不同语言进行制图。同时也不要使用特殊的验证码,只要英文和数字即可,以免用户无法输入。5.注意某些从右往左阅读的语言的排版 虽然大部分语言都是从左往右阅读,但也有几种语言是从右向左阅读,比如阿拉伯语,这种语言在排版时就要注意从右往左是不是美观,文字的阅读顺序会不会影响整体效果。 6.日期时间的显示方式和货币换算 对于时间日期的显示,如果是用php编程,那么有内置的函数可以根据相应语言和地区进行相应的本地化,以便得到符合本地使用习惯的表示方法。对于货币的表示,除非该地区是重要市场或者有当地机构,否则没必要使用该地区货币进行表示,直接显示美元即可。如果需要对货币进行换算,那么有很多的在线汇率换算api可以利用。
更多推荐
多语言网站(如何实现网站的多语言版本?)
发布评论