Multilang

Локализация документов для Payload CMS по модели Polylang: каждая языковая версия отдельный документ.

Сообщество 1 568/нед MIT v0.0.12

Установка

pnpm add @roxxel/payload-multilang

Описание

Плагин добавляет в Payload CMS модель переводов, где каждая языковая версия документа отдельная независимая запись, связанная с другими через скрытые поля метаданных. Это альтернатива встроенной в Payload локализации на уровне полей. Оба механизма не работают вместе: если `config.localization` включен, плагин выбрасывает ошибку при инициализации конфигурации. Поэтому нужно держать `localization: false` и размещать переведенный текст прямо в каждом языковом документе. Коллекции и globals подключаются в `payload.config.ts`. Массив `languages` описывает каждый язык: `code`, `name`, `locale`, `flagLabel`, `direction` (ltr или rtl), признак `isDefault`, `order`, `active` и `id`. В переведенные коллекции добавляются скрытые поля `_multilangLanguage`, `_multilangGroup` и `_multilangMeta` (имена можно переопределить). В админке появляется селектор языка в сайдбаре документа, вью `Translations` для создания и связывания переводов, статус перевода по каждому языку, фильтр по языку и колонки-шорткаты в списке коллекции. У globals на каждую языковую вкладку отдельный таб. Поведение переводов настраивается через опции коллекции. `synchronizedFields` держит top-level поля (например, автора или обложку) одинаковыми во всей группе переводов: при изменении в одном документе обновляются связанные. Опция `duplicate` (по умолчанию true) копирует совместимые поля источника в новый перевод, а `duplicateExcludeFields` исключает указанные поля из копирования. Плагин также добавляет кастомные эндпоинты в переведенные коллекции для действий с переводами. Helper-функции покрывают типовые задачи приложения. `withLanguage` фильтрует запросы Local API по языку. `getDocumentTranslationsWithPayload` и `getDocumentTranslationWithPayload` возвращают группу переводов или версию одного языка с проверкой прав доступа в рамках запроса. `findGlobalByLanguageWithPayload` и `updateGlobalByLanguageWithPayload` читают и пишут один язык global, не затрагивая остальные. `localizedSlugQuery` и `getMultilangDocumentLanguage` помогают с роутингом на фронтенде и URL превью в админке. Globals хранят значения всех языков в одном singleton-документе, а helpers на чтение и запись работают с конкретным языком. Поскольку переводы это отдельные документы, уникальность slug нужно обрабатывать вручную. Глобальный `unique: true` работает, только если у каждого языка свой slug. В остальных случаях уникальность нужно ограничивать составным индексом по языку и slug. Плагин совместим с Payload 3.x (peer dependency `payload ^3.84.1`), лицензия MIT.

О пакете

Имя пакета
@roxxel/payload-multilang
Последняя версия
0.0.12
Размер
723 кБ
Лицензия
MIT
Загрузок в неделю
568
Последняя публикация
5 июл. 2026 г.