我正在建立一个处理货币的多语种网站。我希望能够根据所选语言显示正确的货币格式。服务器端PHP的东西是轻而易举的。使用PHPs NumberFormatter和strftime的组合,我已经能够正确地格式化货币和日期。
但是要求客户端使用javascript进行相同程度的格式化。
我遇到过Globalization(以前的jQuery插件),看起来很有希望。
如果我想用美式英语显示美元价值,我可以这样做:
jQuery.preferCulture("en-US");
// Formatting price
var price = jQuery.format(3899.888, "c");
//Assigning stock price to the control
jQuery("#price").html(price);
这将输出:
$3,899.89
在做的时候:
jQuery.preferCulture("fr-FR");
// Formatting price
var price = jQuery.format(3899.888, "c");
//Assigning stock price to the control
jQuery("#price").html(price);
输出:
3 899,89 €
看起来很完美。但是,我需要输出多种货币。所以,如果我选择'fr-FR'作为我的首选文化,我怎么能输出一个像这样的美元价值:
3 899,89 $
因此格式为法语,但值为美元。我已经看了但是没有找到将货币符号作为参数传递。
答案 0 :(得分:2)
在Globalize中修改货币符号的only documented way是更改给定文化的numberFormat.currency.symbol
属性 - 在本例中为fr-FR
文化。这可以做你想要的,但它不是一个非常优雅的解决方案,你需要为每个语言环境手动构建一个正确符号表,并编写另一个方法来交换它们。 (nb可以使用不同的区域设置标识符将第三个参数传递给Globalize.format
,但这只是使用 区域设置的文化设置来格式化数字。)查看culture definition syntax ,没有规定使用给定的区域设置显示不同的货币。
如果您要查看其他地方,Dojo Toolkit中的dojo/currency模块确实可以完全满足您的需求,使用Unicode Common Locale Data Repository中的数据来确定如何在不同的区域设置中表示各种货币。因此,您可以将您的区域设置设置为fr
,写入currency.format(3899.888, { currency: "USD" })
,并以法语区域设置的正确格式输出美元货币。
答案 1 :(得分:2)
我遇到了同样的问题,最后我只是用我想要显示的符号替换输出上的默认货币符号。它有点原始,但它使用您想要的货币符号保持区域设置的格式正确。
function formatCurrency(value, format, symbol){
var formattedValue = Globalize.format(value, format);
if (typeof symbol === "string") {
formattedValue = formattedValue.replace(Globalize.culture().numberFormat.currency.symbol, symbol);
}
return formattedValue;
}
document.getElementById("price1").innerHTML = formatCurrency(123.34,"c"); //<-- $123.34
document.getElementById("price2").innerHTML = formatCurrency(123.34,"c","£"); //<-- £123.34
以下是fiddle