Уважаемые пользователи!
Напоминаем, что с 7 ноября 2020 года phpBB Group прекратила выпуск обновлений для phpBB версии 3.2.
С учетом этого, рекомендуется обновить конференции до версии 3.3.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до отдельного объявления.

Перезапись языковых констант (Language Override) Тема решена

У вас есть идея для расширения функциональности phpBB? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Dutch
phpBB 1.4.2
Сообщения: 67
Стаж: 13 лет 8 месяцев
Откуда: Kiev
Благодарил (а): 1 раз
Поблагодарили: 2 раза

Перезапись языковых констант (Language Override)

Сообщение Dutch »

Есть ли решение в виде расширения для перезаписи языковых констант, дабы не вмешиваться в перевод?

На phpbbguru.net используется Joomla, а в версии Joomla 3.х, так вот по функционалу такое расширение будет чем-то похоже на Language Override Joomla.

Спасибо!
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 12 лет 7 месяцев
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 240 раз

Re: Перезапись языковых констант (Language Override)

Сообщение Alecto »

интересная мысль.
так же, была бы интересна возможность переопределять языковые переменные и других расширений, так сказать, полная адаптация языка под себя, не вмешиваясь в сторонний код.
Аватара пользователя
Dutch
phpBB 1.4.2
Сообщения: 67
Стаж: 13 лет 8 месяцев
Откуда: Kiev
Благодарил (а): 1 раз
Поблагодарили: 2 раза

Re: Перезапись языковых констант (Language Override)

Сообщение Dutch »

Alecto писал(а): интересная мысль.
Например, можно переписать текст перед регистрацией, или назвать на форуме пользователей не Пользователь, а Юзвери :) (для всяких тематических фишек было бы круто), да и для админов тоже.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 12 лет 7 месяцев
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 240 раз

Re: Перезапись языковых констант (Language Override)

Сообщение Alecto »

да, смысл понятен.
мне интересно именно внесение изменений без правок ядра и расширений.
Аватара пользователя
LavIgor
Поддержка
Поддержка
Сообщения: 3468
Стаж: 8 лет 3 месяца
Благодарил (а): 41 раз
Поблагодарили: 825 раз

Re: Перезапись языковых констант (Language Override)

Сообщение LavIgor »

Сделал расширение.
Как использовать:
  • в event/listener.php можно подключать свои языковые файлы и добавлять/модифицировать переменные шаблона;
  • в language/XX/custom.php, где XX - код ISO языкового пакета, можно задавать свои языковые переменные для общих случаев;
  • в language/XX/info_XXX_custom.php, где XXX - acp, mcp или ucp, можно задавать свои языковые переменные для администраторского, модераторского и личного разделов соответственно (требуется для модификации пунктов меню). Если переменные используются не только в меню, потребуется также модификация в файле для общих случаев. Модификация пунктов меню других расширений не гарантируется (зависит от последовательности загрузки языковых файлов движком).
Возможно, не все переменные можно будет отредактировать с помощью расширения, но большинство из них точно можно.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 12 лет 7 месяцев
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 240 раз

Re: Перезапись языковых констант (Language Override)

Сообщение Alecto »

в custom.php добавил переменную

Код: Выделить всё

	'FORUM_INDEX'			=> 'ГЛАВНАЯ СТРАНИЦА',
но, по прежнему вижу Список форумов, т.е. переменная не переопределилась.

Отправлено спустя 4 минуты 35 секунд:
так же пробовал добавить переменную

Код: Выделить всё

	'TERMS_OF_USE_CONTENT'	=> 'ТЕСТ',
во все файлы, она тоже не переопределила имеющиеся значение для страницы регистрации.

где я ошибся?
Аватара пользователя
LavIgor
Поддержка
Поддержка
Сообщения: 3468
Стаж: 8 лет 3 месяца
Благодарил (а): 41 раз
Поблагодарили: 825 раз

Re: Перезапись языковых констант (Language Override)

Сообщение LavIgor »

'FORUM_INDEX' меняет "Список форумов" для ссылки в Администраторском разделе.
Для главной страницы придётся задавать переменную шаблона в listener.php:

Код: Выделить всё

        /* Change template variables. */
        $this->template->assign_vars(array(
            /* Your variables go here. */
            'EXT_CUSTOM_LANGUAGE'    => true,
            'L_INDEX'    => '123456789',
        ));
Условия использования тоже определяются не так просто и задаются кодом ниже.
Опять-таки через переменную шаблона 'L_TERMS_OF_USE' задаём свой текст.
Кстати, тогда имеет смысл переставить местами куски кода в расширении, обновил архив.

В движке переменная задаётся так:

Код: Выделить всё

                $template->assign_vars(array(
                    'S_LANG_OPTIONS'    => (sizeof($lang_row) > 1) ? language_select($user_lang) : '',
                    'L_TERMS_OF_USE'    => sprintf($user->lang['TERMS_OF_USE_CONTENT'], $config['sitename'], generate_board_url()),

                    'S_SHOW_COPPA'        => false,
                    'S_REGISTRATION'    => true,
                    'S_HIDDEN_FIELDS'    => build_hidden_fields($s_hidden_fields),
                    'S_UCP_ACTION'        => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register' . $add_coppa),

                    'COOKIE_NAME'        => $config['cookie_name'],
                    'COOKIE_PATH'        => $config['cookie_path'],
                    )
                );
Т.е. помимо своего 'TERMS_OF_USE_CONTENT' переопределяем переменную шаблона ещё раз:

Код: Выделить всё

        /* Change template variables. */
        $this->template->assign_vars(array(
            /* Your variables go here. */
            'EXT_CUSTOM_LANGUAGE'    => true,
            'L_INDEX'    => '123456789',
            'L_TERMS_OF_USE'    => sprintf($this->user->lang['TERMS_OF_USE_CONTENT'], $this->config['sitename'], generate_board_url()),
        ));
Не просто так в слушатель добавлены часто используемые объекты. =)

В общем, по сути каждый отдельный случай требует особого рассмотрения и своих доработок.
Большинство правок легко сделать в расширении аналогично правкам выше.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 12 лет 7 месяцев
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 240 раз

Re: Перезапись языковых констант (Language Override)

Сообщение Alecto »

думал, все будет проще.
я просто поставил протестировать, но пока проще будет исправить в ядре и записать лог изменений.
либо сделать скриптовое изменение текста для страницы регистрации.
Аватара пользователя
LavIgor
Поддержка
Поддержка
Сообщения: 3468
Стаж: 8 лет 3 месяца
Благодарил (а): 41 раз
Поблагодарили: 825 раз

Re: Перезапись языковых констант (Language Override)

Сообщение LavIgor »

Вообще текст для ссылки "Список форумов" можно поменять в Администраторском разделе.
Если через данное расширение, то более правильный вариант будет такой:
в слушатель добавить

Код: Выделить всё

'L_INDEX'            => ($this->config['board_index_text'] !== '') ? $this->config['board_index_text'] : $this->user->lang['FORUM_INDEX'], 
(вместо 'L_INDEX' => '123456789', в коде выше);
задать свой 'FORUM_INDEX' в языковом файле custom.php.
Alecto писал(а): думал, все будет проще.
Так уж получается, что в движке некоторые языковые переменные записываются через шаблон.
Другой способ - искать события между заданием переменных и добавлением их в шаблон, но он не всегда прокатит.

Для общих файлов можно добавить строчку 'core.user_setup_after' => 'change_language_variables', после 'core.adm_page_footer' => 'change_language_variables',. Но этот способ не будет работать для файлов, подключаемых в коде дополнительно после $user->setup().
С этой правкой примеры выше упрощаются, но тогда и custom.php каждый раз грузится дважды.

Отправлено спустя 3 минуты 46 секунд:
Плюс событие 'core.user_setup_after' доступно только начиная с phpBB 3.1.6-RC1. :)
Anvar
Former team member
Сообщения: 1965
Стаж: 12 лет 4 месяца
Благодарил (а): 57 раз
Поблагодарили: 620 раз

Re: Перезапись языковых констант (Language Override)

Сообщение Anvar »

А если из админки иметь возможность изменить текст?

Переписал расширение выше, после установки смотреть в "Настройки конференции"//
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 12 лет 7 месяцев
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 240 раз

Re: Перезапись языковых констант (Language Override)

Сообщение Alecto »

можно немножко технический вопрос:
почему в первоначальном варианте

Код: Выделить всё

        arguments:
            - @config
            - @user
            - @template
            - @auth
            - %core.root_path%
            - %core.php_ext% 
а в варианте Анвара

Код: Выделить всё

        arguments:
            - @config
            - @template
?
можно ли для языковых переменных оставить вариант Анвара и будет ли он более оптимизированным по сравнению с первоначальным вариантом?

Отправлено спустя 2 минуты 8 секунд:

Код: Выделить всё

\phpbb\auth\auth $auth, $phpbb_root_path, $phpEx
в listener.php вроде не используются, а остальное таки нужно
Аватара пользователя
LavIgor
Поддержка
Поддержка
Сообщения: 3468
Стаж: 8 лет 3 месяца
Благодарил (а): 41 раз
Поблагодарили: 825 раз

Re: Перезапись языковых констант (Language Override)

Сообщение LavIgor »

Alecto писал(а): а в варианте Анвара
Анвар оставил только то, что использует в слушателе.
Т.е. мой пример выше и другие сложные доработки с данными правками работать не будут.

Хотя для простых правок (совсем простых) вполне нормально.

Отправлено спустя 9 минут :
В принципе, так и надо, по логике, во многих случаях.
Anvar
Former team member
Сообщения: 1965
Стаж: 12 лет 4 месяца
Благодарил (а): 57 раз
Поблагодарили: 620 раз

Re: Перезапись языковых констант (Language Override)

Сообщение Anvar »

Мне кажется из админки более удобнее использовать, только нужно знать названия констант и думать о том что префикс "L_" будет добавлен автоматически.

Решайте сами что и как хотите использовать, я лишь предложил такой вариант(набросал за 15 минут).
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 12 лет 7 месяцев
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 240 раз

Re: Перезапись языковых констант (Language Override)

Сообщение Alecto »

пытаюсь понять аналогию...
добавил переменные, но они не переопределились

Код: Выделить всё

	'SUBFORUM'					=> 'Подраздел',
	'SUBFORUMS'					=> 'Подразделы',
L_SUBFORUM нашел только одно вхождение

Код: Выделить всё

			$l_subforums = (sizeof($subforums[$forum_id]) == 1) ? $user->lang['SUBFORUM'] : $user->lang['SUBFORUMS'];
но, оно вроде не имеет отношения к нужному мне.
как быть?

Отправлено спустя 1 минуту 19 секунд:
или надо еще в конктуртор добавку делать?

Отправлено спустя 4 минуты 1 секунду:

Код: Выделить всё

         'L_FORUM' => (sizeof($subforums[$forum_id]) == 1) ? $user->lang['SUBFORUM'] : $user->lang['SUBFORUMS'],
что-то не то....
Аватара пользователя
LavIgor
Поддержка
Поддержка
Сообщения: 3468
Стаж: 8 лет 3 месяца
Благодарил (а): 41 раз
Поблагодарили: 825 раз

Re: Перезапись языковых констант (Language Override)

Сообщение LavIgor »

А почему L_FORUM?
Там есть L_SUBFORUM_STR. И просто L_SUBFORUM.

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

Вернуться в «Запросы расширений для phpBB»