我想用 Java 以用户的语言格式化金额(以欧元为单位),而不管用户位于哪个国家/地区:
final NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(loc);
currencyFormat.setCurrency(EUR);
currencyFormat.format(new BigDecimal("1.99"));
但是,不同输入语言环境 (loc
) 的输出如下:
- nl_NL:
1.99 欧元
- nl_BE:
1,99 €
- nl_DE:
1.99 欧元
- nl(
新语言环境("nl")
):1.99 欧元
所以我有两个问题
- 输出确实取决于国家,而不仅仅是语言(如前两个节目),但国家对我来说不重要。例如,在非洲旅行时,我的游戏可以用荷兰语玩。
- 当使用没有国家或国家与语言不匹配的语言环境时(第二个 2),不会打印货币符号。
请注意,我正在为游戏开发支付界面,因此 nl_DE 区域设置意味着界面和货币应以荷兰语显示,但它仅显示德国可用的支付方式。
最佳答案
我不太确定你在做什么,但看起来你有比方说网络应用程序,你需要关于语言和国家的单独信息。好的,让我澄清一下:
- 要正确设置支付金额的格式,您实际上需要语言和国家/地区,这意味着语言环境,因为这是标识适当格式的因素。
- 要提供正确的支付系统,您只需要当前所在国家/地区的用户。
- 要显示适当的翻译,您只需要语言(至少您是这么想的)。
现在,关于如何做到这一点。最简单的方法是建立某种用户配置文件,让用户决定什么是格式化的最佳语言环境、什么是翻译以及他想使用什么支付系统。如果您正在开发某种基于网络的游戏,您实际上可以从 HTTP Accept-Language header 中读取区域设置(您实际上需要设置良好的默认值,这是找到此类信息的最佳位置)。要从国家/地区“分离”语言,您只需从区域设置中读取语言和国家/地区代码,这很简单:
Locale locale = request.getLocale(); // the most acceptable Locale using Servlet API
String language = locale.getLanguage(); // gets language code
String country = locale.getCountry(); // gets country code
现在,语言通常不足以从资源包中读取文本,因为有不同的语言环境(即 zh_CN、zh_TW),实际语言因国家/地区而异(在上面的示例中,中国大陆使用简体中文作为以及新加坡,而所有其他讲华语的世界都使用繁体中文)。因此,您仍然需要实际的语言环境。
国家代码将为您提供选定的国家/地区,但不是当前用户所在的国家/地区。它可能是好是坏,具体取决于 View 。如果您需要确保付款发生在用户所在的国家/地区,恐怕您需要使用地理定位,并承担所有后果......
这是否回答了您的问题,或者我误解了什么...?
关于java - 以一种语言格式化货币,与国家无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7571164/