i18n 在下拉菜单上使用 s:select 标签[重复]

问题描述 投票:0回答:3
java jsp struts2 internationalization ognl
3个回答
1
投票

要更改 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)}"/>

0
投票

对我来说工作(就像 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..

在这种情况下,键被省略(您可以在此处编写任何内容)并在页面上显示(翻译)值。 此解决方案不适用于列表,仅适用于地图。


0
投票

在从资源中检索消息之前,您没有切换 Struts2 中的区域设置。

getText()
是本地化方法,如果它使用默认文本提供程序作为默认行为,那么它会搜索区域设置特定的键。您可以从操作上下文或直接从
ActionSupport
操作获取 Struts2 使用的当前语言环境(还没有看到您有一个操作并且它扩展了它)。

通常切换区域设置是通过

i18n
拦截器完成的,您可以在其中将参数放入请求中
request_locale
。但是您可以通过更改操作上下文中的区域设置来切换它(确保您正在运行与当前相同的线程)。


ActionContext.getContext().setLocale(new Locale("es"));

您应该在执行任何

getText()
之前运行此代码以获取本地化消息。

© www.soinside.com 2019 - 2024. All rights reserved.