在PHP和数字格式中将setlocale设置为fr-FR

时间:2010-05-25 16:00:54

标签: php locale number-formatting

我正在尝试创建其中一个网站的法语版本。我在页面顶部设置了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以防有任何新内容可以帮助我

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