3

我的 JSP 页面中有一个下拉菜单,它是用<s:select>标签实现的,它是

<s:select name="priorToApplyingInfo.userProfile.phoneNumbers[0].type"
 listKey="key" listValue="value" list="phoneTypes" headerKey="0" headerValue=""/>

现在下拉菜单中的值来自phonetypes作为文件实现HashMap的列表.java

phoneTypes = new LinkedHashMap<Integer, String>();
phoneTypes.put(new Integer(1), getText("HOME"));
// Phone ContactBook category for the business phone
phoneTypes.put(new Integer(DAOHelperFactory.OWNER_PROFILE_PHONE_CATEGORY), getText("WORK"));
phoneTypes.put(new Integer(3), getText("MOBILE"));
phoneTypes.put(new Integer(DAOHelperFactory.OWNER_PROFILE_FAX_CATEGORY), getText("FAX"));
phoneTypes.put(new Integer(5), getText("OTHER"));

preferredContact = new ArrayList<String>();
preferredContact.add(getText("HOME"));
preferredContact.add(getText("WORK"));
preferredContact.add(getText("MOBILE"));
preferredContact.add(getText("FAX"));
preferredContact.add(getText("EMAIL"));
preferredContact.add(getText("OTHER"));

bestContactTime = new ArrayList<String>();
bestContactTime.add(getText("AFTERNOON"));
bestContactTime.add(getText("EVENING"));
bestContactTime.add(getText("MORNING"));

home=home,work=work等键位于我正在处理的.properties文件中,我正在处理此页面的国际化,但我无法找到一种方法来获取下拉菜单中值的翻译。

4

3 回答 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);

您也可以在标签的属性中调用getTextJSP 中的方法。listValue<s:select>

<s:select name="priorToApplyingInfo.userProfile.phoneNumbers[0].type"
 list="phoneTypes" headerKey="0" headerValue=""
 listKey="key" listValue="%{getText(value)}"/>
于 2013-08-23T17:09:32.197 回答
0

它表明您在从资源中检索消息之前没有在 Struts2 中切换语言环境。

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

通常切换语言环境是通过i18n将参数放入 request 的拦截器完成的request_locale。但是您可以通过更改操作上下文中的语言环境来切换它(确保您正在运行与当前线程相同的线程)。


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

您应该在getText()执行任何代码之前运行此代码以获取本地化消息。

于 2013-08-24T08:58:30.693 回答
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..

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

于 2016-01-13T19:45:01.470 回答