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