jsp - fmt :message prints key with question marks like so "???login.label.username???"

标签 jsp localization jstl

我正在尝试使用基于 How to internationalize a Java web application? 的 JSTL 1.2 来国际化我的网站.这是 JSP 文件的开头:

<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" />
<fmt:setLocale value="${language}" />
<fmt:setBundle basename="com.bundle.test" />
<html lang="${language}">

这是test.properties文件:
login.label.username = Username
login.label.password = Password
login.button.submit = Sign in
login.label.direction = rlt

在正文中,我包含了以下几行:
<label for="username"><fmt:message key="login.label.username" /></label>

但是当我在浏览器中打开 JSP 页面时,它输出如下:

???login.label.username???



我希望它输出值“用户名”。

这是怎么引起的,我该如何解决?

最佳答案

格式为 ???key??? 的消息表示找不到与 key 关联的消息。这可能意味着您输入了 key ,或者该 key 在包文件中不存在,甚至整个包文件作为运行时类路径中的资源不存在。

鉴于 key 看起来不错,并且存在于包文件中,这只能意味着 webapp 找不到包文件作为类路径资源。

鉴于您正在使用 Maven,您应该确保已将它们放在 /src/main/resources 中。文件夹。在您的特定情况下,包名称为 com.bundle.test ,你应该有一个 /src/main/resources/com/bundle/test.properties文件就在那里。

如果这仍然不起作用,那么好吧,您的构建可能很脏或损坏了。清洁和重建是肯定的。然后使用一些 ZIP 工具提取 Maven 生成的 WAR 文件并浏览其内容。它最终应该在 /WEB-INF/classes 结束文件夹如 /WEB-INF/classes/com/bundle/test.properties .

关于jsp - fmt :message prints key with question marks like so "???login.label.username???",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30617950/

相关文章:

java - 如何在 JSP 中将 Java Date 转换为 ReadableInstant for Joda Time?

jsp - 如何将对象传递给 View Spring MVC3

c# - IViewLocalizer 返回错误的语言

java - 阅读除英语以外其他语言的短信

java - 无法使用 JSTL 调用参数化函数

java - 我应该用什么代替jsp :useBean?

java - Glassfish 服务器欢迎文件不起作用?

java - 如何将 JAXBelement 存储为字符串?

swift - 本地化 - "error: read failed: The data couldn’ 无法读取,因为它的格式不正确”

java - 远程 Tomcat 服务器上的 JSTL 破坏了 webapp