setlocale to fr-FR в PHP и форматирование чисел

Я пытаюсь создать французскую версию одного из моих сайтов. Я установил setlocale(LC_ALL, 'fr_FR'); в верхней части моей страницы, и используя strftime я правильно показываю даты во французском стиле.

Однако у меня проблемы с числом. Часть страницы использует данные, которые я получаю из веб-службы. Я присваиваю возвращаемое значение var следующим образом:

 $overallRating = $returnArray['Overall']; 

Затем я использую следующий код, чтобы отформатировать его до 1 десятичного знака

 number_format($overallRating,1) 

В английской версии значение totalRating может быть 7.5 и возвращает значение, такое как 7.5 (причина для его запуска через number_format, если он возвращает 7 я хочу, чтобы он отображал 7.0 )

Однако во французской версии, если я распечатаю значение raw $ totalRating, я получаю 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 в случае, если есть что-то новое, что помогает мне

Поэтому в итоге нашел ответ после многих исследований.

PHP действительно работает со стандартными десятичными разделителями США и не может справиться с французским, seperator.

Ответ, хотя и не идеальный, – это сброс числовых значений для использования США, а также датирование дат и т. Д. На французском языке. Размещение этой строки:

  setlocale(LC_NUMERIC, 'C'); 

Под

  setlocale(LC_ALL, 'fr_FR'); 

сделал трюк

это то, что вы просите?

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

Позже Редактировать:

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

Я хотел взять отредактированную по-французски строку типа «54,33» и сохранить ее обратно в db как номер en_US, потому что, как уже указывалось, 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