# How good is Sanity at localization?

Reviewed by Martin Dejnicki · facts verified 25 October 2026 · canonical: https://deploi.ca/sanity/review/localization

Experience: Reviewed from Sanity's documentation, not production use.

## Short answer

Sanity scores 4 out of 5 on localization in Deploi's review: every plan has unlimited locales ([Sanity pricing](https://www.sanity.io/pricing), October 2026), and plugins cover document-level and field-level models. The risk is the model choice, because field-level locales publish together ([Sanity](https://www.sanity.io/docs/studio/localization), October 2026) and a Growth dataset stops at 10,000 unique attributes, a limit Sanity says Enterprise doesn't raise ([Sanity](https://www.sanity.io/docs/content-lake/attribute-limit), October 2026).

- **Locales included:** Unlimited on Free, Growth and Enterprise. Sanity doesn't charge per locale; unique attributes per dataset are the limit instead: 2,000 on Free and 10,000 on Growth ([Sanity, Plans that scale with you](https://www.sanity.io/pricing))
- **Attribute ceiling:** 10,000 per dataset on Growth and Enterprise. The attribute guide says Enterprise doesn't raise it and there's no pay-as-you-go option; the pricing page shows Enterprise as Custom ([Sanity Docs, Attribute limit](https://www.sanity.io/docs/content-lake/attribute-limit); [Sanity, Plans that scale with you](https://www.sanity.io/pricing))
- **Growth document quota:** 25,000 included, 50,000 with the add-on. Document-level locales multiply documents, and drafts and plugin-created documents count toward the quota ([Sanity, Plans that scale with you](https://www.sanity.io/pricing); [Sanity Docs, Technical limits](https://www.sanity.io/docs/content-lake/technical-limits))
- **Contentful locales:** 2 on Free, 3 on Lite at $300 a month. Lite lists at $300 a month on Contentful's pricing page (October 2026); Contentful's technical ceiling is 500 locales per environment ([Contentful, Pricing](https://www.contentful.com/pricing/); [Contentful, Technical Limits](https://www.contentful.com/developers/docs/technical-limits-2025/))

## Deploi's call

Sanity is a strong localization platform for teams with developers and a weak one for teams that want localization to work out of the box. Default to document-level translation for long-form content and anything with its own publishing schedule, keep field-level for short shared values, and confirm your translation vendor's connector before you lock the model.

**FITS: Sanity fits your localization when**

- Markets publish on their own schedules, so document-level translation suits most content.
- Developers will own the schema, the plugins and the fallback queries.
- Your translation vendor's Sanity connector supports the model you choose.
- Your locale count is growing, and paying per locale elsewhere would hurt.

**PARTIAL: Sanity fits only partly when**

- Editors expect built-in fallback locales, as Contentful configures them, or per-locale publishing, which Contentful sells on specific plans ([Contentful pricing](https://www.contentful.com/pricing/); [Contentful locale-based publishing](https://www.contentful.com/help/localization/locale-based-publishing/), October 2026).
- Field-level content already sits near the 10,000 attributes per dataset that Sanity's attribute guide sets for Growth and Enterprise ([Attribute limit guide](https://www.sanity.io/docs/content-lake/attribute-limit), October 2026).
- Launches must flip many locales live in one moment, which Content Releases is built for, an Enterprise add-on as of October 2026 ([Sanity pricing](https://www.sanity.io/pricing)).

## Deploi's rating: 4 out of 5

| Criterion | Score | Why |
| --- | --- | --- |
| Modeling options | 5 / 5 | Document-level and field-level, each with a Sanity-maintained plugin, and both can run in one project |
| Locale cost by plan | 4.5 / 5 | Unlimited locales on every plan, bounded by attribute and document quotas |
| Translation tooling | 4 / 5 | AI Assist on Growth, an experimental Translate action, and TMS connectors that each support different models |
| Per-locale publishing | 3.5 / 5 | Document-level publishes each language alone; field-level publishes every language together |
| Limits at scale | 3 / 5 | 10,000 attributes per dataset, which Sanity's attribute guide says Enterprise doesn't raise; document-level spends document quota |
| Setup effort | 3 / 5 | Nothing is localized by default: plugins, schema, queries and fallbacks are developer work |

## How does Sanity handle localization?

Sanity handles localization by storing the language as a field value, so translated content is ordinary structured content rather than a built-in locale layer ([Sanity Docs, Localization](https://www.sanity.io/docs/studio/localization), October 2026). You choose a model per document type, and Sanity maintains two plugins that make each model workable in Sanity Studio: one for translated documents and one for translated fields. Both can run in the same project ([Sanity Docs, Localization](https://www.sanity.io/docs/studio/localization)).

Locales cost nothing extra. Sanity's pricing page lists unlimited locales on Free, Growth and Enterprise and says it doesn't charge for locales, as long as you stay within the unique attributes included per dataset (as of October 2026, [Sanity pricing](https://www.sanity.io/pricing)). That condition is the catch: you pay for localization in quota, either attributes or documents, depending on the model.

Fallbacks are yours to write. A query falls back to a base language with the coalesce() function in GROQ (Graph-Relational Object Queries), so a missing translation shows the default copy only if a developer wrote it that way ([Sanity Docs, Localization](https://www.sanity.io/docs/studio/localization)). [Our overall Sanity review](https://deploi.ca/sanity/review) puts this trade, flexibility for setup work, in context.

## How does Deploi score Sanity on localization?

Deploi scores Sanity 4 out of 5 on localization, the rounded mean of six criteria. The score rests on Sanity's documentation, its pricing page and the translation vendors' own connector pages. Sanity scores highest on modeling freedom and locale cost, and lowest on limits at scale and setup effort. Translation tooling sits at 4, because AI Assist, the Translate action and translation management system (TMS) connectors each cover part of the job.

**Deploi scores Sanity 4 out of 5 on localization**

| Criterion | Score out of 5 | Note |
| --- | --- | --- |
| Modeling options | 5 | Document-level and field-level, each with a Sanity-maintained plugin, and both can run in one project |
| Locale cost by plan | 4.5 | Unlimited locales on every plan, bounded by attribute and document quotas |
| Translation tooling | 4 | AI Assist on Growth, an experimental Translate action, and TMS connectors that each support different models |
| Per-locale publishing | 3.5 | Document-level publishes each language alone; field-level publishes every language together |
| Limits at scale | 3 | 10,000 attributes per dataset, which Sanity's attribute guide says Enterprise doesn't raise; document-level spends document quota |
| Setup effort | 3 | Nothing is localized by default: plugins, schema, queries and fallbacks are developer work |

The overall score is Deploi's judgment: the mean of the six lines is 3.83, rounded to 4 (Deploi arithmetic from the scores above). Sources: [Sanity, Plans that scale with you](https://www.sanity.io/pricing); [Sanity Docs, Localization](https://www.sanity.io/docs/studio/localization); [Sanity Docs, Attribute limit](https://www.sanity.io/docs/content-lake/attribute-limit); [Sanity Docs, Content translation with AI Assist](https://www.sanity.io/docs/studio/ai-assist-content-translation); [Phrase, Sanity (TMS)](https://support.phrase.com/hc/en-us/articles/18339118196380-Sanity-TMS). As of 24 October 2026.

## Should you localize by document or by field in Sanity?

Localize by document when a language publishes on its own schedule or carries long-form text, and by field when short shared values must stay in sync across languages. Sanity's localization guide draws the same line: field-level "requires you to publish content in all languages simultaneously," while document-level "lets you publish each language version independently" ([Sanity Docs, Localization](https://www.sanity.io/docs/studio/localization), October 2026). You can use both in one project, so decide per document type, and plan the localization workflow around the slowest market.

**Document-level suits independent markets; field-level suits short values that ship together**

| Question | Document-level | Field-level |
| --- | --- | --- |
| What it stores | One document per language, joined by references | One document holding every language in an array |
| Publishing | Each language publishes on its own | All languages publish together |
| Sanity-maintained plugin | @sanity/document-internationalization | sanity-plugin-internationalized-array |
| Quota it spends | Documents, plus one linked metadata document per set | Attributes, a fixed set when you use arrays |
| Best for | Articles, landing pages, Portable Text | Product names, labels, settings |

The best-for row is Deploi's judgment from Sanity's localization guide. Sources: [Sanity Docs, Localization](https://www.sanity.io/docs/studio/localization); [Sanity Docs, Attribute limit](https://www.sanity.io/docs/content-lake/attribute-limit); [Sanity Docs, Technical limits](https://www.sanity.io/docs/content-lake/technical-limits). As of 24 October 2026.

Two pitfalls to plan for. Both plugins changed how they store the language in March 2026, so older queries that filter on the item key break after the upgrade ([Sanity Docs, Localization](https://www.sanity.io/docs/studio/localization)). And flipping many document-level locales live in one moment is what [Content Releases](https://deploi.ca/sanity/features/content-releases) is built for, an Enterprise add-on ([Content Releases user guide](https://www.sanity.io/docs/user-guides/content-releases), October 2026).

## How does translation work in Sanity?

Translation in Sanity runs through one of three routes: AI Assist inside Sanity Studio, the Translate action called from code, or a translation management system (TMS) connector. AI Assist translates whole documents or fields on the Growth plan and up, and whole-document translation overwrites the current values, so editors copy the document first and review the result ([AI Assist translation docs](https://www.sanity.io/docs/studio/ai-assist-content-translation), October 2026). The Translate action in Agent Actions takes a style guide and protected phrases from code, but Sanity marks it experimental ([Translate quick start](https://www.sanity.io/docs/agent-actions/translate-quickstart), October 2026; [Sanity's AI translation guide](https://www.sanity.io/ai-translations)).

Your TMS connector decides your model more than Sanity does, because several connectors support only document-level translation:

**Phrase and the Tinloof Crowdin integration need document-level translation; Smartling and Transifex handle both**

| Connector | Models it supports | Setup note |
| --- | --- | --- |
| Smartling plugin | Document or field level | Needs a proxy endpoint because of Smartling's browser security rules |
| Transifex plugin | Document, field or internationalized array | Imports partial or complete translations |
| Phrase plugin | Document level only | Next.js app directory not supported |
| Tinloof custom integration for Crowdin | Document level, with the internationalization plugin | Listed free on Crowdin's store; Crowdin says no official plugin exists and Tinloof offers a custom integration |

Sources: [Sanity, Sanity Studio Smartling plugin](https://www.sanity.io/plugins/sanity-plugin-studio-smartling); [Sanity, Transifex Plugin](https://www.sanity.io/plugins/sanity-plugin-transifex); [Phrase, Sanity (TMS)](https://support.phrase.com/hc/en-us/articles/18339118196380-Sanity-TMS); [Crowdin, Crowdin Integration for Sanity](https://store.crowdin.com/sanity-tinloof). As of 24 October 2026.

See Sanity with Smartling and Sanity with Phrase for setup.

## Which limits bite when you localize Sanity at scale?

Two quotas bite: unique attributes per dataset, which language objects multiply, and documents, which document-level translation multiplies. A unique attribute is a distinct content path and data type in a dataset. A dataset tops out at 10,000 attributes on Growth, and the attribute guide says moving to Enterprise doesn't raise it and no pay-as-you-go option exists ([Attribute limit guide](https://www.sanity.io/docs/content-lake/attribute-limit), October 2026). Wrapping each field in a language object "multiplies the number of attributes by the number of languages added" ([Attribute limit guide](https://www.sanity.io/docs/content-lake/attribute-limit)), so that pattern hits the ceiling first, while arrays and separate documents don't.

Growth includes 25,000 documents, and $299 a month extends that to 50,000 in total ([Sanity pricing](https://www.sanity.io/pricing), October 2026); drafts and plugin-created documents count ([Technical limits](https://www.sanity.io/docs/content-lake/technical-limits)). 2,000 articles in 10 languages at document level is 20,000 documents plus 2,000 linked metadata documents, or 22,000 before drafts (Deploi arithmetic from the figures above). The same content at field level is 2,000 documents. Check the document limits before you pick.

> **Is the Enterprise attribute limit 10,000 or custom?**
>
> Sanity's pricing page lists unique attributes per dataset on Enterprise as "Custom" ([Sanity pricing](https://www.sanity.io/pricing), October 2026). The attribute guide and the technical limits page both say 10,000 on Enterprise ([Attribute limit guide](https://www.sanity.io/docs/content-lake/attribute-limit); [Technical limits](https://www.sanity.io/docs/content-lake/technical-limits)). Get the Enterprise figure in writing before a field-level design depends on it.

## What do you build yourself in Sanity that Contentful's built-in locales provide?

You build the fallback locales and the per-locale publishing workflow, because Contentful builds locales into the platform and Sanity leaves them to your content model. Contentful's field-level pattern duplicates the fields of an entry for each locale and configures fallbacks ([Contentful Help Center](https://www.contentful.com/help/localization/field-and-entry-localization/), October 2026). Its locale-based publishing, which publishes one locale on its own, is an Enterprise-level feature of Enterprise Spaces ([Contentful pricing](https://www.contentful.com/pricing/); [Contentful locale-based publishing](https://www.contentful.com/help/localization/locale-based-publishing/), October 2026). Sanity matches that with document-level translation and fallbacks written into queries.

Contentful also counts locales against the plan: 2 on Free and 3 on Lite, which lists at $300 a month on Contentful's pricing page (October 2026), with a technical ceiling of 500 per environment ([Contentful pricing](https://www.contentful.com/pricing/); [Contentful technical limits](https://www.contentful.com/developers/docs/technical-limits-2025/)). [Sanity vs Contentful](https://deploi.ca/sanity/compare/sanity-vs-contentful) covers price.

**Contentful ships the locale workflow; Sanity leaves it to your developers**

| Question | Sanity | Contentful |
| --- | --- | --- |
| Per-locale publishing | Document-level only | Locale-based publishing in Enterprise spaces |
| Fallback locales | Written into queries | Configured in the platform |
| Who builds the workflow | Your developers, with plugins | Contentful, inside the platform |

Sources: [Sanity Docs, Localization](https://www.sanity.io/docs/studio/localization); [Contentful, Localization strategies](https://www.contentful.com/help/localization/field-and-entry-localization/); [Contentful, Pricing](https://www.contentful.com/pricing/). As of 24 October 2026.

> **When Sanity is the wrong pick for localization**
>
> - No developer will own the localization model after launch.
> - Editors need per-locale publishing and fallbacks on day one without custom work.
> - Your translation vendor's connector supports only a model that doesn't fit your content.

## Deploi's point of view

**Where we disagree.** The usual advice says field-level localization multiplies attributes, so avoid it. That's half right. Wrapping fields in a language object multiplies attributes by the number of languages, but the internationalized-array pattern Sanity recommends keeps a fixed set of paths however many languages you add. The real costs of field-level sit elsewhere: every language publishes together, and some translation connectors, Phrase's among them, don't support it at all.

**What we'd tell you to do first.** Count your locales, your content types and how many markets publish on their own schedule. Then ask your translation vendor which Sanity localization model its connector supports. Those three numbers and that one answer pick the model; the schema follows from them.

**What we refuse to promise.** We won't promise an attribute count for your schema or a translation turnaround, because both depend on your locales and fields. We would measure attributes on a pilot dataset instead of guessing.

## When this answer changes

- Sanity raises or sells extra unique attributes per dataset, or confirms a custom Enterprise figure
- Sanity adds built-in locale fallbacks or per-locale publishing for field-level content
- Phrase or Crowdin adds field-level support to its Sanity connector
- The Translate action in Agent Actions leaves experimental status
- Sanity changes the Growth document quota or the locale line on its pricing page
- Contentful changes the locales included on its Free or Lite plans

## Comparing Sanity with Contentful?

See how the two platforms differ on content modeling, pricing and migration, beyond locales. [Read Sanity vs Contentful](https://deploi.ca/sanity/compare/sanity-vs-contentful)

## Sources

1. [Sanity, Plans that scale with you](https://www.sanity.io/pricing), checked 24 October 2026
2. [Sanity Docs, Localization](https://www.sanity.io/docs/studio/localization), checked 24 October 2026
3. [Sanity Docs, Attribute limit](https://www.sanity.io/docs/content-lake/attribute-limit), checked 24 October 2026
4. [Sanity Docs, Technical limits](https://www.sanity.io/docs/content-lake/technical-limits), checked 24 October 2026
5. [Sanity Docs, Content translation with AI Assist](https://www.sanity.io/docs/studio/ai-assist-content-translation), checked 24 October 2026
6. [Sanity Docs, Translate quick start](https://www.sanity.io/docs/agent-actions/translate-quickstart), checked 24 October 2026
7. [Sanity, AI Translations with Sanity's Agent API](https://www.sanity.io/ai-translations), checked 24 October 2026
8. [Sanity, Sanity Studio Smartling plugin](https://www.sanity.io/plugins/sanity-plugin-studio-smartling), checked 24 October 2026
9. [Sanity, Transifex Plugin](https://www.sanity.io/plugins/sanity-plugin-transifex), checked 24 October 2026
10. [Phrase, Sanity (TMS)](https://support.phrase.com/hc/en-us/articles/18339118196380-Sanity-TMS), checked 24 October 2026
11. [Crowdin, Crowdin Integration for Sanity](https://store.crowdin.com/sanity-tinloof), checked 24 October 2026
12. [Contentful, Localization strategies](https://www.contentful.com/help/localization/field-and-entry-localization/), checked 24 October 2026
13. [Contentful, Pricing](https://www.contentful.com/pricing/), checked 24 October 2026
14. [Contentful, Technical Limits](https://www.contentful.com/developers/docs/technical-limits-2025/), checked 24 October 2026
15. [Sanity Docs, Content Releases user guide](https://www.sanity.io/docs/user-guides/content-releases), checked 24 October 2026
16. [Contentful, Locale-based publishing](https://www.contentful.com/help/localization/locale-based-publishing/), checked 24 October 2026
