- 在struts配置文件当中加入国际化的配置,本文是在struts.xml当中添加的
<constant name="struts.custom.i18n.resources" value="applicationResource"></constant>
- 根据国际化配置当中value的值需要加入与之对应的properties文件,笔者采用中文简体、中文繁体、美国英文作为系统语言所以相应的资源文件命名如下:
中文简体文件名为applicationResource_zh_CN.properties
中文繁体文件名为applicationResource_zh_TW.properties
美国英文文件名为applicationResource_en_US.properties
资源文件命名格式:filename_language_country.properties.
特别注意上述中文字体资源即含有
_zh 的文件,因为JAVA要求.properties文件不允许包含非ASCII(请自行上网查阅ASCII字符包括哪些字符,主要是英文和一些常见的符号,而中文等字符不属于ASCII字符)字符,所以对于中文,需要将中文转换为UNICODE编码的字符,并用/u+UNICODE编码来表示中文。笔者采用JDK自带的native2ascii将中文转换(PS:转换的源文件编码格式是需要与IDE规定的一致,不然直接添加会是乱码,也可以产生之后直接复制就不会了,或者参考文章----JDK自带的native2ascii工具完全揭密)
3.需要国际化的硬文字全部配置好了之后,到页面进行替换笔者采用<s:text name=""/>标签显示的,以下为样例代码
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:text name="helpCentral"/>
<s:text name="welcome">
<s:param>
<s:text name="visitor"/>
</s:param>
</s:text>
<s:text name=""/>标签当中name属性的值为配置文件当中的key值helpCentral=\u5e2e\u52a9\u4e2d\u5fc3(PS:帮助中心)第二个复合标签<s:text
name=""></s:text>里面<s:param></s:param>是对其传参数,配置文件当中的格式是
welcomeVisitor=\u60a8\u597d\uff01{0}(PS:您好!)
visitor=\u6e38\u5ba2(PS:游客)
第一个参数对于{0},第二个参数对应{1},依次类推
当全部替换好了,已经实现了自动识别浏览器语言格式,并国际化显示。可以使用IE浏览器改变语言设置就可以看到效果了,步骤如下:
4.提供手动设置显示的语言
一、添加struts相应的配置文件,本文为struts_lang.xml如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="lang" namespace="/lang" extends="json-default">
<!-- 语言设置 -->
<action name="lang_*" class="langAction"><!-- 路径为上面的name+此处的name格式,本文为lang/lang_zh_CN.action class为处理action -->
<result type="redirect">${goBackUrl}</result><!-- 返回success时候重定向 goBackUrl为action中的全局变量需要有get、set方法-->
<result name="tip">/WEB-INF/product/pro_tip.jsp</result>
</action>
</package>
</struts>
将其添加到struts.xml默认配置文件当中
<include file="struts_lang.xml"></include>
二、编写action类
/**
* @Title: LangAction.java
* @Package net.tgx.action.lang
* @Description: TODO(用一句话描述该文件做什么)
* @author Administrator
* @date 2014-12-10 上午10:13:17
* @version V1.0
*/
package net.tgx.action.lang;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import com.opensymphony.xwork2.ActionSupport;
/**
* @ClassName: LangAction
* @Description: TODO(类注释)
* @author Administrator
* @date 2014-12-10 上午10:13:17
* @version V1.0
*
*/
@Service("langAction")
@Scope("prototype")
public class LangAction extends ActionSupport implements ServletRequestAware{
/**
* @Fields serialVersionUID : TODO(第一行显示地方)
*/
private static final long serialVersionUID = -3855583705013387679L;
private HttpServletRequest request;
private String goBackUrl;
@Override
public String execute() throws Exception {
// TODO execute() method
String uri = request.getRequestURI();//获得请求路径
this.goBackUrl = request.getHeader("Referer");//获得上一个页面路径作为跳转返回
System.out.println("--------------langAction execute start........"+uri);
System.out.println("--------------langAction execute goBackUrl........"+goBackUrl);
uri = uri.substring(uri.indexOf("_")+1, uri.lastIndexOf('.'));
String param[] = uri.split("_");
if(null==param||param.length!=2){
request.setAttribute("tip", "语言链接异常,非法访问");
return "tip";
}
String lang = param[0];
String country = param[1];
Locale locale=new Locale(lang,country.toUpperCase());
request.getSession().setAttribute("WW_TRANS_I18N_LOCALE",locale);//将设置好的语言放入session key为WW_TRANS_I18N_LOCALE中
System.out.println("-------------33--------"+request.getSession().getAttribute("WW_TRANS_I18N_LOCALE"));
return super.execute();
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
// TODO setServletRequest
request = arg0;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public String getGoBackUrl() {
return goBackUrl;
}
public void setGoBackUrl(String goBackUrl) {
this.goBackUrl = goBackUrl;
}
}
5.笔记:
Struts2国际化的运行机制
在Struts 2中,我们可以通过ActionContext.getContext().setLocale(Locale arg)(PS:笔者测试并未通过),可以设置用户的默认语言。不过,这种方式完全是一种手动方式,而且需要编程实现。为了简化设置用户默认语言环境,Struts
2提供了一个名i18n的拦截器(Interceptor),并且将其住注册在默认的拦截器栈中(defaultStack)。i18n拦截器在执行Action方法前,自动查找请求中的一个名为request_locale的参数。如果该参数存在,拦截器就将其作为参数,并转换成Locale对象,并将其设为用户默认的Locale(代表语言/国家环境)。除此之外,i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为“WW_TRANS_I18N_LOCALE”的属性中。一旦用户Session中存在一个名为“WW_TRANS_I18N_LOCALE”的属性,则该属性指定的Locale将会作为浏览者的默认Locale。如果采用传名为request_locale的参数方式只要发出类似下面的请求即可:
http://localhost:8080/lang/lang_set.action?request_locale=zh_CN
action变成如下即可:
@Override
public String execute() throws Exception {
// TODO execute() method
this.goBackUrl = request.getHeader("Referer");//获得上一个页面路径作为跳转返回
System.out.println("-------------33--------"+request.getSession().getAttribute("WW_TRANS_I18N_LOCALE"));
return super.execute();
}
<s:text/>标签参考
struts2 访问国际化资源 作为属性
分享到:
相关推荐
struts2国际化自动语言切换 ,一看就会,比较简单
Struts2多语言切换示例,myeclipse源码可直接导入
strut2中页面国际化语言的切换,如中英文的简单切换!
自己在做项目的时候 做的总结 很好的资源
整理struts2国际化例子源码整理struts2国际化例子源码整理struts2国际化例子源码
自己做的一个简单的国际化例子,Struts2框架,myEclipse.
struts2 语言国际化配置和使用、页面按钮实现改变显示语言
Struts2国际化的实现原理;简单的struts2国际化实现过程的讲解
struts2国际化MyEclipse开发struts2国际化MyEclipse开发童叟无欺
struts2国际化 标签 页面 处理类 实例,特殊注意点说明
整个工程的源码,拷过去即可运行,例子简单明了。 自己经过几日的调查开发实现的,希望对大家有帮助。
当今很多网站都只针对本国网民使用,所以,为了跟随时代潮流,所有的网站要能够符合不同国家的人浏览》。。 当今很多网站都只针对本国网民使用,所以,为了跟随时代潮流,所有的网站要能够符合不同国家的人浏览》。...
struts2国际化测试小demo
NULL 博文链接:https://johnson2132.iteye.com/blog/721062
Struts1 和 Struts 2 国际化全局资源,有文档说明、有图形加以说明,还有源代码。
struts1国际化网站中英文切换例子 登录窗体中英文切换例子
http://blog.csdn.net/liuhongjavaen/article/details/7655385 具体操作事项请查阅博客 struts2国际化源码 eclipse国际化插件
struts1国际化
这是动态切换struts国际化的一个例子,有兴趣的可以参考一下。如果有更好的方法,欢迎告知一下。呵呵。我还是学生,所以很多东西还需要不断学习。
励智教育,struts2国际化处理教程案例及幻灯片,网址:http://www.lizhi.cc