当前位置: 代码迷 >> Java Web开发 >> struts2国际化的时候,网页的网址里边loginForm.jsp?request_locale=en_US,但是页面还是中文是咋回事
  详细解决方案

struts2国际化的时候,网页的网址里边loginForm.jsp?request_locale=en_US,但是页面还是中文是咋回事

热度:1094   发布时间:2016-04-16 21:33:00.0
struts2国际化的时候,网页的网址里边loginForm.jsp?request_locale=en_US,但是页面还是中文是怎么回事?
本帖最后由 JIASHUBING 于 2014-12-23 09:19:24 编辑
最近在学习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拦截器的处理,可能只是作为一个简单的参数传递)

------解决思路----------------------
引用:
@shixitong
1楼版主,拦截器是那个 * ,应该可以拦截到的吧,还有你说的那个后台action,可不可以具体点,我不太懂

我意思说,你随便定义个action,比如actionName为myAction
然后点击页面英文连接的时候:调用的链接为http://……/myAction.action?request_locale=en_us试试
------解决思路----------------------
引用:
loginForm.jsp?request_locale=en_US
不知道楼主的struts的拦截路径是什么,比如只拦截后缀名是action,这样写肯定就没有效果了
建议楼主通过后台action,比如loginForm.jsp?myAction&request_locale=en_US
如果直接这样写的,不经过action(Struts2 I18N拦截器的处理,可能只是作为一个简单的参数传递)


他是通过jsp传参来提交国际化的参数的 
如果我没看错的话··
你进入loginForm.jsp的时候 你的国际化参数根本没提交到后台吧
你是放在form里面的
你没提交后台接不到参数的
太久没弄这个了 
你去网上再详细找找资料吧 
通过后台拦截器 拦截所有action请求靠谱一点吧
还有,现在中英文一般都是双站 毕竟中英文排版区别太大 
------解决思路----------------------
引用:
Quote: 引用:

loginForm.jsp?request_locale=en_US
不知道楼主的struts的拦截路径是什么,比如只拦截后缀名是action,这样写肯定就没有效果了
建议楼主通过后台action,比如loginForm.jsp?myAction&request_locale=en_US
如果直接这样写的,不经过action(Struts2 I18N拦截器的处理,可能只是作为一个简单的参数传递)


他是通过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,这个不太清楚,我上面说的这个不需要浏览器做任何设置

  相关解决方案