
msgid intact. Plural forms correct for every language. Comments preserved. Your gettext workflow, but faster.
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
#: 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 ""#: 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"Correct nplurals and plural formula for each target language. No manual plural form configuration.
msgctxt is preserved for disambiguation. 'bank' as in river bank vs financial bank stays correct.
Translator comments (#.), extracted comments (#:), and flags (#,) are all preserved
Headers (Content-Type, Plural-Forms, charset) are set correctly for the target language

No manual copy-paste. No string extraction. Just translated files.
Still stuck on a TMS contract? Let's talk about migrating.