Localization
Priority: P1 (STANDARD)
Consistent multi-language support using easy_localization.
Format Selection
- CSV (Recommended for teams with translators):
- Non-technical editors can update easily
- Native Google Sheets compatibility via
sheet_loader_localization - Store in
assets/langs/(common convention)
- JSON (Developer-friendly):
- Nested structure support (e.g.,
items_count.zero) - IDE validation and autocomplete
- Store in
assets/translations/
- Nested structure support (e.g.,
Both formats work identically with easy_localization.
Structure
# CSV Format (Google Sheets workflow)
assets/langs/langs.csv
# OR JSON Format (nested keys)
assets/translations/
├── en.json
└── vi.json
Implementation Guidelines
- Bootstrap: Wrap root with
EasyLocalization. Always useawait EasyLocalization.ensureInitialized(). - Lookup: Use
.tr()extension on strings (e.g.,'welcome'.tr()). - Locale: Change via
context.setLocale(Locale('code')). - Params: Use
{}placeholders; pass viatr(args: [...]). - Counting: Use
plural()for quantities. - Sheets Sync: Use
sheet_loader_localizationto auto-generate CSV/JSON from Google Sheets.
Anti-Patterns
- Hardcoding: No raw strings in UI; use keys.
- Manual L10n: Avoid standard
Localizations.of; use GetX oreasy_localizationcontext methods. - Desync: Keep keys identical across all locale files.
Reference & Examples
For setup and Google Sheets automation: See references/REFERENCE.md.
Related Topics
idiomatic-flutter | widgets