Получить символ валюты aka localeconv () в ColdFusion? - PullRequest
3 голосов
/ 27 января 2012

Я делаю некоторую работу с JavaScript внутри корзины покупок ColdFusion, и мне нужно иметь возможность отформатировать некоторые числа в js, которые будут имитировать LScurrencyFormat () в CF.

В настоящее время мы берем первый (слева, 1) символ отформатированной строки, но это не работает для валют, таких как иена или евро, которые следуют после числа, не говоря уже о любых символах валюты из нескольких символов.

Что мне нужно найти, исходя из текущей локали CF, так это

  • символ валюты

  • десятичный разделитель (,или.)

  • в начале или в конце (до или после числа)

Оттуда я могу запустить свое собственное форматирование js, чтобы сделать отформатированныйчисла выходят, как и ожидалось, на странице. В php мы можем использовать localeconv (), чтобы получить эти значения ... как я могу найти их в CF?

Ответы [ 2 ]

5 голосов
/ 27 января 2012

Мне не известны никакие встроенные функции.Тем не менее, вы можете получить первые два элемента из 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>
1 голос
/ 30 января 2012

getLocale () возвращает старые «имена» локали в стиле cf5, но только для тех локалей, которые поддерживаются cf5. если вы выгрузите поддерживаемые локали (Server.Coldfusion.SupportedLocales), вы увидите тупые имена локали в старом стиле cf5, а также основные идентификаторы локали java (т. е. «Chinese (China)» и «zh_CN»). если ваша локаль не была одной из поддерживаемых локалей cf5, вы должны увидеть основной идентификатор локали Java (т. е. th_TH для тайского, таиландского). см

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

В качестве небольшой поправки к ответу Ли вы также должны быть обеспокоены цифрами дроби валюты / локали. например, в обычной практике вы не можете иметь часть иены (то есть 1.1 не совсем кошерно). Вы можете получить эту информацию из метода getDefaultFractionDigits () класса Currency:

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