【问题标题】:How to keep currency (keeping it localized) independent from system locale on android app?如何保持货币(保持本地化)独立于android应用程序的系统区域设置?
【发布时间】:2014-11-04 11:00:49
【问题描述】:

我一直在研究这个问题的解决方案,但找不到合适的解决方案。我得到的最接近的是来自stackoverflow 的this 条目。但由于这是 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());

此代码将添加用户根据偏好选择的系统区域设置的货币符号,而不是设备所在国家/地区的实际货币符号。

欢迎任何建议。提前致谢。

【问题讨论】:

    标签: android localization


    【解决方案1】:

    经过所有研究后,我决定在我在问题中提到的具体场景中使用 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());
    

    如果有人提出更好的解决方案,我会很高兴听到。 谢谢

    【讨论】:

    • 看起来这是用于此上下文的最佳方法。使用电话默认区域设置是不够的。例如,我找不到将它放在秘鲁鞋底的方法,因为西班牙语仅有的两种语言选择是美国(?)和西班牙。不过,我不确定如何处理平板电脑。
    【解决方案2】:

    指定所需的语言环境,例如此代码将语言环境强制为西班牙:

    priceFormat = NumberFormat.getInstance(new Locale("es", "ES");
    

    应该做你需要的。

    Locale.getDefault() 正在加载用户定义的语言环境

    【讨论】:

    • 这将解决我给出的具体示例中的问题。我想要实现的目标必须适用于任何国家(通用),而不仅仅是西班牙。因此,如果我使用此代码,首先我需要知道用户设备位于哪个国家/地区(这是实际问题)。这导致我基于 simCountryIso 或 networkCountryISO(来自 TelephonyManager)得到this 类型的答案,但这并不总是有效,所以我想知道是否有更好的方法来做到这一点。因为这是一个相当普遍的问题。还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多