js使用struts2国际化处理方式

最近 js中需要用国际化的方式,但是在单独的js中使用struts国际化标签有问题,于是找到一种认为还不错的处理方式:就是定义多个国际化js文件。
[color=red]注:
多个js文件中里面只需要定义js中需要的国际化的字符。其余在页面中需要国际化的,还是照样在properties文件中,使用struts2的国际化标签获取就可以[/color]




1.在拦截器里获取当前的语言,并保存至session中,
//语言
String request_locale = request.getParameter("request_locale");
logger.debug("---------request_locale:"+request_locale);
Locale locale = (Locale) request.getSession().getAttribute("i18_local");
if(null !=request_locale)
{
	if(request_locale.equalsIgnoreCase("en_US"))
	{
		locale = Locale.US;
	}
	else if(request_locale.equalsIgnoreCase("zh_TW"))
	{
		locale = Locale.TAIWAN;
	}
	else
	{
		locale = Locale.CHINA;
	}
}
if(locale==null)
{
	locale = Locale.CHINA;
}
request.getSession().setAttribute("i18_local", locale.toString());
request.getSession().setAttribute("timeStampForJS", System.currentTimeMillis());
ai.getInvocationContext().setLocale(locale);


2.页面中根据获取当前的语言获取所引用的js文件,防止缓存加上时间戳
<s:if test='#session.i18_local == "en_US"'>
<script src="/lang/lang_en_US.js?<s:property value='#session.timeStampForJS'/>" type="text/javascript"></script>
</s:if> 
<s:elseif test='#session.i18_local == "zh_TW"'>
<script src="/lang/lang_zh_TW.js?<s:property value='#session.timeStampForJS'/>" type="text/javascript"></script>
</s:elseif>
<s:else>
<script src="/lang/lang_zh_CN.js?<s:property value='#session.timeStampForJS'/>" type="text/javascript"></script>
</s:else>


3.建立3个国际化的js文件
lang_en_US.js:
var js_edittag = "Edit tag";


lang_zh_CN.js:
var js_edittag = "编辑标签";


lang_zh_TW.js:
var js_edittag = "編輯標籤";



在js中直接使用js_edittag 这个全局变量就可以了。



猜你喜欢

转载自dengli19881102.iteye.com/blog/2324187