Magento 2 如何根据语言环境自定义货币符号和格式

Posted

技术标签:

【中文标题】Magento 2 如何根据语言环境自定义货币符号和格式【英文标题】:Magento 2 How to customize Currency symbol and format based on locale 【发布时间】:2016-09-08 07:17:32 【问题描述】:

我想以编程方式更改货币格式模式、货币符号和货币符号位置。我在文件夹 vendor\magento\zendframework1\library\Zend\Locale\Data 中找到了一些数据。

例如,如果我通过以下代码更改 fr_FR.xml 中的格式,它会反映在前端。

<numbers>
        <currencyFormats numberSystem="latn">
            <currencyFormatLength>
                <currencyFormat type="standard">
                    <pattern>¤ #,##0.00</pattern>
                </currencyFormat>
                <currencyFormat type="accounting">
                    <pattern>¤ #,##0.00;(¤ #,##0.00)</pattern>
                </currencyFormat>
            </currencyFormatLength>
            <unitPattern count="one">0 1</unitPattern>
            <unitPattern count="other">0 1</unitPattern>
        </currencyFormats>
        <currencies>
            <currency type="GBP">
                <displayName>livre sterling</displayName>
                <displayName count="one">livre sterling</displayName>
                <displayName count="other">livres sterling</displayName>
                <symbol>£</symbol>
            </currency>
        </currencies>
</numbers>

但我想知道如何覆盖默认的 fr_FR.xml (vendor\magento\zendframework1\library\Zend\Locale\Data\fr_FR.xml)

如果有人知道该怎么做,请告诉我。

【问题讨论】:

您想在哪里更改它们,整个网站还是仅在某些视图或模块中?以及针对什么,针对特定的语言环境? 非常感谢您的回复。我需要整个网站的特定语言环境 fr_FR。 查看这个答案magento.stackexchange.com/questions/61337/… 【参考方案1】:

可能不是一个完整的解决方案,但这一定是一个好的开始。 下面是代码流的顺序。

public function formatTxtmodule-directory/Model/Currency.php 。这个函数调用 toCurrency 反过来又调用到 public function toCurrency zendframework1/library/Zend/Currency.php

当您找到该函数时,您将看到 $options 数组变量,其中包含用于格式化价格值的所有必要信息。下面是 $options 的var_dump

array(12) 
    ["position"] => int(16)
    ["script"] => NULL
    ["format"] => NULL
    ["display"] => int(2)
    ["precision"] => int(2)
    ["name"] => string(9) "US Dollar"
    ["currency"] => string(3) "USD"
    ["symbol"] => string(1) "$"
    ["locale"] => string(5) "en_GB"
    ["value"] => int(0)
    ["service"] => NULL
    ["tag"] => string(11) "Zend_Locale"

因此,为了移动货币符号,您可以覆盖

DI.xml 中的public function formatPrecision

<preference for="Magento\Directory\Model\Currency" type="Yourpack\Custom\Model\Currency" />

并传递带有必要值的选项数组。

例如:$options['position'] = 16 会将货币符号移动到货币值的右侧(16.24$)

同样传递必要的数组选项来覆盖。

【讨论】:

非常感谢法郎。帮了我很多忙。如何使货币符号独立于语言环境而独一无二? 很好的参考资料,帮助我了解货币在 Magento 2 中的运作方式! @Franc 小数点分隔符怎么样?它没有返回 $options,知道吗?

以上是关于Magento 2 如何根据语言环境自定义货币符号和格式的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义格式(货币)应用于基于组合框选择的文本框?

Magento主题模块路径规则符号

php 删除十进制删除小数价格删除magento货币符号中的十进制价格编辑价格编辑货币编辑小数

用户当前语言环境的货币符号

语言环境在 iOS 模拟器中返回错误的货币符号

NumberFormat.getCurrencyInstance() 不返回语言环境中国和法国的货币符号 (jdk-1.8)