java - 获取国际化拦截器在操作类中检测到的用户语言环境

标签 java struts2 internationalization

我有一个使用 Struts 2 的网络应用程序。我使用具有所有默认设置的 i18n 拦截器。我认为这个拦截器的工作方式如下:

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

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

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

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

最佳答案

您不应该使用由拦截器定义的 session key 供内部使用来获取操作区域设置。

如果 i18n 拦截器检测到 request_locale 参数,则创建请求的区域设置并将其放入操作上下文以及拦截器指定的键下的 session .

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

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

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

关于java - 获取国际化拦截器在操作类中检测到的用户语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25219713/

相关文章:

java - 设置 Imageview 的背景

java - 更新 cookie 的 maxage 以使其在 Struts 2 中过期

internationalization - 如何在页面级别而非用户级别针对不同语言使用 CQ5 中的 i18n 功能?

.net - 国际化 .NET 应用程序

javascript - 边缘 15 中的 "Intl not available"

java - 从 ffmpeg 的标准输出读取的图像有时确实会变得困惑。为什么?

java - 模式匹配 Java 正则表达式 - "One-or-more"运算符

java - 矩形类型的 width() 方法未定义

list - Struts 2 列表参数传递

java - Spring MVC中有类似Struts2的ValueStack的东西吗?