2

通貨を扱う多言語サイトを立ち上げています。選択した言語に基づいて正しい通貨形式を表示できるようにしたいと考えています。サーバー側の PHP の処理は簡単ではありません。PHP の NumberFormatter と strftime の組み合わせを使用して、通貨と日付を正しくフォーマットすることができました。

ただし、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 $

形式はフランス語ですが、値は米ドルです。通貨記号を引数として渡す方法を調べましたが、とにかく見つかりませんでした。

4

2 に答える 2

2

Globalize で通貨記号を変更する文書化された唯一の方法numberFormat.currency.symbolは、特定のカルチャ (この場合はカルチャ) のプロパティを変更することfr-FRです。これで目的は達成できますが、あまり洗練された解決策ではありません。ロケールごとに正しいシンボルのテーブルを手動で作成し、別のメソッドを記述してそれらを交換する必要があります。(nb 別のロケール識別子を使用して に 3 番目の引数を渡すことは可能ですが、これはそのGlobalize.formatロケールのカルチャ設定を使用して数値をフォーマットするだけです。)カルチャ定義構文を見ると、特定のロケールを使用して異なる通貨を表示するための規定はまったくありません。 .

他の場所を見ると、Dojo Toolkit のdojo/currencyモジュールは、Unicode Common Locale Data Repositoryのデータを使用して、さまざまなロケールでさまざまな通貨を表す方法を決定し、必要なことを正確に実行します。したがって、ロケールをfr, writecurrency.format(3899.888, { currency: "USD" })に設定すると、通貨が米ドルで出力され、フランス語ロケールの正しい形式で出力されます。

于 2013-07-01T04:15:48.380 に答える
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

ここにフィドルがあります

于 2014-07-10T12:35:39.600 に答える