Мультиязычность modx – Мультиязычность в MODX с Babel. Развернутое руководство. Автоматический перенос ресурсов

Содержание

multiLingual / Другое / Дополнения MODX / modstore.pro

Внимание, этот компонент требует версию PHP 5.4 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.

Внимание, этот компонент требует версию MODX не ниже 2.5 !

Компонент multiLingual реализует функциональность мультиязычных сайтов без дополнительных контекстов, в отличие от компонента Babel.

«Из коробки» подходит для большинства небольших сайтов вроде «сайта-визитки» или несложного каталога.

Для работы с более сложными сайтами, применяющими различные дополнительные компоненты, предполагающие

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

Настройка компонента

Для работы компонента должны быть включены ЧПУ (friendly URLs)

Внимание, настройка Строгий режим дружественных URL (friendly_urls_strict) должна быть выключена (установлена в состояние «Нет»)

Компонент требует установки pdoTools версии не ниже 2.8.2

Перед тем, как начать работу с компонентом, необходимо установить настройку ml_default_site_url.
В нее необходимо записать URL сайта по-умолчанию. Например

https://mysite.ru/

Работа с мультиконтекстными сайтами

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

Например, у вас на одном modx работают два сайта:

http://mysite.com
и
https://mynewsite.ru.

В контексте первого сайта вы указываете в настройке ml_default_site_url значение

http://mysite.com/

В контексте второго —

https://mynewsite.ru/

Обратите внимание на слеш на конце.

Плагин mlSetLanguage должен выполняться позже плагина, который переключает контексты! Поэтому в настройках плагина mlSetLanguage,
напротив события OnHandleRequest поставьте приоритет выше, чем у вашего переключателя контекстов.

Про выборку ресурсов и pdoTools


При работе со сниппетами пакета pdoTools для выборки ресурсов, такими как pdoResources и pdoMenu,
данные сниппеты ничего не знают о компоненте multiLingual, поэтому по-умолчанию, независимо от языковой версии,
они будут получать из БД поля ресурсов со значениями на языке по-умолчанию.

Для того, чтобы данные сниппеты выдавали на выходе выборки с переведенными полями, необходимо
заменить значения двух системных настроек:

pdoFetch.class = mlFetch
pdofetch_class_path = {core_path}components/multilingual/model/multilingual/

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

Более подробное описание механизма см. ниже.

Настройка веб-сервера nginx

Для того, чтобы веб-сервер nginx корректно обрабатывал URL адреса и корректно отдавал статичные ресурсы,
в раздел server вашего сайта добавьте следующие строки:


  • для любых адресов типа http://mysite.ru/XX/ (где XX — например en, ua, es и т.д.)
#language rewrite
location ~ "^/([a-z]{2})/" {
    rewrite "^/([a-z]{2})/(.*)" /$2 last;
}
  • если вы хотите жестко прописать доступные языковые версии (например только en, ua и es):
#language rewrite
location ~ "^/(en|ua|es)/" {
    rewrite "^/(en|ua|es)/(.*)" /$2 last;
}
server_name mysite.ru *.mysite.ru;
  • если вы хотите жестко прописать доступные языковые версии (например только en, ua и es):
server_name mysite.ru en.mysite.ru ua.mysite.ru es.mysite.ru;

Настройка веб-сервера apache

Если вы используете веб-сервер apache, необходимо внести изменения в файл .htaccess в корневой директории сайта.
Суть настроек аналогична настройкам nginx. Синтаксис инструкций см. в документации к веб-серверу apache2.

Пример:

...

# Language rewrite
RewriteCond %{REQUEST_URI} ^/(en|ua|es)/assets/.*
RewriteRule ^(en|ua|es)/assets/(.*)$ assets/$2 [L,QSA]

RewriteCond %{REQUEST_URI} ^/(en|ua|es)/(.*)
RewriteRule ^(en|ua|es)/(.*)$ $2 [L,QSA]

# The Friendly URLs part
...

Принцип работы с компонентом


После установки вам необходимо сначала добавить дополнительные языковые версии сайта, после чего, перейдя в любой ресурс, на вкладку
«Переводы» добавить там переводы для соответствующих полей.

Интерфейс редактирования языковых версий


Синтаксис шаблона URL (site_url) при создании нового языка допускает несколько вариантов:

  1. Указание только правой части url
    Например для английской версии мы можем указать
    /eng/
    В этом случае все адреса ресурсов в английской версии будут иметь вид mydomian.com/eng/resource/full/url.html
  2. Указание точного соответствия url
    Например
    mydomain.com/
    При таком варианте вы жестко привязаны к адресу сайта. В этом случае разные языковые версии сайта могут находиться на разных доменах.
    Например русская на mydomainrussia.ru/, а английская на mydomainusa.com/
  3. С помощью плейсхолдеров `[[+schema]]` и `[[+base_domain]]`
    Например
    [[+schema]]eng.[[+base_domain]]/
    [[+schema]]english.[[+base_domain]]/
    Данный вариант более удобен, если языковые версии строятся на поддоменах. Например mybasedomain.ru/ и eng.mybasedomain.ru/

Интерфейс для добавления переводов к полям ресурса (вкладка «Переводы»)


После установки компонента у каждого ресурса появляется дополнительная вкладка «Переводы».

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

При нажатии на кнопку «Добавить перевод» или при клике правой кнопкой мыши по одному из
существующих переводов и выбора пункта «Обновить перевод» появится всплывающее окно, в котором
можно выбрать поле, для которого создается перевод, язык (из тех, которые ранее были добавлены в интерфейсе
управления языковыми версиями), а также указать, собственно, сам перевод.

Сниппеты


mlLanguagesLinks
Данный сниппет выводит элемент для переключения языков на фронтенде

Параметры:
&wrapperTpl — шаблон обертки
&tpl — основной шаблон
&mod — стилевой модификатор для проброса в каждую ссылку
&activeClass — активный класс
&scheme — схема формирования URL (аналогично параметру $scheme метода $modx->makeUrl)
&showActive — показывать ли ссылку текущего языка

Доступные плейсхолдеры внутри чанка wrapperTpl:
&output — содержимое

Доступные плейсхолдеры внутри чанка tpl:
&culture_key — ключ языка на ссылке
&link — ссылка
&site_url — базовый URL сайта
&classes — набор классов ссылки
&mod — стилевой модификатор, указанный в параметре mod

Принцип перевода сущностей, отличных от modResource и перевода выборок


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

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

pdoFetch.class = mlFetch
pdofetch_class_path = {core_path}components/multilingual/model/multilingual/

Для того, чтобы иметь возможность получать выборки с переводами ресурсов, отличных от класса modResource (и наследуемых от него),
вам необходимо написать свой класс, наследуемый от класса mlFetch, переопределив методы getArray и prepareRows, добавив
в них логику подготовки выборки перед отдачей дальше по аналогии с тем, как это сделано в классе mlFetch.

После этого, получая выборки при помощи сниппета pdoResources или при помощи другого, самописного сниппета, использующего
класс из настройки `pdoFetch.class` для этих целей, вы сможете получать выборки с переводами на текущий язык.

[localizator] Мультиязычность, СЕО, автоперевод... / Русскоязычное сообщество MODX

Языковые версии \ сателиты без контекстов, с автоматическим переводом всех полей ресурса + сео, да еще и автоперевод лексиконов — это я уместил в названии localizator.

Зачем я это сделал: бабeл мне ниразу не подошел, долго я держал один проект на migx «локализации», но слишком он не удобен, собрал все минусы которые успел выявить и решил их в своем компоненте.

Возможности
1. Создание псевдоконтекстов «локализации» (можно вместе работать через site.ru/en/ и ch.site.ru)

2. У ресурса есть таб, где заполняются все стандартные поля ресурса + сео, далее по нажатию кнопки это все можно перевести на другие языки, поле контента пока что поддерживает только tiny mce rte.

3. Для удобства пользования лексиконами есть отдельные таб на странице компонента, где видны только лексиконы компонента. Там же выбор языка. Тут тоже есть автоматизация перевода, одно нажатие кнопки.

Локализация pdoTools
Про работу с pdoResources и pdoMenu не забыл, вот пример:

{'!pdoMenu' | snippet : [
	'parents' => 0,
	'leftJoin' => '{
		"localizator" : {
			"class" : "localizatorContent",
			"alias" : "localizator",
			"on" : "localizator.resource_id = modResource.id"
		}
	}',
	'select' => '{ "localizator" : "modResource.*, localizator.*, modResource.id" }',
        'where' => '{ "localizator.key" : "' ~ ('localizator_key' | option) ~ '"}',
]}
Итого все поля ресурса заменяются на переведенные.

Как использовать
Все поля ресурса подменяются локализированными, кроме content, он выводится через {$_modx->resource.localizator_content}.

Настройки
Для автоматизации перевода нужен api key для яндекс переводчика, получить можно тут: translate.yandex.ru/developers/keys и указать в настройке localizator_key_yandex, так же что бы переводчик понимал с какого языка переводить нужно указать ключ локализации в

localizator_default_language

Стоимость
Компонент полностью бесплатен, делал для своего проекта, думаю многим облегчит жизнь.
Отправить свое спасибо можно тут: yasobe.ru/na/localizator или попросить у меня номер карты в лс 🙂

Демо: localizator.but1head.ru/

Компонент отправил в modstore.pro, исходники на github.com/but1head/localizator

Babel компонент для MODX Revolution. Мультиязычность MODX Revolution

Что такое Babel?

Babel – это дополнение для MODx Revolution, которое призвано помочь в управлении Вашими мультиязычными веб-сайтами с использованием различных контекстов. Babel поддерживает даже управление несколькими мультиязычными веб-сайтами в одном образце MODx с помощью так называемых контекстных групп.


▶ Babel сохраняет ссылки между переведенными ресурсами. В менеджере Вы можете использовать Babel Box, чтобы легко переключаться между различными языковыми версиями Ваших ресурсов. Переведенные версии Babel могут создаваться автоматически или задаваться вручную.

Кроме того, Babel может использоваться для синхронизации определенных шаблонных переменных (template variables, TV) переведенных ресурсов, которые должны быть аналогичными в любом контексте (языке).

История

Babel разработал Якоб Класс (Jakob Class) на основе идей Sylvain Aerni, впервые приложение было выпущено 16 декабря 2010 года.

Установка

Подготовка

Создайте контекст под каждый из языков и задайте настройки cultureKey и site_url в соответствии со своими потребностями.

Убедитесь, что переключения контекстов происходят корректно.

Скачивание

Babel можно скачать с помощью менеджера в MODx Revolution через Package Management, или через MODx Extras Repository/

Установка

Установите Babel с помощью пакет-менеджера и задайте системные настройки Babel, используя форму, которая отображается во время установки:

<code><strong>Context</strong><strong>Keys</strong> (babel.contextKeys): список контекстных клавиш через запятую, которые применяются для связки мультиязычных ресурсов.<br />

В расширенной конфигурации Вы можете определить несколько групп контекстных клавиш с помощью точки с запятой (;) в качестве разделителя. Это пригодится для администрирования нескольких многоязычных сайтов в одном образце MODx.

Пример:

ёsite1: en, de, fr. c контекстами web, site1de, site1fr<
site2: en, de. с контекстами site2en, site2de

Вы выбираете babel.contextKeys для " web,site1de,site1fr;site2en,site2de".

Имя Babel TV (babel.babelTvName): Имя шаблонной переменной (TV), в которой Babel будет хранить ссылки между мультиязычными ресурсами. Эту TV будет поддерживать Babel. Пожалуйста, не изменяйте TV в ручном режиме, иначе Ваши ссылки между переведенными версиями могут быть утрачены.

ID шаблонных переменных должны быть синхронизированы (babel. syncTvs): разделенный запятыми список идентификаторов шаблонных переменных (TV), которые Babel должен синхронизировать.

Как пользоваться

При открытии ресурса для редактирования Babel Box будет отображаться в верхней части формы ресурса. Там же находятся ссылки в виде кнопок для каждого из языков (контекстов), заданных в настройках системы babel.contextKeys.

images/key.jpg

images/key.jpg

Три различных цвета, в которых могут отображаться кнопки, означают:

• Черный: язык ресурса, отображающегося в данный момент.

• Зеленый: язык, для которого определена переведенная версия ресурса.

• Светло-серый: язык, для которого переведенная версия пока не была создана или определена.

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

Если перевод не определен для данного языка (серая кнопка), наведите курсор мыши на языковую кнопку – появляется окно, в котором можно задать Babel создать перевод текущего ресурса, или вставить ссылку перевода на существующий ресурс вручную, для чего требуется ввести ID переведенного ресурса.

images/key.jpg

Кликая на "Create Translation", Вы задаете Babel создать новый ресурс в контексте языка и скопировать все содержимое текущего ресурса для вновь созданного. Далее Вы можете перевести вест контент, TV и опубликовать переведенный ресурс.
Если Вы хотите удалить ссылку на переведенную версию, просто наведите курсор мыши на зеленую кнопку языка: появляется окно с опцией "Unlink translation" для ее удаления.

Сниппеты

В настоящее время два сниппета доступны для Babel: BabelLinks и BabelTranslation.

Изменение настроек Babel после установки

Вы можете изменить настройки Babel после установки. Например, если Вы хотите определить новую TV, которая должна быть синхронизирована, или добавить новый контекст. Для этого перейдите в System/Settings в менеджере MODx и выберите местоположение babel. Теперь Вы можете редактировать все параметры Babel:

images/key.jpg

BabelLinks

BabelLinks – это snippet, который отображает ссылки на другие языки (контексты) для конечного пользователя.

Доступные параметры

Имя

Описание

По умолчанию

resourceId

(опция) ID ресурса, в котором должны отображаться ссылки на переводы.

ID текущего ресурса

tpl

(опция) Чанк для отображения языка ссылки.

babelLink

activeCls

(опция) имя класса CSS для языка, активного в данный момент.

active

showUnpublished

(опция) закладка, где отображаются неопубликованные переводы.

0

BabelLink Chunk

Если параметр &tpl не установлен, по умолчанию Chunk будет использоваться со следующим кодом:

<li><a href="[[+url]]">[[%babel.language_[[+cultureKey]]? &topic=`default` &namespace=`babel`]]</a></li>

Используя собственный блок для отображения языковых ссылок, Вы можете использовать следующие идентификаторы (placeholders):

Имя

Описание

url

Url связанного перевода (или url сайта определенного языка, если нет доступного переведенного ресурса)

cultureKey

Culture key перевода (e.g en, de, fr oder es). Можно использовать словарь babel для отображения названия языка: [[%babel.language_[[+cultureKey]]? &topic=`default` &namespace=`babel`]]

active

Если активная ссылка указывает на текущий активный язык (контекст), этот плейсхолдер устанавливается на активное имя CSS-класса, указанное в параметре & activeCls (по умолчанию =active). В противном случае идентификатор пуст.

id

ID переведенного ресурса. Если нет доступного перевода, идентификатор пуст.

Пример

[[BabelLinks]]

BabelTranslation

Snippet BabelTranslation возвращают ID переведенных ресурсов в данном контексте.

Доступные параметры

Имя

Описание

По умолчанию

resourceId

(опция) ID ресурса, на основе которого должен быть определен переведенный ресурс.

ID текущего ресурса

contextKey

Ключ контекста, в котором переведенный ресурс должен быть определен.


showUnpublished

(опция) Флажок, для просмотра неопубликованных переводов

0

Пример

Чтобы вернуть ID переведенного ресурса, который находится в "de" контексте текущего ресурса.


что оптимальнее? / Блог им. MrJenika / MODX.im

Здравствуйте, по роду занятий приходится делать в основном мультиязычные сайты. Пробовал и на revo и на evo.
Пройдя через все возможные глюки, неудобство и просто непонимание со стороны заказчика, в рамках изучения модх решил придумать что-то своё. В связи с этим хочу спросить совета у более опытных коллег для выявления оптимального варианта.
Часть рассмотренных проблем также взяты из большого количества постов на эту тему.

Речь идет о ветке ево — уж очень она симпатична мне.
Рассмотрю возможные варианты.

1) YAMS — хранение перевода в дополнительных полях (tv)

+++ все на одной странице
+ добавить новый язык просто

— сложность в настройке
— куча tv параметров
— сложная выборка всех этих tv
— проблем с Ditto и с Wayfinder
— проблема с пагинацией
— не работает со сборкой Dmi3yy

2) Дублирование дерева ресурсов
(по версии Dmi3yy — e-kao.ru/multilingual)

+ каждая версия может существенно отличаться
+ относительно просто в настройке
+ все сниппеты работают без проблем

— для перевода необходимо бегать по всему дереву
— больше 2-х языков уже превращается в головную боль
— секретарша возмущалось что «как-то все замудренно...»
— к готовому сайту это решение уже не применить

Как вариант можно дописать плагин на подобие Babel для рево (идея Dmi3yy), это немного облегчит задачу создания переведенного документа, но не на много.

3) Свой вариант
Хранить перевод в своей таблице с выводом всех полей для перевода во вкладках ресурса

+ все на одной странице
+ это СВОЕ
+ прикручивать можно к уже готовым сайтам

— продумать
— написать
— протестировать
— и пока непонятно как оно должно работать

Оптимально ли это и не получится ли такая же ерунда как и с хранением перевода в tv? Или это не так уж и страшно?

Жду вашей критики.

Мультиязычность ТВ параметров / Русскоязычное сообщество MODX

На сайте реализована мультиязычность через Babel.
Разным языкам соответствует свой домен.

например:
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=``]]
Итак закончим с преамбулой и перейдем к самому вопросу.
Был приобретен великолепный mSearch3. Все работает. Но возникла проблема с фильтрацией по ТВ параметру. В выборе фильтрации выводится на нужном языке, считаются все варианты, но при выборе галочкой — не показывает ничего (((

Факт в том, что 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 есть лексиконы и как их можно использовать. Как можно реализовать мультиязычность ТВ?

Допусловие: Надо, чтобы в админке выбор ТВ параметра могли видеть (понимать) как русскоговорящие админы, так и англо/итальяноговорящие, то есть на своем родном языке как в админке.

evoBabel - мультиязычные сайты на MODx EVO

Как обычно бывает — встала задача, неразрешимая средствами YAMS и очень неудобно рарзешимая другими средствами — создать мультиязычный сайт, чтобы
  • заказчик мог сам добавлять языки
  • переводы не были разбросаны по шаблонам, а содержались в одном месте
  • чтобы переключалка языков отправляла на нужный ресурс на другом языке
  • чтобы нормально без бубна работали сниппеты вроде DocLister, Wayfinder, Breadcrumbs и т.п.
  • и главное — чтобы не было жесткой привязки как в YAMS, т.е. структура сайтов на разных языках могла отличаться, а не было необходимости заполнять каждую новость, каждый товар и т.п.

Из всего этого на основе некоторых идей, почерпнутых из REVO Babel и с вооружившись библиотекой MODx API от Agel_Nash был разработан прототип решения evoBabel. Пример можно посмотреть на тестовом сайте.

Ссылка на установочные файлы, там же в файле readme — очень подробное описание как и что устанавливать.

В качестве поля для связи использовал стандартное поле description, т.к. некогда было заморачиваться с дополнительными TV, для вызова самого сниппета использован TV- параметр с типом ввода Custom Input.

Основные полезности:

  1. создание неграниченного количества языковых версий сайта при этом каждая версия хранится в своем дереве, что не ограничивает нас никак т.е. структура сайта на разных языках может отличаться (в отличие от YAMS), нет проблем с плейсхолдерами, другими сниппетами и т.п.
  2. ресурсы разных языковых версий связаны между собой — что позволяет при навигации переключаться на нужную языковую версию ресурса (за это отвечает сниппет switchLang)
  3. Возможна синхронизация значений нужных ТВ параметров для разных версий ресурса (id нужных ТВ задается в настройках плагина evoBabel)
  4. Переводы и id нужных ресурсов (каталогов новостей и т.п.) указываются в соответствующих языковых чанках без всяких разделителей || — разделителем служит перенос строки \n

Если у кого-то есть интерес и желание потестировать и предложить пути доработки — пожалуйста.

upd

upd2 — обновился архивчик на github

upd3 — удален сниппет switchLang, его функционал перенесен в плагин evoBabel на событие onWebPageInit (он соответственно, тоже обновился). В результате полностью решена проблема с мультиязычными формами на кэшированных страницах 🙂

Добавлен модуль для переводов. Теперь никаких чанков. Модуль на основе jquery easy ui, с ajax-редактированием инлайн, фильтром/поиском, сортировкой по алфавиту по-умолчанию (чтоб было проще искать), возможностью добавления и удаления новых лексиконов. Плюс, соовтетственно, переписан сниппет switchLang для выборки перевода из базы.

upd 30.12.2013
Обновил до версии 0.2 — github.com/webber12/evobabel-0.2 — скачать архив можно тут

Из основного:
— убрал библиотеку MODxAPI — т.к. отслеживать ее актуальность тяжеловато, да и тягать за собой ради пары функций особого смысла нет.
— ООП
— и главное — хранение языковых связей теперь осуществляется в TV (причем в том же TV, который используется для показа этих связей в админке)
это решает сразу несколько задач:
1. поле description не используется и соответственно пользователь не может повредить связи
2. поле TV для хранения связей имеет вид custom input и также напрямую не выводит нужные связи, что мешает их повредить
3. и все таки, если нужно что-то подправить, админ может переключить тип поля с custom input на обычный text и подправить если нужно. Т.е. в отличие от хранения связей в отдельных таблицах к ней все-таки есть доступ при наличии определенных навыков админа. Ну а без навыков — пусть лучше и не лезет, да и не получится у него 🙂

— подправил плагин для языковых плейсхолдеров [%перевод%] — теперь ищет лучше.

upd 01/03/2018 — актуальный внешний вид модуля

и языковой панели в нижней части страницы

upd 27.11.2018 — актуальный вид переключалки языков

видео

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *