【问题标题】:Get user locale detected by i18n interceptor in action class获取操作类中 i18n 拦截器检测到的用户语言环境
【发布时间】:2014-10-02 21:22:24
【问题描述】:

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

  1. 如果有参数request_locale,去掉这个参数, 将此语言环境放在会话中以供将来使用。
  2. 如果没有参数,则在 httpheader 中搜索语言环境并将其放置 会话中的语言环境以供将来使用。

所以在我的动作类(实现 sessionAware)中,我有以下方法:

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

但是,此方法在情况 #2 中不起作用,它只是返回 null。所以我的问题是:如果没有明确的请求参数,我如何让我的操作知道 i18n 拦截器检测到的用户语言环境?因为它没有存储在会话中?

【问题讨论】:

    标签: java struts2 internationalization


    【解决方案1】:

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

    如果i18n 拦截器检测到request_locale 参数,则创建请求的语言环境并将其放入操作上下文以及拦截器指定的键下的会话中。

    如果对拦截器的下一个请求不包含request_locale 参数,则它会获取保存在会话中的区域设置,如果未找到则使用请求区域设置。

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

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

    【讨论】:

    • 你也可以使用@Inject LocaleProvider provider
    • 当 Struts2 中的内部 DI 有很好的文档记录时,我可以使用它。无论如何,谢谢你的评论。干杯。
    • 这不是因为我们仍然不确定它是否应该是;-)
    猜你喜欢
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多