0

サーバーには既に Intl をインストールしています。

default_timezoneヨーロッパ/イスタンブールとtr_TR に変更intl.default_localeしました。

私はまだ英語で日付の名前を取得しています。

私は何が欠けていますか?

他の設定を変更する必要がありますか?

4

3 に答える 3

4

を使用することをお勧めしIntlDateFormatterます。これは PHP のintlモジュールで利用可能であり、この質問のタイトルから判断すると、この拡張機能は利用可能です。

サンプル/大まかな実装:

$locale = 'tr_TR'; // a canonicalized locale
$format = 'MMM e'; // ISO format codes, not the typical date ones
$dt = new DateTime(); // a DateTime object
$df = new IntlDateFormatter(
    $locale, // string locale
    IntlDateFormatter::NONE, // int date type
    IntlDateFormatter::NONE, // int time type
    'UTC', // string timezone
    IntlDateFormatter::GREGORIAN, // int cal type
    $format // string pattern
);
var_dump($dt->format('c')); // string '2014-06-25T08:22:48-07:00' (length=25)
var_dump($df->format($dt)); // string 'Haz 3' (length=5)

何よりもまず、任意の Intl* クラスを使用すると有益です。これは、または を使用して PHP のランタイム ロケールを常にリセットする必要がないためです (これにより、IMO が煩雑になる可能性がありますsetlocale) Locale::setDefault。これにより、非常に構造化された方法で、さまざまなロケールで簡単に出力/フォーマットできます。また、PHP5 の新しい OOPness の使用を推進しています。これ以上のdateナンセンスは必要ありませんDateTime。今すぐ使用する必要があります。

IntlDateFormatter コンストラクターには、次のようにかなり長い署名があります。

  1. $locale- 正規化されたロケール。選択したロケールをLocale::canonicalize.
  2. $dateType- これを 'none' (int) に設定し、最大限の柔軟性を得るため-1にフォーマット パラメーター ( ) を使用します。$pattern「ショート」、「ミディアム」、「ロング」、「フル」も受け入れます。詳細については、ICU プロジェクトのドキュメントを参照してください。
  3. $timeType- と同じ$dateTypeですが、代わりに時間を扱います。
  4. $timezone- これはのインスタンスではなくDateTimeZone、文字列のタイムゾーンです。PHP のDateクラスは intl のクラスと互換性がありません (メソッドなどの特定の組み込みアダプターは例外ですIntlDateFormatter::format)。
  5. $calendar- 通常はグレゴリオ暦 ( null) ですが、 のインスタンスも受け入れることができますIntlCalendar
  6. $patterndate- 使用する解析/レンダリング形式。これはの最初のパラメーターに相当すると考えてください。ただし、それらは同じではありません。ICU (このクラスが使用する下位ライブラリ) は、Zend Framework docsで十分に文書化されている ISO 形式を採用しています。たとえば'Y'、4 桁の年を使用する代わりに、 を使用します'yyyy'。ISO 形式は、PHP よりもはるかに堅牢です。

のインスタンスとIntlDateFormatterオブジェクトDateTimeを取得したら、2 つを結合して、 を使用して、指定されたロケールで必要な日付/時刻を含む文字列を指定された形式 (以前に定義したとおり) でレンダリングできますIntlDateFormatter::formatformatメソッドは単一の引数を受け入れます: のインスタンス--DateTime簡単です!

$instanceOfIntlDateFormatter->format($instanceOfDateTime);

おまけとして、このformatメソッドは (タイプの) さまざまなオブジェクトを取ることができmixedます。引用:

フォーマットする値。これは、DateTimeオブジェクト、IntlCalendar オブジェクト、エポックからの (場合によっては分数の) 秒数を表す数値型、または によって出力される形式の配列の場合がありますlocaltime()

timezone パラメータに関する注意:DateTimeバージョン PHP 5.5.0 で変更されました。回避策として以下を使用しました(詳細を思い出せないので、自分で解決してください)...

$timezoneForIntl = $instanceOfDateTime->getTimezone();
if ( version_compare(PHP_VERSION,'5.5.0','<') ) {
    $timezoneForIntl = $timezoneForIntl->getName();
}
于 2014-06-25T15:23:13.320 に答える