Flutter and iOS localization guides
What gen-l10n and Xcode check, what they let through and how to catch problems before a release.
- Finding missing keys in a Flutter app's ARB files Find missing translations in a Flutter app's ARB files: the untranslated-messages-file option, a key comparison script and placeholder checks. Updated September 27, 2026
- ICU plurals and placeholders: what gen-l10n lets through A dropped placeholder, a renamed variable, an =1 branch shown for zero in French: what flutter gen-l10n doesn't flag in ARB files. Tested with Flutter 3.47. Updated September 27, 2026
- Migrate Localizable.strings to a String Catalog (.xcstrings) Moving from Localizable.strings to an Xcode String Catalog: the migration, the .xcstrings file format and what to review in the diff before you commit. Updated September 27, 2026
- Translate a Flutter app with Ollama or LM Studio Translating a Flutter app's ARB files with a local model (Ollama, LM Studio): setup, prompt, a Dart script and the mistakes to watch for. Updated September 27, 2026
- App Store keywords: 100 bytes or 100 characters? The App Store Connect reference says 100 bytes, other Apple pages say 100 characters. What it changes for accented languages, Japanese or Thai. Updated September 27, 2026
- %@, %1$@, %lld: the format specifiers that break in translation Dropped specifiers, changed types, swapped order and the French "20 % de remise" trap: common format errors in iOS translations and how to catch them. Updated September 27, 2026