PTC

Translate JSON files with AI and get a pull request back

PTC (Private Translation Cloud) takes the JSON locale files in your repository, translates them into 40+ languages and sends them back as a pull request.

On this page
  1. Set it up once, and every push comes back translated
  2. What comes back in the pull request
  3. Three habits that make a JSON file translate well
  4. Translations that fit the screen they appear on
  5. One project for everything around the code
  6. Price: per word, no seats
  7. Try it on your own JSON files, free

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 an 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 JSON 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 .json file per language, such as locales/es.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. Every key, nesting level and array comes back as it was. PTC never translates, renames or drops a key: header.welcome is header.welcome in every language.
  • Placeholders untouched. {{name}} for i18next, {name} for vue-i18n and ICU messages, %s and %1$d stay where the grammar of each language puts them.
  • Every plural form. Keys with plural suffixes get the forms each language needs: one for Japanese, four for Polish, six for Arabic.
  • Valid JSON. Escapes and line breaks are written back as the JSON specification requires, so a \n is still a line break.
  • Reviewed translations. PTC reviews each translation against your product's description and glossary before it opens the pull request.

Three habits that make a JSON file translate well

PTC translates the values it finds. How you write them decides how good the result can be.

{
  "cart": {
    "title": "Your cart",
    "items_one": "{{count}} item",
    "items_other": "{{count}} items",
    "checkout": "Pay {{amount}} now"
  }
}
  • Whole sentences, with placeholders. "Pay {{amount}} now" can be reordered for every language. Two keys joined in code cannot.
  • Plural keys, not conditions in code. Write items_one and items_other, and PTC adds the forms other languages need.
  • Keys that say where the text is. cart.checkout tells PTC that “Pay” is a button.

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 component code, such as a hard-coded string.

One project for everything around the code

  • Your framework. For a React app with react-i18next, see translating a React app.
  • Other files. Put .json, .yml, .po, .xcstrings and other files in one PTC project, and they share one glossary. See the supported formats.
  • Release notes and emails. They live outside the locale files. Paste them into the same project and they use the same glossary.
  • Texts your users write. Comments, posts and chat 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 JSON files, 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: