我正在尝试使用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'
这是从数据库中提取的。
为什么不工作?
答案 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));
这是不必要的复杂。您需要在数据库中以不同方式存储您的语言环境以简化它,现在它们的格式不适合此操作。