PHP - региональный формат даты для английского и французского языков - PullRequest
0 голосов
/ 15 мая 2018

Даты, специфичные для локали, представляют интересную проблему. Нам нужно не только указать соответствующий перевод (например: September => septembre), но и убедиться, что формат находится в правильном порядке (например: September 15, 2018 => 15 septembre 2018)

Функция даты в PHP date() только на английском языке, поэтому ее можно сразу игнорировать.

Вместо этого мое «исследование» указало мне на strftime(). Я подготовил следующий код: echo strftime('%b %e, %Y',strtotime($date));

Это выводит: May 1, 2018 и mai 1, 2018. Похоже, это решило проблему, пока наши двуязычные тестеры не определили, что дни должны быть отформатированы 1 мая 2018 года.

Какой лучший способ справиться с этим, это статический класс? Я хочу подготовить наше решение в соответствии с лучшими практиками, но я не нашел ответа.

class LocaleDate
{
    public static function date($date)
    {
        $locale = setlocale(LC_ALL, 0);
        if ($locale == "fr_CA" || $locale == "fr_CA.UTF-8") {
            return strftime('%e %b %Y',strtotime($date));
        } else {
            return strftime('%b %e, %Y',strtotime($date));
        }
    }
}

echo LocaleDate::date($date)

Это лучший способ решить эту проблему? Нужно идентифицировать локаль и выводить оттуда? Кажется утомительным, если вам приходится иметь дело с несколькими языками.

1 Ответ

0 голосов
/ 17 мая 2018

Используйте класс DateTime вместе с IntlDateFormatter.

Пример:

<?php

$dt = new DateTime;

$formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT);
$formatter->setPattern('E d.M.yyyy');

echo $formatter->format($dt);

Вывод:

jeu. 17.5.2018

Поиграйте с ним здесь: https://3v4l.org/tuEM0

Проверьте документацию здесь: http://php.net/manual/en/class.intldateformatter.php

...