# General Translation Integrations: Translating content URL: https://generaltranslation.com/en-US/docs/integrations/sanity/guides/translating-content.mdx --- title: Translating content description: How to translate Sanity documents with General Translation from the document action, the tab view, or the Translations page. related: links: - /docs/integrations/sanity/guides/managing-translations - /docs/integrations/sanity/guides/querying-translations - /docs/integrations/sanity/guides/configuring-sanity --- Generate translated documents for each target locale with the General Translation plugin. Translations are created as separate Sanity documents, each with a language field, and linked to the source document through a `translation.metadata` document. ## Translate one document [#translate-one] The **Translate** action is available on every document, but the translation tools only appear on source-language documents. On a translated document, the dialog shows a message instead. 1. Open a source-language document in Sanity Studio. 2. Click **Translate** in the document action bar. 3. Under **Generate Translations**, select the target locales. 4. Click **Generate Translations**. Once translations are generated, the dialog polls for progress under **Translation Status**. When a translation is ready, the plugin imports it, patches its references, and publishes it, since auto-import, auto-patch, and auto-publish are enabled by default in this dialog. You can toggle each behavior, import a locale manually from its status row, or use **Import All**, **Patch References**, and **Publish Translations**. ## Use the Translations tab [#translations-tab] If your Studio includes `TranslationsTab`, open the **General Translation** tab on a document. It provides the same workflow as the **Translate** action, kept visible inside the document editor. See [Configure Sanity](/docs/integrations/sanity/guides/configuring-sanity#translations-tab) to add the tab. ## Translate many documents [#translate-many] Use the site-wide **Translations** tool to work across all translatable documents at once. From it you can: - Generate translations for all documents (**Translate All**). - Import all ready translations (**Import All**). - Import only translations that have not been imported yet (**Import Missing**). - Patch references across translated documents (**Patch Document References**). - Publish translated documents whose source is published (**Publish Translations**). See [Managing translations](/docs/integrations/sanity/guides/managing-translations). ## What gets translated [#what-translated] The plugin serializes documents to HTML, sends that HTML for translation, then merges the translated HTML back into new locale documents. It recursively processes: - String and text fields. - Portable Text blocks. - Nested objects. - Arrays. Some field types are preserved and not sent for translation by default, including references, dates, files, images, numbers, booleans, URLs, colors, code, and geopoints. See the full [default stop types](/docs/integrations/sanity/reference/plugin-configuration#stop-types). Slug fields are *not* stopped by default, so a slug's `current` value is sent for translation. Use `dedupeFields` or `skipFields` to control slug behavior. ## Handle references [#references] Translated documents can reference other documents. The plugin looks up each referenced document's translation and rewrites the reference to point to the correct locale version, when one exists. This runs automatically after import in the document dialog, and on demand with **Patch Document References** on the Translations page. See [Manage translations](/docs/integrations/sanity/guides/managing-translations#patch-references). ## Handle slugs and copied fields [#slugs-fields] Some fields should not be translated directly. Use field matchers to control them: - `dedupeFields` — copy the source value and append the locale to make it unique per document, such as `about` to `about-es`. Commonly used for slugs. - `ignoreFields` — copy the source value unchanged to each translated document. - `skipFields` — remove the field from translated documents entirely. See [Manage translations](/docs/integrations/sanity/guides/managing-translations#field-behavior). ## Next steps - /docs/integrations/sanity/guides/managing-translations - /docs/integrations/sanity/guides/querying-translations - /docs/integrations/sanity/guides/configuring-sanity