如何在android应用程序上保持货币(保持本地化)独立于系统区域设置



我一直在研究这个问题的解决方案,但找不到合适的解决方案。我得到的最接近的作品是斯塔科弗弗洛的作品。但由于这是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()正在加载用户定义的区域设置

最新更新