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.
- Connect PTC to Claude Code or Codex and give it one prompt:
Set up PTC translations.The getting started page has the command. - 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.
- You answer what only you know: the languages, the price, and how translations should arrive.
- PTC opens a pull request with the translated bundles, such as
messages_es.propertiesandmessages_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.propertiesper language, next to your source bundle, soResourceBundleand Spring'sMessageSourceload them with no change. - Keys and placeholders untouched. Keys stay as they are.
MessageFormatplaceholders such as{0}andChoiceFormatpatterns 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, " + namecannot, and never reaches the file. - Keys that say where the text is.
transfer.sendtells more thanlabel17.
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,.ymland 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: