JSTL i18n fmt属性设置

时间:2013-04-30 23:08:48

标签: jsp internationalization jstl resourcebundle

尝试使用JSTL拥有i18n应用程序,我有:

<li><a href="admin/insertEmployee.jsp"><fmt:message key="new"/></a></li>

但是在浏览器上它没有翻译通信密钥'new'并显示???new???而不是属性文件中定义的值作为HTML锚点(应该是'Novo',在pt_PT中)。

我在包裹下面有以下文件:

  • messages.properties
  • messages_en_US.properties
  • messages_pt_Pt.properties。

尝试在web.xml(pt_PT)中定义默认语言环境,但仍无法正常工作......

我是否需要定义<fmt:setLocale />
这是正确的URI:
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

web.xml

<context-param>
    <param-name>
        javax.servlet.jsp.jstl.fmt.localizationContext
    </param-name>
    <param-value>com.arthurportas-i18n.messages</param-value>
</context-param>
<context-param>
    <param-name>
        javax.servlet.jsp.jstl.fmt.fallbackLocale
    </param-name>
    <param-value>pt_PT</param-value>
</context-param>
<context-param>
    <param-name>
        javax.servlet.jsp.jstl.fmt.locale
    </param-name>
    <param-value>pt_PT</param-value>
</context-param>

2 个答案:

答案 0 :(得分:3)

  

@ arthur-portas:唯一奇怪的行为是通过点击链接选择英文翻译,需要双击!!忽略单击...这是浏览器缓存行为吗?

那是因为你在setBundle之后设置了语言环境。正确的顺序是:

<c:if test="${param['lang'] !=null}">
    <fmt:setLocale value="${param['lang']}" scope="session" />
</c:if>
<fmt:setBundle basename="com.arthurportas.i18n.Messages"/>

答案 1 :(得分:1)

解决: 我在web.xml中定义了默认语言环境pt_PT

<context-param>
    <param-name>
        javax.servlet.jsp.jstl.fmt.locale
    </param-name>
    <param-value>
        pt_PT
    </param-value>
</context-param>

和index.jsp内部,用于声明资源包和覆盖语言环境的代码,如果由url作为参数提供(example-&gt; /?lang = en_US)

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<fmt:setBundle basename="com.arthurportas.i18n.Messages"/>
<c:if test="${param['lang'] !=null}">
    <fmt:setLocale value="${param['lang']}" scope="session" />
</c:if>

使用scope =“session”,适用于所有jps。 更改语言的演示文稿链接(英语)

<a href="?lang=en_US"><img src="img/UKFlag_32_32.png"></img></a>

我在com.arthurportas.i18n包下有两个文件: Messages_pt_PT.properties和Messages_en_US。 在jsp文件中使用例如文本翻译文本:

<fmt:message key="employee"/>

只有奇怪的行为是通过点击链接选择英文翻译,需要双击!!忽略单击...这是浏览器缓存行为吗?