use*_*155 3 java struts2 internationalization
我有一个使用 Struts 2 的 web 应用程序。我使用具有所有默认设置的 i18n 拦截器。我认为这个拦截器的工作方式如下:
因此,在我的操作类(实现 sessionAware)中,我有以下方法:
public String getUserLocale()
{
return (String) session.get("WW_TRANS_I18N_LOCALE");
}
Run Code Online (Sandbox Code Playgroud)
但是,此方法在情况 2 中不起作用,它仅返回 null。所以我的问题是:如果没有明确的请求参数,我如何让我的操作知道 i18n 拦截器检测到的用户区域设置?因为它没有存储在会话中?
您不应该使用拦截器定义的会话密钥供内部使用来获取操作区域设置。
如果拦截器request_locale检测到参数,则i18n创建请求的语言环境并将其放入操作上下文以及拦截器指定的键下的会话。
如果对拦截器的下一个请求不包含request_locale参数,则它会获取保存在会话中的区域设置,如果未找到,则使用请求区域设置。
拦截器再次将返回的语言环境放入操作上下文。因此,要获得 struts 标签使用的区域设置,您应该使用
Locale locale = ActionContext.getContext().getLocale();
Run Code Online (Sandbox Code Playgroud)