1. ホーム
  2. php

PHP の setlocale は何の効果もない

2023-07-25 19:34:24

質問

その setlocale() 関数は目的の言語(ドイツ語)を設定しません。


目標は月名を出力することです。

今までの試行錯誤の結果、このようなテストコードになりました。

<?php

date_default_timezone_set('Europe/Berlin');
setlocale(LC_ALL, 'de_DE.utf8');
// Or
setlocale(LC_ALL, 'de_DE@euro');
// Or
setlocale(LC_ALL, 'de_DE');
// Or
setlocale(LC_ALL, 'de');
// Or
setlocale(LC_ALL, 'ge');


echo strftime('%B');

出力します。

6月

ではなく

ジュニ

何か提案はありますか?

  • sshなどのシェルアクセス権がないのですが。
  • スクリプトは linux サーバーで実行されています。

PHPバージョン5.6

どのように解決するのですか?

サーバにシェルでアクセスできない場合、この解決策が役に立つかもしれません。

シェルアクセス権を持っている場合 Benjamin Seillerの回答 がベストです!

他の可能性がない(シェル)ので、PHPだけで解決する方法として IntlDateFormatter クラス .

<?php

// Example vars
$month = '6';
$year = '2014';

$fmt = new IntlDateFormatter('de_DE',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'Europe/Berlin',
    IntlDateFormatter::GREGORIAN);

$lastMonth = mktime(0, 0, 0, $month -1, 1, $year);

$showLastMonth =  $fmt->format($lastMonth);
echo $showLastMonth;