2010-05-25 51 views
4

我想創建一個法語版本的我的網站之一。我已將setlocale(LC_ALL, 'fr_FR');設置在我的頁面頂部,並使用strftime我正在法語風格中正確顯示日期。setlocale在PHP和數字格式的fr-FR

但是我遇到了一些問題。部分頁面使用我從Web服務獲得的數據。我喜歡這個分配返回值給一個變種:

$overallRating = $returnArray['Overall']; 

我然後用下面的代碼後對其進行格式化,以1位小數

number_format($overallRating,1) 

在英文版的overallRating值可能是7.5,並返回7.5這樣的值(通過number_format運行它的原因是,如果它返回7我希望它顯示7.0)然而,在法國版

如果I p剔除原始$ overallRating值,我得到7,5,看起來它已經將它翻譯成法文。這將是很好,但如果我通過number_format運行它,我得到的錯誤:

Notice: A non well formed numeric value encountered in /sites/index.php on line 250 

線250是number_format

我相信翻譯,以7,5是搞亂它,但不知道如何解決這...

的情況下,使用PHP 5.3有什麼新的東西,可以幫助我

+0

這聽起來像你的價值獲得number_formatted別的地方。你100%肯定不會發生?你可以一步一步跟蹤數值轉換到哪一點? – 2010-05-25 16:02:47

+0

雖然我不是number_formating之前的數字,我認爲'setlocale'正在翻譯它,正如我在問題中所說的,如果我打印出法文網頁中的$ overallRating,然後通過number_format運行它,它顯示7,5(與一個逗號)。我認爲這是導致number_format失敗? – 2010-05-25 16:29:49

回答

6

所以最終找到了答案了大量的研究後。

PHP只適用於標準的美國小數點分隔符,不能應付法語,分隔符。

答案雖然不完美,但重置數值以使用美國,同時允許日期等格式化爲法語。配售這一行:

setlocale(LC_NUMERIC, 'C'); 

setlocale(LC_ALL, 'fr_FR'); 

做的伎倆

1

這是你在問什麼?

<?php 
    $overallRating = number_format($number, 1, '.', ''); 
?>

後來編輯:

<?php 
setlocale(LC_ALL, 'fr_FR'); 
$number = '7'; 
echo $overallRating = number_format($number, 1, '.', ''); 
?>
+0

不,它引發的錯誤導致了問題 – 2010-05-25 16:30:37

+0

我剛剛運行了上面的代碼,對我來說工作正常...... – 2010-05-26 07:23:39

+0

嘗試在數字中加上一個小數,這似乎是問題所在。即7.5而不是7 – 2010-05-26 08:47:17

1

我想利用法國編輯字符串,如「54,33」,後保存到數據庫作爲因爲,正如已經指出的那樣,PHP真的只喜歡en_US格式的數字。我沒有看到任何內置的PHP轉換函數可以完成這項工作。刪除千位分隔符並用「。」代替小數點分隔符。它可以用於任何設置。

//Currency Conversion Back to US for DB Storage or PHP number formatting 
function number_convert_us($num) { 
    $locale_settings = localeconv(); 
    $num = str_replace($locale_settings['mon_thousands_sep'], "", trim($num)); 
    $num = str_replace($locale_settings['mon_decimal_point'], ".", $num); 
    return number_format((double)$num, 2, '.', ''); 
} 

我將爲JavaScript構建一個類似的東西。找到這個庫供展示:http://software.dzhuvinov.com/jsworld-currency-formatting.html