java - 使用 JSP 和 XML 编写消息

标签 java xml jsp localization

我有一个包含消息的 XML,例如:

<?xml version="1.0" ?>
<messages>
    <hello>Hi {1} welcome to {2}</hello>
</messages>

所以我想用一些 JSP 变量替换 {1} 和 {2} 并打印结果:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %>

/* set vars */
<c:set var="name" value="John Doe" />
<c:set var="location" value="Internet" />

/* import and parse xml */
<c:import url="messages.xml" var="messages" />
<x:parse xml="${messages}" var="xml" />

/* print message */
<x:out select="$xml/messages/hello" var="name" var="location"  />

最后一行的结果应该是:

Hi John Doe welcome to Internet

我正在努力让它工作,但我完全迷失了。你能帮我解决这个问题或者给我这个“技术”的名称以继续寻找信息吗?

谢谢!

最佳答案

此类任务通常称为“国际化”或“模板化”。

这是一种使用现有代码执行此操作的简单方法:

<c:set var="helloTemplate">
    <x:out select="$xml/messages/hello" />
</c:set>

<c:out value="<%= java.text.MessageFormat.format(helloTemplate, 
                                pageContext.getAttribute("name"), 
                                pageContext.getAttribute("location")) %>" />

使用 scriptlet (<%= .. %>)在 JSP 中并不是最好的处理方式,相反,您可以创建一个在内部使用 MessageFormat 的函数/标签。创建自定义标签的示例:https://sites.google.com/a/pintailconsultingllc.com/java/custom-jsp-tag-libraries

或者,如果您可以控制消息文件,则可以使用属性文件而不是 xml 格式(例如 messages.properties ),其中将包含:

hello=Hi {1} welcome to {2}

然后可以按如下方式使用:

<fmt:message key="hello">
    <fmt:param value="${name}" />
    <fmt:param value="${location}" />
</fmt:message> 

这通常被称为“国际化” - 更多信息:http://docs.oracle.com/cd/E19159-01/819-3669/bnaxu/index.html

关于java - 使用 JSP 和 XML 编写消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25327317/

相关文章:

java - 如何将 Intellij 14 中的模块添加到现有项目

android - 如何在我的应用程序中添加 android 菜单溢出图标

javascript - 有没有办法从后面调用 .jsp 中的函数?

java - 在 Toast 中使用字符串资源

java - gremlin 查询以检索在它们之间具有多条边的顶点

java - 如何在 if 语句中声明一个值? (在java中)

xml - 使用 xslt 向使用 xml 创建的 excel 文件添加样式

c# - 读取 XML 节点时出现问题

java - 如何防止有人从 JSP/Servlet 中的浏览器修改输入表单参数

java - 哪些类代表 : page, 请求、 session 和应用程序这四个不同的范围?