您的位置:首页 > 编程语言 > Java开发

【Struts2】(9)国际化

2015-12-17 14:06 441 查看

一. I18N国际化

I18N国际化是这样子的:
public class I18N {

public static void main(String[] args) {
Locale locale = new Locale(args[0], args[1]);

// 日期国际化
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL,
locale);
System.out.println(dateFormat.format(date));

// 数字国际化
int a = 1245512312;
NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
System.out.println(numberFormat.format(a));

// 货币国际化
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(locale);
System.out.println(currencyFormat.format(a));

// 字符国际化
ResourceBundle bundle = ResourceBundle.getBundle("i18n", locale);
System.out.println(bundle.getString("hello"));
}
}
日期国际化、数字国际化和货币国际化都使用的是几个Format类来实现的,在实例化的时候传入locale本地对象。在做字符国际化的时候需要在src目录下建立几个文件,这里我创建了一个i18n_zh_CN.properties和i18n_en_US.properties文件:
hello=\u4F60\u597D
hello=GutenTag
都只有简单的一个键值对的配置,这样子在启动的时候传入zh CH或者en US就可以实现国际化了。
注意的是这里MyEclipse帮我们自动吧中文转换成了ASCII进行了保存,所以并没有显示成中文。

二. struts2的国际化

我们在i18n_zh_CN中配置好需要国际化的字串:
hello=\u4F60\u597D
my.title=\u767B\u9646\u9875\u9762
my.username=\u7528\u6237\u540D
my.password=\u5BC6\u7801
实际上就是登陆页面、用户名、密码等几个字符串,然后创建一个action继承ActionSupport:
public class GoToLoginAction extends ActionSupport {

public String execute() {
return "success";
}
}
写一个方法跳转到jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title><s:text name="my.title"/></title>

</head>

<body>
<form action="/web/test/login.action" method="post">
<s:property value="getText('my.username')"/><input name="username" /><br />
<s:property value="getText('my.password')"/><input name="password" type="password" /><br />
<input type="submit" name="method:login"	value="登陆" />
</form>
<br />${param.id}

</body>
</html>
这里使用了两种方式调用国际化字符:
一个是<s:text name="my.title"/>另一个是<s:property value="getText('my.username')" />,两种方式都是可以的。
对了要使用国际化,需要在struts配置文件中加入一个常量:
<constant name="struts.custom.i18n.resources" value="i18n"/>
告诉它我们要使用我们定义的i18n文件来国际化。
注意:
1. 配置文件位置

关于国际化的配置文件我们上面的是放在src的根目录的,所以需要在配置文件中添加constant常量,当我们放在包里面的时候就不需要配置这个常量了。
当我们放在action的包内时,需要修改国际化文件配置的名字为:package.properties或者Action的名字.properties。
2. 当我们不用继承ActionSupport的Action时,就只能使用<s:text name="my.title"/>来显示内容了。

三. 多语言切换

既然都写好了国际化的支持,那么我们怎么才能再语言之前切换呢?
修改jsp文件,这里写了两种切换页面语言的方式:
<body>
第一种方法:
<a href="/web/test/gotologin.action?request_locale=zh_CN">中文</a>	<a href="/web/test/gotologin.action?request_locale=en_US">English</a>
第二种方法:
<s:url namespace="/test" action="gotologin" var="lan_zh">
<s:param name="request_locale">zh_CN</s:param>
</s:url>
<s:url namespace="/test" action="gotologin" var="lan_en">
<s:param name="request_locale">en_US</s:param>
</s:url>
<a href='<s:property value="#lan_zh"/>'>中文</a>	<a href='<s:property value="#lan_en"/>'>English</a>
<form action="/web/test/login.action" method="post">
<s:property value="getText('my.username')"/><input name="username" /><br />
<s:property value="getText('my.password')"/><input name="password" type="password" /><br />
<input type="submit" name="method:login"	value="登陆" />
</form>
<br />${param.id}

</body>

点击切换就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: