Upload a .po or .pot file, translate it with AI and professional reviewers, and export a build-ready file for every language.
Variables like %s and {name} become protected tags translators can't break, and re-imports only reprocess the strings that changed.
1,000+ enterprise brands and translation teams work in Smartcat.
15 days
Free to Start
15,000 Smartwords and full access to translation capabilities, no credit card.
3
PO Parsers
Default PO, Serge.io PO and Monolingual PO — pick the one that matches how your files are built.
0
Cost for Unchanged Strings
With the Serge.io parser, re-uploading a file only reprocesses segments whose source text changed.
This was one of our first AI investments. What used to take weeks now takes minutes. It saves us a healthy six figures a year in translation costs, without sacrificing quality.
”Explore Case Study →
A PO (Portable Object) file is the plain-text translation format used by the GNU gettext internationalization system. Each entry pairs a source string (msgid) with its translation (msgstr), so one PO file holds one language.
PO files are generated from a POT template and compiled into binary MO files that applications load at runtime. You translate the PO; you generate the POT and compile the MO.
They are standard in Python, PHP, WordPress, Django, Drupal, Unreal Engine and Godot projects.
Smartcat processes PO files as bilingual files. The msgid imports as the source segment and the msgstr, if present, imports as the target.
On export, every msgstr is updated with the translation from the editor and you get a valid PO file back — one per language, ready for your build.
Turn on placeholder import and Smartcat converts %s, %d, {name} and {0} into protected tags, following your workspace's placeholder preset.
Translators can move them, but they can't alter or delete them — so a corrupted variable never reaches your build.
The comment above each string — the #. line your extraction tool writes — is imported as a segment comment in the editor.
Translators see "Shown when the cart is empty" next to the string itself, instead of guessing from a bare sentence fragment.
50%
Increased Productivity
We’ve been able to increase our productivity by 50% while reducing our outsourcing costs by 50%. This has had a huge impact on our bottom line.
Explore Case Study
Julia Emge
Director of Content Creation, expondo
Most platforms parse PO one way. Smartcat lets you choose the parser per file, which decides how updates, history and cost behave.
Serge.io PO — recommended for continuous localization
Uses the unique string IDs in #: comments as segment keys. On re-upload, only segments whose source changed are reprocessed.
Every other segment keeps its revisions and comments, and only the changed strings consume Smartwords. Use it whenever your files carry string IDs, which is the common case.
Default PO — for one-off files without string IDs
The standard parser, with no string-ID tracking. It handles any valid PO file.
Because there are no stable keys, re-uploading replaces the document entirely — revisions and comments on that document are removed.
Monolingual PO — for a narrow set of cases
Extracts only the target string (msgstr) and does not import the source text into the editor.
This does not suit most translation workflows. Reach for it only when a specific pipeline requires target-only editing.
for ease of setup, on G2
for ease of use, on G2
enterprise brands
on G2, from 131 reviews
PO looks simple, but it punishes careless handling. Three failure modes account for most broken localization pipelines.
Corrupted variables. A translator who edits %d or {name} ships a runtime crash — the export passes review and fails in production.
Wiped history on every release. Tools that re-import the whole file on each update destroy review comments and revision history, and bill you for strings that never changed.
Machine output with no sign-off. A raw MT pass leaves msgstr values nobody validated, in languages nobody on the team reads.
Switching to Smartcat during our Contentful CMS migration completely saved our timeline. The integration made everything so much quicker — we actually met our website launch deadline, which wouldn't have been possible with our previous provider.
”Explore Case Study →
Translating a PO file takes five steps: upload the file, choose a parser, let AI draft every segment, review, and export a valid .po per language.
msgstr and returns a valid PO file per language, ready to compile with msgfmt.Full options reference: Translating PO files in Smartcat.
Existing translations, on your terms
Import the msgstr values already in the file, leave them as unconfirmed drafts, confirm them at a chosen workflow stage, or lock them against editing.
Language routing from the file itself
Translate into your project's languages, or let each file's own Language: header decide its target.
HTML inside strings stays intact
Enable Protect HTML tags and markup such as <b> or <a href> becomes locked tags in the editor instead of editable text.
Everything below runs on the PO file itself — no export-import loop between separate tools.
Re-imports that don't punish you
With the Serge.io PO parser, pushing an updated file reprocesses only the changed segments. Review comments, revision history and confirmed translations survive every release — and unchanged strings cost nothing.
Translation memory that compounds across releases
Every approved string goes into a shared memory the moment it is confirmed. Ten releases in, a large share of each new file is pre-filled from work you already own.
Glossary enforcement for UI terminology
Product terms stay consistent across every string and every language, so "Sign in" doesn't become three different verbs in the same interface.
Concordance search across your own history
Look up how a phrase was translated last time, in context, without leaving the segment you're working on.
QA checks before the file leaves the editor
Automated checks catch typos, punctuation, casing and inconsistent terminology while the translator is still in the file.
Duplicate identifiers surface at import
The Serge.io parser requires unique string IDs. If your file has duplicates, Smartcat reports a duplicate-identifier error at upload instead of silently merging strings.
AI draft plus human sign-off, in one place
AI translation drafts every segment; your team or vetted linguists from the Smartcat marketplace review and edit in the same editor, with the memory learning from each correction.
PO alongside the rest of your stack
The same workspace handles JSON, XML, XLIFF, Markdown and the document formats your marketing team sends, so software strings and everything else share one memory and one glossary.
Framework-specific guides: Django localization and Python string translation.
Cells for the other platforms reflect what their own public documentation describes, as of August 2026. All product names are trademarks of their respective owners — see the FAQ below.
| PO / POT import and export | ✓ .po and .pot processed as bilingual files; translated msgstr written back on export | ✓ Documented (.po, .pot and .mo) | ✓ Documented | ✓ Documented |
| Parser choice per file | ✓ Three parsers — default PO, Serge.io PO, Monolingual PO | ~ Import format options | ~ Not documented | ~ Not documented |
| Re-imports keyed by string ID (comments and history survive updates) | ✓ Serge.io PO parser — only changed segments are reprocessed | ~ Not documented | ~ Not documented | ~ Not documented |
| Pay only for changed strings on re-upload | ✓ Unchanged segments consume no Smartwords | ~ Not documented | ~ Not documented | ~ Not documented |
| Placeholder protection (%s, %d, {name}) | ✓ Preset-based locked tags translators can't alter or delete | ✓ Documented | ✓ Documented, with auto-detection and validation | ✓ Documented |
| Plural forms (msgid_plural) | ✓ Supported | ✓ Documented | ✓ Documented | ✓ Documented; plural headers added manually per their docs |
| Context markers (msgctxt) | ✓ Supported | ✓ Documented, as a key prefix | ✓ Documented | ✓ Documented |
| Built-in marketplace of professional linguists | ✓ Vetted linguists reviewed in the same workflow | ✗ Not offered | ~ Vendor directory | ✗ Not offered |
| Pricing model | Usage-based Smartwords | Per-seat plans | Plan tiers | Per-seat plans |
When we kicked off Smartcat workflows, we cut translation turnaround time in half, and used our budget more effectively.
”Explore Case Study →
The constraints below are worth checking against your own pipeline before you commit to a continuous workflow.
Serge.io needs unique string IDs
Every entry must carry a unique ID in its #: comment. If your extraction step doesn't emit reference comments yet, enable it in your build first.
Duplicates block the import
A duplicate identifier fails the upload outright. Fix the ID in the source file and upload again — Smartcat won't guess which string you meant.
No string IDs means no incremental updates
Files without IDs must use the default parser, which replaces the whole document on re-upload and drops that document's revisions and comments.
Segmentation options aren't exposed
PO uploads don't offer the segmentation settings other formats have. Segments follow the entries in your file.
You export .po, then compile
Smartcat returns a translated PO file per language. Compiling to .mo stays in your pipeline, where msgfmt or your framework's build step already handles it.
Monolingual PO is deliberately narrow
It imports targets only, with no source text in the editor. It exists for specific pipelines, not as a general option — most teams should never select it.
Translation memory
Reuses your approved translations automatically, so repeated segments are translated once and stay consistent everywhere.
Glossaries and termbases
Keep product names and terminology aligned across every language, translator and project.
Automated QA checks
Flag missing numbers, broken tags, punctuation issues and terminology deviations before delivery.
AI translation
Generates a context-aware first draft that adapts to your brand voice and learns from your edits.
Collaborative online editor
Translators, editors and reviewers work in the same document at the same time — fully in the browser.
80+ file formats, PO included
Translate Word, Excel, PowerPoint, PDF, XLIFF, HTML and other common formats with formatting preserved.
Upload a PO file and see the translated export in minutes — placeholders intact, history preserved. Free for 15 days with 15,000 Smartwords, no credit card.
A POT file is the empty template extracted from your source code — no translations in it. Each language gets its own PO file created from that template and filled in.
MO files are the binary, machine-optimized version compiled from PO files, and they are what your application actually loads at runtime.
Run gettext's msgfmt utility — for example msgfmt fr.po -o fr.mo — or let your framework's build step do it. Django, WordPress and most gettext toolchains compile automatically.
Export the finished PO from Smartcat and compile it exactly as you do today.
Yes, and that is the default workflow. AI translation drafts every segment, then your team or linguists hired from the marketplace review and edit in the same editor.
Your translation memory learns from every correction, so the next release starts from a better draft.
No — you control it at upload. Import settings let you bring in the existing msgstr values, leave them as unconfirmed drafts, confirm them at a chosen workflow stage, or lock them so nobody can edit them.
With placeholder import enabled they become protected tags that translators cannot modify or delete, and they are restored exactly on export. Presets are configurable per workspace.
Yes. Entries with msgid_plural and their msgstr[n] variants are supported, so plural strings can be translated for each of the target language's plural categories.
The plural rules themselves come from your file's Plural-Forms header, exactly as gettext defines them.
Yes. msgctxt is supported, so two entries with the same msgid but different contexts — say, "Open" as a verb on a button and "Open" as a status label — stay separate segments with separate translations.
Yes. Upload a .pot template the same way you upload a .po file and translate it into any of your project languages.
Not for unchanged strings. With the Serge.io PO parser only the segments whose source text actually changed are reprocessed and consume Smartwords.
With the default parser the document is re-created, so the whole file may be reprocessed.
Pricing is usage-based: Smartwords cover AI translation, and marketplace linguists set their own rates.
The free trial includes 15,000 Smartwords over 15 days with full access to translation capabilities and no credit card. See pricing for plan details.
Yes. Book a demo for a 1:1 consultation and a walkthrough using your own files.
No. Smartcat is an independent platform and is not affiliated with, endorsed by, sponsored by, or otherwise associated with the GNU Project, Phrase, Crowdin or Lokalise.
All product names, logos and trademarks referenced on this page are the property of their respective owners and are used solely for identification and descriptive purposes. Smartcat's PO support is built on the publicly documented gettext standard and does not imply any partnership or certification.