最近在学习struts2国际化,照着书本做了一个例子,但是出现了如题所述的问题
我的struts.xml代码是:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="messages"/>
<package name="i18n" namespace="/" extends="struts-default">
<action name="login" class="struts2.examples.LoginAction">
<result name="success" type="redirect">/loginResult.jsp</result>
<result name="input" type="redirect">/loginForm.jsp</result>
</action>
<action name="*">
<result>/{1}.jsp</result>
</action>
<!-- <action name="language">
<result>/loginForm.jsp</result>
</action> -->
</package>
</struts>
messages_en_US.properties,messages_zh_CN.properties 也都有,中文的能正常显示,但是英文就不行
loginForm.jsp页面关键代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title><s:text name="page.login.title" /></title>
<s:head/>
</head>
<body>
<s:include value="/lang.jsp"/>
<s:text name="page.login.welcome" /> <br/><br>
<s:form method="post" namespace="/" action="login">
<s:textfield name="username" key="page.login.username" size="20" />
<s:password name="password" key="page.login.password" size="22" />
<s:submit name="nihao" value="%{getText('page.aaaaa.submit')}" />
</s:form><br/>
</body>
</html>
lang.jsp代码:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<s:url id="english">
<s:param name="request_locale">en_US</s:param>
</s:url>
<s:a href="%{english}">English</s:a>
<s:url id="zhongwen">
<s:param name="request_locale">zh_CN</s:param>
</s:url>
<s:a href="%{zhongwen}">中文</s:a>
在线求大神帮忙
------解决思路----------------------
loginForm.jsp?request_locale=en_US
不知道楼主的struts的拦截路径是什么,比如只拦截后缀名是action,这样写肯定就没有效果了
建议楼主通过后台action,比如loginForm.jsp?myAction&request_locale=en_US
如果直接这样写的,不经过action(Struts2 I18N拦截器的处理,可能只是作为一个简单的参数传递)
------解决思路----------------------
我意思说,你随便定义个action,比如actionName为myAction
然后点击页面英文连接的时候:调用的链接为http://……/myAction.action?request_locale=en_us试试
------解决思路----------------------
他是通过jsp传参来提交国际化的参数的
如果我没看错的话··
你进入loginForm.jsp的时候 你的国际化参数根本没提交到后台吧
你是放在form里面的
你没提交后台接不到参数的
太久没弄这个了
你去网上再详细找找资料吧
通过后台拦截器 拦截所有action请求靠谱一点吧
还有,现在中英文一般都是双站 毕竟中英文排版区别太大
------解决思路----------------------
擦 貌似我看错了 struts标签看晕了
不过你还是看看 你那个参数有没有生效吧
------解决思路----------------------
不好意思我没有尝试你的这个想法,因为觉得这样反而也很麻烦,刚刚翻书说是有一种办法是:禁用本地的locale,然后就可以动态指定语言了,但是没有代码,大神可不可以教教我这种方法如何实现啊
首先我不明白,我为啥说这样的方法很麻烦,我觉得这样是比较灵活(如果你想用Struts2国际化的话)
1、struts.xml里设置<constant name="struts.custom.i18n.resources" value="message"></constant>
2、在src下设置几个属性文件(有几种语言设置几个)比如:message_en_US.properties、message_zh_CN.properties
3、配置一个空的action,配置这个action只是为了保证你点击中文或者英文链接的时候能到struts2的后台,调用struts2的拦截器
4、你英文和中文链接改为http://……/myAction.action?request_locale=en_US(或者zh_CN)
这样就结束了,至于你说的禁用本地locale,这个不太清楚,我上面说的这个不需要浏览器做任何设置