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');
出力:
六月
代わりに
ジュニ
助言がありますか?
PHPバージョン5.6
このソリューションは、サーバーへのシェルアクセスがない場合に役立ちます。
シェルアクセスがある場合は、 ベンジャミンセイラーの答え が最適です!
他の可能性はないので(シェル)、PHP= IntlDateFormatterクラス を使用するだけで解決策が見つかりました。
<?php
// Example vars
$month = '6'; // 1-12
$year = '2014'; // four digit year
$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;
スクリプトを実行しているサーバーにドイツ語ロケールがインストールされていない可能性が非常に高い-サーバーへのシェルアクセスがありますか?それから試して
locale -a
インストールされているロケールを確認します。こちらもご覧ください setlocaleに依存し、インストールされているロケールに依存することは可能ですか?
あなたのコードは正しいです。おそらく、スクリプトを実行しているサーバーに正しい言語パッケージをインストールする必要があります。
ターミナルで、使用する言語がコマンド_Sudo locale -a
_の実行後にリストされていない場合、次のコマンドを実行して不足している言語をインストールする必要があります。
_Sudo /usr/share/locales/install-language-pack de_DE
_
(Sudo
は、ユーザーがルート権限を持っている場合はオプションです)
その後、_Sudo locale -a
_をダブルチェックすると、_de_DE.utf8
_が表示されます。
フランス語パッケージをインストールする場合は、実行します
_Sudo /usr/share/locales/install-language-pack fr_FR
_
次に、あなたがしたようにsetlocale(...)
を使用することでPHPでこれらの言語を設定することができます。
注: utf8以外のプロジェクトを使用している場合は、インストールされているパッケージから他の形式を生成する必要があります。以下は、ubuntuでの進め方です(debianでも同様です):
/ var/lib/locales/supported.d/csを編集し、次の行を追加します
_ fr_FR.iso88591 ISO-8859-1
fr_CA.iso88591 ISI-8859-1
_
そして走る
_ Sudo dpkg-reconfigure locales
_
その後、再度_Sudo locale -a
_を実行すると、リストにfr_FR.iso88591とfr_CA.iso88591の両方が表示され、setlocale(LC_ALL, 'fr_FR.iso88591');
Date()を探してここに来る人のために、月と曜日の名前をローカライズしません:
==注意を払う==
date()は英語でのみ月/日の名前を返すことができ、他の言語の翻訳を提供することはできません。
注:setlocale()の戻り値は、PHPが実行されているシステムによって異なります。システムのsetlocale関数が返すものを正確に返します。
ルートアクセス(debian)を持っている場合の解決策は次のとおりです。
編集する
/etc/locale.gen
使用する必要があるロケールを追加/削除できます。ファイルを保存した後、次を実行します。
locale-gen
そして、あなたは大丈夫でなければなりません。サーバーで変更を確認するには、Apacheを再起動する必要がありました。
これを試してください:
date_default_timezone_set('Europe/Berlin');
$loc=setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
echo strftime('%B');
基盤となるOSに応じて"de_DE"
およびその他の文字列が間違っている可能性があります。
Windowsでは、次のリストを参照してください。
通常、Winでは「DEU」または「GERMAN」です。
すでに言及した:
Linuxでは、シェルコマンドですべてのロケールを表示できます。
locale -a
私の場合、これは機能しません:
setlocale(LC_ALL, 'de_AT'); // false
これは機能しますが:
Locale::setDefault('de_AT'); // true
これは機能します:
setlocale(LC_ALL, 'de_AT.utf-8'); // true
ロケールプログラムの出力:
$ locale -a
[...]
C.UTF-8
de_AT.utf-8
de_DE.utf-8
en_AG
[...]