Localization review
Translation is the easy half. The job is to make the copy land the way the original landed
— same intent, same register, same relationship between writer and reader — and to say
clearly where that is not possible instead of shipping a sentence that is correct and
wrong.
The one rule that governs everything
Translate the intent, then flag where the intent does not travel. A sentence can be
word-perfect and still fail: the wrong formality register, an idiom that reads as
nonsense, a joke with no equivalent, a politeness level that reads as contempt. Those are
not translation errors and they will not show up in review by a bilingual colleague
skimming for accuracy. Name them explicitly, every time, with what you did instead.
Procedure
- Establish register before translating a word. Who is speaking to whom, and in what
relationship? Support reply, marketing headline, error message, and legal notice all sit
at different registers, and the mapping differs per locale — see
references/register-map.md. Getting this wrong is the single most common cause of "the
translation is fine but our users think we are rude".
- Read the whole piece first. Strings translated one at a time lose the thread and
produce inconsistent terms in adjacent sentences.
- Check the glossary before inventing a term. Product nouns, feature names, and UI
labels must be stable across every string, release, and locale. A feature renamed
silently between two releases costs support tickets in that locale forever.
- Translate for the reader, not the source syntax. Sentence structure, length, and
punctuation should be native. A German sentence that mirrors English clause order is
legible and obviously foreign.
- Mark every non-travelling item with what you did:
[register-changed],
[idiom-replaced], [joke-replaced], [joke-dropped], [culturally-unsafe],
[needs-native-review]. The tag is for the human deciding whether to ship it.
- Check the mechanics that break layouts and meaning: text expansion (German and
Finnish commonly run 20-35% longer than English, Chinese and Korean shorter), date and
number formats, decimal separators, currency placement, address and name-field
assumptions, pluralization rules beyond one/many, gendered agreement with variables,
right-to-left mirroring, and sorting order.
- Never ship a joke untested. If it cannot be tested in the target language, replace
it with a different, worse joke that works, or cut it and say you cut it. A joke that
fails is worse than no joke, because it reads as incompetence rather than as absence.
- Update the glossary with anything new you settled, and say what you added.
What to flag, with examples of the class
- Formality mismatch. Informal second person in a support email is warm in one locale
and insulting in another. This is the top-severity flag; it changes the relationship,
not the wording.
- Idioms and metaphors. "Circle back", "low-hanging fruit", "ballpark". Replace with
the local equivalent or plain language — never translate literally, which produces
surreal sentences that native readers screenshot.
- Humour, wordplay, rhyme, alliteration. Assume none of it travels; earn it back.
- Culturally loaded specifics. Holidays, sports, food, school systems, legal and
medical framings, gestures, colours and number superstitions.
- Names and honorifics. Given/family order, honorific requirements, and the fact that
a first-name-only greeting is friendly in some locales and presumptuous in others.
- Legal and regulated copy. Consumer-rights wording, cancellation windows, warranty
and privacy language are jurisdiction-specific. Flag for legal review rather than
translating a claim that becomes false in the target market.
Hard rules
- Never invent a fluency you do not have. If a locale is outside what you can review
reliably, translate, tag
[needs-native-review], and say so in the handoff.
- Never soften a warning, error, or safety message to sound nicer. Politeness registers
apply to relationship copy, not to "this will delete your data".
- Never translate a term already fixed in the glossary, even when a better word
exists. Propose the change as a glossary update instead, once, with the migration cost
stated — every rename invalidates docs, support macros, and user habit.
- Never localize a legal claim, medical statement, or regulatory disclosure on your own.
- Do not machine-translate and present it as reviewed. Say which parts had a real pass.
- Keep placeholders, variables, escapes and markup byte-identical. A translated
{count} or a smart-quoted apostrophe inside code is a runtime bug, and it is the single
most common way a localization pass breaks a build.
Worked example
Source string, a support reply template, English:
Hey! Just wanted to check in — did you get a chance to look at that invoice?
Let me know if anything's unclear and I'll sort it out. Thanks!
German pass:
Sehr geehrte Frau Weber,
haben Sie die Rechnung bereits erhalten? Bei Fragen melden Sie sich gern, ich
kläre das für Sie.
Mit freundlichen Grüßen
Flags returned with it:
[register-changed] SEVERITY HIGH — source uses informal 'you' and a first-name-free
greeting. In a German billing context that reads as presumptuous, not friendly.
Switched to Sie + salutation. This is the flag that would have caused the complaint;
the words were never the problem.
[idiom-replaced] "check in" and "sort it out" have no direct equivalent that keeps the
casual-but-professional tone. Replaced with plain statements. Warmth now comes from
"gern", which is where German carries it.
[culturally-unsafe] dropped the exclamation mark and "Thanks!" — enthusiasm punctuation
in German business correspondence reads as sales pressure.
[glossary] "invoice" -> "Rechnung" (confirmed, already fixed; NOT "Faktura", which is
Austrian-leaning and inconsistent with our existing 40 strings).
[expansion] German salutation + closing add 2 lines; check the email template's
fixed-height preview pane.
[needs-native-review] no — reviewed.
Note what the flag list is for: a reviewer who reads only the two texts sees a longer,
more formal German email and may "fix" it back toward the source. The flags say which
differences are deliberate and which one was load-bearing.
Handoff
Return: the translated copy, the flag list with severities, glossary additions or
conflicts, mechanical issues (expansion, formats, placeholders), and an explicit statement
of which locales had a real review versus which need a native pass. If one string was
asked about, return the string, the flags, and nothing else.
See references/register-map.md for per-locale formality and the copy types that must
never share a register.
1---2name: localization-review3description: Make copy read like it was written in the target language, not translated into it — translate intent, flag the phrasing that is technically correct and socially wrong, and keep a glossary so the product does not get renamed twice. Use this for "translate this", "localize our onboarding/docs/support replies", "does this read right in German", "review this translation", "why did our French users find this rude", tone and register checks, untranslatable jokes and idioms, or setting up a term glossary. Also use when copy is going to multiple locales and someone needs to know which parts will not travel.4---56# Localization review78Translation is the easy half. The job is to make the copy land the way the original landed9— same intent, same register, same relationship between writer and reader — and to say10clearly where that is not possible instead of shipping a sentence that is correct and11wrong.1213## The one rule that governs everything1415**Translate the intent, then flag where the intent does not travel.** A sentence can be16word-perfect and still fail: the wrong formality register, an idiom that reads as17nonsense, a joke with no equivalent, a politeness level that reads as contempt. Those are18not translation errors and they will not show up in review by a bilingual colleague19skimming for accuracy. Name them explicitly, every time, with what you did instead.2021## Procedure22231. **Establish register before translating a word.** Who is speaking to whom, and in what24 relationship? Support reply, marketing headline, error message, and legal notice all sit25 at different registers, and the mapping differs per locale — see26 `references/register-map.md`. Getting this wrong is the single most common cause of "the27 translation is fine but our users think we are rude".282. **Read the whole piece first.** Strings translated one at a time lose the thread and29 produce inconsistent terms in adjacent sentences.303. **Check the glossary before inventing a term.** Product nouns, feature names, and UI31 labels must be stable across every string, release, and locale. A feature renamed32 silently between two releases costs support tickets in that locale forever.334. **Translate for the reader, not the source syntax.** Sentence structure, length, and34 punctuation should be native. A German sentence that mirrors English clause order is35 legible and obviously foreign.365. **Mark every non-travelling item** with what you did: `[register-changed]`,37 `[idiom-replaced]`, `[joke-replaced]`, `[joke-dropped]`, `[culturally-unsafe]`,38 `[needs-native-review]`. The tag is for the human deciding whether to ship it.396. **Check the mechanics that break layouts and meaning:** text expansion (German and40 Finnish commonly run 20-35% longer than English, Chinese and Korean shorter), date and41 number formats, decimal separators, currency placement, address and name-field42 assumptions, pluralization rules beyond one/many, gendered agreement with variables,43 right-to-left mirroring, and sorting order.447. **Never ship a joke untested.** If it cannot be tested in the target language, replace45 it with a different, worse joke that works, or cut it and say you cut it. A joke that46 fails is worse than no joke, because it reads as incompetence rather than as absence.478. **Update the glossary with anything new you settled**, and say what you added.4849## What to flag, with examples of the class5051- **Formality mismatch.** Informal second person in a support email is warm in one locale52 and insulting in another. This is the top-severity flag; it changes the relationship,53 not the wording.54- **Idioms and metaphors.** "Circle back", "low-hanging fruit", "ballpark". Replace with55 the local equivalent or plain language — never translate literally, which produces56 surreal sentences that native readers screenshot.57- **Humour, wordplay, rhyme, alliteration.** Assume none of it travels; earn it back.58- **Culturally loaded specifics.** Holidays, sports, food, school systems, legal and59 medical framings, gestures, colours and number superstitions.60- **Names and honorifics.** Given/family order, honorific requirements, and the fact that61 a first-name-only greeting is friendly in some locales and presumptuous in others.62- **Legal and regulated copy.** Consumer-rights wording, cancellation windows, warranty63 and privacy language are jurisdiction-specific. Flag for legal review rather than64 translating a claim that becomes false in the target market.6566## Hard rules6768- **Never invent a fluency you do not have.** If a locale is outside what you can review69 reliably, translate, tag `[needs-native-review]`, and say so in the handoff.70- **Never soften a warning, error, or safety message to sound nicer.** Politeness registers71 apply to relationship copy, not to "this will delete your data".72- **Never translate a term already fixed in the glossary**, even when a better word73 exists. Propose the change as a glossary update instead, once, with the migration cost74 stated — every rename invalidates docs, support macros, and user habit.75- **Never localize a legal claim, medical statement, or regulatory disclosure on your own.**76- **Do not machine-translate and present it as reviewed.** Say which parts had a real pass.77- **Keep placeholders, variables, escapes and markup byte-identical.** A translated78 `{count}` or a smart-quoted apostrophe inside code is a runtime bug, and it is the single79 most common way a localization pass breaks a build.8081## Worked example8283Source string, a support reply template, English:8485```86Hey! Just wanted to check in — did you get a chance to look at that invoice?87Let me know if anything's unclear and I'll sort it out. Thanks!88```8990German pass:9192```93Sehr geehrte Frau Weber,9495haben Sie die Rechnung bereits erhalten? Bei Fragen melden Sie sich gern, ich96kläre das für Sie.9798Mit freundlichen Grüßen99```100101Flags returned with it:102103```104[register-changed] SEVERITY HIGH — source uses informal 'you' and a first-name-free105 greeting. In a German billing context that reads as presumptuous, not friendly.106 Switched to Sie + salutation. This is the flag that would have caused the complaint;107 the words were never the problem.108[idiom-replaced] "check in" and "sort it out" have no direct equivalent that keeps the109 casual-but-professional tone. Replaced with plain statements. Warmth now comes from110 "gern", which is where German carries it.111[culturally-unsafe] dropped the exclamation mark and "Thanks!" — enthusiasm punctuation112 in German business correspondence reads as sales pressure.113[glossary] "invoice" -> "Rechnung" (confirmed, already fixed; NOT "Faktura", which is114 Austrian-leaning and inconsistent with our existing 40 strings).115[expansion] German salutation + closing add 2 lines; check the email template's116 fixed-height preview pane.117[needs-native-review] no — reviewed.118```119120Note what the flag list is for: a reviewer who reads only the two texts sees a longer,121more formal German email and may "fix" it back toward the source. The flags say which122differences are deliberate and which one was load-bearing.123124## Handoff125126Return: the translated copy, the flag list with severities, glossary additions or127conflicts, mechanical issues (expansion, formats, placeholders), and an explicit statement128of which locales had a real review versus which need a native pass. If one string was129asked about, return the string, the flags, and nothing else.130131See `references/register-map.md` for per-locale formality and the copy types that must132never share a register.