PTC

Translate Java Apps with AI

PTC (Private Translation Cloud) translates Java .properties files and the rest of your Java stack into 40+ languages with AI, plugs into Maven or Gradle, and is ISO 27001 certified for enterprise use. Visual translation review verifies the running app in every language, so you ship without manual QA per release.

Spring Boot, Quarkus, Micronaut, Jakarta EE, JavaFX, legacy Swing - PTC handles every common Java i18n pattern. ResourceBundle lookups, message bundles, FXML strings, and the build-tool integration you already use.

Banking, insurance, healthcare, and telco teams who ship Java apps to regulated markets use PTC because the workflow fits their build pipeline and the ISO 27001 certification answers the compliance question before procurement asks.

Start your free 30-day trial - translate your Java app right now

  • 20,000 words into 2 languages, free
  • 40+ languages supported
  • Visual translation review of the running Java app included
  • ISO 27001 certified - enterprise security and compliance check off your list
  • No credit card required

Start free trial

Translate your Java project in 3 steps

  1. Start a project in your PTC dashboard. Choose your source language. PTC uses the source to pick the right translation engine and to skip strings that do not need translating (brand names, URLs, untranslatable identifiers).
  2. Upload your .properties files or connect your Git repository. PTC parses each ResourceBundle and extracts only the translatable values. It returns translations as messages_xx.properties matching the naming convention Java expects. The word count is shown before you commit any free-trial quota.
  3. Pick target languages and confirm. PTC translates in the background. For Maven and Gradle teams, the translated bundles arrive as a pull request on your repo.

The free trial covers 20,000 words into 2 languages with no credit card. That is enough to translate most enterprise Java apps end-to-end before you decide whether to subscribe.

What sets PTC apart for Java translation

Each item below links to the detailed section further down the page.

PTC learns your product's vocabulary and brand voice

PTC analyses your source .properties files on upload. It automatically generates a product description and uses that description to translate with the right tone and terminology.

If your banking app calls a record a "Statement" rather than a "Transaction Summary", PTC keeps that distinction across every target language. The same description carries over to every release of the same project. You can review and edit the auto-generated description before translation runs.

Most generic AI tools see a key like error.user_locked and translate the value without knowing whether the user is a person or an account holder. PTC learns your domain vocabulary first. 99.5% of translations go live without edits.

Visual translation review of your running Java app - ship without manual QA per language

A translated .properties file is necessary but not sufficient. The translated label may overflow a fixed-width button in a JavaFX desktop app. A German error message may read as a noun when the workflow needed a verb. A hardcoded English string outside ResourceBundle.getString() will render untranslated regardless of how many languages you ship.

PTC's Visual AI Review covers both common Java app types:

  • Browser extension for Spring Boot web apps, Jakarta EE web apps, and any Java backend that serves HTML. Install once, record a walkthrough of your app's screens on a staging environment. PTC replays the recording after every translation update.
  • Screenshot upload for JavaFX, Swing, or any non-browser Java app. Upload one screenshot per language per screen. PTC's vision AI inspects the rendered result the same way.

Issues PTC can fix in the .properties file (verb-noun mismatch, layout overflow, plural mismatches) get fixed automatically. Issues that live in your Java code (missing ResourceBundle.getString() wrappers, hardcoded literals, sentence concatenation that should use MessageFormat) come back as ready-to-paste prompts for Cursor or Claude Code.

You do not ship a translated .properties file and hope. You ship a verified, multilingual Java app.

ISO 27001 certified for enterprise use

PTC handles your data and your users' data to internationally recognized security standards. For banking, insurance, healthcare, and telco teams, the certification answers the compliance question before procurement asks it.

Your source strings often contain product names, customer-facing terminology, and occasional examples involving customer data. ISO 27001 attests that PTC handles every byte of that with documented controls: access logging, encryption in transit and at rest, vendor assessments, incident response. Your security review team sees the certificate; they sign off; you ship.

Maven, Gradle, and Spring Boot integration

For Maven projects, configure a translation step in your build:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <executions>
    <execution>
      <id>ptc-translate</id>
      <phase>prepare-package</phase>
      <goals><goal>exec</goal></goals>
      <configuration>
        <executable>curl</executable>
        <arguments>
          <argument>-X</argument><argument>POST</argument>
          <argument>https://api.ptc.wpml.org/v1/projects/${ptc.project.id}/sync</argument>
          <argument>-H</argument><argument>Authorization: Bearer ${ptc.api.key}</argument>
        </arguments>
      </configuration>
    </execution>
  </executions>
</plugin>

For Gradle, the same flow runs from build.gradle.kts:

tasks.register<Exec>("ptcTranslate") {
  commandLine(
    "curl", "-X", "POST",
    "https://api.ptc.wpml.org/v1/projects/${project.ext["ptcProjectId"]}/sync",
    "-H", "Authorization: Bearer ${project.ext["ptcApiKey"]}"
  )
}

tasks.named("processResources") {
  dependsOn("ptcTranslate")
}

For Spring Boot, point MessageSource at the translated bundles and Spring loads them automatically based on Accept-Language:

@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();
    source.setBasename("classpath:i18n/messages");
    source.setDefaultEncoding("UTF-8");
    return source;
}

PTC syncs new strings, translates only what changed, and opens a PR with the updated bundles. See the PTC API reference for the full webhook and REST flow.

ResourceBundle, plural, and format preservation

PTC handles every Java i18n convention out of the box:

  • .properties syntax. Comments, key = value pairs, line continuations, and Unicode escape sequences (ü) all preserved.
  • ChoiceFormat and MessageFormat placeholders. {0}, {0,number}, {1,date,short} patterns kept in the right position for each target language.
  • Plural forms via ICU4J. PTC generates the right plural categories per language (Polish: one/few/many/other; Japanese: other only; Arabic: six forms).
  • Spring's positional argument convention. {0}, {1} for MessageSource.getMessage(code, args, locale) calls.
  • Right-to-left languages. Arabic, Hebrew, Persian, and Urdu translated correctly. Your rtl.css and bidirectional layout work then takes over.

Translate release notes, READMEs, and other text outside your resource files

Java release notes, the README on your internal Maven repository or GitHub, customer-facing emails sent from your app, support documentation - all live outside .properties. PTC's Paste to Translate feature handles every one of them. Paste the source text in the PTC dashboard, choose your target languages, get back translations that use the same glossary and brand voice as your in-app strings. Consistency from the app screen to the release email to the support article.

Translate dynamic and user-generated content with the PTC API

Enterprise Java apps often handle user-generated content that needs translation as it arrives: support tickets, knowledge-base entries, internal wiki pages, customer-submitted product reviews, multi-language chat. The PTC REST API translates this content on demand:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.ptc.wpml.org/v1/projects/" + projectId + "/translate"))
    .header("Authorization", "Bearer " + apiKey)
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(
        "{\"text\": \"" + ticketText + "\", \"target_languages\": [\"es\", \"de\"]}"
    ))
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

Token-based authentication (Bearer), JSON request/response, and the same glossary + brand-voice training your .properties files use. See the PTC API reference for the full endpoint catalogue, rate limits, and language code conventions.

Automate translation from your Git repository

PTC integrates with GitHub, GitLab, and Bitbucket. New strings in your messages.properties trigger an automatic translation run. The resulting translated bundles come back as a pull request. Review and merge as part of your normal code-review process.

Pricing: 30-day free trial, then Pay-As-You-Go

The free trial covers 20,000 words into 2 languages with no credit card. When the trial ends, PTC offers Pay-As-You-Go. No subscription. No minimum commitment. The first 500 words every month are free, and you only pay for the rest. The pricing page has a cost calculator. For enterprise procurement that needs an annual contract, sign up with a company email for an extended business trial.

Ready to ship a verified Java app?

Upload your .properties files. PTC translates them into 40+ languages and visually reviews the running Java app in every one. ISO 27001 takes care of compliance. You ship with confidence.

Start your free 30-day trial - 20,000 words on us, no credit card required.

For the full step-by-step on internationalizing a Java app, see the Java internationalization guide. For the broader CI/CD localization story, see AI software localization built for CI/CD pipelines.