APP下载

Java Web开发中国际化问题的设计与实现

2010-11-07菏泽学院计算机与信息工程系274000

中国科技信息 2010年20期
关键词:字符应用程序国际化

苏 蕴 菏泽学院计算机与信息工程系 274000

Java Web开发中国际化问题的设计与实现

苏 蕴 菏泽学院计算机与信息工程系 274000

国际化问题是Java Web技术开发中备受瞩目的课题。鉴于此,本文在分析对字符集选择的基础上,介绍了一种高效的解决方案——使用J2SE资源绑定的方式。

1 、引言

世界经济日益全球化推动了人们对基于 Web 的软件的需求,因为许多国家的用户都能访问Web软件。然而,随着信息的国际化,如何动态构建一个具有各种不同语言的Web应用程序,成为面向国际应用的企业和个人需要考虑的问题。

2 、字符集的应用

为了能在计算机中表示不同语言中字符,每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的ASCII,中国GB2312和GBK,日本的JIS等。而不同语言客户在浏览不同语言网页时,往往会因为相互间所使用字符集无法兼容而出现乱码情况。

Java内部采用Unicode字符集,Unicode字符集,对每一种语言的每个字符制定了统一且唯一的用两个字节(也有四字节的)来表示的编码,满足跨语言、跨平台的字符解码和转换处理。但由于Unicode字符集不兼容ISO-8859-1字符集,占用的空间大(对于英文字母,Unicode也需要两个字节来表示),而且不便于传输和存储,因此而产生了UTF字符集。现在流行的UTF有2种:UTF-8和UTF-16。其中UTF-16和Unicode本身的编码规范是一致的,而UTF-8不同,它定义了一种“区间规则”,这种规则可以和ISO-8859-1编码保持最大程度的兼容,同时也可以用来表示所有语言的字符。因此,在开发国际化Web应用程序时,UTF-8是一个最理想的选择。

具体的做法是:

(1)所有HTML或JSP/Servlet动态页面指明使用UTF-8字符集,JSP文件本身也使用UTF-8编码保存;

<%@page language="java" contentType="text/html; charset=UTF-8"%>;

;)

(2)Servlet 指明使用过滤器,使所有来自浏览器的请求(request)和响应(response)均转换为UTF-8;

request.setCharacterEncoding ("UTF-8");

response.setContentType("text/ html;charset= UTF-8");

(3)设定数据库连接方式是UTF-8(例如:数据库使用MySQL);

jdbc:mysql://localhost/ web_site?

useUnicode=true&characterEncoding= UTF-8;

(4)数据库编码指明为UTF-8。

3 、国际化技术的应用

为了满足国际化的需求,被开发的Web应用程序应该能够在不做任何修改的情况下,就可以在不同的地区和不同的语言环境下,按照当地的语言和格式习惯显示字符。一种传统的解决问题的方法是:存储多组JSP,每组JSP都用不同的语言编码,然后根据用户的地区选择在这些JSP之间切换。这种解决方案的最大不足在于表示层JSP页面将非常冗余,当需要更新特定于语言的JSP集时,所有冗余编码的JSP集都必须同时更新,对于一个中等规模的项目而言,这会造成冗长的、容易出错的更新。

最理想的实现国际化的方法是将要显示的字符内容从程序中分离,然后统一存储到一个资源包中,当显示时,从包中取出和Locale对象相一致字符内容。这种方案利用了J2SE在资源绑定中对地区的支持,即只在需要的时候在采用特定于地区的文本字符串。

3.1 资源包文件的创建

在编写国际化程序时,要为不同的国家和语言编写不同的资源类,这些资源类同属于一个资源系列,共享同一个基名。不同语言所对应的资源类的名称为基名加上ISO-639标准的语言代码,而应用于某个特定国家或地区的资源类名称,则是基名和语言代码后加上ISO-639标准的国家或地区代码。例如:为了能使中文国家地区以及英语国家地区的用户都能以本地语言的形式显示某网站的页面内容,可以创建一个资源包的基名为“MyResource”,则中文国家的特定资源属于MyResource_zh_CN类,英语国家的特定资源属于MyResource_en类。

针对不同的语言和国家,分别提供一个属性文件,属性文件的命名遵照资源类的命名方式,扩展名为.properties,将所有的字符串资源以键值对的形式写入到属性文件中。

3.2 资源包文件的编码转化

由于Java的资源绑定机制只接受ASCII编码的属性文件,因此,对于资源包文件中的非ASCII码字符,需要将其转换为相应的Unicode码,其格式为uXXXX。这里可以使用JDK开发工具包里的native2ascii命令进行转换。其命令为:

Native2ascii -encoding gb2312 MyResource.tmp MyResource_zh_CN.properties

将MyResource.tmp文件中的中文字符转换为Unicode编码保存到MyResource_zh_CN.properties文件中。

3.3 使用过滤器设置特定国家或地区的Locale对象

可以在用户访问网站首页面index.jsp时,对此请求进行过滤。具体情形如下图所示:

在过滤器中,调用Locale类的getDefault方法得到当前平台默认的语言环境值,由于用户在访问该Web应用程序期间,一般不会改变显示语言。因此,需要把特定的地区对象和会话关联起来。

3.4 资源包的访问

在JSP页面中,首先获取与当前会话相关联的Locale对象,该对象代表了特定的国家或地区。其次,根据该Locale对象,获取与其绑定的某个资源包文件。这里可以调用java.util.ResourceBundle类中的getBundle方法:

public static final ResourceBundle getBundle(String baseName,Locale locale)

最后,利用ResourceBundle类的getString()方法得到相应语言版本的字符串。

public final String getString (String key)

4 、结束语

使用J2SE资源绑定的方式解决国际化问题,能够根据不同的Locale对象加载不同的资源,显示给用户。要修改显示信息时,只需要修改相应的资源文件,对于程序部分,不需要做任何的修改。因此,可以说它是目前在Web应用程序开发中,解决国际化问题效率最高的方案。

[1]李谨.浅析基于JSP的维、汉双语网站的开发技术[J].科技创新导报.2009(2)

[2]Ivor Horton.Java 2入门经典[M].北京:机械工业出版社.2006

[3]孙鑫.Java Web开发详解[M].北京:电子工业出版社.2007

[4]耿祥义,张跃平.JSP实用教程[M].北京:清华大学出版社.2007

TP391.41

A

10.3969/j.issn.1001-8972.2010.20.043

Java Web;国际化;字符集

猜你喜欢

字符应用程序国际化
聚焦港口国际化
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
人民币国际化十年纪
删除Win10中自带的应用程序
HBM电子称与西门子S7-200系列PLC自由口通讯
谷歌禁止加密货币应用程序
从园区化到国际化
人民币国际化回顾与新常态初期展望