问题描述
代码:
<?php
setlocale(LC_ALL, 'ru_RU');
$date_ru = strftime('%d %B %Y', strtotime('2018-01-31'));
echo($date_ru);
?>
输出:
1)本地服务器: 2018年11月31日
1) Local Server: 31 января 2018
2)远程服务器: 31 2018年
2) Remote Server: 31 ������ 2018
(恰好是那些奇怪的符号,而不是月份名称).
(exactly those strange symbols instead of month-name).
设置:
我已经检查了安装了local -a
的语言环境,并运行php -i
以获取有关这两个服务器的信息.
I've checked locales installed with local -a
and run php -i
to get info about both servers.
本地服务器:
- ru_RU
- ru_RU.CP1251
- ru_RU.CP866
- ru_RU.ISO8859-5
- ru_RU.KOI8-R
- ru_RU.UTF-8
...以及所有其他语言的所有其他可能的语言环境...
... and all the rest possible locales in all languages...
-
$ _ SERVER ['LANG'] => ru_RU.UTF-8
$_SERVER['LANG'] => ru_RU.UTF-8
PHP版本=> 7.1.12
PHP Version => 7.1.12
远程服务器:
- C
- C.UTF-8
- en_US.utf8
- POSIX
- ru_RU
- ru_RU.iso88595
-
ru_RU.utf8
- C
- C.UTF-8
- en_US.utf8
- POSIX
- ru_RU
- ru_RU.iso88595
ru_RU.utf8
$ _ SERVER ['LANG'] => ru_RU.UTF-8
$_SERVER['LANG'] => ru_RU.UTF-8
PHP版本=> 7.0.22-0ubuntu0.16.04.1
PHP Version => 7.0.22-0ubuntu0.16.04.1
如何在远程服务器上获得与本地服务器相同的输出?
更新:如果我更改为setlocale(LC_ALL, 'ru_RU.UTF-8');
Update:If I change to setlocale(LC_ALL, 'ru_RU.UTF-8');
本地服务器: 2018年11月31日(与更改前一样)
Local Server: 31 января 2018 (as before change)
远程服务器: 2018年9月31日
Remote Server: 31 Январь 2018
尽管我在这里没有得到奇怪的符号,但结果并不令人满意.这里的最后一个字母是最重要的.当'Январь'是主格(不是我所需要的)时,'января'是泛型格(我想要的).
Although I don't get strange symbols here, the result is not satisfactory.the last letter here is the most important. 'января' is genetive case (what I want) when 'Январь' is nominative (not what I need).
推荐答案
问题是Ubuntu的服务器软件包使用的本地语言环境与我在本地环境中使用的语言环境不同.我无法将本地语言环境从本地语言环境导入到Ubuntu(如果可能的话,那肯定会很奇怪),所以我只是写了一种解决方法(简单的函数将Январь"之类的月份名称转换为января"等.)
The problem was that Ubuntu's server package used different locales than those I had in my local environment.I couldn't import locales from my local to Ubuntu (wonder if it's possible at all), so i just wrote a workaround (simple function to convert month-names like 'Январь' to 'января' etc..)
function convert($str) {
$rus = array('/январь/ui', '/февраль/ui', '/март/ui', '/апрель/ui', '/май/ui', '/июнь/ui', '/июль/ui', '/август/ui', '/сентябрь/ui', '/октябрь/ui', '/ноябрь/ui', '/декабрь/ui');
$lat = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
// return str_ireplace($rus, $lat, $str);
return preg_replace($rus, $lat, $str);
}
这篇关于Ubuntu Php语言环境ru_RU无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!