Как переопределить символы валюты в 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));
Другие вопросы по тегам