• Handle spaces in ARB files where we didn't handle them before, and where Google translation toolkit is now putting them.


  • Use latest version of ‘analyzer’ and ‘args’ packages.


  • Adds a special locale name “fallback” in verifiedLocale. So if a translation is provided for that locale and has been initialized, anything that doesn't find a closer match will use that locale. This can be used instead of having it default to the text in the original source messages.


  • Adds a DateFormat.parseLoose that accepts mixed case and missing delimiters when parsing dates. It also allows arbitrary amounts of whitespace anywhere that whitespace is expected. So, for example, in en-US locale a yMMMd format would accept “SEP 3 2014”, even though it would generate “Sep 3, 2014”. This is fairly limited, and its reliability in other locales is not known.


  • Update pubspec dependencies to allow analyzer version 23.


  • No user impacting changes. Tighten up a couple method signatures to specify that int is required.


  • Fixes bug with printing a percent or permille format with no fraction part and a number with no integer part. For example, print 0.12 with a format pattern of “#%”. The test for whether there was a printable integer part tested the basic number, so it ignored the integer digits. This was introduced in 0.11.2 when we stopped multiplying the input number in the percent/permille case.


  • Make withLocale and defaultLocale use a zone, so async operations inside withLocale also get the correct locale. Bumping the version as this might be considered breaking, or at least behavior-changing.


  • Number formatting now accepts “int-like” inputs that don‘t have to conform to the num interface. In particular, you can now pass an Int64 from the fixnum package and format it. In addition, this no longer multiplies the result, so it won’t lose precision on a few additional cases in JS.


  • Add a -no-embedded-plurals flag to reject plurals and genders that have either leading or trailing text around them. This follows the ICU recommendation that a plural or gender should contain the entire phrase/sentence, not just part of it.


  • Fix some style glitches with naming. The only publicly visible one is DateFormat.parseUtc, but the parseUTC variant is still retained for backward-compatibility.

  • Provide a better error message when generating translated versions and the name of a variable substitution in the message doesn't match the name in the translation.


  • Fix bug with per-mille parsing (only divided by 100, not 1000)

  • Support percent and per-mille formats with both positive and negative variations. Previously would throw an exception for too many modifiers.


  • Support NumberFormats with two different grouping sizes, e.g. 1,23,45,67,890


  • Moved petitparser into a regular dependency so pub run works.

  • Improved code layout of the package.

  • Added a DateFormat.parseStrict method that rejects DateTimes with invalid values and requires it to be the whole string.


  • Catch analyzer errors and do not generate messages for that file. Previously this would stop the message extraction on syntax errors and not give error messages as good as the compiler would produce. Just let the compiler do it.


  • Change to work with both petitparser 1.1.x and 1.2.x versions.


  • Broaden the pubspec constraints to allow current analyzer versions.


  • Add a --[no]-use-deferred-loading flag to generate_from_arb.dart and generally make the deferred loading of message libraries optional.


  • Missed canonicalization of locales in one place in message library generation.

  • Added a simple debug script for message_extraction_test.


  • Negative numbers were being parsed as positive.



  • Make message catalogs use deferred loading.

  • Update CLDR Data to version 25 for dates and numbers.

  • Update analyzer dependency to allow later versions.

  • Adds workaround for flakiness in DateTime creation, removes debugging code associated with that.


  • Add NumberFormat.parse()

  • Allow NumberFormat constructor to take an optional currency name/symbol, so you can format for a particular locale without it dictating the currency, and also supply the currency symbols which we don't have yet.

  • Canonicalize locales more consistently, avoiding a number of problems if you use a non-canonical form.

  • For locales whose length is longer than 6 change “-” to “_” in position 3 when canonicalizing. Previously anything of length > 6 was left completely alone.


  • Add a “meaning” optional parameter for Intl.message to distinguish between two messages with identical text.

  • Handle two different messages with the same text.

  • Allow complex string literals in arguments (e.g. multi-line)