PTC

Translate your React app with AI, delivered by pull request

PTC (Private Translation Cloud) takes the en.json of your React app, translates it into 40+ languages and sends the locale files back as a pull request.

Using Claude Code, Codex or Cursor?

Connect PTC to your agent and it does this for you: it learns your app, asks you only what the code can't answer, and translates and reviews every language. One prompt:

Localize this app into German and Spanish with PTC.

Connect PTC to your agent

Set it up once, and every push comes back translated

PTC is built for a React app that keeps changing, not for a one-time translation. You do not export, upload or download anything: the work happens where your code is.

We run our own product this way. WPML has about 80,000 words in 21 languages. A release used to wait two weeks for translators, and with PTC it is ready in about three hours. Read how we translate WPML with PTC.

  1. Connect PTC to Claude Code or Codex and give it one prompt: Set up PTC translations. The getting started page has the command.
  2. PTC learns your project once. The agent finds your locale files and the code that uses each string, tells PTC what the product does, and writes the PTC configuration. See how the PTC agent guide works.
  3. You answer what only you know: the languages, the price, and how translations should arrive.
  4. PTC opens a pull request with one translated locale file per language, such as es.json and de.json. From then on it runs by itself: every push to your default branch comes back the same way.

You pay only for new and changed strings. A string that was translated once is never charged again.

No coding agent? Connect GitHub, GitLab or Bitbucket yourself, or call the PTC API from your build.

What comes back in the pull request

  • The same structure. Each locale file has the keys and nesting of your en.json. Only the values are translated.
  • Placeholders untouched. i18next interpolations such as {{name}} and {{count}} stay where the grammar of each language puts them, and so do the tags inside a Trans component.
  • Every plural form. From _one and _other, each language gets the suffixes it needs: one for Japanese, four for Polish, six for Arabic.
  • Reviewed translations. PTC reviews each translation against your app's description and glossary before it opens the pull request.

Two patterns keep a text out of en.json

PTC translates what is in your locale files. Two common patterns keep a text out of them, and it stays in English in every language.

A text written in the component

// NOT translated - the text never reaches en.json
<button>Save changes</button>

// Translated
<button>{t('settings.save')}</button>

A sentence built from pieces

// NOT translatable - the word order is fixed in code
{t('cart.youHave')} {count} {t('cart.items')}

// Translatable - one sentence, with a plural
{t('cart.items', { count })}

For a link inside a sentence, use the Trans component, so the sentence stays whole. For the rest of the preparation, see how to prepare software for translation and how to keep long translations from breaking layouts. German runs about 30% longer than English.

Translations that fit the screen they appear on

A resource file gives a translator “Send” and nothing else. PTC works from more than the string.

  • Context from your code. Your coding agent reads where an ambiguous key is used, and PTC turns that into a one-line note that guides the translation.
  • One glossary. PTC builds it from your existing translations and asks you only where your own sources disagree. See brand voice and glossary.
  • Screens checked. Where AI Visual QA is enabled for your account, PTC checks the translated product on screen. It fixes what is in the translation files, such as a label too long for its button, and gives you a ready prompt for what is in your components, such as a hard-coded string.

One project for everything around the code

  • Other JSON setups. For vue-i18n, ICU messages and plain JSON files, see translating JSON files.
  • Your mobile apps. Put the iOS and Android files in the same PTC project, and all three share one glossary.
  • Release notes, landing pages and emails. They live outside en.json. Paste them into the same project and they use the same glossary.
  • Texts your users write. Comments, posts and search results go through the PTC API as they arrive.

Price: per word, no seats

The price per 1,000 words starts at €3.00 and falls with monthly volume to €0.40. The first 500 words each month are free, and there is no subscription. See the pricing page.

Try it on your own React app, free

The trial covers 20,000 words into 2 languages for 30 days, with no credit card.

Start your free trial and connect your agent

Last updated: