(PHP 4, PHP 5, PHP 7, PHP 8)
setlocale — 设置区域信息
$category
, string $locales
, string ...$rest
): string|false
替代签名(不支持命名参数):
$category
, array $locale_array
): string|false
设置区域信息。
区域信息是按进程维护的,而不是线程。如果在多线程服务器 API 上运行 PHP,区域设置可能在脚本运行时突然变化,尽管脚本本身并没有调用 setlocale()。这是因为其它脚本在同一时刻的同一进程的不同线程中运行,使用 setlocale() 改变了进程级别的区域。在 Windows 上,自 PHP 7.0.5 起,每个线程都维护自己的区域信息。
category
category
命名常量指定的受区域设置的功能类别:
LC_ALL
所有的设置
LC_COLLATE
字符串比较, 详见
strcoll()
LC_CTYPE
字符串的分类与转换, 参见例子
strtoupper()
LC_MONETARY
等同 localeconv()
LC_NUMERIC
对于小数点的分隔(另请参见
localeconv())
LC_TIME
时间与格式
strftime()
LC_MESSAGES
系统响应(如果 PHP 使用 libintl
编译)
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'";
?>