用于国际化和本地化的JSTL资源包

Yud*_* Li 12 jsp localization jstl resourcebundle internationalization

我们有一个使用基本JSP/servlet的应用程序,当前英文版的所有文本都在JSP页面中进行了硬编码.我们正在考虑应用程序的国际化,因此我们需要某种方法将文本提取到属性文件中.

这是我到目前为止所做的:
1)创建一个名为的文件XXXXX-messages_en.properties,将键/值对添加到属性文件中,例如AAAAA = Hello World

2)将JSTL相关标签库加载到JSP页面中

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
Run Code Online (Sandbox Code Playgroud)

3)用之前的文本替换

<fmt:message key="AAAAA" bundle="${XXXXX}"/>
Run Code Online (Sandbox Code Playgroud)

4)将setBundle标记添加到JSP页面中:

<fmt:setBundle basename="XXXXX-messages" var="XXXXX"/>
Run Code Online (Sandbox Code Playgroud)

并重新启动服务器,一切都正确显示.

但是,关于JSTL国际化库使用的问题是:

问题1)似乎我必须在<fmt:setBundle>每个单页的JSP页面中添加标签,这有点难看,如果将来需要改变某些东西(名称改变?),这将使生活变得更加困难.

我想也许我可以创建一个单独的页面并将其放入<fmt:setBundle>其中,然后使用包含此页面<jsp:include>.或者我可以通过servlet过滤器注入它?我会说我对这两种选择都不太满意.

有没有推荐的方法来做到这一点?

问题2)如果没有匹配属性文件,如何指定默认语言?我已经在我的情况下进行了测试,如果我<fmt:setLocale>使用法语进入JSP页面,页面仍然可以正确加载.这是否意味着英文版本始终是默认版本,还是仅仅因为我的操作系统/浏览器是英文?

如果中国/日本用户打开我的页面并且我同时拥有英语和法语属性文件会发生什么?

Yud*_* Li 8

好的,我找到了解决自己问题的方法1.基本上我需要做的就是把它放到web.xml中:

<context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>XXXXX-messages</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

通过这样做,我可以在每个jsp页面中保存setBundle的标记.


Jas*_*ies 7

您可以使用后备区域设置来解决第二个问题:

如果未找到匹配项,则格式化操作将查找所谓的fallback-locale配置设置.配置设置是由应用程序的web.xml文件中的上下文参数或其中一个JSP作用域中的JSTL操作或Java代码设置的值.要在web.xml文件中设置回退区域设置,请包含以下元素:

<context-param>
  <param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name>
  <param-value>en</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

http://onjava.com/onjava/2002/09/11/jstl2.html