我正在尝试创建其中一个网站的法语版本。我在页面顶部设置了setlocale(LC_ALL, 'fr_FR');
,并使用strftime
我正在以法语风格正确显示日期。
但是我遇到了一些问题。部分页面使用我从Web服务获取的数据。我正在为这样的var分配一个返回值:
$overallRating = $returnArray['Overall'];
我稍后使用以下代码将其格式化为1个小数位
number_format($overallRating,1)
在英文版中,overallRating值可能为7.5
并返回7.5
之类的值(通过number_format运行它的原因是它返回7
我想要它显示7.0
)
然而,在法语版本中,如果我打印出原始的$ 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 :(得分:6)
经过大量研究后,最终找到了答案。
PHP仅适用于标准的美国十进制分隔符,无法处理法语,分隔符。
答案虽然不完美,但重置数值是为了使用美国,同时允许日期等用法语格式化。放置这一行:
setlocale(LC_NUMERIC, 'C');
在
setlocale(LC_ALL, 'fr_FR');
完成了这个伎俩
答案 1 :(得分:1)
这就是你问的问题吗?
<?php
$overallRating = number_format($number, 1, '.', '');
?>
稍后编辑:
<?php
setlocale(LC_ALL, 'fr_FR');
$number = '7';
echo $overallRating = number_format($number, 1, '.', '');
?>
答案 2 :(得分:1)
我想使用法语编辑的字符串“54,33”并将其作为en_US号码保存回db,因为正如已经指出的那样,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