ZF2中strftime的奇怪行为

时间:2013-11-08 16:08:59

标签: php localization zend-framework2 strftime

我正在尝试使用strftime显示本地化日期,但它不起作用。

class ExampleController extends AbstractActionController
{
    public function indexAction()
    {
        $openDate = DateTime::createFromFormat(...);
        setlocale(LC_ALL, Locale::getDefault());
        Debug::dump(Locale::getDefault()); // shows 'fr_FR'
        Debug::dump(strftime('%B %Y', $openDate->getTimestamp())); // shows 'August 2013' instead of 'Août 2013'

    }
}

在module / Application / config / module.config.php

return array(

    ...

    'translator' => array(
        'locale' => 'fr_FR',
        'translation_file_patterns' => array(
            array(
                'type'     => 'gettext',
                'base_dir' => __DIR__ . '/../language',
                'pattern'  => '%s.mo',
            ),
        ),
    ),

    ...

);

有人可以告诉我为什么月份没有用法语翻译?

2 个答案:

答案 0 :(得分:1)

strftime与ZF2或intl php扩展无关。但是,ZF2确实附带了DateFormat视图助手,可以解决您的问题。完整文档可在以下网址获得:

http://framework.zend.com/manual/2.2/en/modules/zend.i18n.view.helpers.html#dateformat-helper

一个简单的例子:

Debug::dump($this->dateFormat($openDate->getTimestamp(), IntlDateFormatter::LONG));

DateFormat视图帮助器的默认语言环境是Locale::getDefault()返回的默认语言环境,因此它应该根据需要以法语返回日期。

使用自定义格式:

Debug::dump($this->dateFormat($openDate->getTimestamp(), IntlDateFormatter::LONG, IntlDateFormatter::LONG, null, "dd LLLL Y - HH:mm"));

答案 1 :(得分:0)

根据Tomdarkness的说法,我找到了一种方法来做我想做的事。我使用了IntlDateFormatter:

$formatter = \IntlDateFormatter::create(
    \Locale::getDefault(), // fr_FR
    \IntlDateFormatter::FULL,
    \IntlDateFormatter::FULL,
    'Europe/Paris',
    \IntlDateFormatter::GREGORIAN,
    'dd LLLL Y - HH:mm'
);

echo $formatter->format($openDate); // shows '20 août 2013 - 14:39'

我想也许我会基于此编写自己的dateFormat视图助手。