Skip to content

feat: add multilingual documentation with 14 languages and automated translation tooling#95

Merged
NiveditJain merged 5 commits into
mainfrom
luv-93
Apr 14, 2026
Merged

feat: add multilingual documentation with 14 languages and automated translation tooling#95
NiveditJain merged 5 commits into
mainfrom
luv-93

Conversation

@NiveditJain

Copy link
Copy Markdown
Member

Summary

  • Add multilingual documentation support for 14 languages across 3 tiers (Tier 1: zh, ja, ko, es, pt-br, de, fr; Tier 2: ru, hi, tr, vi, it; Tier 3: ar, he — including RTL support)
  • Build automated translation CLI (scripts/translate-docs/) powered by Claude API with content-hash caching, MDX component preservation, internal link rewriting, and a do-not-translate glossary for technical terms
  • Restructure docs/docs.json for Mintlify i18n with navigation.languages array — English pages stay at root to preserve existing URLs, each additional language gets prefixed page paths and translated tab/group names
  • Generate 252 translated MDX doc pages + 14 translated READMEs with language selectors
  • Add translation links to the main README and ExosphereHost attribution

What's included

Component Details
Translation CLI bun run translate with --tier, --languages, --docs-only, --readme-only, --dry-run, --validate, --force options
Mintlify i18n Language switcher in docs site, 15 navigation entries (en + 14 languages)
Translated docs 18 pages × 14 languages = 252 new MDX files in docs/{lang}/
Translated READMEs 14 files in docs/i18n/README.{lang}.md with language selectors and RTL wrapping
Tests 51 new unit tests across 5 test files in __tests__/scripts/translate-docs/
Caching Content-hash-based .translation-cache.json (gitignored) — only re-translates changed pages

Test plan

  • All 51 new unit tests pass (bun run test:run)
  • Translation validation passes — every page in docs.json maps to a real file
  • Code blocks verified untranslated across all 252 MDX files
  • RTL wrapping verified for Arabic and Hebrew READMEs
  • Frontmatter titles translated for all languages
  • CI passes (lint, tsc, build, test, e2e)
  • Mintlify preview confirms language switcher and page rendering

🤖 Generated with Claude Code

…n tooling

Add Mintlify i18n support with automated Claude API-powered translation
for 14 languages: Chinese, Japanese, Korean, Spanish, Portuguese (BR),
German, French, Russian, Hindi, Turkish, Vietnamese, Italian, Arabic,
and Hebrew. Includes translation CLI script with caching, translated
README files, and ExosphereHost attribution.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Apr 14, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 286 files, which is 136 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 935dace8-2c3e-4f20-8f7b-1af859139f89

📥 Commits

Reviewing files that changed from the base of the PR and between 8605cf1 and b040bb8.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (286)
  • .github/workflows/ci.yml
  • .github/workflows/translate-docs.yml
  • .gitignore
  • CHANGELOG.md
  • README.md
  • __tests__/scripts/translate-docs/cache.test.ts
  • __tests__/scripts/translate-docs/config.test.ts
  • __tests__/scripts/translate-docs/mdx-translator.test.ts
  • __tests__/scripts/translate-docs/mintlify-nav.test.ts
  • __tests__/scripts/translate-docs/readme-translator.test.ts
  • docs/ar/architecture.mdx
  • docs/ar/built-in-policies.mdx
  • docs/ar/cli/dashboard.mdx
  • docs/ar/cli/environment-variables.mdx
  • docs/ar/cli/hook.mdx
  • docs/ar/cli/install-policies.mdx
  • docs/ar/cli/list-policies.mdx
  • docs/ar/cli/remove-policies.mdx
  • docs/ar/cli/version.mdx
  • docs/ar/configuration.mdx
  • docs/ar/custom-policies.mdx
  • docs/ar/dashboard.mdx
  • docs/ar/examples.mdx
  • docs/ar/for-agents.mdx
  • docs/ar/getting-started.mdx
  • docs/ar/introduction.mdx
  • docs/ar/package-aliases.mdx
  • docs/ar/testing.mdx
  • docs/de/architecture.mdx
  • docs/de/built-in-policies.mdx
  • docs/de/cli/dashboard.mdx
  • docs/de/cli/environment-variables.mdx
  • docs/de/cli/hook.mdx
  • docs/de/cli/install-policies.mdx
  • docs/de/cli/list-policies.mdx
  • docs/de/cli/remove-policies.mdx
  • docs/de/cli/version.mdx
  • docs/de/configuration.mdx
  • docs/de/custom-policies.mdx
  • docs/de/dashboard.mdx
  • docs/de/examples.mdx
  • docs/de/for-agents.mdx
  • docs/de/getting-started.mdx
  • docs/de/introduction.mdx
  • docs/de/package-aliases.mdx
  • docs/de/testing.mdx
  • docs/docs.json
  • docs/es/architecture.mdx
  • docs/es/built-in-policies.mdx
  • docs/es/cli/dashboard.mdx
  • docs/es/cli/environment-variables.mdx
  • docs/es/cli/hook.mdx
  • docs/es/cli/install-policies.mdx
  • docs/es/cli/list-policies.mdx
  • docs/es/cli/remove-policies.mdx
  • docs/es/cli/version.mdx
  • docs/es/configuration.mdx
  • docs/es/custom-policies.mdx
  • docs/es/dashboard.mdx
  • docs/es/examples.mdx
  • docs/es/for-agents.mdx
  • docs/es/getting-started.mdx
  • docs/es/introduction.mdx
  • docs/es/package-aliases.mdx
  • docs/es/testing.mdx
  • docs/fr/architecture.mdx
  • docs/fr/built-in-policies.mdx
  • docs/fr/cli/dashboard.mdx
  • docs/fr/cli/environment-variables.mdx
  • docs/fr/cli/hook.mdx
  • docs/fr/cli/install-policies.mdx
  • docs/fr/cli/list-policies.mdx
  • docs/fr/cli/remove-policies.mdx
  • docs/fr/cli/version.mdx
  • docs/fr/configuration.mdx
  • docs/fr/custom-policies.mdx
  • docs/fr/dashboard.mdx
  • docs/fr/examples.mdx
  • docs/fr/for-agents.mdx
  • docs/fr/getting-started.mdx
  • docs/fr/introduction.mdx
  • docs/fr/package-aliases.mdx
  • docs/fr/testing.mdx
  • docs/he/architecture.mdx
  • docs/he/built-in-policies.mdx
  • docs/he/cli/dashboard.mdx
  • docs/he/cli/environment-variables.mdx
  • docs/he/cli/hook.mdx
  • docs/he/cli/install-policies.mdx
  • docs/he/cli/list-policies.mdx
  • docs/he/cli/remove-policies.mdx
  • docs/he/cli/version.mdx
  • docs/he/configuration.mdx
  • docs/he/custom-policies.mdx
  • docs/he/dashboard.mdx
  • docs/he/examples.mdx
  • docs/he/for-agents.mdx
  • docs/he/getting-started.mdx
  • docs/he/introduction.mdx
  • docs/he/package-aliases.mdx
  • docs/he/testing.mdx
  • docs/hi/architecture.mdx
  • docs/hi/built-in-policies.mdx
  • docs/hi/cli/dashboard.mdx
  • docs/hi/cli/environment-variables.mdx
  • docs/hi/cli/hook.mdx
  • docs/hi/cli/install-policies.mdx
  • docs/hi/cli/list-policies.mdx
  • docs/hi/cli/remove-policies.mdx
  • docs/hi/cli/version.mdx
  • docs/hi/configuration.mdx
  • docs/hi/custom-policies.mdx
  • docs/hi/dashboard.mdx
  • docs/hi/examples.mdx
  • docs/hi/for-agents.mdx
  • docs/hi/getting-started.mdx
  • docs/hi/introduction.mdx
  • docs/hi/package-aliases.mdx
  • docs/hi/testing.mdx
  • docs/i18n/README.ar.md
  • docs/i18n/README.de.md
  • docs/i18n/README.es.md
  • docs/i18n/README.fr.md
  • docs/i18n/README.he.md
  • docs/i18n/README.hi.md
  • docs/i18n/README.it.md
  • docs/i18n/README.ja.md
  • docs/i18n/README.ko.md
  • docs/i18n/README.pt-br.md
  • docs/i18n/README.ru.md
  • docs/i18n/README.tr.md
  • docs/i18n/README.vi.md
  • docs/i18n/README.zh.md
  • docs/it/architecture.mdx
  • docs/it/built-in-policies.mdx
  • docs/it/cli/dashboard.mdx
  • docs/it/cli/environment-variables.mdx
  • docs/it/cli/hook.mdx
  • docs/it/cli/install-policies.mdx
  • docs/it/cli/list-policies.mdx
  • docs/it/cli/remove-policies.mdx
  • docs/it/cli/version.mdx
  • docs/it/configuration.mdx
  • docs/it/custom-policies.mdx
  • docs/it/dashboard.mdx
  • docs/it/examples.mdx
  • docs/it/for-agents.mdx
  • docs/it/getting-started.mdx
  • docs/it/introduction.mdx
  • docs/it/package-aliases.mdx
  • docs/it/testing.mdx
  • docs/ja/architecture.mdx
  • docs/ja/built-in-policies.mdx
  • docs/ja/cli/dashboard.mdx
  • docs/ja/cli/environment-variables.mdx
  • docs/ja/cli/hook.mdx
  • docs/ja/cli/install-policies.mdx
  • docs/ja/cli/list-policies.mdx
  • docs/ja/cli/remove-policies.mdx
  • docs/ja/cli/version.mdx
  • docs/ja/configuration.mdx
  • docs/ja/custom-policies.mdx
  • docs/ja/dashboard.mdx
  • docs/ja/examples.mdx
  • docs/ja/for-agents.mdx
  • docs/ja/getting-started.mdx
  • docs/ja/introduction.mdx
  • docs/ja/package-aliases.mdx
  • docs/ja/testing.mdx
  • docs/ko/architecture.mdx
  • docs/ko/built-in-policies.mdx
  • docs/ko/cli/dashboard.mdx
  • docs/ko/cli/environment-variables.mdx
  • docs/ko/cli/hook.mdx
  • docs/ko/cli/install-policies.mdx
  • docs/ko/cli/list-policies.mdx
  • docs/ko/cli/remove-policies.mdx
  • docs/ko/cli/version.mdx
  • docs/ko/configuration.mdx
  • docs/ko/custom-policies.mdx
  • docs/ko/dashboard.mdx
  • docs/ko/examples.mdx
  • docs/ko/for-agents.mdx
  • docs/ko/getting-started.mdx
  • docs/ko/introduction.mdx
  • docs/ko/package-aliases.mdx
  • docs/ko/testing.mdx
  • docs/pt-br/architecture.mdx
  • docs/pt-br/built-in-policies.mdx
  • docs/pt-br/cli/dashboard.mdx
  • docs/pt-br/cli/environment-variables.mdx
  • docs/pt-br/cli/hook.mdx
  • docs/pt-br/cli/install-policies.mdx
  • docs/pt-br/cli/list-policies.mdx
  • docs/pt-br/cli/remove-policies.mdx
  • docs/pt-br/cli/version.mdx
  • docs/pt-br/configuration.mdx
  • docs/pt-br/custom-policies.mdx
  • docs/pt-br/dashboard.mdx
  • docs/pt-br/examples.mdx
  • docs/pt-br/for-agents.mdx
  • docs/pt-br/getting-started.mdx
  • docs/pt-br/introduction.mdx
  • docs/pt-br/package-aliases.mdx
  • docs/pt-br/testing.mdx
  • docs/ru/architecture.mdx
  • docs/ru/built-in-policies.mdx
  • docs/ru/cli/dashboard.mdx
  • docs/ru/cli/environment-variables.mdx
  • docs/ru/cli/hook.mdx
  • docs/ru/cli/install-policies.mdx
  • docs/ru/cli/list-policies.mdx
  • docs/ru/cli/remove-policies.mdx
  • docs/ru/cli/version.mdx
  • docs/ru/configuration.mdx
  • docs/ru/custom-policies.mdx
  • docs/ru/dashboard.mdx
  • docs/ru/examples.mdx
  • docs/ru/for-agents.mdx
  • docs/ru/getting-started.mdx
  • docs/ru/introduction.mdx
  • docs/ru/package-aliases.mdx
  • docs/ru/testing.mdx
  • docs/tr/architecture.mdx
  • docs/tr/built-in-policies.mdx
  • docs/tr/cli/dashboard.mdx
  • docs/tr/cli/environment-variables.mdx
  • docs/tr/cli/hook.mdx
  • docs/tr/cli/install-policies.mdx
  • docs/tr/cli/list-policies.mdx
  • docs/tr/cli/remove-policies.mdx
  • docs/tr/cli/version.mdx
  • docs/tr/configuration.mdx
  • docs/tr/custom-policies.mdx
  • docs/tr/dashboard.mdx
  • docs/tr/examples.mdx
  • docs/tr/for-agents.mdx
  • docs/tr/getting-started.mdx
  • docs/tr/introduction.mdx
  • docs/tr/package-aliases.mdx
  • docs/tr/testing.mdx
  • docs/vi/architecture.mdx
  • docs/vi/built-in-policies.mdx
  • docs/vi/cli/dashboard.mdx
  • docs/vi/cli/environment-variables.mdx
  • docs/vi/cli/hook.mdx
  • docs/vi/cli/install-policies.mdx
  • docs/vi/cli/list-policies.mdx
  • docs/vi/cli/remove-policies.mdx
  • docs/vi/cli/version.mdx
  • docs/vi/configuration.mdx
  • docs/vi/custom-policies.mdx
  • docs/vi/dashboard.mdx
  • docs/vi/examples.mdx
  • docs/vi/for-agents.mdx
  • docs/vi/getting-started.mdx
  • docs/vi/introduction.mdx
  • docs/vi/package-aliases.mdx
  • docs/vi/testing.mdx
  • docs/zh/architecture.mdx
  • docs/zh/built-in-policies.mdx
  • docs/zh/cli/dashboard.mdx
  • docs/zh/cli/environment-variables.mdx
  • docs/zh/cli/hook.mdx
  • docs/zh/cli/install-policies.mdx
  • docs/zh/cli/list-policies.mdx
  • docs/zh/cli/remove-policies.mdx
  • docs/zh/cli/version.mdx
  • docs/zh/configuration.mdx
  • docs/zh/custom-policies.mdx
  • docs/zh/dashboard.mdx
  • docs/zh/examples.mdx
  • docs/zh/for-agents.mdx
  • docs/zh/getting-started.mdx
  • docs/zh/introduction.mdx
  • docs/zh/package-aliases.mdx
  • docs/zh/testing.mdx
  • package.json
  • scripts/translate-docs/cache.ts
  • scripts/translate-docs/cli.ts
  • scripts/translate-docs/config.ts
  • scripts/translate-docs/mdx-translator.ts
  • scripts/translate-docs/mintlify-nav.ts
  • scripts/translate-docs/readme-translator.ts
  • scripts/translate-docs/translator.ts
  • scripts/translate-docs/types.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch luv-93

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

NiveditJain and others added 4 commits April 14, 2026 21:44
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Triggers on push to main when English docs or README change.
Uses content-hash cache so only modified pages are re-translated.
Opens a PR with updated translations automatically.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove German smart quotes (U+201E/U+201C) from Tab title attributes
  in de/dashboard.mdx that broke MDX parsing
- Remove Russian guillemets (U+00AB/U+00BB) from Tab title attributes
  in ru/dashboard.mdx
- Fix language code pt-br → pt-BR in docs.json to match Mintlify's
  valid enum values

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Runs `mintlify validate` in strict mode to catch MDX parsing errors,
invalid docs.json config, and broken page references before merge.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@NiveditJain NiveditJain merged commit d946d16 into main Apr 14, 2026
9 checks passed
@NiveditJain NiveditJain deleted the luv-93 branch April 21, 2026 01:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant