Blog
日本語版はこちらPractical notes for game developers: reaching players in more countries, shipping in more languages, and catching localization bugs before players do.
Looking for books instead? See the recommended reading list
Free tools:Mojibake decoderLocalization file checker
Getting started
- What is a CAT tool? What it does to your game strings and your quote
A CAT tool is the editor translators work in, not machine translation. How it segments and matches your strings, fuzzy match scores computed two ways, and what to change before a handoff.
- What video game localization covers, measured with real commands
Localization is not only translation. Measured numbers for how much text length, number and date formats, plural and sorting rules, and the locale tag itself change — with the commands that produced them.
Reaching more players
Solo & indie devs
- Best books before your first game localization (3-book reading order)
Three books for a small team translating a game for the first time: plan the project, fix your source text, sell the result — with reading order and who each one is not for.
- Visual novel word count: how to measure it and plan the translation
Before you can budget or schedule a visual novel translation you need a real number. How to extract and count script text, handle branches and duplicates, and turn the count into a plan.
Store & global release
- itch.io vs Steam for your first release
Two very different places to put your first game. What each costs, who is on the other side, how far each one carries you outside your own language, and why the choice is less permanent than it feels.
- Simship (simultaneous global release): what it means and what it costs
Shipping every language on day one concentrates all your attention into one moment — and moves your text freeze months earlier. How to decide whether simship is worth it for your game.
- Reading Steam wishlist data by country and turning it into decisions
Your Steamworks reports break wishlists and traffic down by region. Here is how to read that breakdown without fooling yourself, and how to turn it into a decision about which language to add next.
- Steam supported languages: what interface, audio and subtitles mean
Steam asks you to tick three boxes per language, and nobody checks whether the claim is true except your players. Here is what each column promises and where the line is for claiming support.
- Steamworks tax interview (W-8BEN) for non-US developers, explained
Setting up payment on Steamworks means answering a wall of US tax questions. Here is what the interview is for, which form it is trying to produce, and where developers outside the US most often get stuck.
Engineering
- How to externalize hardcoded strings for game localization
A working extraction pattern and what it misses, where the text has to land in Unity, Unreal, Godot and RPG Maker, and the pseudo-localization pass that proves nothing was left behind.
- CJK line breaking: how Japanese, Chinese and Korean differ
Japanese, Chinese, Korean and Thai each produce line break opportunities differently. What the Unicode line breaking algorithm (UAX #14) actually decides, what to set per language, and which checks you can run on your strings.
- Naninovel localization guide: scripts, managed text, and voice
How localization actually works in a Naninovel project: the two kinds of text it manages, how translation documents bind to source lines, handing files to translators, and the voice and layout traps.
- Japanese pixel fonts: holding kanji and English on the same screen
Why a pixel font that looks perfect in English falls apart when you add Japanese: the legibility floor for kanji, mixing two fonts on one line, keeping pixels sharp, and how many characters actually fit in your text box.
- Localizing an RPG Maker MV/MZ game: where the text hides
RPG Maker never asked you to keep text in one place, so it ends up scattered across database entries, event commands, plugin parameters, and images. Here is how to find it all and move it safely.
- RPG Maker MV/MZ language switch: everything that must react to it
Letting players change language in-game is more than loading another text file. Where the choice is stored, what happens on first launch, and which screens do not redraw by themselves are where shipped games break.
- Shift_JIS vs CP932: the differences that break Japanese text
Same bytes, two mapping tables. Exactly six byte pairs decode differently, 457 characters exist only in CP932, and 0x5C doubles as the backslash — measured by running the conversions.
- Localization key naming conventions that survive growth
What a string key is, the three ways to identify a string and what each costs, a key format rule with the regex that enforces it, how Unity, Unreal, Godot and gettext store key identity, and how to rename a key without orphaning translations.
- Subtitles in localized games: timing, line limits, and language pairs
Why subtitle timing has to follow reading speed rather than the audio clip, how to set line and width limits per language, and why voice language and subtitle language must be two separate settings.
- Unity Localization package: a CSV workflow that survives updates
Exporting String Tables to CSV is a few clicks. Designing the round trip so keys stay stable, Smart Strings survive, and you only send what changed is the part that decides whether the pipeline holds up.
- Unity localization: which approach to pick, and what breaks
A decision table for the three ways to localize a Unity game, the table layout you hand a translator, how to name locales, the five failures that appear after setup, and a pseudo-locale pass you can run before any translation exists.
- Unreal Engine localization: FText, the dashboard loop, and the traps
How text becomes translatable in Unreal Engine: why only FText is gathered, what each step of the Gather-Export-Import-Compile loop writes, and the culture, plural and font details that stall a first localization.
- Unreal string tables and the CSV round trip that actually works
A practical Unreal Engine localization workflow: FText discipline, string tables backed by CSV, the gather-export-translate-import-compile loop, and the text the pipeline quietly never sees.
File formats & standards
- Android strings.xml localization: escaping, format args, plurals
Which mistakes in a translated strings.xml stop the Android build and which ship to players, with compiler output for escaping, format arguments, plurals and qualifier directories.
- BCP 47 language tags: what ja-JP, zh-Hans, and pt-BR actually mean
How BCP 47 language tags are built from subtags, the canonical forms and deprecated codes your runtime reports, the locale list games ship, and the naming mistakes that break fallback.
- PO file format explained: msgid, msgstr, plurals, POT and MO
What a PO file actually contains: header, msgid and msgstr, msgctxt, plural forms, every comment marker. How PO, POT and MO relate, and four ways a catalog silently loses a translation.
- ICU MessageFormat syntax: plurals, select, and CLDR categories
Every form of ICU MessageFormat with examples — arguments, number and date styles, plural with =0, # and offset, select, selectordinal — plus a per-language CLDR category table and what to tell translators.
- TMX vs TBX: translation memory and terminology file formats explained
A TMX file holds translated sentence pairs and a TBX file holds approved terminology. Minimal working examples of both, how matching really behaves, and the five ways these files break.
- What is Unicode CLDR? The locale data behind Intl and ICU
CLDR is Unicode's versioned dataset of locale conventions, and Intl, Android, Apple platforms and .NET all read it through ICU. What it holds, shown as real output, and where game text breaks.
- XLIFF files explained: 1.2 vs 2.0, and what breaks on the round trip
What an XLIFF file is, a complete minimal document in both 1.2 and 2.0, the version differences that make importers fail, the round-trip damage a parser catches versus the damage it waves through, and what to state in the handoff.
QA & troubleshooting
- ã and ’: fixing double-encoded UTF-8 text
Strings like é, ’ and ã are UTF-8 read once as Windows-1252 and saved as UTF-8 again. A measured lookup table, a repair command, and the exact point where that command silently truncates Japanese.
- Why emoji break string length: surrogate pairs in game text
One emoji measures 1, 2, 4 or 18 depending on what is counting. Measured tables for eight real strings, seven ways a careless cut breaks them, what length returns in six languages, and how to count and cut safely.
- Japanese game garbled on Windows? Fix the system locale, not the game
Garbled text, boxes, or a crash on launch in a Japanese game usually means your Windows system locale is not Japanese, not that the game is broken. The fix, the per-app alternatives, and what developers can do so players never need it.
- Fix mojibake: read the garbled text, find the encoding, decode it
Mojibake is a decoding mismatch, not data loss. A generated table of eight misread encoding pairs, the signature each one leaves, and the exact commands that reverse them.
- Mojibake cheat sheet: what é, ’ and 縺 mean, and how to undo them
A lookup sheet of garbled-text signatures — é, ’, ©, 縺ゅ↑, 、「、ハ, Пр, é and more. Each one names the encoding pair that produced it, and the pair tells you the fix.
- Tofu boxes in game text: missing glyphs, not broken encoding
Text renders as empty boxes while the string itself is correct. Measured glyph coverage from ten real fonts, how to tell tofu from mojibake, and how to size a font atlas that survives launch.
- What is LQA? Localization QA, linguistic QA, and how to run one
LQA is the pass that checks translated text inside the running game. What it covers, how to scope a pass, a bug report template, severity criteria, and which checks belong on every build.
- Japanese text wraps in the wrong place — a line starts with 、or 」
A line begins with a comma, a closing bracket sits alone at the start of a line, a small kana opens a line. These violate a named rule set, and whether a string violates it depends on the exact column width.
Language guides
- pt-BR means Brazilian Portuguese: how it differs from pt-PT and pt
pt-BR is Portuguese as written in Brazil, pt-PT as written in Portugal. The spelling each platform wants, the words that differ, and why a bare pt becomes pt-Latn-BR.
- English to Japanese: what actually changes in your game text
Measured character counts and rendered widths for real UI strings, the engine work Japanese requires, the decisions English let you skip, and the handoff that prevents rework.
- es-419 and es-ES explained: what the codes mean, when you need both
es-419 is Spanish for Latin America (419 is the UN M.49 region code), es-ES is Spanish for Spain. What each tag resolves to at runtime, where the varieties really diverge, and how to choose one or two.