setlocale

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

setlocale设置区域信息

说明

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

替代签名(不支持命名参数):

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

设置区域信息。

警告

区域信息是按进程维护的,而不是线程。如果在多线程服务器 API 上运行 PHP,区域设置可能在脚本运行时突然变化,尽管脚本本身并没有调用 setlocale()。这是因为其它脚本在同一时刻的同一进程的不同线程中运行,使用 setlocale() 改变了进程级别的区域。在 Windows 上,自 PHP 7.0.5 起,每个线程都维护自己的区域信息。

参数

category

category 命名常量指定的受区域设置的功能类别:

locales

如果 locales 是空字符串 "",则区域名将从跟上述类别同名的环境变量的值或“LANG”中设置。

如果 locales"0",则区域设置不受影响,仅返回当前设置。

如果 locales 后跟附加参数,则每个参数都会尝试设置为新的区域,直至成功。对于以下情况非常有用:不同的系统已知的区域名称不同;为可能无效的区域提供后备。

rest

可选的字符串参数,尝试作为区域设置,直至成功。

locale_array

尝试将数组中的每个元素设置为新的区域,直至成功。对于以下情况非常有用:不同的系统已知的区域名称不同;为可能无效的区域提供后备。

注意:

在 Windows 中,setlocale(LC_ALL, '') 从系统中的区域/语言设置(通过控制面板访问)中设置区域设置信息。

返回值

返回新的当前区域,如果区域功能没有在当前平台实现、指定区域不存在或类别名无效时返回 false

无效的类别名也会导致警告消息。类别/区域名可以在 » RFC 1766» ISO 639 中找到。不同的系统有不同的区域命名方案。

注意:

setlocale() 的返回值依赖运行 PHP 的系统。它准确返回系统 setlocale 函数返回的内容。

示例

示例 #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 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 网站上找到有关 locales 字符串的有用信息。支持的语言字符串可在» 语言字符串文档中找到,支持的国家/区域字符串可在» 国家/区域文档中找到。