在ColdFusion中获取货币符号aka localeconv()?

m_e*_*sta 3 java coldfusion numbers currency string-formatting

我在ColdFusion购物车里面做了一些javascript工作,我需要能够在js中格式化一些数字,这些数字将模仿CF中的LScurrencyFormat().

目前我们正在使用格式化字符串的第一个(左,1)字符,但这对于数字之后的日元或欧元等货币不起作用,更不用说任何多个字符货币符号.

基于当前的CF语言环境,我需要找到的是

  • 货币符号

  • 十进制分隔符(,或.)

  • 领先或尾随(数字之前或之后)

从那里我可以运行我自己的js格式,使格式化的数字在页面上按预期出现.在PHP我们可以使用localeconv()来获取这些值...我怎么能在CF中找到它们?

Lei*_*igh 5

我不知道任何内置函数.但是,您可以从java获取前两项.至于第三,我看到的最接近的建议是解析局部号码模式和检测货币的位置登录即\ u00A4.注意:它只是一个掩码占位符.它是一样的,如"$"或"£"实际的货币符号.

编辑: 正如评论中所讨论的那样,getLocale()返回一些用户友好的名称,遗憾的是它与java的不完全对应.获取当前java语言环境对象的最简单方法request是使用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>
Run Code Online (Sandbox Code Playgroud)