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. Так быстрее дойдём до бесплатного релиза.


Установка:
  • 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» выше).
1.2.0:
  • mFilter + locOption;
  • XLIFF и CSV;
  • переиндексация mSearch при save;
  • getAlternateUrls, getLocalizedContent, Fenom locoptiondescription.
1.3.0:
  • очередь переводов в UI;
  • sync shared TV;
  • UI перевода лексиконов;
  • translation memory, выход из beta.
Нужная фича из roadmap: issue с ID F*-* или комментарий к посту.

Требования


  • MODX 3.0+, PHP 8.2+
  • VueTools ≥1.1.2-pl, pdoTools
  • miniShop3, mSearch по желанию
docs/README.md
Иван Бочкарев
Сегодня в 12:53
modx.pro
74
+5
Поблагодарить автора Отправить деньги

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0