2

我正在设置一个处理货币的多语种网站。我希望能够根据所选语言显示正确的货币格式。服务器端PHP的东西是一个轻而易举的事情。使用PHP的组合NumberFormatter和strftime我已经能够正确地格式化货币和日期。jQuery全球化。通过货币单位作为C格式的参数

然而,要求客户端使用JavaScript完成相同程度的格式。

我遇到过全球化(前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

要修改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" }),并且它将以法语区域设置的正确格式输出USD货币。

+0

感谢您的反馈意见,不是我想听到的,但非常详细和翔实没有少。 +1用于指向Dojo解决方案。 –

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