# General Translation Integrations: Управление переводами
URL: https://generaltranslation.com/ru/docs/integrations/sanity/guides/managing-translations.mdx
---
title: Управление переводами
description: "Как управлять переводами в General Translation Sanity: в этом руководстве рассматриваются импорт, обновление ссылок, массовая публикация и поведение полей."
related:
links:
- /docs/integrations/sanity/guides/translating-content
- /docs/integrations/sanity/guides/querying-translations
- /docs/integrations/sanity/guides/configuring-sanity
---
Управляйте созданными в Sanity переводами после настройки с помощью инструментов перевода в плагине.
В этом руководстве рассматриваются общий инструмент **Translations**, обновление ссылок, массовая публикация, поведение полей и пользовательская сериализация.
## Использование инструмента Translations [#translations-tool]
Плагин регистрирует инструмент **Translations** для всего сайта, в котором перечислены все документы, доступные для перевода. В нём можно:
* Сгенерировать переводы для всех документов (**Translate All**).
* Импортировать все готовые переводы, перезаписав существующие (**Import All**).
* Импортировать только переводы, которые ещё не записаны в метаданных исходного документа (**Import Missing**).
* Обновить ссылки во всех переведённых документах (**Patch Document References**).
* Опубликовать переведённые документы, если исходный документ опубликован (**Publish Translations**).
Включите **Auto-refresh**, чтобы регулярно проверять статус перевода, или используйте **Refresh Status** для разовой проверки.
## Импорт переводов [#import]
Сгенерированные переводы нужно импортировать в Sanity, прежде чем они появятся в виде переведённых документов. При импорте плагин объединяет переведённые поля с исходным документом, поэтому поля, которые не отправлялись на перевод, сохраняются.
* Для одного документа импортируйте перевод через действие **Translate** или дополнительную вкладку **General Translation**.
* Для нескольких документов используйте **Import All** или **Import Missing** в инструменте Translations.
## Обновление ссылок [#patch-references]
Переведенные документы могут ссылаться на другие документы. При обновлении ссылок каждая ссылка `_ref` переписывается так, чтобы указывать на перевод связанного документа для той же локали, если такой перевод существует. Плагин берет эти соответствия из документов `translation.metadata`.
Чтобы применить это к существующим переведенным документам, используйте **Patch Document References** в инструменте Translations. В диалоге отдельного документа это также выполняется автоматически после импорта (там автообновление включено по умолчанию).
## Публикация переводов [#publish]
Используйте функцию **Publish Translations**, чтобы массово публиковать переведённые документы. Плагин публикует только те переведённые документы, для которых опубликован исходный документ. Это полезно после импорта большого количества переводов или исправления ссылок в рамках локали.
## Управление поведением полей [#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(`${children}`, value, 'markDef'),
inlineMath: ({ value, children }) =>
attachGTData(`${children}`, 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