2009-05-21 2 views
9

Я пытаюсь распечатать цены в турецких Liras (код валюты ISO 4217 TRY) с Java.Как переопределить символы валюты в Java?

Когда я

Currency curr = Currency.getInstance("TRY"); 
Locale trLocale = new Locale("tr", "TR"); 
System.out.println(curr.getSymbol(trLocale)); 

выход: "НТЛ".

Однако символ валюты для турецкой лиры недавно изменился с «YTL» на «TL» (как видно на странице Википедии для турецкой лиры). Аналогичный результат дает форматирование с NumberFormat.

Я действительно не хочу писать еще один курс валюты, особенно если у Java есть один встроенный.

Есть ли способ переопределить символ валюты по умолчанию Java для TRY на «TL»?

+2

Это не сразу поможет, но сообщит об ошибке, и это, вероятно, будет исправлено в следующем обновлении Java. –

+1

не существует способа создать свою собственную упаковку для валюты. Валюта - это конечный класс, поэтому его нельзя даже продлить, чтобы переопределить getSymbol для вашего конкретного случая. Либо жить с YTL и сообщать об ошибке (и надеяться, что она исправлена ​​в следующем патче), либо реализовать собственное решение. –

ответ

2

В Java 7 вы можете override currencies в файле свойств. Если вы полагаетесь на символ ISO-4217, его можно указать/переопределить.

+1

Но этот файл свойств содержит только информацию, относящуюся к ISO 4217. И ISO 4217 не содержит символов валюты. – user110665

0

Для среднего времени, пока вы ждете на Java:

System.out.println(curr.getSymbol(trLocale).substring(1)); 
3

Занятно, согласно Википедии, код валюты «TRL» является устаревшим (старый код для турецкой лиры). Я не обновлен до последней версии JDK (на 1.5.0_10), но

Currency curr = Currency.getInstance("TRL");
Locale trLocale = new Locale("tr", "TR");
System.out.println(curr.getSymbol(trLocale));

Печать:

TL

Так что, возможно, написать что-то самостоятельно, чтобы отобразить существующие коды к устаревшим коды, а также при необходимости отрегулировать и проверить.

+0

Возможность использовать старый код валюты - это немного счастье, я полагаю. Хороший взлом! – extraneon

+0

Ну, они сбросили шесть нулей со старой валюты, поэтому разница на самом деле составляет миллион к одному ... будьте осторожны, что вы хотите! – vikingsteve

5

Resurrection для справок:

Вы можете использовать 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

Смежные вопросы