当前位置:  开发笔记 > 编程语言 > 正文

PHP:区域设置感知数字格式

如何解决《PHP:区域设置感知数字格式》经验,为你挑选了3个好方法。

我想格式化我的网站访问者的号码3253454.

如果我使用内置的number_format函数,我得到:3,253,454,这对英国和美国很有用,但大多数其他国家使用3.253.454

我有很多国际访客.

谁能给我一个指向最佳实践的指针?

理想情况下,我希望得到浏览器的语言环境并相应地格式化数字.这在PHP中甚至可能吗?



1> 小智..:

如果您正在部署本地化网站,那么您将需要确保setlocale().为了重复yaauie上面的帖子,我会在你的初始化代码中添加类似下面的代码片段:

$locale = ( isset($_COOKIE['locale']) ) ? 
            $_COOKIE['locale'] : 
            $_SERVER['HTTP_ACCEPT_LANGUAGE'];
setlocale(LC_ALL, $locale);

然后我们修改上面的函数number_format_locale(),看起来像这样:

function number_format_locale($number,$decimals=2) {
    $locale = localeconv();
    return number_format($number,$decimals,
               $locale['decimal_point'],
               $locale['thousands_sep']);
 }

当然,这是一个理想的世界,取决于您部署的平台,以及您安装的语言环境文件的版本,您可能需要编写一些不规范的代码.但设置区域设置将有助于金钱,数字和日期.



2> Paweł Tomkie..:

也许尝试独立于为所有脚本设置全局区域设置?

获取用户的区域设置:

$locale = ( isset($_COOKIE['locale']) ) ? 
            $_COOKIE['locale'] : 
            $_SERVER['HTTP_ACCEPT_LANGUAGE'];

格式化数字:

我建议使用PHP NumberFormatter.这是一种使用ICU库的OOP方法.

$formatStyle=NumberFormatter::DECIMAL;
$formatter= new NumberFormatter($locale, $formatStyle);
echo $formatter->format(3253454);//proper output depending on locale

您可以在那里使用许多不同的样式格式,例如:DECIMAL,CURRENCY或PERCENT.在这里阅读更多.

这是数字格式化的最佳方式,因为它依赖于全局Unicode公共区域设置数据存储库.



3> Karsten..:
string number_format (float $number, int $decimals, string $dec_point, string $thousands_sep)

请参阅php doku获取number_format

另一个有用的链接可能是来自Zend Framework的Zend_Locale - 它可以检测用户的语言并帮助进行数字/货币格式化

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有