NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #1430 most downloaded on pub.dev
Translation and Internationalization (i18n) for Flutter. Easy to use for both large and small projects. Uses Dart extensions to reduce boilerplate.
Last release 3 days ago
02 Oct 2026
Release timing varies
gaps range from 3 weeks to 7 months
Some releases are documented
notes for 24 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
7 years old
106 releases · first in 2019
Removed useless uses-material-design: true.
uses-material-design: true.Nothing published for this version
Nothing published for this version
One column per quarter.
Plural support for the .PO importer.
.PO importer.Downgraded args: 1.6.0 to be compatible with flutter_driver.
Nothing published for this version
Breaking change: If some translation did not exist in some language, it would show the translation key itself as the missing translation. This worked…
Now allows both string-keys (like 'Hello there'.i18n as shown in the example1 dir)
and identifier-keys (like greetings.i18n as shown in the example2 dir).
Breaking change: If some translation did not exist in some language, it would show the translation key itself as the missing translation. This worked well with string-keys, but not with identifier-keys. Now, if some translation is missing, it first tries to show the untranslated string, and only if that is missing too it shows the key as the translation. This change is unlikely to be noticed by anyone, but still a breaking change.
Breaking change: During app initialization, the system locale may be null for a few moments. During this time, in prior version _2.0.0_ it would use t…
Nullsafety.
Breaking change: During app initialization, the system locale may be null for a few
moments. During this time, in prior version 2.0.0 it would use the Translations
default locale. Now, in version 3.0.0, it will use the global locale defined in
I18n.defaultLocale, which by default is Locale('en', 'US'). You can change this
default in your app's main method.
New Translations.from() constructor, which responds better to hot reload.
Fixed the PO importer to ignore empty keys.
The docs now explain better how to add plurals with translations by locale.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Plural modifiers: zeroOne (for 0 or 1 elements), and oneOrMore (for 1 and more elements).
Plural modifiers: zeroOne (for 0 or 1 elements), and oneOrMore (for 1 and more
elements).
Fix for when no applicable plural modifier is found. It now correctly defaults to the unversioned string.
.PO and .JSON importers contributed by Johann Bauer .
.PO and .JSON importers contributed by <a href="https://github.com/bauerj">Johann
Bauer</a>.Nothing published for this version
* Sprintf version bump to 5.0.0.
Added key and id to I18n widget constructor.
key and id to I18n widget constructor.Nothing published for this version
Better error message for I18n.of.
I18n.of.Bumped sprintf to version 4.1.0, which adds compatibility for future Dart features that require a Dart SDK constraint with a lower bound that is >=2.0
sprintf to version 4.1.0, which adds compatibility for future Dart features
that require a Dart SDK constraint with a lower bound that is >=2.0.0.Allow multi-line statements in getstrings utility.
More plural modifiers: three, four, five, six, and ten.
three, four, five, six, and ten.twoThreeFour plural modifier.* GetStrings exporting utility.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Added fill () method to default.i18n.dart.
Don’t record unnecessary missing translations with the Translation.byLocale constructor.
* Commented unnecessary tests.
Added localizationsDelegates and supportedLocales to the docs.
Breaking change: Accepts Locale ('en", 'US'), but not Locale ('en_US') anymore, which was wrong. See "A quick recap of Dart locales" in the docs, for…
I18n.observeLocale () can be used to observe locale changes.
Breaking change: Accepts Locale ('en", 'US'), but not Locale ('en_US') anymore, which was wrong. See "A quick recap of Dart locales" in the docs, for more details.
* Fill fix. Docs improvement.
* Interpolation.
Nothing published for this version
* Better fallback.
Nothing published for this version
* Default import records keys.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
* First working version.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →