多言語サイト向けの PHP date() の翻訳 質問する

多言語サイト向けの PHP date() の翻訳 質問する

PHP 内部の date() 関数の条件付き変換を作成しようとしています。このテストに基づいて、異なる文字列が PHP 関数の残りの部分に入力されるように、内部変数 (date('M')、date('y') など) を何らかの方法で再定義することは可能ですか。

if (ICL_LANGUAGE_CODE == 'fr') { }

以下は、dates モジュールに使用しているコードの動作例です。$dateこの定義には多くの変数が含まれているdate()ため、各キー内で変数を 100 回以上再定義しなくても済むように、PHP の first 内で条件付きで変数を再定義することが重要です。

if($start <= $end):
    if($start == $end):
        //Month Day, Year
        $date =  date('F', $start).' '.date('j',$start).', '.date('Y', $start);
    else:
        if($start_year == $end_year):
            if($start_month == $end_month):

                //Month Day - Day, Year
                $date = date('F', $start).' '.date('j',$start).' - '.date('j', $end).', '.date('Y', $start);
            else:
                //Month Day - Month Day, Year
                $date =  date('F', $start).' '.date('j',$start).' - '.date('F', $end).' '.date('j', $end).', '.date('Y', $start);
            endif;
        else:
            //Month Day, Year - Month Day, Year
            $date =  date('F', $start).' '.date('j',$start).', '.date('Y', $start).' - '.date('F', $end).' '.date('j', $end).', '.date('Y', $end);
        endif;
    endif;
endif;

ベストアンサー1

ロケールに基づいて日付/時刻スタンプを操作する必要があるときは、strftime:

switch ($lang) {
    case 'en':
        setlocale(LC_TIME, 'en_CA.UTF-8');
        echo strftime("%B %e, %G");
        break;
    case 'fr':
        setlocale(LC_TIME, 'fr_CA.UTF-8');
        echo strftime("%e %B %G");
        break;
}

結果:

February 11, 2011  // en
11 février 2011    // fr

もちろん、システムにロケールをインストールする必要があります。Ubuntu の場合の例:

bash-4.1$ sudo locale-gen fr_CA.UTF-8

2022年5月に編集

strftime()PHP 8.1.0 以降は非推奨となりました

次のように実行します。

$fmt = datefmt_create(
    'pt_BR', // The output language.
    pattern: "cccc, d 'de' LLLL 'de' YYYY" // The output formatting.
);
$input = strtotime(date('d-m-Y'));
$output = datefmt_format($fmt, $input);

var_dump($output); // Outputs "segunda-feira, 20 de junho de 2022".

使用に関してはstrtotime()

  • アメリカの M/D/Y 形式の場合はスラッシュ (/)。
  • ヨーロッパDMYフォーマットの場合はダッシュ(-)
  • ISO YMD 形式のピリオド (.)。

私のサンプルでは、​​ヨーロッパの日-月-年の形式を使用しています。

ここをクリック$patternパラメータの値をどのようにフォーマットするかを確認しますdatefmt_create()

intl パッケージがインストールされている必要があります:

$ sudo apt install php8.1-intl

8.1作業している PHP バージョンに合わせてビットを変更します。

おすすめ記事