One platform to manage, review, and continuously deploy translation keys, across every branch, language, and team. Built for the way modern engineering teams work.
Three capabilities that change how every solution handles localization, whether you're shipping a web app, a mobile game, or a global storefront.
Translations live beside your code. Create a branch per feature, sprint, or DLC and merge when you're ready. Freeze a branch to lock its translations for a release. With GitHub or GitLab connected, branches follow your Git branches.
Every approved string is indexed and reused. Common UI patterns, legal boilerplate, and shared phrases are suggested for similar texts across every project.
Fail your pipeline when a language is behind with ct pull --require-complete 100. Webhooks notify your pipeline when a translation is approved, so it can run ct pull.
Roles, teams, the audit log, webhooks, the API and the CLI work the same on the Free plan as on any other.
Submit, approve or request changes, with a review queue, discussion on every key and email notifications. Switch review off per project if you do not need it.
Translators, reviewers and managers per project, assigned directly or through teams. Owners and admins manage the organisation. Protect sign-in with an authenticator app, limit access to your own IP addresses, require it for every member, and restrict invitations to your own email domains.
See who changed what in your organisation, and who signed in, changed a password or created an API key. Filter it by type and date, export it as CSV or JSON for your own records, and choose how long it is kept. Reports show progress per project and language. Every member can download a copy of their own data, and deleting an account erases the addresses it left in the log.
A documented REST API with personal and project-scoped API keys. Scopes such as keys:write and translations:read limit what a key can do, keys can expire and be rotated, and you can cap how long they live. Set a minimum password length for your organisation too.
JSON, YAML, XLIFF, Gettext, Android XML, iOS .strings, Apple String Catalog, Java properties, Flutter ARB, CSV, TSV and Excel. Export your translation memory as TMX.
Live ICU preview with Add ICU and Edit ICU helpers, placeholder checks for ICU, i18next and Fluent, key history with restore, notes and links per key, and keyboard shortcuts. The app itself is available in English, Dutch, German, French and Afrikaans.
No complex setup. No lock-in. Just a better way to manage translations from day one.
Define your languages, invite your team, and connect your GitHub or GitLab repository. The app opens a setup pull request for you.
Import existing JSON files or add keys directly. Our editor validates ICU formats and surfaces TM suggestions in real time.
Merge the branch when you are ready. Add ct pull to your build, or let a webhook trigger your pipeline when a translation is approved.
See the exact setup for your stack:
Create a project straight from your repository. The app opens a setup pull request with everything your repo needs to send strings and fetch translations. Once it is merged, every push keeps Continuous Translations in sync.
ct CLI
ct.yml and the workflow on the branch ct/setup.ct pull brings the files back.The CLI is two commands in your pipeline. Push your source file when code changes, and pull the approved translations when you build a release.
ct push on every push, which is what the setup pull request installs
ct pull --require-complete 100 fails a release while a language is behind
ct pull --check fails when a committed translation file is out of date
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22 }
- run: npx @continuous-translations/cli push
env:
CT_API_KEY: ${{ secrets.CT_API_KEY }}
- run: npx @continuous-translations/cli pull --require-complete 100
env: { CT_API_KEY: ${{ secrets.CT_API_KEY }} }
- run: npm run build && npm publish
claude mcp add --transport http continuous-translations \
https://api.continuous-translations.com/mcp \
--header "Authorization: Bearer <token>"
The API has a Model Context Protocol endpoint, so agents such as Claude Code can list projects, check progress, push keys, write translations with your own model and send them for review. Every tool runs as you, so roles, plan limits and the scopes of your API key apply. The model usage is billed by your agent provider, not by us.
push_keys supports a dry run that only reports what would change
Every translation you approve is stored and indexed. The next time a similar string appears, across any project or branch, we suggest it with a match percentage. You decide whether to apply it.
Every account starts on the Free plan. No credit card required.