在动作类中获取i18n拦截器检测到的用户区域设置

时间:2014-08-09 14:45:31

标签: java struts2 internationalization

我有一个使用Struts 2的webapp。我使用i18n拦截器和所有默认设置。我认为这个拦截器的工作原理如下:

  1. 如果有参数request_locale,请删除此参数和 将此区域设置放在会话中以供将来使用。
  2. 如果没有参数,请在httpheader中搜索区域设置并将其放置 会话中的区域设置以供将来使用。
  3. 所以在我的action类(实现sessionAware)中,我有以下方法:

    public String getUserLocale()
    {
        return (String) session.get("WW_TRANS_I18N_LOCALE");
    }
    

    但是,此方法在情境#2中不起作用,它只返回null。所以我的问题是:如果没有明确的请求参数,我怎么能让我的行动知道i18n拦截器检测到的用户区域设置?因为它没有存储在会话中?

1 个答案:

答案 0 :(得分:4)

您不应该使用拦截器定义的会话密钥来获取内部用法来获取操作区域设置。

如果request_locale拦截器检测到i18n参数,则创建所请求的区域设置并将其放置到操作上下文中,并且还放置到拦截器指定的密钥下的会话中。

如果对拦截器的下一个请求不包含request_locale参数,则会获得会话中保存的语言环境,如果未找到,则使用请求语言环境。

拦截器再次将返回的语言环境放入动作上下文中。因此,要获取struts标记使用的语言环境,您应该使用

 Locale locale = ActionContext.getContext().getLocale();