答案#1:
如果您打算将 fmt:message 与 fmt:setBundle 和 fmt:setLocale 一起使用,您将需要 fmt 标签库。这很明显,我确信。但是,此外,如果您有一个 jsp 文件,其中包含另一个 jsp 文件,使用 jsp:includes 标记,并且包含的文件是包含 fmt 标记的文件,则 fmt 标记库进入包含的文件,而不是在包装文件中。
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
答案#2:
我无法使以下工作。 Eclipse 说 fmt:setBundle 标记必须为空。但是,我确实在网络上看到了将 fmt:message 标记嵌套在打开和关闭 fmt:setBundle 标记中的示例。
<fmt:setBundle basename="message">
<fmt:message key="name"/>
</fmt:setBundle>
见:https://www.baeldung.com/jstl
我能够得到以下工作。
<fmt:setLocale value="en_US" />
<fmt:setBundle basename="com.studypartner.properties.message" var="lang"/> // approach #1
<h1><fmt:message key="name" bundle="${lang}" /></h1>
<fmt:setBundle basename="message" var="lang"/> // approach #2
<h1><fmt:message key="name" bundle="${lang}" /></h1>
要使此代码 i18n,您可以从 language_COUNTRY 代码列表中将语言环境设置为您想要的任何内容,如果您有匹配的属性文件,上面的代码会将键“name”的值打印到页面上。例如,我创建了一个名为“message_en_US.properties”的属性文件。由于我将语言环境设置为“en_US”,并且基本名称的结尾是“message”,因此将找到我拥有的属性文件以及该文件中与 fmt:message 标记匹配的键“name”,将最终出现在上面的标签中。上面标签中关于“lang”的那部分似乎只是将捆绑包链接到消息所必需的。
见:https://www.tutorialspoint.com/jsp/jstl_format_message_tag.htm
以下是语言和国家/地区代码列表:
https://docs.oracle.com/cd/E13214_01/wli/docs92/xref/xqisocodes.html
答案#3:
好的,再次查看答案 #2 中“方法 #1”和“方法 #2”的代码。为什么我重复了?我想证明这两种方法都行得通。似乎将属性文件放在正确的位置很重要。但是,在 Maven Spring 3 Java Web 项目中,您可以将它定位在一些令人惊讶的位置,并且它适用于其中任何一个位置。看看下面链接中的项目设置:
project setup
首先,如果您没有 message_en_US.properties 文件,但您有 message.properties 文件,则 fmt:setBundle 标记仍然有效。此外,您可以将属性文件放在 3 个不同的位置,它仍然可以工作。
a) src/main/java > com.studypartner.properties
b) src/main/resources > com > studypartner > 属性
c) src/main/资源
“a”和“b”适用于
“c”适用于
当然,您可以将“com.studypartner.properties”替换为您自己的包名称(a、b)或嵌套文件夹的名称(c)。
基本上,当他们说属性文件必须在您的“类路径”上时,这就是他们的意思。