要更改 Struts2 应用程序中的区域设置,您需要将
requst_locale
参数包含到某些链接或表单中。
<s:url var="urlen" includeParams="all" value="">
<s:param name="request_locale">en</s:param>
</s:url>
<s:a href="%{#urlen}">English</s:a>
如果您想从操作类更改区域设置,请使用
ActionContext
进行设置并将其放入 HTTP 会话中。
ActionContext.getContext().setLocale(locale);
session.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, locale);
您也可以在 JSP 中的
getText
标签的 listValue
属性中调用 <s:select>
方法。
<s:select name="priorToApplyingInfo.userProfile.phoneNumbers[0].type"
list="phoneTypes" headerKey="0" headerValue=""
listKey="key" listValue="%{getText(value)}"/>
对我来说工作(就像 Aleksandr M 在上一段中写的那样):
<s:select listValue="%{getText(value)}" listKey="key" list="phoneTypes></s:select>
只有我创造
phoneTypes = new HashMap<String, String>()
phoneTypes.put("HOME", "HOME")
phoneTypes.put("WORK", "WORK")
etc..
在这种情况下,键被省略(您可以在此处编写任何内容)并在页面上显示(翻译)值。 此解决方案不适用于列表,仅适用于地图。
在从资源中检索消息之前,您没有切换 Struts2 中的区域设置。
getText()
是本地化方法,如果它使用默认文本提供程序作为默认行为,那么它会搜索区域设置特定的键。您可以从操作上下文或直接从 ActionSupport
操作获取 Struts2 使用的当前语言环境(还没有看到您有一个操作并且它扩展了它)。
通常切换区域设置是通过
i18n
拦截器完成的,您可以在其中将参数放入请求中 request_locale
。但是您可以通过更改操作上下文中的区域设置来切换它(确保您正在运行与当前相同的线程)。
ActionContext.getContext().setLocale(new Locale("es"));
您应该在执行任何
getText()
之前运行此代码以获取本地化消息。