Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Компонент перевода инфоблоков

00 голосов
4
ООчень часто сталкивался с проектами в которых есть один или более язык. И каждый раз мне приходилось объяснять заказчику что для создания второго языка ему нужно создавать копию и все писать дважды-трижды а то и более раз. Те кто не знал о существовании других движков принимали это (со скрипом правда, но это уже другая история), а те кто знали то расказывали мне как это реализовано на бесплатных ЦМС и почему платный и совсем не дешовый Битрикс делает это через задницу (извините за французкий, но из песни слов не выбросишь).И вот созрел вопрос: "Раз Битрикс не хочет делать(выходя из множества уже заданных вопросов на форуме о том почему всё так сложно с многоязычностью) многоязычность методом переводов самих ИБ в системе, почему бы не сделать это самому."
Теперь по сути. Я создал модуль который сохраняет все языкозависимые поля ИБ в отдельной таблице, сами поля будут выбиратся для каждого ИБ отдельно в настройках модуля(пока не реализовано), вводятся значения в добавленной закладке в форме редактирования ИБ. Но каким образом подсовывать компонентам переводы вместо оригиналов остается под вопросом. Пока я реализовал это самым примитивным и неоптимальным способом, перезаписывая $arResult в файле resultModifier. Переписывать все компоненты (для ИБ их довольно много) также не оптимально. Какие есть предложения? Может кто что посоветует.

П.С. В случае создания какой либо рабочей версии модуля выложу ее как OpenSource проект, если конечно к этому будет интерес.
спросил 26 Июнь, 13 от KoXMage (160 баллов)

4 Ответы

00 голосов
Геннадий Глинский, то есть Вы дублировали то, что есть в Настройки-Локализация-Просмотр файлов-Показать различия? или это что-то более удобное?
По поводу цены и отсутсвию нормальной локализации - поддерживаю Ваше негодование :!:
ответил 26 Июнь, 13 от hyorinmar (260 баллов)
00 голосов
Цитата
Ирина Шепилова пишет:
Геннадий Глинский, то есть Вы дублировали то, что есть в Настройки-Локализация-Просмотр файлов-Показать различия? или это что-то более удобное?

По поводу цены и отсутсвию нормальной локализации - поддерживаю Ваше негодование


Модуль Локализации разрешает только переводить сообщения ( то что выводится GetMessage('Message') функцией). А этот модуль должен реализовать именно перевод самих инфоблоков. Т.е. для добавления языка не потребуються создание копий сайта и создание новых ИБ для каждого языка + станет возможным "зеркальное" переключение между языками.
ответил 25 Июль, 13 от KoXMage (160 баллов)
00 голосов
Я обычно делаю многоязычность так — создаю в инфоблоке набор свойств для языков (Название с кодом RU_TITLE, Title с кодом EN_TITLE и так далее). А свойства вроде детальной картинки и дат активности остаются общими для всех языков. В шаблоне с помощью хелпера вывожу нужное свойство:
Код
<?=$arResult['PROPERTIES'][ $hLang->getPropLang() . 'TITLE' ]['VALUE']?>

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

Важно передать в $arParams компоненту идентификатор языка, чтобы кэширование правильно работало. Правильнее было бы переписать компоненты, чтобы отдавали сразу свойства нужного языка, но руки пока не доходили.
ответил 27 Окт, 13 от Kahanne (140 баллов)
00 голосов
Полностью согласен. Столкнулся с необходимостью перевода интернет-магазина. Создавать новый инфоблок и поддерживать актуальность сразу в двух это просто отвратительное решение. Совершенно не продуман этот момент.Прошел год. пора бы обратить внимание на этот пункт.

Виталий, спасибо за подсказку по коду, очень полезно и достаточно коротко.
ответил 31 Янв, 14 от maxdj (480 баллов)

Похожие вопросы

0 голосов
1 ответ
0 голосов
0 ответов
+1 голос
1 ответ
спросил 18 Ноя, 15 от аноним
0 голосов
1 ответ
0 голосов
0 ответов
спросил 19 Фев, 14 от preo (120 баллов)