3 сентября 2011 г.

«Буржуский» Drupal не может нормально по-русски показать дату. Может или «3 сентябрь, 2011» или «3 сен 2011» или «03.09.2011» и еще многими способами, не может просто по-человечески написать «3 сентября 2011 г.». Ниже код, который нужно вставить в тему в файл template.php, чтобы это пофиксить. Если там уже есть функция phptemplate_comment_submitted и/или phptemplate_node_submitted, то в них надо format_date поменять на format_date2 и вторым параметром указать 'large'.

Этот код более-менее поддерживает и некоторые другие языки, например, так: http://www.sfu-kras.ru/cn.


global $_format_date2_monthes;

$_format_date2_monthes['large']['ru'] = array('', 'января', 'февраля', 'марта', 'апреля',
	'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
$_format_date2_monthes['large']['en'] = array('', 'january', 'february', 'march',
	'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december');
$_format_date2_monthes['medium']['ru'] = array('', 'янв', 'фев', 'мар', 'апр', 'мая',
	'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек');
$_format_date2_monthes['medium']['en'] = array('', 'jan', 'feb', 'mar', 'apr', 'may',
	'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec');

// type=[small,medium,large], language=[ru,en,cn,es,de]
function format_date2($timestamp, $type = 'medium', $language = NULL) {
    if (empty($language)) $language = $GLOBALS['language']->language;
    if ($language == 'zh-hans') return date('Y年m月d日', $timestamp);
    $small = date('d.m.Y', $timestamp);
    if ($type == 'small') return $small;
    global $_format_date2_monthes;
    list($day, $month, $year) = explode(".", $small);
    $day = (int) $day; $month = (int) $month; $year = (int) $year;
    $month = $_format_date2_monthes[$type][$language][$month];
    if (empty($month)) return $small;
    $result = "$day $month $year";
    if ($language == 'ru') $result .= " г.";
    return $result;
}

function phptemplate_comment_submitted($comment) {
  return t('Submitted by !username on @datetime.',
    array(
      '!username' => theme('username', $comment),
      '@datetime' => format_date2($comment->timestamp, 'large')
    ));
}

function phptemplate_node_submitted($node) {
  return t('Submitted by !username on @datetime',
    array(
      '!username' => theme('username', $node),
      '@datetime' => format_date2($node->created, 'large'),
    ));
}

Код для 6-ки. Я его обычно вставляю в самодельный модуль functions, чтобы можно было использовать из других модулей. Но можно и в template.php влепить. Ещё там же есть у меня функция format_dates2 для форматирования диапазонов дат типа «15–16 сен 2011 г.» как тут http://news.sfu-kras.ru/node/8630.

ЗЫ: Может это даже проблемы не Drupal, а PHP, но факт, что называется, «на лице». В той же Joomla я такого безобразия как «3 сентябрь» не встречал.

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • E-mail будут шифроваться для защиты от спам-ботов.

Подробнее о форматировании