# General Translation Knowledge Base: Как переводить контент в Payload CMS?
URL: https://generaltranslation.com/ru/kb/translate-payload-content.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Добавьте блок localization в конфигурацию Payload и задайте localized true для каждого поля — тогда Payload будет хранить по одному значению на каждую локаль, но заполнять их не станет. Плагин gt-payload от General Translation добавляет кнопку Translate, которая записывает перевод для каждой целевой локали: в виде черновика, если черновики включены, и напрямую — если нет. Сам плагин ничего не публикует.
Category: Инструменты для рабочих процессов
Last updated: 2026-10-28
Authors: General Translation Team
Published: 2026-10-28

Payload CMS хранит переводы на уровне полей. Как только в конфигурации появляется блок `localization`, каждое поле с пометкой `localized: true` хранит в документе по одному значению на каждую локаль, а фронтенд запрашивает нужный язык через параметр `locale`. Сам Payload эти значения не создаёт, а заполнять их вручную хлопотно: форматированный текст Lexical (редактор Payload по умолчанию) содержит ссылки, разметку и встроенные блоки; в массивах и блоках есть вложенные локализуемые поля; слаги, связи и загрузки должны оставаться нетронутыми; а исправления, которые редактор внёс в перевод, не должны теряться при следующем обновлении.

## Как Payload хранит переводы

В Payload 3 локализация входит в базовую конфигурацию Payload ([документация Payload по локализации](https://payloadcms.com/docs/configuration/localization)). Список локалей задаётся один раз:

```ts title="src/payload.config.ts"
import { buildConfig } from 'payload';

export default buildConfig({
  // ... ваша текущая конфигурация
  localization: {
    locales: ['en', 'es', 'fr'], // или объекты с code, label, rtl и fallbackLocale
    defaultLocale: 'en',
    fallback: true, // значение по умолчанию: если значение отсутствует, используется локаль по умолчанию
  },
});
```

Затем отметьте каждое поле, которое нужно переводить. `localized: true` работает с любым именованным полем, включая массивы и блоки, а вложенные поля внутри локализованного контейнера получают отдельные значения для каждой локали. Payload предупреждает, что при изменении `localized` у поля, в котором уже есть данные, эти данные будут потеряны, поэтому определитесь с этим до загрузки контента.

Любой API принимает локаль. REST использует `?locale=es` и `?fallback-locale=none`, GraphQL — аргументы `locale` и `fallbackLocale`, а Local API принимает те же параметры:

```ts
// Значения на испанском; для полей без испанского значения подставляется английское
const page = await payload.findByID({ collection: 'pages', id, locale: 'es' });

// Только значения на испанском; непереведённые поля возвращаются пустыми
const strict = await payload.findByID({ collection: 'pages', id, locale: 'es', fallbackLocale: false });

// Все локали сразу: all.title — это { en: 'Pricing', es: 'Precios' }
const all = await payload.findByID({ collection: 'pages', id, locale: 'all' });
```

В тестовом приложении на Payload 3.92 страница, у которой были только английский и испанский заголовки, для `fr` по умолчанию возвращала английский заголовок, а с `fallbackLocale: false` — пустой. Об этом поведении по умолчанию стоит помнить: для непереведённой локали Payload без всяких предупреждений отдаёт контент на языке-источнике, а не возвращает ошибку.

## Способы перевода контента Payload

Среди официальных плагинов Payload есть SEO, Redirects, Search и Import/Export, но ни один из них не переводит контент ([плагины Payload](https://payloadcms.com/docs/plugins/overview)). Доступны следующие варианты:

| Подход                                                                                                                                                 | Сильные стороны                                                                                                                                              | Как переводы попадают в Payload                                                                                                                | Что остаётся на вас                                                                                                            |
| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| Редакторы вручную заполняют каждую локаль                                                                                                              | Переводчик видит каждое поле в панели администратора                                                                                                         | Переключить локаль в панели администратора и ввести каждое значение                                                                            | Все переводы, а также поиск полей, изменившихся после каждой правки источника                                                  |
| [Плагин Import/Export](https://payloadcms.com/docs/plugins/import-export) от Payload в связке с переводчиками или системой управления переводами (TMS) | Экспортирует локаль в CSV или JSON для тех, кто переводит в файлах                                                                                           | Импортировать переведённый файл в целевую локаль                                                                                               | Сохранность форматированного текста, блоков и ID строк при экспорте и обратном импорте, а также повторный экспорт после правок |
| Скрипт на основе AI API (OpenAI API, Claude API)                                                                                                       | Переводит множество документов за один запуск, учитывая тон и термины, заданные в промпте                                                                    | Ваш скрипт записывает данные через `payload.update({ locale })`                                                                                | Обход вложенных полей и Lexical JSON, контекст для каждой строки, единообразие терминов, проверка и повторные запуски          |
| [Lingo.dev](https://lingo.dev/guides/payload) (`@lingo.dev/payloadcms`)                                                                                | Автоматически переводит локализованный обычный и форматированный текст при сохранении источника                                                              | Облачный сервис Lingo.dev записывает каждую локаль — сразу опубликованной или в виде черновика                                                 | Тариф Enterprise от Lingo.dev, служебный пользователь Payload с ключом API и редактор Lexical                                  |
| General Translation (`gt-payload`)                                                                                                                     | Переводит локализованные поля `text`, `textarea` и Lexical `richText`, включая вложенные блоки, с учётом Glossary и пользовательских промптов вашего проекта | Кнопка **Translate** в каждом документе или один запуск для всего сайта — каждая локаль записывается в виде черновика, если черновики включены | Запуск перевода после правок источника, проверка каждой локали и публикация черновиков                                         |

Переводите вручную, если документов немного и для каждого языка есть переводчик. Выбирайте Import/Export, если переводом уже занимается агентство или TMS, работающие с файлами. Скрипт на основе AI API подойдёт для разового пакета, который потом кто-то проверит. General Translation стоит выбрать, если документы содержат форматированный текст и блоки, часто меняются и должны использовать ту же терминологию, что и ваше приложение и документация. (Сравнение двух сервисов см. в статье [General Translation и Lingo.dev](/kb/general-translation-vs-lingo-dev).)

## Перевод контента Payload с помощью gt-payload

Для работы плагина `gt-payload` от General Translation (лицензия MIT, версия 0.1.2) нужны Payload 3.90.0 или новее с настроенным параметром `localization`, Next.js 15.2.9 или новее, React 19.0.1 или новее, а также хотя бы одно локализованное поле.

1. Установите плагин командой `npm install gt-payload`.

2. Добавьте плагин в конфигурацию. Он берёт локали и локализованные поля из Payload, поэтому в типичном случае параметры не нужны:

   ```ts title="src/payload.config.ts"
   import { buildConfig } from 'payload';
   import { gtPlugin } from 'gt-payload';

   export default buildConfig({
     // ... ваша существующая конфигурация
     localization: {
       locales: ['en', 'es', 'fr'],
       defaultLocale: 'en',
     },
     plugins: [gtPlugin()],
   });
   ```

3. На сервере, где работает Payload, задайте `GT_PROJECT_ID`, а в переменной `GT_API_KEY` — [ключ API проекта](/docs/platform/dashboard/reference/api-keys#create-project-keys) с разрешениями **All**. Никогда не передавайте ключ в клиентский код.

4. Выполните `npx payload generate:importmap`, чтобы панель администратора загрузила компоненты плагина. Если вы используете PostgreSQL или SQLite, создайте и примените миграцию (`npx payload migrate:create`, затем `npx payload migrate`) для двух коллекций, которые добавляет плагин.

5. Откройте сохранённый документ, выберите **Translate**, укажите целевые локали и нажмите **Translate into …**. Чтобы перевести всё сразу, откройте раздел **Translations** в навигации панели администратора.

В тестовом приложении на Payload 3.92.1 плагин добавил в карту импортов и сгенерированные типы свои элементы управления документом, представление **Translations**, а также коллекции `gt-translation-runs` и `gt-translation-locks`; `next build` завершился успешно. Конечные точки плагина отклоняют запросы, если пользователь Payload не авторизован. Подробные шаги приведены в разделе [Быстрый старт для Payload](/docs/integrations/payload/quickstart).

## Что делает запуск перевода

Плагин берёт локаль по умолчанию в качестве источника и отправляет локализованный текст каждого документа в ваш проект General Translation, где он отображается под своим идентификатором Payload (`collection/id` или слаг глобала). Плагин переводит локализованные поля `text` (включая списки `hasMany`), поля `textarea` и Lexical `richText` — в том числе внутри групп, вкладок, массивов, блоков и блоков форматированного текста. В форматированном тексте сохраняются форматирование, ссылки, загрузки и блоки; если разметку строки не удаётся сопоставить с источником, строка пропускается и попадает в отчёт, а не записывается в повреждённом виде.

Плагин не затрагивает поля слагов, поля только для чтения, скрытые и виртуальные поля, значения `text`, похожие на URL, пути или адреса электронной почты, а также связи, загрузки, даты, числа и идентификаторы. Чтобы пропустить поле (например, артикул), задайте для него `custom: { gt: { translate: false } }`. Если перевод превышает `maxLength` поля, плагин запрашивает более короткий вариант, а если и он не помещается, обрезает текст по границе слова и добавляет многоточие. (См. [поддерживаемый контент](/docs/integrations/payload/reference/supported-content).)

Результаты записываются в тот же документ для каждой целевой локали. Для коллекций и глобалов с [черновиками](https://payloadcms.com/docs/versions/drafts) создаётся черновик, остальные сохраняются напрямую. Плагин никогда не публикует контент. Запуски хранятся в Payload, поэтому продолжаются и после закрытия вкладки: их возобновит следующее посещение панели администратора, а если настроен `jobs.autoRun`, их завершит [очередь заданий](https://payloadcms.com/docs/jobs-queue/overview) Payload. Сбой в одном документе или локали не отменяет остальные.

## Проверка, публикация и сохранение правок

Проверьте каждую локаль в редакторе Payload и опубликуйте её с обычными разрешениями Payload: элементы управления плагина подчиняются правилам доступа текущего пользователя. Если редактор исправил перевод в Payload, включите **Save local edits before translating** в панели **Translations** (по умолчанию параметр выключен) или выберите **Save local edits**, чтобы General Translation сохранял эту формулировку при последующих запусках. После сохранения значения из Payload становятся основным источником и заменяют данные, которые General Translation хранит для этого документа. (См. [управление переводами](/docs/integrations/payload/guides/managing-translations).)

Качество перевода зависит от контекста. Назначьте проекту [контекстную группу](/docs/platform/dashboard/guides/defining-context-for-translations): её Glossary и пользовательские промпты будут применяться при каждом запуске в Payload, поэтому название продукта или уровень тарифного плана будут переводиться на страницах CMS так же, как в вашем приложении. Чтобы запускать перевод из собственного кода, например из хука или задачи по расписанию, вызовите [`translateDocument`](/docs/integrations/payload/reference/api#translate-document) или `translateSite` из `gt-payload`. Использование оплачивается согласно [тарифам General Translation](https://generaltranslation.com/pricing).

О других аспектах многоязычного сайта, например об отдельных URL для каждого языка и `hreflang`, читайте в статье [Как сделать сайт многоязычным?](/kb/make-website-multilingual). Аналогичные инструкции для других CMS: [Sanity](/kb/translate-sanity-content) и [Storyblok](/kb/translate-storyblok-content).

## Ключевые выводы

* Payload 3 хранит переводы на уровне полей: добавьте `localization` в конфигурацию, задайте `localized: true` и запрашивайте данные с параметрами `locale` и `fallback-locale`.
* При значении по умолчанию `fallback: true` для непереведённой локали отдаётся исходный текст, поэтому проверьте полноту перевода, прежде чем добавлять ссылку на язык.
* Официального плагина для перевода у Payload нет, но с помощью плагина Import/Export можно выгрузить локаль для переводчиков в формате CSV или JSON.
* Пакет `gt-payload` от General Translation добавляет `gtPlugin()`, кнопку **Translate** и общую для всего сайта страницу **Translations**. Он переводит локализованные поля text, textarea и форматированный текст Lexical и, если черновики включены, сохраняет каждую локаль как черновик, никогда не публикуя её.
* Включите **Save local edits before translating**, чтобы правки, внесённые в Payload, не терялись при последующих запусках.

## Related questions

- [Как перевести контент в Sanity?](https://generaltranslation.com/ru/kb/translate-sanity-content.mdx): Храните каждый язык как отдельный документ или как значение для каждой локали в каждом поле, а затем переведите источник на все целевые локали. Плагин gt-sanity от General Translation добавляет в Sanity Studio действие Translate и по умолчанию импортирует каждый перевод как черновик, который вы проверяете и публикуете.
- [Как перевести контент в Storyblok?](https://generaltranslation.com/ru/kb/translate-storyblok-content.mdx): В Storyblok добавьте целевые языки в пространство и задайте для каждого переводимого поля значение на каждом языке. Интеграция General Translation со Storyblok заполняет эти значения из панели управления с помощью действия «Синхронизировать и применить» — в виде черновиков, которые вы проверяете и публикуете в Storyblok.
- [Как сделать сайт многоязычным?](https://generaltranslation.com/ru/kb/make-website-multilingual.mdx): Выберите, где будут храниться переводы — в прокси, плагине CMS, конструкторе сайтов или в вашем собственном коде, — а затем выделите каждому языку собственный URL, как рекомендует Google. Переводите страницы целиком, включая заголовки и метаописания, связывайте языковые версии с помощью hreflang и предлагайте переключатель языка вместо автоматического перенаправления посетителей.
- [Как проверять и редактировать переводы?](https://generaltranslation.com/ru/kb/review-translations.mdx): Сравнивайте каждый перевод с источником и другими локалями и исправляйте то, что звучит неправильно. В General Translation переводы редактируются на странице «Переводы» в панели управления, а ход проверки отслеживается с помощью меток и комментариев. При следующем запуске перевода Locadex, AI-агент платформы, переносит правки в пул-реквест.
- [General Translation или Lingo.dev: что выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-lingo-dev.mdx): В основе Lingo.dev — настраиваемые движки перевода, доступ к которым дают инструменты для CLI, React и GitHub. General Translation — это платформа локализации: библиотеки, контекст кода, общая терминология, проверка в панели управления на любом тарифном плане и Locadex, который к тому же интернационализирует ваш код. Выбирайте Lingo.dev, если вам нужно управлять выбором модели для каждой языковой пары.

## Previous and next questions

- Previous question: [Как перевести файлы локалей в формате YAML?](https://generaltranslation.com/ru/kb/translate-yaml-files.mdx)
- Next question: [Как создать карту сайта для многоязычного веб-сайта?](https://generaltranslation.com/ru/kb/multilingual-sitemap.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/ru/kb/sitemap.md) for every article.
