> flutter-localization
Standards for multi-language support using easy_localization with CSV or JSON. Use when adding localization or multi-language support to Flutter apps. (triggers: **/assets/translations/*.json, **/assets/langs/*.csv, main.dart, localization, multi-language, translation, tr(), easy_localization, sheet_loader)
curl "https://skillshub.wtf/HoangNguyen0403/agent-skills-standard/flutter-localization?format=md"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
> related_skills --same-repo
> typescript-tooling
Development tools, linting, and build config for TypeScript. Use when configuring ESLint, Prettier, Jest, Vitest, tsconfig, or any TS build tooling. (triggers: tsconfig.json, .eslintrc.*, jest.config.*, package.json, eslint, prettier, jest, vitest, build, compile, lint)
> typescript-security
Secure coding practices for TypeScript. Use when validating input, handling auth tokens, sanitizing data, or managing secrets and sensitive configuration. (triggers: **/*.ts, **/*.tsx, validate, sanitize, xss, injection, auth, password, secret, token)
> typescript-language
Modern TypeScript standards for type safety and maintainability. Use when working with types, interfaces, generics, enums, unions, or tsconfig settings. (triggers: **/*.ts, **/*.tsx, tsconfig.json, type, interface, generic, enum, union, intersection, readonly, const, namespace)
> typescript-best-practices
Idiomatic TypeScript patterns for clean, maintainable code. Use when writing or refactoring TypeScript classes, functions, modules, or async logic. (triggers: **/*.ts, **/*.tsx, class, function, module, import, export, async, promise)