Struts 1自定义本地化

时间:2013-12-20 15:48:17

标签: java localization internationalization struts1

我需要一些有关以下问题的帮助。我们有一个现有的Web应用程序根本不使用框架(只是servlet),我们需要添加新的功能,但不是向web.xml添加新的servlet,我们将添加Struts 1和Spring。 / p>

由于项目已经存在,我们必须配置Struts以便能够与现有的约定相处。其中之一就是本地化。

所有可本地化的文本都来自我们的数据库,而不是使用.property文件,所以我实现了自己的 MessageResourcesFactory MessageResources 类。问题是在我们的应用程序中,我们从名为" LANGUAGE" 的Integer会话属性中获取用户语言,而不是来自Locale属性" org.apache。 struts.action.LOCALE" ,Struts默认使用。

问题是这个。如何告诉Struts从我的自定义Integer属性而不是stantard Locale属性中获取用户语言?

感谢。

3 个答案:

答案 0 :(得分:1)

据我所知,没有直接的方法告诉Struts使用其他会话属性来使用语言环境。即使Struts可以执行此操作,您也需要在自定义整数和“真正的”Locale对象之间实现映射。

我的建议:

  • 实施您自己的javax.servlet.http.HttpSessionAttributeListener,将 LANGUAGE 属性同步到相应的Struts区域设置属性
  • 或者更改设置 LANGUAGE 属性的代码,以便还设置Struts会话属性

答案 1 :(得分:0)

另一种解决方案是设置一个过滤器,它将拦截 LANGUAGE 并在执行操作之前设置相应的Struts Locale

public class localeFilter implements Filter  
{  

    public void destroy()  
    {  

    }  

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws Exception  
    {  
        // read the int LANGUAGE and set the Locale used by Struts
    }  

    public void init(FilterConfig filterConfig) throws ServletException  
    {  

    }  

}

并在web.xml中声明过滤器:

  <filter>  
    <filter-name>localeFilter</filter-name>  
    <filter-class>com.example.filters.MyFilter</filter-class>  
  </filter> 

  <filter-mapping>  
    <filter-name>localeFilter</filter-name>  
    <url-pattern>*.do</url-pattern>  
  </filter-mapping>  

答案 2 :(得分:0)

解决方案是扩展ActionServlet并覆盖方法doGetdoPost,以通过在process()之前将其置于请求中来更改区域设置。像

String locale = "your_locale";
request.getSession().setAttribute(Globals.LOCALE_KEY, new Locale(locale));