Ship global products without slowing down

One platform to manage, review, and continuously deploy translation keys, across every branch, language, and team. Built for the way modern engineering teams work.

12
File formats
โˆž
Languages on every plan
2
Git integrations: GitHub and GitLab
โ‚ฌ0
Free plan, no credit card

The platform that ships
with your team, not after it

Three capabilities that change how every solution handles localization, whether you're shipping a web app, a mobile game, or a global storefront.

Branch-based Workflows

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.

Translation Memory

Every approved string is indexed and reused. Common UI patterns, legal boilerplate, and shared phrases are suggested for similar texts across every project.

CI/CD & Webhooks

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.

Included
on every plan

Roles, teams, the audit log, webhooks, the API and the CLI work the same on the Free plan as on any other.

Review before it ships

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.

Roles, teams & access

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.

Audit log & reports

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.

REST API & API keys

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.

12 file formats

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.

Built for translators

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.

Up and running
in minutes

No complex setup. No lock-in. Just a better way to manage translations from day one.

1

Create your project

Define your languages, invite your team, and connect your GitHub or GitLab repository. The app opens a setup pull request for you.

2

Add and translate keys

Import existing JSON files or add keys directly. Our editor validates ICU formats and surfaces TM suggestions in real time.

3

Ship continuously

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.

Connect a repository.
Merge one pull request.

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.

  • Setup pull request with a config file, a CI workflow and the API key as a repository secret
  • Git branches become translation branches, created from main
  • Merged pull requests merge their translation branch
  • Works with GitHub and GitLab; any other CI can run the ct CLI
From repository to translations
1. Create a project from a repository
Pick the repository and the languages. The app finds your locale files.
2. Merge the setup pull request
Adds ct.yml and the workflow on the branch ct/setup.
3. Push as usual
Every push sends new and changed strings. Translators work on the matching branch.
4. Merge the pull request
The translation branch merges into main, and ct pull brings the files back.

One job to push.
One step to gate the release.

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
  • Skips pull requests from forks, which cannot read CI secrets. Read the CI guide
Push job, from ct snippet github
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 }}
In your release job
- run: npx @continuous-translations/cli pull --require-complete 100
  env: { CT_API_KEY: ${{ secrets.CT_API_KEY }} }
- run: npm run build && npm publish
Add it to Claude Code
claude mcp add --transport http continuous-translations \
  https://api.continuous-translations.com/mcp \
  --header "Authorization: Bearer <token>"
Tools
list_projects, get_project_status, list_keys, pull_translations, push_keys, save_translation, approve_translation and more

Works with
your AI agent.

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.

  • Give the agent an API key with only the scopes it needs, for example read-only
  • push_keys supports a dry run that only reports what would change
  • Approving or sending back a translation needs a signed-in session, so an API key cannot review
  • Read the MCP guide

Stop repeating yourself.
Let the machine remember.

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.

  • Fuzzy matching across all your projects, exportable as TMX
  • Match percentage and usage count per suggestion
  • One-click apply, never automatic
  • Every approved translation is remembered
Example: Translation Memory, 3 suggestions 98% match
checkout.submit โ†’ "Complete purchase"
Kauf abschlieรŸen
order.confirm โ†’ "Confirm order"
Bestellung bestรคtigen
cart.checkout โ†’ "Proceed to checkout"
Zur Kasse

Simple pricing,
no surprises

Every account starts on the Free plan. No credit card required.

Free
โ‚ฌ 0 / month
Everything you need to translate your first project.
Get started free
  • โœ“ 1 team member
  • โœ“ 1 project
  • โœ“ 1,500 translation keys
  • โœ“ Translation memory and glossary
  • โœ“ ICU, i18next and Fluent placeholder checks
  • โœ“ Branches, review workflow and history
  • โœ“ CLI, REST API and webhooks
  • โœ“ GitHub and GitLab integration
  • โœ“ 12 file formats, unlimited languages

Ready to ship
every language at once?

Set up your first project today. Free plan, no credit card required.