Hey fellow devs,
We just finished localizing our game and wanted to share a heads-up that could save you a ton of time, money, and unnecessary frustration.
Like many others, we saw posts and articles recommending PoEdit for handling .po
files. So, we gave it a shot.
What we didn’t expect was:
- Being auto-enrolled in a subscription the moment we paid
- No clear way to disable auto-renewal
- An intentionally vague “cancel membership” button that didn’t clarify anything
- And when we emailed support for help, they hit us back with a weirdly rude, condescending reply and just… deleted the account.
Total mess.
And this was after trying 10+ other tools that were either:
Inaccurate
Slow
Buggy
Or way overpriced for what they did
BUT HERE’S THE GOOD NEWS:
We found an absolute legend of a dev who made this free tool:
Free Online PO Translator – Aaron's Flashcards
No account required
No credit card
No BS
Just paste your
.po
file and boom — full machine translation in seconds
Supports Unreal, Unity, Godot
Even lets you edit raw entries on the fly
This tool saved us hours of work. It’s 100% free. No shady hooks.
We’ve already added the dev to our game’s credits as a thank-you.
Our Workflow (Step-by-Step)
This is exactly how we used it to translate 13 languages for our game:
1. Export your .po file
- Use the Localization Dashboard in Unreal Engine to export your
.po
file. - Open it in a text editor like VS Code or Notepad++.
2. Separate the header
- Cut the top section (the
.po
header) and paste it into a separate text file. - Save that — you’ll reattach it later.
3. Paste into PO Translator
- Copy the rest of the
.po
file (no header). - Go to Free Online PO Translator – Aaron's Flashcards
- Paste it into Box #1.
- Set the source language (usually English).
- Set your target language.
- Click Translate.
4. Be patient if it freezes
- Chrome might say “This page is unresponsive.” Just hit Wait and let it cook.
- Depending on size, it might translate in chunks. Watch for:
Sending data to be translated…
- Then:
Please check the results.
- When the number of “check results” matches the “sending data” messages, you’re done.
5. Retry if needed
- Paste the full translated result back into Box #1.
- It will show how many entries still need translating.
- Click Translate again until all are done.
- Sometimes a few won’t translate (proper nouns, etc.) — fix those manually.
6. Reattach the header
- Paste the header back on top of the translated
.po
content. - Save your final translated file.
7. QA the result
- We pasted our
.po
into ChatGPT to catch grammar issues and fix awkward lines. - Also watch for Shift+Enter returns (Unreal allows them, but they break translation).
- We replaced return lines with multiple text blocks where needed.
8. Import & Compile
- Back in Unreal, import the translated file.
- Run Gather Text and then Compile Translations.
- Done!
Bonus Tip:
If you export again later with new entries, the tool will only translate new messages.
So you can safely paste a new .po
file into it, and it’ll leave old translations alone.
We used this to handle all 13 of our global launch languages — and it absolutely saved our butts.
Hope this helps someone else dodge the same localization landmines. Keep making awesome stuff, dev friends!
(We’re not affiliated with the tool’s dev — just grateful and wanted to pay it forward.)