BRAND INDEX
WCNWCNWORKFLOW & TOOLING MAP
11 · LOCALIZATION → E
11 · LOCALIZATION
Workflow & tooling · E
Localization,
engineered.
Good localization is a pipeline, not a paste job. This cluster covers the message catalog, string externalization and the tooling that makes new languages a config, not a rebuild. Tap any card to open its spec.
CATALOG
EXTERNALIZE
FALLBACK
TM
PSEUDO
50%
WORKFLOW COVERAGE
2 shipped
1 in progress
2 planned
11E01 Message catalog DONE
The message catalog is where all translatable text lives — one structured file per locale, managed by next-intl. It’s the backbone that makes the whole bilingual system maintainable.
TOOLnext-intl FORMATJSON catalog PERLocale STRUCTURENested
A
B
C
D
E01.1 · THE CATALOG
All text, one place.
Every user-facing string lives in the catalog, keyed and grouped. The English and Chinese catalogs mirror each other key-for-key, so any string can be found in both.
HOLDSAll strings
KEYEDYes
MIRROREN ↔ ZH
FINDIn both
E01.2 · FORMAT
Structured JSON.
Catalogs are JSON, supporting interpolation, plurals and rich formatting via ICU syntax. The format is standard, so tooling and translators both understand it.
FORMATJSON
SUPPORTSICU
PLURALSYes
STANDARDTooling-friendly
E01.3 · PER LOCALE
One per language.
Each locale has its own catalog file, loaded on demand. Adding a language means adding a file — not touching the components that consume the keys.
FILEPer locale
LOADEDOn demand
ADD LANGAdd file
COMPONENTSUntouched
E01.4 · STRUCTURE
Nested, by feature.
Keys nest by feature and screen, matching the key-structure convention. The structure makes a large catalog navigable and gives translators context from the path.
NESTBy feature
MATCHESKey convention
NAVIGABLEAt scale
CONTEXTFrom path
DON'T
×
Don't let catalogs diverge — Mirror keys across locales.
×
Don't avoid ICU — Plurals need it.
×
Don't merge locales in one file — One per language.
×
Don't flatten the structure — Nest by feature.
“The catalog is the backbone — keep it mirrored and the rest stays maintainable.”
11E02 String externalization DONE
A single hardcoded string is a hole in the localization system — text that ships in English no matter the locale. Externalization is the discipline, enforced by lint, that keeps every string in the catalog.
RULENo hardcode LINTEnforced ALLStrings FAILSThe build
E02.1 · THE RULE
Zero strings in code.
No user-facing text is written inline in a component — it’s always a key into the catalog. One hardcoded label is one piece of the UI that can never be Chinese.
INLINENever
ALWAYSA key
ONE= untranslatable
ZEROTolerance
E02.2 · LINT ENFORCEMENT
Caught by the machine.
A lint rule detects literal strings in JSX and fails them. Enforcement is automated because relying on reviewers to spot every hardcoded word is a losing game.
DETECTSLiterals
INJSX
AUTONot reviewers
RELIABLEYes
E02.3 · COVERAGE
Including the edges.
Externalization covers the easy strings and the forgotten ones — errors, alts, aria-labels, emails, metadata. The edges are exactly where hardcoded English usually hides.
EASYCovered
EDGESErrors · alts
ALSOEmail · meta
HIDESAt edges
E02.4 · BUILD GATE
Fails, not ships.
A hardcoded string fails the build rather than shipping silently. Making it a hard gate means the system can’t quietly regress one careless commit at a time.
FAILSBuild
NOTShips
GATEHard
REGRESSPrevented
DON'T
×
Don't inline any user text — Always a catalog key.
×
Don't rely on review — Lint it automatically.
×
Don't forget alts and errors — Edges hide hardcode.
×
Don't warn-only — Fail the build.
“One hardcoded string is one piece of UI that will never speak Chinese.”
11E03 Locale fallback WIP
If a Chinese translation is missing for a key, the user must never see a blank or a raw key name. The fallback chain ensures something sensible always renders — and the gap gets logged.
CHAINZH → EN MISSINGFalls back NEVERBlank LOGFlagged
E03.1 · THE CHAIN
A defined order.
The fallback chain is explicit: a missing Chinese string falls back to English, never to nothing. The chain is configured once and applied everywhere.
ZHFirst
THENEN
NEVERNothing
CONFIGOnce
E03.2 · MISSING KEYS
Graceful, not broken.
A missing key renders the English text — imperfect, but readable — rather than a broken UI. Users get a working product even mid-translation.
RENDERSEnglish
READABLEYes
NOTBroken UI
MID-TRANSLATEWorks
E03.3 · NEVER BLANK
No raw keys, no gaps.
The one thing that must never happen is a raw key (home.hero.title) or an empty space showing to a user. The fallback guarantees real words always render.
NEVERRaw keys
NEVERBlank
ALWAYSReal words
GUARANTEEYes
E03.4 · LOGGING
Fallback is a flag.
Every fallback is logged as a missing-translation flag, so gaps surface in QA and get filled. A graceful fallback shouldn’t hide that work remains.
LOGEach fallback
=Missing flag
SURFACESIn QA
FILLEDLater
DON'T
×
Don't fall back to blank — Always show English.
×
Don't render raw keys — Never user-facing.
×
Don't fall back silently — Log every instance.
×
Don't leave the chain implicit — Configure it explicitly.
“A missing translation should degrade to English — never to a blank or a key.”
11E04 Translation memory PLANNED
The same phrases recur across a product. Translation memory stores every approved translation and offers it back when the same or similar text appears — raising consistency and cutting cost.
TMDatabase REUSEMatches CONSISTENCYUp COSTDown
A
B
C
D
E04.1 · WHAT TM IS
A memory of every translation.
Translation memory is a database of source-target pairs from past work. When a string matches one already translated, the TM proposes the approved version automatically.
ISSource-target DB
FROMPast work
MATCHProposes
APPROVEDVersion
E04.2 · REUSE
Exact and fuzzy.
TM offers exact matches and fuzzy ones (similar but not identical), so even near-repeats start from a known-good translation rather than scratch.
EXACTMatches
FUZZYNear-matches
STARTFrom known-good
NOTScratch
E04.3 · CONSISTENCY
Same phrase, same words.
Because the same source reuses the same translation, recurring phrases stay consistent across the whole product — reinforcing the termbase at the sentence level.
SAMESource → target
CONSISTENTProduct-wide
REINFORCESTermbase
LEVELSentence
E04.4 · COST
Less to translate.
Reuse means translators bill for fewer new words, and updates touch only what changed. TM turns translation from a recurring full cost into an incremental one.
BILLFewer words
UPDATESOnly changes
FULL →Incremental
SCALESWell
DON'T
×
Don't auto-accept fuzzy matches — Review near-matches.
×
Don't let TM drift from termbase — Keep them aligned.
×
Don't keep bad entries — Prune wrong translations.
×
Don't skip it for repeats — That’s where it pays.
“Translation memory makes the tenth translation of a phrase identical to the first.”
11E05 Pseudo-localization PLANNED
Pseudo-localization replaces text with a longer, accented fake version before real translation exists. It surfaces hardcoded strings and layout overflow early — catching localization bugs in development, not production.
METHODPseudo-locale CATCHESHardcode · overflow WHENCI EARLYPre-translation
WCN
E05.1 · WHAT IT IS
A deliberately ugly locale.
Pseudo-localization generates a fake locale where text is accented and padded — “Settings” becomes “[Ŝeťťîńgş…]”. Still readable, but obviously transformed.
FAKELocale
ACCENTEDText
PADDEDLonger
READABLEStill
E05.2 · WHAT IT CATCHES
Two bugs at once.
Untransformed text in the pseudo-locale is hardcoded (a bug); text that overflows its container reveals a layout that won’t survive a longer language. Both surface instantly.
UNCHANGED= hardcoded
OVERFLOW= layout bug
BOTHAt once
INSTANTVisible
E05.3 · IN CI
Automated pass.
The pseudo-locale runs in CI and visual tests, so regressions are caught on every change — not discovered when the first real translation arrives.
RUNSCI
VISUALTests
EVERYChange
NOTAt translation
E05.4 · EARLY
Before translators.
Because it needs no real translation, pseudo-localization tests readiness from day one. Layouts are proven localization-safe long before a translator is engaged.
NOReal translation
FROMDay one
PROVESReadiness
BEFORETranslators
DON'T
×
Don't test manually only — Run it in CI.
×
Don't make it unreadable — Keep text recognisable.
×
Don't skip padding — Length reveals overflow.
×
Don't wait for translation — Test from day one.
“Pseudo-localization finds the bug in development that real translation would find in production.”
In progress
The pipeline works.
The message catalog and string externalization are done — the engineering backbone. Fallback chains, translation memory and pseudo-localization testing harden it into a real pipeline.
WCN Workflow & Tooling Map · 5 topics · E01–E05
11 · LOCALIZATION · E · v1.0