i18n Localization Release Workflow
Extract strings, hand off to translators with context, validate the imported translations for placeholders and length, and test the localized build.
Objective
Release a localized build without untranslated strings, broken placeholders, or layout overflow.
Environment
- An i18n framework with string catalogs
- A translation handoff process
Steps
1. Extract strings with keys, context,
Extract strings with keys, context, and screenshots for translators.
Expected state: Translators work without guessing.
2. Import translations and validate placeholders
Import translations and validate placeholders and ICU syntax.
Expected state: No broken interpolation.
3. Check for missing strings and untranslated
Check for missing strings and untranslated fallbacks.
Expected state: No English leaks into localized pages.
4. Test the localized build for layout
Test the localized build for layout overflow and locale formatting.
Expected state: The UI holds in the target language.
Decision points
Machine translate then review or human first?
- Human for user-facing
- Machine translate directly
Human review for user-facing strings; machine output without review produces embarrassing errors.
Ship with missing strings?
- Fall back with a report
- Block the release
Fall back to the default language but report; blocking on a single missing string delays everything.
Expected outcome
A localized build with complete translations, valid placeholders, no English leakage, and layouts that hold.
Verification
Confirm the missing-key report is empty for enabled locales and that placeholders and plural rules are validated in CI.
Cleanup
Tag the translation version and notify translators of the release.
Overview
Release a localized build without untranslated strings, broken placeholders, or layout overflow. Confirm the missing-key report is empty for enabled locales and that placeholders and plural rules are validated in CI.
Steps
- Extract strings with keys, context, and screenshots for translators. Expected state: Translators work without guessing.
- Import translations and validate placeholders and ICU syntax. Expected state: No broken interpolation.
- Check for missing strings and untranslated fallbacks. Expected state: No English leaks into localized pages.
- Test the localized build for layout overflow and locale formatting. Expected state: The UI holds in the target language.
t('checkout.total', { count }) // ICU plural
// validate: no missing keys, placeholders match the source
Verification
- A localized build with complete translations, valid placeholders, no English leakage, and layouts that hold.
Decision points
- Machine translate then review or human first? Options: Human for user-facing; Machine translate directly. Recommended: Human review for user-facing strings; machine output without review produces embarrassing errors.
- Ship with missing strings? Options: Fall back with a report; Block the release. Recommended: Fall back to the default language but report; blocking on a single missing string delays everything.