2012-01-26 14 views
3

私はColdFusionショッピングカートの中でいくつかのjavascriptをやっていますが、CFでLScurrencyFormat()を模倣するjsのいくつかの数値をフォーマットできる必要があります。ColdFusionで通貨記号aka localeconv()を取得しますか?

現在、書式設定された文字列の最初の(左、1)文字を使用していますが、複数の文字通貨記号はもちろんのこと、数字の後ろにある円やユーロなどの通貨では機能しません。

私は、現在のCFのロケールに基づいて、検索する必要がある何を、

  • 通貨記号

  • 小数点である(または)先頭または末尾

  • (前か番号の後に)

そこから私は自分自身を実行することができますjsのフォーマットは、フォーマットされた数値をpage.In PHPで私たちはこれらの値を取得するlocaleconv()を使用することができます期待どおりに出てくる...どのようにCFで見つけることができますか?

+1

ほとんどのオンラインショップで対処し、ユーザーがchosesがどんな支払いサービスまでの他の通貨への変換を残して:あなたは()メソッドCurrencyクラスのgetDefaultFractionDigitsからその情報を得ることができます。訪問者は、自分が所在する地理的位置の通貨や慣習を使用することを望んでいない可能性があるので、そのことを推測しないでください。サイトで使用されている通貨と規約を明確にし、残りの部分を訪問者に任せてください。 – RobG

+0

Rob - ありがとうございますが、私たちはすでにこの特定のアプリでその時点を過ぎています。これらの特定の空白を入力するだけです。このため –

答えて

5

私は組み込み関数について認識していません。ただし、javaから最初の2つの項目を取得できます。私が見た最も近い提案は、localized number patternparseにあり、の符号、つまり\ u00A4の位置を検出します。注:これは単なるマスクプレースホルダです。 ではなく、 "$"や "£"のような実際の通貨記号と同じです。

編集:コメントで述べたように 、のgetLocale()は残念ながらかなりのjavaのと整列しない一部のユーザーフレンドリ名を返します。現在のrequestのJavaロケールオブジェクトを取得する最も簡単な方法は、getPageContext()。getResponse()。getLocale()を使用することです。

<cfscript> 
    // Get the current locale as a java object 
    javaLocale = getPageContext().getResponse().getLocale(); 

    // get numeric settings for that locale 
    currency = createObject("java", "java.text.DecimalFormat").getCurrencyInstance(javaLocale); 
    symbols = currency.getDecimalFormatSymbols(); 

    // 164 => decimal code point for currency sign 
    currencyPattern = currency.toLocalizedPattern(); 
    result.hasTrailingCurrencySymbol = currencyPattern.indexOf(javacast("int", 164)) > 0; 
    result.currencySymbol = symbols.getCurrencySymbol(); 
    result.decimalSeparator= symbols.getDecimalSeparator(); 

    WriteDump(result); 
</cfscript> 
+0

おかげ - DecimalFormatSymbolsのを使用して、私はいくつか残された問題で、ある程度の必要な値を解析することができる午前: - ロケールの多くは、通貨記号 として奇妙な記号「ユーロ」を返す - JavaロケールをコードはColdFusionと同じではなく、CFに存在する多くのロケールが必ずしもJavaで利用可能であるとは限りません これは私を近づけてしまいます。 また、Javaで現在のロケールコードを取得するのに苦労しています。 (つまり、JavaのCFのGetLocale() - おそらく構文エラーですが、適切な出力を見つけることができません。 –

+0

getDefault()。getLanguage()(またはgetDefault()の下の他のメソッド)を使用することができます。現在のserver_default_ロケールを返しますが、アプリケーションの指定されたロケールがどこにあるのかわかりません。CFの#getLocale()#を使用すると、結果はJavaのロケールコードとは異なる形式と構文になります。 –

+0

現在の 'request'のロケールにアクセスする唯一の方法は、getLocale()を使用する方法だと思います。 Javaロケール名とはまったく一致していない文字列ですが、なぜそうするのかわかりませんが、もっと単純なオプションがあるかもしれませんが、これらの値をISOの国/言語コードにマップする構造を作ることができます。これらのコードを表すLocaleオブジェクト。次にルックアップを実行します。 *奇妙な通貨記号*は通貨記号ではありません。実際のシンボルが表示される場所のプレースホルダです。 – Leigh

1

のgetLocale()は旧CF5スタイルロケール「名前」だけCF5でサポートされているこれらのロケールのを返します。サポートされているロケール(Server.Coldfusion.SupportedLocales)をダンプすると、古くなった古いcf5スタイルのロケール名と、コアのJavaロケールID(「中国語(中国)」と「zh_CN」の両方)が表示されます。あなたのロケールがcf5でサポートされているロケールでない場合は、コアのJavaロケールID(thai、thailandの場合はth_TH)が表示されます。リーの答えに小さな微調整として

http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=82474

を参照してください、あなたはまた、通貨/ロケールの小数部の桁数を考慮しなければなりません。例えば、通常の練習では、円の一部を持つことはできません(つまり、1.1はかなり正式なものではありません)。唯一の通貨で

result.fractionDigits=currency.getDefaultFractionDigits(); 
+0

ああ、それは奇妙な "名前"を説明します。それはプリjavaに起こった。 +1、小数点についての良い点。 – Leigh

関連する問題