jQuery全球化。将货币单位作为C格式的参数传递

时间:2013-06-26 15:38:37

标签: javascript localization currency-formatting jquery-globalization

我正在建立一个处理货币的多语种网站。我希望能够根据所选语言显示正确的货币格式。服务器端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 $

因此格式为法语,但值为美元。我已经看了但是没有找到将货币符号作为参数传递。

2 个答案:

答案 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