一、普通java工程实现国际化(工程struts2_3100_I18N_Test
)
首先在src下存放国际化文件
app_en_US.properties
welcome.msg=hello,sir
app_zh_CN.properties
welcome.msg=\u6B22\u8FCE\u4F60\uFF01
我们使用一个普通的java程序进行测试:
Test.java
package com.bjsxt;
import java.util.Locale;
import java.util.ResourceBundle;
public class Test {
public static void main(String[] args) {
ResourceBundle res = ResourceBundle.getBundle("app", Locale.US);
System.out.println(res.getString("welcome.msg" ));
}
}
说明:我们这里在方法getBundle
中的第一个参数是填写资源文件的开头部分,资源文件中的第二部分(如en)表示语言,第三部分(如US)表示国家。方法的第二个参数选择国家。
二、struts2中的国际化(工程struts2_3200_BBS2009_08_I18N
)
struts2中国际化分为三个级别,分别是action级、package级、工程级,作用范围依次变大,但是一般我们都使用工程级。
2.1 action级和package级国际化
这两种方式一般不太用,这里不详细讲。
需要明白的是action级的资源文件写法一般为LoginAction_en_US.properties
和LoginAction_zh_CN.properties
,这里名字的第一部分最好和action的名字相同,这个级别的国际化资源文件只能给对应的action使用。而package级别的资源文件的名字一般为package_en_US.properties
和package_zh_CN.properties
,注意第一部分一定要是package。这两类资源文件都放在action包中。
2.2 工程级国际化
此时资源文件一般放在src目录下。
bbs2009_en_US.properties
login.username=username:
login.password=password:
login.login=login
welcome.msg=welcome\:{0}
bbs2009_zh_CN.properties
login.username=\u7528\u6237\u540D\uFF1A
login.password=\u5BC6 \u7801\uFF1A
login.login=\u767B\u5F55
welcome.msg=\u6B22\u8FCE\u4F60\uFF1A{0}
这里以登录为例:
LoginAction.java
package com.bjsxt.bbs2009.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String login() throws Exception {
return "success";
}
public String input() {
return "input";
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true"></constant>
<!-- 配置资源文件的地址 -->
<constant name="struts.custom.i18n.resources" value="bbs2009"></constant>
<package name="admin" namespace="/admin" extends="struts-default" >
<default-action-ref name="index"/>
<action name="index">
<result>/admin/index.html</result>
</action>
<action name="*_*" class="com.bjsxt.bbs2009.action.{1}Action" method="{2}">
<result>/admin/{1}_{2}.jsp</result>
<result name="input">/admin/{1}_{2}.jsp</result>
</action>
</package>
<package name="front" namespace="/" extends="struts-default" >
<default-action-ref name="Category_list"/><!-- 默认访问此界面 -->
<action name="Category_list" class="com.bjsxt.bbs2009.action.CategoryAction" method="list">
<result>/index.jsp</result>
</action>
</package>
</struts>
Login_input.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Login_input</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<form action="admin/Login-login" method="post">
<!-- 注意取得资源文件内容的写法 -->
<s:property value="getText('login.username')"/><input name="username" />
<s:property value="getText('login.password')"/><input name="password" type="password" />
<input type="submit" value="<s:property value="getText('login.login')"/>" />
</form>
<s:debug></s:debug>
</body>
</html>
Login_login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Login_login</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
欢迎您:<s:property value="username"/>
<s:text name="welcome.msg">
<s:param value="username"></s:param>
</s:text>
</body>
</html>
说明:
- 1.首先在配置文件中我们需要配置资源文件:
<constant name="struts.custom.i18n.resources" value="bbs2009"></constant>
其中value值是资源文件名字的第一部分。
- 2.在输入页面中我们取值的方法是
value="getText('login.username')"
- 3.在登录成功后的页面(
Login_login.jsp
)中我们取得用户名,但是这个名字我们是不能在资源文件中写死的,所以我们采用动态指定。 - 4.有时候我们可以看到有一种网站,当我们点击链接就会将整个网站的语言变换。
我们在Login_input.jsp
中加上两个链接:
<a href="admin/lang?request_locale=en_US">en</a>
<a href="admin/lang?request_locale=zh_CN">cn</a>
其中lang是action的name属性值,提交到特定的action去处理。
最后:
这个内容在以后的开发中用的较少,这里不多说。