之前使用struts2实现过国际化,但当时都是以用户的浏览器的locale为主去加载相应的资源文件的。
但是,现在要求,在页面上加上一个下拉框,供用户手动选择一个语言。
本以为这是一个比较简单的需求,没想到做起来还是费了一番周折。
网上也查过,但是抄来抄去的,都差不多。所以还是自己新手做一下比较靠谱。
首先,HTML,就是一个简单的下拉框,里面两种语言,中文和英文
<form id="langForm" method="post"> <span id="langChoose"><s:text name="page.login.item.language" /></span> <select id="lang" name="localeVal"> <option value="1" <s:if test="#session.WW_TRANS_I18N_LOCALE.toString().equalsIgnoreCase('zh_CN')">selected</s:if>><s:text name="page.login.item.language.zh" /></option> <option value="2" <s:if test="#session.WW_TRANS_I18N_LOCALE.toString().equalsIgnoreCase('en_US')">selected</s:if>><s:text name="page.login.item.language.en" /></option> </select> </form>
如果有对“WW_TRANS_I18N_LOCALE”这个字符串不明白的,建议去看下struts2中“com.opensymphony.xwork2.interceptor.I18nInterceptor”这个类的源码,就知道了。
上面的下拉框的change事件:
$("#lang").change(function() { $("#langForm").attr("action", contextPath + "/locale!chgLocale").submit(); });
chgLocale方法如下:
public String chgLocale() { LOG.debug("chgLocale() start."); Locale locale = null; if (localeVal == Const.LOCALE_US) { locale = Locale.US; } else { locale = Locale.SIMPLIFIED_CHINESE; } session.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, locale); LOG.debug("chgLocale() end."); return "jumpToLogin"; }
看到这,可能大家都明白了,就是通过这个action,往session中增加一个键值对,其中:
键为: I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, 即上面提到的“WW_TRANS_I18N_LOCALE”
值为:Locale.US,代表英文;或者 Locale.SIMPLIFIED_CHINESE, 代表简体中文。
以上即为国际化实现过程。
下面提醒一个问题点,可能大家会遇到:
如果某个jsp页面,是直接被访问的,如:
http://127.0.0.1:8080/test/login.jsp
那么,国际化将失效,它将始终采用浏览器的locale去加载国际化资源。为什么呢?因为这种方式是不会走struts2的拦截器的,具体地说,应该是“com.opensymphony.xwork2.interceptor.I18nInterceptor”这个拦截器。
那么,要怎么来处理这种情况呢?建议就是:所有的页面都通过action来转发。
相关推荐
自定义标签主要包括三个步骤: 1、编写java类,继承TagSupport类;...2、创建tld文件,影射标签名和标签的java类; 3、jsp页面引入tld。 博文地址:http://blog.csdn.net/itmyhome1990/article/details/50718282
自己做的一个简单的国际化例子,Struts2框架,myEclipse.
struts2中 页面加载时动态填充下拉框的例子,用于向数据库请求数据进行填充。通过Action中的方法进行请求数据,来初始化Action中的属性,以便页面上的使用。包含jar包。
博文链接:https://tj007-bo.iteye.com/blog/32481
主要介绍了Struts2 自定义下拉框Tag标签的相关资料,需要的朋友可以参考下
支持手动输入的下拉框
C# winform datagridview 里的下拉框中 既可以从下拉框里选择数据,也可以让客户自己手动往里输入数据,
下拉框美化下拉框美化下拉框美化下拉框美化下拉框美化下拉框美化下拉框美化下拉框美化下拉框美化下拉框美化下拉框美化下拉框美化下拉框美化下拉框美化
用struts2 doubleselect标签实现的二级联动下拉菜单
可以输入的下拉框. 下拉框和文本框组合共用可以输入的下拉框. 下拉框和文本框组合共用可以输入的下拉框. 下拉框和文本框组合共用可以输入的下拉框. 下拉框和文本框组合共用可以输入的下拉框. 下拉框和文本框组合共用...
select2 动态下拉框插件以及开发心得
在WPF中界面国际化很容易实现,但是数据国际化确实是一个难题。为了解决项目中的需求,我设计了...2.在xaml中创建多套国际化,key为数据库中的值; 3.切换国际化时,加载不同的xaml; 4.通过key值获取对应的字符串。
js2级省市联动下拉框js2级省市联动下拉框js2级省市联动下拉框js2级省市联动下拉框
通过下拉框异步刷新echart数据,原文地址http://blog.csdn.net/kebi007/article/details/52887570
此代码适合所有下拉列表取值;一个项目所有的下拉列表只需要这一个公用方法,接下来为大家详细介绍下具体实现步骤,感兴趣的朋友可以参考下,希望可以帮助到你
2级下拉框联动含数据库,很经典,和适合初学者学习。
supplyInfo_add.jsp最简单,就是通过一级触发实现二级联动;supplyInfo_update.jsp稍微难了点,不仅仅是一级触发实现二级联动,还有它是将数据库中相应的省份城市提取出来,将原有增加的省份城市提取给用户,供用户修改;...
下拉框带模糊查询select2,里面有需要引入的js,在页面带入即可。网络有模板,喜欢请点赞。