我一直在研究这个问题的解决方案,但找不到合适的解决方案。我得到的最接近的作品是斯塔科弗弗洛的作品。但由于这是4年前提出的(虽然它可以帮助解决我的问题,但实际上不是我的问题),我会再次提出,看看现在是否有更好的解决方法。
上下文:我想在几个国家发布我的android应用程序。目前仅在西班牙提供。我已经阅读了所有关于本地化的android开发者文档。很明显,在向用户呈现代码时,所有关于代码的动态本地化信息都应该基于"系统区域设置"。
问题:当用户手动更改设置语言时,问题就来了,我想显示一个基于系统区域设置偏好的价格(由应用程序生成)。例如,假设我住在西班牙,我设置了我的设备语言&输入/语言为英语(美国)。当我这样做时,我的应用程序以美元($)显示价格,但我希望它继续显示欧元(€),因为我在西班牙。我该如何做到这一点?
这是根据系统区域设置向用户显示"本地化"价格的实际代码:
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());
此代码将添加用户根据偏好选择的系统区域设置的货币符号,而不是设备所在国家的实际货币符号。
欢迎任何建议。提前谢谢。
经过所有的研究,我决定使用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());
如果有人能想出一个更好的解决方案,我会很高兴听到。感谢
指定所需的区域设置,例如强制将区域设置为西班牙的代码:
priceFormat = NumberFormat.getInstance(new Locale("es", "ES");
应该做你需要做的事。
Locale.getDefault()正在加载用户定义的区域设置