Skip to content
Dee Wan 1.0 is not yet released (pre-MVP). See the 1.0 product boundary.

Languages

Each site has its own languages, one default language, and a rule for what visitors get when a translation is missing. Set them under Settings → Languages. Changing them needs the site settings permission (site:settings).

For the full public contract, see locales in the public API. For field and address rules, see models, locales and pages and item address.

  1. Open Settings → Languages.
  2. Open Select language and search for the language. Show dialects of {name} lists its regional variants.
  3. Press Add language.

A language can be added once per site. When the site has no default language yet, Set as default makes the new one the default.

Adding a language changes no content. Items get the new language only when someone starts a translation. See translations.

The default language is marked Default. Press Make default on another language to change it.

  • A read with no locale gets the default language.
  • Under the fallback rule, the default is the last language tried before the item’s own primary language.
  • A new item starts in the default language.
  • Changing the default clears the site’s cached public reads. If that fails, the screen says so, and readers may get the previous default for a while.
  • The default language cannot be removed.

Choose what visitors get when a translation is missing

Section titled “Choose what visitors get when a translation is missing”

Under Missing translations, set When this language is missing:

Choice Rule A visitor asking for a missing language gets
Show the default-language page fallback The first published language in the chain below. The response’s locale says which one.
Show page not found strict Nothing. Lists leave the item out. A direct read answers 404 locale_unavailable.

Only published languages are ever served. A draft language never fills in for another.

When nothing is set, the screen says No behaviour is set, so this site’s public API is not serving. Pick one to repair it.

With Show the default-language page and more than one language, Fallback languages appears. Each language can list languages to try, in order, before the default.

  1. Press Edit on a language.
  2. Under If {language} is missing, show, press Add a fallback language and choose one.
  3. Order them with the move buttons. Remove one with its remove button.
  4. Press Save.

Before you save, the screen counts what visitors of that language would get: Translated, Shown in {language} and Not shown.

  • A fallback language’s own fallbacks follow it. With pt-BR → pt and pt → es, a pt-BR visitor gets pt-BR, then pt, then es, then the default.
  • The screen warns when your change Also changes what … visitors see for other languages.
  • A list holds at most 8 languages.
  • A save is refused when languages would fall back to each other, when a language falls back to itself, lists one twice, or names a language the site does not have.
  • With no list, a language falls back to the default alone.
  • Under Show page not found, fallback languages are ignored.

A public read names its language with ?locale=. Without it, the read serves the default language.

  • Under fallback, a read tries the requested language, its fallback languages, the default language, then the item’s primary language. It serves the first one that is published.
  • Under strict, it serves only the requested language, and only while that language is published.
  • Each language of an item has its own address. A single-item read lists every live language and its address in alternates.
  • The editor shows the result for each language. For example, Not live in Thai yet. Visitors see English. or Not live in Thai yet. Visitors get page not found.

The site determines the rule. A visitor or caller cannot change it.

To fill individual missing fields, open the model field’s Properties and enable Field fallback. It is off by default. The field must be optional and translated: text, rich text, number, Boolean, date, select, JSON or component. Addresses, relations, media and shared or required fields do not offer this option.

In the content editor, Use fallback removes that field’s translation. Enter translation starts a local value again. Clearing a field is intentional: an empty value, null, false, zero or an empty list never borrows another language’s value.

With the site’s fallback rule, an absent field uses the first published value in the fallback chain, then the item’s primary language. Each source language is read from its own published version; a newer draft cannot fill the field. With the strict rule, field fallback is ignored.

Public single-item reads, lists, filters, sorting, search and generated website pages use these effective values. The response’s locale still names the item’s served language. The editor keeps local values separate, so borrowing a value does not copy it into the translation.

Management saves can remove a translation with unset_fields: {"th": ["subtitle"]}. Only opted-in fields are accepted. A field cannot be set and unset in the same save; field and language permissions still apply. Omitted keys in an ordinary partial save keep their existing values.

A role can access every language by default. To limit it, open Settings → Roles, edit the role and open Limit fields and languages.

  • Limit languages picks the languages the role works in. It applies to create, update, delete, restore, review, publish and unpublish.
  • Can read every language keeps reading open, so a translator can read the source language while editing only their own.
  • An action outside the role’s languages is refused with locale_denied. An action that spans languages, such as publishing a whole item or performing a bulk action, is refused in its entirety.
  • Shared fields, shared relation lists and media live on the primary language. Changing them needs the right to update the primary language.

The full rules are in limit a role to some fields or languages.

These actions change one language and leave the others as they are:

  • Start a {language} translation adds a language to an item.
  • Publish {language} and Unpublish {language} in the item’s Publishing panel.
  • Move this language to Trash, and restoring that language from Trash.
  • Restore {language} only in the item’s History.
  • Each language’s own address.
  • Relation fields with Different links in each language. See different links in each language.
  • Alt text and descriptions per language in the media library.

Actions marked All languages move every language of the item. A move between two unpublished stages, such as Approve · All languages, leaves a language that is already published live; take it off with Unpublish {language}. See one language or all languages.

Press Remove on the language. The confirmation counts what the language holds: content items written in it, translation groups whose primary language it is, and media descriptions.

  • Removing takes the language out of the authoring controls. Nothing stored is deleted.
  • Published content may keep serving this language until it is changed and published again.
  • The default language cannot be removed. Make another language the default first.
  • A language that is a fallback for others cannot be removed: {language} is a fallback for {languages}. Remove it from their lists first.
  • If what the language holds changes before you confirm, the removal is refused. Review the new counts and try again.
  • New content cannot be created in a removed language, or in one the site never had (unknown_locale). A create request that runs while the language is being removed writes nothing (language_changed).
Problem Cause Fix
The public API answers 500 site_locale_policy_invalid. No missing-translation rule is stored. Choose one under Missing translations.
A read answers 404 locale_unavailable. The item is published, but in no language the rule may serve. Under strict, only the requested language counts. Publish that language, add a fallback language, or switch to Show the default-language page.
Visitors see another language. The fallback rule applies, and the requested language is not published. Check the response’s locale. Publish the translation.
Remove is refused. It is the default, or a fallback for another language. Change the default, or edit the fallback lists.
A fallback list does not save. A loop, a repeat, an unknown language or more than 8. Fix the list as the screen says.
Adding a language to an item is refused with language_in_trash. That language of the item is in Trash. Restore it from Trash.
A translator cannot publish their language. The role lacks publish in that language, or the action spans languages. Use the language’s own button, or extend the role.

Translate and publish items in edit and publish content.


Unreleased / pre-MVP; no stable version
Source revision: fe23db481c422b40e317b92fc98116b4c0c26a87 (modified checkout)
Build date (UTC): 2026-10-18T09:22:34.630Z
Upgrade target: unavailable: modified checkout. Release notes