NumberFormatter :: formatCurrency () вывод на разных платформах

Возьмите следующий код:

$formatter = new NumberFormatter('fr_FR', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency('-1.23', 'EUR');

На Fedora 25 вывод -1,23 €, который является выходом, который я ожидал.

Однако на CentOS 7 вывод (1,23 €); не совсем ясно для французской аудитории.

Откуда эти различия? Я подозреваю, что они пришли из libicu Версия установлена ​​в системе, но мне нужно подтверждение об этом. Также я не уверен, использует ли PHP версию ICU, установленную в системе, или версию, которая поставляется во время компиляции.

CentOS 7 имеет libicu-50.1.2-15и Fedora 25 имеет libicu-57.1-4, но версии PHP одинаковы в обеих системах, и все пакеты приходят из одного и того же хранилища (Remi), так что если бы ICU был в комплекте с PHP, я бы ожидал, что их версии будут идентичны.

0

Решение

PHP в репозитории «remi» (и AFAIK для всех сторонних репозиториев) использует системную библиотеку libicu, поскольку в PHP нет встроенной библиотеки libicu.

(единственное исключение в пакетах в remi-репозитории для EL-6, которые используют libicu 50, перенесены из EL-7 вместо 4.2 по умолчанию)

1

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

Возможное решение, настройка шаблона вывода:

$formatter = new NumberFormatter('fr_FR', NumberFormatter::CURRENCY);
$p = $formatter->getPattern(); // "#,##0.00 ¤;(#,##0.00 ¤)"$p = explode(";", $p, 2);
$formatter->setPattern($p[0]); // "#,##0.00 ¤"echo $formatter->formatCurrency('-1.23', 'EUR');

Протестировано на Fedora 25 (icu 58) и RHEL-7 (icu 50):

От Документация ICU — десятичный формат — подробное описание

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

1

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