Lingua
Последнее обновление not available | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$204 per month—let's make that $500!
Learn moreПереключатель лексикона MODX для фронтенда. Скачайте через Package Manager менеджера. Страница extra: https://modx.com/extras/package/lingua. Issues: https://github.com/goldsky/Lingua/issues
Background¶
Пакет написал goldsky, первый релиз 6 июня 2013 года, изначально для Adam Wintle из Monogon для китайского и тайского сайтов.
Addon создан для мультиязычного сайта без путаницы с контекстами. Концепция основана на пакете Translations, но разработан с нуля и по другому пути.
CMP¶
Custom Manager Page управляет списком языков и их настройками.

Plugin¶
Плагин управляет cookie и session выбранного языка.
Плагин даёт плейсхолдер [[+lingua.cultureKey]] для страницы.
Для других сниппетов, например выбора языка в email hook, используйте [[!lingua.cultureKey]] ниже.
Snippets¶
На фронтенде Lingua предоставляет utility-сниппеты. У всех сниппетов есть &toArray для вывода всех плейсхолдеров и &toPlaceholder для сохранения вывода в указанный плейсхолдер.
lingua.selector¶
Сниппет переключателя языка на фронтенде. Чанки по умолчанию в стиле dropdown-toggle twitter bootstrap.

При клике по ссылке страница перезагружается с дополнительным REQUEST-параметром для языковой session. Ключ REQUEST задаётся в System Setting, по умолчанию lang.
Properties¶
| Name | Description | Example | Default Value | Options |
|---|---|---|---|---|
| tplWrapper | чанк шаблона обёртки | &tplWrapper=chunkName |
lingua.selector.wrapper | chunk's name, @BINDINGs enabled |
| tplItem | чанк шаблона элемента | &tplItem=chunkName |
lingua.selector.item | chunk's name, @BINDINGs enabled |
| sortby | сортировка вывода по имени поля | &tplItem=lcid_string |
id | id, local_name, lang_code, lcid_string, lcid_dec |
| sortdir | направление сортировки | &sortdir=ASC |
asc | asc, desc |
| phsPrefix | префикс плейсхолдеров, чтобы не конфликтовать с другими пакетами | &phsPrefix=lingua. |
lingua. | (string) |
| codeField | поле, значение которого используется для options | &codeField=lang_code |
System Setting's lingua.code.field | id, local_name, lang_code, lcid_string, lcid_dec |
@BINDING в чанках означает:
- chunk name
- @FILE:
[[++core_path]]path/to/chunk/file.tpl - @CODE:
[[+lingua.languages]]
Default Chunks¶
lingua.selector.wrapper¶
<div class="container">
<div class="btn-group">
<button class="btn btn-link btn-mini dropdown-toggle"
data-toggle="dropdown"
>[[%lingua.select_language]]
</button>
<ul class="dropdown-menu">
[[+lingua.languages]]
</ul>
</div>
</div>
lingua.selector.item¶
[[+lingua.cultureKey:is=`[[+lingua.lang_code]]`:then=``:else=`<li>
<a href="[[+lingua.url]]" title="[[+lingua.local_name]]">
<img src="[[+lingua.flag]]" alt=""/> [[+lingua.local_name]]
</a>
</li>`]]
В этом чанке по умолчанию текущий язык скрывается через Output Filter.
lingua.cultureKey¶
Сниппет возвращает текущий активный язык. Содержит только
return $modx->cultureKey;
Это не то же самое, что
return $modx->getOption('cultureKey');
Этот сниппет ключевой для получения лексиконов языка.
Version 1: Обратите внимание на восклицательный знак перед %login. Лексикон должен быть +UN+CACHED.
[[!%login? &namespace=`Login` &language=`[[!lingua.cultureKey]]`]]
Version 2: У Lingua своя папка кэша. Переведённые страницы в разных файлах, всё можно кэшировать.
[[%login? &namespace=`Login` &language=`[[lingua.cultureKey]]`]]
lingua.getField¶
Сниппет возвращает значение настройки языка Lingua для текущего языка страницы. Значение переключается на выбранный активный язык.
Properties¶
| Name | Description | Example | Default Value | Options |
|---|---|---|---|---|
| field | любое поле для выборки | &field=date\_format\_lite |
all available fields: id, active, local_name, lang_code, lcid_string, lcid_dec, date_format_lite, date_format_full, is_rtl, flag | |
| codeField | поле, значение которого используется для options | &codeField=lang\_code |
System Setting's lingua.code.field | id, local_name, lang_code, lcid_string, lcid_dec |
Examples¶
Created on: [[*createdon:date=`[[!lingua.getField? &field=`date_format_lite`]]`]]
lingua.getValue¶
Сниппет возвращает переведённое поле ресурса для текущего языка страницы. Значение переключается на выбранный активный язык.
Properties¶
| Name | Description | Example | Default Value | Options |
|---|---|---|---|---|
| field | имя "key" или поля в базе данных. required * | &field=pagetitle |
Main fields: pagetitle, longtitle, description, alias, link_attributes, introtext, content, menutitle, uri, uri_override, properties | |
| or any Template Variable's name | ||||
| id | id ресурса для получения значения | &id=[[+snippetPrefix.id]] |
Current resource | integer |
Examples¶
В rowTpl wayfinder замените плейсхолдер так:
<li[[+wf.id]][[+wf.classes]]>
<a href="[[+wf.link]]" title="[[+wf.title]]" [[+wf.attributes]]>
<-- [[-+wf.linktext]] -->
[[lingua.getValue:default=`[[+wf.linktext]]`? &id=`[[+id]]` &field=`pagetitle`]]
<!-- rowTpl -->
</a>
[[+wf.wrapper]]
</li>
Version 2.0.0+¶
С версии 2 Lingua хранит клонированный контент ресурса, основной content и все заданные Template Variables.
Template Variables¶
Откройте Custom Manager Page (Components > Lingua) и укажите TV, доступные для перевода.
Standard MODX fields (pagetitle, content, etc.)¶
Также нужно задать дополнительную настройку для контекста, где работает Lingua. В дереве ресурсов > правый клик > edit context.
Editing the Context¶
Right click на контексте, где должен работать Lingua, затем "Edit context":

Добавьте на вкладке "Context Settings":
- key: modRequest.class, value: LinguaRequest

После сохранения настройка появится в сетке.

Multiple contexts¶
Для разных языков в разных контекстах добавьте:
- key: lingua.langs, value: en,de,...
Эта настройка переопределяет список активных языков из Custom Manager Page.
<= Version 2.0.0-beta3¶
В самом плагине нужно было указать контексты в element tree > Plugin > категория Lingua > плагин Lingua.
На вкладке "Properties" нажмите "Default Properties Locked" и измените:
- name: lingua.contexts, value: web, your_other_context1, your_other_context2

Version 2.0.0-rc1¶
В этой версии настройки перенесены в System Settings MODX, чтобы не перезаписывались при обновлении.

Template Variable's Cloning Patterns¶
При клонировании TV Lingua дублирует формы ввода TV. Чтобы избежать конфликтов Javascript, Lingua меняет ID в html/js кодах.
Для custom TV создайте новые паттерны.
Откройте CMP, вкладка "Template Variables", затем "Cloning Patterns".
Там примеры паттернов core TV и MIGX.
Можно создать новый или дублировать существующий правым кликом по строке.

ID для паттернов берите из шаблона TV.
По tutorial " Adding a Custom TV Type - MODX 2.2" формы ввода лежат в "core/components/ourtvs/tv/input/tpl/".
Найдите ID вида {$tv->id} и добавьте их в Cloning Patterns.
Limitation¶
Из-за концепции Lingua, клонирования стандартного контента MODX для других языков, нельзя ожидать другую структуру сайта на вторичных языках.
Для этого подходит Babel.
Incompatibility¶
Lingua несовместима с custom TV, которые хранят значения вне базы TV MODX.
Известная несовместимость:
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$204 per month—let's make that $500!
Learn more










