Как сделать дату на русском языке в DLE?

slaviktorres
На сайте с 05.12.2010
Offline
183
1437

Подскажите, как в ДЛЕ сделать дату на русском языке, то есть название месяца, сейчас оно на английском.

[umka]
На сайте с 25.05.2008
Offline
456
#1

А в настройках язык русский?

Лог в помощь!
slaviktorres
На сайте с 05.12.2010
Offline
183
#2
[umka:
;13426602]А в настройках язык русский?

В каких настройках?

[umka]
На сайте с 25.05.2008
Offline
456
#3
slaviktorres:
В каких настройках?

В настройках DLE. "Используемый язык".

Если там "Русский", то на сервере, скорее всего, проблема с локалями.

slaviktorres
На сайте с 05.12.2010
Offline
183
#5
'[umka:
;13426748']В настройках DLE. "Используемый язык".
Если там "Русский", то на сервере, скорее всего, проблема с локалями.

Забыл уточнить, в стандартном варианте дата на русском, а вот в коде ниже на английском, это вывод даты которая разделяет новости в списке, как поправить код, чтобы дата стала на русском?

открываете файл /engine/modules/show.short.php и сразу после строки
Код:
while ( $row = $db->get_row( $sql_result ) ) {
вставляете конструкцию вида
Код:
if (!isset($cur_date) || $cur_date != date('d F', strtotime($row['date']))) {
$cur_date = date('d F', strtotime($row['date']));
$tpl->set('{cur_date}', $cur_date);
} else {
$tpl->set('{cur_date}', '');
}
затем открываете шаблон короткой новости (обычно это shortstory.tpl) и в нужном месте вставляете тег {cur_date}
[umka]
На сайте с 25.05.2008
Offline
456
#6

Функция date() не выводит локализованные даты.

date('d F') будет выдавать строку вида "15 January".

Чтобы получить "15 Января", нужно использовать другую функцию.

if (!isset($cur_date) || $cur_date != strftime('%d %A', strtotime($row['date']))) {
$cur_date = strftime("%d %A", strtotime($row['date']));

И перед этим должна быть установлена соответствующая локаля.

Например так:

setlocale(LC_TIME, "ru_RU.UTF-8");

Если в движке нет встроенного функционала вывода локализованных дат, это очень и очень странно.

Если он есть, то нужно использовать его и не использовать костыли в коде.

slaviktorres
На сайте с 05.12.2010
Offline
183
#7

[umka], Спасибо, ваш вариант работает, хватило только вставить эти строчки.

if (!isset($cur_date) || $cur_date != strftime('%d %A', strtotime($row['date']))) {
$cur_date = strftime("%d %A", strtotime($row['date']));

Еще вопрос, что значит локальная дата, и как сделать, чтобы дата писалась не 15 Январь, а 15 Января?

---------- Добавлено 15.01.2015 в 19:41 ----------

Нашел правильный вариант решения, надо было использовать функцию langdate, она делает дату на русском используя родные функции DLE, и месяц теперь пишется не 15 Январь, а 15 Января.

if (!isset($cur_date) || $cur_date != langdate('d F', strtotime($row['date']))) {
$cur_date = langdate('d F', strtotime($row['date']));
$tpl->set('{cur_date}', $cur_date);
} else {
$tpl->set('{cur_date}', '');
}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий