blob: da4317827d68dfc1aff4d7d8f9603d64ecf44ec9 [file] [log] [blame]
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library date_symbols;
// Suppress naming lints, as changes would be breaking.
// ignore_for_file: avoid_types_as_parameter_names,non_constant_identifier_names
/// This holds onto information about how a particular locale formats dates. It
/// contains mostly strings, e.g. what the names of months or weekdays are,
/// but also indicates things like the first day of the week. We expect the data
/// for instances of these to be generated out of ICU or a similar reference
/// source. This is used in conjunction with the date_time_patterns, which
/// defines for a particular locale the different named formats that will
/// make use of this data.
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;
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.DATETIMEFORMATS});
// TODO(alanknight): Replace this with use of a more general serialization
// facility once one is available. Issue 4926.
DateSymbols.deserializeFromMap(Map<dynamic, dynamic> map) {
List<String> _getStringList(String name) => List<String>.from(map[name]);
NAME = map['NAME'];
ERAS = _getStringList('ERAS');
ERANAMES = _getStringList('ERANAMES');
NARROWMONTHS = _getStringList('NARROWMONTHS');
STANDALONENARROWMONTHS = _getStringList('STANDALONENARROWMONTHS');
MONTHS = _getStringList('MONTHS');
STANDALONEMONTHS = _getStringList('STANDALONEMONTHS');
SHORTMONTHS = _getStringList('SHORTMONTHS');
STANDALONESHORTMONTHS = _getStringList('STANDALONESHORTMONTHS');
WEEKDAYS = _getStringList('WEEKDAYS');
STANDALONEWEEKDAYS = _getStringList('STANDALONEWEEKDAYS');
SHORTWEEKDAYS = _getStringList('SHORTWEEKDAYS');
STANDALONESHORTWEEKDAYS = _getStringList('STANDALONESHORTWEEKDAYS');
NARROWWEEKDAYS = _getStringList('NARROWWEEKDAYS');
STANDALONENARROWWEEKDAYS = _getStringList('STANDALONENARROWWEEKDAYS');
SHORTQUARTERS = _getStringList('SHORTQUARTERS');
QUARTERS = _getStringList('QUARTERS');
AMPMS = _getStringList('AMPMS');
ZERODIGIT = map['ZERODIGIT'];
DATEFORMATS = _getStringList('DATEFORMATS');
TIMEFORMATS = _getStringList('TIMEFORMATS');
AVAILABLEFORMATS = Map<String, String>.from(map['AVAILABLEFORMATS'] ?? {});
FIRSTDAYOFWEEK = map['FIRSTDAYOFWEEK'];
WEEKENDRANGE = List<int>.from(map['WEEKENDRANGE']);
FIRSTWEEKCUTOFFDAY = map['FIRSTWEEKCUTOFFDAY'];
DATETIMEFORMATS = _getStringList('DATETIMEFORMATS');
}
Map<String, dynamic> 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<String, dynamic> _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,
};
String toString() => NAME;
}
/// We hard-code the locale data for en_US here so that there's at least one
/// locale always available.
var en_USSymbols = DateSymbols(
NAME: 'en_US',
ERAS: const ['BC', 'AD'],
ERANAMES: const ['Before Christ', 'Anno Domini'],
NARROWMONTHS: const [
'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'
],
MONTHS: const [
'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'
],
SHORTMONTHS: const [
'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'
],
WEEKDAYS: const [
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
],
STANDALONEWEEKDAYS: const [
'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'
],
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'
],
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'],
FIRSTDAYOFWEEK: 6,
WEEKENDRANGE: const [5, 6],
FIRSTWEEKCUTOFFDAY: 5,
DATETIMEFORMATS: const [
'{1} \'at\' {0}',
'{1} \'at\' {0}',
'{1}, {0}',
'{1}, {0}'
]);
var en_USPatterns = const {
'd': 'd', // DAY
'E': 'EEE', // ABBR_WEEKDAY
'EEEE': 'EEEE', // WEEKDAY
'LLL': 'LLL', // ABBR_STANDALONE_MONTH
'LLLL': 'LLLL', // STANDALONE_MONTH
'M': 'L', // NUM_MONTH
'Md': 'M/d', // NUM_MONTH_DAY
'MEd': 'EEE, M/d', // NUM_MONTH_WEEKDAY_DAY
'MMM': 'LLL', // ABBR_MONTH
'MMMd': 'MMM d', // ABBR_MONTH_DAY
'MMMEd': 'EEE, MMM d', // ABBR_MONTH_WEEKDAY_DAY
'MMMM': 'LLLL', // MONTH
'MMMMd': 'MMMM d', // MONTH_DAY
'MMMMEEEEd': 'EEEE, MMMM d', // MONTH_WEEKDAY_DAY
'QQQ': 'QQQ', // ABBR_QUARTER
'QQQQ': 'QQQQ', // QUARTER
'y': 'y', // YEAR
'yM': 'M/y', // YEAR_NUM_MONTH
'yMd': 'M/d/y', // YEAR_NUM_MONTH_DAY
'yMEd': 'EEE, M/d/y', // YEAR_NUM_MONTH_WEEKDAY_DAY
'yMMM': 'MMM y', // YEAR_ABBR_MONTH
'yMMMd': 'MMM d, y', // YEAR_ABBR_MONTH_DAY
'yMMMEd': 'EEE, MMM d, y', // YEAR_ABBR_MONTH_WEEKDAY_DAY
'yMMMM': 'MMMM y', // YEAR_MONTH
'yMMMMd': 'MMMM d, y', // YEAR_MONTH_DAY
'yMMMMEEEEd': 'EEEE, MMMM d, y', // YEAR_MONTH_WEEKDAY_DAY
'yQQQ': 'QQQ y', // YEAR_ABBR_QUARTER
'yQQQQ': 'QQQQ y', // YEAR_QUARTER
'H': 'HH', // HOUR24
'Hm': 'HH:mm', // HOUR24_MINUTE
'Hms': 'HH:mm:ss', // HOUR24_MINUTE_SECOND
'j': 'h a', // HOUR
'jm': 'h:mm a', // HOUR_MINUTE
'jms': 'h:mm:ss a', // HOUR_MINUTE_SECOND
'jmv': 'h:mm a v', // HOUR_MINUTE_GENERIC_TZ
'jmz': 'h:mm a z', // HOUR_MINUTETZ
'jz': 'h a z', // HOURGENERIC_TZ
'm': 'm', // MINUTE
'ms': 'mm:ss', // MINUTE_SECOND
's': 's', // SECOND
'v': 'v', // ABBR_GENERIC_TZ
'z': 'z', // ABBR_SPECIFIC_TZ
'zzzz': 'zzzz', // SPECIFIC_TZ
'ZZZZ': 'ZZZZ' // ABBR_UTC_TZ
};