Как переопределить символы валюты в Java?
Я пытаюсь напечатать цены в турецких лирах (ISO 4217, код валюты TRY) с помощью Java.
Когда я делаю
Currency curr = Currency.getInstance("TRY");
Locale trLocale = new Locale("tr", "TR");
System.out.println(curr.getSymbol(trLocale));
вывод: "YTL".
Однако символ валюты для турецкой лиры недавно изменился с "YTL" на "TL" (как можно увидеть на странице Википедии для турецкой лиры). Форматирование с NumberFormat
дает аналогичный результат.
Я действительно не хочу писать еще один класс Currency, особенно когда в Java есть один встроенный.
Есть ли способ переопределить символ валюты по умолчанию Java для TRY на "TL"?
4 ответа
Воскресение для дальнейшего использования:
Вы можете использовать DecimalFormatSymbols, чтобы изменить валюту для форматирования
Locale trLocale = new Locale("tr", "TR");
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getCurrencyInstance(trLocale);
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(trLocale);
dfs.setCurrencySymbol("TL");
decimalFormat.setDecimalFormatSymbols(dfs);
Или вы можете обратиться к SPI и добавить свой символ валюты (возможно, создав собственный вариант страны, например new Locale("tr","TR","try")
). Для этого вы должны предоставить реализацию java.util.spi.CurrencyNameProvider
и зарегистрируйте его с помощью механизма расширения Java. Проверьте http://java.sun.com/javase/6/docs/api/java/util/spi/LocaleServiceProvider.html
Забавно, но, согласно Википедии, код валюты "TRL" устарел (старый код турецкой лиры). Я не обновил до последней версии JDK, (на 1.5.0_10), но
Currency curr = Currency.getInstance("TRL");
Locale trLocale = new Locale("tr", "TR");
System.out.println(curr.getSymbol(trLocale));
Печать:
TL
Так что, возможно, напишите что-нибудь свое, чтобы сопоставить существующие коды с устаревшими кодами, а также настроить и протестировать по мере необходимости.
В Java 7 вы можете переопределить валюты в файле свойств. Если вы полагаетесь на символ ISO-4217, он может быть указан / переопределен там.
Пока вы ждете на Java:
System.out.println(curr.getSymbol(trLocale).substring(1));