Create a free account and get 30,000 characters monthly for free to translate your content with our AI-powered localization service.
No credit card required to get started!
Translating PO (Portable Object) files with our AI-powered service is fast and accurate. Follow these steps to translate your gettext localization content while preserving the PO format structure.
PO (Portable Object) files are a widely used localization format created by the GNU gettext internationalization system. They store translatable strings as key-value pairs using msgid (original text) and msgstr (translated text) entries.
PO files are the standard localization format for many open-source projects and frameworks, including WordPress, PHP applications, Python (Django, Flask), Ruby on Rails, C/C++ programs, and desktop applications built with GTK or GNOME.
A PO file consists of entries with the following key elements:
# Translation file for MyApp
#: src/components/header.js:12
msgid "Welcome to our application"
msgstr ""
#: src/components/login.js:8
msgid "Sign in to your account"
msgstr ""
#: src/components/dashboard.js:15
msgid "You have %d new messages"
msgid_plural "You have %d new messages"
msgstr[0] ""
msgstr[1] ""msgid — The original untranslated string (source text). This serves as the key for looking up translations.msgstr — The translated string for the target language. Empty msgstr values indicate untranslated strings.#) — Provide context for translators. #: indicates source file references, #. contains extracted comments, and #, holds flags like fuzzy.msgid_plural, msgstr[N]) — Handle language-specific plural rules. Different languages have different numbers of plural forms (e.g., English has 2, Polish has 3, Arabic has 6).msgctxt) — Disambiguates identical source strings that need different translations depending on context (e.g., "Open" as a verb vs. adjective).A POT (Portable Object Template) file is the template used to create PO files. It contains all the source strings with empty msgstr values. When starting a new translation, you copy the POT file, rename it for your target language (e.g., fr.po), and fill in the translations.
Our service accepts both PO and POT content. Simply paste either format, and the AI will generate translations for all msgstr entries.
Here is a typical POT template file with a header and translatable strings:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-01-01 00:00+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/app.py:42
msgid "Hello, World!"
msgstr ""%s, %d, %(name)s), and adapts translations to cultural nuances for the target language.msgctxt), plural forms, and format flags. The PO structure is fully preserved during translation.msgstr[N] entries.PO files are the standard localization format for a wide range of platforms and frameworks:
makemessages command extracts translatable strings into POT files, and compilemessages compiles PO files into binary MO files.gettext gem with PO files for localization, especially when integrating with existing gettext-based translation workflows.@lingui/cli tool extracts translatable strings into PO catalogs, and Lingui's runtime loads compiled translations at build time for optimal performance.PO files are one of the most established localization formats, with over 30 years of history in the open-source community. Unlike JSON or YAML-based formats, PO files include built-in support for plural forms, translator comments, source references, and contextual disambiguation.
While modern frameworks often use JSON (i18next, React Intl) or YAML (Rails), PO remains the preferred format for WordPress plugins, PHP applications, Python Django projects, and Linux desktop software. Our service bridges both worlds — translate PO content here, or use our I18N File Translation page for batch processing of any format.
Our AI translation preserves the complete PO file structure, including headers (Project-Id-Version, Content-Type, Plural-Forms), translator comments, source file references, and format flags, ensuring your translated PO files are ready for immediate use with gettext tools like msgfmt.