我正在使用以下代码
<?php
$moneyFormat = '%-#15.2n';
$moneyFormat_none = '%!-#15.2n';
$locales = array('en_US',
'en_EU',
'en_GB',
'zh_CN',
'pl_PL',
'ja_JP',
'ko_KR',
'zh_SG',
'zh_TW');
foreach($locales as $key => $value) {
setlocale(LC_MONETARY, $value);
echo '<tr>';
echo '<td align="center">' . $value . '</td>';
echo '<td align="right">' . money_format($moneyFormat, 12345.67) . '</td>';
echo '<td align="right">' . money_format($moneyFormat_none, 12345.67) . '</td>';
echo '</tr>';
};
echo '<tr><td colspan="3"><hr></td></tr>';
setlocale(LC_MONETARY, 'pl_PL.UTF-8');
echo '<tr>';
echo '<td align="center">pl_PL.UTF-8</td>';
echo '<td align="right">' . money_format($moneyFormat, 12345.67) . '</td>';
echo '<td align="right">' . money_format($moneyFormat_none, 12345.67) . '</td>';
echo '</tr>';
setlocale(LC_MONETARY, 'pl_PL.utf8');
echo '<tr>';
echo '<td align="center">pl_PL.utf8</td>';
echo '<td align="right">' . money_format($moneyFormat, 12345.67) . '</td>';
echo '<td align="right">' . money_format($moneyFormat_none, 12345.67) . '</td>';
echo '</tr>';
在我的本地计算机上(masOS 10.14.1,PHP 5.6.38),我得到以下结果:
在另一台机器上(CentOS Linux 7(核心),PHP 5.6.38),我得到:
如果我在命令行上运行locale -a
,则会得到已安装语言环境的列表...阵列中的每个语言环境都存在于两台计算机的输出中(utf-8稍有不同)。
查看pl_ *语言环境... macOS机器包括
Linux计算机包含
为什么输出在macOS计算机上看起来正确,但在Linux计算机上却不正确?这是需要在PHP.ini文件中解决的还是基于服务器的?我当时的假设是,如果在locale -a
下列出了语言环境,则在两个地方都应按预期工作。