使用s:select标签在下拉菜单中输入i18n

时间:2013-08-23 15:55:40

标签: java jsp struts2 internationalization

我的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=homework=work等密钥位于.properties文件中我正致力于将此页面国际化,而我无法找到获取翻译的方法为了 下拉菜单中的值。

3 个答案:

答案 0 :(得分: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);

您也可以在getText标记的listValue属性中使用JSP调用<s:select>方法。

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

答案 1 :(得分:0)

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

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

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


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

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

答案 2 :(得分: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..

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