Я использую следующий код
<?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 (Core), PHP 5.6.38) я получаю:
Если я запускаю locale -a
в командной строке Iполучить список установленных локалей ... каждая локаль в моем массиве присутствует в выходных данных с обеих машин (utf-8 немного отличается).
Просмотр pl_ * локалей ... Машина macOS включает
- pl_PL.UTF-8
- pl_PL.ISO8859-2
- pl_PL
В то время как машина Linux включает
- pl_PL
- pl_PL.iso88592
- pl_PL.utf8
Почему вывод выглядит корректно на компьютере MacOS, но не на компьютере Linux?Это то, что нужно адресовать в файле PHP.ini, или это на сервере?Я предполагал, что если языковой стандарт указан в locale -a
, он должен работать в обоих местах, как ожидалось.