Skip to main content

CSV to PO Converter

Convert a two-column CSV translation spreadsheet (original text, translated text) into a GNU gettext .po source file. Runs entirely in your browser — no upload.

Input

Drop a file or browse
One file · text

Read as UTF-8 text and dropped straight into the box above.

Skip the first row — check this if your spreadsheet export has column titles.

Output

PO file
Was this helpful?

Guides

Translation spreadsheets are easy to build and hand off — a source-text column, a translated-text column, filled out in Excel, Google Sheets, or LibreOffice Calc. But GNU gettext (the translation system behind WordPress, most PHP apps, and countless Python/C programs) doesn't read spreadsheets — it reads .po files, with their own msgid/msgstr syntax and header block. This tool bridges the two: paste or upload a two-column CSV and get back a properly formatted .po file.

How to use it

Export your spreadsheet as CSV with the source text in the first column and the translation in the second, then paste or upload it. If your export has a header row (column titles like "Source" / "Translation"), check First row is a header to skip it. Click Convert to PO and copy or download the result.

Expected CSV format

Two columns per row — original text, then translated text:

"Hello","Hola"
"Goodbye","Adiós"

Quoting is only required when a value itself contains a comma, quote, or line break — a plain Hello,Hola row works too. The delimiter is auto-detected (comma, tab, semicolon, or pipe); override it manually if auto-detection picks the wrong one for an unusual export.

What it produces

A standard .po file: the usual xgettext/msginit header block (Content-Type, MIME-Version, and the rest of the placeholder fields a translation tool expects to see), followed by one msgid/msgstr pair per CSV row. Rows with a blank original-text column are skipped, since gettext reserves the empty msgid "" for the header itself.

Privacy

Everything happens client-side — nothing is uploaded to a server.

Can I compile the .po this produces into a binary .mo file?

Yes — use the PO to MO Converter on the file this tool produces.

My CSV has more than two columns

Only the first two columns are read (original text, translated text); anything after that is ignored.

gettextpo filecsvtranslation filei18nl10nlocalizationspreadsheet translationwordpress translationmsginit

More ways to use this tool

REST API

curl -X POST https://api.iotools.cloud/v1/tool/csv-to-po \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "csv": "\"Hello\",\"Hola\"\n\"Goodbye\",\"Adiós\""
  }'

Swap in your own key from your account. The tool's fields are the body — no wrapper.

Ask an AI agent

Use the IOTools `csv-to-po` tool (CSV to PO Converter) on this input:

YOUR_INPUT_HERE

Paste this at any agent connected to the IOTools MCP server, then add your input.

Embed widget

<iframe
  src="https://iotools.cloud/embed/csv-to-po/"
  width="100%" height="520" frameborder="0" scrolling="no" loading="lazy"
  title="CSV to PO Converter — iotools.cloud"
  sandbox="allow-scripts allow-forms allow-same-origin allow-downloads allow-popups allow-popups-to-escape-sandbox"
  allow="clipboard-write"
  style="width:100%;border:1px solid #e5e7eb;border-radius:12px;overflow:hidden"></iframe>
<script src="https://iotools.cloud/embed.js" async></script>

Drop this into your own page — free, no key required, just a link back.

Cost per callFrom 5 credits

Also available with

Love the tools? Lose the ads.

One payment clears every ad from your account, for good. No subscription, no tracking.