Ubuntu Php Locale ru_RU无法正常工作

时间:2018-01-19 17:13:28

标签: php date locale

代码:

<?php

      setlocale(LC_ALL, 'ru_RU');

      $date_ru = strftime('%d %B %Y', strtotime('2018-01-31'));

      echo($date_ru);

?>

输出:

1)本地服务器:31января2018

2)远程服务器: 31 2018

(正是那些奇怪的符号而不是月份名称)。

设置:

我已检查使用local -a安装的区域设置并运行php -i以获取有关这两台服务器的信息。

本地服务器:

  • ru_RU
  • ru_RU.CP1251
  • ru_RU.CP866
  • ru_RU.ISO8859-5
  • ru_RU.KOI8-R
  • ru_RU.UTF-8

...以及所有其他可能的语言环境......

  • $ _ SERVER ['LANG'] =&gt; ru_RU.UTF-8

  • PHP版本=&gt; 7.1.12

远程服务器:

  • C
  • C.UTF-8
  • en_US.utf8
  • POSIX
  • ru_RU
  • ru_RU.iso88595
  • ru_RU.utf8

  • $ _ SERVER ['LANG'] =&gt; ru_RU.UTF-8

  • PHP版本=&gt; 7.0.22-0ubuntu0.16.04.1

如何让远程服务器上的输出与本地输出相同?

更新: 如果我改为setlocale(LC_ALL, 'ru_RU.UTF-8');

本地服务器: 31января2018(如更改前)

远程服务器: 2018年2月31日

虽然我在这里没有得到奇怪的符号,但结果并不令人满意。 这里的最后一封信是最重要的。当'Январь'是主格(不是我需要的)时,'января'是具有创造性的情况(我想要的)。

1 个答案:

答案 0 :(得分:0)

问题在于Ubuntu的服务器包使用的语言环境与我在本地环境中使用的语言环境不同。 我无法从本地导入到Ubuntu的区域设置(想知道它是否可能),所以我只写了一个解决方法(简单的函数将'Январь'等月份名称转换为'января'等等。)

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);

}