3

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

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

但是在浏览器上,它不会翻译对应的键“new”,而是显示???new???而不是属性文件中定义的值作为 HTML 锚(应该是 'Novo',在 pt_PT 中)。

我在一个包下有以下文件:

  • 消息属性
  • 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>
4

2 回答 2

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"/>
于 2013-07-30T12:49:08.033 回答
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-> /?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"/>

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

于 2013-05-01T13:01:08.543 回答