我想实现在页面上点击超链接动态更换语言;
刚开始,url指向action,且加上request_locale=en_US,然后在这个转发中实现了语言的切换。但是我在重新请求任意一个页面,语言又成为默认的zh_CN,即使是原页面。然后,我写了个filter,过滤任何链接,因为觉得可能拦截器只拦截action的原因。
里面写了ServletActionContext.getContext().setLocale(Locale.US);
request.getSession().setAttribute("WW_TRANS_I18N_LOCALE",Locale.US);之后请求链接,语言没变。但在控制台中System.out.println(ServletActionContext.getContext().getLocale());
输出为en_US。
然后我纠结了,请各位大大指点下究竟该怎么做或者我可能错哪了

解决方案 »

  1.   

    ServletContext application=getServletConfig().getServletContext();
    application.setAttribute("WW_TRANS_I18N_LOCALE",Locale.US);
    试试呢
      

  2.   

    1.页面上有几种切换语言就要创建其相应的资源文件。  比如: 日本语 英语   BaseName_ja_JP.properties和BaseName_en_US.properties2.如果按照一的例子中再加入【法语】,但没有创建其资源文件,struts2 i18n拦截器会自动找到你的电脑系统的Locale并显示其内容。  LZ的系统应该是中文,所以显示zh_CN.
      

  3.   

    看楼主的描述应该没有问题.第一次访问可以显示出英文说明资源文件没有问题.之后的访问出现问题的时候,建议楼主把SESSION的WW_TRANS_I18N_LOCALE取出来看一下保存的是什么.
      

  4.   

    1.页面上有几种切换语言就要创建其相应的资源文件。  比如: 日本语 英语    BaseName_ja_JP.properties和BaseName_en_US.properties2.如果按照一的例子中再加入【法语】,但没有创建其资源文件,struts2 i18n拦截器会自动找到你的电脑系统的Locale并显示其内容。  LZ的系统应该是中文,所以显示zh_CN.
      

  5.   

    如果资源文件是全局的,应该不是这里的问题。
    i18n拦截器确实只能拦截action,如果是jsp页面的话,可以把jsp页面映射成action
      

  6.   

    这个资源文件肯定是没问题的,毕竟通过action转发后语言已经成功更改为en了
    但是,在重定向后,仍然为zh。感觉对struts2的底层的默认local无从下手应该跟session里的那个属性没多大关系,毕竟它是配合Interceptor来使用的。
      

  7.   

    http://blog.csdn.net/icemenlover/archive/2009/10/20/4702095.aspx
      

  8.   

    也不知道还有没有人跟帖,继续现在情况是,我已经更改了session里的那个值(姑且是所谓的默认Locale=en_US),但只要不经过action让I18Ninterceptor处理一遍,它就不起作用,依然为zh_CN;但只要过了拦截器,就为en_US。但我不想每请求一个JSP都让它先请求一个action吧。对struts2里默认Locale感到困惑,感觉这不是默认Locale,是拦截器的默认Locale
      

  9.   

    拦截器本来就只拦截action,对jsp是不起作用的.!
    而且项目里面本来就不应该让用户能直接访问到jsp.! 包括你的程序里面的链接也是一样.  访问前置action,由action到jsp去.!