Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
cyrax_02

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

Recommended Posts

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

/admin/sources/classes/class_localization.php

class_localization::getDate

 

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

Share this post


Link to post
Share on other sites

Навскидку:

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Share this post


Link to post
Share on other sites
Навскидку:

а) хук "Последние темы" перед использованием функции 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-й версии исправили...

Share this post


Link to post
Share on other sites
Локаль устанавливается при загрузке класса class_localization

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

 

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

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

Edited by cyrax_02

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

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

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

 

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

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

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

 

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

Share this post


Link to post
Share on other sites
Это заявленная логика. Но бывают и ошибки разработчиков.

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

Share this post


Link to post
Share on other sites
Вот здесь нужно добавить

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

string(11) "ru_RU.UTF-8"

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

 

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

 

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

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

setlocale(...);

 

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

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

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

Edited by cyrax_02

Share this post


Link to post
Share on other sites

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

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

 

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

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

 

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

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

 

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

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

Share this post


Link to post
Share on other sites
Покажите в этом месте результат

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

string(1) "C"

 

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

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

 

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

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

Share this post


Link to post
Share on other sites
То, что свойство класса содержит имя некоторой локали ещё ни о чём не говорит.

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

 

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

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

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

 

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

Share this post


Link to post
Share on other sites
По поводу стандартности движка я также сомневаюсь

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

 

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...