2013-05-02 60 views
1

與Apache將發生以下問題在Ubuntu 13.04(對其他操作系統的不確定) 我fr_LU嘗試過,但無濟於事的NumberFormatter :: formatCurrency與「fr_FR.UTF-8」

隱而不宣」返回的NaN將不起作用 - 返回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 

回答

4

隨後在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); 
+1

謝謝! 只是盲目地遵循一些舊的教程,我使用gettext時將LC_ALL設置爲我的語言環境。嚴重搞砸了我的NumberFormatter,只是得到了字符串'¤¤¤'作爲我的輸出。 – Oskar 2014-02-21 13:26:33