我一直在研究这个问题的解决方案,但找不到合适的解决方案。我最接近的是来自stackoverflow的this条目。但是,自从4年前问过这个问题(虽然它可能有助于解决我的问题,但实际上并不是我的问题),我再次询问是否现在有更好的解决方法。
上下文 我想在几个国家发布我的Android应用程序。目前仅在西班牙有售。我已经阅读了所有Android开发人员关于本地化的文档。很明显,代码上的所有动态本地化信息都应该基于"系统区域设置"当它呈现给用户时。
问题: 当用户手动更改设置语言并且我想显示基于系统区域设置首选项的货币的价格(由应用程序生成)时出现问题。例如,假设我住在西班牙,我设置了我的设备Language&输入/语言到英语(美国)。当我这样做时,我的应用程序以美元($)显示价格,但我希望它能够继续显示欧元(€),因为我在西班牙。我该如何实现这一目标?
这是显示"本地化"的实际代码。根据系统区域设置向用户提供的价格:
Locale currentLocale = Locale.getDefault();
priceFormat = NumberFormat.getInstance(currentLocale);
localCurrency = Currency.getInstance(current);
//...
//doubleValueCost is independent from currency but the I want to add the proper currency symbol
costTextView.setText(priceFormat.format(doubleValueCost) + " " + localCurrency.getSymbol());
此代码将为用户在首选项上选择的系统区域设置添加货币符号,而不是设备所在国家/地区的实际货币符号。
欢迎任何建议。提前致谢。
答案 0 :(得分:3)
在所有的研究之后,我决定使用TelephonyManager simCountryIso在我在问题中提到的具体场景中本地化货币。不确定它是否是解决我问题的最佳解决方案,但却是我找到的最佳选择。这将是获得我需要的货币的代码:
String countryIso = telephonyManager.getSimCountryIso();
localCurrency = Currency.getInstance(new Locale(countryIso,countryIso));
//doubleValueCost is independent from currency but the I want to add the proper currency symbol ...
costTextView.setText(priceFormat.format(doubleValueCost) + " " + localCurrency.getSymbol());
如果有人想出更好的解决方案,我会很高兴听到。 感谢
答案 1 :(得分:0)
指定所需的语言环境,例如此代码强制语言环境为西班牙语:
priceFormat = NumberFormat.getInstance(new Locale("es", "ES");
应该做你需要的。
Locale.getDefault()正在加载用户定义的区域设置