установить PHP в FR-FR и числовое форматирование - PullRequest
4 голосов
/ 25 мая 2010

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

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

$overallRating = $returnArray['Overall'];

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

number_format($overallRating,1)

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

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

Ответы [ 3 ]

6 голосов
/ 26 мая 2010

Так что в итоге нашли ответ после долгих исследований.

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

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

 setlocale(LC_NUMERIC, 'C');

Под

 setlocale(LC_ALL, 'fr_FR'); 

сделал свое дело

1 голос
/ 21 июня 2012

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

1 голос
/ 25 мая 2010

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

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

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

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