5

Webサーバーにdutchlocal ()をインストールしましたnl_NL utf8(実行するlocale -aと表示nl_NL utf8されるので、これで問題ありません)。

しかし、私のウェブページの日付は英語です(私はsetlocale(LC_ALL, 'nl_NL');私のページの一番上に置きました)。phpをコンパイルした後にロケールパッケージをインストールするときに読んだので、phpを再コンパイルする必要があります。

しかし、phpを再コンパイルせずに、それを機能させるための他の解決策はありますか?

ありがとう!

4

3 に答える 3

13

ここに、同様の問題に直面していることがわかったことを要約します。これは、建設的な答えが明らかになく(間違った答え、確かに:setlocale()の出力が変わるstrftime())、他の人にも役立つ可能性があるためです。

PHPマニュアルによると

戻り値

新しい現在のロケールを返します。ロケール機能がプラットフォームに実装されていない場合、指定されたロケールが存在しない場合、またはカテゴリ名が無効な場合はFALSEを返します。

したがって、diagnosysの場合は、最初に、シェルまたはPHPを使用して、適切なロケール(nl_NL、nl_NL.UTF-8など)がインストールされていることを確認しますsystem('locale -a')。一部のubuntuシステムには、ロケールをインストールするためのスクリプトがあります。/usr/share/locales/install-language-pack nl_NLただし、apt-getを使用したインストールも検討される場合があります。(エキゾチックなロケールの場合は、ロケールがサポートされていることも確認してください:一部のシステムでは/usr/share/i18n/SUPPORTED)。

次に、を使用してsetlocale()の出力を取得できます(var_dump(setlocale('nl_NL'));単独setlocale()では何も出力されないため)。

解決策は、locale-gen nl_NL、nl_NLを使用してロケールを再生成することです。

その後、一部のシステムではupdate-locale(およびdpkg-reconfigure locales)が必要になる場合があります。

于 2013-08-31T20:34:10.543 に答える
2

これは仕様によるものである可能性があります。およびを使用して出力される日付の形式setlocale()の出力を自動的に変更しません。曜日と月の名前をローカライズしますが、それ以外はローカライズしません。date()strftime()

日付を出力する方法と、日付が変換されない方法の例をいくつか示していただけますか?

于 2010-09-12T09:12:53.860 に答える
0

もう一つ覚えておきたいことがあります。

ロケールがインストールされておらず、新しいロケールをインストールしたばかりの場合(たとえば、sudo locale-gen nl_NL.utf8およびsudo update-locale)、php-fpmを再起動する必要があります。たとえば、PHP8.1を実行しているsudo service php8.1-fpm restart場合は実行します。

ロケールの設定はコンソールでは問題なく機能しますが、Webアプリでは機能しないことに気付きました。ロケールは明らかにプロセス内にキャッシュされます。

于 2022-02-01T06:27:59.733 に答える