33.Struts-动态访问国际化资源(国家/语言切换)
来源:互联网 发布:苹果电脑mac开机密码 编辑:程序博客网 时间:2024/06/05 23:30
要修改国家/语言其根本就是要修改请求中的request_locale属性值!!!
目的:为动态地访问国际化资源文件,实现让用户自行选择语言的功能,只需要提供一个下拉列表框,在下拉列表框中列出本应用所支持的各种语言并且,当用户选择下拉列表中的某个选项时,系统将该下拉列表项的值设置为request_locale参数提交(select的name属性设置为request_locale)。
为此,可以将系统中支持的语言放在一个Map中,通过jsp页面中迭代该map对象,就可以在页面上列出应用所支持的全部语言。
案例:用户可自由切换语言。
登录界面i18n.jsp:
- <%@ page language=“java” import=“java.util.*” pageEncoding=“utf-8”%>
- <%@ taglib prefix = “s” uri = “/struts-tags” %>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;
- %>
- <!DOCTYPE HTML PUBLIC ”-//W3C//DTD HTML 4.01 Transitional//EN”>
- <html>
- <head>
- <base href=“<%=basePath%>”>
- <title>My JSP ‘i18n.jsp’ starting page</title>
- <meta http-equiv=“pragma” content=“no-cache”>
- <meta http-equiv=“cache-control” content=“no-cache”>
- <meta http-equiv=“expires” content=“0”>
- <meta http-equiv=“keywords” content=“keyword1,keyword2,keyword3”>
- <meta http-equiv=“description” content=“This is my page”>
- <script type=“text/javascript”>
- function changeLocale(){
- document.getElementById(“form1”).submit();
- }
- </script>
- </head>
- <body>
- <s:set name = “session_locale” value = “#session.WW_TRANS_I18N_LOCALE”/><!– 设置一个参数 session_locale,参数WW_TRANS_I18N_LOCALE在执行action之前赋,并存于session–>
- <s:bean name = “com.action.testI18n” id = “localeList”> <!– javaBean实例,并为其参数locale赋值 –>
- <s:param name = “locale” value = “#session_locale”></s:param>
- </s:bean>
- <s:form action = “testI18n” method = “post” theme=“simple” id = “form1”>
- <s:text name=“language”/>
- <s:select list=“#session.map” listValue = “key” listKey = “value”
- name = “request_locale” onchange = “changeLocale()” > <!–设置name属性–>
- </s:select>
- </s:form>
- <s:form action = “login.action” method = “post”>
- <s:textfield name = “username” key = “loginUser”/> <!–通过key获取国际化资源文件–>
- <s:password name = “password” key = “loginPassword”/>
- <s:submit key = “loginSubmit”/>
- </s:form>
- </body>
- </html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix = "s" uri = "/struts-tags" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'i18n.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript"> function changeLocale(){ document.getElementById("form1").submit(); } </script> </head> <body> <s:set name = "session_locale" value = "#session.WW_TRANS_I18N_LOCALE"/><!-- 设置一个参数 session_locale,参数WW_TRANS_I18N_LOCALE在执行action之前赋,并存于session--> <s:bean name = "com.action.testI18n" id = "localeList"> <!-- javaBean实例,并为其参数locale赋值 --> <s:param name = "locale" value = "#session_locale"></s:param> </s:bean> <s:form action = "testI18n" method = "post" theme="simple" id = "form1"> <s:text name="language"/> <s:select list="#session.map" listValue = "key" listKey = "value" name = "request_locale" onchange = "changeLocale()" > <!--设置name属性--> </s:select> </s:form> <s:form action = "login.action" method = "post"> <s:textfield name = "username" key = "loginUser"/> <!--通过key获取国际化资源文件--> <s:password name = "password" key = "loginPassword"/> <s:submit key = "loginSubmit"/> </s:form> </body></html>
Action:(testI18n.java)
- package com.action;
- import java.util.HashMap;
- import java.util.Locale;
- import java.util.Map;
- import java.util.ResourceBundle;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- public class testI18n extends ActionSupport {
- private Locale locale;
- public Locale getLocale() {
- return locale;
- }
- public void setLocale(Locale locale) {
- this.locale = locale;
- getLocales();
- }
- public void getLocales(){ //关键代码
- Map map = new HashMap(2);
- if(locale == null){ //防止为空的情况!
- locale = Locale.getDefault();
- }
- ResourceBundle resourceBundle = ResourceBundle.getBundle(”globalMessage”, locale);
- map.put(resourceBundle.getString(”huizhi.en”), Locale.US);
- map.put(resourceBundle.getString(”huizhi.cn”), Locale.CHINA);
- ActionContext.getContext().getSession().put(”map”, map); //保存到session范围内
- }
- public String execute() {
- return SUCCESS;
- }
- }
package com.action;import java.util.HashMap;import java.util.Locale;import java.util.Map;import java.util.ResourceBundle;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class testI18n extends ActionSupport { private Locale locale; public Locale getLocale() { return locale; } public void setLocale(Locale locale) { this.locale = locale; getLocales(); } public void getLocales(){ //关键代码 Map map = new HashMap(2); if(locale == null){ //防止为空的情况! locale = Locale.getDefault(); } ResourceBundle resourceBundle = ResourceBundle.getBundle("globalMessage", locale); map.put(resourceBundle.getString("huizhi.en"), Locale.US); map.put(resourceBundle.getString("huizhi.cn"), Locale.CHINA); ActionContext.getContext().getSession().put("map", map); //保存到session范围内 } public String execute() { return SUCCESS; }}
国际化资源文件:globalMessage_zh_CN.properties
- loginUser = \u7528\u6237\u540D
- loginPassword = \u7528\u6237\u5BC6\u7801
- loginSubmit = \u63D0\u4EA4
- language = \u9009\u62E9\u8BED\u8A00
- huizhi.en = \u7F8E\u56FD\u82F1\u8BED
- huizhi.cn = \u7B80\u4F53\u4E2D\u6587
loginUser = \u7528\u6237\u540DloginPassword = \u7528\u6237\u5BC6\u7801loginSubmit = \u63D0\u4EA4language = \u9009\u62E9\u8BED\u8A00huizhi.en = \u7F8E\u56FD\u82F1\u8BEDhuizhi.cn = \u7B80\u4F53\u4E2D\u6587
- loginUser = LoginUser
- loginPassword = LoginPassword
- loginSubmit =Submit
- language = select language
- huizhi.en = American English
- huizhi.cn = Simplified Chinese
loginUser = LoginUserloginPassword = LoginPasswordloginSubmit =Submitlanguage = select languagehuizhi.en = American Englishhuizhi.cn = Simplified Chinese
Action(LoginAction)
- package com.action;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- public class LoginAction extends ActionSupport{
- private String username;
- private String password;
- 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;
- }
- public String execute() {
- return SUCCESS;
- }
- }
package com.action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{ private String username; private String password; 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; } public String execute() { return SUCCESS; }}
struts.xml配置:
- <?xml version=“1.0” encoding=“UTF-8”?>
- <!DOCTYPE struts PUBLIC
- ”-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN”
- “http://struts.apache.org/dtds/struts-2.1.7.dtd”>
- <struts>
- <constant name=“struts.custom.i18n.resources” value=“globalMessage”/>
- <package name=“default” extends=“struts-default” namespace = “/”>
- <action name=“login” class = “com.action.LoginAction”>
- <result>/welcome.jsp</result>
- <result name = “login”>/index.jsp</result>
- </action>
- <action name = “testI18n” class = “com.action.testI18n”>
- <result>/i18n.jsp</result>
- </action>
- </package>
- </struts>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="globalMessage"/> <package name="default" extends="struts-default" namespace = "/"> <action name="login" class = "com.action.LoginAction"> <result>/welcome.jsp</result> <result name = "login">/index.jsp</result> </action> <action name = "testI18n" class = "com.action.testI18n"> <result>/i18n.jsp</result> </action> </package> </struts>
完成效果:
有一点小问题就是当进行语言切换的时候,提交按钮的值value=”“,如上图所示,不知原因,望路过的大佬指点,谢谢!
阅读全文
0 0
- 33.Struts-动态访问国际化资源(国家/语言切换)
- struts--动态访问国际化资源(国家/语言切换)
- spring3国际化 动态语言切换
- struts 国际化:资源文件访问顺序
- android 资源国际化 国家/地区 语言缩写代码
- android 资源国际化 国家/地区 语言缩写代码
- android 资源国际化 语言 国家/地区 缩写代码
- Qt多语言实现和动态切换(国际化)
- Qt国际化之动态语言切换
- Qt之国际化--多语言动态切换
- struts第十三天--国际化全局访问的国家化资源
- STRUTS 2 国际化并自定义切换语言的问题解决
- 程序动态调用struts国际化资源包键值的方法
- iOS语言国际化(切换语言)
- 3.Strut国际化完成语言切换:资源文件
- Android国际化(一)语言、国家/区域代码
- java支持的语言和国家(国际化)
- Struts动态文本国际化
- GitHub 角色说明
- Docker使用TensorFlow Serving
- 2018第六届全球云计算大会5月上海举行!
- 取石子(一)
- lintcode&九章算法——No.50 数组剔除元素后的乘积 ? 待解决
- 33.Struts-动态访问国际化资源(国家/语言切换)
- 669. Trim a Binary Search Tree
- jfinal 启动 Netty 阻塞问题
- 内置数据类型之字典,列表,元祖
- Java 笔记 之 JDK和JRE之间区别
- 【设计模式】05.装饰模式
- IT 技术学习资料分享
- 什么是CDN,content delivery network
- 设计模式:事件委托