Разные результаты при использовании money_format на двух разных серверах - PullRequest
0 голосов
/ 06 декабря 2018

Я использую следующий код

<?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) я получаю следующие результаты: enter image description here

На другом компьютере (CentOS Linux 7 (Core), PHP 5.6.38) я получаю: enter image description here

Если я запускаю 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, он должен работать в обоих местах, как ожидалось.

...