Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Откуда берется символ валюты?


rhjirftyjn

Recommended Posts

Всем привет.

в языковых файлах корзины есть строка

Англ.

$_['text_items']    ='<div class="cart-count"><a href="/shopping-cart/">%s</a></div><b>Total sum:</b><div class="cart-tit">%s</div>';

 

Рус.

$_['text_items']    ='<div class="cart-count"><a href="/shopping-cart/">%s</a></div><b>Общая сумма:</b><div class="cart-tit">%s</div>';

 

первая %s - это количество товаров в корзине

вторая %s - это общая стоимость заказа.

 

на русском языке все выглядит нормально

0 (товаров)  Общая сумма: 0 руб.

но на английском языке

слово "руб" остается.

В настройках валюты доллар прописан.

почему не подставляется символ доллара?

или как сделать чтобы было RUB?

откуда читается %s?

Спасибо

 

 

img-2018-11-20-04-17-42.png

img-2018-11-20-04-17-22.png

img-2018-11-20-04-20-22.png

Змінено користувачем rhjirftyjn
Надіслати
Поділитися на інших сайтах


system/library/currency.php - тут Тузик закопан, а именно:

public function format($number, $currency = '', $value = '', $format = true) {
		if ($currency && $this->has($currency)) {
      		$symbol_left   = $this->currencies[$currency]['symbol_left'];
      		$symbol_right  = $this->currencies[$currency]['symbol_right'];
      		$decimal_place = $this->currencies[$currency]['decimal_place'];
    	} else {
      		$symbol_left   = $this->currencies[$this->code]['symbol_left'];
      		$symbol_right  = $this->currencies[$this->code]['symbol_right'];
      		$decimal_place = $this->currencies[$this->code]['decimal_place'];
			
			$currency = $this->code;
    	}

    	if ($value) {
      		$value = $value;
    	} else {
      		$value = $this->currencies[$currency]['value'];
    	}

    	if ($value) {
      		$value = (float)$number * $value;
    	} else {
      		$value = $number;
    	}

    	$string = '';

    	if (($symbol_left) && ($format)) {
      		$string .= $symbol_left;
    	}

		if ($format) {
			$decimal_point = $this->language->get('decimal_point');
		} else {
			$decimal_point = '.';
		}
		
		if ($format) {
			$thousand_point = $this->language->get('thousand_point');
		} else {
			$thousand_point = '';
		}
		
    	$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);

    	if (($symbol_right) && ($format)) {
      		$string .= $symbol_right;
    	}

    	return $string;
  	}

тоесть строка вида:

if (($symbol_right) && ($format)) {
      		$string .= $symbol_right;
    	}

добавляет к сумме - символ справа. я же своего времени, делал дополнительно вот такую функцию:

public function clearformat($number, $currency = '', $value = '', $format = true) {
		if ($currency && $this->has($currency)) {
      		$symbol_left   = $this->currencies[$currency]['symbol_left'];
      		$symbol_right  = $this->currencies[$currency]['symbol_right'];
      		$decimal_place = $this->currencies[$currency]['decimal_place'];
    	} else {
      		$symbol_left   = $this->currencies[$this->code]['symbol_left'];
      		$symbol_right  = $this->currencies[$this->code]['symbol_right'];
      		$decimal_place = $this->currencies[$this->code]['decimal_place'];
			
			$currency = $this->code;
    	}

    	if ($value) {
      		$value = $value;
    	} else {
      		$value = $this->currencies[$currency]['value'];
    	}

    	if ($value) {
      		$value = (float)$number * $value;
    	} else {
      		$value = $number;
    	}

    	$string = '';

		if ($format) {
			$decimal_point = $this->language->get('decimal_point');
		} else {
			$decimal_point = '.';
		}
		
		if ($format) {
			$thousand_point = $this->language->get('thousand_point');
		} else {
			$thousand_point = '';
		}
		
    	$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);

    	return $string;
  	}

при подстановке вместо метода $this->currency->format пишу $this->currency->clearformat - что дает чистые числа, очень удобно, если нужно данные подставить по правилам в микроразметку и... в вашем случае, можно в конце просто добавить языковую переменную, хоть RUB хоть RUR

Надіслати
Поділитися на інших сайтах

8 минут назад, auditor сказал:

system/library/currency.php - тут Тузик закопан, а именно:


public function format($number, $currency = '', $value = '', $format = true) {
		if ($currency && $this->has($currency)) {
      		$symbol_left   = $this->currencies[$currency]['symbol_left'];
      		$symbol_right  = $this->currencies[$currency]['symbol_right'];
      		$decimal_place = $this->currencies[$currency]['decimal_place'];
    	} else {
      		$symbol_left   = $this->currencies[$this->code]['symbol_left'];
      		$symbol_right  = $this->currencies[$this->code]['symbol_right'];
      		$decimal_place = $this->currencies[$this->code]['decimal_place'];
			
			$currency = $this->code;
    	}

    	if ($value) {
      		$value = $value;
    	} else {
      		$value = $this->currencies[$currency]['value'];
    	}

    	if ($value) {
      		$value = (float)$number * $value;
    	} else {
      		$value = $number;
    	}

    	$string = '';

    	if (($symbol_left) && ($format)) {
      		$string .= $symbol_left;
    	}

		if ($format) {
			$decimal_point = $this->language->get('decimal_point');
		} else {
			$decimal_point = '.';
		}
		
		if ($format) {
			$thousand_point = $this->language->get('thousand_point');
		} else {
			$thousand_point = '';
		}
		
    	$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);

    	if (($symbol_right) && ($format)) {
      		$string .= $symbol_right;
    	}

    	return $string;
  	}

тоесть строка вида:


if (($symbol_right) && ($format)) {
      		$string .= $symbol_right;
    	}

добавляет к сумме - символ справа. я же своего времени, делал дополнительно вот такую функцию:


public function clearformat($number, $currency = '', $value = '', $format = true) {
		if ($currency && $this->has($currency)) {
      		$symbol_left   = $this->currencies[$currency]['symbol_left'];
      		$symbol_right  = $this->currencies[$currency]['symbol_right'];
      		$decimal_place = $this->currencies[$currency]['decimal_place'];
    	} else {
      		$symbol_left   = $this->currencies[$this->code]['symbol_left'];
      		$symbol_right  = $this->currencies[$this->code]['symbol_right'];
      		$decimal_place = $this->currencies[$this->code]['decimal_place'];
			
			$currency = $this->code;
    	}

    	if ($value) {
      		$value = $value;
    	} else {
      		$value = $this->currencies[$currency]['value'];
    	}

    	if ($value) {
      		$value = (float)$number * $value;
    	} else {
      		$value = $number;
    	}

    	$string = '';

		if ($format) {
			$decimal_point = $this->language->get('decimal_point');
		} else {
			$decimal_point = '.';
		}
		
		if ($format) {
			$thousand_point = $this->language->get('thousand_point');
		} else {
			$thousand_point = '';
		}
		
    	$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);

    	return $string;
  	}

при подстановке вместо метода $this->currency->format пишу $this->currency->clearformat - что дает чистые числа, очень удобно, если нужно данные подставить по правилам в микроразметку и... в вашем случае, можно в конце просто добавить языковую переменную, хоть RUB хоть RUR

 

на столько не влазил в кишки, но на такое количество условий больно смотреть

public function format($number, $currency = '', $value = '', $format = true) {

	$flag_currency = $currency && $this->has($currency) ? 1 : 0 ;
	$symbol_left   = $this->currencies[$flag_currency?$currency:$this->code]['symbol_left'];
	$symbol_right  = $this->currencies[$flag_currency?$currency:$this->code]['symbol_right'];
	$decimal_place = $this->currencies[$flag_currency?$currency:$this->code]['decimal_place'];
	// или вообще в цикл пихнуть, чтобы меньше строчек
	$currency = $flag_currency ? $currency : $this->code;

	if (!$value) $value = $this->currencies[$currency]['value'];

	$value = $value ? (float)$number * $value : $number;

	// дальше код    
}

 

Надіслати
Поділитися на інших сайтах


8 часов назад, TimFrio сказал:

 

на столько не влазил в кишки, но на такое количество условий больно смотреть


public function format($number, $currency = '', $value = '', $format = true) {

	$flag_currency = $currency && $this->has($currency) ? 1 : 0 ;
	$symbol_left   = $this->currencies[$flag_currency?$currency:$this->code]['symbol_left'];
	$symbol_right  = $this->currencies[$flag_currency?$currency:$this->code]['symbol_right'];
	$decimal_place = $this->currencies[$flag_currency?$currency:$this->code]['decimal_place'];
	// или вообще в цикл пихнуть, чтобы меньше строчек
	$currency = $flag_currency ? $currency : $this->code;

	if (!$value) $value = $this->currencies[$currency]['value'];

	$value = $value ? (float)$number * $value : $number;

	// дальше код    
}

 

Вам бы Даниелю (автору опенкарта) это написать, искренне хотел бы услышать\увидеть его комментарий по Вашей корректировке.

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.