php setlocales第二个参数为字符串

时间:2014-01-09 07:50:20

标签: php localization

我正在尝试使用php setlocale()来表示日期。 设置如下:

setlocale(LC_TIME, 'pl_utf8','Polish','pl.UTF-8','Polish_Poland.1250','WINDOWS-1250');

工作正常,但如果我使用存储第二个参数的变量,如:

setlocale(LC_TIME,$ locale);

它不起作用。

现在var $ locale包含确切的字符串'pl_utf8','Polish','pl.UTF-8','Polish_Poland.1250','WINDOWS-1250' 这是从数据库中提取的。

为什么不工作?

2 个答案:

答案 0 :(得分:1)

因为$locale = 'pl_utf8','Polish','pl.UTF-8','Polish_Poland.1250','WINDOWS-1250';不是有效的PHP代码(逗号的原因)。

如官方文档中所描述的那样setlocale()使用数组来表示多个值:

$locales = array('pl_utf8','Polish','pl.UTF-8','Polish_Poland.1250','WINDOWS-1250');

并用它调用setlocale()。

setlocale(LC_TIME, $locales); 

答案 1 :(得分:1)

$locale = "'foo','bar','baz'";
setlocale(LC_TIME, $locale);

相同
setlocale(LC_TIME, "'foo','bar','baz'");

不一样
setlocale(LC_TIME, 'foo', 'bar', 'baz');

后者传递4个单独的参数,前两个版本只传递2个参数,第二个参数不是setlocale理解的格式。或者传递多个字符串,您也可以传递一个数组:

setlocale(LC_TIME, array('foo', 'bar', 'baz'));

但要将字符串"'foo','bar','baz'"转换为数组array('foo', 'bar', 'baz')的形式,您必须执行以下操作:

$locales = array_map(function ($l) { return trim($l, "'"); }, explode(',', $locale));

这是不必要的复杂。您需要在数据库中以不同方式存储您的语言环境以简化它,现在它们的格式不适合此操作。