Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用setLocale(LC_TIME)在网站中本地化周/月名称_Php_Locale_Setlocale - Fatal编程技术网

Php 使用setLocale(LC_TIME)在网站中本地化周/月名称

Php 使用setLocale(LC_TIME)在网站中本地化周/月名称,php,locale,setlocale,Php,Locale,Setlocale,我有一个网站支持这5种语言: 英式 法语的 德文 意大利人 西班牙文 用户可以根据需要在两种语言之间进行交换。我有一个页面,以文本形式显示工作日日期月份,如: 1月12日星期一 我的代码是: setlocale(LC_TIME, $_SESSION['lang'] . "_" . strtoupper($_SESSION['lang'])); foreach($data['Location']['Day'] as $key => $val) { $date = strftime(

我有一个网站支持这5种语言:

  • 英式
  • 法语的
  • 德文
  • 意大利人
  • 西班牙文
用户可以根据需要在两种语言之间进行交换。我有一个页面,以文本形式显示工作日日期月份,如:

1月12日星期一

我的代码是:

setlocale(LC_TIME, $_SESSION['lang'] . "_" . strtoupper($_SESSION['lang']));

foreach($data['Location']['Day'] as $key => $val) {
  $date = strftime("%A %e, %B", strtotime($val['@attributes']['val']));
  $data['Location']['Day'][$key]['date'] = $date;
}
在localhost上,当我在两种语言之间切换时,周和月切换并正常工作。然而在服务器上,它总是以英语显示给我_SESSION['lang']工作正常,并且会被更改,所以我不知道为什么当语言环境应该是fr_fr时它不显示法语

可能是因为服务器上没有安装区域设置吗?还是有更好的方法来定位这些字符串

编辑:我还尝试在setlocale调用中添加“.utf8”,如下所示:

setlocale(LC_TIME, $_SESSION['lang'] . "_" . strtoupper($_SESSION['lang']) . ".utf8");

但是这也不起作用(在localhost上不起作用,在服务器上也不起作用)

好的,我刚刚发现了命令
locale-a
,它给出了已安装的locale的列表。在我的本地主机上,我安装了所有的东西(我注意到我正在安装en_-en,但仍然“有效”),不管怎样,在服务器上,它只是fr_-CH(不确定C和POSIX的用途),所以我的fr_-fr代码不起作用,我想所有东西都默认为英语

我发现我必须手动编辑文件:
/etc/locale.gen
,并取消对所需语言的注释

然后我不得不做
sudo locale gen

运行命令
locale-a
,验证区域设置列表


然后,一个简单的
sudo/etc/init.d/apache2重启
并刷新页面-works:)

替代文件编辑的方法是运行
sudo-apt-get-install-language-pack XX
,其中XX是您的语言代码,de,fr等,然后使用
sudo服务php7.0-fpm-sp重启重新启动PHP
,在: