我用谷歌搜索了以下问题,但我找不到答案。它们是相互关联的,所以我将它们放在一个帖子中。我是一名Java后端开发人员,使用Eclipse IDE,在Maven Spring4Java项目中使用JSTL fmt:message标记。
问题#1:
如果你有一个jsp文件,其中包含另一个jsp文件,那么fmt标记库放在哪里呢?
问题#2:
fmt:setBundle标记可以有一个嵌套的fmt:message标记吗?
问题#3:
message.properties文件必须放在哪里才能与fmt:setBundle标记一起使用?
发布于 2018-09-20 04:47:42
答案#1:
如果要将fmt:message与fmt:setBundle和fmt:setLocale一起使用,则需要fmt标记库。我相信这是显而易见的。但是,另外,如果您有一个jsp文件,其中包含另一个使用jsp:includes标记的jsp文件,并且包含的文件是包含fmt标记的文件,那么fmt标记库将进入包含的文件,而不是包装文件。
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
答案#2:
我无法让下面的代码正常工作。Eclipse说fmt:setBundle标记必须为空。但是,我确实在web上看到了一些示例,它们将fmt:message标记嵌套在open和close 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 Spring3Java web项目中,您可以将其放置在一些令人惊讶的位置,并且它将适用于其中任何一个位置。请查看以下链接中的项目设置:
首先,如果您没有message_en_US.properties文件,但是有一个message.properties文件,那么fmt:setBundle标记仍然有效。同样,你可以把你的属性文件放在3个不同的地方,它仍然可以工作。
a) src/main/java > com.studypartner.properties
b) src/main/resources > com > studypartner > properties
c) src/main/resources
"a“和"b”适用于
"c“适用于
当然,您可以将"com.studypartner.properties“替换为您自己的包名(a,b)或嵌套文件夹的名称(c)。
基本上,当他们说属性文件必须在您的“类路径”上时,这就是他们的意思。
https://stackoverflow.com/questions/52133594
复制相似问题