«Буржуский» 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 сентябрь» не встречал.
Комментарии
Отправить комментарий