Best practices for internationalization (i18n) and localization (l10n) in Flutter, using the built-in flutterlocalizations and intl setup with ARB files as the single source of truth.

MITAuto-check passedFrontend & Design

Install Internationalization

skills CLI
$ npx skills add VeryGoodOpenSource/vgv-ai-flutter-plugin --skill internationalization -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install VeryGoodOpenSource/vgv-ai-flutter-plugin internationalization --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/VeryGoodOpenSource/vgv-ai-flutter-plugin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/internationalization .claude/skills/internationalization && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
internationalization
GitHub stars
169
Token cost
~1.6k tokens
SKILL.md length
537 words
Files
5 (incl. references)
Skills in repo
15
Repo updated
First seen
Licence
MIT

At a glance

Best practices for internationalization (i18n) and localization (l10n) in Flutter, using the built-in flutterlocalizations and intl setup with ARB files as the single source of truth.

  • Works in 4 steps: Create app_.arb in lib/l10n/arb/ (e.g.,… → Add translations for all keys from the… → Run flutter gen-l10n → …
  • Reviewing ARB translations
  • SKILL.md covers Core Standards, Setup Pipeline and ARB File…, BuildContext Extension and Reusable Widget Strategy, plus 4 more sections
  • Calls flutter

What it does

Internationalization is an agent skill from VeryGoodOpenSource/vgv-ai-flutter-plugin. Best practices for internationalization (i18n) and localization (l10n) in Flutter, using the built-in flutterlocalizations and intl setup with ARB files as the single source of truth. Use when adding, modifying, or reviewing ARB translations, locale setup (l10n.yaml, generate: true in pubspec.yaml, flutter gen-l10n, localizationsDelegates, supportedLocales), BuildContext l10n extensions such as context.l10n, hardcoded user-facing strings that should be localized, localized strings passed into shared or reusable…

Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `agents/openai.yaml`, `references/backend.md` and `references/directionality.md`).

It sits in Frontend & Design, covering Internationalization. It works with Flutter and Dart. The repository describes itself as: AI plugin to enhance and accelerate Flutter & Dart development, built by Very Good Ventures. The licence is MIT.

When your agent uses it

  • Reviewing ARB translations
  • Locale setup (l10n.yaml
  • Generate: true in pubspec.yaml
  • Flutter gen-l10n

Example prompts

  • “/internationalization”

Requirements

  • Pre-approved tools (allowed-tools): Read, Glob, Grep

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Create app_.arb in lib/l10n/arb/ (e.g., app_fr.arb)
  2. Add translations for all keys from the template ARB file
  3. Run flutter gen-l10n
  4. The new locale is automatically available through AppLocalizations.supportedLocales

What it can do on your machine

Read from SKILL.md and the folder at commit 496a3c6. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Glob
    • Grep

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • flutter

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Internationalization loads about 1.6k tokens when it runs, and up to ~3.1k if it reads all its reference files. Until then it costs about 243 tokens; SKILL.md has 537 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~243
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from VeryGoodOpenSource/vgv-ai-flutter-plugin at commit 496a3c6, republished under its MIT licence (© VeryGoodOpenSource). 537 words, ~1,629 tokens.

Download SKILL.mdSave it as .claude/skills/internationalization/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
internationalization
description
Best practices for internationalization (i18n) and localization (l10n) in Flutter, using the built-in `flutter_localizations` and `intl` setup with ARB files as the single source of truth. Use when adding, modifying, or reviewing ARB translations, locale setup (`l10n.yaml`, `generate: true` in `pubspec.yaml`, `flutter gen-l10n`, `localizationsDelegates`, `supportedLocales`), BuildContext l10n extensions such as `context.l10n`, hardcoded user-facing strings that should be localized, localized strings passed into shared or reusable widgets, or RTL/directional layout support with `EdgeInsetsDirectional`. Also use when asked to add or configure any third-party i18n or translation package (easy_localization, slang, flutter_i18n, or intl_utils), and when shipping or fixing a screen for a right-to-left language such as Arabic, Hebrew, Farsi, or Urdu, including mirroring padding, alignment, icons, or images, and replacing `EdgeInsets` left/right.
allowed-tools
Read, Glob, Grep

Internationalization

Internationalization (i18n) and localization (l10n) best practices for Flutter applications using Flutter's built-in localization system with ARB files as the single source of truth.

Core Standards

Apply these standards to all internationalization work:

  • Never hardcode user-facing strings — all text must go through the l10n system
  • Use Flutter's built-in localization system — flutter_localizations + intl, never third-party i18n libraries
  • ARB files are the single source of truth for all translations
  • BuildContext extension for cleaner l10n access — use context.l10n instead of AppLocalizations.of(context)
  • Pass localized strings as parameters to reusable widgets — never couple shared widgets directly to AppLocalizations
  • Use EdgeInsetsDirectional (start/end) instead of EdgeInsets (left/right) — ensures correct layout in RTL languages
  • Handle RTL layout properly — use directional widgets for padding, positioning, and alignment
  • Implement i18n early — even if only one language is planned initially, the overhead is small and the long-term benefit is significant
  • Dart 3.13 primary constructors — on a Dart 3.13+ baseline, declare a reusable widget's localized-string fields as primary-constructor declaring parameters (class const ConfirmDialog({required final String title, super.key}) extends StatelessWidget) rather than this.field; keep the classic form only below 3.13

Setup Pipeline and ARB File Format

Add flutter_localizations and intl as dependencies, enable generate: true in pubspec.yaml, configure l10n.yaml, create ARB files in lib/l10n/arb/, run flutter gen-l10n, and wire up MaterialApp with localizationsDelegates and supportedLocales. ARB files support simple strings, placeholders, and ICU plural syntax.

BuildContext Extension

Create an extension for ergonomic l10n access throughout the codebase:

dart
extension AppLocalizationsX on BuildContext {
  AppLocalizations get l10n => AppLocalizations.of(this);
}

Usage:

dart
// Preferred
Text(context.l10n.helloWorld);

// Avoid
Text(AppLocalizations.of(context).helloWorld);

Reusable Widget Strategy

Shared widgets that live in separate packages should not depend on AppLocalizations directly. Instead, pass localized strings as constructor parameters:

When someone asks to add AppLocalizations to a shared package, decline and say why — the package would carry its own translations and every consuming app would be locked to them — then rewrite their widget with the label as a final String constructor parameter and show the call site supplying context.l10n. Give both as Dart code; describing the change in prose leaves the caller to guess the signature.

dart
// Shared widget — no l10n dependency
class const ConfirmDialog({
  required final String title,
  required final String message,
  required final String confirmLabel,
  required final String cancelLabel,
  super.key,
}) extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return AlertDialog(
      title: Text(title),
      content: Text(message),
      actions: [
        TextButton(onPressed: () => Navigator.pop(context), child: Text(cancelLabel)),
        FilledButton(onPressed: () => Navigator.pop(context, true), child: Text(confirmLabel)),
      ],
    );
  }
}

// App-level usage — passes localized strings
showDialog<bool>(
  context: context,
  builder: (_) => ConfirmDialog(
    title: context.l10n.deleteTitle,
    message: context.l10n.deleteMessage,
    confirmLabel: context.l10n.confirm,
    cancelLabel: context.l10n.cancel,
  ),
);
Show full SKILL.md (211 more words)Show less

Text Directionality

Use EdgeInsetsDirectional (start/end) instead of EdgeInsets (left/right) for all padding and margins. Use directional widget variants (PositionedDirectional, AlignDirectional, BorderDirectional) for RTL-aware layouts. Icons mirror automatically in RTL; images require matchTextDirection: true.

Backend Considerations

Store backend content with per-locale translations and require clients to transmit the user's locale. For error messages, map HTTP status codes or custom backend error constants to l10n keys on the frontend.

Common Patterns

Adding a New Locale
  1. Create app_<locale>.arb in lib/l10n/arb/ (e.g., app_fr.arb)
  2. Add translations for all keys from the template ARB file
  3. Run flutter gen-l10n
  4. The new locale is automatically available through AppLocalizations.supportedLocales
Adding a New String
  1. Add the key-value pair to the template ARB file (app_en.arb)
  2. Add the @key metadata with description and placeholders if needed
  3. Add translations in all other ARB files
  4. Run flutter gen-l10n
  5. Use via context.l10n.newKey
Pluralization
  1. Define the plural string in the template ARB file using ICU message syntax
  2. Provide placeholder metadata with "type": "int"
  3. Add plural forms in all locale ARB files
  4. Use via context.l10n.itemCount(items.length)

Additional Resources

© VeryGoodOpenSource, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (references) in skills/internationalization of VeryGoodOpenSource/vgv-ai-flutter-plugin.

  • SKILL.md
  • agents/openai.yaml
  • references/backend.md
  • references/directionality.md
  • references/setup.md

Open the folder on GitHubat commit 496a3c6

Compare with similar skills

Internationalization next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Internationalization compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Internationalization this skillVeryGoodOpenSource/vgv-ai-flutter-plugin169—~1.6kAutomated safety check: PassMIT
Jaspr Component Fundamentalsrodydavis/signals.dart819—~1.8kAutomated safety check: PassApache-2.0
Localizationyqlay/flclash-tui119—~440Automated safety check: PassGPL-3.0
Flutter InternationalizationMADTeacher/mad-agents-skills110—~1.7kAutomated safety check: PassMIT
Flutter Riverpod State Managementandrewyng/context-hub14k—~1.1kAutomated safety check: PassMIT
Flutter Setup Localizationabdulmominsakib/localmind2611 repos~1.5kAutomated safety check: PassMIT

Similar skills

  • Jaspr Component Fundamentals

    rodydavis/signals.dart

    Teaches the agent Jaspr's Flutter-like component model and typed HTML elements, with strict rules on build methods and helper syntax.

    819 GitHub stars~1.8k tokensUpdated 24 days ago
    Frontend & DesignAuto-check passed
  • Localization

    yqlay/flclash-tui

    A skill your agent uses when changing FlClash UI text, scanning for hardcoded Chinese strings, updating ARB localization, or fixing generated locale output in this repository.

    119 GitHub stars~440 tokensUpdated 2 days ago
    Frontend & DesignAuto-check passed
  • Flutter Internationalization

    MADTeacher/mad-agents-skills

    Add, fix, audit, and maintain Flutter internationalization with gen-l10n, ARB files, AppLocalizations, flutterlocalizations, intl formatting, plural/select messages, RTL support, locale-specific…

    110 GitHub stars~1.7k tokensUpdated 5 mo ago
    Frontend & DesignAuto-check passed
  • Guides Flutter state management with Riverpod: choosing provider types, wiring ConsumerWidgets, handling async state and lifecycle, and overriding providers in tests.

    14k GitHub stars~1.1k tokensUpdated 4 mo ago
    MobileAuto-check passed
  • Flutter Setup Localization

    abdulmominsakib/localmind

    Add flutterlocalizations and intl dependencies, enable "generate true" in pubspec.yaml, and create an l10n.yaml configuration file.

    261 GitHub starsUsed in 1 repo~1.5k tokens
    MobileAuto-check passed
  • Library-agnostic Flutter/Dart code review checklist covering widget best practices, state management patterns (BLoC, Riverpod, Provider, GetX, MobX, Signals), Dart idioms, performance…

    275k GitHub starsUsed in 2 repos~5.8k tokens
    MobileAuto-check: notes

More from VeryGoodOpenSource/vgv-ai-flutter-plugin

All 15 skills in this repo
  • Accessibility

    VeryGoodOpenSource/vgv-ai-flutter-plugin

    Audits or remediates Flutter widgets against WCAG 2.2 conformance levels A, AA, or AAA across iOS, Android, Web, macOS, Windows, and Linux, covering Semantics labels and screen reader output under…

    169 GitHub stars~4.2k tokensUpdated 2 days ago
    Auto-check passed
  • Animations

    VeryGoodOpenSource/vgv-ai-flutter-plugin

    Best practices for Flutter animations using the built-in animation framework, covering implicit animations, explicit AnimationController animations, page transitions, and Material 3 motion tokens.

    169 GitHub stars~3.5k tokensUpdated 2 days ago
    Auto-check passed
  • Bloc

    VeryGoodOpenSource/vgv-ai-flutter-plugin

    Best practices for Bloc state management in Flutter/Dart, covering Cubit versus Bloc, event and state naming, sealed classes with Equatable, the Page/View split with BlocProvider, BlocBuilder…

    169 GitHub stars~2k tokensUpdated 2 days ago
    Auto-check passed
  • Dart Flutter SDK Upgrade

    VeryGoodOpenSource/vgv-ai-flutter-plugin

    VGV-specific reference for bumping Dart and Flutter SDK constraints across packages, covering pubspec.yaml environment constraints, CI workflow Flutter versions, and SDK upgrade PR preparation.

    169 GitHub stars~2.6k tokensUpdated 2 days ago
    Auto-check: notes
  • Layered Architecture

    VeryGoodOpenSource/vgv-ai-flutter-plugin

    VGV layered monorepo architecture in Flutter: four layers Data, Repository, Business Logic, and Presentation, unidirectional dependency rules, and model transformation across layers.

    169 GitHub stars~4.6k tokensUpdated 2 days ago
    Auto-check passed
  • Material Theming

    VeryGoodOpenSource/vgv-ai-flutter-plugin

    Best practices for Flutter theming with Material 3, treating ThemeData as the single source of truth for colors, typography, component styles, and spacing.

    169 GitHub stars~2.3k tokensUpdated 2 days ago
    Auto-check passed

Works with

Questions about Internationalization

What does Internationalization do?

Best practices for internationalization (i18n) and localization (l10n) in Flutter, using the built-in flutterlocalizations and intl setup with ARB files as the single source of truth. Internationalization is an agent skill from VeryGoodOpenSource/vgv-ai-flutter-plugin. Best practices for internationalization (i18n) and localization (l10n) in Flutter, using the built-in flutterlocalizations and intl setup with ARB files as the single source of truth.

When should I use Internationalization?

Internationalization fits situations like: reviewing ARB translations; locale setup (l10n.yaml; generate: true in pubspec.yaml; flutter gen-l10n.

How do I install Internationalization in Claude Code?

Run `npx skills add VeryGoodOpenSource/vgv-ai-flutter-plugin --skill internationalization -a claude-code`. Or copy the skill folder (skills/internationalization in VeryGoodOpenSource/vgv-ai-flutter-plugin) into .claude/skills/internationalization in your project. Claude Code loads it when a task matches its description.

How do I install Internationalization in Codex?

Run `npx skills add VeryGoodOpenSource/vgv-ai-flutter-plugin --skill internationalization -a codex`. Or copy the skill folder (skills/internationalization in VeryGoodOpenSource/vgv-ai-flutter-plugin) into .agents/skills/internationalization in your project. Codex loads it when a task matches its description.

Can I use Internationalization in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add VeryGoodOpenSource/vgv-ai-flutter-plugin --skill internationalization -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/internationalization, .gemini/skills/internationalization, .github/skills/internationalization and .opencode/skills/internationalization in your project.

What does Internationalization need to run?

Going by SKILL.md and its folder, Internationalization needs the command-line tools its instructions call (flutter). Its frontmatter pre-approves these tools: Read, Glob, Grep.

Does Internationalization access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Internationalization safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Internationalization use?

Internationalization is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Internationalization use?

About 1.6k tokens (SKILL.md is roughly 6.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.5k tokens, read only when the agent opens those files.

What are the alternatives to Internationalization?

Skills that share tags, products or a category with Internationalization: Jaspr Component Fundamentals (rodydavis/signals.dart, 819 stars), Localization (yqlay/flclash-tui, 119 stars), Flutter Internationalization (MADTeacher/mad-agents-skills, 110 stars) and Flutter Riverpod State Management (andrewyng/context-hub, 14k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Internationalization?

VeryGoodOpenSource (a GitHub organization) maintains it in VeryGoodOpenSource/vgv-ai-flutter-plugin, which has 169 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 6, 2026.

Source: VeryGoodOpenSource/vgv-ai-flutter-plugin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.