ロケール情報を設定する

# setlocale

(PHP 4, PHP 5, PHP 7, PHP 8)

setlocale — ロケール情報を設定する

### 説明

function setlocale(int `$category`, ?string `$locales`, string `...$rest`): string|false

代替のシグネチャ (名前付き引数をサポートしていません):

function setlocale(int `$category`, array `$locale_array`): string|false

ロケール情報を設定します。

警告

ロケール情報は、スレッド毎ではなくプロセス毎に維持されます。 もし PHP を マルチスレッドサーバーAPI 上で動作させている場合、 スクリプトを実行している間にロケールの設定が突然変わるのを 経験するかも知れませんが、スクリプト自身は決して setlocale() 自身をコールしていません。 これは同時に同一プロセスの異なるスレッドで実行されている他のスクリプトが setlocale() を使用してプロセスワイドなロケールを変更する事により発生します。 Windows では、PHP 7.0.5 以降、 ロケール情報はスレッド単位で維持されるようになっています。

### パラメータ

`category`

  `category`は、名前付きの定数(または文字列)であり、 ロケール設定により影響を受ける関数のカテゴリを指定します。

  - `LC_ALL` 以下のものすべて
  - `LC_COLLATE` 文字列の比較用。strcoll() も参照
  - `LC_CTYPE` 文字の分類と変換。たとえば ctype_alpha()
  - `LC_MONETARY` localeconv() 用
  - `LC_NUMERIC` 数字の区切り文字用(localeconv() も参照ください)
  - `LC_TIME` 日時。strftime()でフォーマットに使用
  - `LC_MESSAGES` システムの応答用(PHP が `libintl` とともにコンパイルされている場合のみ使用可能)
`locales`

  `locales`が空の文字列 `""` または `null` の場合、 ロケール名は上記のカテゴリと同じ名前の環境変数の値、 または環境変数 "LANG" からセットされます。

  `locales` が `"0"` の場合、 ロケール設定は適用されず、単に現在の設定が返されます。

  `locales` に追加のパラメータが続く場合、 それぞれのパラメータは成功するまで新規ロケールとしてセットされます。 これは、ロケールが異なるシステムで異なる名前を持っている、 もしくはロケールが利用できない場合のフォールバックを提供するといった場合に有用です。

`rest`

  オプションの文字列。ロケール設定が成功するまで設定を試みます。

`locale_array`

  それぞれの配列の要素が、 新しいロケールとして設定が成功するまで設定を試みます。 これは、異なるシステムでロケールが違う名前として認識されたり、 ロケールが利用できない可能性がある場合にフォールバックさせる目的で使うと便利です。

> 注意:

> Windows では、setlocale(LC_ALL, '') を使用するとシステムの 地域と言語の設定の値を使用します (コントロールパネルで確認できます)。

### 戻り値

現在の新しいロケールを返します。ロケール機能が未実装、 指定されたロケールが存在しない、カテゴリ名が無効などの場合は `false` を返します。

また、カテゴリ名が無効の場合は警告メッセージが発生します。 カテゴリやロケール名は、 » RFC 1766 や » ISO 639 にあります。 ロケールの命名方式は、システムによって異なります。

> 注意:

> setlocale() の戻り値は、 PHP が実行されているシステムに依存します。 システムの `setlocale` 関数が返す値を返すためです。

### 変更履歴

バージョン | 説明
--- | ---
8.5.0 | `locales` 引数に整数 `0` を渡すことはサポートされなくなり、 TypeError がスローされるようになりました。

### 例

例1 setlocale() の例

    <?php
    /* ロケールをオランダ語に設定 */
    setlocale(LC_ALL, 'nl_NL');

    /* 出力: vrijdag 22 december 1978 */
    echo strftime("%A %e %B %Y", mktime(0, 0, 0, 12, 22, 1978));

    /* ドイツに対して利用可能な異なるロケール名を使用する */
    $loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
    echo "Preferred locale for german on this system is '$loc_de'";
    ?>

例2 setlocale() で現在の設定を取得する

    <?php
    /* Retrieve current setting */
    $current = setlocale(LC_ALL, null);

    echo "Current locale '$current'";
    ?>

例3 Windows での setlocale() の例

    <?php
    /* ロケールをオランダ語に設定 */
    setlocale(LC_ALL, 'nld_nld');

    /* 出力: vrijdag 22 december 1978 */
    echo strftime("%A %d %B %Y", mktime(0, 0, 0, 12, 22, 1978));

    /* ドイツに対して利用可能な異なるロケール名を使用する */
    $loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
    echo "Preferred locale for german on this system is '$loc_de'";
    ?>

### 注意

ヒント

Windows ユーザーは Microsoft の MSDN の Web サイトに `locales` 文字列に関する有用な情報を見つけることができるでしょう。 サポートしている言語文字列は » 言語文字列のドキュメント、 そしてサポートしている国/地域文字列は » 国/地域文字列のドキュメント にあります。

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open