PHP - 英语和法语

时间:2018-05-15 14:38:22

标签: php locale strftime

区域特定日期提出了一个有趣的问题,我们不仅需要指定适当的翻译(例如:September => septembre),而且我们还需要确保格式在右侧订单(例如:September 15, 2018 => 15 septembre 2018

PHP的日期函数date()仅为英文,因此可以立即被忽略。

相反,我的“研究”指向strftime()。我准备了以下代码:echo strftime('%b %e, %Y',strtotime($date));

此输出:May 1, 2018mai 1, 2018。这似乎解决了这个问题,直到我们让我们的双语测试人员确定日期应该格式化为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 :(得分:0)

将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