How do I publish translations so my app uses them?
Publishing is the step that makes a translation real to your app. Until you publish, everything you have written lives in the dashboard only.
There is no build and no deploy in between.
What happens #
Publish
→ translations are written to the CDN origin
→ the cache is purged for what changed
→ your app fetches the new version on its next requestDoing it #
- Open your project
- Click Publish
- Read what it lists — this is the important part
- Confirm
The popover lists exactly what is about to go live, grouped so you can see it rather than trust a count.
Read the list before you confirm #
Drafts publish too. This surprises people, so it is worth being blunt: the publish action includes both approved translations and drafts. The API's own default is approved-only, and the dashboard deliberately widens it so that what the popover lists is what actually ships — a count of "12 ready" that publishes 9 would be worse.
The consequence: draft does not mean "cannot go live". It means "nobody has vouched for this yet". If you need approval to be a real gate, review before publishing rather than relying on the status to hold things back. See How do I review and approve translations?.
How long until visitors see it #
The CDN serves translations with a one-minute cache, and publishing purges what changed — so the usual answer is seconds, and one minute is the ceiling.
Layers that can add their own delay:
| Layer | Delay |
|---|---|
| CDN edge | Purged on publish; max-age=60 otherwise |
| SDK in-memory cache | Up to its refresh interval |
| Next.js ISR | Whatever revalidate you set |
If your app renders translations at build time or caches them for an hour, that is your number, not ours. I published but my app still shows old translations walks through finding which layer is holding on.
From the CLI #
better-i18n publish:status # what would go live right now
better-i18n publish # do itpublish:status is worth running first in a pipeline, and it is the honest answer to "is there anything pending".
There is no rollback #
Publishing is not versioned and there is no snapshot to restore. Fixing a bad publish means editing the translation and publishing again — which takes about a minute, so it is rarely a crisis, but it does mean the review happens before the button, not after.
Every publish is recorded as a job you can inspect:
better-i18n syncs list
better-i18n syncs get <syncId>That tells you what happened and when. It does not undo it.
Better I18N