1

我有一个支持这 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;
}

在本地主机上,当我在语言之间切换时,周和月切换并且工作正常。但是在服务器上,它总是以英语显示给我。_SESSION['lang'] 工作正常并被更改,所以我不知道为什么当语言环境应该是 fr_FR 时它不显示法语。

可能是因为服务器上没有安装语言环境吗?还是有更好的方法来本地化这些字符串?

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

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

但这也不起作用(在 localhost 和服务器上都不起作用)

4

1 回答 1

3

好的,我刚刚发现了locale -a提供已安装语言环境列表的命令。在我的本地主机上,我已经安装了所有东西(我注意到我在做 en_EN,但这仍然“有效”),无论如何在服务器上,它只是 fr_CH(不确定 C 和 POSIX 的用途)所以我的 fr_FR 代码是'不工作,我猜一切都只是以某种方式默认为英语。

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

然后我不得不做sudo locale-gen

运行命令locale -a以验证语言环境列表

然后一个简单sudo /etc/init.d/apache2 restart的刷新页面 - 工作:)

于 2013-10-10T07:13:00.360 回答