PTC

Translate PO Files Online with AI

Translate .po files into 35+ languages with AI. PTC (Private Translation Cloud) learns your product's vocabulary and visually reviews the rendered product, so you ship without manual QA per language.

Drop in a .po or .pot file from any gettext-based project: WordPress, Drupal, Django, Symfony, or any other. PTC returns drop-in-ready translations in minutes.

The WPML plugin team translates its own products with PTC. So do thousands of independent product teams across multiple frameworks.

Start your free 30-day trial - translate your PO file right now

  • 20,000 words into 2 languages, free
  • 35+ languages supported
  • Visual translation review of the rendered product included
  • ISO 27001 certified - security and compliance off your list
  • No credit card required

Start free trial

What a PO file is, and how it differs from a POT file

A PO file (Portable Object file) is a plain-text translation file that gettext-based software, including WordPress themes and plugins, uses to store translated strings. Each entry has two parts: the msgid (the original English string) and the msgstr (the translation). PO files follow the GNU Gettext format and are compiled into binary MO files that the running product loads at runtime.

A POT file (Portable Object Template) is the master source file. It contains every string from your plugin or theme with empty msgstr fields, ready to distribute so translators can work from it. A PO file is a completed translation built from that template, with the msgstr fields filled in for one specific language. For example, my-plugin.pot is the template; my-plugin-de_DE.po is the German translation. Most localization workflows start with the POT file and create one PO file per language from it.

Translate your PO file 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. It also skips strings that do not need translating, such as brand names and URLs.
  2. Upload your .po or .pot file and pick an output format. PTC parses the file and extracts only the translatable strings. It returns translations as .po, .mo, .l10n.php, or .json, depending on what your project needs. The word count is shown before you commit any free-trial quota.
  3. Pick target languages and confirm. PTC translates in the background. It emails you when the translated files are ready to download. For the full list of the 35+ languages you can translate into, see the supported languages page.

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

What sets PTC apart for PO 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 file on upload. It automatically generates a product description and uses that description to translate with the right tone and terminology.

If your product calls a record a "Quote" rather than a "Citation", PTC keeps that distinction across every target language. The same description carries over to every future update to the same project. You can review and edit the auto-generated description before translation runs.

This is why context matters, and it is the biggest difference between PTC and other PO file translators. Most tools see a string like "Run" and translate it without knowing whether the user means "execute a scan" or "go for a run". PTC learns your terminology and audience first. 99.5% of translations go live without any edits.

Why a dedicated PO translator beats pasting strings into ChatGPT or Google Translate

You can paste individual strings into ChatGPT or Google Translate, but neither tool handles the PO file format natively. You would need to manually extract strings, translate them, and paste them back, while carefully preserving placeholders like %s and {name}, plural-form syntax, and HTML tags. For anything beyond a handful of strings, that approach is slow and error-prone.

PTC handles the entire file in one step, preserves all formatting automatically, and uses context about your specific product to produce more accurate translations.

Visual translation review of your rendered product - ship without manual QA per language

PTC does not stop at the translated file. Visual translation review sees PTC's own translations rendered inside your actual product. It catches issues that no string-level review can see:

  • A German label that overflows a button width.
  • "Submit" translated as a noun when the UI needed a verb.
  • English text someone forgot to wrap in __(), which appears glaringly untranslated in the running product.

For products that render in a browser (WordPress admin pages, web-based admin UIs, SaaS dashboards), the right flavor is the browser extension. Install it once. Record a short walkthrough of your product's screens. PTC replays the recording after every translation update.

For native or desktop products, the screenshot upload flavor applies. Upload one screenshot per language per screen. PTC inspects the rendered result the same way.

PTC fixes what it controls. Issues in the PO file (the verb-noun mismatch, the layout overflow) get fixed automatically. Issues that live in your source code (the missing __() wrapper) come back as ready-to-paste prompts for Cursor or Claude Code. Your dev team applies the fix in seconds.

You do not ship a translated PO file and hope. You ship a verified, multilingual product.

Glossary and translation memory per project

Add a glossary entry once. For example: "Quote = Cita" for Spanish. PTC applies the entry across every PO file in the same project, now and on every future update. You never re-upload TMX files between runs.

You can manage glossary entries in two ways. The PTC dashboard provides an editor for ad-hoc entries. The PTC REST API supports glossary import and export for teams that maintain terminology in a separate system.

Structure-perfect output: comments, contexts, and references

PTC works with .pot template files the same way as .po files. Upload the .pot. PTC generates one translated .po per target language plus the compiled .mo files. By default PTC returns translations as .po files, and you can configure the project to also output .mo, .l10n.php (WordPress 6.5+), or .json instead. The guide to WordPress internationalization covers the output-format steps.

The output file is structurally identical to the input. PTC preserves all translator comments, #: source references, #, flags, and msgctxt contexts. Only the msgstr fields are filled in. Diff tools see exactly what changed: nothing but the translations.

Gettext plural and placeholder handling done right

PTC recognises every standard gettext and printf placeholder. That includes %s, %1$d, %(name)s, and {count}. PTC keeps each placeholder in the right position for every target language. It never translates the placeholder itself.

PTC respects the Plural-Forms header in your PO file. It generates the right number of plural forms per language. Japanese needs 1 form. English needs 2. Polish needs 3. Arabic needs 6. Many free widgets translate only the singular and leave the plural slots empty, which breaks the rendered string at runtime.

Loading translated PO and MO files into WordPress

This section is WordPress-specific. If your project is not a WordPress plugin or theme, the loading mechanism is whatever your framework uses (Django's compilemessages, Drupal's locale module, etc.) and the same translated .po and .mo files apply.

Two paths put your translations in front of users:

  • Bundle the translated files with your plugin or theme. Ship the .po, .mo, and .l10n.php files inside the release archive. WordPress loads them from the plugin's or theme's /languages/ directory when load_plugin_textdomain() or load_theme_textdomain() fires.
  • Import to WordPress.org. If your plugin or theme is hosted on the official WordPress.org directory, you can publish the translations there. WordPress.org then serves them to users automatically. The importing and adding translations on WordPress.org guide covers both options in detail.

PTC reads but does not modify your Project-Id-Version or text-domain metadata. The text domain you declared in the input file is the text domain you get back. That keeps __(), _e(), _n(), and esc_html__() calls working with no code changes.

Translations not appearing in your WordPress plugin?

This section is WordPress-specific. The most common cause is mismatched text domains. Your code, plugin header, .mo filename, and load_plugin_textdomain() call must all use the exact same text domain. Other common causes:

  • The .mo files are not in the directory WordPress expects.
  • A community translation from WordPress.org is overriding the translations you bundled.
  • The JavaScript handle was not connected to its translations via wp_set_script_translations().

For the full diagnostic walkthrough, see finding missing WordPress translations.

Automate translation from your Git repository

For continuous localization, PTC connects to your GitHub, GitLab, or Bitbucket repository. When it detects changes to your .po or .pot file, it translates the updated strings and delivers them back as a merge request. Review and merge when you are ready. You can also use the PTC API to integrate localization into your CI/CD pipeline.

Translate more than PO

PTC also handles .pot, .json, .csv, .yml, .xml, .strings, .xcstrings, .properties, .resx, .arb, and many more. A mixed-format project translates under one project and one glossary. PO for the server, JSON for a React admin UI, strings.xml for an Android companion app: one workflow. See the full list of supported resource file formats.

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

A release is more than the resource file. readme.txt, plugin release notes, customer emails sent from the plugin, and the marketing copy for the plugin or theme page all live outside the PO file. PTC's Paste to Translate handles that copy in the same project. Paste the source text, choose target languages, get back translations that use the same glossary and brand voice as your in-app strings.

Translate dynamic and user-generated content with the PTC API

Plugins that store user-generated content (forum plugins, review plugins, multi-language comment plugins) need translation as content arrives. The PTC REST API translates this content on demand with Bearer-token authentication, using the same glossary and brand voice as your .po files.

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. Sign up with a company email for an extended business trial.

Ready to ship a verified product?

Upload your .po file. PTC translates it into 35+ languages and visually reviews the rendered product in every one. You ship with confidence.

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

For plugin and theme authors choosing between community translation and PTC, see the GlotPress vs PTC comparison. For the full step-by-step on internationalizing a WordPress plugin from scratch, see the WordPress themes and plugins tutorial.