jQuery Глобализация. Передать единицу валюты в качестве аргумента для формата C

Я настраиваю многоязычный сайт, который имеет дело с валютами. Я хочу иметь возможность отображать правильные форматы валюты на основе выбранного языка. 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 $

так что формат французский, а значение - американский доллар. Я посмотрел, но не нашел, чтобы передать символ валюты в качестве аргумента.

2 ответа

Решение

Единственный документированный способ изменить символ валюты в Globalize - это изменить numberFormat.currency.symbol свойство данной культуры - в этом случае fr-FR культура. Это будет делать то, что вы хотите, но это не очень элегантное решение, и вам нужно будет вручную составить таблицу правильных символов для каждой локали и написать другой метод для их замены. (nb Можно передать третий аргумент Globalize.format с другим идентификатором локали, но это просто форматирует число, используя культурные настройки этой локали.) С учетом синтаксиса определения культуры просто нет положения для отображения разных валют с использованием данной локали.

Если вы посмотрите куда-то еще, модуль dojo / currency в Dojo Toolkit делает именно то, что вам нужно, используя данные из хранилища данных Unicode Common Locale, чтобы определить, как представлять разные валюты в разных локалях. Таким образом, вы можете установить свой язык на fr, записывать currency.format(3899.888, { currency: "USD" }), и он выведет валюту в долларах США в правильном формате для французского языка.

У меня была та же самая проблема, в конце я просто заменил символ валюты по умолчанию на выходе символом, который я хотел отобразить. Это немного примитивно, но сохраняет правильное форматирование для локали с нужным вам символом валюты.

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

Вот скрипка

Другие вопросы по тегам