locale — LC_MONETARY it_IT @ utf8 показывает символ евро перед суммой с переполнением стека

Установка информации о локали как:

$locale = 'it_IT';
$moneyFormat = '%n';

setlocale(LC_MONETARY, $locale.'.utf8');
$optionPrice = money_format($moneyFormat, floatval($option->optionPrice));

Цена указана в виде:

€ 23

вместо

23 €

Я нашел идентификатор языкового стандарта p_sign_posn, чтобы установить положение символа валюты, но я не знаю, как его изменить, и, по-видимому, по умолчанию для ИТ-языкового стандарта установлено значение 1.

Кто-нибудь может просветить меня, чтобы найти умное решение?

Заранее спасибо.

РЕДАКТИРОВАТЬ: локаль для Италии, очевидно, установлен в системе

vmamp@AMP30:~> locale -a | grep it
it_CH
it_CH.utf8
it_IT
it_IT.utf8
it_IT@euro

0

Решение

Чтобы использовать функцию с поддержкой локали, на вашем компьютере должна быть установлена ​​требуемая локаль. Если запрошенная локаль не представлена, позвоните setlocale терпит неудачу и ничего не изменилось.

Например, у меня есть es_ES локаль установлена, но нет it_IT:

setlocale(LC_MONETARY, 'es_ES.utf8');
echo money_format($moneyFormat, floatval(12))
// ⇒ 12,00 €
setlocale(LC_MONETARY, 'en_US.utf8');
echo money_format($moneyFormat, floatval(12))
// ⇒ $12.00
setlocale(LC_MONETARY, 'it_IT.utf8');
echo money_format($moneyFormat, floatval(12))
//   FAIL!!!
// ⇒ $12.00

Как видите, последний звонок был проигнорирован (setlocale возвращенный 0.) Таким образом, проблема, с которой вы столкнулись, заключается не в позиции euroign; это скорее всего отсутствие it_IT l10n установлен.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]