# 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