В ядре 8.5.3 вышла экспериментальная технология замены любых языковых фраз продукта. Решение не идеальное, но оно дает довольно большой простор для полета фантазии разработчика.[spoiler]
Суть технологии в том, что языковые фразы продукта после подключения языкового файла заменяются на фразы, определенные разработчиком. Список замен должен находиться в файле:
/bitrix/php_interface/user_lang/<код языка>/lang.php |
В файле должны определяться элементы массива $MESS в виде $MESS['языковой файл']['код фразы'] = 'новая фраза', например:
<? $MESS["/bitrix/components/bitrix/system.auth.form/templates/.default/lang/ru/template.php"]["AUTH_PROFILE"] = "Мой любимый профиль"; $MESS["/bitrix/modules/main/lang/ru/public/top_panel.php"]['top_panel_tab_view'] = "Смотрим"; $MESS["/bitrix/modules/main/lang/ru/interface/index.php"]['admin_index_sec'] = "Проактивка"; ?> |
Первая строка меняет текст ссылки в компоненте формы авторизации; вторая строка меняет название вкладки публичной панели; третья меняет строку для индексной страницы панели управления.
Теоретически могут быть проблемы сопровождения этого файла при изменении кода фразы или расположения языкового файла, но на практике мы стараемся этого не делать, чтобы не создавать лишнюю работу для локализаторов.
Надеемся, что такой механизм поможет разработчикам кастомизировать свои проекты.
Еще иногда нужно переопределять стили стандартных модулей (например, в модуле техподдержка класный и зеленый кружочки для дальтоников похожи, и зеленый нужно заменить на синий, и тд.).
if (fileexists("/bitrix/php_interface/где_то_там/system.auth.form/templates/.default/lang/ru/template.php"))
{
//подключаем его и делаем его массив $MESS глобальным
}
Подключаем ПОСЛЕ родного файла, таким образом перетрутся только ключи, которые мы прописали в php_interface. Ну может не такой сложный путь, чуть полегче.
А вот уже пооооотом кооогда-то можно и интерфейсик накидать.
А на это... у меня рука не поднимается использовать
то ли
/bitrix/php_interface/где_то_там/system.auth.form/template/.default/lang/ru/template.php
то ли
/bitrix/php_interface/где_то_там/system.auth.form/templates/.defaults/lang/ru/template.php
Извините, ваш вариант - вообще не вариант.
Вам бы для примера "поюзать" другие CMS, где эти вещи решаются в пару кликов мышью в административной части системы...
Будет действительно требоваться - будет интерфейс.
Если бы подобное было для этой функции (и результат писался бы в php_interface) было бы очень хорошо.
Пока же все ручками. Ищу список языковых файлов с помощью модуля Переводы, а редактирую в Notepad++.
Мы обсуждали интерфейс к кастомным языковым сообщениям. Сделать его можно, только уделив должное внимание модулю локализации. В настоящее время мы не считаем это приоритетным.
Можете называть как угодно, хоть костылем, но спрос на такое решение, очевидно, есть, и мы его предоставили. Если вы хотите ждать что-то более "удобное" - это ваш выбор.
Ау, grammar nazi! Ваше время настало!
$MESS["system.auth.form"]["AUTH_PROFILE"]= = "Мой любимый профиль";
?
Т.е. просто писать название компонента, код фразы = чему она равна?
$MESS["bitrix:system.auth.form"]["AUTH_PROFILE"]= "Мой любимый профиль";
или если компонент кастомизирован:
$MESS["mycomponents:system.auth.form"]["AUTH_PROFILE"]= "Мой любимый профиль";
?
было бы вообще шикарно!
С модулями нужно конечно подумать.. но то же что то вроде того должно быть. Писать пути - эт как-то не красиво.
Насчет модулей - господи, да кто будет в админке фразы менять?
понятно, что где лежит:
/bitrix/php_interface/user_lang/<код языка>/lang.php
тот язык и локализует, т.е.:
/bitrix/php_interface/user_lang/ru/lang.php
$MESS["bitrix:system.auth.form"]["AUTH_PROFILE"]= "Мой любимый профиль";
локализует:
/bitrix/php_interface//bitrix/components/bitrix/system.auth.form/templates/.default/lang/ru/template.php
/bitrix/php_interface/user_lang/en/lang.php
$MESS["bitrix:system.auth.form"]["AUTH_PROFILE"]= "My super profile";
локализует:
/bitrix/components/bitrix/system.auth.form/templates/.default/lang/en/template.php
Вадим, добрый день,
Подскажите, насколько применим данный механизм для продукта Корпоративный портал?
Например в компоненте восстановления пароля при вводе неверного логина пишет "Логин или EMail не найдены" - как эту фразу сменить? какой у нее ключ
Но уже сам нашел: /bitrix/modules/main/lang/ru/classes/general/user.php
Отдельно хочу отметить, что данное решение работает и без модуля перевода.
файл лежит тут - /public_html/bitrix/php_interface/user_lang/ru/lang.php
Помогите пожалуйста решить вопрос. Мне нужно заменить всего 2 строчки:
"Элемент не найден" и "Раздел не найден" бьюсь уже неделю, ничего не получается.
К сожалению не нашел такой опции в настройках модуля "Перевод":
"Страница, которую вы пытаетесь просмотреть, не может быть показана, так как она использует неверную или неподдерживаемую форму компрессии"
Приходится отключать модуль компрессии, чтоб заработало - я что-то не так делаю?
И насколько нужен этот модуль компрессии?
Например, выводятся вакансии и резюме на разных страницах, с разными шаблонами и нужно вывести на экран
"Вакансия не найдена" и "Резюме не найдено"? За 5 лет было ли найдено какое-то другое решение? Или оно так и не добралось до приоритетных?
Updated: ui (18.5.400)
Updated: documentgenerator (18.7.100)
файл перестал грузиться вообще. Откатываешь из бэкапа, работает, ставишь обновления и привет! Хорошо, что обновляем сначала на тестовой версии, но уже неделю не могу добиться ответа от службы поддержки ((((((((((((((((((( Футболят вопрос от одного к другому, задают вопросы и уже 3 дня тупо молчат!
Так, что не крутотень, а хренотень!
В файле /bitrix/modules/main/lib/localization/loc.php в функции private static function loadUserMessages($lang) перед
$userMess = array();
вставьте
$lang = 'ru';
или, если у вас не ru, то ваш язык.
Проблема в том, что в этом файле $context->getLanguage() выдает NULL вместо текущего языка.
Особенно нравится ключевое слово "временно". Странно было потерять глобальную переменную пользовательских настроек битрикса и искать ее 3,5 месяца, а потом посоветовать прописывать ее ручками, вместо того, чтобы вытащить из файла настройки! Но за наВодку спасибо.
Версия модуля main (19.0.293)
придется тоже костылить...
В файле /bitrix/modules/main/lib/localization/loc.php в функции private static function loadUserMessages($lang) перед
$userMess = array();
вставьте
$lang = 'ru';
или, если у вас не ru, то ваш язык.
Проблема в том, что в этом файле $context->getLanguage() выдает NULL вместо текущего языка.
В 19 версии проблема остается. Ау, ТП, добавьте в обновление исправление данной ситуации!!!