Drop-in localization for React, Next.js, Vue, Angular, and more. Manage translation keys across every branch, catch missing strings before they ship, and serve translations from the edge.
Works with the frameworks you already use
Trusted by web teams shipping globally
Works with your existing i18n library. Fits into your existing CI pipeline. No rewrites, no new patterns to learn, just better tooling around what you already have.
Drop-in packages for react-i18next, next-intl, vue-i18n, and Angular i18n. No migration, no lock-in.
A single CLI command, ct check, scans every language for untranslated or outdated strings and fails your CI build if any are found.
Translations are served from 300+ edge locations worldwide with sub-50ms response times. Split by namespace so each page loads only what it needs.
Run ct extract to scan JSX, Vue templates, and Angular components for new keys. Never manually track what needs translating.
Translate new features in isolation. Strings merge when the PR merges. Your production translations stay clean until you're ready to ship.
Reuse approvals across projects. Common UI patterns, "Save changes", "Cancel", "Loadingβ¦", translated once and suggested everywhere at full confidence.
Install the CLI, wire up two commands, and your entire localization workflow runs inside the tools you already use.
Install the CLI and run ct extract. We scan your source files and pull out every translation key automatically, existing JSON files included.
While your team ships features, translators work in a clean editor with your exact strings, Translation Memory suggestions, and ICU format validation in real time.
Add ct check to your CI pipeline. It blocks any deploy that has missing or stale translations, so untranslated strings never reach production.
Untranslated strings in production are an embarrassment at best and a support ticket at worst. One ct check command in your CI pipeline blocks any merge that would leave users staring at a raw key name.
| Language | Keys | Missing | Stale | |
|---|---|---|---|---|
| DE | 312 | 0 | 0 | β |
| FR | 312 | 4 | 1 | β |
| NL | 312 | 0 | 2 | β |
| JA | 312 | 11 | 0 | β |
Start free for your first project. No per-seat pricing, no surprise charges as you add languages.