Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
cyrax_02

Последние темы: английские даты

Рекомендованные сообщения

Могу предположить, что причиной сабжевой проблемы стал патч

Этот патч не затрагивает ничего, что связано с локалью и форматированием даты.

 

Другая возможная причина - определённая комбинация стандартных настроек IP.Board приводит к сабжевому артефакту.

Тогда бы скорее даты слетели везде, а не только в определенном месте.

Поделиться сообщением


Ссылка на сообщение

В общем, что мне сейчас нужно: найти место в исходных кодах IP.Board, где непосредственно получается строковое представление даты

/admin/sources/classes/class_localization.php

class_localization::getDate

 

Через это место форматируются все даты на форуме. И то, что метка там сработает ничего по сути не даст. Если дата на английском, значит локаль каким-то образом "слетает". Поиски нужно начать с хука, определив там какая текущую локаль класса.

Поделиться сообщением


Ссылка на сообщение

Навскидку:

а) хук "Последние темы" перед использованием функции strftime русскую локаль не устанавливает

б) код хука "Последние темы" выполняется раньше остального кода (логично, т.к. плавающий блок (float: right) в шаблоне расположен выше и обрабатывается в первую очередь)

 

Сейчас проверю...

Поделиться сообщением


Ссылка на сообщение

хук "Последние темы" перед использованием функции strftime русскую локаль не устанавливает

Локаль устанавливается при загрузке класса class_localization

 

код хука "Последние темы" выполняется раньше остального кода

Шаблонные хуки выполняются после отработки основного шаблона. Даже если б было на наоборот, сначала загружается ядро, потом модули которые вызывают нужные им шаблоны.

Поделиться сообщением


Ссылка на сообщение
Навскидку:

а) хук "Последние темы" перед использованием функции strftime русскую локаль не устанавливает

б) код хука "Последние темы" выполняется раньше остального кода (логично, т.к. плавающий блок (float: right) в шаблоне расположен выше и обрабатывается в первую очередь)

 

Всё так и есть. Хук не устанавливает локаль, указанную в свойствах текущего языкового пакета. Вернее, ядро IP.Board устанавливает локаль только после обработки некоторых хуков, в число которых попал "Последние темы".

 

Если вот здесь

/admin/applications/forums/sources/classes/forums/class_forums.php

class_forums::hooks_recentTopics()

public function hooks_recentTopics( $topicCount=5, $output=true )
{
...
return $this->registry->output->getTemplate('boards')->hookRecentTopics( $topics_rows );
...
}

перед вызовом hookRecentTopics добавить код установки локали:

setlocale(LC_ALL, 'ru_RU.utf8');

то в блоке "Последние темы" все даты становятся русскими.

 

Недоработка разработчиков. Впрочем, может, в 4-й версии исправили...

Поделиться сообщением


Ссылка на сообщение
03/06/15 18:57 (изменено)
Локаль устанавливается при загрузке класса class_localization

Значит, этот класс загружается после обработки хука "Последние темы"...

 

Даже если б было на наоборот, сначала загружается ядро, потом модули которые вызывают нужные им шаблоны.

Это заявленная логика. Но бывают и ошибки разработчиков.

Изменено пользователем cyrax_02

Поделиться сообщением


Ссылка на сообщение

siv1987, у вас есть ваш собственный форум ?

Установите локаль на сервере или на уровне php.ini в англоязычную - в последних темах даты станут английскими.

Поделиться сообщением


Ссылка на сообщение

Значит, этот класс загружается после обработки хука "Последние темы"

Вернее, ядро IP.Board устанавливает локаль только после обработки некоторых хуков

Этот класс инициализируется ядром одним из первых, а не загружается хуками, или в отдельных избирательных случаях. Локаль устанавливается один раз для всей системы при создание экземпляра класса.

 

Если вот здесь

Вот здесь нужно добавить

var_dump( $this->registry->class_localization->local ); exit;

 

Установите локаль на сервере или на уровне php.ini в англоязычную - в последних темах даты станут английскими.

1. На этом форуме локаль php по умолчанию английская.

2. Как-то не вяжется с другим вашим постом.

 

Имхо, проблема в вашем форуме. Либо вы что-то правили, либо что-то устанавливали. Я лично больше склоняюсь к первому, хотя возможно и то и другое. Потому что, из всех кто использует IPB вы первый от кого я слышу о таком "баге". Что намекает.

Поделиться сообщением


Ссылка на сообщение
Это заявленная логика. Но бывают и ошибки разработчиков.

Это не заявленные логика, это профайлинг форума. Вряд ли разработчики могли так ошибиться, чтобы перепутать порядок инициализации ядра с обработкой шаблонов.

Поделиться сообщением


Ссылка на сообщение
03/06/15 20:29 (изменено)
Вот здесь нужно добавить

var_dump( $this->registry->class_localization->local ); exit;

string(11) "ru_RU.UTF-8"

Та же локаль указана в текущем языковом пакете.

 

Вывод: хук не использует локаль из class_localization

 

Этот класс инициализируется ядром одним из первых, а не загружается хуками, или в отдельных избирательных случаях. Локаль устанавливается один раз для всей системы при создание экземпляра класса.

В качестве доказательства покажите мне в исходных кодах IP.Board php-команду

setlocale(...);

 

Имхо, проблема в вашем форуме. Либо вы что-то правили, либо что-то устанавливали...

...либо что-то не то съел. Это не серьёзный подход. Тем более для вас. Все исходники у нас перед глазами.

Если установка локали перед getTemplate решает проблему, значит, локаль в системе НЕ УСТАНАВЛИВАЕТСЯ до этого момента.

Изменено пользователем cyrax_02

Поделиться сообщением


Ссылка на сообщение

Вывод: хук не использует локаль из class_localization

Даты форматируются в другом классе. И локаль не "используется" как аргумент для функций, она устанавливается. Если свойство класса содержит эту локаль, значит при инициализации ядра она была установлена, переменная его принимает перед вызовом setlocale.

 

Покажите в этом месте результат

var_dump( setlocale( LC_ALL, "0" ) ); exit;

 

...либо что-то не то съел. Это не серьёзный подход. Тем более для вас. Все исходники у нас перед глазами.

Я вам говорю то, что вижу по исходникам. Но это не значит, что я могу видеть кривые хуки или правки на вашем форуме.

 

Если установка локали перед getTemplate решает проблему, значит, локаль в системе НЕ УСТАНАВЛИВАЕТСЯ до этого момента.

Ничего это не значит. У вас тоже перед глазами есть все исходники, возьмите и посмотрите стэк вызовов этих классов и увидите где class_localization и где output, и когда вообще отрабатывают хуки. setlocale может быть вызван сотню раз и кем угодно с разными значениями. Наличие правильной локали в этой переменной говорит о том, что она была установлена.

Поделиться сообщением


Ссылка на сообщение
Покажите в этом месте результат

var_dump( setlocale( LC_ALL, "0" ) ); exit;

string(1) "C"

 

Если свойство класса содержит эту локаль, значит при инициализации ядра она была установлена, переменная его принимает перед вызовом setlocale.
Наличие правильной локали в этой переменной говорит о том, что она была установлена.

То, что свойство класса содержит имя некоторой локали ещё ни о чём не говорит. Чтобы эта локаль использовалась при выполнении тех или иных функций эту локаль нужно установить функцией setlocale. Тот факт, что перед выполнением кода хука локаль имеет значение "C" (по умолчанию), в большой степени говорит о том, что локаль до этого момента в системе не устанавливалась.

 

setlocale может быть вызван сотню раз и кем угодно с разными значениями.

Маловероятно, что стандартный движок IP.Board где-то в своём коде будет устанавливать локаль, отличную от той, что указана в текущем языковом пакете. Никаких сторонних приложений и хуков, как я уже говорил, не установлено и не устанавливалось.

Поделиться сообщением


Ссылка на сообщение
То, что свойство класса содержит имя некоторой локали ещё ни о чём не говорит.

Я устал уже повторять десять раз одно и тоже

 

переменная его принимает перед вызовом setlocale.

Вы упорно не хотите слушать то что вам говорят.

Каким образом она может не установится, если все остальные даты на русском, и задается локаль один раз именно при инициализации класса (только пожалуйста на надо говорить нам про очередность загрузки классов и тд. прежде чем что-то утверждать сначала смотрим в коде). Этот факт говорит наоборот о том, что локаль устанавливается, но до хука она изменяется. Раз это происходит именно в хуке (которые отрабатывают последние в этой цепочки), можно предположить что изменяется она другим хуком который отробатывает перед ним.

 

По поводу стандартности движка я также сомневаюсь. В них копирайты от ибр не ставят.

Поделиться сообщением


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

Я установил пакет локализации от IBResource, который приобретал у них за денюжку. Хотите сказать, что у меня ломаная лицензия ? Что мой форум сейчас не пройдёт проверку подлинности лицензии от IP.Board ?

 

В них копирайты от ибр не ставят.

Так у меня нет копирайтов от IBResource. Только IP.Board'овские копирайты.

А знак "@" в строке "Лицензия зарегистрирована на: ..." - не касается движка форума.

Поделиться сообщением


Ссылка на сообщение

Я установил пакет локализации от IBResource, который приобретал у них за денюжку. Хотите сказать, что у меня ломаная лицензия ?

Локализация от IBR уже не оригинальный движок, оно затрагивает ядро форума и многие файлы. Не даром патчи безопасности для русских локализаций рекомендуют устанавливать с ИБР.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...