Опубликовано: 6 марта 201510 г В последних темах на главной странице форума отображаются английские даты, например, "Mar" вместо "Мар".Похоже, используется php-функция date, которая с русским не дружит. Какой самый простой вариант русификации этой даты ?
Опубликовано: 6 марта 201510 г В общем, что мне сейчас нужно: найти место в исходных кодах IP.Board, где непосредственно получается строковое представление даты/admin/sources/classes/class_localization.phpclass_localization::getDate Через это место форматируются все даты на форуме. И то, что метка там сработает ничего по сути не даст. Если дата на английском, значит локаль каким-то образом "слетает". Поиски нужно начать с хука, определив там какая текущую локаль класса.
Опубликовано: 6 марта 201510 г Автор Навскидку:а) хук "Последние темы" перед использованием функции strftime русскую локаль не устанавливаетб) код хука "Последние темы" выполняется раньше остального кода (логично, т.к. плавающий блок (float: right) в шаблоне расположен выше и обрабатывается в первую очередь) Сейчас проверю...
Опубликовано: 6 марта 201510 г хук "Последние темы" перед использованием функции strftime русскую локаль не устанавливаетЛокаль устанавливается при загрузке класса class_localization код хука "Последние темы" выполняется раньше остального кодаШаблонные хуки выполняются после отработки основного шаблона. Даже если б было на наоборот, сначала загружается ядро, потом модули которые вызывают нужные им шаблоны.
Опубликовано: 6 марта 201510 г Автор Навскидку:а) хук "Последние темы" перед использованием функции strftime русскую локаль не устанавливаетб) код хука "Последние темы" выполняется раньше остального кода (логично, т.к. плавающий блок (float: right) в шаблоне расположен выше и обрабатывается в первую очередь) Всё так и есть. Хук не устанавливает локаль, указанную в свойствах текущего языкового пакета. Вернее, ядро IP.Board устанавливает локаль только после обработки некоторых хуков, в число которых попал "Последние темы". Если вот здесь/admin/applications/forums/sources/classes/forums/class_forums.phpclass_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-й версии исправили...
Опубликовано: 6 марта 201510 г Автор Локаль устанавливается при загрузке класса class_localizationЗначит, этот класс загружается после обработки хука "Последние темы"... Даже если б было на наоборот, сначала загружается ядро, потом модули которые вызывают нужные им шаблоны. Это заявленная логика. Но бывают и ошибки разработчиков. Изменено 6 марта 201510 г пользователем cyrax_02
Опубликовано: 6 марта 201510 г Автор siv1987, у вас есть ваш собственный форум ?Установите локаль на сервере или на уровне php.ini в англоязычную - в последних темах даты станут английскими.
Опубликовано: 6 марта 201510 г Значит, этот класс загружается после обработки хука "Последние темы"Вернее, ядро IP.Board устанавливает локаль только после обработки некоторых хуковЭтот класс инициализируется ядром одним из первых, а не загружается хуками, или в отдельных избирательных случаях. Локаль устанавливается один раз для всей системы при создание экземпляра класса. Если вот здесьВот здесь нужно добавить var_dump( $this->registry->class_localization->local ); exit; Установите локаль на сервере или на уровне php.ini в англоязычную - в последних темах даты станут английскими.1. На этом форуме локаль php по умолчанию английская.2. Как-то не вяжется с другим вашим постом. Имхо, проблема в вашем форуме. Либо вы что-то правили, либо что-то устанавливали. Я лично больше склоняюсь к первому, хотя возможно и то и другое. Потому что, из всех кто использует IPB вы первый от кого я слышу о таком "баге". Что намекает.
Опубликовано: 6 марта 201510 г Это заявленная логика. Но бывают и ошибки разработчиков.Это не заявленные логика, это профайлинг форума. Вряд ли разработчики могли так ошибиться, чтобы перепутать порядок инициализации ядра с обработкой шаблонов.
Опубликовано: 6 марта 201510 г Автор Вот здесь нужно добавитьvar_dump( $this->registry->class_localization->local ); exit;string(11) "ru_RU.UTF-8" Та же локаль указана в текущем языковом пакете. Вывод: хук не использует локаль из class_localization Этот класс инициализируется ядром одним из первых, а не загружается хуками, или в отдельных избирательных случаях. Локаль устанавливается один раз для всей системы при создание экземпляра класса. В качестве доказательства покажите мне в исходных кодах IP.Board php-командуsetlocale(...); Имхо, проблема в вашем форуме. Либо вы что-то правили, либо что-то устанавливали... ...либо что-то не то съел. Это не серьёзный подход. Тем более для вас. Все исходники у нас перед глазами.Если установка локали перед getTemplate решает проблему, значит, локаль в системе НЕ УСТАНАВЛИВАЕТСЯ до этого момента. Изменено 6 марта 201510 г пользователем cyrax_02
Опубликовано: 6 марта 201510 г Вывод: хук не использует локаль из class_localizationДаты форматируются в другом классе. И локаль не "используется" как аргумент для функций, она устанавливается. Если свойство класса содержит эту локаль, значит при инициализации ядра она была установлена, переменная его принимает перед вызовом setlocale. Покажите в этом месте результатvar_dump( setlocale( LC_ALL, "0" ) ); exit; ...либо что-то не то съел. Это не серьёзный подход. Тем более для вас. Все исходники у нас перед глазами.Я вам говорю то, что вижу по исходникам. Но это не значит, что я могу видеть кривые хуки или правки на вашем форуме. Если установка локали перед getTemplate решает проблему, значит, локаль в системе НЕ УСТАНАВЛИВАЕТСЯ до этого момента.Ничего это не значит. У вас тоже перед глазами есть все исходники, возьмите и посмотрите стэк вызовов этих классов и увидите где class_localization и где output, и когда вообще отрабатывают хуки. setlocale может быть вызван сотню раз и кем угодно с разными значениями. Наличие правильной локали в этой переменной говорит о том, что она была установлена.
Опубликовано: 7 марта 201510 г Автор Покажите в этом месте результатvar_dump( setlocale( LC_ALL, "0" ) ); exit;string(1) "C" Если свойство класса содержит эту локаль, значит при инициализации ядра она была установлена, переменная его принимает перед вызовом setlocale.Наличие правильной локали в этой переменной говорит о том, что она была установлена. То, что свойство класса содержит имя некоторой локали ещё ни о чём не говорит. Чтобы эта локаль использовалась при выполнении тех или иных функций эту локаль нужно установить функцией setlocale. Тот факт, что перед выполнением кода хука локаль имеет значение "C" (по умолчанию), в большой степени говорит о том, что локаль до этого момента в системе не устанавливалась. setlocale может быть вызван сотню раз и кем угодно с разными значениями.Маловероятно, что стандартный движок IP.Board где-то в своём коде будет устанавливать локаль, отличную от той, что указана в текущем языковом пакете. Никаких сторонних приложений и хуков, как я уже говорил, не установлено и не устанавливалось.
Опубликовано: 7 марта 201510 г То, что свойство класса содержит имя некоторой локали ещё ни о чём не говорит.Я устал уже повторять десять раз одно и тоже переменная его принимает перед вызовом setlocale.Вы упорно не хотите слушать то что вам говорят.Каким образом она может не установится, если все остальные даты на русском, и задается локаль один раз именно при инициализации класса (только пожалуйста на надо говорить нам про очередность загрузки классов и тд. прежде чем что-то утверждать сначала смотрим в коде). Этот факт говорит наоборот о том, что локаль устанавливается, но до хука она изменяется. Раз это происходит именно в хуке (которые отрабатывают последние в этой цепочки), можно предположить что изменяется она другим хуком который отробатывает перед ним. По поводу стандартности движка я также сомневаюсь. В них копирайты от ибр не ставят.
Опубликовано: 7 марта 201510 г Автор По поводу стандартности движка я также сомневаюсь Я установил пакет локализации от IBResource, который приобретал у них за денюжку. Хотите сказать, что у меня ломаная лицензия ? Что мой форум сейчас не пройдёт проверку подлинности лицензии от IP.Board ? В них копирайты от ибр не ставят.Так у меня нет копирайтов от IBResource. Только IP.Board'овские копирайты.А знак "@" в строке "Лицензия зарегистрирована на: ..." - не касается движка форума.
Опубликовано: 7 марта 201510 г Я установил пакет локализации от IBResource, который приобретал у них за денюжку. Хотите сказать, что у меня ломаная лицензия ?Локализация от IBR уже не оригинальный движок, оно затрагивает ядро форума и многие файлы. Не даром патчи безопасности для русских локализаций рекомендуют устанавливать с ИБР.
В последних темах на главной странице форума отображаются английские даты, например, "Mar" вместо "Мар".
Похоже, используется php-функция date, которая с русским не дружит.
Какой самый простой вариант русификации этой даты ?