我想以编程方式更改货币格式模式,货币符号和货币符号位置。我在文件夹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)
请让我知道是否有人知道该怎么做。
回答:
可能不是一个完整的解决方案,但这必须是一个好的开始。下面是代码流的顺序。
public function formatTxt
在module-directory/Model/Currency.php
。该函数调用toCurrency,后者依次调用public function toCurrency
上zendframework1/library/Zend/Currency.php
找到该函数时,您将看到$ options数组变量,其中包含用于格式化价格值的所有必要信息。以下是var_dump
$ options。
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"
}
因此,要移动货币符号,您可以覆盖
public function formatPrecision
在DI.xml中
<preference for="Magento\Directory\Model\Currency" type="Yourpack\Custom\Model\Currency" />
并传递带有必要值的options数组。
例如:$options['position'] = 16
将货币符号移至货币值(16.24 $)的右侧
同样,传递必要的数组选项以覆盖。