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'

    }
}

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',
            ),
        ),
    ),

    ...

);

月がフランス語に翻訳されていない理由を誰か教えてくれませんか?

4

2 に答える 2

1

strftimeintlZF2 や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 に答える