NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #737 most downloaded on pub.dev
Localization / Internationalization (i18n) solution. Use JSON, YAML, CSV, or ARB files to create typesafe translations via source generation.
Last release 21 days ago
12 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
102 releases · first in 2022
One column per quarter.
fix: handle dynamic keys when fallback_strategy: base_locale is used
fallback_strategy: base_locale is usedfix: handle interpolation when obfuscation is enabled
feat: add obfuscation config to obfuscate translation strings
obfuscation config to obfuscate translation stringsfix: slang analyze with --full should find invocations written in multiple lines
slang analyze with --full should find invocations written in multiple linesfeat: add OUTDATED modifier to flag translations as outdated (slang analyze will treat them as missing)
OUTDATED modifier to flag translations as outdated (slang analyze will treat them as missing)flutter pub run slang outdated my.key.path to flag translations as outdatedslang apply prefers modifiers from base locale over secondary localesfeat: LocaleSettings.useDeviceLocale listens to device locale changes
LocaleSettings.useDeviceLocale listens to device locale changesflutter pub run slang apply only applies changed locales by defaultzh-Hant-TW uses zh-TW instead of zh-HK)feat: generated files from analyze and apply have \n at the end of the file
analyze and apply have \n at the end of the filefeat: mixins generated by the interface feature have == and hashCode overrides
== and hashCode overridesflutter pub run slang apply respects the order in the base locale instead of simply add the new translations to the endflutter pub run slang analyze have --split-missing and --split-unused (in addition to --split) so only one of both can be a single file== and hashCode overridesflutter pub run slang apply now respects the order in the base locale instead of simply add the new translations to the endflutter pub run slang analyze now have --split-missing and --split-unused (in addition to --split) so only one of both can be a single filefix: missing unused translations in secondary locales
feat: add (ignoreMissing) and (ignoreUnused) modifiers which changes the behaviour of flutter pub run slang analyze
(ignoreMissing) and (ignoreUnused) modifiers which changes the behaviour of flutter pub run slang analyzefeat: there is now a default plural resolver so the app keeps working in production when you forgot to define one, you will only see a warning in the
key_map_case should work with (map) modifierfeat: improve interface attribute inference algorithm
lib/gen/<filename> in Flutter environment by default if input is outside of lib/ and no output directory is givenDEPRECATED: LocaleSettings.supportedLocales and LocaleSettings.supportedLocalesRaw
(interface=<Interface>) and (singleInterface=<Interface>) modifiers, a new approach to configure interfaces without touching the config fileAppLocaleUtils.supportedLocales and AppLocaleUtils.supportedLocalesRaw, this API works in locale_handling: falseLocaleSettings.supportedLocales and LocaleSettings.supportedLocalesRawfeat: official web support
Nothing published for this version
feat: RichText supports links inside default translation
flutter pub run slang watch works recursively and does not crash on errorfeat: csv decoding now support both CRLF and LF, " and '
CRLF and LF, " and 'LocaleSettings.setPluralResolver should not throw an assertion errorflutter pub run slang migrate should also work without : in commandfeat: add --locale=<locale> argument to flutter pub run slang apply to only apply a specific locale
--locale=<locale> argument to flutter pub run slang apply to only apply a specific locale--flat argument for flutter pub run slang analyze and apply is no longer availablefix: when namespaces are used, consider more directories (not only parent) for locale detection (e.g. assets/i18n/en-US/pages/home.json )
assets/i18n/en-US/pages/home.json)feat: flutter pub run slang analyze now also checks unused translations (on top of missing translations)
flutter pub run slang analyze now also checks unused translations (on top of missing translations)slang analyze over slang:analyze (and for all other commands); both styles are supported howeverfeat: add command flutter pub run slang:apply to add translations from the slang:analyze result
flutter pub run slang:apply to add translations from the slang:analyze resultisFlatMap parameter when overriding translations correctlyfeat: add command flutter pub run slang:analyze to report missing translations
flutter pub run slang:analyze to report missing translationsAll breaking changes will result in a compile-time error, so don't worry for "hidden" bugs :)
Translation Overrides and Enhanced Modifiers
LocaleSettings.overrideTranslations (checkout updated README)myKey(plural, rich)n; you can revert this by setting pluralization/default_parameter: countapples(param=appleCount)All breaking changes will result in a compile-time error, so don't worry for "hidden" bugs :)
You can read the detailed migration guide here.
New Features:
LocaleSettings.setLocaleTyped and LocaleSettings.currentLocaleTypedBreaking:
output_translate_var renamed to translate_var in build.yaml config fileNothing published for this version
feat: add AppLocaleUtils.parseLocaleParts
AppLocaleUtils.parseLocalePartsLocaleSettings.useDeviceLocale now does not complain of weird locales on Linuxfeat: ignore empty plural / context nodes when fallback_strategy: base_locale is used
fallback_strategy: base_locale is usedcoverage:ignore-file to generated file and ignore every lintfeat: add Russian plural resolver (thanks to @LuckyWins)
braces and double_braces correctlyfix: remove const if rich text has links
const if rich text has linksfeat: render context enum values as is, instead of forcing to camel case
feat: add extension method shorthand (e.g. context.tr.someKey.anotherKey )
context.tr.someKey.anotherKey)LocaleSettings.getLocaleStream to keep track of every locale changeTextSpan instead of InlineSpan for rich textsfix: do not export package:flutter/widgets.dart
package:flutter/widgets.dartfeat: allow external enums for context feature (add generate_enum and imports config)
generate_enum and imports config)default_parameter)fix: add missing fallback for flat map if configured
Bug Fix:
MaterialApp's supportedLocales.feat: use tight version for slang_flutter and slang_build_runner
slang_flutter and slang_build_runnerTranslationProvider should use current localeNew Feature:
supportedLocales property that can be used to fill MaterialApp's supportedLocales argument.feat: locale can be moved from file name to directory name (e.g. i18n/fr/page1_fr.i18n.json to i18n/fr/page1.i18n.json )
i18n/fr/page1_fr.i18n.json to i18n/fr/page1.i18n.json)New config: output_translate_var, renames default t variable
Internal: device locale now fetched via Platform.localeName
feat: add slang.yaml support which has less boilerplate than build.yaml
slang.yaml support which has less boilerplate than build.yamlbuild.yaml to correct packageA rebuild is needed: flutter pub run build_runner build.
Future<void> -> String)void -> String)Just in case you use internal API:
FastI18n.findDeviceLocale has been renamed to FastI18n.getDeviceLocale
Breaking: remove output_file_pattern (was deprecated)
Transition to a federated package structure
slangslang_build_runner, slang_flutter depending on your use caseoutput_file_pattern (was deprecated)flutter_integration: false)Thanks to @fzyzcjy.
You can read the detailed migration guide here.
Thanks to @DenchikBY.
#map mode (deprecated in 1.5.0)Example of new config in build.yaml:
targets:
$default:
builders:
fast_i18n:i18nBuilder:
options:
base_locale: en
input_directory: lib/i18n
input_file_pattern: .i18n.json
output_directory: lib/i18n
output_file_pattern: .g.dart
key_case: snake
maps:
- a
- b
- c.d
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
Your coding agent can read these notes before it upgrades. Set up the MCP server →