2012-02-13 9 views
7

Symfony2でロケールの日付形式を切り替える方法を教えてもらえますか?どんなに私が設定(framework.session.default_locale)に設定したもの 日付ロケールを切り替える

が、これは常に(私はドイツ語の平日が必要となります)英語で曜日を返します。

$start->format("D d.m.Y"); 

ときのデフォルトロケールI出力それは常に関係なく、ところで「デ」returnesない何私config.ymlでセットアップ

echo \Locale::getDefault() 

追加INFOS:私はそれそのように日付をフォーマットすることができるようにしたい

私のローカルシステムとライブサーバー上で正しく出力されます(ドイツの平日の意味が正しい)。ロケールパッケージはライブマシンと開発マシンで異なる命名スキームを使用しているため、システムのインストールされたロケールを使用するstrftimeでこれを試してみました。 これに関するもう1つの質問があります: PHP: why is my date formated on the server differently?

+0

はありませんがあることを指摘しhttp://stackoverflow.com/a/23424315/1001110 –

答えて

3

(あなたがオンにする必要がありますPHPのためのintlの拡張子):

<?php 
    class DefaultController extends Controller { 
     public function indexAction() { 
      $date = new \DateTime("now"); 
      $formatter = new \IntlDateFormatter(\Locale::getDefault(), \IntlDateFormatter::NONE, \IntlDateFormatter::NONE); 
      $formatter->setPattern("EEEE Y-M-d"); 
      return array('locale' => \Locale::getDefault(), "intl" => $formatter->format($date)); 
    } 

それは私のためにうまく動作します。どのようにあなたが http://userguide.icu-project.org/formatparse/datetime

で見つけることができるフォーマットのパタパタを作成するのではなく、あなた自身の

8

Symfony2は、コアに日付フォーマッタを提供していません。

セッションとリクエストをスニッフィングして\Locale::getDefault()の値を設定するだけです。

SonataIntlBundleのように、ロケールごとの書式設定を処理するためのサービスを追加する必要があります。

このバンドルは、拡張モジュールにいくつかの小枝フィルタを追加し、どこでも使用できるヘルパーを提供します。

一旦活性化、あなたは、例えば、あなたのテンプレートでそれらを使用することができます。ここ

{{ my_date|format_datetime }} 

もっとに関する情報:https://github.com/sonata-project/SonataIntlBundle/blob/master/Resources/doc/reference/datetime.rst私は私のプロジェクトで日付をフォーマットするようなコードを使用

+2

感謝を参照してください) symfony - これのためにすぐに使える機能しかし、Intlを使用してこれを実行するには、何らかの方法が必要です。私はSonataIntlBundleのコードを見ましたが、私はそれを取得しません。 私は火星のように感じています - 私は本当にこの問題を抱えている唯一の人ですか? – stoefln

+0

ソナタからの多くのことは、あなたが火星にいると思うようにすることができます:)しかし、symfony関連のコードの多くは次のようなものです:)もちろん、Intl *クラスを直接使用して、$ session-> getLocale ()か何でも。 – Florian

+0

私はそれを得ました。貴重な情報が欠けていました。ユーザーのロケールはログイン時に設定されるため、設定を変更してもユーザーがログアウトしてからログインするまで効果はありません。ありがとう! – stoefln

1

もっと簡単な方法は、翻訳ファイルにフォーマットを格納することで作成することができますので、私は、小枝のためにヘルパーが見つかりませんでした、このような:で

ファイル "のメッセージ .ymlアン。":「メッセージで

date.format: m/d/Y 
time.format: g:i A 

FR .yml」ファイル:

date.format: d/m/Y 
time.format: H:i 

その後、小枝ファイルに、あなたはこれを行うことができます。

{{ my_date|date('date.format'|trans) }} 

だから日付は自動的に現在のロケールを使用して、適切なフォーマットになります。

+0

これは最も簡単な方法です。また、long、shortなどのフォーマットを定義し、バンドルを追加することなく使用することができます。 –

+0

唯一の問題は、日と月の名前が翻訳されないことです。 –

2

は、単にあなたのconfig.ymlであなたのテンプレート Syntaxe小枝で

services: 
    twig.extension.intl: 
     class: Twig_Extensions_Extension_Intl 
     tags: 
      - { name: twig.extension } 

小枝の拡張子を追加します:{{MyDateに該当します| sizeHour:none/short/medium/long/nullのいずれかにすることができます。localTimeDate( 'sizeDate'、 'sizeHour'、 'locale')} myDate:DateTimeオブジェクトでなければなりません。 sizeDate:none/short/medium/long /フル ロケール:デフォルトではオプションは、セッションの言語が使用されますが、あなたは

「フルローカライズ機能のために 『国際』拡張機能をインストールしてください 」エラーが出る場合は、1つの切り抜いたロケール値

{{ myDate | localizeddate('full', 'none') }} ({{ myDate | localizeddate('none', 'short') }}) 
<!-- 
locale "fr" : vendredi 21 décembre 2012 (13:37) 
locale "en : Friday, December 21, 2012 (13:37 PM) 
--> 

を強制することができます

php5-intlパッケージをインストールする 例えばDebianサーバでは、 mmand次のようになります。 apt-getはPHP5-国際空港をインストール

いけないあなたのキャッシュをクリアすることを忘れ、

関連する問題