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

  1. Go to your project in the dashboard
  2. Make sure all keys have translations for your target languages
  3. Click "Publish" in the top-right corner
  4. Review the changes summary
  5. 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