# General Translation Integrations: Управление переводами
URL: https://generaltranslation.com/ru/docs/integrations/sanity/guides/managing-translations.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Импорт, исправление ссылок в документах, массовая публикация и управление поведением полей для переводов Sanity.

Управляйте созданными в Sanity переводами после настройки с помощью инструментов перевода в плагине.

В этом руководстве рассматриваются общий инструмент **Translations**, исправление ссылок в документах, массовая публикация, поведение полей и пользовательская сериализация.

## Использование инструмента Translations [#translations-tool]

Плагин регистрирует инструмент **Translations** для всего сайта, в котором перечислены все документы, доступные для перевода. В нём можно:

* Сгенерировать переводы для всех документов (**Translate All**).
* Сохранить текущие переводы Sanity перед последующими запусками (**Сохранять локальные правки**).
* Отправить текущие переводы Sanity в General Translation без запуска перевода (**сохранить локальные изменения**).
* Импортировать все готовые переводы, перезаписав существующие (**Import All**).
* Импортировать только переводы, которые ещё не записаны в метаданных исходного документа (**Import Missing**).
* Исправить ссылки в документах во всех переведённых документах (**исправить ссылки в документах**).
* Опубликовать переведённые документы, если исходный документ опубликован (**Publish Translations**).

Автообновление и автоимпорт включены по умолчанию. Автоматическое исправление ссылок и автопубликация отключены. Изменения этих переключателей и **Сохранять локальные правки** сохраняются в хранилище браузера для текущего проекта и набора данных Sanity.

*Примечание: **Import Missing**, **исправить ссылки в документах** и **Publish Translations** зависят от `translation.metadata` на уровне документа. Для локализации на уровне полей используйте **Import All** или импортируйте локаль из её строки статуса, затем проверьте и опубликуйте исходный документ через обычный workflow Sanity.*

(См. [Сохранение изменений в переводах](/docs/integrations/sanity/guides/translating-content#preserve-edits), чтобы выбрать между переключателем и действием по запросу).

## Импорт переводов [#import]

Сгенерированные переводы нужно импортировать в Sanity. При локализации на уровне документов плагин объединяет переведённые поля в документ локали, поэтому поля, которые не отправлялись на перевод, сохраняются. При локализации на уровне полей он объединяет переведённые значения в интернационализированные массивы исходного документа.

* Для одного документа импортируйте перевод через действие **Translate** или дополнительную вкладку **General Translation**.
* Для нескольких документов используйте **Import All** или **Import Missing** в инструменте Translations.

Если перевод на уровне документа был удалён, а его запись в `translation.metadata` осталась, импорт этой локали создаёт замещающий перевод и обновляет ссылку в метаданных. Используйте **Import All** или импортируйте локаль напрямую; **Import Missing** пропускает локали, уже записанные в метаданных. Импорт документа завершается ошибкой, если его исходный документ больше не существует.

## Исправление ссылок в документах [#patch-references]

Переведенные документы могут ссылаться на другие документы. При исправлении ссылок в документах каждая ссылка `_ref` переписывается так, чтобы указывать на перевод связанного документа для той же локали, если такой перевод существует. Плагин берет эти соответствия из документов `translation.metadata`.

Чтобы применить это к существующим переведенным документам, используйте **Patch References** в инструменте Translations или включите **Auto-patch after import** в диалоге отдельного документа. Автоматическое исправление ссылок отключено по умолчанию.

Если переведенный документ уже опубликован и не имеет черновика, исправление ссылок в документах создает черновик на основе опубликованного документа и обновляет этот черновик. Опубликованный документ напрямую не изменяется.

## Публикация переводов [#publish]

Используйте функцию **Publish Translations**, чтобы массово публиковать переведённые документы. Плагин публикует только те переведённые документы, для которых опубликован исходный документ. Это полезно после импорта большого количества переводов или исправления ссылок в рамках локали.

Импортированные переводы на уровне документов создаются как черновики. Включите **Автопубликация после импорта**, чтобы публиковать их автоматически, или оставьте значение по умолчанию выключенным, чтобы проверить их перед публикацией.

## Просмотр отладочной информации [#debug-info]

В нижней части инструмента **Translations** и диалогового окна документа отображается установленная версия `gt-sanity`. Нажмите **Debug info**, чтобы просмотреть и скопировать фактическую конфигурацию плагина для обращения в службу поддержки.

Вывод содержит разрешённые локали, режим перевода, правила для документов и полей, текущие значения настроек, количество переводов, проект Sanity и набор данных, а также сведения о том, найден ли документ с секретами. API-ключ никогда не включается — указывается только, настроен ли он.

## Управление поведением полей [#field-behavior]

Используйте сопоставители полей, если некоторые поля не следует переводить обычным образом. Каждый сопоставитель применяется к полям, заданным выражением JSONPath `property` и, при необходимости, `_id` документа.

### Копирование полей без перевода

Используйте `ignoreFields` для полей, которые нужно копировать из исходного документа, не отправляя их в translation API, например для категорий, тегов или внутренних метаданных.

```ts
gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'zh', 'ja'],
  ignoreFields: [
    { fields: [{ property: '$.category' }] },
    { fields: [{ property: '$..linkType' }] },
  ],
});
```

### Копируйте поля и делайте их уникальными

Используйте `dedupeFields` для полей, которые должны брать за основу исходное значение, но при этом быть уникальными для каждой локали. Это часто нужно для слагов.

```ts
gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'zh', 'ja'],
  dedupeFields: [{ fields: [{ property: '$.slug', type: 'slug' }] }],
});
```

Для slug в Sanity `{ _type: 'slug', current: 'about' }` становится `{ _type: 'slug', current: 'about-es' }` для испанского языка. Если редактор позже изменит переведённый slug, при последующих импортах это изменённое значение сохранится.

### Удаление полей из переводов

Используйте `skipFields` для полей, которые вообще не должны копироваться в переведённые документы, например для метаданных, относящихся только к исходному документу, или для `slug`, которые редакторы задают вручную для каждого языка.

```ts
gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'zh', 'ja'],
  skipFields: [
    { fields: [{ property: '$.slug', type: 'slug' }] },
    { fields: [{ property: '$.canonicalUrl' }] },
  ],
});
```

(Полное определение типа см. в [справочнике по сопоставителям полей](/docs/integrations/sanity/reference/plugin-configuration#field-matchers)).

## Запретите перевод пользовательских типов [#stop-types]

По умолчанию плагин сохраняет набор типов схем, не подлежащих переводу. Используйте `additionalStopTypes`, чтобы добавить собственные пользовательские типы.

```ts
gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'zh', 'ja'],
  additionalStopTypes: ['codeBlock', 'mux.video', 'mux.videoAsset'],
});
```

(См. полный список [stop types, используемых по умолчанию](/docs/integrations/sanity/reference/plugin-configuration#stop-types)).

## Настройка сериализации [#serialization]

Плагин преобразует документы в HTML для перевода и обратно. В большинстве проектов менять это не нужно. Используйте пользовательские сериализаторы только в том случае, если в вашей схеме есть пользовательские marks или типы блоков, которые не обрабатываются по умолчанию.

```ts title="sanity.config.ts"
import { attachGTData, gtPlugin } from 'gt-sanity';

gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'zh', 'ja'],
  additionalSerializers: {
    marks: {
      link: ({ value, children }) =>
        attachGTData(`<a>${children}</a>`, value, 'markDef'),
      inlineMath: ({ value, children }) =>
        attachGTData(`<span>${children}</span>`, value, 'markDef'),
    },
  },
});
```

`attachGTData(html, data, 'markDef')` встраивает данные метки в сериализованный HTML, чтобы плагин мог заново создать метку при обратном слиянии перевода. (См. [справочник по сериализации](/docs/integrations/sanity/reference/plugin-configuration#serialization)).

## Next steps

- /docs/integrations/sanity/guides/translating-content
- /docs/integrations/sanity/guides/querying-translations
- /docs/integrations/sanity/guides/configuring-sanity

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
