根据区域设置呈现货币符号

时间:2011-11-29 15:11:37

标签: jsp internationalization jstl locale currency

我有一个带有一些货币金额的JSP。我希望人们从美国查看同一页面,看到$符号而不是£。 (暂时忘记价值也应该转换)。

我正在使用此JSTL解决方案来设置区域设置

<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:formatNumber type="currency" value="${myOutputAmount}" />

但也有一些输入字段在输入框之前有自己的£,例如:

£<input type="text" id="myInputAmount"/>

如何使用该区域设置显示相关的货币符号而不是£?

我搜索并找到了适用于iPhone,PHP,Android,C#和Java的解决方案。我可以在我的JSP中实现一个Java解决方案,但是JSTL的解决方案非常简洁,我确信必须有一个简单的方法,然后利用它可行。

1 个答案:

答案 0 :(得分:1)

很遗憾,没有JSTL标签。

在普通Java中,您可以通过Currency#getSymbol()获取它,如下所示:

String currencySymbol = Currency.getInstance(new Locale(language)).getSymbol();
// ...

你可以将它包装在Javabean getter,EL函数或者( shudder )scriptlet中。您可以找到如何在this answer底部附近创建EL函数的具体示例。


更新:您可以使用此“黑客”从<fmt:formatNumber>中获取货币符号:

<fmt:formatNumber var="currencyExample" value="${0}" type="currency" maxFractionDigits="0" />
<c:set var="currencySymbol" value="${fn:replace(currencyExample, '0', '')}" />
...
${currencySymbol}<input type="text" name="amount" />