Hello!
I need to move currency symbol position to the left.
I found vendor\magento\zendframework1\library\Zend\Currency.php file.
Here we could see
protected $_options = array(
'position' => self::STANDARD,
'script' => null,
'format' => null,
'display' => self::NO_SYMBOL,
'precision' => 2,
'name' => null,
'currency' => null,
'symbol' => null,
'locale' => null,
'value' => 0,
'service' => null,
'tag' => 'Zend_Locale'
);So, if I replace
'position' => self::STANDARD
with
'position' => self::LEFT
I will get exactly what I need.
But I did not find the way how I could to override zend core files.
Could any one help me with this?
Or maybe here exist other way? Such as setup "left" position for
self::STANDARD
"position" option?
Thank you.
Hi,
Go through below link it will help you to change currency symbol position:
http://www.templatemonster.com/help/magento-how-to-change-currency-symbol-position.html#gref
https://php.quicoto.com/how-to-change-currency-position-in-magento/
If this post is fulfill you solution then please mark as accept.
Thanks,
Dibyajyoti
I found a rough solution.
I overrid \Magento\Directory\Model\Currency::formatTxt($price, $options = []) function.
Now it looks like this:
public function formatTxt($price, $options = [])
{
if(!isset($options['position'])) {
$options['position'] = 32;
}
if (!is_numeric($price)) {
$price = $this->_localeFormat->getNumber($price);
}
/**
* Fix problem with 12 000 000, 1 200 000
*
* %f - the argument is treated as a float, and presented as a floating-point number (locale aware).
* %F - the argument is treated as a float, and presented as a floating-point number (non-locale aware).
*/
$price = sprintf("%F", $price);
return $this->_localeCurrency->getCurrency($this->getCode())->toCurrency($price, $options);
}Thank you.
Ok, On Magento 2 same thing can do in: vendor\magento\zendframework1\library\Zend\Locale\Data\
<currencyFormats numberSystem="latn">
<currencyFormatLength>
<currencyFormat type="standard">
<pattern>#,##0.00 ¤</pattern>
</currencyFormat>
</currencyFormatLength>
</currencyFormats>Find your currency code file and change accordingly.
Or if you want to install extension go through below link:
https://mage2.pro/t/topic/355 (Not free)
Regards,
@vlad_bro : thank for your solution .
@Dibyajyoti M : thank , but i think modify library code is not a good way.
For any guys looking for solution about currency positon :
- Make your custom module:
app/code/Your_Vendor/Currency ├── Model/ │ ├── Currency.php ├── etc/ │ ├── di.xml/ │ ├── module.xml/ ├── registration.php ├── composer.json
- Declare your custom model in di.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Directory\Model\Currency" type="Your_Vendor\Currency\Model\Currency" />
</config>- Your custom model : Currency.php
class Currency extends \Magento\Directory\Model\Currency
{
// Constants for defining the position of the currencysign
const STANDARD = 8;
const RIGHT = 16;
const LEFT = 32;
/**
* @param float $price
* @param array $options
* @return string
*/
public function formatTxt($price, $options = [])
{
if (!is_numeric($price)) {
$price = $this->_localeFormat->getNumber($price);
}
if(!isset($options['position'])) {
$options['position'] = self::RIGHT;
}
/**
* Fix problem with 12 000 000, 1 200 000
*
* %f - the argument is treated as a float, and presented as a floating-point number (locale aware).
* %F - the argument is treated as a float, and presented as a floating-point number (non-locale aware).
*/
$price = sprintf("%F", $price);
return $this->_localeCurrency->getCurrency($this->getCode())->toCurrency($price, $options);
}
}Please google more about custom module in Magento 2 for
│ ├── module.xml/ ├── registration.php ├── composer.json
Happy codding !!!