Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeVue
Всем привет!
Делаю Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeVue 4 в менеджере, автоперевод, miniShop3, mSearch, SEO-сниппеты. Репозиторий: github.com/modx-pro/localizator3.

Нужны тестировщики. Поставьте на свой MODX 3, сломайте что получится, опишите в Issues. Так быстрее дойдём до бесплатного релиза.
Установка:



Один ресурс MODX, несколько строк в localizator3_content. ID ресурса общий для Fenom, pdoTools и ссылок. Babel клонирует дерево; здесь одно дерево с переводами полей.
В менеджере: Localizator3 → Языки, вкладка Локализация на ресурсе (dropdown, Document / TV, «Перевести»). Vue через VueTools. На витрине: 6 сниппетов, Fenom, hreflang, sitemap.
Языки: key, name, HTTP host, cultureKey, rank. На ресурсе: Save, enable/disable, автоперевод. Поля формы настраиваются через OnBuildLocalizationTabs.
getLanguageList — переключатель языков (list или dropdown). URL ведёт на ту же страницу на другом host.
getLocalizedResources — pdoResources / pdoMenu / msProducts с JOIN локализации. Параметр onlyWithLocalization отсекает ресурсы без перевода.
makeLocalizedUrl — URL ресурса с учётом языка и http_host.
getLocalizedField — одно поле или TV на указанном языке; если перевода нет, вернёт default или значение из modResource.
getLocalizedCanonical — в : canonical и hreflang для всех активных языков.
getLocalizedSitemap — XML sitemap с alternate-ссылками по языкам.
Fenom-модификаторы (текущий язык из localizator3_key):
Имена и параметры могут измениться до релиза. Целевые примеры из roadmap F11:
getCurrentLanguage (1.1) — key, cultureKey, name или http_host текущей локали.
hasLocalization (1.1) — есть ли активный перевод ресурса на языке. Для условий в Fenom.
getResourceLocalizations (1.1) — массив языков ресурса: key, name, url, active, hasTranslation. Свой switcher без getLanguageList.
getLocalizedField / locfield + fallbackLanguage (1.1) — если перевода нет, взять язык по умолчанию из настроек.
makeLocalizedUrl + localized alias (1.1, F4-04) — URL с отдельным slug на язык, не только другой host.
getAlternateUrls (1.2) — alternate-ссылки текущего ресурса (данные для своего шаблона, без готового HTML как у getLocalizedCanonical).
getLocalizedContent (1.2) — вся строка localizatorContent + TV: массив или JSON для tpl / JS.
getDefaultLanguage (backlog) — key языка из localizator3_default_language.
locoptiondescription (1.2, Fenom) — локализованное description опции MS3 (caption уже есть в locoptioncaption).
msProduct, locOption, locProductOption. mSearch: поля ru-pagetitle, en-content и т.п.
HTTP host, cookie localizator3_key, Accept-Language. localizator3_404_if_no_localization. Массовый перевод:
Каталог: docs/roadmap.md.
1.0.8-beta (выпущен): VueTools, lean bundles, inline-форма «Локализация», 6 сниппетов, MS3, mSearch, автоперевод.
1.0.9-beta: composables в grids, декомпозиция Vue-компонентов, hard check VueTools, fix URL в getLanguageList.
1.1.0:
Делаю Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeVue 4 в менеджере, автоперевод, miniShop3, mSearch, SEO-сниппеты. Репозиторий: github.com/modx-pro/localizator3.

Нужны тестировщики. Поставьте на свой MODX 3, сломайте что получится, опишите в Issues. Так быстрее дойдём до бесплатного релиза.
Установка:
- transport из Releases (1.0.8-beta);
- сборка: vueManager && npm run build, php _build/build.php (нужны VueTools ≥1.1.2-pl и pdoTools).



Один ресурс MODX, несколько строк в localizator3_content. ID ресурса общий для Fenom, pdoTools и ссылок. Babel клонирует дерево; здесь одно дерево с переводами полей.
В менеджере: Localizator3 → Языки, вкладка Локализация на ресурсе (dropdown, Document / TV, «Перевести»). Vue через VueTools. На витрине: 6 сниппетов, Fenom, hreflang, sitemap.
Кому подойдёт
- мультидомен и несколько языков на MODX 3;
- miniShop3 с переводами товаров и опций;
- pdoTools / Fenom, один ресурс, локализованные поля;
- автоперевод (Yandex, Google, DeepL, LibreTranslate, MyMemory) и CLI.
Менеджер
Языки: key, name, HTTP host, cultureKey, rank. На ресурсе: Save, enable/disable, автоперевод. Поля формы настраиваются через OnBuildLocalizationTabs.
Сниппеты (1.0.8-beta)
getLanguageList — переключатель языков (list или dropdown). URL ведёт на ту же страницу на другом host.
{'!getLanguageList' | snippet}
{'!getLanguageList' | snippet : ['outputMode' => 'dropdown', 'activeClass' => 'current']}getLocalizedResources — pdoResources / pdoMenu / msProducts с JOIN локализации. Параметр onlyWithLocalization отсекает ресурсы без перевода.
{'!getLocalizedResources' | snippet : [
'snippet' => 'pdoResources',
'parents' => 0,
'tpl' => '@INLINE <li><a href="{$uri}">{$pagetitle}</a></li>',
'onlyWithLocalization' => 1
]}makeLocalizedUrl — URL ресурса с учётом языка и http_host.
<a href="{'!makeLocalizedUrl' | snippet : ['id' => $id, 'language' => 'en']}">English</a>getLocalizedField — одно поле или TV на указанном языке; если перевода нет, вернёт default или значение из modResource.
{'!getLocalizedField' | snippet : ['field' => 'pagetitle', 'language' => 'en']}
{'!getLocalizedField' | snippet : ['field' => 'introtext', 'language' => 'de', 'default' => '']}getLocalizedCanonical — в : canonical и hreflang для всех активных языков.
{'!getLocalizedCanonical' | snippet}getLocalizedSitemap — XML sitemap с alternate-ссылками по языкам.
{'!getLocalizedSitemap' | snippet : ['parents' => '0', 'depth' => 5]}Fenom-модификаторы (текущий язык из localizator3_key):
{$pagetitle | locfield}
{$id | locfield : 'introtext'}
{$option_id | locoptioncaption : 'Цвет'}
{$product_option_id | locproductoptionvalue : '—'}Сниппеты в roadmap (ещё нет в 1.0.8)
Имена и параметры могут измениться до релиза. Целевые примеры из roadmap F11:
getCurrentLanguage (1.1) — key, cultureKey, name или http_host текущей локали.
{'!getCurrentLanguage' | snippet : ['field' => 'key']}
{'!getCurrentLanguage' | snippet : ['field' => 'name', 'format' => 'json']}hasLocalization (1.1) — есть ли активный перевод ресурса на языке. Для условий в Fenom.
{if '!hasLocalization' | snippet : ['id' => $id, 'language' => 'en']}
<a href="{'!makeLocalizedUrl' | snippet : ['id' => $id, 'language' => 'en']}">English version</a>
{/if}getResourceLocalizations (1.1) — массив языков ресурса: key, name, url, active, hasTranslation. Свой switcher без getLanguageList.
{foreach '!getResourceLocalizations' | snippet : ['id' => $id] as $loc}
<a href="{$loc.url}" hreflang="{$loc.key}" class="{if $loc.is_current}active{/if}">{$loc.name}</a>
{/foreach}getLocalizedField / locfield + fallbackLanguage (1.1) — если перевода нет, взять язык по умолчанию из настроек.
{'!getLocalizedField' | snippet : [
'field' => 'pagetitle',
'language' => 'en',
'fallbackLanguage' => 'ru'
]}makeLocalizedUrl + localized alias (1.1, F4-04) — URL с отдельным slug на язык, не только другой host.
{'!makeLocalizedUrl' | snippet : ['id' => $id, 'language' => 'en']}
{* ожидается: /en/about-us вместо общего alias на en.site.com *}getAlternateUrls (1.2) — alternate-ссылки текущего ресурса (данные для своего шаблона, без готового HTML как у getLocalizedCanonical).
{set $alternates = '!getAlternateUrls' | snippet : ['id' => $id, 'format' => 'json']}
{* массив: key, url, hreflang *}getLocalizedContent (1.2) — вся строка localizatorContent + TV: массив или JSON для tpl / JS.
{set $loc = '!getLocalizedContent' | snippet : ['id' => $id, 'language' => 'en', 'format' => 'json']}getDefaultLanguage (backlog) — key языка из localizator3_default_language.
{'!getDefaultLanguage' | snippet}locoptiondescription (1.2, Fenom) — локализованное description опции MS3 (caption уже есть в locoptioncaption).
{$option_id | locoptiondescription : 'Описание по умолчанию'}miniShop3 и mSearch
msProduct, locOption, locProductOption. mSearch: поля ru-pagetitle, en-content и т.п.
SEO и CLI
HTTP host, cookie localizator3_key, Accept-Language. localizator3_404_if_no_localization. Массовый перевод:
php core/components/localizator3/scripts/translate_resources.php --parents=1 --depth=5
Roadmap
Каталог: docs/roadmap.md.
1.0.8-beta (выпущен): VueTools, lean bundles, inline-форма «Локализация», 6 сниппетов, MS3, mSearch, автоперевод.
1.0.9-beta: composables в grids, декомпозиция Vue-компонентов, hard check VueTools, fix URL в getLanguageList.
1.1.0:
- overview переводов на ресурсе;
- Rich text (MODX RTE) в форме;
- копирование с другого языка, batch translate;
- локализованный alias на язык;
- getCurrentLanguage, hasLocalization, getResourceLocalizations, fallback в getLocalizedField / locfield (см. блок «Сниппеты в roadmap» выше).
- mFilter + locOption;
- XLIFF и CSV;
- переиндексация mSearch при save;
- getAlternateUrls, getLocalizedContent, Fenom locoptiondescription.
- очередь переводов в UI;
- sync shared TV;
- UI перевода лексиконов;
- translation memory, выход из beta.
Требования
- MODX 3.0+, PHP 8.2+
- VueTools ≥1.1.2-pl, pdoTools
- miniShop3, mSearch по желанию
Поблагодарить автора
Отправить деньги
0