Struts1.x 国际化资源配置

一,基本的国际化

步骤1:配置struts国际化

在struts-config.xml中配置message-resources标签

<message-resource parameter="MessageResource"/>

其中的参数是国际化配置文件MessageResource.properties的文件名。

步骤2:提供国际化配置文件

中文:MessageResource_zh_cn.properties

英文:MessageResource_en_us.properties

源文件:resource.properties表示中文信息

在源文件resource.properties中硬编码中文信息
user.title=用户登录
user.username=用户
user.password=密码
user.button.login=登录

然后用java中提供的工具把这些信息转换为unicode放到相应国际化文件中。

MessageResource_zh_cn.properties文件中

user.title=\u7528\u6237\u767b\u5f55
user.username=\u7528\u6237
user.password=\u5bc6\u7801
user.button.login=\u767b\u5f55

MessageResource_en_us.properties文件中

user.title=User Login
user.username=User Name
user.password=Password
user.button.login=Login

步骤3:在jsp页面上用struts标签<bean:message>来读取国际化消息文本

引入标签:

<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>

<form action="login.do" method="post">
<bean:message key="user.username"/>:<input type="text" name="username"><br>
<bean:message key="user.password"/>:<input type="password" name="password"><br>
<input type="submit" value="<bean:message key="user.button.login"/>">
</form>

bean:message中的属性key指的是国际化文件中的键。

一个local对应一个session

二,国际化的切换

jsp页面:

<a href="changelang.do?lang=zh">中文</a>&nbsp&nbsp&nbsp<a href="changelang.do?lang=en">英文</a>

添加一个Action:

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String lang = request.getParameter("lang");


//得到Locale
Locale currentLocale = Locale.getDefault();
if ("zh".equals(lang)) {

//自定义Locale
currentLocale = new Locale("zh", "CN");
}else if("en".equals(lang)) {
currentLocale = new Locale("en", "US");
}

//自己设置Locale
//request.getSession().setAttribute(Globals.LOCALE_KEY, currentLocale);
//调用struts中提供的方法设置Locale
this.setLocale(request, currentLocale);
return mapping.findForward("index");
}

配置国际化action:

<action path="/changelang"
type="com.bjsxt.struts.ChangeLanguageAction"
>
<forward name="index" path="/index.jsp"/>
</action>

<message-resources parameter="res.MessageResources" />

res.MessageResources表示的是res包下的MessageResources文件。

三,动态信息的国际化

如果是与后台交互的数据,那么在国际化文件中就用占位符进行配置

resource.properties源文件:

user.login.success={0},登录成功
user.not.found=用户不能找到,用户名称=[{0}]
user.password.error=密码错误
user.login.error=登录失败

MessageResource_zh_cn.properties文件:

user.login.success={0},\u767b\u5f55\u6210\u529f
user.not.found=\u7528\u6237\u4e0d\u80fd\u627e\u5230\uff0c\u7528\u6237\u540d\u79f0=[{0}]
user.password.error=\u5bc6\u7801\u9519\u8bef
user.login.error=\u767b\u5f55\u5931\u8d25
MessageResource_en_us.properties文件:

user.login.success={0},Login Success
user.not.found=User Not Found,UserName[{0}]
user.password.error=Password Error
user.login.error=Login Error

Action中的代码:

package com.bjsxt.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

/**
* 用户登录的Action
* @author Administrator
*
*/
public class LoginAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LoginActionForm laf = (LoginActionForm)form;
String username = laf.getUsername();
String password = laf.getPassword();

ActionMessages messages = new ActionMessages();
try {
UserManager.getInstance().login(username, password);

//创建国际化消息文本
ActionMessage message = new ActionMessage("user.login.success", username);
//ActionMessage message = new ActionMessage("user.login.success", new Object[]{username});//其中Object数组表示的是占位符
messages.add("loginSuccess1", message);

ActionMessage message1 = new ActionMessage("user.login.success", username);
messages.add("loginSuccess2", message1);

//传递国际化消息文本
this.saveMessages(request, messages);
return mapping.findForward("success");
}catch(UserNotFoundException unfe) {
unfe.printStackTrace();

//创建国际化消息文本
ActionMessage message = new ActionMessage("user.not.found", username);
messages.add("error1", message);

//传递国际化消息文本
this.saveErrors(request, messages);
}catch(PasswordErrorException pee) {
pee.printStackTrace();
//创建国际化消息文本
ActionMessage message = new ActionMessage("user.password.error");
messages.add("error2", message);

//传递国际化消息文本
this.saveErrors(request, messages);
}
return mapping.findForward("error");
}

}

一个ActionMessage表示一条国际化信息。

Action配置:

<message-resources parameter="res.MessageResources" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值