NumberFormatter::formatCurrency возвращает NaN с "fr_FR.UTF-8"
Следующая проблема возникает с Apache на Ubuntu 13.04(не уверен насчет других ОС) Я тоже пытался с fr_LU, но безрезультатно
Не работает - возвращает NaN
setlocale(LC_MONETARY, 'fr_FR.UTF-8');
$currency_formatter = NumberFormatter::create(setlocale(LC_MONETARY, "0"), NumberFormatter::CURRENCY);
$currency_formatter->formatCurrency(100, 'USD');
Что мне здесь не хватает?
Результат для локали -a на моей машине выглядит следующим образом:
C
C.UTF-8
de_AT.utf8
de_BE.utf8
de_CH.utf8
de_DE.utf8
de_LI.utf8
de_LU.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US
en_US.iso88591
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
fr_BE.utf8
fr_CA.utf8
fr_CH.utf8
fr_FR
fr_FR.iso88591
fr_FR.utf8
fr_LU.utf8
ja_JP.utf8
POSIX
zh_CN.utf8
zh_SG.utf8
1 ответ
Решение
Далее следовал комментарий на https://bugs.php.net/bug.php?id=54538 который гласит: "Я нашел обходной путь. Настройка LC_MESSAGES не влияет на NumberFormatter и достаточна для переводов gettext одновременно."
Я прокомментировал, что это обходной путь, и он работал для меня. Вот как мой код выглядит после изменения
putenv('LC_MESSAGES='.$locale);
setlocale(LC_MESSAGES, $locale);
setlocale(LC_TIME, $locale);
//Don't set LC_NUMERIC and LC_MONETARY as these may interfere with number formatter and cause to return NaN(https://bugs.php.net/bug.php?id=54538)
//setlocale(LC_NUMERIC, $locale);
//setlocale(LC_MONETARY, $locale);
$currency_formatter = NumberFormatter::create(setlocale(LC_MESSAGES, "0"), NumberFormatter::CURRENCY);