Make Date formatting use native digits instead of ascii
I've also changed ACX to not use this for 'ar', similar to what's being done for numbers. Though I note that when using ASCII digits it will still print with RTL markers before the separators, which just comes out looking weird. But it preserves the current behaviour.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172141031
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 031986e..fc3cf52 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,9 @@
* Tweak lookup code to support translated messages as JSON rather than code.
* Update data to CLDR 31.0.1
* Adds locales en_MY, fr_CH, it_CH, and ps.
+ * Use locale digits for printing DateTime. This can also be disabled for a
+ particular locale use useNativeDigitsByDefaultFor or for a particular
+ DateFormat instance use useNativeDigits.
## 0.15.1
* Use the platform.locale API to get the OS platform.
diff --git a/lib/date_symbol_data_local.dart b/lib/date_symbol_data_local.dart
index 5ccbbbd..15cd686 100644
--- a/lib/date_symbol_data_local.dart
+++ b/lib/date_symbol_data_local.dart
@@ -472,6 +472,7 @@
// Date/time formatting symbols for locale ar.
"ar": new DateSymbols(
NAME: "ar",
+ ZERODIGIT: '\u0660',
ERAS: const ['ق.م', 'م'],
ERANAMES: const ['قبل الميلاد', 'ميلادي'],
NARROWMONTHS: const [
@@ -1218,6 +1219,7 @@
// Date/time formatting symbols for locale bn.
"bn": new DateSymbols(
NAME: "bn",
+ ZERODIGIT: '\u09E6',
ERAS: const ['খ্রিস্টপূর্ব', 'খৃষ্টাব্দ'],
ERANAMES: const ['খ্রিস্টপূর্ব', 'খৃষ্টাব্দ'],
NARROWMONTHS: const [
@@ -5693,6 +5695,7 @@
// Date/time formatting symbols for locale fa.
"fa": new DateSymbols(
NAME: "fa",
+ ZERODIGIT: '\u06F0',
ERAS: const ['ق.م.', 'م.'],
ERANAMES: const ['قبل از میلاد', 'میلادی'],
NARROWMONTHS: const [
@@ -11129,6 +11132,7 @@
// Date/time formatting symbols for locale mr.
"mr": new DateSymbols(
NAME: "mr",
+ ZERODIGIT: '\u0966',
ERAS: const ['इ. स. पू.', 'इ. स.'],
ERANAMES: const ['ईसवीसनपूर्व', 'ईसवीसन'],
NARROWMONTHS: const [
@@ -11598,6 +11602,7 @@
// Date/time formatting symbols for locale my.
"my": new DateSymbols(
NAME: "my",
+ ZERODIGIT: '\u1040',
ERAS: const ['ဘီစီ', 'အေဒီ'],
ERANAMES: const ['ခရစ်တော် မပေါ်မီနှစ်', 'ခရစ်နှစ်'],
NARROWMONTHS: const [
@@ -11910,6 +11915,7 @@
// Date/time formatting symbols for locale ne.
"ne": new DateSymbols(
NAME: "ne",
+ ZERODIGIT: '\u0966',
ERAS: const ['ईसा पूर्व', 'सन्'],
ERANAMES: const ['ईसा पूर्व', 'सन्'],
NARROWMONTHS: const [
@@ -12999,6 +13005,7 @@
// Date/time formatting symbols for locale ps.
"ps": new DateSymbols(
NAME: "ps",
+ ZERODIGIT: '\u06F0',
ERAS: const ['له میلاد وړاندې', 'م.'],
ERANAMES: const ['له میلاد څخه وړاندې', 'له میلاد څخه وروسته'],
NARROWMONTHS: const [
diff --git a/lib/date_symbols.dart b/lib/date_symbols.dart
index 073e61f..dca4020 100644
--- a/lib/date_symbols.dart
+++ b/lib/date_symbols.dart
@@ -13,85 +13,128 @@
class DateSymbols {
String NAME;
List<String>
+
/// The short name of the era, e.g. 'BC' or 'AD'
ERAS,
+
/// The long name of the era, e.g. 'Before Christ' or 'Anno Domino'
ERANAMES,
+
/// Very short names of months, e.g. 'J'.
NARROWMONTHS,
+
/// Very short names of months as they would be written on their own,
/// e.g. 'J'.
STANDALONENARROWMONTHS,
+
/// Full names of months, e.g. 'January'.
MONTHS,
+
/// Full names of months as they would be written on their own,
/// e.g. 'January'.
///
/// These are frequently the same as MONTHS, but for example might start
/// with upper case where the names in MONTHS might not.
STANDALONEMONTHS,
+
/// Short names of months, e.g. 'Jan'.
SHORTMONTHS,
+
/// Short names of months as they would be written on their own,
/// e.g. 'Jan'.
STANDALONESHORTMONTHS,
+
/// The days of the week, starting with Sunday.
WEEKDAYS,
+
/// The days of the week as they would be written on their own, starting
/// with Sunday.
/// Frequently the same as WEEKDAYS, but for example might
/// start with upper case where the names in WEEKDAYS might not.
STANDALONEWEEKDAYS,
+
/// Short names for days of the week, starting with Sunday, e.g. 'Sun'.
SHORTWEEKDAYS,
+
/// Short names for days of the week as they would be written on their
/// own, starting with Sunday, e.g. 'Sun'.
STANDALONESHORTWEEKDAYS,
+
/// Very short names for days of the week, starting with Sunday, e.g. 'S'.
NARROWWEEKDAYS,
+
/// Very short names for days of the week as they would be written on
/// their own, starting with Sunday, e.g. 'S'.
STANDALONENARROWWEEKDAYS,
+
/// Names of the quarters of the year in a short form, e.g. 'Q1'.
SHORTQUARTERS,
+
/// Long names of the quartesr of the year, e.g. '1st Quarter'.
QUARTERS,
+
/// A list of length 2 with localized text for 'AM' and 'PM'.
AMPMS,
+
/// The supported date formats for this locale.
DATEFORMATS,
+
/// The supported time formats for this locale.
TIMEFORMATS,
+
/// The ways date and time formats can be combined for this locale.
DATETIMEFORMATS;
Map<String, String> AVAILABLEFORMATS;
+
/// The first day of the week, in ISO 8601 style, where the first day of the
/// week, i.e. index 0, is Monday.
int FIRSTDAYOFWEEK;
+
/// Which days are weekend days, integers where 0=Monday.
///
/// For example, [5, 6] to mean Saturday and Sunday are weekend days.
List<int> WEEKENDRANGE;
int FIRSTWEEKCUTOFFDAY;
- DateSymbols({this.NAME, this.ERAS, this.ERANAMES, this.NARROWMONTHS,
- this.STANDALONENARROWMONTHS, this.MONTHS, this.STANDALONEMONTHS,
- this.SHORTMONTHS, this.STANDALONESHORTMONTHS, this.WEEKDAYS,
- this.STANDALONEWEEKDAYS, this.SHORTWEEKDAYS, this.STANDALONESHORTWEEKDAYS,
- this.NARROWWEEKDAYS, this.STANDALONENARROWWEEKDAYS, this.SHORTQUARTERS,
- this.QUARTERS, this.AMPMS,
+ String ZERODIGIT;
+
+ DateSymbols(
+ {this.NAME,
+ this.ERAS,
+ this.ERANAMES,
+ this.NARROWMONTHS,
+ this.STANDALONENARROWMONTHS,
+ this.MONTHS,
+ this.STANDALONEMONTHS,
+ this.SHORTMONTHS,
+ this.STANDALONESHORTMONTHS,
+ this.WEEKDAYS,
+ this.STANDALONEWEEKDAYS,
+ this.SHORTWEEKDAYS,
+ this.STANDALONESHORTWEEKDAYS,
+ this.NARROWWEEKDAYS,
+ this.STANDALONENARROWWEEKDAYS,
+ this.SHORTQUARTERS,
+ this.QUARTERS,
+ this.AMPMS,
+ this.ZERODIGIT,
// TODO(alanknight): These formats are taken from Closure,
// where there's only a fixed set of available formats.
// Here we have the patterns separately. These should
// either be used, or removed.
- this.DATEFORMATS, this.TIMEFORMATS, this.AVAILABLEFORMATS,
- this.FIRSTDAYOFWEEK, this.WEEKENDRANGE, this.FIRSTWEEKCUTOFFDAY,
+ this.DATEFORMATS,
+ this.TIMEFORMATS,
+ this.AVAILABLEFORMATS,
+ this.FIRSTDAYOFWEEK,
+ this.WEEKENDRANGE,
+ this.FIRSTWEEKCUTOFFDAY,
this.DATETIMEFORMATS});
// TODO(alanknight): Replace this with use of a more general serialization
// facility once one is available. Issue 4926.
DateSymbols.deserializeFromMap(Map map) {
- List<String> _getStringList(String name) => new List<String>.from(map[name]);
+ List<String> _getStringList(String name) =>
+ new List<String>.from(map[name]);
NAME = map["NAME"];
ERAS = _getStringList("ERAS");
ERANAMES = _getStringList("ERANAMES");
@@ -110,42 +153,54 @@
SHORTQUARTERS = _getStringList("SHORTQUARTERS");
QUARTERS = _getStringList("QUARTERS");
AMPMS = _getStringList("AMPMS");
+ ZERODIGIT = map["ZERODIGIT"];
DATEFORMATS = _getStringList("DATEFORMATS");
TIMEFORMATS = _getStringList("TIMEFORMATS");
- AVAILABLEFORMATS = new Map<String, String>.from(map["AVAILABLEFORMATS"] ?? {});
+ AVAILABLEFORMATS =
+ new Map<String, String>.from(map["AVAILABLEFORMATS"] ?? {});
FIRSTDAYOFWEEK = map["FIRSTDAYOFWEEK"];
WEEKENDRANGE = new List<int>.from(map["WEEKENDRANGE"]);
FIRSTWEEKCUTOFFDAY = map["FIRSTWEEKCUTOFFDAY"];
DATETIMEFORMATS = _getStringList("DATETIMEFORMATS");
}
- Map serializeToMap() => {
- "NAME": NAME,
- "ERAS": ERAS,
- "ERANAMES": ERANAMES,
- "NARROWMONTHS": NARROWMONTHS,
- "STANDALONENARROWMONTHS": STANDALONENARROWMONTHS,
- "MONTHS": MONTHS,
- "STANDALONEMONTHS": STANDALONEMONTHS,
- "SHORTMONTHS": SHORTMONTHS,
- "STANDALONESHORTMONTHS": STANDALONESHORTMONTHS,
- "WEEKDAYS": WEEKDAYS,
- "STANDALONEWEEKDAYS": STANDALONEWEEKDAYS,
- "SHORTWEEKDAYS": SHORTWEEKDAYS,
- "STANDALONESHORTWEEKDAYS": STANDALONESHORTWEEKDAYS,
- "NARROWWEEKDAYS": NARROWWEEKDAYS,
- "STANDALONENARROWWEEKDAYS": STANDALONENARROWWEEKDAYS,
- "SHORTQUARTERS": SHORTQUARTERS,
- "QUARTERS": QUARTERS,
- "AMPMS": AMPMS,
- "DATEFORMATS": DATEFORMATS,
- "TIMEFORMATS": TIMEFORMATS,
- "AVAILABLEFORMATS": AVAILABLEFORMATS,
- "FIRSTDAYOFWEEK": FIRSTDAYOFWEEK,
- "WEEKENDRANGE": WEEKENDRANGE,
- "FIRSTWEEKCUTOFFDAY": FIRSTWEEKCUTOFFDAY,
- "DATETIMEFORMATS": DATETIMEFORMATS,
- };
+ Map serializeToMap() {
+ // Don't write default ZERODIGIT, conserves space, but also minimize file
+ // churn.
+ var basicMap = _serializeToMap();
+ if (ZERODIGIT != null && ZERODIGIT != '') {
+ basicMap["ZERODIGIT"] = ZERODIGIT;
+ }
+ return basicMap;
+ }
+
+ Map _serializeToMap() => {
+ "NAME": NAME,
+ "ERAS": ERAS,
+ "ERANAMES": ERANAMES,
+ "NARROWMONTHS": NARROWMONTHS,
+ "STANDALONENARROWMONTHS": STANDALONENARROWMONTHS,
+ "MONTHS": MONTHS,
+ "STANDALONEMONTHS": STANDALONEMONTHS,
+ "SHORTMONTHS": SHORTMONTHS,
+ "STANDALONESHORTMONTHS": STANDALONESHORTMONTHS,
+ "WEEKDAYS": WEEKDAYS,
+ "STANDALONEWEEKDAYS": STANDALONEWEEKDAYS,
+ "SHORTWEEKDAYS": SHORTWEEKDAYS,
+ "STANDALONESHORTWEEKDAYS": STANDALONESHORTWEEKDAYS,
+ "NARROWWEEKDAYS": NARROWWEEKDAYS,
+ "STANDALONENARROWWEEKDAYS": STANDALONENARROWWEEKDAYS,
+ "SHORTQUARTERS": SHORTQUARTERS,
+ "QUARTERS": QUARTERS,
+ "AMPMS": AMPMS,
+ "DATEFORMATS": DATEFORMATS,
+ "TIMEFORMATS": TIMEFORMATS,
+ "AVAILABLEFORMATS": AVAILABLEFORMATS,
+ "FIRSTDAYOFWEEK": FIRSTDAYOFWEEK,
+ "WEEKENDRANGE": WEEKENDRANGE,
+ "FIRSTWEEKCUTOFFDAY": FIRSTWEEKCUTOFFDAY,
+ "DATETIMEFORMATS": DATETIMEFORMATS,
+ };
toString() => NAME;
}
@@ -157,126 +212,126 @@
ERAS: const ['BC', 'AD'],
ERANAMES: const ['Before Christ', 'Anno Domini'],
NARROWMONTHS: const [
- 'J',
- 'F',
- 'M',
- 'A',
- 'M',
- 'J',
- 'J',
- 'A',
- 'S',
- 'O',
- 'N',
- 'D'
-],
+ 'J',
+ 'F',
+ 'M',
+ 'A',
+ 'M',
+ 'J',
+ 'J',
+ 'A',
+ 'S',
+ 'O',
+ 'N',
+ 'D'
+ ],
STANDALONENARROWMONTHS: const [
- 'J',
- 'F',
- 'M',
- 'A',
- 'M',
- 'J',
- 'J',
- 'A',
- 'S',
- 'O',
- 'N',
- 'D'
-],
+ 'J',
+ 'F',
+ 'M',
+ 'A',
+ 'M',
+ 'J',
+ 'J',
+ 'A',
+ 'S',
+ 'O',
+ 'N',
+ 'D'
+ ],
MONTHS: const [
- 'January',
- 'February',
- 'March',
- 'April',
- 'May',
- 'June',
- 'July',
- 'August',
- 'September',
- 'October',
- 'November',
- 'December'
-],
+ 'January',
+ 'February',
+ 'March',
+ 'April',
+ 'May',
+ 'June',
+ 'July',
+ 'August',
+ 'September',
+ 'October',
+ 'November',
+ 'December'
+ ],
STANDALONEMONTHS: const [
- 'January',
- 'February',
- 'March',
- 'April',
- 'May',
- 'June',
- 'July',
- 'August',
- 'September',
- 'October',
- 'November',
- 'December'
-],
+ 'January',
+ 'February',
+ 'March',
+ 'April',
+ 'May',
+ 'June',
+ 'July',
+ 'August',
+ 'September',
+ 'October',
+ 'November',
+ 'December'
+ ],
SHORTMONTHS: const [
- 'Jan',
- 'Feb',
- 'Mar',
- 'Apr',
- 'May',
- 'Jun',
- 'Jul',
- 'Aug',
- 'Sep',
- 'Oct',
- 'Nov',
- 'Dec'
-],
+ 'Jan',
+ 'Feb',
+ 'Mar',
+ 'Apr',
+ 'May',
+ 'Jun',
+ 'Jul',
+ 'Aug',
+ 'Sep',
+ 'Oct',
+ 'Nov',
+ 'Dec'
+ ],
STANDALONESHORTMONTHS: const [
- 'Jan',
- 'Feb',
- 'Mar',
- 'Apr',
- 'May',
- 'Jun',
- 'Jul',
- 'Aug',
- 'Sep',
- 'Oct',
- 'Nov',
- 'Dec'
-],
+ 'Jan',
+ 'Feb',
+ 'Mar',
+ 'Apr',
+ 'May',
+ 'Jun',
+ 'Jul',
+ 'Aug',
+ 'Sep',
+ 'Oct',
+ 'Nov',
+ 'Dec'
+ ],
WEEKDAYS: const [
- 'Sunday',
- 'Monday',
- 'Tuesday',
- 'Wednesday',
- 'Thursday',
- 'Friday',
- 'Saturday'
-],
+ 'Sunday',
+ 'Monday',
+ 'Tuesday',
+ 'Wednesday',
+ 'Thursday',
+ 'Friday',
+ 'Saturday'
+ ],
STANDALONEWEEKDAYS: const [
- 'Sunday',
- 'Monday',
- 'Tuesday',
- 'Wednesday',
- 'Thursday',
- 'Friday',
- 'Saturday'
-],
+ 'Sunday',
+ 'Monday',
+ 'Tuesday',
+ 'Wednesday',
+ 'Thursday',
+ 'Friday',
+ 'Saturday'
+ ],
SHORTWEEKDAYS: const ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
STANDALONESHORTWEEKDAYS: const [
- 'Sun',
- 'Mon',
- 'Tue',
- 'Wed',
- 'Thu',
- 'Fri',
- 'Sat'
-],
+ 'Sun',
+ 'Mon',
+ 'Tue',
+ 'Wed',
+ 'Thu',
+ 'Fri',
+ 'Sat'
+ ],
NARROWWEEKDAYS: const ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
STANDALONENARROWWEEKDAYS: const ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
SHORTQUARTERS: const ['Q1', 'Q2', 'Q3', 'Q4'],
QUARTERS: const [
- '1st quarter',
- '2nd quarter',
- '3rd quarter',
- '4th quarter'
-],
+ '1st quarter',
+ '2nd quarter',
+ '3rd quarter',
+ '4th quarter'
+ ],
AMPMS: const ['AM', 'PM'],
DATEFORMATS: const ['EEEE, MMMM d, y', 'MMMM d, y', 'MMM d, y', 'M/d/yy'],
TIMEFORMATS: const ['h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a'],
@@ -284,11 +339,11 @@
WEEKENDRANGE: const [5, 6],
FIRSTWEEKCUTOFFDAY: 5,
DATETIMEFORMATS: const [
- '{1} \'at\' {0}',
- '{1} \'at\' {0}',
- '{1}, {0}',
- '{1}, {0}'
-]);
+ '{1} \'at\' {0}',
+ '{1} \'at\' {0}',
+ '{1}, {0}',
+ '{1}, {0}'
+ ]);
var en_USPatterns = const {
'd': 'd', // DAY
diff --git a/lib/src/data/dates/symbols/ar.json b/lib/src/data/dates/symbols/ar.json
index 7fd827f..af0a599 100644
--- a/lib/src/data/dates/symbols/ar.json
+++ b/lib/src/data/dates/symbols/ar.json
@@ -1 +1 @@
-{"NAME":"ar","ERAS":["ق.م","م"],"ERANAMES":["قبل الميلاد","ميلادي"],"NARROWMONTHS":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"STANDALONENARROWMONTHS":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"MONTHS":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"STANDALONEMONTHS":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"SHORTMONTHS":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"STANDALONESHORTMONTHS":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"WEEKDAYS":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"STANDALONEWEEKDAYS":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"SHORTWEEKDAYS":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"STANDALONESHORTWEEKDAYS":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"NARROWWEEKDAYS":["ح","ن","ث","ر","خ","ج","س"],"STANDALONENARROWWEEKDAYS":["ح","ن","ث","ر","خ","ج","س"],"SHORTQUARTERS":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"QUARTERS":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"AMPMS":["ص","م"],"DATEFORMATS":["EEEE، d MMMM، y","d MMMM، y","dd/MM/y","d/M/y"],"TIMEFORMATS":["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":5,"WEEKENDRANGE":[4,5],"FIRSTWEEKCUTOFFDAY":4,"DATETIMEFORMATS":["{1} {0}","{1} {0}","{1} {0}","{1} {0}"]}
\ No newline at end of file
+{"NAME":"ar","ERAS":["ق.م","م"],"ERANAMES":["قبل الميلاد","ميلادي"],"NARROWMONTHS":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"STANDALONENARROWMONTHS":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"MONTHS":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"STANDALONEMONTHS":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"SHORTMONTHS":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"STANDALONESHORTMONTHS":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"WEEKDAYS":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"STANDALONEWEEKDAYS":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"SHORTWEEKDAYS":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"STANDALONESHORTWEEKDAYS":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"NARROWWEEKDAYS":["ح","ن","ث","ر","خ","ج","س"],"STANDALONENARROWWEEKDAYS":["ح","ن","ث","ر","خ","ج","س"],"SHORTQUARTERS":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"QUARTERS":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"AMPMS":["ص","م"],"DATEFORMATS":["EEEE، d MMMM، y","d MMMM، y","dd/MM/y","d/M/y"],"TIMEFORMATS":["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":5,"WEEKENDRANGE":[4,5],"FIRSTWEEKCUTOFFDAY":4,"DATETIMEFORMATS":["{1} {0}","{1} {0}","{1} {0}","{1} {0}"],"ZERODIGIT":"٠"}
\ No newline at end of file
diff --git a/lib/src/data/dates/symbols/bn.json b/lib/src/data/dates/symbols/bn.json
index 23beb4d..95f90c2 100644
--- a/lib/src/data/dates/symbols/bn.json
+++ b/lib/src/data/dates/symbols/bn.json
@@ -1 +1 @@
-{"NAME":"bn","ERAS":["খ্রিস্টপূর্ব","খৃষ্টাব্দ"],"ERANAMES":["খ্রিস্টপূর্ব","খৃষ্টাব্দ"],"NARROWMONTHS":["জা","ফে","মা","এ","মে","জুন","জু","আ","সে","অ","ন","ডি"],"STANDALONENARROWMONTHS":["জা","ফে","মা","এ","মে","জুন","জু","আ","সে","অ","ন","ডি"],"MONTHS":["জানুয়ারী","ফেব্রুয়ারী","মার্চ","এপ্রিল","মে","জুন","জুলাই","আগস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],"STANDALONEMONTHS":["জানুয়ারী","ফেব্রুয়ারী","মার্চ","এপ্রিল","মে","জুন","জুলাই","আগস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],"SHORTMONTHS":["জানু","ফেব","মার্চ","এপ্রিল","মে","জুন","জুলাই","আগস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],"STANDALONESHORTMONTHS":["জানুয়ারী","ফেব্রুয়ারী","মার্চ","এপ্রিল","মে","জুন","জুলাই","আগস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],"WEEKDAYS":["রবিবার","সোমবার","মঙ্গলবার","বুধবার","বৃহস্পতিবার","শুক্রবার","শনিবার"],"STANDALONEWEEKDAYS":["রবিবার","সোমবার","মঙ্গলবার","বুধবার","বৃহষ্পতিবার","শুক্রবার","শনিবার"],"SHORTWEEKDAYS":["রবি","সোম","মঙ্গল","বুধ","বৃহস্পতি","শুক্র","শনি"],"STANDALONESHORTWEEKDAYS":["রবি","সোম","মঙ্গল","বুধ","বৃহস্পতি","শুক্র","শনি"],"NARROWWEEKDAYS":["র","সো","ম","বু","বৃ","শু","শ"],"STANDALONENARROWWEEKDAYS":["র","সো","ম","বু","বৃ","শু","শ"],"SHORTQUARTERS":["Q1","Q2","Q3","Q4"],"QUARTERS":["ত্রৈমাসিক","দ্বিতীয় ত্রৈমাসিক","তৃতীয় ত্রৈমাসিক","চতুর্থ ত্রৈমাসিক"],"AMPMS":["AM","PM"],"DATEFORMATS":["EEEE, d MMMM, y","d MMMM, y","d MMM, y","d/M/yy"],"TIMEFORMATS":["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":4,"WEEKENDRANGE":[5,6],"FIRSTWEEKCUTOFFDAY":3,"DATETIMEFORMATS":["{1} {0}","{1} {0}","{1} {0}","{1} {0}"]}
\ No newline at end of file
+{"NAME":"bn","ERAS":["খ্রিস্টপূর্ব","খৃষ্টাব্দ"],"ERANAMES":["খ্রিস্টপূর্ব","খৃষ্টাব্দ"],"NARROWMONTHS":["জা","ফে","মা","এ","মে","জুন","জু","আ","সে","অ","ন","ডি"],"STANDALONENARROWMONTHS":["জা","ফে","মা","এ","মে","জুন","জু","আ","সে","অ","ন","ডি"],"MONTHS":["জানুয়ারী","ফেব্রুয়ারী","মার্চ","এপ্রিল","মে","জুন","জুলাই","আগস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],"STANDALONEMONTHS":["জানুয়ারী","ফেব্রুয়ারী","মার্চ","এপ্রিল","মে","জুন","জুলাই","আগস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],"SHORTMONTHS":["জানু","ফেব","মার্চ","এপ্রিল","মে","জুন","জুলাই","আগস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],"STANDALONESHORTMONTHS":["জানুয়ারী","ফেব্রুয়ারী","মার্চ","এপ্রিল","মে","জুন","জুলাই","আগস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],"WEEKDAYS":["রবিবার","সোমবার","মঙ্গলবার","বুধবার","বৃহস্পতিবার","শুক্রবার","শনিবার"],"STANDALONEWEEKDAYS":["রবিবার","সোমবার","মঙ্গলবার","বুধবার","বৃহষ্পতিবার","শুক্রবার","শনিবার"],"SHORTWEEKDAYS":["রবি","সোম","মঙ্গল","বুধ","বৃহস্পতি","শুক্র","শনি"],"STANDALONESHORTWEEKDAYS":["রবি","সোম","মঙ্গল","বুধ","বৃহস্পতি","শুক্র","শনি"],"NARROWWEEKDAYS":["র","সো","ম","বু","বৃ","শু","শ"],"STANDALONENARROWWEEKDAYS":["র","সো","ম","বু","বৃ","শু","শ"],"SHORTQUARTERS":["Q1","Q2","Q3","Q4"],"QUARTERS":["ত্রৈমাসিক","দ্বিতীয় ত্রৈমাসিক","তৃতীয় ত্রৈমাসিক","চতুর্থ ত্রৈমাসিক"],"AMPMS":["AM","PM"],"DATEFORMATS":["EEEE, d MMMM, y","d MMMM, y","d MMM, y","d/M/yy"],"TIMEFORMATS":["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":4,"WEEKENDRANGE":[5,6],"FIRSTWEEKCUTOFFDAY":3,"DATETIMEFORMATS":["{1} {0}","{1} {0}","{1} {0}","{1} {0}"],"ZERODIGIT":"০"}
\ No newline at end of file
diff --git a/lib/src/data/dates/symbols/fa.json b/lib/src/data/dates/symbols/fa.json
index fbf3b0e..b8a4a5d 100644
--- a/lib/src/data/dates/symbols/fa.json
+++ b/lib/src/data/dates/symbols/fa.json
@@ -1 +1 @@
-{"NAME":"fa","ERAS":["ق.م.","م."],"ERANAMES":["قبل از میلاد","میلادی"],"NARROWMONTHS":["ژ","ف","م","آ","م","ژ","ژ","ا","س","ا","ن","د"],"STANDALONENARROWMONTHS":["ژ","ف","م","آ","م","ژ","ژ","ا","س","ا","ن","د"],"MONTHS":["ژانویهٔ","فوریهٔ","مارس","آوریل","مهٔ","ژوئن","ژوئیهٔ","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],"STANDALONEMONTHS":["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],"SHORTMONTHS":["ژانویهٔ","فوریهٔ","مارس","آوریل","مهٔ","ژوئن","ژوئیهٔ","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],"STANDALONESHORTMONTHS":["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],"WEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"STANDALONEWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"SHORTWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"STANDALONESHORTWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"NARROWWEEKDAYS":["ی","د","س","چ","پ","ج","ش"],"STANDALONENARROWWEEKDAYS":["ی","د","س","چ","پ","ج","ش"],"SHORTQUARTERS":["سم۱","سم۲","سم۳","سم۴"],"QUARTERS":["سهماههٔ اول","سهماههٔ دوم","سهماههٔ سوم","سهماههٔ چهارم"],"AMPMS":["قبلازظهر","بعدازظهر"],"DATEFORMATS":["EEEE d MMMM y","d MMMM y","d MMM y","y/M/d"],"TIMEFORMATS":["H:mm:ss (zzzz)","H:mm:ss (z)","H:mm:ss","H:mm"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":5,"WEEKENDRANGE":[4,4],"FIRSTWEEKCUTOFFDAY":4,"DATETIMEFORMATS":["{1}، ساعت {0}","{1}، ساعت {0}","{1}، {0}","{1}، {0}"]}
\ No newline at end of file
+{"NAME":"fa","ERAS":["ق.م.","م."],"ERANAMES":["قبل از میلاد","میلادی"],"NARROWMONTHS":["ژ","ف","م","آ","م","ژ","ژ","ا","س","ا","ن","د"],"STANDALONENARROWMONTHS":["ژ","ف","م","آ","م","ژ","ژ","ا","س","ا","ن","د"],"MONTHS":["ژانویهٔ","فوریهٔ","مارس","آوریل","مهٔ","ژوئن","ژوئیهٔ","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],"STANDALONEMONTHS":["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],"SHORTMONTHS":["ژانویهٔ","فوریهٔ","مارس","آوریل","مهٔ","ژوئن","ژوئیهٔ","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],"STANDALONESHORTMONTHS":["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],"WEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"STANDALONEWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"SHORTWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"STANDALONESHORTWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"NARROWWEEKDAYS":["ی","د","س","چ","پ","ج","ش"],"STANDALONENARROWWEEKDAYS":["ی","د","س","چ","پ","ج","ش"],"SHORTQUARTERS":["سم۱","سم۲","سم۳","سم۴"],"QUARTERS":["سهماههٔ اول","سهماههٔ دوم","سهماههٔ سوم","سهماههٔ چهارم"],"AMPMS":["قبلازظهر","بعدازظهر"],"DATEFORMATS":["EEEE d MMMM y","d MMMM y","d MMM y","y/M/d"],"TIMEFORMATS":["H:mm:ss (zzzz)","H:mm:ss (z)","H:mm:ss","H:mm"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":5,"WEEKENDRANGE":[4,4],"FIRSTWEEKCUTOFFDAY":4,"DATETIMEFORMATS":["{1}، ساعت {0}","{1}، ساعت {0}","{1}، {0}","{1}، {0}"],"ZERODIGIT":"۰"}
\ No newline at end of file
diff --git a/lib/src/data/dates/symbols/mr.json b/lib/src/data/dates/symbols/mr.json
index 51dd9da..91ccfba 100644
--- a/lib/src/data/dates/symbols/mr.json
+++ b/lib/src/data/dates/symbols/mr.json
@@ -1 +1 @@
-{"NAME":"mr","ERAS":["इ. स. पू.","इ. स."],"ERANAMES":["ईसवीसनपूर्व","ईसवीसन"],"NARROWMONTHS":["जा","फे","मा","ए","मे","जू","जु","ऑ","स","ऑ","नो","डि"],"STANDALONENARROWMONTHS":["जा","फे","मा","ए","मे","जू","जु","ऑ","स","ऑ","नो","डि"],"MONTHS":["जानेवारी","फेब्रुवारी","मार्च","एप्रिल","मे","जून","जुलै","ऑगस्ट","सप्टेंबर","ऑक्टोबर","नोव्हेंबर","डिसेंबर"],"STANDALONEMONTHS":["जानेवारी","फेब्रुवारी","मार्च","एप्रिल","मे","जून","जुलै","ऑगस्ट","सप्टेंबर","ऑक्टोबर","नोव्हेंबर","डिसेंबर"],"SHORTMONTHS":["जाने","फेब्रु","मार्च","एप्रि","मे","जून","जुलै","ऑग","सप्टें","ऑक्टो","नोव्हें","डिसें"],"STANDALONESHORTMONTHS":["जाने","फेब्रु","मार्च","एप्रि","मे","जून","जुलै","ऑग","सप्टें","ऑक्टो","नोव्हें","डिसें"],"WEEKDAYS":["रविवार","सोमवार","मंगळवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],"STANDALONEWEEKDAYS":["रविवार","सोमवार","मंगळवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],"SHORTWEEKDAYS":["रवि","सोम","मंगळ","बुध","गुरु","शुक्र","शनि"],"STANDALONESHORTWEEKDAYS":["रवि","सोम","मंगळ","बुध","गुरु","शुक्र","शनि"],"NARROWWEEKDAYS":["र","सो","मं","बु","गु","शु","श"],"STANDALONENARROWWEEKDAYS":["र","सो","मं","बु","गु","शु","श"],"SHORTQUARTERS":["ति१","ति२","ति३","ति४"],"QUARTERS":["प्रथम तिमाही","द्वितीय तिमाही","तृतीय तिमाही","चतुर्थ तिमाही"],"AMPMS":["म.पू.","म.उ."],"DATEFORMATS":["EEEE, d MMMM, y","d MMMM, y","d MMM, y","d/M/yy"],"TIMEFORMATS":["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":6,"WEEKENDRANGE":[6,6],"FIRSTWEEKCUTOFFDAY":5,"DATETIMEFORMATS":["{1} रोजी {0}","{1} रोजी {0}","{1}, {0}","{1}, {0}"]}
\ No newline at end of file
+{"NAME":"mr","ERAS":["इ. स. पू.","इ. स."],"ERANAMES":["ईसवीसनपूर्व","ईसवीसन"],"NARROWMONTHS":["जा","फे","मा","ए","मे","जू","जु","ऑ","स","ऑ","नो","डि"],"STANDALONENARROWMONTHS":["जा","फे","मा","ए","मे","जू","जु","ऑ","स","ऑ","नो","डि"],"MONTHS":["जानेवारी","फेब्रुवारी","मार्च","एप्रिल","मे","जून","जुलै","ऑगस्ट","सप्टेंबर","ऑक्टोबर","नोव्हेंबर","डिसेंबर"],"STANDALONEMONTHS":["जानेवारी","फेब्रुवारी","मार्च","एप्रिल","मे","जून","जुलै","ऑगस्ट","सप्टेंबर","ऑक्टोबर","नोव्हेंबर","डिसेंबर"],"SHORTMONTHS":["जाने","फेब्रु","मार्च","एप्रि","मे","जून","जुलै","ऑग","सप्टें","ऑक्टो","नोव्हें","डिसें"],"STANDALONESHORTMONTHS":["जाने","फेब्रु","मार्च","एप्रि","मे","जून","जुलै","ऑग","सप्टें","ऑक्टो","नोव्हें","डिसें"],"WEEKDAYS":["रविवार","सोमवार","मंगळवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],"STANDALONEWEEKDAYS":["रविवार","सोमवार","मंगळवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],"SHORTWEEKDAYS":["रवि","सोम","मंगळ","बुध","गुरु","शुक्र","शनि"],"STANDALONESHORTWEEKDAYS":["रवि","सोम","मंगळ","बुध","गुरु","शुक्र","शनि"],"NARROWWEEKDAYS":["र","सो","मं","बु","गु","शु","श"],"STANDALONENARROWWEEKDAYS":["र","सो","मं","बु","गु","शु","श"],"SHORTQUARTERS":["ति१","ति२","ति३","ति४"],"QUARTERS":["प्रथम तिमाही","द्वितीय तिमाही","तृतीय तिमाही","चतुर्थ तिमाही"],"AMPMS":["म.पू.","म.उ."],"DATEFORMATS":["EEEE, d MMMM, y","d MMMM, y","d MMM, y","d/M/yy"],"TIMEFORMATS":["h:mm:ss a zzzz","h:mm:ss a z","h:mm:ss a","h:mm a"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":6,"WEEKENDRANGE":[6,6],"FIRSTWEEKCUTOFFDAY":5,"DATETIMEFORMATS":["{1} रोजी {0}","{1} रोजी {0}","{1}, {0}","{1}, {0}"],"ZERODIGIT":"०"}
\ No newline at end of file
diff --git a/lib/src/data/dates/symbols/my.json b/lib/src/data/dates/symbols/my.json
index ba54355..6967b2b 100644
--- a/lib/src/data/dates/symbols/my.json
+++ b/lib/src/data/dates/symbols/my.json
@@ -1 +1 @@
-{"NAME":"my","ERAS":["ဘီစီ","အေဒီ"],"ERANAMES":["ခရစ်တော် မပေါ်မီနှစ်","ခရစ်နှစ်"],"NARROWMONTHS":["ဇ","ဖ","မ","ဧ","မ","ဇ","ဇ","ဩ","စ","အ","န","ဒ"],"STANDALONENARROWMONTHS":["ဇ","ဖ","မ","ဧ","မ","ဇ","ဇ","ဩ","စ","အ","န","ဒ"],"MONTHS":["ဇန်နဝါရီ","ဖေဖော်ဝါရီ","မတ်","ဧပြီ","မေ","ဇွန်","ဇူလိုင်","ဩဂုတ်","စက်တင်ဘာ","အောက်တိုဘာ","နိုဝင်ဘာ","ဒီဇင်ဘာ"],"STANDALONEMONTHS":["ဇန်နဝါရီ","ဖေဖော်ဝါရီ","မတ်","ဧပြီ","မေ","ဇွန်","ဇူလိုင်","ဩဂုတ်","စက်တင်ဘာ","အောက်တိုဘာ","နိုဝင်ဘာ","ဒီဇင်ဘာ"],"SHORTMONTHS":["ဇန်","ဖေ","မတ်","ဧ","မေ","ဇွန်","ဇူ","ဩ","စက်","အောက်","နို","ဒီ"],"STANDALONESHORTMONTHS":["ဇန်","ဖေ","မတ်","ဧ","မေ","ဇွန်","ဇူ","ဩ","စက်","အောက်","နို","ဒီ"],"WEEKDAYS":["တနင်္ဂနွေ","တနင်္လာ","အင်္ဂါ","ဗုဒ္ဓဟူး","ကြာသပတေး","သောကြာ","စနေ"],"STANDALONEWEEKDAYS":["တနင်္ဂနွေ","တနင်္လာ","အင်္ဂါ","ဗုဒ္ဓဟူး","ကြာသပတေး","သောကြာ","စနေ"],"SHORTWEEKDAYS":["တနင်္ဂနွေ","တနင်္လာ","အင်္ဂါ","ဗုဒ္ဓဟူး","ကြာသပတေး","သောကြာ","စနေ"],"STANDALONESHORTWEEKDAYS":["တနင်္ဂနွေ","တနင်္လာ","အင်္ဂါ","ဗုဒ္ဓဟူး","ကြာသပတေး","သောကြာ","စနေ"],"NARROWWEEKDAYS":["တ","တ","အ","ဗ","က","သ","စ"],"STANDALONENARROWWEEKDAYS":["တ","တ","အ","ဗ","က","သ","စ"],"SHORTQUARTERS":["ပထမ သုံးလပတ်","ဒုတိယ သုံးလပတ်","တတိယ သုံးလပတ်","စတုတ္ထ သုံးလပတ်"],"QUARTERS":["ပထမ သုံးလပတ်","ဒုတိယ သုံးလပတ်","တတိယ သုံးလပတ်","စတုတ္ထ သုံးလပတ်"],"AMPMS":["နံနက်","ညနေ"],"DATEFORMATS":["EEEE d MMMM y","d MMMM y","d MMM y","dd-MM-yy"],"TIMEFORMATS":["zzzz HH:mm:ss","z HH:mm:ss","HH:mm:ss","HH:mm"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":6,"WEEKENDRANGE":[5,6],"FIRSTWEEKCUTOFFDAY":5,"DATETIMEFORMATS":["{1} {0}","{1} {0}","{1} {0}","{1} {0}"]}
\ No newline at end of file
+{"NAME":"my","ERAS":["ဘီစီ","အေဒီ"],"ERANAMES":["ခရစ်တော် မပေါ်မီနှစ်","ခရစ်နှစ်"],"NARROWMONTHS":["ဇ","ဖ","မ","ဧ","မ","ဇ","ဇ","ဩ","စ","အ","န","ဒ"],"STANDALONENARROWMONTHS":["ဇ","ဖ","မ","ဧ","မ","ဇ","ဇ","ဩ","စ","အ","န","ဒ"],"MONTHS":["ဇန်နဝါရီ","ဖေဖော်ဝါရီ","မတ်","ဧပြီ","မေ","ဇွန်","ဇူလိုင်","ဩဂုတ်","စက်တင်ဘာ","အောက်တိုဘာ","နိုဝင်ဘာ","ဒီဇင်ဘာ"],"STANDALONEMONTHS":["ဇန်နဝါရီ","ဖေဖော်ဝါရီ","မတ်","ဧပြီ","မေ","ဇွန်","ဇူလိုင်","ဩဂုတ်","စက်တင်ဘာ","အောက်တိုဘာ","နိုဝင်ဘာ","ဒီဇင်ဘာ"],"SHORTMONTHS":["ဇန်","ဖေ","မတ်","ဧ","မေ","ဇွန်","ဇူ","ဩ","စက်","အောက်","နို","ဒီ"],"STANDALONESHORTMONTHS":["ဇန်","ဖေ","မတ်","ဧ","မေ","ဇွန်","ဇူ","ဩ","စက်","အောက်","နို","ဒီ"],"WEEKDAYS":["တနင်္ဂနွေ","တနင်္လာ","အင်္ဂါ","ဗုဒ္ဓဟူး","ကြာသပတေး","သောကြာ","စနေ"],"STANDALONEWEEKDAYS":["တနင်္ဂနွေ","တနင်္လာ","အင်္ဂါ","ဗုဒ္ဓဟူး","ကြာသပတေး","သောကြာ","စနေ"],"SHORTWEEKDAYS":["တနင်္ဂနွေ","တနင်္လာ","အင်္ဂါ","ဗုဒ္ဓဟူး","ကြာသပတေး","သောကြာ","စနေ"],"STANDALONESHORTWEEKDAYS":["တနင်္ဂနွေ","တနင်္လာ","အင်္ဂါ","ဗုဒ္ဓဟူး","ကြာသပတေး","သောကြာ","စနေ"],"NARROWWEEKDAYS":["တ","တ","အ","ဗ","က","သ","စ"],"STANDALONENARROWWEEKDAYS":["တ","တ","အ","ဗ","က","သ","စ"],"SHORTQUARTERS":["ပထမ သုံးလပတ်","ဒုတိယ သုံးလပတ်","တတိယ သုံးလပတ်","စတုတ္ထ သုံးလပတ်"],"QUARTERS":["ပထမ သုံးလပတ်","ဒုတိယ သုံးလပတ်","တတိယ သုံးလပတ်","စတုတ္ထ သုံးလပတ်"],"AMPMS":["နံနက်","ညနေ"],"DATEFORMATS":["EEEE d MMMM y","d MMMM y","d MMM y","dd-MM-yy"],"TIMEFORMATS":["zzzz HH:mm:ss","z HH:mm:ss","HH:mm:ss","HH:mm"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":6,"WEEKENDRANGE":[5,6],"FIRSTWEEKCUTOFFDAY":5,"DATETIMEFORMATS":["{1} {0}","{1} {0}","{1} {0}","{1} {0}"],"ZERODIGIT":"၀"}
\ No newline at end of file
diff --git a/lib/src/data/dates/symbols/ne.json b/lib/src/data/dates/symbols/ne.json
index 3d7a6f0..a2bd928 100644
--- a/lib/src/data/dates/symbols/ne.json
+++ b/lib/src/data/dates/symbols/ne.json
@@ -1 +1 @@
-{"NAME":"ne","ERAS":["ईसा पूर्व","सन्"],"ERANAMES":["ईसा पूर्व","सन्"],"NARROWMONTHS":["१","२","३","४","५","६","७","८","९","१०","११","१२"],"STANDALONENARROWMONTHS":["१","२","३","४","५","६","७","८","९","१०","११","१२"],"MONTHS":["जनवरी","फेब्रुअरी","मार्च","अप्रिल","मई","जुन","जुलाई","अगस्ट","सेप्टेम्बर","अक्टोबर","नोभेम्बर","डिसेम्बर"],"STANDALONEMONTHS":["जनवरी","फेब्रुअरी","मार्च","अप्रिल","मे","जुन","जुलाई","अगस्ट","सेप्टेम्बर","अक्टोबर","नोभेम्बर","डिसेम्बर"],"SHORTMONTHS":["जनवरी","फेब्रुअरी","मार्च","अप्रिल","मे","जुन","जुलाई","अगस्ट","सेप्टेम्बर","अक्टोबर","नोभेम्बर","डिसेम्बर"],"STANDALONESHORTMONTHS":["जनवरी","फेब्रुअरी","मार्च","अप्रिल","मे","जुन","जुलाई","अगस्ट","सेप्टेम्बर","अक्टोबर","नोभेम्बर","डिसेम्बर"],"WEEKDAYS":["आइतबार","सोमबार","मङ्गलबार","बुधबार","बिहिबार","शुक्रबार","शनिबार"],"STANDALONEWEEKDAYS":["आइतबार","सोमबार","मङ्गलबार","बुधबार","बिहिबार","शुक्रबार","शनिबार"],"SHORTWEEKDAYS":["आइत","सोम","मङ्गल","बुध","बिहि","शुक्र","शनि"],"STANDALONESHORTWEEKDAYS":["आइत","सोम","मङ्गल","बुध","बिहि","शुक्र","शनि"],"NARROWWEEKDAYS":["आ","सो","म","बु","बि","शु","श"],"STANDALONENARROWWEEKDAYS":["आ","सो","म","बु","बि","शु","श"],"SHORTQUARTERS":["पहिलो सत्र","दोस्रो सत्र","तेस्रो सत्र","चौथो सत्र"],"QUARTERS":["पहिलो सत्र","दोस्रो सत्र","तेस्रो सत्र","चौथो सत्र"],"AMPMS":["पूर्वाह्न","अपराह्न"],"DATEFORMATS":["y MMMM d, EEEE","y MMMM d","y MMM d","y-MM-dd"],"TIMEFORMATS":["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":6,"WEEKENDRANGE":[5,6],"FIRSTWEEKCUTOFFDAY":5,"DATETIMEFORMATS":["{1} {0}","{1} {0}","{1}, {0}","{1}, {0}"]}
\ No newline at end of file
+{"NAME":"ne","ERAS":["ईसा पूर्व","सन्"],"ERANAMES":["ईसा पूर्व","सन्"],"NARROWMONTHS":["१","२","३","४","५","६","७","८","९","१०","११","१२"],"STANDALONENARROWMONTHS":["१","२","३","४","५","६","७","८","९","१०","११","१२"],"MONTHS":["जनवरी","फेब्रुअरी","मार्च","अप्रिल","मई","जुन","जुलाई","अगस्ट","सेप्टेम्बर","अक्टोबर","नोभेम्बर","डिसेम्बर"],"STANDALONEMONTHS":["जनवरी","फेब्रुअरी","मार्च","अप्रिल","मे","जुन","जुलाई","अगस्ट","सेप्टेम्बर","अक्टोबर","नोभेम्बर","डिसेम्बर"],"SHORTMONTHS":["जनवरी","फेब्रुअरी","मार्च","अप्रिल","मे","जुन","जुलाई","अगस्ट","सेप्टेम्बर","अक्टोबर","नोभेम्बर","डिसेम्बर"],"STANDALONESHORTMONTHS":["जनवरी","फेब्रुअरी","मार्च","अप्रिल","मे","जुन","जुलाई","अगस्ट","सेप्टेम्बर","अक्टोबर","नोभेम्बर","डिसेम्बर"],"WEEKDAYS":["आइतबार","सोमबार","मङ्गलबार","बुधबार","बिहिबार","शुक्रबार","शनिबार"],"STANDALONEWEEKDAYS":["आइतबार","सोमबार","मङ्गलबार","बुधबार","बिहिबार","शुक्रबार","शनिबार"],"SHORTWEEKDAYS":["आइत","सोम","मङ्गल","बुध","बिहि","शुक्र","शनि"],"STANDALONESHORTWEEKDAYS":["आइत","सोम","मङ्गल","बुध","बिहि","शुक्र","शनि"],"NARROWWEEKDAYS":["आ","सो","म","बु","बि","शु","श"],"STANDALONENARROWWEEKDAYS":["आ","सो","म","बु","बि","शु","श"],"SHORTQUARTERS":["पहिलो सत्र","दोस्रो सत्र","तेस्रो सत्र","चौथो सत्र"],"QUARTERS":["पहिलो सत्र","दोस्रो सत्र","तेस्रो सत्र","चौथो सत्र"],"AMPMS":["पूर्वाह्न","अपराह्न"],"DATEFORMATS":["y MMMM d, EEEE","y MMMM d","y MMM d","y-MM-dd"],"TIMEFORMATS":["HH:mm:ss zzzz","HH:mm:ss z","HH:mm:ss","HH:mm"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":6,"WEEKENDRANGE":[5,6],"FIRSTWEEKCUTOFFDAY":5,"DATETIMEFORMATS":["{1} {0}","{1} {0}","{1}, {0}","{1}, {0}"],"ZERODIGIT":"०"}
\ No newline at end of file
diff --git a/lib/src/data/dates/symbols/ps.json b/lib/src/data/dates/symbols/ps.json
index d6cfd84..40f250c 100644
--- a/lib/src/data/dates/symbols/ps.json
+++ b/lib/src/data/dates/symbols/ps.json
@@ -1 +1 @@
-{"NAME":"ps","ERAS":["له میلاد وړاندې","م."],"ERANAMES":["له میلاد څخه وړاندې","له میلاد څخه وروسته"],"NARROWMONTHS":["1","2","3","4","5","6","7","8","9","10","11","12"],"STANDALONENARROWMONTHS":["1","2","3","4","5","6","7","8","9","10","11","12"],"MONTHS":["جنوري","فبروري","مارچ","اپریل","مۍ","جون","جولای","اګست","سپتمبر","اکتوبر","نومبر","دسمبر"],"STANDALONEMONTHS":["جنوري","فبروري","مارچ","اپریل","مۍ","جون","جولای","اګست","سپتمبر","اکتوبر","نومبر","دسمبر"],"SHORTMONTHS":["جنوري","فبروري","مارچ","اپریل","مۍ","جون","جولای","اګست","سپتمبر","اکتوبر","نومبر","دسمبر"],"STANDALONESHORTMONTHS":["جنوري","فبروري","مارچ","اپریل","مۍ","جون","جولای","اګست","سپتمبر","اکتوبر","نومبر","دسمبر"],"WEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"STANDALONEWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"SHORTWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"STANDALONESHORTWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"NARROWWEEKDAYS":["S","M","T","W","T","F","S"],"STANDALONENARROWWEEKDAYS":["S","M","T","W","T","F","S"],"SHORTQUARTERS":["لومړۍ ربعه","۲مه ربعه","۳مه ربعه","۴مه ربعه"],"QUARTERS":["لومړۍ ربعه","۲مه ربعه","۳مه ربعه","۴مه ربعه"],"AMPMS":["غ.م.","غ.و."],"DATEFORMATS":["EEEE د y د MMMM d","د y د MMMM d","y MMM d","y/M/d"],"TIMEFORMATS":["H:mm:ss (zzzz)","H:mm:ss (z)","H:mm:ss","H:mm"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":5,"WEEKENDRANGE":[3,4],"FIRSTWEEKCUTOFFDAY":4,"DATETIMEFORMATS":["{1} {0}","{1} {0}","{1} {0}","{1} {0}"]}
\ No newline at end of file
+{"NAME":"ps","ERAS":["له میلاد وړاندې","م."],"ERANAMES":["له میلاد څخه وړاندې","له میلاد څخه وروسته"],"NARROWMONTHS":["1","2","3","4","5","6","7","8","9","10","11","12"],"STANDALONENARROWMONTHS":["1","2","3","4","5","6","7","8","9","10","11","12"],"MONTHS":["جنوري","فبروري","مارچ","اپریل","مۍ","جون","جولای","اګست","سپتمبر","اکتوبر","نومبر","دسمبر"],"STANDALONEMONTHS":["جنوري","فبروري","مارچ","اپریل","مۍ","جون","جولای","اګست","سپتمبر","اکتوبر","نومبر","دسمبر"],"SHORTMONTHS":["جنوري","فبروري","مارچ","اپریل","مۍ","جون","جولای","اګست","سپتمبر","اکتوبر","نومبر","دسمبر"],"STANDALONESHORTMONTHS":["جنوري","فبروري","مارچ","اپریل","مۍ","جون","جولای","اګست","سپتمبر","اکتوبر","نومبر","دسمبر"],"WEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"STANDALONEWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"SHORTWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"STANDALONESHORTWEEKDAYS":["یکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],"NARROWWEEKDAYS":["S","M","T","W","T","F","S"],"STANDALONENARROWWEEKDAYS":["S","M","T","W","T","F","S"],"SHORTQUARTERS":["لومړۍ ربعه","۲مه ربعه","۳مه ربعه","۴مه ربعه"],"QUARTERS":["لومړۍ ربعه","۲مه ربعه","۳مه ربعه","۴مه ربعه"],"AMPMS":["غ.م.","غ.و."],"DATEFORMATS":["EEEE د y د MMMM d","د y د MMMM d","y MMM d","y/M/d"],"TIMEFORMATS":["H:mm:ss (zzzz)","H:mm:ss (z)","H:mm:ss","H:mm"],"AVAILABLEFORMATS":null,"FIRSTDAYOFWEEK":5,"WEEKENDRANGE":[3,4],"FIRSTWEEKCUTOFFDAY":4,"DATETIMEFORMATS":["{1} {0}","{1} {0}","{1} {0}","{1} {0}"],"ZERODIGIT":"۰"}
\ No newline at end of file
diff --git a/lib/src/intl/date_format.dart b/lib/src/intl/date_format.dart
index 0795b87..e9def84 100644
--- a/lib/src/intl/date_format.dart
+++ b/lib/src/intl/date_format.dart
@@ -595,6 +595,112 @@
return cachedDateSymbols;
}
+ static final Map<String, bool> _useNativeDigitsByDefault = {};
+
+ /// Should a new DateFormat for [locale] have useNativeDigits true.
+ ///
+ /// For example, for locale 'ar' when this setting is true, DateFormat will
+ /// format using Eastern Arabic digits, e.g. "\u0660, \u0661, \u0662". If it
+ /// is false, a new DateFormat will format using ASCII digits.
+ static shouldUseNativeDigitsByDefaultFor(String locale) {
+ return _useNativeDigitsByDefault[locale] ?? true;
+ }
+
+ /// Indicate if a new DateFormat for [locale] should have useNativeDigits
+ /// true.
+ ///
+ /// For example, for locale 'ar' when this setting is true, DateFormat will
+ /// format using Eastern Arabic digits, e.g. "\u0660, \u0661, \u0662". If it
+ /// is false, a new DateFormat will format using ASCII digits.
+ ///
+ /// If not indicated, the default value is true, so native digits will be
+ /// used.
+ static useNativeDigitsByDefaultFor(String locale, bool value) {
+ _useNativeDigitsByDefault[locale] = value;
+ }
+
+ bool _useNativeDigits;
+
+ /// Should we use native digits for printing DateTime, or ASCII.
+ ///
+ /// The default for this can be set using [useNativeDigitsByDefaultFor].
+ bool get useNativeDigits => _useNativeDigits == null
+ ? _useNativeDigits = shouldUseNativeDigitsByDefaultFor(locale)
+ : _useNativeDigits;
+
+ /// Should we use native digits for printing DateTime, or ASCII.
+ set useNativeDigits(bool native) {
+ _useNativeDigits = native;
+ // Invalidate any cached information that would depend on this setting.
+ _digitMatcher = null;
+ _localeZeroCodeUnit = null;
+ _localeZero = null;
+ }
+
+ /// Caches digit matchers that we have already calculated for particular
+ /// digits.
+ ///
+ /// Keys are the zero digits, and the values are matchers for digits in that
+ /// locale.
+ static Map<String, RegExp> _digitMatchers = {};
+
+ RegExp _digitMatcher;
+
+ /// A regular expression which matches against digits for this locale.
+ RegExp get digitMatcher {
+ if (_digitMatcher != null) return _digitMatcher;
+ _digitMatcher = _digitMatchers.putIfAbsent(localeZero, _initDigitMatcher);
+ return _digitMatcher;
+ }
+
+ /// Hard-code the most common matcher, which has special RegExp syntax.
+ static final RegExp _asciiDigitMatcher = new RegExp(r'^\d+');
+
+ int _localeZeroCodeUnit;
+
+ /// For performance, keep the code unit of the zero digit available.
+ int get localeZeroCodeUnit => _localeZeroCodeUnit == null
+ ? _localeZeroCodeUnit = localeZero.codeUnitAt(0)
+ : _localeZeroCodeUnit;
+ static final int _asciiZeroCodeUnit = '0'.codeUnitAt(0);
+
+ String _localeZero;
+
+ /// For performance, keep the zero digit available.
+ String get localeZero => _localeZero == null
+ ? _localeZero = (useNativeDigits ? dateSymbols.ZERODIGIT ?? '0' : '0')
+ : _localeZero;
+
+ // Does this use non-ASCII digits, e.g. Eastern Arabic.
+ bool get usesNativeDigits =>
+ useNativeDigits && _localeZeroCodeUnit != _asciiZeroCodeUnit;
+
+ /// Does this use ASCII digits
+ bool get usesAsciiDigits => !usesNativeDigits;
+
+ /// Given a numeric string in ASCII digits, return a copy updated for our
+ /// locale digits.
+ String _localizeDigits(String numberString) {
+ if (usesAsciiDigits) return numberString;
+ var newDigits = new List<int>(numberString.length);
+ var oldDigits = numberString.codeUnits;
+ for (var i = 0; i < numberString.length; i++) {
+ newDigits[i] = oldDigits[i] + localeZeroCodeUnit - _asciiZeroCodeUnit;
+ }
+ return new String.fromCharCodes(newDigits);
+ }
+
+ /// A regular expression that matches for digits in a particular
+ /// locale, defined by the digit for zero in that locale.
+ RegExp _initDigitMatcher() {
+ if (usesAsciiDigits) return _asciiDigitMatcher;
+ List<int> localeDigits = new Iterable.generate(10, (i) => i)
+ .map((i) => localeZeroCodeUnit + i)
+ .toList();
+ var localeDigitsString = new String.fromCharCodes(localeDigits);
+ return new RegExp(r'^[' + localeDigitsString + ']+');
+ }
+
/// Return true if the locale exists, or if it is null. The null case
/// is interpreted to mean that we use the default locale.
static bool localeExists(localeName) {
diff --git a/lib/src/intl/date_format_field.dart b/lib/src/intl/date_format_field.dart
index 3c70d99..495f8f9 100644
--- a/lib/src/intl/date_format_field.dart
+++ b/lib/src/intl/date_format_field.dart
@@ -396,7 +396,9 @@
/// This method handles reading any of the numeric fields. The [offset]
/// argument allows us to compensate for zero-based versus one-based values.
void handleNumericField(_Stream input, Function setter, [int offset = 0]) {
- var result = input.nextInteger();
+ var result = input.nextInteger(
+ digitMatcher: parent.digitMatcher,
+ zeroDigit: parent.localeZeroCodeUnit);
if (result == null) throwFormatException(input);
setter(result + offset);
}
@@ -600,8 +602,9 @@
String formatDayOfWeek(DateTime date) {
// Note that Dart's weekday returns 1 for Monday and 7 for Sunday.
- return (width >= 4 ? symbols.WEEKDAYS : symbols.SHORTWEEKDAYS)[
- (date.weekday) % 7];
+ return (width >= 4
+ ? symbols.WEEKDAYS
+ : symbols.SHORTWEEKDAYS)[(date.weekday) % 7];
}
void parseDayOfWeek(_Stream input) {
@@ -638,6 +641,6 @@
/// Return a string representation of the object padded to the left with
/// zeros. Primarily useful for numbers.
- static String padTo(int width, Object toBePrinted) =>
- '$toBePrinted'.padLeft(width, '0');
+ String padTo(int width, Object toBePrinted) =>
+ parent._localizeDigits('$toBePrinted'.padLeft(width, '0'));
}
diff --git a/lib/src/intl/date_format_helpers.dart b/lib/src/intl/date_format_helpers.dart
index 05a6a49..3ad651d 100644
--- a/lib/src/intl/date_format_helpers.dart
+++ b/lib/src/intl/date_format_helpers.dart
@@ -176,12 +176,25 @@
}
/// Assuming that the contents are characters, read as many digits as we
- /// can see and then return the corresponding integer. Advance the stream.
- var digitMatcher = new RegExp(r'^\d+');
- int nextInteger() {
- var string = digitMatcher.stringMatch(rest());
+ /// can see and then return the corresponding integer, advancing the receiver.
+ ///
+ /// For non-ascii digits, the optional arguments are a regular expression
+ /// [digitMatcher] to find the next integer, and the codeUnit of the local
+ /// zero [zeroDigit].
+ int nextInteger({RegExp digitMatcher, int zeroDigit}) {
+ var string =
+ (digitMatcher ?? DateFormat._asciiDigitMatcher).stringMatch(rest());
if (string == null || string.isEmpty) return null;
read(string.length);
+ if (zeroDigit != null && zeroDigit != DateFormat._asciiZeroCodeUnit) {
+ // Trying to optimize this, as it might get called a lot.
+ var oldDigits = string.codeUnits;
+ var newDigits = new List<int>(string.length);
+ for (var i = 0; i < string.length; i++) {
+ newDigits[i] = oldDigits[i] - zeroDigit + DateFormat._asciiZeroCodeUnit;
+ }
+ string = new String.fromCharCodes(newDigits);
+ }
return int.parse(string);
}
}
diff --git a/test/date_time_format_test_core.dart b/test/date_time_format_test_core.dart
index 8e347d3..c1a4dc0 100644
--- a/test/date_time_format_test_core.dart
+++ b/test/date_time_format_test_core.dart
@@ -133,7 +133,8 @@
}
}
-testRoundTripParsing(String localeName, DateTime date) {
+testRoundTripParsing(String localeName, DateTime date,
+ [bool forceAscii = false]) {
// In order to test parsing, we can't just read back the date, because
// printing in most formats loses information. But we can test that
// what we parsed back prints the same as what we originally printed.
@@ -157,6 +158,7 @@
var skeleton = formatsToTest[i];
if (!badSkeletons.any((x) => x == skeleton)) {
var format = new DateFormat(skeleton, localeName);
+ if (forceAscii) format.useNativeDigits = false;
var actualResult = format.format(date);
var parsed = format.parse(actualResult);
var thenPrintAgain = format.format(parsed);
@@ -225,14 +227,23 @@
test('Test round-trip parsing of dates', () {
var hours = [0, 1, 11, 12, 13, 23];
var months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
+ // For locales that use non-ascii digits, e.g. "ar", also test
+ // forcing ascii digits.
for (var locale in subset) {
+ var alsoForceAscii = new DateFormat.d(locale).usesNativeDigits;
for (var month in months) {
var aDate = new DateTime(2012, month, 27, 13, 58, 59, 012);
testRoundTripParsing(locale, aDate);
+ if (alsoForceAscii) {
+ testRoundTripParsing(locale, aDate, true);
+ }
}
for (var hour in hours) {
var aDate = new DateTime(2012, 1, 27, hour, 58, 59, 123);
testRoundTripParsing(locale, aDate);
+ if (alsoForceAscii) {
+ testRoundTripParsing(locale, aDate, true);
+ }
}
}
});
@@ -432,4 +443,22 @@
expect(basic, basicAgain);
expect(first.month, 7);
});
+
+ test('Native digit default', () {
+ if (!subset.contains('ar')) return;
+ var nativeFormat = new DateFormat.yMd('ar');
+ var date = new DateTime(1974, 12, 30);
+ var native = nativeFormat.format(date);
+ expect(DateFormat.shouldUseNativeDigitsByDefaultFor('ar'), true);
+ DateFormat.useNativeDigitsByDefaultFor('ar', false);
+ expect(DateFormat.shouldUseNativeDigitsByDefaultFor('ar'), false);
+ var asciiFormat = new DateFormat.yMd('ar');
+ var ascii = asciiFormat.format(date);
+ // This prints with RTL markers before the slashes. That doesn't seem good,
+ // but it's what the data says.
+ expect(ascii, '30\u200f/12\u200f/1974');
+ expect(native, '٣٠\u200f/١٢\u200f/١٩٧٤');
+ // Reset the value.
+ DateFormat.useNativeDigitsByDefaultFor('ar', true);
+ });
}