---
title: "Translate gettext PO files"
description: "Translate .po and .pot catalogs up to 4 MB entry by entry. Message IDs and contexts stay, plural forms and the Plural-Forms header are written for the target language."
canonical: "https://ai-glot.com/docs/formats/gettext-po"
updated: "2026-10-12"
---

# Translate gettext PO files

gettext catalogs (`.po` and `.pot`) are accepted up to **4 MB**. Each `msgid` keeps its context while its `msgstr` is filled in. A `.pot` template has empty entries by definition, so uploading one gives you a `.po` with them filled in.

> **Tip: Try it free**
>
> Drop a file of up to 2 MB on the free [PO translator](https://ai-glot.com/file-formats/po-translation) to try it with no account, five files a day. The app, the API and the CLI take PO files up to 4 MB.

## What is translated, and what is left alone

| Translated                                                      | Left as it was                                          |
| --------------------------------------------------------------- | ------------------------------------------------------- |
| `msgstr`, filled in or redone as you ask                        | `msgid` and `msgctxt`, never rewritten                  |
| Plural entries: one `msgstr` per form the target language needs | `#:` references and `#.` comments                       |
|                                                                 | Fuzzy flags, which are kept as they are and not cleared |

Plural forms are the part a generic tool gets wrong. The target language decides how many forms exist: Russian and Polish need three, Japanese needs one. The `Plural-Forms` and `Language` headers are rewritten to match. A language outside a table of about 65 is left untouched rather than guessed.

## What you can ask

**Fill the empty entries**

Pre-translates a template and leaves reviewed strings alone.

Translate the empty msgstr entries into French. Keep placeholders such as %s, %d and %(name)s unchanged.

**Only the changed entries**

Returns just the entries that were written, for a small review.

Translate the empty entries into German and return only the entries you changed.

**Fuzzy entries**

Decides what happens to entries flagged for review.

Redo the fuzzy entries in Spanish, and leave all entries that are not fuzzy as they are.

**A WordPress plugin**

Keeps the context that tells the same word apart.

Translate this plugin catalogue into Italian. Use the msgctxt to choose the right meaning, and keep HTML tags and placeholders unchanged.

**Plurals**

Writes every plural form the language needs.

Translate into Polish and write all three plural forms for every plural entry.

## Good to know

- **One target language per upload.** A catalog holds one language. If you ask for two, the plan translates one and says so. Run the file once per language: your [glossary](/docs/platform/glossaries) carries over.
- **Output filter.** Available. Ask for "only the entries you changed" to get a smaller file back.
- **Fuzzy flags.** They are kept as written. Say in your instruction whether fuzzy entries should be redone or left alone.
- **`.mo` files** are compiled catalogs and are refused. Send the `.po` they were compiled from.
- **Ceiling.** 4 MB.

## Related

- [Android and Apple strings](/docs/formats/android-and-apple-strings), [XLIFF](/docs/formats/xliff-and-cat-tools) and [Java, INI, Fluent and PHP](/docs/formats/java-ini-fluent-php) for other localization formats.
- [All file formats](/docs/formats)
