Why are my translations not reaching my app?
Find out why a translation you can see in the editor is not showing in your product, and fix it.
The editor shows your translations as they are now. Your app shows whatever version it last received, from the CDN or from files in its build. When the two disagree, one of the causes below is almost always the reason. Work through them in order.
Editing a translation does not publish it. Open Releases and look at the language's Live column in Departures. If it has no version, there is nothing for your app to fetch, and the CDN answers 404 not-published. Publish it.
A published version never changes. Edits made after it are not in it, so publish the language again. When nothing has changed, the publish says the language is already live and keeps the current version.
If the project's Freshness is Auto: publish on every push, each push publishes the language it uploaded at that moment. Translations that arrive afterwards, such as the AI translation a push of source strings starts, wait for that language's next publish.
If the project's Drafts rule is No, hold drafts back, a translation Glossa wrote goes into a version only once someone approves or edits it. The language's status reads waiting for approval while drafts remain. Approve them and publish again, or change the rule in the This release card on Releases. See Choose whether AI drafts are published.
An app that requests a versioned address (.../v3) gets that version forever: that is what makes it safe to cache. Move it to the newer version, or to the latest address. See Latest and versioned addresses.
The latest address may be cached for up to 60 seconds after a publish, so give a new version about a minute. If you put your own CDN in front of transglot, check it honours the Cache-Control the origin sends rather than caching for longer. Your app's own storage, such as a persisted runtime cache, also serves the old version until it revalidates.
A version only holds strings that have a translation. A key nobody has translated is absent, and the runtime client shows the key itself. Two other cases leave a string out:
- The project's Message syntax is ICU and the translation is not valid ICU MessageFormat. The publish notice says how many keys were left out. Fix them in the editor and publish again.
- The delivery format cannot represent the string, such as a plural string in a format without plural support.
Each version is published in one format. A request with ?format= naming another format returns 404. Request the published format, which Releases shows under Delivered as, or change Delivery format in Settings → Developer and publish again.
Changes to Delivery format, Message syntax or the Drafts rule apply when a version is built. What is live keeps its content until the language's next publish.
If your build pulls translations with the CLI or the GitHub Action rather than reading the CDN at runtime, nothing changes in your app until you run that build again. Publishing affects only the CDN.
Check the status code:
401: the CDN key is missing, mistyped or deleted. Use theX-Transglot-Cdn-Keyheader or?key=, and a key from this project.404 not-found: the project id in the address does not belong to the key's project.403 plan-feature-required: the account's plan no longer includes runtime delivery. The keys are kept and serve again after an upgrade.
See Errors for the full list.