在我的应用程序中,我必须根据在配置页面中选择的语言环境用户显示内容。我没有使用浏览器默认语言环境。
使用时<s:text>
,总是使用默认的资源文件。
在 Struts1 中,我使用下面的代码在我的过滤器中设置默认语言环境
session.setAttribute("org.apache.struts.action.LOCALE",locale);
如何在 Struts2 中动态设置用户选择的语言环境?
在我的应用程序中,我必须根据在配置页面中选择的语言环境用户显示内容。我没有使用浏览器默认语言环境。
使用时<s:text>
,总是使用默认的资源文件。
在 Struts1 中,我使用下面的代码在我的过滤器中设置默认语言环境
session.setAttribute("org.apache.struts.action.LOCALE",locale);
如何在 Struts2 中动态设置用户选择的语言环境?
这对我有用:
String language = userLocale.substring(0, 2);
String country = userLocale.substring(3, 5);
Locale locale = new Locale(language, country);
ActionContext.getContext().setLocale(locale);
session.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, locale);
其中 的值采用userLocale
以下形式:fr_FR,资源文件名为 resource_fr_FR.properties
您在 Struts 2 中以下列方式设置语言环境:
ActionContext ctx = ActionContext.getContext();
if (ctx != null)
{
ctx.setLocale(locale);
}
您也可以使用I18nInterceptor。
Struts2 国际化拦截器i18n
可用于将当前用户语言环境动态更改为用户会话的用户特定语言环境。
“或者,或者,仅针对当前请求(自 XWork 2.1.3 起)”
通过发出 HTTP 请求并提供具有request_locale
区域设置值的请求参数,例如"en_US"
为美国英语创建区域设置。
默认情况下,此语言环境保存在会话中的"WW_TRANS_I18N_LOCALE"
属性下,并在用户会话期间用作当前语言环境。ActionContext
在每次请求时,此拦截器也会将当前语言环境推送到地图中。这允许支持本地化的框架组件都使用ActionContext
's 语言环境。
您可以在I18n Interceptor的文档中找到更详细的示例代码描述。
处理将会话中指定的语言环境设置为当前操作请求的语言环境的拦截器。此外,此拦截器将查找特定的 HTTP 请求参数并将语言环境设置为提供的任何值。这意味着此拦截器可用于允许您的应用程序动态更改用户会话的区域设置,或者仅用于当前请求(自 XWork 2.1.3 起)。这对于需要多语言支持并希望用户能够随时设置他或她的语言偏好的应用程序非常有用。
request_locale
在执行此拦截器期间删除 locale 参数,确保不会在您的操作中没有典型对应设置器的操作(例如 )上设置属性 。例如,使用默认参数名称,一个请求
foo.action?request_locale=en_US
,然后美国英语的语言环境将保存在用户的会话中,并将用于所有未来的请求。如果没有设置区域设置(例如第一次访问),则拦截器使用浏览器区域设置。