Мультиязычность ТВ параметров
На сайте реализована мультиязычность через Babel.
Разным языкам соответствует свой домен.
например:
ru.domain.com — для контекста web (ru)
en.domain.com — для контекста en
it.domain.com — для контекста it
вывод в шаблоне разноязычных частей (где это необходимо) реализован различными чанками через:
Был приобретен великолепный mSearch2. Все работает. Но возникла проблема с фильтрацией по ТВ параметру. В выборе фильтрации выводится на нужном языке, считаются все варианты, но при выборе галочкой — не показывает ничего (((
Факт в том, что mFilter2 фильтрует значения, которые сохранены в БД. У меня, получается, в БД сохраняются значения типа:
Как из этой ситуации выходить?
Есть совет поискать разработчика, который хотя-бы знает, что в MODX есть лексиконы и как их можно использовать. Как можно реализовать мультиязычность ТВ?
Допусловие: Надо, чтобы в админке выбор ТВ параметра могли видеть (понимать) как русскоговорящие админы, так и англо/итальяноговорящие, то есть на своем родном языке как в админке.
Разным языкам соответствует свой домен.
например:
ru.domain.com — для контекста web (ru)
en.domain.com — для контекста en
it.domain.com — для контекста it
вывод в шаблоне разноязычных частей (где это необходимо) реализован различными чанками через:
[[*context_key:is=`web`:then=`[[$header-ru]]`:else=``]]
[[*context_key:is=`en`:then=`[[$header-en]]`:else=``]]
[[*context_key:is=`it`:then=`[[$header-it]]`:else=``]]соответственно пример для вывода ТВ-параметров реализован так (Тип вывода: Список (одиночный выбор)):Golf / Golf / Гольф==[[*context_key:is=`web`:then=`Гольф`:else=``]][[*context_key:is=`en`:then=`Golf`:else=``]][[*context_key:is=`it`:then=`Golf`:else=``]]
||Sci / Ski resorts / Горнолыжные курорты==[[*context_key:is=`web`:then=`Горнолыжные курорты`:else=``]][[*context_key:is=`en`:then=`Ski resorts`:else=``]][[*context_key:is=`it`:then=`Sci`:else=``]]
||Città / Town / Город==[[*context_key:is=`web`:then=`Город`:else=``]][[*context_key:is=`en`:then=`Town`:else=``]][[*context_key:is=`it`:then=`Città`:else=``]]
||Centro storico / Historical centers / Историческиe центры==[[*context_key:is=`web`:then=`Историческиe центры`:else=``]][[*context_key:is=`en`:then=`Historical centers`:else=``]][[*context_key:is=`it`:then=`Centro storico`:else=``]]
||Mare / Seaside / Море==[[*context_key:is=`web`:then=`Море`:else=``]][[*context_key:is=`en`:then=`Seaside`:else=``]][[*context_key:is=`it`:then=`Mare`:else=``]]
||Laghi / Lakes / Озера==[[*context_key:is=`web`:then=`Озера`:else=``]][[*context_key:is=`en`:then=`Lakes`:else=``]][[*context_key:is=`it`:then=`Laghi`:else=``]]
||Colline / Hills / Холмы==[[*context_key:is=`web`:then=`Холмы`:else=``]][[*context_key:is=`en`:then=`Hills`:else=``]][[*context_key:is=`it`:then=`Colline`:else=``]]Итак закончим с преамбулой и перейдем к самому вопросу.Был приобретен великолепный mSearch2. Все работает. Но возникла проблема с фильтрацией по ТВ параметру. В выборе фильтрации выводится на нужном языке, считаются все варианты, но при выборе галочкой — не показывает ничего (((
Факт в том, что mFilter2 фильтрует значения, которые сохранены в БД. У меня, получается, в БД сохраняются значения типа:
Golf / Golf / Гольф==[[*context_key:is=`web`:then=`Гольф`:else=``]][[*context_key:is=`en`:then=`Golf`:else=``]][[*context_key:is=`it`:then=`Golf`:else=``]]Потом это значение выбирает фильтр и выводит на экран. Дальше парсер разбирает его и получаетсяГольфИ при попытке фильтрации на сервер уходит именно эта строка. А в БД, напоминаю, находится не она, а моё длинющее выражение с фильтрами. Вот и получается, что содержимое БД и запрос не совпадают, и фильтр не работает. (((
или
Golf
или
Golf
Как из этой ситуации выходить?
Есть совет поискать разработчика, который хотя-бы знает, что в MODX есть лексиконы и как их можно использовать. Как можно реализовать мультиязычность ТВ?
Допусловие: Надо, чтобы в админке выбор ТВ параметра могли видеть (понимать) как русскоговорящие админы, так и англо/итальяноговорящие, то есть на своем родном языке как в админке.
Комментарии: 25
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
в вызове mFilter2 определите свой row чанк для каждого результата этого tv (например, category)
и вместо [[+title]] подставляете:
вариант со своими лексиконами (лучше)
другой вариант
дополнительное условие не сразу увидел, тогда в tv
Не совсем разбираюсь в лексиконах (точнее совсем не разбираюсь, узнал о их существовании пару дней назад)
объясните, что такое [[%abc.cat1]], [[%abc.cat2]] и т.д.?
если у меня TV параметр например region, то вызов в mFilter2 будет:
Верно?
И тогда при разборе получится
Зачем лишние фильтры, если можно сразу забить названия параметров в нужные словари?
Это значит параметры ввода tv
так будет?
Михаил, создайте свой компонент и добавьте туда значения лексикона. Также можно скачать какой-нибудь сторонний компонент, который вы не собираетесь обновлять, и в core/components/компонент/lexicon/код_языка в default.inc.php впишите значения
В нем будет одиночный выбор
Вызов mFilter2:
где tv|position — мой ТВ параметр
а category-row — это шаблон вывода?
Если все верно понял, то подскажите как добавить все переводы в Лексиконы? Как создать свой компонент?
Можете предложить какой-нибудь для примера? Как найти компонент с лексиконами?
Вроде все как вы сказали…
Создал вызов:
где tpl.mFilter2.filter.select2 выглядит так:
в админке выбор выглядит так:
на сайте выбор выглядит так:
все работает!!! )))
Осталась самая малость — сделать переводы.
По совету Andrei D. нашел свободный компонент archivist.
В нем как не пробовал добавлять — переводы не появляются (((
Что делать?
Вот как в админке:
Даже руками прописывал в /core/components/archivist/lexicon/ru/default.inc.php
Что и где я делаю не так? (((
Не могу понять в чем «затык» (
в админке вообще вот так показывает:
P.S. Изменил кодировку файла на UTF-8 — все стало норм.
Но на странице и в админке все равно перевод не появился (
Также в настройках проверьте нет ли у вас путаницы в разделе «Словарь и язык»
У контекстов прописан cultureKey?
А если так [[!%[[+title]]]]?
Лексиконы с mSearch2 то работают.
Вот так вот «по образу и подобию»
не сработало (((
1. Заходим в управление словарями.
2. Выбираем пространство имён core, тема default, язык русский.
3. Жмём Создать запись, вводим имя text_entry, значение Моя запись.
4. Сохраняем, чистим кэш.
5. На главной странице в шаблоне или содержимом ресурса (если оно выводится) пишем
6. Сохраняем, проверяем — на главной должно быть Моя запись.
Таким же макаром задаём любые нужные записи, не забывая переключить при этом языки. Всё!
Никаких редактирований файлов, никаких посторонних дополнений, сниппетов или плагинов. Это встроенный в MODX функционал, перестаньте уже изобретать велосипед!
Василий — вы реально Гуру ModX!!!
Спасибо!!!
Andrei D. тоже спасибо за участие )))
А если значений больше 200 (например, у меня весь сайт на лексиконах), которые нужно периодически отдавать на проверку и перевод, то php файл ведь лучше подходит
Так что решение Василия для меня идеально )
Как это поправить?
P.S. во фронтенде все перевелось и стало отлично!
В админке везде должны быть кодовые слова, типа
а в словарях уже записи для этих типов вилл.
Сделать на MODX мультиязычную админку, чтобы у всех менеджеров отображались свои названия ТВ параметров, насколько я понимаю, невозможно. Только писать свою собственную админку, типа такой.