多语言国际化实施
WEB页面
Web页面多语言实现
1, 静态多语言实现:就是为每种语言分别准备一套页面文件,要么通过文件名来区分不同语言,要么通过子目录来区分不同语言。
例如对于首页文件index_en.jsp提供英语界面,index_gb.jsp提供简体中文界面,index_big.jsp提供繁体中文界面,或者是 en/index.jsp提供英语界面,gb/index.jsp提供简体中文界面,big/index.jsp提供繁体中文界面,一旦用户选择了需要的语言后,自动跳转到相应的页面,首页以下其他链接也是按照同样方式处理。从维护的角度来看,通过子目录比通过文件后缀名来区分不同语言版本显得要简单明了。
例如对于首页文件index_en.jsp提供英语界面,index_gb.jsp提供简体中文界面,index_big.jsp提供繁体中文界面,或者是 en/index.jsp提供英语界面,gb/index.jsp提供简体中文界面,big/index.jsp提供繁体中文界面,一旦用户选择了需要的语言后,自动跳转到相应的页面,首页以下其他链接也是按照同样方式处理。从维护的角度来看,通过子目录比通过文件后缀名来区分不同语言版本显得要简单明了。
2, 动态多语言实现:站点内所有语言统一使用一套文件,而不是多套页面文件,在需要输出语言文字的地方统一采用语言变量来表示,这些语言变量可以根据用户选择不同的语言赋
予不同的值,从而能够实现在不同的语言环境下输出不同的文字。
例如:语言变量ln_name,当用户选择的语言是英语时赋值为“Name”,当用户选择的语言是简体中文时赋值为“姓名”,这样就可以适应不同语言时的输出。
例如:语言变量ln_name,当用户选择的语言是英语时赋值为“Name”,当用户选择的语言是简体中文时赋值为“姓名”,这样就可以适应不同语言时的输出。
比较
采用静态方式的优点是页面显示时的输出,在语言部分基本不耗费服务器资源,缺点是要为每种语言制作一套页面文件,很多内容即使是和语言无关的也要分不同语言来存储,因此占用的存储空间较多。
采用动态方式和静态方式的优缺点正好相反,它的优点是动态多语言文件只有一套,不同语言的文字使用语言变量来存储,和语言无关的内容只存储一份,占用的存储空间较少,并且扩展新语言比较容易,缺点是需要在服务器占用较多的内存和cup资源解析语言输出,然后把结果输入到客户端,占用服务器的资源比较多。
采用静态方式的优点是页面显示时的输出,在语言部分基本不耗费服务器资源,缺点是要为每种语言制作一套页面文件,很多内容即使是和语言无关的也要分不同语言来存储,因此占用的存储空间较多。
采用动态方式和静态方式的优缺点正好相反,它的优点是动态多语言文件只有一套,不同语言的文字使用语言变量来存储,和语言无关的内容只存储一份,占用的存储空间较少,并且扩展新语言比较容易,缺点是需要在服务器占用较多的内存和cup资源解析语言输出,然后把结果输入到客户端,占用服务器的资源比较多。
Jsp中这样设置:
<%@ page contentType="text/html;charset=UTF8"%>
<%@ page contentType="text/html;charset=UTF8"%>
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 西欧语系(荷兰语,英语,法语,德语,意大利语,挪威语,葡萄牙语,瑞士语.等十八种语言)www.microsoft/
charset=iso-8859-2 中欧语系
charset=iso-8859-5 斯拉夫语系(保加利亚语,Byelorussian语,马其顿语,俄语,塞尔维亚语,乌克兰语等)
charset=uft-8 unicode多语言
<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 西欧语系(荷兰语,英语,法语,德语,意大利语,挪威语,葡萄牙语,瑞士语.等十八种语言)www.microsoft/
charset=iso-8859-2 中欧语系
charset=iso-8859-5 斯拉夫语系(保加利亚语,Byelorussian语,马其顿语,俄语,塞尔维亚语,乌克兰语等)
charset=uft-8 unicode多语言
Java 语言编码
Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的”告诉”编译器。
例如:我们的源文件是以UTF-8的方式保存的,而在编译时编译器却把它当作是用GBK方式保存的,这样编译器就会按照GBK->Unicode的编码转换方法对源文件进行转换,然后再编译,这样当然会出错,实际上编译器应当按照UTF-8->Unicode的编码转换方法来对源文件进行转换。
对于控制台程序,编译器会把源文件看作是由系统默认的编码类型来编码的(系统默认的编码类型取决于在控制面板区域设置里的配置,中文win2k下通常是GBK),也可以使用-encoding参数来设置,如:javac -encoding UTF-8,这样编译器就会把源文件看作是用UTF-8编码的(weblogic管理页面这只是告诉编译器源文件的编码类型,而不是对源文件转码)。在各种语言的平台上只要在编译用时-encoding指定与源文件的编码相同的编码方式,就不会存在国际化的问题了。
例如:我们的源文件是以UTF-8的方式保存的,而在编译时编译器却把它当作是用GBK方式保存的,这样编译器就会按照GBK->Unicode的编码转换方法对源文件进行转换,然后再编译,这样当然会出错,实际上编译器应当按照UTF-8->Unicode的编码转换方法来对源文件进行转换。
对于控制台程序,编译器会把源文件看作是由系统默认的编码类型来编码的(系统默认的编码类型取决于在控制面板区域设置里的配置,中文win2k下通常是GBK),也可以使用-encoding参数来设置,如:javac -encoding UTF-8,这样编译器就会把源文件看作是用UTF-8编码的(weblogic管理页面这只是告诉编译器源文件的编码类型,而不是对源文件转码)。在各种语言的平台上只要在编译用时-encoding指定与源文件的编码相同的编码方式,就不会存在国际化的问题了。
在eclipse里只要指定编辑环境的编码类型为UTF-8即可。
数据库的多语言
多语言动态数据存贮涉及的一些技术问题
文件或者数据库中存储的内容与语言相关时,需要特别注意。对于存储在数据库中信息,可以采取以下几种方式支持多语言:
1,在数据库级别支持多语言:为每种语言建立独立的数据库,不同语言的用户操作不同的数据库。
2,在表级别支持多语言:为每种语言建立独立的表,不同语言的用户操作不同的表,但是它们在同一个数据库中。
3,在字段级别支持多语言:在同一个表中为每种语言建立独立的字段,不同语言的用户操
文件或者数据库中存储的内容与语言相关时,需要特别注意。对于存储在数据库中信息,可以采取以下几种方式支持多语言:
1,在数据库级别支持多语言:为每种语言建立独立的数据库,不同语言的用户操作不同的数据库。
2,在表级别支持多语言:为每种语言建立独立的表,不同语言的用户操作不同的表,但是它们在同一个数据库中。
3,在字段级别支持多语言:在同一个表中为每种语言建立独立的字段,不同语言的用户操
作不同的字段,它们在同一个表中。
由于数据库中有大量的信息(如标志,编码,数字等)是用于内部处理使用的,与语言无关的,因此在数据库级别支持多语言会导致空间的极大浪费,在字段级别支持多语言最大的问题是一旦需要支持新的语言,由于需要修改表结构,维护起来非常麻烦,可扩展性不好。
相比之下,在表级别支持多语言比较好,因为并不是所有的表都需要支持多语言,对于与语言无关的表,不同语言的用户共用一套,那些和语言相关的表根据支持语言的种类来建立,不同语言的用户存取访问不同的表格。这样使得维护简单,节省了存储空间,即使是扩展起来也比较方便,只要把需要支持多语言的表,多建立一套即可。
还需要注意的问题是:有些表中某些字段是不同语言版本的表共享的(例如库存量),由于各种语言的表之间的相对独立性,使得数据共享有些困难。解决的方法有两个:
由于数据库中有大量的信息(如标志,编码,数字等)是用于内部处理使用的,与语言无关的,因此在数据库级别支持多语言会导致空间的极大浪费,在字段级别支持多语言最大的问题是一旦需要支持新的语言,由于需要修改表结构,维护起来非常麻烦,可扩展性不好。
相比之下,在表级别支持多语言比较好,因为并不是所有的表都需要支持多语言,对于与语言无关的表,不同语言的用户共用一套,那些和语言相关的表根据支持语言的种类来建立,不同语言的用户存取访问不同的表格。这样使得维护简单,节省了存储空间,即使是扩展起来也比较方便,只要把需要支持多语言的表,多建立一套即可。
还需要注意的问题是:有些表中某些字段是不同语言版本的表共享的(例如库存量),由于各种语言的表之间的相对独立性,使得数据共享有些困难。解决的方法有两个:
1,不同语言的表的共享字段同步:也就是说,只要修改了其中一个表的共享字段,其他语言表中该字段也作相应改变,实际上当不同语言的用户同时访问时处理还是比较麻烦的,并且扩充新语言时修改工作比较大。
2,增加一个新的表:把所有语言共享的字段(例如货物编号,产地编码等)全部放在这个表,支持多语言的表只存放与各种语言相关的字段。不同语言的用户在使用数据库时,需要操作两个数据表。
比较而言,第二种方法比较简单,并且效率比较高,维护也比较方便。
2,增加一个新的表:把所有语言共享的字段(例如货物编号,产地编码等)全部放在这个表,支持多语言的表只存放与各种语言相关的字段。不同语言的用户在使用数据库时,需要操作两个数据表。
比较而言,第二种方法比较简单,并且效率比较高,维护也比较方便。
体育多语言建议实施方案
对于体育多语言的改版方面:
不论使用那种架构或框架,选择时必须考虑其是否是UTF-8编码的,是否支持UTF-8的数据交互,或者通过某种方式处理后可以支持utf-8。
1. 在数据库的多语言支持上,归纳与语言无关的表和信息,对需要在不同语言中共享的字段以表的方式统一管理。对有些表的id序列归纳后在数据库中建立序列管理,对不同语言的相关表可以使用同一个序列,
2. 对于一些需要作数据统计的表重新设计,使之在大数据量、频繁访问时能保证响应的速度。
3. 在web页面的多语言上使用语言变量,系统自动根据用户的选择显示对应的语言,在开发上保证所有动态页面都是UTF-8编码,并且在页面里注明<%@ page contentType="text/html;charset=UTF8"%> ,html里注明<META HTTP-EQUIV=“Content-Type” CONTENT=“text/html; CHARSET= uft-8 ">
4. 对于语言字典的存储建议采用XML文件保存,以英文为主题语言,如出现个别没有对应语言翻译的语言变量,则自动采用英文代替。
5. Java代码的编辑生成上也必须保证是UTF-8
6. 在中间件如weblogic的选择和配置上,也需要能够支持utf-8。
7. 把和语言相关的表统一管理,不同语言以表名区分,如table_eng、table_zhc、table_jps等,代码里使用表名变量编辑sql。
8. 在新语言的增加上要做到只需要更改配置文件l、增加语言字典xml文件、建立新语言的对应表。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论