Php 使用setLocale(LC_TIME)在网站中本地化周/月名称
我有一个网站支持这5种语言: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(
- 英式
- 法语的
- 德文
- 意大利人
- 西班牙文
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
,在: