PTC

Translate .properties files with AI, by pull request

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

Set it up once, and every push comes back translated

PTC is built for a Java application 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 resource bundles 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 the translated bundles, such as messages_es.properties and messages_de.properties. 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 names Java expects. One messages_xx.properties per language, next to your source bundle, so ResourceBundle and Spring's MessageSource load them with no change.
  • Keys and placeholders untouched. Keys stay as they are. MessageFormat placeholders such as {0} and ChoiceFormat patterns stay where the grammar of each language puts them.
  • Every plural form. Plural texts get the forms each language needs: one for Japanese, four for Polish, six for Arabic.
  • Reviewed translations. PTC reviews each translation against your application's description and glossary before it opens the pull request.

Three habits that make a .properties file translate well

PTC translates the values it finds, and reads your # comments as notes for the translation.

# Button on the transfer form. "Send" means send money.
transfer.send=Send
# {0} is the customer's first name
dashboard.greeting=Welcome back, {0}
  • A comment where a word is ambiguous. One line above the key is enough to tell “Send” the button from “Send” the menu.
  • Numbered placeholders, not concatenation. Welcome back, {0} can be reordered for every language. "Welcome back, " + name cannot, and never reaches the file.
  • Keys that say where the text is. transfer.send tells more than label17.

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

One project for everything around the code

  • The whole application. For the manager's view of cost, review and security, see AI translation for Java apps.
  • Other files. Put .properties, .json, .yml and other files in one PTC project, and they share one glossary. See the supported formats.
  • Release notes, READMEs and emails. They live outside the bundles. Paste them into the same project and they use the same glossary.
  • Texts your users write. Support tickets and customer content 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 .properties 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: