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
Вот скрипка