java - 以一种语言格式化货币,与国家无关

标签 java internationalization currency

我想用 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 区域设置意味着界面和货币应以荷兰语显示,但它仅显示德国可用的支付方式。

最佳答案

我不太确定你在做什么,但看起来你有比方说网络应用程序,你需要关于语言和国家的单独信息。好的,让我澄清一下:

  1. 要正确设置支付金额的格式,您实际上需要语言和国家/地区,这意味着语言环境,因为这是标识适当格式的因素。
  2. 要提供正确的支付系统,您只需要当前所在国家/地区的用户。
  3. 要显示适当的翻译,您只需要语言(至少您是这么想的)。

现在,关于如何做到这一点。最简单的方法是建立某种用户配置文件,让用户决定什么是格式化的最佳语言环境、什么是翻译以及他想使用什么支付系统。如果您正在开发某种基于网络的游戏,您实际上可以从 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/

相关文章:

javascript - 如何将数字格式化为货币字符串

javascript - Selenium: "is not clickable at point"如何等待所有脚本加载完毕

java - JPA @交易

Java Swing 使线程等待一次

jsf-2 - JSF 2.0 - 使用 h :commandLink - message bundle not in synch 切换语言环境

iphone - 使用 NSNumberFormatter 从国际货币字符串中获取十进制值

javascript - 用于验证数据并发布到 mysql 数据库的简单表单

Angular 6 混合 i18n JIT 和 AOT

python - 国际化 - Python MySQLDb 和 ISO-8859-7

python - 奇怪的 'Currency Rates source not ready' forex_python错误