使用带参数的EL

时间:2014-04-23 19:24:06

标签: java jsp internationalization el

我们希望外化我们的JSP,目前包含以下内容:

<c:when test="${productObject.was}"><span>Was ${price} - now ${salePrice}</span><br /></c:when>

我们已经有了一个可以用于此目的的Java函数(lm.getString) - 它接受英文字符串(包括参数标签),替换变量的散列图和语言,例如

wasPriceString = "Was <price> - now <salePrice>";
lang = "ESP";
HashMap hm = new HashMap();
hm.put("salePrice", price);
hm.put("price", regPrice);
wasPriceString = lm.getString(wasPriceString, hm, lang);

并返回已翻译的字符串,并插入参数,例如“17.99美元 - 现在11.50美元”(英文)或“时代17.99美元 - ahora 11.50美元”(西班牙文)。

我们在Java代码中使用它,但现在我也想改变JSP。我的问题是,这可以在JSP本身(传递参数)中轻松完成吗?如果没有,最好的选择是什么?我宁愿不简单地翻译输出文本,因为那只是hacky,并导致这种邪恶:

<c:when test="${productObject.was}"><span><fmt:message key="textWas_ui"/> ${price} - <fmt:message key="textNow_lc"/> ${salePrice}</span><br /></c:when>

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:2)

是的,您错过了<fmt:message>接受参数并在幕后使用标准MessageFormat类的事实。所以你只需要

<fmt:message key="wasVsNow">
    <fmt:param value="${price}"/>
    <fmt:param value="${salePrice}"/>
</fmt:message>

在JSP中,以及包含国际化消息的属性文件中:

wasVsNow=Was {0} - now {1}