PHP:可识别区域设置的数字格式

2022-08-30 17:03:58

我想为我的网站访问者格式化数字3253454。

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

我有很多国际访客。

任何人都可以给我一个指向这里最佳实践的指针吗?

理想情况下,我希望获取浏览器的区域设置并相应地格式化数字。这在PHP中甚至可能吗?


答案 1

如果你正在部署一个本地化的网站,你将需要确保你设置locale()。为了摆脱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

也许可以尝试独立于为所有脚本设置全局区域设置的方法?

获取用户的区域设置:

$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

您可以在其中使用许多不同的样式格式,例如:十进制、货币或百分比。在此处阅读更多内容

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


推荐