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 formatTxt
上 module-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 如何根据语言环境自定义货币符号和格式的主要内容,如果未能解决你的问题,请参考以下文章
php 删除十进制删除小数价格删除magento货币符号中的十进制价格编辑价格编辑货币编辑小数
NumberFormat.getCurrencyInstance() 不返回语言环境中国和法国的货币符号 (jdk-1.8)