通过Struts2中的代码设置语言环境

时间:2013-08-29 11:18:32

标签: java struts2 internationalization locale actioncontext

在我的应用程序中,我必须根据配置页面中选择的区域设置用户显示内容。我没有使用浏览器默认语言环境。

使用s:text时,它始终使用默认资源文件。

在Struts1中,我使用以下代码在我的过滤器中设置默认语言环境

session.setAttribute("org.apache.struts.action.LOCALE",locale);

如何在Struts2中动态设置用户选择的语言环境?

3 个答案:

答案 0 :(得分:6)

这对我有用:

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

答案 1 :(得分:0)

您在Struts 2中按以下方式设置语言环境:

ActionContext ctx = ActionContext.getContext();
if (ctx != null)
{
    ctx.setLocale(locale);
}

您还可以使用I18nInterceptor

答案 2 :(得分:0)

Struts2国际化拦截器i18n可用于将当前用户区域设置动态更改为用户会话的用户特定区域设置。

  

“或者,仅适用于当前请求(自XWork 2.1.3起)”

通过发出HTTP请求并提供请求参数request_locale,其中包含像"en_US"这样的语言环境的值,它为英语,美国创建了一个语言环境。

默认情况下,此区域设置在"WW_TRANS_I18N_LOCALE"属性下保存在会话中,并在用户会话期间用作当前区域设置。每次请求时,此拦截器还会将当前区域设置推送到ActionContext映射中。这允许支持本地化的框架组件都使用ActionContext的语言环境。

您可以在I18n Interceptor的文档中找到有关示例代码的更详细说明。

  

处理设置会话中指定的语言环境的拦截器   作为当前操作请求的区域设置。另外,这个   拦截器将查找特定的HTTP请求参数并进行设置   提供任何值的语言环境。这意味着这一点   拦截器可用于动态地允许您的应用程序   更改用户会话的区域设置,或者仅用于   当前的请求(自XWork 2.1.3起)。这非常有用   需要多语言支持并希望用户使用的应用程序   能够在任何时候设置他或她的语言偏好。语言环境   参数在执行此拦截器时被删除,   确保不在动作上设置属性(例如   request_locale)你的身上没有典型的相应设定者   动作。

     

例如,使用默认参数名称,请求   foo.action?request_locale=en_US,那么美国英语的语言环境就是   保存在用户的会话中,将用于将来的所有请求。   如果没有设置区域设置(例如第一次访问),则   拦截器使用浏览器区域设置。