0

我正在尝试使用 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'

    }
}

在模块/应用程序/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',
            ),
        ),
    ),

    ...

);

有人能告诉我为什么这个月份没有翻译成法语吗?

4

2 回答 2

1

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

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

一个简单的例子:

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"));
于 2013-11-10T14:15:29.870 回答
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 视图助手。

于 2013-11-12T09:21:08.557 回答