setlocale

Set locale information

&reftitle.description; ``string``false```setlocale` `int` `category` `string` `locales` `string` `rest`

Alternative signature (not supported with named arguments):

``string``false```setlocale` `int` `category` `array` `locale_array`

Sets locale information.

The locale information is maintained per process, not per thread. If you are running PHP on a multithreaded server API , you may experience sudden changes in locale settings while a script is running, though the script itself never called `setlocale`. This happens due to other scripts running in different threads of the same process at the same time, changing the process-wide locale using `setlocale`. On Windows, locale information is maintained per thread as of PHP 7.0.5.

&reftitle.parameters;

`category`

- `category` is a named constant specifying the category of the functions affected by the locale setting:

  - `LC_ALL` for all of the below

  - `LC_COLLATE` for string comparison, see `strcoll`

  - `LC_CTYPE` for character classification and conversion, for example `ctype_alpha`

  - `LC_MONETARY` for `localeconv`

  - `LC_NUMERIC` for decimal separator (See also `localeconv`)

  - `LC_TIME` for date and time formatting with `strftime`

  - `LC_MESSAGES` for system responses (available if PHP was compiled with `libintl`)

`locales`

- If `locales` is the empty string `""`, the locale names will be set from the values of environment variables with the same names as the above categories, or from "LANG".

  If `locales` is `"0"`, the locale setting is not affected, only the current setting is returned.

  If `locales` is followed by additional parameters then each parameter is tried to be set as new locale until success. This is useful if a locale is known under different names on different systems or for providing a fallback for a possibly not available locale.

`rest`

- Optional string parameters to try as locale settings until success.

`locale_array`

- Each array element is tried to be set as new locale until success. This is useful if a locale is known under different names on different systems or for providing a fallback for a possibly not available locale.

On Windows, setlocale(LC_ALL, '') sets the locale names from the system's regional/language settings (accessible via Control Panel).

&reftitle.returnvalues;

Returns the new current locale, or &false; if the locale functionality is not implemented on your platform, the specified locale does not exist or the category name is invalid.

An invalid category name also causes a warning message. Category/locale names can be found in RFC 1766 and ISO 639. Different systems have different naming schemes for locales.

The return value of `setlocale` depends on the system that PHP is running. It returns exactly what the system `setlocale` function returns.

&reftitle.examples;

### `setlocale` Examples

    <?php
    /* Set locale to Dutch */
    setlocale(LC_ALL, 'nl_NL');

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

    /* try different possible locale names for german */
    $loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
    echo "Preferred locale for german on this system is '$loc_de'";
    ?>

### `setlocale` Examples for Windows

    <?php
    /* Set locale to Dutch */
    setlocale(LC_ALL, 'nld_nld');

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

    /* try different possible locale names for german */
    $loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
    echo "Preferred locale for german on this system is '$loc_de'";
    ?>

&reftitle.notes;

Windows users will find useful information about `locales` strings at Microsoft's MSDN website. Supported language strings can be found in the language strings documentation and supported country/region strings in the country/region strings documentation.