如何覆盖 Java 中的货币符号?

问题描述 投票:0回答:4

我正在尝试使用 Java 打印土耳其里拉(ISO 4217 货币代码 TRY)的价格。

当我做

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”?

java internationalization currency turkish
4个回答
7
投票

复活进一步参考:

您可以使用 DecimalFormatSymbols 更改货币以进行格式化:

Locale trLocale = new Locale("tr", "TR");
DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getCurrencyInstance(trLocale);
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(trLocale);
dfs.setCurrencySymbol("TL");
decimalFormat.setDecimalFormatSymbols(dfs);

或者您可以诉诸 SPI 并插入您的货币符号(也许通过创建您自己的国家/地区变体,如

new Locale("tr","TR","tl")
)。为此,您应该为
java.util.spi.CurrencyNameProvider
提供一个实现,并将其注册到 Java 扩展机制。查看 LocaleServiceProvider 文档.


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

所以也许自己写一些东西来将现有代码映射到过时的代码,并根据需要进行调整和测试。


2
投票

在 Java 7 中,您可以覆盖属性文件中的货币。如果您依赖 ISO-4217 符号,可以在那里指定/覆盖它。


0
投票

在等待 Java 的同时:

System.out.println(curr.getSymbol(trLocale).substring(1));
© www.soinside.com 2019 - 2024. All rights reserved.