AI agent network visualization

Translate PO Files Without Losing Plural Forms

msgid intact. Plural forms correct for every language. Comments preserved. Your gettext workflow, but faster.

PO Translation Tools Ignore What Makes PO Special

PO files aren't just key-value pairs. They have plural forms that vary by language, message contexts for disambiguation, translator comments, and source references. Most translation tools treat them like flat text files.

nplurals and plural formulas differ by language. Generic tools use wrong plural counts.

msgctxt disambiguation context gets ignored or translated

Translator comments (#.) and source references (#:) are stripped

Character encoding headers and PO metadata get corrupted

Source (English)
messages.pot
#: src/components/Cart.tsx:42
#. Translator: shown when cart is empty
msgid "Your cart is empty"
msgstr ""

#: src/components/Cart.tsx:55
msgid "item"
msgid_plural "items"
msgstr[0] ""
msgstr[1] ""

#: src/components/Auth.tsx:12
msgctxt "button"
msgid "Sign in"
msgstr ""
Translated (Spanish)
es/LC_MESSAGES/messages.po
#: src/components/Cart.tsx:42
#. Translator: shown when cart is empty
msgid "Your cart is empty"
msgstr "Tu carrito está vacío"

#: src/components/Cart.tsx:55
msgid "item"
msgid_plural "items"
msgstr[0] "artículo"
msgstr[1] "artículos"

#: src/components/Auth.tsx:12
msgctxt "button"
msgid "Sign in"
msgstr "Iniciar sesión"

What i18n Agent Preserves

Language-Specific Plurals

Correct nplurals and plural formula for each target language. No manual plural form configuration.

Message Context

msgctxt is preserved for disambiguation. 'bank' as in river bank vs financial bank stays correct.

Comments & References

Translator comments (#.), extracted comments (#:), and flags (#,) are all preserved

PO Metadata

Headers (Content-Type, Plural-Forms, charset) are set correctly for the target language

Works With Your Stack

WordPress / WP-CLI
Django
PHP (gettext)
Python (gettext / Babel)
C/C++ (GNU gettext)
Ruby (gettext gem)

How It Works

How i18n Agent works: Install, Translate, Done
1
2
3
terminal
$translate_filesrc/messages/en.json
 --target["de", "ja", "es"]
Done.3 languages, 142 keys translated.

No manual copy-paste. No string extraction. Just translated files.

Frequently Asked Questions

Developer?

Install the MCP server and translate your first file in 2 minutes.

Install MCP Server

Enterprise team?

Still stuck on a TMS contract? Let's talk about migrating.