setlocale()
功能未设置所需的语言(德语)。
目标是输出月份名称。
到目前为止,这是我的测试代码:
<?php
date_default_timezone_set('Europe/Berlin');
setlocale(LC_ALL, 'de_DE.utf8');
// Or
setlocale(LC_ALL, 'de_DE@euro');
// Or
setlocale(LC_ALL, 'de_DE');
// Or
setlocale(LC_ALL, 'de');
// Or
setlocale(LC_ALL, 'ge');
echo strftime('%B');
输出:
六月
而不是
六月
有什么建议吗?
PHP 5.6版
答案 0 :(得分:84)
很可能在您运行脚本的服务器上没有安装德语语言环境 - 您是否具有对服务器的shell访问权限? 然后尝试
locale -a
查看安装了哪些区域设置。另请查看Is it feasible to rely on setlocale, and rely on locales being installed?
答案 1 :(得分:26)
您的代码是正确的。您可能只需要在运行脚本的服务器上安装正确的语言包。
在终端中,如果在运行命令sudo locale -a
时未列出您要使用的语言,则必须通过运行以下命令来安装它:
sudo /usr/share/locales/install-language-pack de_DE
(如果您的用户具有root权限,sudo
此处是可选的)
然后,如果您仔细检查sudo locale -a
,则应该看到de_DE.utf8
。
如果要安装法语语言包
sudo /usr/share/locales/install-language-pack fr_FR
然后,您将被允许使用setlocale(...)
将您的语言设置为PHP语言。
注意:强> 如果您在非utf8项目中,则需要从已安装的软件包生成其他格式。 以下是如何继续ubuntu(这也是关于debian的工作):
编辑 /var/lib/locales/supported.d/cs 并添加以下行
fr_FR.iso88591 ISO-8859-1
fr_CA.iso88591 ISI-8859-1
并运行
sudo dpkg-reconfigure locales
然后再次运行sudo locale -a
您应该会在列表中看到 fr_FR.iso88591 和 fr_CA.iso88591 ,您可以通过调用{在php中使用它{1}}
答案 2 :(得分:16)
对于那些来这里寻找日期()的人来说,没有本地化月份和工作日名称:
==注意==
date()只能以英文返回月/日名称,并且无法为您提供其他语言的翻译。
答案 3 :(得分:10)
如果您没有对服务器的shell访问权限,此解决方案可能有所帮助。
如果你有shell访问权限,那么Benjamin Seiller's answer是最好的!
由于我没有任何其他可能性(shell),我通过使用IntlDateFormatter class找到了仅使用PHP的解决方案。
<?php
// Example vars
$month = '6'; // 1-12
$year = '2014'; // four digit year
$fmt = new IntlDateFormatter('de_DE',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'Europe/Berlin',
IntlDateFormatter::GREGORIAN);
$lastMonth = mktime(0, 0, 0, $month -1, 1, $year);
$showLastMonth = $fmt->format($lastMonth);
echo $showLastMonth;
答案 4 :(得分:6)
PHP manual page for 'setlocale' sais:
注意:setlocale()的返回值取决于PHP的系统 在跑。它准确返回系统setlocale 函数返回。
如果你有root访问权限(debian),这里是解决方案:
修改
/etc/locale.gen
您可以添加/删除需要使用的区域设置。保存文件后运行:
locale-gen
你应该没事。在我的服务器上,我不得不重启Apache以查看更改。
答案 5 :(得分:5)
试试这个:
date_default_timezone_set('Europe/Berlin');
$loc=setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
echo strftime('%B');
答案 6 :(得分:4)
取决于底层操作系统"de_DE"
,其他可能是错误的字符串。
在Windows下,请参阅此列表:
通常在胜利下是“DEU”或“GERMAN”。
已经提到:
在Linux下,您可以使用shell命令查看所有语言环境:
locale -a
答案 7 :(得分:4)
这太痛苦了。
我想将日期转换为西班牙语,并且它可以在我的本地主机上工作,但不能在服务器上工作(Ubuntu 18)。原来我没有正确的语言环境软件包。
首先,我检查了已安装的软件包以确保它们不存在
locale -a
然后我使用脚本安装了西班牙语UTF
sudo pkg-reconfigure locales
然后我花了好几个小时将头撞到桌子上,直到意识到您需要重新开始付款!
sudo service apache2 restart
这就是我故事的结尾。希望对您有所帮助。
答案 8 :(得分:0)
对于我来说,这是行不通的:
node ("h")
这确实可行:
setlocale(LC_ALL, 'de_AT'); // false
这确实有效:
Locale::setDefault('de_AT'); // true
语言环境程序的输出:
setlocale(LC_ALL, 'de_AT.utf-8'); // true
答案 9 :(得分:-1)
如果您使用的是 Red Hat计算机,则可以运行:
localedef -v -c -i de_DE -f UTF-8 de_DE.UTF-8
然后重启Apache服务器
答案 10 :(得分:-1)
apt-get install -y locales locales-all