BunshipBunship
Integrations

Internationalization

Buyer guide to Bunship's real EN/ZH implementation across web, docs, API, and auth emails.

Bunship already supports English and Chinese, but there are four different i18n layers. Treat them as separate systems when you customize.

The 4 i18n Layers in This Repo

  1. Web UI (apps/ship, next-intl)
  2. Docs UI + docs search (apps/ship, Fumadocs)
  3. API errors (apps/ship-api, i18next)
  4. Auth email locale resolution (packages/auth + packages/emails)

Where to Edit

  • Web locale config: apps/ship/src/i18n/config.ts
  • Web message loading: apps/ship/src/i18n/messages.ts
  • Message files: apps/ship/src/messages/en/*.json, .../zh/*.json
  • Docs locale wiring: apps/ship/src/lib/docs-i18n.ts
  • API i18n resources: apps/ship-api/src/i18n/resources/*
  • Auth email locale logic: packages/auth/src/email-locale.ts
  1. Finalize EN product copy first.
  2. Mirror the same key paths in ZH JSON.
  3. Verify locale switch in marketing pages and app pages.
  4. Verify API error localization with X-Locale header.
  5. Verify auth email language in signup/reset/OTP flows.

Common Mistakes to Avoid

  1. Updating web copy but forgetting API error translations.
  2. Changing route copy without updating docs locale files.
  3. Mixing hard-coded strings with translation keys.
  4. Shipping partial ZH coverage in core purchase/auth flows.

Launch Checklist

  1. /en and /zh routing and redirection behavior are correct.
  2. Pricing/auth/dashboard pages are fully translated.
  3. API validation/business errors are localized as expected.
  4. Auth emails pick the correct locale in real browser flows.