2010-05-25 4 views
4

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

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

$overallRating = $returnArray['Overall']; 

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

number_format($overallRating,1) 

В английской версии значение overallRating может быть 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 в случае, если есть что-то новое, что помогает мне

+0

Это похоже на то, что ваше значение получает number_formatted в другом месте. Вы на 100% уверены, что этого не произойдет? Можете ли вы проследить шаг за шагом, в какой момент значение будет преобразовано? –

+0

Хотя я не номер_формации числа до этого, я думаю, что 'setlocale' переводит его, как я сказал в вопросе, если я распечатаю $ generalRating на французской странице, прежде чем запускать его через number_format, он отображает 7,5 (с запятая). Я предполагаю, что это приводит к ошибке number_format? –

ответ

6

Так в конце концов нашел ответ после того, как много исследований.

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

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

setlocale(LC_NUMERIC, 'C'); 

Под

setlocale(LC_ALL, 'fr_FR'); 

сделал Хитрость

1

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

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

Позже Edit:

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

Нет, его ошибка, которую она вызывает, вызывает проблемы –

+0

Я только что запустил код выше и отлично работает для меня ... –

+0

Попробуйте поместить десятичное число в число, что кажется проблемой. т.е. 7,5 вместо 7 –

1

Я хотел взять французскую отредактированы строку типа «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