以下问题发生在Ubuntu 13.04上的apache(不确定其他操作系统)我也尝试了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');
我在这里错过了什么?
在我的机器上,locale -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
在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);