How do I publish translations so my app uses them?
4 min readBeginner
Publishing pushes your translations from the dashboard to the CDN, making them available to your app at runtime.
How publishing works
You click "Publish"
→ Translations are uploaded to the CDN origin (R2 storage)
→ Cache is purged globally
→ Your app fetches fresh translations on next request
→ Users see updated content within ~60 seconds
No rebuild. No redeploy. No CI/CD pipeline needed.
Step-by-step
- Go to your project in the dashboard
- Make sure all keys have translations for your target languages
- Click "Publish" in the top-right corner
- Review the changes summary
- Confirm the publish
What happens after publishing?
Translations propagate through multiple cache layers:
| Layer | Refresh time | Details |
|---|---|---|
| CDN edge cache | Immediate (purged) | Global CDN nodes get fresh data |
| SDK in-memory cache | ~60 seconds | TtlCache with 60s TTL |
| Browser cache | ~60 seconds | Follows CDN Cache-Control headers |
| Next.js ISR | ~30 seconds | If using messagesRevalidateSeconds: 30 |
In practice, users see updated translations within 60 seconds of publishing.
Publishing from the CLI
You can also publish from your terminal:
better-i18n publish
This is useful for CI/CD pipelines or automated workflows.
Draft vs. published
- Draft translations are only visible in the dashboard. Your app can't see them.
- Published translations are live on the CDN. Your app fetches them at runtime.
You can safely edit drafts without affecting your live app. Only clicking "Publish" pushes changes to production.
Rollback
If something goes wrong, you can rollback to a previous publish from the dashboard. Each publish creates a snapshot that you can restore.
Next steps
Was this article helpful?