随着经济全球化的发展,产生了众多的跨国公司,而java语言的出现以及网络通讯技术的飞速发展,使企业仅购买一套基于web的企业级应用软件(比如说:oa系统,erp系统、crm等),通过网络就能满足整个集团共同使用该软件成为可能。既减少了软件费用,又缩短了信息延迟,提高了企业运作效率。但因为应用系统是面向多个国家,多种语言的,所以在设计软件时就不得不解决国际化(internationalization)问题,国际化的程序应支持多国语言,不同格式的日期、时间、货币和其它值,还有操作界面的风格、界面个性化定制等问题.,本文着重论述多国语言的解决方案:
java语言是一种面向对象的语言,所以可以生成一个国际化的软件包,使由系统自动根据区域及语言设置的属性进行判断成为可能。
解决方案主要有两种:
一是利用java本身提供用于解决国际化问题的软件包当中的resourcebundle及其子类,处理在java类中或是property文件中定义的参数;二是自定义一个类进行存取,把相应参数放在数据库或是属性文件中。
一、 利用java类包:
1、根据系统默认的语言设置读取参数值的类resource:
package i18n.article;
import java.io.*;
import java.util.enumeration;
import java.util.hashtable;
import java.util.locale;
import java.util.propertyresourcebundle;
import java.util.resourcebundle;
/**
* <p>title:多国语言的后台实现类 </p>
* <p>description: 根据属性文件及区域与语言设置,得到对应的语言</p>
* <p>copyright: copyright (c) 2003</p>
* <p>company: timer corporation</p>
* @author:宋兆辉
* @version 1.0
*/
public class resource {
private static final string head_file = "attr"; //属性文件名的前缀
private static final string last_file=".properties"; //属性文件名的后缀
private static final string file_path="c://"; //定义属性文件存放的目录
public resource() {
}
/*以下是根据传入的属性文件中的"键",而得到与区域与语言设置相对应的"值"*/
public synchronized string srcstr(string disstr) {
string ret = "";
try {
locale locale = locale.getdefault(); //获取系统的区域与语言默认设置
system.out.println("");
string basename = new stringbuffer()
.append(head_file).append("_").append(locale.tostring())
.append(last_file).tostring(); //根据local属性,前缀以及后缀生成文件名
string filename = new stringbuffer(file_path).append(basename)
.tostring(); //获取文件的完整路径
inputstream is = new fileinputstream(filename); //生成文件输入流
propertyresourcebundle pr = new propertyresourcebundle(is); //根据输入流构造propertyresourcebundle的实例
ret = pr.getstring(disstr);
if(locale.equals(locale.china)){
ret = new string(ret.getbytes("iso-8859-1"),"gb2312");
} //如果是要显示中文,则要进行内码的转换
is.close();
return ret;
}
catch (exception e) {
e.printstacktrace();
return disstr;
}
}
}
2、对应的properties文件:attr.properties和attr_zh_cn.properties
(1)attr_en_us.properties:
loginname=login name
password=password
login=login
logintime=logintime
logoff=logout
chineseversion=english version
mainpage=home
software=software
hardware=hardware
yourlocationmainpage=yourlocationmainpage
mycalendar=mycalendar
mymails=mymails
r&d=r&d
forum=forum
developerprocess=developerprocess
technologycommunion=technologycommunion
(2)attr_zh_cn.properties:
loginname=用户
password=密码
login=登陆
logintime=登陆时间
logoff=注销登陆
chineseversion=中文版
mainpage=首页
software=软件
hardware=硬件
yourlocationmainpage=当前位置:首页
mycalendar=我的日程
mymails=我的邮件
r&d=研发区
forum=讨论区
developerprocess=开发进程
technologycommunion=技术交流
3、对应的jsp文件:
本例中有3个jsp页面:
(1)login.jsp:(登陆页面)
<%@ page contenttype="text/html; charset=gb2312" %>
<html>
<head>
<title></title>
<link href="css/style.css" rel="stylesheet" type="text/css">
<script language = javascript>
function focusit() {
window.document.login.loginname.focus();
}
</script>
</head>
<jsp:usebean id="resource" scope="application" class="i18n.article.resource"/>
<body onload="javascript:focusit();" bgcolor="#ffffff">
<form name="login" method="post" action="main.jsp">
<table border=0 cellpadding=0 cellspacing=0 align=center>
<tr>
<td height="150"></td></tr>
<tr>
<td width=262><img alt="" border=0 src="http://www.itus.cnimages/cover_r1_c1.jpg"></td>
<td> </td>
<td>
<table border=0 cellpadding=1 cellspacing=1>
<tr>
<td>
<p align=right><%=resource.srcstr("loginname")%></p></td>
<td><input type=text name="loginname" id=text1></td></tr>
<tr>
<td>
<p align=right><%=resource.srcstr("password")%></p></td>
<td><input type=password name="password" id=password1></td></tr>
<tr>
<td> </td>
<td align=center>
<input class="button" type=submit value=" <%=resource.srcstr("login")%> " id=submit1></td></tr>
</table>
</td></tr>
<tr>
<td colspan=3><img alt="" border=0
src="http://www.itus.cnimages/cover_r2_c1.jpg"></td></tr>
<tr>
<td colspan=3><img alt="" border=0
src="http://www.itus.cnimages/cover_r3_c1.jpg"></td></tr>
<tr>
<td colspan=3 height=20> </td>
</tr>
<tr>
<td colspan=3 align=center><font color="#c0c0c0">best viewed in ie5.0 or up ,1024x768</font></td>
</tr>
<tr>
<td colspan=3><hr size=1 width="100%" color="#c0c0c0"></td>
</tr>
<tr>
<td colspan=3 align=center>© 2003 corporation. all rights reserved.</td>
</tr>
</table>
</form>
</body>
</html>
(2)main.jsp:
<%@ page contenttype="text/html; charset=gb2312" %>
<jsp:usebean id="resource" scope="application" class="i18n.article.resource"/>
<html>
<head>
<title></title>
<meta name="generator" content="microsoft visual studio">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="css/style.css" type="text/css">
</head>
<body topmargin=2 leftmargin=2 bgcolor="#ffffff">
<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height=80>
<%
string loginname = request.getparameter("loginname");
%>
<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>
<tr>
<td width=163 rowspan=3><img src="http://www.itus.cnimages/system_logo.jpg" border=0></td>
<td width=30 rowspan=3><img src="http://www.itus.cnimages/logo_linked_corner.gif" border=0></td>
<td width=140><img src="http://www.itus.cnimages/logo_extended_bar.jpg" border=0></td>
<td height=25 bgcolor="#95add3" align=right class="p1">
<%=resource.srcstr("logintime")%><%=new java.util.date().tolocalestring()%>
<%=resource.srcstr("loginname")%><%=loginname%>
<img src="http://www.itus.cnimages/logout.gif" align="absmiddle" border=0>
<a href="login.jsp"><%=resource.srcstr("logoff")%></a>
<img src="http://www.itus.cnimages/row_ender.jpg" align="absmiddle" border=0></td>
</tr>
<tr><td height=30 colspan=2><p>
<a href="#"><%=resource.srcstr("mainpage")%></a>
<a href="#"><%=resource.srcstr("software")%></a>
<a href="#"><%=resource.srcstr("hardware")%></a> </p></td></tr>
<tr><td height=25 colspan=2<%=resource.srcstr("yourlocationmainpage")%>></td></tr>
</table>
</td>
</tr>
<tr>
<td>
<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>
<tr>
<td width=165 valign=top>
<table width=100% cellpadding=0 cellspacing=0 border=0>
<tr><td colspan=2><img src="http://www.itus.cnimages/left_menu_top.jpg" border=0></td></tr>
<tr><td width=35 align=left><img src="http://www.itus.cnimages/left_menu_colbar.jpg" border=0></td>
<td width=130 align=left valign=top>
<table width=100% cellpadding=0 cellspacing=0 border=0>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("mycalendar")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("mymails")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("developerprocess")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("technologycommunion")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("forum")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("r&d")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
</table>
</td>
</tr>
</table>
</td>
<td><iframe frameborder=0 id=main name=main scrolling=auto src="version.jsp"
style="height: 100%; visibility: inherit; width: 100%; z-index: 1"></iframe></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height=50 valign=top>
<table width=100% cellpadding=0 cellspacing=0 border=0>
<tr><td align=center><hr size=1 width=80% color="#95add3"></td></tr>
<tr><td align=center>?2003 corporation. all rights reserved.</td></tr>
</table>
</td>
</tr>
</table>
</body>
</html>
(3)version.jsp:(主页面的中间部分)
<%@ page contenttype="text/html; charset=gbk" %>
<jsp:usebean id="resource" scope="application" class="i18n.article.resource"/>
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body leftmargin="0" topmargin="0">
<table width="100%" height="100%" cellpadding=0 cellspacing=0 border=0>
<tr>
<td align=center valign=middle colspan=2>
<table align="center" border="0" cellspacing="3" cellpadding="5" style="filter:dropshadow(color=gray,offx=5,offy=5,positive=1);">
<tr>
<td width=400 height=100 bgcolor="#cbd3ea" align="center" style="border: 1px #0a246a solid;">
<p><font color="#5c6bac" style="font-size:30px;"><b><%=resource.srcstr("chineseversion")%></b></font></p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width=50% valign=top align=center> </td>
<td width=50% height=155 align=center><img src="http://www.itus.cnimages/internationalization.jpg"></td>
</tr>
</table>
</body>
</html>
二、 利用自定义类:
利用自定义的类,可以存取放在属性文件或是数据库中的对应的语言文字,实现方式大致与上述方法相同,不过是添加一些对属性文件流或是数据库存取的方法,对应的jsp页面可以不做改动。在这里不再赘述.
注:以上程序在windows2000英文版及中文版,resin2.1.6上调式通过.
java语言是一种面向对象的语言,所以可以生成一个国际化的软件包,使由系统自动根据区域及语言设置的属性进行判断成为可能。
解决方案主要有两种:
一是利用java本身提供用于解决国际化问题的软件包当中的resourcebundle及其子类,处理在java类中或是property文件中定义的参数;二是自定义一个类进行存取,把相应参数放在数据库或是属性文件中。
一、 利用java类包:
1、根据系统默认的语言设置读取参数值的类resource:
package i18n.article;
import java.io.*;
import java.util.enumeration;
import java.util.hashtable;
import java.util.locale;
import java.util.propertyresourcebundle;
import java.util.resourcebundle;
/**
* <p>title:多国语言的后台实现类 </p>
* <p>description: 根据属性文件及区域与语言设置,得到对应的语言</p>
* <p>copyright: copyright (c) 2003</p>
* <p>company: timer corporation</p>
* @author:宋兆辉
* @version 1.0
*/
public class resource {
private static final string head_file = "attr"; //属性文件名的前缀
private static final string last_file=".properties"; //属性文件名的后缀
private static final string file_path="c://"; //定义属性文件存放的目录
public resource() {
}
/*以下是根据传入的属性文件中的"键",而得到与区域与语言设置相对应的"值"*/
public synchronized string srcstr(string disstr) {
string ret = "";
try {
locale locale = locale.getdefault(); //获取系统的区域与语言默认设置
system.out.println("");
string basename = new stringbuffer()
.append(head_file).append("_").append(locale.tostring())
.append(last_file).tostring(); //根据local属性,前缀以及后缀生成文件名
string filename = new stringbuffer(file_path).append(basename)
.tostring(); //获取文件的完整路径
inputstream is = new fileinputstream(filename); //生成文件输入流
propertyresourcebundle pr = new propertyresourcebundle(is); //根据输入流构造propertyresourcebundle的实例
ret = pr.getstring(disstr);
if(locale.equals(locale.china)){
ret = new string(ret.getbytes("iso-8859-1"),"gb2312");
} //如果是要显示中文,则要进行内码的转换
is.close();
return ret;
}
catch (exception e) {
e.printstacktrace();
return disstr;
}
}
}
2、对应的properties文件:attr.properties和attr_zh_cn.properties
(1)attr_en_us.properties:
loginname=login name
password=password
login=login
logintime=logintime
logoff=logout
chineseversion=english version
mainpage=home
software=software
hardware=hardware
yourlocationmainpage=yourlocationmainpage
mycalendar=mycalendar
mymails=mymails
r&d=r&d
forum=forum
developerprocess=developerprocess
technologycommunion=technologycommunion
(2)attr_zh_cn.properties:
loginname=用户
password=密码
login=登陆
logintime=登陆时间
logoff=注销登陆
chineseversion=中文版
mainpage=首页
software=软件
hardware=硬件
yourlocationmainpage=当前位置:首页
mycalendar=我的日程
mymails=我的邮件
r&d=研发区
forum=讨论区
developerprocess=开发进程
technologycommunion=技术交流
3、对应的jsp文件:
本例中有3个jsp页面:
(1)login.jsp:(登陆页面)
<%@ page contenttype="text/html; charset=gb2312" %>
<html>
<head>
<title></title>
<link href="css/style.css" rel="stylesheet" type="text/css">
<script language = javascript>
function focusit() {
window.document.login.loginname.focus();
}
</script>
</head>
<jsp:usebean id="resource" scope="application" class="i18n.article.resource"/>
<body onload="javascript:focusit();" bgcolor="#ffffff">
<form name="login" method="post" action="main.jsp">
<table border=0 cellpadding=0 cellspacing=0 align=center>
<tr>
<td height="150"></td></tr>
<tr>
<td width=262><img alt="" border=0 src="http://www.itus.cnimages/cover_r1_c1.jpg"></td>
<td> </td>
<td>
<table border=0 cellpadding=1 cellspacing=1>
<tr>
<td>
<p align=right><%=resource.srcstr("loginname")%></p></td>
<td><input type=text name="loginname" id=text1></td></tr>
<tr>
<td>
<p align=right><%=resource.srcstr("password")%></p></td>
<td><input type=password name="password" id=password1></td></tr>
<tr>
<td> </td>
<td align=center>
<input class="button" type=submit value=" <%=resource.srcstr("login")%> " id=submit1></td></tr>
</table>
</td></tr>
<tr>
<td colspan=3><img alt="" border=0
src="http://www.itus.cnimages/cover_r2_c1.jpg"></td></tr>
<tr>
<td colspan=3><img alt="" border=0
src="http://www.itus.cnimages/cover_r3_c1.jpg"></td></tr>
<tr>
<td colspan=3 height=20> </td>
</tr>
<tr>
<td colspan=3 align=center><font color="#c0c0c0">best viewed in ie5.0 or up ,1024x768</font></td>
</tr>
<tr>
<td colspan=3><hr size=1 width="100%" color="#c0c0c0"></td>
</tr>
<tr>
<td colspan=3 align=center>© 2003 corporation. all rights reserved.</td>
</tr>
</table>
</form>
</body>
</html>
(2)main.jsp:
<%@ page contenttype="text/html; charset=gb2312" %>
<jsp:usebean id="resource" scope="application" class="i18n.article.resource"/>
<html>
<head>
<title></title>
<meta name="generator" content="microsoft visual studio">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="css/style.css" type="text/css">
</head>
<body topmargin=2 leftmargin=2 bgcolor="#ffffff">
<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height=80>
<%
string loginname = request.getparameter("loginname");
%>
<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>
<tr>
<td width=163 rowspan=3><img src="http://www.itus.cnimages/system_logo.jpg" border=0></td>
<td width=30 rowspan=3><img src="http://www.itus.cnimages/logo_linked_corner.gif" border=0></td>
<td width=140><img src="http://www.itus.cnimages/logo_extended_bar.jpg" border=0></td>
<td height=25 bgcolor="#95add3" align=right class="p1">
<%=resource.srcstr("logintime")%><%=new java.util.date().tolocalestring()%>
<%=resource.srcstr("loginname")%><%=loginname%>
<img src="http://www.itus.cnimages/logout.gif" align="absmiddle" border=0>
<a href="login.jsp"><%=resource.srcstr("logoff")%></a>
<img src="http://www.itus.cnimages/row_ender.jpg" align="absmiddle" border=0></td>
</tr>
<tr><td height=30 colspan=2><p>
<a href="#"><%=resource.srcstr("mainpage")%></a>
<a href="#"><%=resource.srcstr("software")%></a>
<a href="#"><%=resource.srcstr("hardware")%></a> </p></td></tr>
<tr><td height=25 colspan=2<%=resource.srcstr("yourlocationmainpage")%>></td></tr>
</table>
</td>
</tr>
<tr>
<td>
<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>
<tr>
<td width=165 valign=top>
<table width=100% cellpadding=0 cellspacing=0 border=0>
<tr><td colspan=2><img src="http://www.itus.cnimages/left_menu_top.jpg" border=0></td></tr>
<tr><td width=35 align=left><img src="http://www.itus.cnimages/left_menu_colbar.jpg" border=0></td>
<td width=130 align=left valign=top>
<table width=100% cellpadding=0 cellspacing=0 border=0>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("mycalendar")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("mymails")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("developerprocess")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("technologycommunion")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("forum")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
<tr><td style="cursor:hand;"><p><%=resource.srcstr("r&d")%></p></td></tr>
<tr><td><hr size=1 width=100% color="#c6ff00"></td></tr>
</table>
</td>
</tr>
</table>
</td>
<td><iframe frameborder=0 id=main name=main scrolling=auto src="version.jsp"
style="height: 100%; visibility: inherit; width: 100%; z-index: 1"></iframe></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height=50 valign=top>
<table width=100% cellpadding=0 cellspacing=0 border=0>
<tr><td align=center><hr size=1 width=80% color="#95add3"></td></tr>
<tr><td align=center>?2003 corporation. all rights reserved.</td></tr>
</table>
</td>
</tr>
</table>
</body>
</html>
(3)version.jsp:(主页面的中间部分)
<%@ page contenttype="text/html; charset=gbk" %>
<jsp:usebean id="resource" scope="application" class="i18n.article.resource"/>
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body leftmargin="0" topmargin="0">
<table width="100%" height="100%" cellpadding=0 cellspacing=0 border=0>
<tr>
<td align=center valign=middle colspan=2>
<table align="center" border="0" cellspacing="3" cellpadding="5" style="filter:dropshadow(color=gray,offx=5,offy=5,positive=1);">
<tr>
<td width=400 height=100 bgcolor="#cbd3ea" align="center" style="border: 1px #0a246a solid;">
<p><font color="#5c6bac" style="font-size:30px;"><b><%=resource.srcstr("chineseversion")%></b></font></p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width=50% valign=top align=center> </td>
<td width=50% height=155 align=center><img src="http://www.itus.cnimages/internationalization.jpg"></td>
</tr>
</table>
</body>
</html>
二、 利用自定义类:
利用自定义的类,可以存取放在属性文件或是数据库中的对应的语言文字,实现方式大致与上述方法相同,不过是添加一些对属性文件流或是数据库存取的方法,对应的jsp页面可以不做改动。在这里不再赘述.
注:以上程序在windows2000英文版及中文版,resin2.1.6上调式通过.
闽公网安备 35060202000074号