1

私はこれを正しく理解することも理解することもできないようです。

私はこのコードを持っています:

putenv('LC_ALL=eng_US.UTF-8');
var_dump(setlocale(LC_ALL, 'eng_US.UTF-8', 'eng_US'));

Windows での出力

string 'English_United States.1252' (length=26)

Linux での出力

bool(false)

Linux は en_US で動作しますが、Windows では動作しません。Windows はフォルダー eng_US を検索し、Linux は en_US を検索します。

誰かがこれに対する解決策を見つけましたか? または、OS に関係なく考慮されるカスタム文字列を配置する方法はありますか?

(追加する必要があります。私は Windows-7 で WAMP を使用しており、Linux マシンは nginx + php-fpm を備えた CentOS です)

4

1 に答える 1

2

ロケール名はプラットフォームに依存します。

あなたが望むほとんどのUNIXシステムで<two letter language code>_<two letter country code>[.<optional encoding>]。コマンド ラインを使用して、locale -a有効なロケール名を一覧表示できます。

適切な Windows ロケールは、言語と国に完全な名前を使用し、エンコード名の代わりにコード ページ番号を使用することを除いて、同じ X_X[.X] スキームを使用しますEnglish_United States.1252。Windows には、他の文字列を理解するためのヒューリスティックもあるようですが、Unix スタイルのロケール名には対応していないようです。また、Windows は、名前 'UTF-8' で指定するか、コードページ番号 '65001' を使用して指定するかに関係なく、ロケール エンコーディングとして UTF-8 をサポートしません。

ご存じのように、Windows と他のプラットフォームのロケール名は異なります。すべてのプラットフォームで同じ文字列を使用することはできません。代わりに、現在のプラットフォームに適した文字列を使用するコードを記述する必要があります。

if Linux
    return "en_US.UTF-8"
if Windows
    return "English_United States.1252"
于 2012-08-22T19:43:51.613 に答える