
Сниппет msrpLexiconScript
Выводит встроенный тег script с объектом window.msrpLexicon: строки интерфейса виджета на языке текущего контекста сайта в MODX.
Подключается лексикон msrussianpost:default. Ключи в JavaScript совпадают с именами записей лексикона (префикс msrussianpost_).
Параметры
Параметров нет.
Порядок вызова
Вызывать строго перед msRussianPost и до загрузки russianpost.js, чтобы при инициализации скрипта объект window.msrpLexicon уже существовал.
Пример
[[!msrpLexiconScript]]
[[!msRussianPost]]{'msrpLexiconScript' | snippet}
{'msRussianPost' | snippet}Ключи в window.msrpLexicon
Сниппет берёт фиксированный список из массива $keys в своём коде (core/components/msrussianpost/elements/snippets/msrpLexiconScript.php). Ключи, которые читает russianpost.js на витрине:
msrussianpost_calculating— текст во время расчётаmsrussianpost_select_method— приглашение выбрать способmsrussianpost_days— подпись единицы срока в списке методовmsrussianpost_free_delivery— «бесплатно», если у метода нет ценыmsrussianpost_no_methods— API не вернул ни одного методаmsrussianpost_error_no_index— в поле индекса меньше шести цифрmsrussianpost_error_api— коннектор недоступен, ответил ошибкой или запрос отвалился по таймауту
Остальные ключи из $keys на витрине не читаются:
msrussianpost_delivery_cost— использует чанкtplRussianPostStatus, он берёт строку из лексикона MODX на стороне сервера, а не изwindow.msrpLexicon;msrussianpost_error_invalid_index— только в разделе Extras → Почта России в менеджере;msrussianpost_delivery_period— в коде пакета не используется: ни JS, ни чанки его не читают.
Почему сниппет обязателен
Запасных строк в JavaScript нет. Если ключа нет в объекте, russianpost.js подставляет сам ключ:
const getLexicon = (key) => (lexicon[key] != null ? lexicon[key] : key);Без msrpLexiconScript объект window.msrpLexicon не создаётся. До версии 1.0.1 в этом случае покупатель видел в статусе и в списке методов технические имена вида msrussianpost_error_api или msrussianpost_select_method — сниппет был обязателен на странице оформления заказа.
Начиная с версии 1.0.1 в russianpost.js встроены русские строки по умолчанию, поэтому технические ключи посетителю не показываются никогда, а в режиме отладки появляется предупреждение в консоли. Но текст останется русским на любом сайте, поэтому сниппет по-прежнему нужен для локализации — подключайте его до msRussianPost и russianpost.js.
Часть текста при этом не пострадает: чанк tplRussianPostStatus берёт начальные строки (msrussianpost_calculating, msrussianpost_delivery_cost, msrussianpost_days) из лексикона MODX напрямую, минуя window.msrpLexicon. Ломается всё, что выводит JS.
Строки переопределяются через лексикон MODX в текущем контексте сайта: сначала скрипт берёт window.msrpLexicon, а к встроенным русским строкам прибегает только когда ключа нет. Поэтому лексикон всегда приоритетнее, а подключение сниппета ничего не ломает.
Список ключей в сниппете сокращён до семи — именно столько читает russianpost.js. Ключи msrussianpost_delivery_cost, msrussianpost_delivery_period и msrussianpost_error_invalid_index больше не отправляются на клиент, потому что не читаются нигде.
