fixed JS parsing

This commit is contained in:
Tobe O 2018-04-03 01:04:34 -04:00
parent 02bab763a3
commit 3e73d5c4da
274 changed files with 36169 additions and 121 deletions

View file

@ -0,0 +1,8 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="for loop in render_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" singleton="true" nameIsGenerated="true">
<option name="filePath" value="$PROJECT_DIR$/jael/test/render/render_test.dart" />
<option name="scope" value="GROUP_OR_TEST_BY_NAME" />
<option name="testName" value="for loop" />
<method />
</configuration>
</component>

View file

@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="jael::example" type="DartCommandLineRunConfigurationType" factoryName="Dart Command Line Application" singleton="true">
<option name="filePath" value="$PROJECT_DIR$/jael/example/main.dart" />
<option name="workingDirectory" value="$PROJECT_DIR$/jael" />
<method />
</configuration>
</component>

2
jael/.gitignore vendored
View file

@ -12,3 +12,5 @@ pubspec.lock
# Directory created by dartdoc # Directory created by dartdoc
# If you don't generate documentation locally you can remove this line. # If you don't generate documentation locally you can remove this line.
doc/api/ doc/api/
.dart_tool

4
jael/CHANGELOG.md Normal file
View file

@ -0,0 +1,4 @@
# 1.0.1
* Reworked the scanner; thereby fixing an extremely pesky bug
that prevented successful parsing of Jael files containing
JavaScript.

View file

@ -11,7 +11,7 @@ In your `pubspec.yaml`:
```yaml ```yaml
dependencies: dependencies:
jael: ^1.0.0-beta jael: ^1.0.0
``` ```
# API # API

37
jael/example/main.dart Normal file
View file

@ -0,0 +1,37 @@
import 'dart:io';
import 'package:charcode/charcode.dart';
import 'package:code_buffer/code_buffer.dart';
import 'package:jael/jael.dart' as jael;
import 'package:symbol_table/symbol_table.dart';
main() {
while (true) {
var buf = new StringBuffer();
int ch;
print('Enter lines of Jael text, terminated by CTRL^D.');
print('All environment variables are injected into the template scope.');
while ((ch = stdin.readByteSync()) != $eot && ch != -1) {
buf.writeCharCode(ch);
}
var document = jael.parseDocument(
buf.toString(),
sourceUrl: 'stdin',
onError: stderr.writeln,
);
if (document == null) {
stderr.writeln('Could not parse the given text.');
} else {
var output = new CodeBuffer();
const jael.Renderer().render(
document,
output,
new SymbolTable(values: Platform.environment),
strictResolution: false,
);
print('GENERATED HTML:\n$output');
}
}
}

View file

@ -3,8 +3,9 @@ import 'package:source_span/source_span.dart';
class Token { class Token {
final TokenType type; final TokenType type;
final FileSpan span; final FileSpan span;
final Match match;
Token(this.type, this.span); Token(this.type, this.span, this.match);
@override @override
String toString() { String toString() {

View file

@ -10,6 +10,8 @@ Document parseDocument(String text,
{sourceUrl, void onError(JaelError error)}) { {sourceUrl, void onError(JaelError error)}) {
var scanner = scan(text, sourceUrl: sourceUrl); var scanner = scan(text, sourceUrl: sourceUrl);
//scanner.tokens.forEach(print);
if (scanner.errors.isNotEmpty && onError != null) if (scanner.errors.isNotEmpty && onError != null)
scanner.errors.forEach(onError); scanner.errors.forEach(onError);
else if (scanner.errors.isNotEmpty) throw scanner.errors.first; else if (scanner.errors.isNotEmpty) throw scanner.errors.first;

View file

@ -260,7 +260,7 @@ class Parser {
if (tagName2.name != tagName.name) { if (tagName2.name != tagName.name) {
errors.add(new JaelError( errors.add(new JaelError(
JaelErrorSeverity.error, JaelErrorSeverity.error,
'Mismatched closing tags. Expected "${tagName.span}"; got "${tagName2.name}" instead.', 'Mismatched closing tags. Expected "${tagName.span.text}"; got "${tagName2.name}" instead.',
lt2.span)); lt2.span));
return null; return null;
} }

View file

@ -1,10 +1,12 @@
import 'dart:collection';
import 'package:charcode/ascii.dart'; import 'package:charcode/ascii.dart';
import 'package:string_scanner/string_scanner.dart'; import 'package:string_scanner/string_scanner.dart';
import '../ast/ast.dart'; import '../ast/ast.dart';
final RegExp _whitespace = new RegExp(r'[ \n\r\t]+'); final RegExp _whitespace = new RegExp(r'[ \n\r\t]+');
final RegExp _id = new RegExp(r'(([A-Za-z][A-Za-z0-9_]*-)*([A-Za-z][A-Za-z0-9_]*))'); final RegExp _id =
new RegExp(r'(([A-Za-z][A-Za-z0-9_]*-)*([A-Za-z][A-Za-z0-9_]*))');
final RegExp _string1 = new RegExp( final RegExp _string1 = new RegExp(
r"'((\\(['\\/bfnrt]|(u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])))|([^'\\]))*'"); r"'((\\(['\\/bfnrt]|(u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])))|([^'\\]))*'");
final RegExp _string2 = new RegExp( final RegExp _string2 = new RegExp(
@ -18,7 +20,8 @@ abstract class Scanner {
List<Token> get tokens; List<Token> get tokens;
} }
final Map<Pattern, TokenType> _htmlPatterns = { final Map<Pattern, TokenType> _expressionPatterns = {
//final Map<Pattern, TokenType> _htmlPatterns = {
'{{': TokenType.doubleCurlyL, '{{': TokenType.doubleCurlyL,
'{{-': TokenType.doubleCurlyL, '{{-': TokenType.doubleCurlyL,
@ -34,9 +37,9 @@ final Map<Pattern, TokenType> _htmlPatterns = {
_string1: TokenType.string, _string1: TokenType.string,
_string2: TokenType.string, _string2: TokenType.string,
_id: TokenType.id, _id: TokenType.id,
}; //};
final Map<Pattern, TokenType> _expressionPatterns = { //final Map<Pattern, TokenType> _expressionPatterns = {
'}}': TokenType.doubleCurlyR, '}}': TokenType.doubleCurlyR,
// Keywords // Keywords
@ -78,6 +81,8 @@ final Map<Pattern, TokenType> _expressionPatterns = {
class _Scanner implements Scanner { class _Scanner implements Scanner {
final List<JaelError> errors = []; final List<JaelError> errors = [];
final List<Token> tokens = []; final List<Token> tokens = [];
_ScannerState state = _ScannerState.html;
final Queue<String> openTags = new Queue();
SpanScanner _scanner; SpanScanner _scanner;
@ -85,121 +90,153 @@ class _Scanner implements Scanner {
_scanner = new SpanScanner(text, sourceUrl: sourceUrl); _scanner = new SpanScanner(text, sourceUrl: sourceUrl);
} }
Token _scanFrom(Map<Pattern, TokenType> patterns, void scan() {
[LineScannerState textStart]) { while (!_scanner.isDone) {
var potential = <Token>[]; if (state == _ScannerState.html) {
scanHtml();
} else if (state == _ScannerState.freeText) {
// Just keep parsing until we hit "</"
var start = _scanner.state, end = start;
patterns.forEach((pattern, type) { while (!_scanner.isDone) {
if (_scanner.matches(pattern)) // Break on {{
potential.add(new Token(type, _scanner.lastSpan)); if (_scanner.matches('{{')) {
}); state = _ScannerState.html;
//_scanner.position--;
if (potential.isEmpty) return null; break;
if (textStart != null) {
var span = _scanner.spanFrom(textStart);
tokens.add(new Token(TokenType.text, span));
} }
var ch = _scanner.readChar();
if (ch == $lt && !_scanner.isDone) {
if (_scanner.matches('/')) {
// If we reached "</", backtrack and break into HTML
// Also break when we reach <foo.
//
// HOWEVER, that is also JavaScript. So we must
// only break in this case when the current tag is NOT "script".
var shouldBreak =
(openTags.isEmpty || openTags.first != 'script');
if (!shouldBreak) {
// Try to see if we are closing a script tag
var replay = _scanner.state;
_scanner
..readChar()
..scan(_whitespace);
//print(_scanner.emptySpan.highlight());
if (_scanner.matches(_id)) {
//print(_scanner.lastMatch[0]);
shouldBreak = _scanner.lastMatch[0] == 'script';
_scanner.position--;
}
if (!shouldBreak) {
_scanner.state = replay;
}
}
if (shouldBreak) {
openTags.removeFirst();
_scanner.position--;
state = _ScannerState.html;
break;
}
}
}
// Otherwise, just add to the "buffer"
end = _scanner.state;
}
var span = _scanner.spanFrom(start, end);
if (span.text.isNotEmpty)
tokens.add(new Token(TokenType.text, span, null));
}
}
}
void scanHtml() {
var brackets = new Queue<Token>();
do {
// Only continue if we find a left bracket
if (true) {// || _scanner.matches('<') || _scanner.matches('{{')) {
var potential = <Token>[];
while (true) {
// Scan whitespace
_scanner.scan(_whitespace);
_expressionPatterns.forEach((pattern, type) {
if (_scanner.matches(pattern))
potential
.add(new Token(type, _scanner.lastSpan, _scanner.lastMatch));
});
potential.sort((a, b) => b.span.length.compareTo(a.span.length)); potential.sort((a, b) => b.span.length.compareTo(a.span.length));
if (potential.isEmpty) break;
var token = potential.first; var token = potential.first;
tokens.add(token); tokens.add(token);
_scanner.scan(token.span.text); _scanner.scan(token.span.text);
return token; if (token.type == TokenType.lt) {
} brackets.addFirst(token);
void scan() { // Try to see if we are at a tag.
while (!_scanner.isDone) scanHtmlTokens(); var replay = _scanner.state;
}
void scanHtmlTokens() {
LineScannerState textStart;
while (!_scanner.isDone) {
var state = _scanner.state;
// Skip whitespace conditionally
if (textStart == null) {
_scanner.scan(_whitespace); _scanner.scan(_whitespace);
if (_scanner.matches(_id)) {
openTags.addFirst(_scanner.lastMatch[0]);
} else {
_scanner.state = replay;
} }
} else if (token.type == TokenType.slash) {
// Only push if we're at </foo
if (brackets.isNotEmpty && brackets.first.type == TokenType.lt) {
brackets
..removeFirst()
..addFirst(token);
}
} else if (token.type == TokenType.gt) {
// Only pop the bracket if we're at foo>, </foo> or foo/>
var lastToken = _scanFrom(_htmlPatterns, textStart); if (brackets.isNotEmpty && brackets.first.type == TokenType.slash)
brackets.removeFirst();
//else if (_scanner.matches('>')) brackets.removeFirst();
else if (brackets.isNotEmpty &&
brackets.first.type == TokenType.lt) {
// We're at foo>, try to parse text?
brackets.removeFirst();
if (lastToken?.type == TokenType.gt) { var replay = _scanner.state;
if (!_scanner.isDone) { _scanner.scan(_whitespace);
var state = _scanner.state;
var ch = _scanner.peekChar();
if (ch != $space && ch != $cr && ch != $lf && ch != $tab) { if (!_scanner.matches('<')) {
while (!_scanner.isDone) { _scanner.state = replay;
var ch = _scanner.peekChar(); state = _ScannerState.freeText;
if (ch == $lt || (ch == $open_brace && _scanner.peekChar() == $open_brace)) {
var span = _scanner.spanFrom(state);
tokens.add(new Token(TokenType.text, span));
break; break;
} else
_scanner.readChar();
} }
} }
} else if (token.type == TokenType.doubleCurlyR) {
state = _ScannerState.freeText;
break;
}
potential.clear();
}
}
} while (brackets.isNotEmpty && !_scanner.isDone);
state = _ScannerState.freeText;
} }
} }
else if (lastToken?.type == TokenType.equals || enum _ScannerState { html, freeText }
lastToken?.type == TokenType.nequ) {
textStart = null;
scanExpressionTokens();
return;
} else if (lastToken?.type == TokenType.doubleCurlyL) {
textStart = null;
scanExpressionTokens(true);
return;
} else if (lastToken?.type == TokenType.id &&
tokens.length >= 2 &&
tokens[tokens.length - 2].type == TokenType.gt) {
// Fold in the ID into a text node...
tokens.removeLast();
textStart = state;
} else if ((lastToken?.type == TokenType.id ||
lastToken?.type == TokenType.string) &&
tokens.length >= 2 &&
tokens[tokens.length - 2].type == TokenType.text) {
// Append the ID/string into the old text node
tokens.removeLast();
tokens.removeLast();
// Not sure how, but the following logic seems to occur
// automatically:
//
//var textToken = tokens.removeLast();
//var newSpan = textToken.span.expand(lastToken.span);
//tokens.add(new Token(TokenType.text, newSpan));
} else if (lastToken != null) {
textStart = null;
} else if (!_scanner.isDone ?? lastToken == null) {
textStart ??= state;
_scanner.readChar();
}
}
if (textStart != null) {
var span = _scanner.spanFrom(textStart);
tokens.add(new Token(TokenType.text, span));
}
}
void scanExpressionTokens([bool allowGt = false]) {
Token lastToken;
do {
_scanner.scan(_whitespace);
lastToken = _scanFrom(_expressionPatterns);
} while (!_scanner.isDone &&
lastToken != null &&
lastToken.type != TokenType.doubleCurlyR &&
(allowGt || lastToken.type != TokenType.gt));
}
}

View file

@ -1,10 +1,10 @@
name: jael name: jael
version: 1.0.0 version: 1.0.1
description: A simple server-side HTML templating engine for Dart. description: A simple server-side HTML templating engine for Dart.
author: Tobe O <thosakwe@gmail.com> author: Tobe O <thosakwe@gmail.com>
homepage: https://github.com/angel-dart/jael/tree/master/jael homepage: https://github.com/angel-dart/jael/tree/master/jael
environment: environment:
sdk: ">=1.19.0" sdk: ">=1.19.0 <=2.0.0"
dependencies: dependencies:
charcode: ^1.0.0 charcode: ^1.0.0
code_buffer: ^1.0.0 code_buffer: ^1.0.0

View file

@ -75,7 +75,7 @@ main() {
print(buf); print(buf);
expect( expect(
buf.toString(), buf.toString().replaceAll('\n', '').replaceAll(' ', '').trim(),
''' '''
<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html> <html>
@ -84,10 +84,12 @@ main() {
Pokémon Pokémon
</h1> </h1>
Darkrai - Dark Darkrai - Dark
<img/> <img>
</body> </body>
</html> </html>
''' '''
.replaceAll('\n', '')
.replaceAll(' ', '')
.trim()); .trim());
}); });

View file

@ -0,0 +1 @@
2.0.0-dev.32.0

View file

@ -0,0 +1,38 @@
// Copyright (c) 2017, 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.
/// API to allow setting Date/Time formatting in a custom way.
///
/// It does not actually provide any data - that's left to the user of the API.
import "date_symbols.dart";
import "src/date_format_internal.dart";
/// This should be called for at least one [locale] before any date
/// formatting methods are called.
///
/// It sets up the lookup for date information. The [symbols] argument should
/// contain a populated [DateSymbols], and [patterns] should contain a Map for
/// the same locale from skeletons to the specific format strings. For examples,
/// see date_time_patterns.dart.
///
/// If data for this locale has already been initialized it will be overwritten.
void initializeDateFormattingCustom(
{String locale, DateSymbols symbols, Map<String, String> patterns}) {
initializeDateSymbols(_emptySymbols);
initializeDatePatterns(_emptyPatterns);
if (symbols == null)
throw new ArgumentError("Missing DateTime formatting symbols");
if (patterns == null)
throw new ArgumentError("Missing DateTime formatting patterns");
if (locale != symbols.NAME)
throw new ArgumentError.value(
[locale, symbols.NAME], "Locale does not match symbols.NAME");
dateTimeSymbols[symbols.NAME] = symbols;
dateTimePatterns[symbols.NAME] = patterns;
}
Map<String, DateSymbols> _emptySymbols() => {};
Map<String, Map<String, String>> _emptyPatterns() => {};

View file

@ -0,0 +1,41 @@
// 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.
/// This file should be imported, along with date_format.dart in order to read
/// locale data from files in the file system.
library date_symbol_data_file;
import 'dart:async';
import 'package:path/path.dart' as path;
import 'date_symbols.dart';
import 'src/data/dates/locale_list.dart';
import 'src/date_format_internal.dart';
import 'src/file_data_reader.dart';
import 'src/lazy_locale_data.dart';
export 'src/data/dates/locale_list.dart';
/// This should be called for at least one [locale] before any date formatting
/// methods are called. It sets up the lookup for date symbols using [path].
/// The [path] parameter should end with a directory separator appropriate
/// for the platform.
Future initializeDateFormatting(String locale, String filePath) {
var reader = new FileDataReader(path.join(filePath, 'symbols'));
initializeDateSymbols(() => new LazyLocaleData(
reader, _createDateSymbol, availableLocalesForDateFormatting));
var reader2 = new FileDataReader(path.join(filePath, 'patterns'));
initializeDatePatterns(() =>
new LazyLocaleData(reader2, (x) => x, availableLocalesForDateFormatting));
return initializeIndividualLocaleDateFormatting((symbols, patterns) {
return Future.wait(
<Future>[symbols.initLocale(locale), patterns.initLocale(locale)]);
});
}
/// Defines how new date symbol entries are created.
DateSymbols _createDateSymbol(Map map) =>
new DateSymbols.deserializeFromMap(map);

View file

@ -0,0 +1,43 @@
// 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.
/// This file should be imported, along with date_format.dart in order to read
/// locale data via http requests to a web server..
library date_symbol_data_http_request;
import 'dart:async';
import 'date_symbols.dart';
import 'intl.dart';
import 'src/data/dates/locale_list.dart';
import 'src/date_format_internal.dart';
import 'src/http_request_data_reader.dart';
import 'src/lazy_locale_data.dart';
export 'src/data/dates/locale_list.dart';
/// This should be called for at least one [locale] before any date formatting
/// methods are called. It sets up the lookup for date symbols using [url].
/// The [url] parameter should end with a "/". For example,
/// "http://localhost:8000/dates/"
Future initializeDateFormatting(String locale, String url) {
var reader = new HttpRequestDataReader('${url}symbols/');
initializeDateSymbols(() => new LazyLocaleData(
reader, _createDateSymbol, availableLocalesForDateFormatting));
var reader2 = new HttpRequestDataReader('${url}patterns/');
initializeDatePatterns(() =>
new LazyLocaleData(reader2, (x) => x, availableLocalesForDateFormatting));
var actualLocale = Intl.verifiedLocale(
locale, (l) => availableLocalesForDateFormatting.contains(l));
return initializeIndividualLocaleDateFormatting((symbols, patterns) {
return Future.wait(<Future>[
symbols.initLocale(actualLocale),
patterns.initLocale(actualLocale)
]);
});
}
/// Defines how new date symbol entries are created.
DateSymbols _createDateSymbol(Map map) =>
new DateSymbols.deserializeFromMap(map);

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,393 @@
// 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;
/// 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 map) {
List<String> _getStringList(String name) =>
new 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 =
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() {
// 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;
}
/// We hard-code the locale data for en_US here so that there's at least one
/// locale always available.
var en_USSymbols = new 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
};

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,547 @@
// 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.
/// This library provides internationalization and localization. This includes
/// message formatting and replacement, date and number formatting and parsing,
/// and utilities for working with Bidirectional text.
///
/// This is part of the [intl package]
/// (https://pub.dartlang.org/packages/intl).
///
/// For things that require locale or other data, there are multiple different
/// ways of making that data available, which may require importing different
/// libraries. See the class comments for more details.
///
/// There is also a simple example application that can be found in the
/// [example/basic](https://github.com/dart-lang/intl/tree/master/example/basic)
/// directory.
library intl;
import 'dart:async';
import 'dart:collection';
import 'dart:convert';
import 'dart:math';
import 'date_symbols.dart';
import 'number_symbols.dart';
import 'number_symbols_data.dart';
import 'src/date_format_internal.dart';
import 'src/intl_helpers.dart';
import 'package:intl/src/plural_rules.dart' as plural_rules;
part 'src/intl/bidi_formatter.dart';
part 'src/intl/bidi_utils.dart';
part 'src/intl/compact_number_format.dart';
part 'src/intl/date_format.dart';
part 'src/intl/date_format_field.dart';
part 'src/intl/date_format_helpers.dart';
part 'src/intl/number_format.dart';
/// The Intl class provides a common entry point for internationalization
/// related tasks. An Intl instance can be created for a particular locale
/// and used to create a date format via `anIntl.date()`. Static methods
/// on this class are also used in message formatting.
///
/// Examples:
/// today(date) => Intl.message(
/// "Today's date is $date",
/// name: 'today',
/// args: [date],
/// desc: 'Indicate the current date',
/// examples: const {'date' : 'June 8, 2012'});
/// print(today(new DateTime.now().toString());
///
/// howManyPeople(numberOfPeople, place) => Intl.plural(
/// zero: 'I see no one at all',
/// one: 'I see one other person',
/// other: 'I see $numberOfPeople other people')} in $place.''',
/// name: 'msg',
/// args: [numberOfPeople, place],
/// desc: 'Description of how many people are seen in a place.',
/// examples: const {'numberOfPeople': 3, 'place': 'London'});
///
/// Calling `howManyPeople(2, 'Athens');` would
/// produce "I see 2 other people in Athens." as output in the default locale.
/// If run in a different locale it would produce appropriately translated
/// output.
///
/// For more detailed information on messages and localizing them see
/// the main [package documentation](https://pub.dartlang.org/packages/intl)
///
/// You can set the default locale.
/// Intl.defaultLocale = "pt_BR";
///
/// To temporarily use a locale other than the default, use the `withLocale`
/// function.
/// var todayString = new DateFormat("pt_BR").format(new DateTime.now());
/// print(withLocale("pt_BR", () => today(todayString));
///
/// See `tests/message_format_test.dart` for more examples.
//TODO(efortuna): documentation example involving the offset parameter?
class Intl {
/// String indicating the locale code with which the message is to be
/// formatted (such as en-CA).
String _locale;
/// The default locale. This defaults to being set from systemLocale, but
/// can also be set explicitly, and will then apply to any new instances where
/// the locale isn't specified. Note that a locale parameter to
/// [Intl.withLocale]
/// will supercede this value while that operation is active. Using
/// [Intl.withLocale] may be preferable if you are using different locales
/// in the same application.
static String get defaultLocale {
var zoneLocale = Zone.current[#Intl.locale];
return zoneLocale == null ? _defaultLocale : zoneLocale;
}
static set defaultLocale(String newLocale) {
_defaultLocale = newLocale;
}
static String _defaultLocale;
/// The system's locale, as obtained from the window.navigator.language
/// or other operating system mechanism. Note that due to system limitations
/// this is not automatically set, and must be set by importing one of
/// intl_browser.dart or intl_standalone.dart and calling findSystemLocale().
static String systemLocale = 'en_US';
/// Return a new date format using the specified [pattern].
/// If [desiredLocale] is not specified, then we default to [locale].
DateFormat date([String pattern, String desiredLocale]) {
var actualLocale = (desiredLocale == null) ? locale : desiredLocale;
return new DateFormat(pattern, actualLocale);
}
/// Constructor optionally [aLocale] for specifics of the language
/// locale to be used, otherwise, we will attempt to infer it (acceptable if
/// Dart is running on the client, we can infer from the browser/client
/// preferences).
Intl([String aLocale]) {
_locale = aLocale != null ? aLocale : getCurrentLocale();
}
/// Use this for a message that will be translated for different locales. The
/// expected usage is that this is inside an enclosing function that only
/// returns the value of this call and provides a scope for the variables that
/// will be substituted in the message.
///
/// The [message_str] is the string to be translated, which may be
/// interpolated based on one or more variables. The [name] of the message
/// must match the enclosing function name. For methods, it can also be
/// className_methodName. So for a method hello in class Simple, the name can
/// be either "hello" or "Simple_hello". The name must also be globally unique
/// in the program, so the second form can make it easier to distinguish
/// messages with the same name but in different classes.
///
/// The [args] repeats the arguments of the enclosing
/// function, [desc] provides a description of usage,
/// [examples] is a Map of examples for each interpolated variable.
/// For example
///
/// hello(yourName) => Intl.message(
/// "Hello, $yourName",
/// name: "hello",
/// args: [yourName],
/// desc: "Say hello",
/// examples = const {"yourName": "Sparky"}.
///
/// The source code will be processed via the analyzer to extract out the
/// message data, so only a subset of valid Dart code is accepted. In
/// particular, everything must be literal and cannot refer to variables
/// outside the scope of the enclosing function. The [examples] map must be a
/// valid const literal map. Similarly, the [desc] argument must be a single,
/// simple string. These two arguments will not be used at runtime but will be
/// extracted from the source code and used as additional data for
/// translators. For more information see the "Messages" section of the main
/// [package documentation] (https://pub.dartlang.org/packages/intl).
///
/// The [name] and [args] arguments are required, and are used at runtime
/// to look up the localized version and pass the appropriate arguments to it.
/// We may in the future modify the code during compilation to make manually
/// passing those arguments unnecessary.
static String message(String message_str,
{String desc: '',
Map<String, dynamic> examples: const {},
String locale,
String name,
List args,
String meaning}) =>
_message(message_str, locale, name, args, meaning);
/// Omit the compile-time only parameters so dart2js can see to drop them.
static _message(String message_str, String locale, String name, List args,
String meaning) {
return messageLookup.lookupMessage(
message_str, locale, name, args, meaning);
}
/// Return the locale for this instance. If none was set, the locale will
/// be the default.
String get locale => _locale;
/// Given [newLocale] return a locale that we have data for that is similar
/// to it, if possible.
///
/// If [newLocale] is found directly, return it. If it can't be found, look up
/// based on just the language (e.g. 'en_CA' -> 'en'). Also accepts '-'
/// as a separator and changes it into '_' for lookup, and changes the
/// country to uppercase.
///
/// There is a special case that if a locale named "fallback" is present
/// and has been initialized, this will return that name. This can be useful
/// for messages where you don't want to just use the text from the original
/// source code, but wish to have a universal fallback translation.
///
/// Note that null is interpreted as meaning the default locale, so if
/// [newLocale] is null the default locale will be returned.
static String verifiedLocale(String newLocale, Function localeExists,
{Function onFailure: _throwLocaleError}) {
// TODO(alanknight): Previously we kept a single verified locale on the Intl
// object, but with different verification for different uses, that's more
// difficult. As a result, we call this more often. Consider keeping
// verified locales for each purpose if it turns out to be a performance
// issue.
if (newLocale == null) {
return verifiedLocale(getCurrentLocale(), localeExists,
onFailure: onFailure);
}
if (localeExists(newLocale)) {
return newLocale;
}
for (var each in [
canonicalizedLocale(newLocale),
shortLocale(newLocale),
"fallback"
]) {
if (localeExists(each)) {
return each;
}
}
return onFailure(newLocale);
}
/// The default action if a locale isn't found in verifiedLocale. Throw
/// an exception indicating the locale isn't correct.
static String _throwLocaleError(String localeName) {
throw new ArgumentError("Invalid locale '$localeName'");
}
/// Return the short version of a locale name, e.g. 'en_US' => 'en'
static String shortLocale(String aLocale) {
if (aLocale.length < 2) return aLocale;
return aLocale.substring(0, 2).toLowerCase();
}
/// Return the name [aLocale] turned into xx_YY where it might possibly be
/// in the wrong case or with a hyphen instead of an underscore. If
/// [aLocale] is null, for example, if you tried to get it from IE,
/// return the current system locale.
static String canonicalizedLocale(String aLocale) {
// Locales of length < 5 are presumably two-letter forms, or else malformed.
// We return them unmodified and if correct they will be found.
// Locales longer than 6 might be malformed, but also do occur. Do as
// little as possible to them, but make the '-' be an '_' if it's there.
// We treat C as a special case, and assume it wants en_ISO for formatting.
// TODO(alanknight): en_ISO is probably not quite right for the C/Posix
// locale for formatting. Consider adding C to the formats database.
if (aLocale == null) return getCurrentLocale();
if (aLocale == "C") return "en_ISO";
if (aLocale.length < 5) return aLocale;
if (aLocale[2] != '-' && (aLocale[2] != '_')) return aLocale;
var region = aLocale.substring(3);
// If it's longer than three it's something odd, so don't touch it.
if (region.length <= 3) region = region.toUpperCase();
return '${aLocale[0]}${aLocale[1]}_$region';
}
/// Format a message differently depending on [howMany]. Normally used
/// as part of an `Intl.message` text that is to be translated.
/// Selects the correct plural form from
/// the provided alternatives. The [other] named argument is mandatory.
static String plural(int howMany,
{String zero,
String one,
String two,
String few,
String many,
String other,
String desc,
Map<String, dynamic> examples,
String locale,
String name,
List args,
String meaning}) {
// Call our internal method, dropping examples and desc because they're not
// used at runtime and we want them to be optimized away.
return _plural(howMany,
zero: zero,
one: one,
two: two,
few: few,
many: many,
other: other,
locale: locale,
name: name,
args: args,
meaning: meaning);
}
static String _plural(int howMany,
{String zero,
String one,
String two,
String few,
String many,
String other,
String locale,
String name,
List args,
String meaning}) {
// Look up our translation, but pass in a null message so we don't have to
// eagerly evaluate calls that may not be necessary.
var translated = _message(null, locale, name, args, meaning);
/// If there's a translation, return it, otherwise evaluate with our
/// original text.
return translated ??
pluralLogic(howMany,
zero: zero,
one: one,
two: two,
few: few,
many: many,
other: other,
locale: locale);
}
/// Internal: Implements the logic for plural selection - use [plural] for
/// normal messages.
static pluralLogic(int howMany,
{zero, one, two, few, many, other, String locale, String meaning}) {
if (other == null) {
throw new ArgumentError("The 'other' named argument must be provided");
}
if (howMany == null) {
throw new ArgumentError("The howMany argument to plural cannot be null");
}
// If there's an explicit case for the exact number, we use it. This is not
// strictly in accord with the CLDR rules, but it seems to be the
// expectation. At least I see e.g. Russian translations that have a zero
// case defined. The rule for that locale will never produce a zero, and
// treats it as other. But it seems reasonable that, even if the language
// rules treat zero as other, we might want a special message for zero.
if (howMany == 0 && zero != null) return zero;
if (howMany == 1 && one != null) return one;
if (howMany == 2 && two != null) return two;
var pluralRule = _pluralRule(locale, howMany);
var pluralCase = pluralRule();
switch (pluralCase) {
case plural_rules.PluralCase.ZERO:
return zero ?? other;
case plural_rules.PluralCase.ONE:
return one ?? other;
case plural_rules.PluralCase.TWO:
return two ?? few ?? other;
case plural_rules.PluralCase.FEW:
return few ?? other;
case plural_rules.PluralCase.MANY:
return many ?? other;
case plural_rules.PluralCase.OTHER:
return other;
default:
throw new ArgumentError.value(
howMany, "howMany", "Invalid plural argument");
}
}
static var _cachedPluralRule;
static String _cachedPluralLocale;
static _pluralRule(String locale, int howMany) {
plural_rules.startRuleEvaluation(howMany);
var verifiedLocale = Intl.verifiedLocale(
locale, plural_rules.localeHasPluralRules,
onFailure: (locale) => 'default');
if (_cachedPluralLocale == verifiedLocale) {
return _cachedPluralRule;
} else {
_cachedPluralRule = plural_rules.pluralRules[verifiedLocale];
_cachedPluralLocale = verifiedLocale;
return _cachedPluralRule;
}
}
/// Format a message differently depending on [targetGender].
static String gender(String targetGender,
{String female,
String male,
String other,
String desc,
Map<String, dynamic> examples,
String locale,
String name,
List args,
String meaning}) {
// Call our internal method, dropping args and desc because they're not used
// at runtime and we want them to be optimized away.
return _gender(targetGender,
male: male,
female: female,
other: other,
locale: locale,
name: name,
args: args,
meaning: meaning);
}
static String _gender(String targetGender,
{String female,
String male,
String other,
String desc,
Map<String, dynamic> examples,
String locale,
String name,
List args,
String meaning}) {
// Look up our translation, but pass in a null message so we don't have to
// eagerly evaluate calls that may not be necessary.
var translated = _message(null, locale, name, args, meaning);
/// If there's a translation, return it, otherwise evaluate with our
/// original text.
return translated ??
genderLogic(targetGender,
female: female, male: male, other: other, locale: locale);
}
/// Internal: Implements the logic for gender selection - use [gender] for
/// normal messages.
static genderLogic(String targetGender,
{female, male, other, String locale}) {
if (other == null) {
throw new ArgumentError("The 'other' named argument must be specified");
}
switch (targetGender) {
case "female":
return female == null ? other : female;
case "male":
return male == null ? other : male;
default:
return other;
}
}
/// Format a message differently depending on [choice]. We look up the value
/// of [choice] in [cases] and return the result, or an empty string if
/// it is not found. Normally used as part
/// of an Intl.message message that is to be translated.
static String select(Object choice, Map<String, String> cases,
{String desc,
Map<String, dynamic> examples,
String locale,
String name,
List args,
String meaning}) {
return _select(choice, cases,
locale: locale, name: name, args: args, meaning: meaning);
}
static String _select(Object choice, Map<String, String> cases,
{String locale, String name, List args, String meaning}) {
// Look up our translation, but pass in a null message so we don't have to
// eagerly evaluate calls that may not be necessary.
var translated = _message(null, locale, name, args, meaning);
/// If there's a translation, return it, otherwise evaluate with our
/// original text.
return translated ?? selectLogic(choice, cases);
}
/// Internal: Implements the logic for select - use [select] for
/// normal messages.
static selectLogic(Object choice, Map<String, String> cases) {
// Allow passing non-strings, e.g. enums to a select.
choice = "$choice";
var exact = cases[choice];
if (exact != null) return exact;
var other = cases["other"];
if (other == null)
throw new ArgumentError("The 'other' case must be specified");
return other;
}
/// Run [function] with the default locale set to [locale] and
/// return the result.
///
/// This is run in a zone, so async operations invoked
/// from within [function] will still have the locale set.
///
/// In simple usage [function] might be a single
/// `Intl.message()` call or number/date formatting operation. But it can
/// also be an arbitrary function that calls multiple Intl operations.
///
/// For example
///
/// Intl.withLocale("fr", () => new NumberFormat.format(123456));
///
/// or
///
/// hello(name) => Intl.message(
/// "Hello $name.",
/// name: 'hello',
/// args: [name],
/// desc: 'Say Hello');
/// Intl.withLocale("zh", new Timer(new Duration(milliseconds:10),
/// () => print(hello("World")));
static withLocale(String locale, function()) {
var canonical = Intl.canonicalizedLocale(locale);
return runZoned(function, zoneValues: {#Intl.locale: canonical});
}
/// Accessor for the current locale. This should always == the default locale,
/// unless for some reason this gets called inside a message that resets the
/// locale.
static String getCurrentLocale() {
if (defaultLocale == null) defaultLocale = systemLocale;
return defaultLocale;
}
toString() => "Intl($locale)";
}
/// Convert a string to beginning of sentence case, in a way appropriate to the
/// locale.
///
/// Currently this just converts the first letter to uppercase, which works for
/// many locales, and we have the option to extend this to handle more cases
/// without changing the API for clients. It also hard-codes the case of
/// dotted i in Turkish and Azeri.
String toBeginningOfSentenceCase(String input, [String locale]) {
if (input == null || input.isEmpty) return input;
return "${_upperCaseLetter(input[0], locale)}${input.substring(1)}";
}
/// Convert the input single-letter string to upper case. A trivial
/// hard-coded implementation that only handles simple upper case
/// and the dotted i in Turkish/Azeri.
///
/// Private to the implementation of [toBeginningOfSentenceCase].
// TODO(alanknight): Consider hard-coding other important cases.
// See http://www.unicode.org/Public/UNIDATA/SpecialCasing.txt
// TODO(alanknight): Alternatively, consider toLocaleUpperCase in browsers.
// See also https://github.com/dart-lang/sdk/issues/6706
String _upperCaseLetter(String input, String locale) {
// Hard-code the important edge case of i->İ
if (locale != null) {
if (input == "i" && locale.startsWith("tr") || locale.startsWith("az")) {
return "\u0130";
}
}
return input.toUpperCase();
}

View file

@ -0,0 +1,27 @@
// 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.
/// This provides facilities for Internationalization that are only available
/// when running in the web browser. You should import only one of this or
/// intl_standalone.dart. Right now the only thing provided here is the
/// ability to find the default locale from the browser.
library intl_browser;
import "dart:async";
import "dart:html";
import "intl.dart";
// TODO(alanknight): The need to do this by forcing the user to specially
// import a particular library is a horrible hack, only done because there
// seems to be no graceful way to do this at all. Either mirror access on
// dart2js or the ability to do spawnUri in the browser would be promising
// as ways to get rid of this requirement.
/// Find the system locale, accessed as window.navigator.language, and
/// set it as the default for internationalization operations in the
/// [Intl.systemLocale] variable.
Future<String> findSystemLocale() {
Intl.systemLocale = Intl.canonicalizedLocale(window.navigator.language);
return new Future.value(Intl.systemLocale);
}

View file

@ -0,0 +1,31 @@
// 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.
/// This provides facilities for Internationalization that are only available
/// when running standalone. You should import only one of this or
/// intl_browser.dart. Right now the only thing provided here is finding
/// the operating system locale.
library intl_standalone;
import "dart:async";
import "dart:io";
import "intl.dart";
// TODO(alanknight): The need to do this by forcing the user to specially
// import a particular library is a horrible hack, only done because there
// seems to be no graceful way to do this at all. Either mirror access on
// dart2js or the ability to do spawnUri in the browser would be promising
// as ways to get rid of this requirement.
/// Find the system locale, accessed via the appropriate system APIs, and
/// set it as the default for internationalization operations in
/// the [Intl.systemLocale] variable.
Future<String> findSystemLocale() {
try {
Intl.systemLocale = Intl.canonicalizedLocale(Platform.localeName);
} catch (e) {
return new Future.value();
}
return new Future.value(Intl.systemLocale);
}

View file

@ -0,0 +1,145 @@
// 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.
/// Message/plural format library with locale support. This can have different
/// implementations based on the mechanism for finding the localized versions of
/// messages. This version expects them to be in a library named e.g.
/// 'messages_en_US'. The prefix is set in the "initializeMessages" call, which
/// must be made for a locale before any lookups can be done.
///
/// See Intl class comment or `tests/message_format_test.dart` for more
/// examples.
library message_lookup_by_library;
import 'package:intl/intl.dart';
import 'package:intl/src/intl_helpers.dart';
/// This is a message lookup mechanism that delegates to one of a collection
/// of individual [MessageLookupByLibrary] instances.
class CompositeMessageLookup implements MessageLookup {
/// A map from locale names to the corresponding lookups.
Map<String, MessageLookupByLibrary> availableMessages = new Map();
/// Return true if we have a message lookup for [localeName].
bool localeExists(localeName) => availableMessages.containsKey(localeName);
/// The last locale in which we looked up messages.
///
/// If this locale matches the new one then we can skip looking up the
/// messages and assume they will be the same as last time.
String _lastLocale;
/// Caches the last messages that we found
MessageLookupByLibrary _lastLookup;
/// Look up the message with the given [name] and [locale] and return the
/// translated version with the values in [args] interpolated. If nothing is
/// found, return the result of [ifAbsent] or [message_str]. The
/// [desc] and [examples] parameters are ignored
String lookupMessage(
String message_str, String locale, String name, List args, String meaning,
{MessageIfAbsent ifAbsent}) {
// If passed null, use the default.
var knownLocale = locale ?? Intl.getCurrentLocale();
var messages = (knownLocale == _lastLocale)
? _lastLookup
: _lookupMessageCatalog(knownLocale);
// If we didn't find any messages for this locale, use the original string,
// faking interpolations if necessary.
if (messages == null) {
return ifAbsent == null ? message_str : ifAbsent(message_str, args);
}
return messages.lookupMessage(message_str, locale, name, args, meaning,
ifAbsent: ifAbsent);
}
/// Find the right message lookup for [locale].
MessageLookupByLibrary _lookupMessageCatalog(String locale) {
var verifiedLocale = Intl.verifiedLocale(locale, localeExists,
onFailure: (locale) => locale);
_lastLocale = locale;
_lastLookup = availableMessages[verifiedLocale];
return _lastLookup;
}
/// If we do not already have a locale for [localeName] then
/// [findLocale] will be called and the result stored as the lookup
/// mechanism for that locale.
void addLocale(String localeName, Function findLocale) {
if (localeExists(localeName)) return;
var canonical = Intl.canonicalizedLocale(localeName);
var newLocale = findLocale(canonical);
if (newLocale != null) {
availableMessages[localeName] = newLocale;
availableMessages[canonical] = newLocale;
// If there was already a failed lookup for [newLocale], null the cache.
if (_lastLocale == newLocale) {
_lastLocale = null;
_lastLookup = null;
}
}
}
}
/// This provides an abstract class for messages looked up in generated code.
/// Each locale will have a separate subclass of this class with its set of
/// messages. See generate_localized.dart.
abstract class MessageLookupByLibrary {
/// Return the localized version of a message. We are passed the original
/// version of the message, which consists of a
/// [message_str] that will be translated, and which may be interpolated
/// based on one or more variables, a [desc] providing a description of usage
/// for the [message_str], and a map of [examples] for each data element to be
/// substituted into the message.
///
/// For example, if message="Hello, $name", then
/// examples = {'name': 'Sparky'}. If not using the user's default locale, or
/// if the locale is not easily detectable, explicitly pass [locale].
///
/// The values of [desc] and [examples] are not used at run-time but are only
/// made available to the translators, so they MUST be simple Strings
/// available at compile time: no String interpolation or concatenation. The
/// expected usage of this is inside a function that takes as parameters the
/// variables used in the interpolated string.
///
/// Ultimately, the information about the enclosing function and its arguments
/// will be extracted automatically but for the time being it must be passed
/// explicitly in the [name] and [args] arguments.
String lookupMessage(
String message_str, String locale, String name, List args, String meaning,
{MessageIfAbsent ifAbsent}) {
var notFound = false;
var actualName = computeMessageName(name, message_str, meaning);
if (actualName == null) notFound = true;
var translation = this[actualName];
notFound = notFound || (translation == null);
if (notFound) {
return ifAbsent == null ? message_str : ifAbsent(message_str, args);
} else {
args = args ?? const [];
return evaluateMessage(translation, args);
}
}
/// Evaluate the translated message and return the translated string.
String evaluateMessage(translation, List args) {
return Function.apply(translation, args);
}
/// Return our message with the given name
operator [](String messageName) => messages[messageName];
/// Subclasses should override this to return a list of their message
/// functions.
Map<String, Function> get messages;
/// Subclasses should override this to return their locale, e.g. 'en_US'
String get localeName;
toString() => localeName;
/// Return a function that returns the given string.
/// An optimization for dart2js, used from the generated code.
static simpleMessage(translatedString) => () => translatedString;
}

View file

@ -0,0 +1,57 @@
// 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 number_symbols;
/// This holds onto information about how a particular locale formats
/// numbers. It contains strings for things like the decimal separator, digit to
/// use for "0" and infinity. We expect the data for instances to be generated
/// out of ICU or a similar reference source.
class NumberSymbols {
final String NAME;
final String DECIMAL_SEP,
GROUP_SEP,
PERCENT,
ZERO_DIGIT,
PLUS_SIGN,
MINUS_SIGN,
EXP_SYMBOL,
PERMILL,
INFINITY,
NAN,
DECIMAL_PATTERN,
SCIENTIFIC_PATTERN,
PERCENT_PATTERN,
CURRENCY_PATTERN,
DEF_CURRENCY_CODE;
const NumberSymbols(
{this.NAME,
this.DECIMAL_SEP,
this.GROUP_SEP,
this.PERCENT,
this.ZERO_DIGIT,
this.PLUS_SIGN,
this.MINUS_SIGN,
this.EXP_SYMBOL,
this.PERMILL,
this.INFINITY,
this.NAN,
this.DECIMAL_PATTERN,
this.SCIENTIFIC_PATTERN,
this.PERCENT_PATTERN,
this.CURRENCY_PATTERN,
this.DEF_CURRENCY_CODE});
toString() => NAME;
}
class CompactNumberSymbols {
final Map<int, String> COMPACT_DECIMAL_SHORT_PATTERN;
final Map<int, String> COMPACT_DECIMAL_LONG_PATTERN;
final Map<int, String> COMPACT_DECIMAL_SHORT_CURRENCY_PATTERN;
CompactNumberSymbols(
{this.COMPACT_DECIMAL_SHORT_PATTERN,
this.COMPACT_DECIMAL_LONG_PATTERN,
this.COMPACT_DECIMAL_SHORT_CURRENCY_PATTERN});
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,16 @@
These directories hold data used for date formatting when you read the data
from JSON files on disk or over the network. There are two directories
patterns - Holds the mapping form skeletons to a locale-specific format. The
data is exactly equivalent to that in date_time_patterns.dart and is generated
from it using the tools/generate_locale_data_files.dart program.
symbols - Holds the symbols used for formatting in a particular locale. This
includes things like the names of weekdays and months. The data is the same as
that in date_symbol_data_locale.dart and is generated from it using the
tools/generate_locale_data_files.dart program.
There is also a localeList.dart file that lists all of the
locales in these directories and which is sourced by other files in order to
have a list of the available locales.

View file

@ -0,0 +1,120 @@
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this sourcecode is governed by a
// BSD-style license that can be found in the LICENSE file.
/// Hard-coded list of all available locales for dates.
final availableLocalesForDateFormatting = const [
"en_ISO",
"af",
"am",
"ar",
"ar_DZ",
"az",
"be",
"bg",
"bn",
"br",
"bs",
"ca",
"chr",
"cs",
"cy",
"da",
"de",
"de_AT",
"de_CH",
"el",
"en",
"en_AU",
"en_CA",
"en_GB",
"en_IE",
"en_IN",
"en_MY",
"en_SG",
"en_US",
"en_ZA",
"es",
"es_419",
"es_ES",
"es_MX",
"es_US",
"et",
"eu",
"fa",
"fi",
"fil",
"fr",
"fr_CA",
"fr_CH",
"ga",
"gl",
"gsw",
"gu",
"haw",
"he",
"hi",
"hr",
"hu",
"hy",
"id",
"in",
"is",
"it",
"it_CH",
"iw",
"ja",
"ka",
"kk",
"km",
"kn",
"ko",
"ky",
"ln",
"lo",
"lt",
"lv",
"mk",
"ml",
"mn",
"mr",
"ms",
"mt",
"my",
"nb",
"ne",
"nl",
"no",
"no_NO",
"or",
"pa",
"pl",
"ps",
"pt",
"pt_BR",
"pt_PT",
"ro",
"ru",
"si",
"sk",
"sl",
"sq",
"sr",
"sr_Latn",
"sv",
"sw",
"ta",
"te",
"th",
"tl",
"tr",
"uk",
"ur",
"uz",
"vi",
"zh",
"zh_CN",
"zh_HK",
"zh_TW",
"zu"
];

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd-MM","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"d MMM","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM-y","yMd":"y-MM-dd","yMEd":"EEE y-MM-dd","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"M/d","MEd":"EEE፣ M/d","MMM":"LLL","MMMd":"MMM d","MMMEd":"EEE፣ MMM d","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE፣ MMMM d","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE፣ d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE፣ MMM d y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE ፣d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"H","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE، d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE، d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE، d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE، d/M/y","yMMM":"MMM y","yMMMd":"d MMM، y","yMMMEd":"EEE، d MMM، y","yMMMM":"MMMM y","yMMMMd":"d MMMM، y","yMMMMEEEEd":"EEEE، d MMMM، y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE، d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE، d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE، d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE، d/M/y","yMMM":"MMM y","yMMMd":"d MMM، y","yMMMEd":"EEE، d MMM، y","yMMMM":"MMMM y","yMMMMd":"d MMMM، y","yMMMMEEEEd":"EEEE، d MMMM، y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd.MM","MEd":"dd.MM, EEE","MMM":"LLL","MMMd":"d MMM","MMMEd":"d MMM, EEE","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"d MMMM, EEEE","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM.y","yMd":"dd.MM.y","yMEd":"dd.MM.y, EEE","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"d MMM y, EEE","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"d MMMM y, EEEE","yQQQ":"y QQQ","yQQQQ":"y QQQQ","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M","MEd":"EEE, d.M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M.y","yMd":"d.M.y","yMEd":"EEE, d.M.y","yMMM":"LLL y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"LLLL y","yMMMMd":"d MMMM y 'г'.","yMMMMEEEEd":"EEEE, d MMMM y 'г'.","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm.ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.MM","MEd":"EEE, d.MM","MMM":"MM","MMMd":"d.MM","MMMEd":"EEE, d.MM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y 'г'.","yM":"MM.y 'г'.","yMd":"d.MM.y 'г'.","yMEd":"EEE, d.MM.y 'г'.","yMMM":"MM.y 'г'.","yMMMd":"d.MM.y 'г'.","yMMMEd":"EEE, d.MM.y 'г'.","yMMMM":"MMMM y 'г'.","yMMMMd":"d MMMM y 'г'.","yMMMMEEEEd":"EEEE, d MMMM y 'г'.","yQQQ":"QQQ y 'г'.","yQQQQ":"QQQQ y 'г'.","H":"H","Hm":"H:mm","Hms":"H:mm:ss","j":"H","jm":"H:mm","jms":"H:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"H z","m":"m","ms":"m:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d-M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM, y","yMMMEd":"EEE, d MMM, y","yMMMM":"MMMM y","yMMMMd":"d MMMM, y","yMMMMEEEEd":"EEEE, d MMMM, y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"MM","Md":"dd/MM","MEd":"EEE dd/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM/y","yMd":"dd/MM/y","yMEd":"EEE dd/MM/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM y","yMMMM":"y MMMM","yMMMMd":"y MMMM d","yMMMMEEEEd":"y MMMM d, EEEE","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d.","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M.","MEd":"EEE, d.M.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"EEE, d. MMM","MMMM":"LLLL","MMMMd":"d. MMMM","MMMMEEEEd":"EEEE, d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y.","yM":"MM/y","yMd":"d.M.y.","yMEd":"EEE, d.M.y.","yMMM":"MMM y.","yMMMd":"d. MMM y.","yMMMEd":"EEE, d. MMM y.","yMMMM":"LLLL y.","yMMMMd":"d. MMMM y.","yMMMMEEEEd":"EEEE, d. MMMM y.","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm (v)","jmz":"HH:mm (z)","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"LLL 'de' y","yMMMd":"d LLL y","yMMMEd":"EEE, d MMM y","yMMMM":"LLLL 'de' y","yMMMMd":"d MMMM 'de' y","yMMMMEEEEd":"EEEE, d MMMM 'de' y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"H","Hm":"HH:mm","Hms":"HH:mm:ss","j":"H","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"H z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"M/d","MEd":"EEE, M/d","MMM":"LLL","MMMd":"MMM d","MMMEd":"EEE, MMM d","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE, MMMM d","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"M/d/y","yMEd":"EEE, M/d/y","yMMM":"MMM y","yMMMd":"MMM d, y","yMMMEd":"EEE, MMM d, y","yMMMM":"MMMM y","yMMMMd":"MMMM d, y","yMMMMEEEEd":"EEEE, MMMM d, y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d.","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d. M.","MEd":"EEE d. M.","MMM":"LLL","MMMd":"d. M.","MMMEd":"EEE d. M.","MMMM":"LLLL","MMMMd":"d. MMMM","MMMMEEEEd":"EEEE d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d. M. y","yMEd":"EEE d. M. y","yMMM":"LLLL y","yMMMd":"d. M. y","yMMMEd":"EEE d. M. y","yMMMM":"LLLL y","yMMMMd":"d. MMMM y","yMMMMEEEEd":"EEEE d. MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"H","Hm":"H:mm","Hms":"H:mm:ss","j":"H","jm":"H:mm","jms":"H:mm:ss","jmv":"H:mm v","jmz":"H:mm z","jz":"H z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d.","E":"ccc","EEEE":"cccc","LLL":"MMM","LLLL":"MMMM","M":"M","Md":"d/M","MEd":"EEE d/M","MMM":"MMM","MMMd":"d. MMM","MMMEd":"EEE d. MMM","MMMM":"MMMM","MMMMd":"d. MMMM","MMMMEEEEd":"EEEE d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE d/M/y","yMMM":"MMM y","yMMMd":"d. MMM y","yMMMEd":"EEE d. MMM y","yMMMM":"MMMM y","yMMMMd":"d. MMMM y","yMMMMEEEEd":"EEEE 'den' d. MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH.mm","Hms":"HH.mm.ss","j":"HH","jm":"HH.mm","jms":"HH.mm.ss","jmv":"HH.mm v","jmz":"HH.mm z","jz":"HH z","m":"m","ms":"mm.ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M.","MEd":"EEE, d.M.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"EEE, d. MMM","MMMM":"LLLL","MMMMd":"d. MMMM","MMMMEEEEd":"EEEE, d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M.y","yMd":"d.M.y","yMEd":"EEE, d.M.y","yMMM":"MMM y","yMMMd":"d. MMM y","yMMMEd":"EEE, d. MMM y","yMMMM":"MMMM y","yMMMMd":"d. MMMM y","yMMMMEEEEd":"EEEE, d. MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH 'Uhr'","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH 'Uhr'","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH 'Uhr' z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M.","MEd":"EEE, d.M.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"EEE, d. MMM","MMMM":"LLLL","MMMMd":"d. MMMM","MMMMEEEEd":"EEEE, d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M.y","yMd":"d.M.y","yMEd":"EEE, d.M.y","yMMM":"MMM y","yMMMd":"d. MMM y","yMMMEd":"EEE, d. MMM y","yMMMM":"MMMM y","yMMMMd":"d. MMMM y","yMMMMEEEEd":"EEEE, d. MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH 'Uhr'","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH 'Uhr'","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH 'Uhr' z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M.","MEd":"EEE, d.M.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"EEE, d. MMM","MMMM":"LLLL","MMMMd":"d. MMMM","MMMMEEEEd":"EEEE, d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M.y","yMd":"d.M.y","yMEd":"EEE, d.M.y","yMMM":"MMM y","yMMMd":"d. MMM y","yMMMEd":"EEE, d. MMM y","yMMMM":"MMMM y","yMMMMd":"d. MMMM y","yMMMMEEEEd":"EEEE, d. MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH 'Uhr'","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH 'Uhr'","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH 'Uhr' z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"MMM","LLLL":"MMMM","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"MMM","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"MMMM","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"LLLL y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"y QQQ","yQQQQ":"y QQQQ","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"M/d","MEd":"EEE, M/d","MMM":"LLL","MMMd":"MMM d","MMMEd":"EEE, MMM d","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE, MMMM d","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"M/d/y","yMEd":"EEE, M/d/y","yMMM":"MMM y","yMMMd":"MMM d, y","yMMMEd":"EEE, MMM d, y","yMMMM":"MMMM y","yMMMMd":"MMMM d, y","yMMMMEEEEd":"EEEE, MMMM d, y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd/MM","MEd":"EEE, dd/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM/y","yMd":"dd/MM/y","yMEd":"EEE, dd/MM/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"MM-dd","MEd":"EEE, MM-dd","MMM":"LLL","MMMd":"MMM d","MMMEd":"EEE, MMM d","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE, MMMM d","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"y-MM","yMd":"y-MM-dd","yMEd":"EEE, y-MM-dd","yMMM":"MMM y","yMMMd":"MMM d, y","yMMMEd":"EEE, MMM d, y","yMMMM":"MMMM y","yMMMMd":"MMMM d, y","yMMMMEEEEd":"EEEE, MMMM d, y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd/MM","MEd":"EEE dd/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM/y","yMd":"dd/MM/y","yMEd":"EEE, dd/MM/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd/MM","MEd":"EEE, dd/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM/y","yMd":"d/M/y","yMEd":"EEE d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM, y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"M/d","MEd":"EEE, M/d","MMM":"LLL","MMMd":"MMM d","MMMEd":"EEE, MMM d","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE, MMMM d","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"M/d/y","yMEd":"EEE, M/d/y","yMMM":"MMM y","yMMMd":"MMM d, y","yMMMEd":"EEE, MMM d, y","yMMMM":"MMMM y","yMMMMd":"MMMM d, y","yMMMMEEEEd":"EEEE, MMMM d, y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd/MM","MEd":"EEE, dd/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM/y","yMd":"dd/MM/y","yMEd":"EEE, dd/MM/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd/MM","MEd":"EEE, dd/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM/y","yMd":"dd/MM/y","yMEd":"EEE, dd/MM/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"M/d","MEd":"EEE, M/d","MMM":"LLL","MMMd":"MMM d","MMMEd":"EEE, MMM d","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE, MMMM d","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"M/d/y","yMEd":"EEE, M/d/y","yMMM":"MMM y","yMMMd":"MMM d, y","yMMMEd":"EEE, MMM d, y","yMMMM":"MMMM y","yMMMMd":"MMMM d, y","yMMMMEEEEd":"EEEE, MMMM d, y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"MM/dd","MEd":"EEE, MM/dd","MMM":"LLL","MMMd":"dd MMM","MMMEd":"EEE, dd MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, dd MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM/y","yMd":"y/MM/dd","yMEd":"EEE, y/MM/dd","yMMM":"MMM y","yMMMd":"dd MMM y","yMMMEd":"EEE, dd MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d 'de' MMMM","MMMMEEEEd":"EEEE, d 'de' MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM 'de' y","yMMMMd":"d 'de' MMMM 'de' y","yMMMMEEEEd":"EEEE, d 'de' MMMM 'de' y","yQQQ":"QQQ y","yQQQQ":"QQQQ 'de' y","H":"H","Hm":"H:mm","Hms":"H:mm:ss","j":"H","jm":"H:mm","jms":"H:mm:ss","jmv":"H:mm v","jmz":"H:mm z","jz":"H z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d 'de' MMMM","MMMMEEEEd":"EEEE, d 'de' MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE d/M/y","yMMM":"MMMM 'de' y","yMMMd":"d 'de' MMMM 'de' y","yMMMEd":"EEE, d 'de' MMM 'de' y","yMMMM":"MMMM 'de' y","yMMMMd":"d 'de' MMMM 'de' y","yMMMMEEEEd":"EEEE, d 'de' MMMM 'de' y","yQQQ":"QQQ 'de' y","yQQQQ":"QQQQ 'de' y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"H:mm v","jmz":"H:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d 'de' MMMM","MMMMEEEEd":"EEEE, d 'de' MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM 'de' y","yMMMMd":"d 'de' MMMM 'de' y","yMMMMEEEEd":"EEEE, d 'de' MMMM 'de' y","yQQQ":"QQQ y","yQQQQ":"QQQQ 'de' y","H":"H","Hm":"H:mm","Hms":"H:mm:ss","j":"H","jm":"H:mm","jms":"H:mm:ss","jmv":"H:mm v","jmz":"H:mm z","jz":"H z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d 'de' MMM","MMMM":"LLLL","MMMMd":"d 'de' MMMM","MMMMEEEEd":"EEEE, d 'de' MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE d/M/y","yMMM":"MMMM 'de' y","yMMMd":"d 'de' MMMM 'de' y","yMMMEd":"EEE, d 'de' MMMM 'de' y","yMMMM":"MMMM 'de' y","yMMMMd":"d 'de' MMMM 'de' y","yMMMMEEEEd":"EEEE, d 'de' MMMM 'de' y","yQQQ":"QQQ y","yQQQQ":"QQQQ 'de' y","H":"HH","Hm":"H:mm","Hms":"H:mm:ss","j":"HH","jm":"H:mm","jms":"H:mm:ss","jmv":"H:mm v","jmz":"H:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d 'de' MMMM","MMMMEEEEd":"EEEE, d 'de' MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE d/M/y","yMMM":"MMMM 'de' y","yMMMd":"d 'de' MMMM 'de' y","yMMMEd":"EEE, d 'de' MMM 'de' y","yMMMM":"MMMM 'de' y","yMMMMd":"d 'de' MMMM 'de' y","yMMMMEEEEd":"EEEE, d 'de' MMMM 'de' y","yQQQ":"QQQ 'de' y","yQQQQ":"QQQQ 'de' y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"MMMM","LLLL":"MMMM","M":"M","Md":"d.M","MEd":"EEE, d.M","MMM":"MMMM","MMMd":"d. MMM","MMMEd":"EEE, d. MMM","MMMM":"MMMM","MMMMd":"d. MMMM","MMMMEEEEd":"EEEE, d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M.y","yMd":"d.M.y","yMEd":"EEE, d.M.y","yMMM":"MMM y","yMMMd":"d. MMM y","yMMMEd":"EEE, d. MMMM y","yMMMM":"MMMM y","yMMMMd":"d. MMMM y","yMMMMEEEEd":"EEEE, d. MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"M/d","MEd":"M/d, EEE","MMM":"LLL","MMMd":"MMM d","MMMEd":"MMM d, EEE","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"MMMM d, EEEE","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"y/M","yMd":"y/M/d","yMEd":"y/M/d, EEE","yMMM":"y MMM","yMMMd":"y MMM d","yMMMEd":"y MMM d, EEE","yMMMM":"y('e')'ko' MMMM","yMMMMd":"y('e')'ko' MMMM d","yMMMMEEEEd":"y('e')'ko' MMMM d, EEEE","yQQQ":"y('e')'ko' QQQ","yQQQQ":"y('e')'ko' QQQQ","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH (z)","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"M/d","MEd":"EEE M/d","MMM":"LLL","MMMd":"d LLL","MMMEd":"EEE d LLL","MMMM":"LLLL","MMMMd":"d LLLL","MMMMEEEEd":"EEEE d LLLL","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"y/M","yMd":"y/M/d","yMEd":"EEE y/M/d","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE d MMMM y","yQQQ":"QQQQ y","yQQQQ":"QQQQ y","H":"H","Hm":"H:mm","Hms":"H:mm:ss","j":"H","jm":"H:mm","jms":"H:mm:ss","jmv":"HH:mm v","jmz":"HH:mm (z)","jz":"H (z)","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M.","MEd":"EEE d.M.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"ccc d. MMM","MMMM":"LLLL","MMMMd":"d. MMMM","MMMMEEEEd":"cccc d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"L.y","yMd":"d.M.y","yMEd":"EEE d.M.y","yMMM":"LLL y","yMMMd":"d. MMM y","yMMMEd":"EEE d. MMM y","yMMMM":"LLLL y","yMMMMd":"d. MMMM y","yMMMMEEEEd":"EEEE d. MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"H","Hm":"H.mm","Hms":"H.mm.ss","j":"H","jm":"H.mm","jms":"H.mm.ss","jmv":"H.mm v","jmz":"H.mm z","jz":"H z","m":"m","ms":"m.ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"M/d","MEd":"EEE, M/d","MMM":"LLL","MMMd":"MMM d","MMMEd":"EEE, MMM d","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE, MMMM d","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"M/d/y","yMEd":"EEE, M/d/y","yMMM":"MMM y","yMMMd":"MMM d, y","yMMMEd":"EEE, MMM d, y","yMMMM":"MMMM y","yMMMMd":"MMMM d, y","yMMMMEEEEd":"EEEE, MMMM d, y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"EEE","EEEE":"EEEE","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd/MM","MEd":"EEE dd/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM/y","yMd":"dd/MM/y","yMEd":"EEE dd/MM/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH 'h'","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH 'h'","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH 'h' z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"EEE","EEEE":"EEEE","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"M-d","MEd":"EEE M-d","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"y-MM","yMd":"y-MM-dd","yMEd":"EEE y-MM-dd","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH 'h'","Hm":"HH 'h' mm","Hms":"HH:mm:ss","j":"HH 'h'","jm":"HH 'h' mm","jms":"HH:mm:ss","jmv":"HH 'h' mm v","jmz":"HH 'h' mm z","jz":"HH 'h' z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"EEE","EEEE":"EEEE","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd.MM.","MEd":"EEE, dd.MM.","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM.y","yMd":"dd.MM.y","yMEd":"EEE, dd.MM.y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH 'h'","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH 'h'","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH 'h' z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"LL","Md":"dd/MM","MEd":"EEE dd/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM/y","yMd":"dd/MM/y","yMEd":"EEE dd/MM/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d 'de' MMM","MMMEd":"ccc, d 'de' MMM","MMMM":"LLLL","MMMMd":"d 'de' MMMM","MMMMEEEEd":"cccc, d 'de' MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"ccc, d/M/y","yMMM":"LLL 'de' y","yMMMd":"d 'de' MMM 'de' y","yMMMEd":"ccc, d 'de' MMM 'de' y","yMMMM":"LLLL 'de' y","yMMMMd":"d 'de' MMMM 'de' y","yMMMMEEEEd":"EEEE, d 'de' MMMM 'de' y","yQQQ":"QQQ y","yQQQQ":"QQQQ 'de' y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm (v)","jmz":"HH:mm (z)","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"EEE","EEEE":"EEEE","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M.","MEd":"EEE, d.M.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"EEE d. MMM","MMMM":"LLLL","MMMMd":"d. MMMM","MMMMEEEEd":"EEEE d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"y-M","yMd":"d.M.y","yMEd":"EEE, y-M-d","yMMM":"MMM y","yMMMd":"y MMM d","yMMMEd":"EEE, d. MMM y","yMMMM":"MMMM y","yMMMMd":"d. MMMM y","yMMMMEEEEd":"EEEE, d. MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"H","Hm":"HH:mm","Hms":"HH:mm:ss","j":"H","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"H z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM, y","yMMMEd":"EEE, d MMM, y","yMMMM":"MMMM y","yMMMMd":"d MMMM, y","yMMMMEEEEd":"EEEE, d MMMM, y","yQQQ":"y QQQ","yQQQQ":"y QQQQ","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"y MMMM","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"y QQQ","yQQQQ":"y QQQQ","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M","MEd":"EEE, d.M","MMM":"LLL","MMMd":"d בMMM","MMMEd":"EEE, d בMMM","MMMM":"LLLL","MMMMd":"d בMMMM","MMMMEEEEd":"EEEE, d בMMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M.y","yMd":"d.M.y","yMEd":"EEE, d.M.y","yMMM":"MMM y","yMMMd":"d בMMM y","yMMMEd":"EEE, d בMMM y","yMMMM":"MMMM y","yMMMMd":"d בMMMM y","yMMMMEEEEd":"EEEE, d בMMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"H","Hm":"H:mm","Hms":"H:mm:ss","j":"H","jm":"H:mm","jms":"H:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"H z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d.","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L.","Md":"dd. MM.","MEd":"EEE, dd. MM.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"EEE, d. MMM","MMMM":"LLLL","MMMMd":"d. MMMM","MMMMEEEEd":"EEEE, d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y.","yM":"MM. y.","yMd":"dd. MM. y.","yMEd":"EEE, dd. MM. y.","yMMM":"LLL y.","yMMMd":"d. MMM y.","yMMMEd":"EEE, d. MMM y.","yMMMM":"LLLL y.","yMMMMd":"d. MMMM y.","yMMMMEEEEd":"EEEE, d. MMMM y.","yQQQ":"QQQ y.","yQQQQ":"QQQQ y.","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH (z)","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"M. d.","MEd":"M. d., EEE","MMM":"LLL","MMMd":"MMM d.","MMMEd":"MMM d., EEE","MMMM":"LLLL","MMMMd":"MMMM d.","MMMMEEEEd":"MMMM d., EEEE","QQQ":"QQQ","QQQQ":"QQQQ","y":"y.","yM":"y. M.","yMd":"y. MM. dd.","yMEd":"y. MM. dd., EEE","yMMM":"y. MMM","yMMMd":"y. MMM d.","yMMMEd":"y. MMM d., EEE","yMMMM":"y. MMMM","yMMMMd":"y. MMMM d.","yMMMMEEEEd":"y. MMMM d., EEEE","yQQQ":"y. QQQ","yQQQQ":"y. QQQQ","H":"H","Hm":"H:mm","Hms":"H:mm:ss","j":"H","jm":"H:mm","jms":"H:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"H z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd.MM","MEd":"dd.MM, EEE","MMM":"LLL","MMMd":"d MMM","MMMEd":"d MMM, EEE","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"d MMMM, EEEE","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM.y","yMd":"dd.MM.y","yMEd":"d.MM.y թ., EEE","yMMM":"y թ. LLL","yMMMd":"d MMM, y թ.","yMMMEd":"y թ. MMM d, EEE","yMMMM":"yթ MMMM","yMMMMd":"d MMMM, y թ.","yMMMMEEEEd":"y թ. MMMM d, EEEE","yQQQ":"y թ, QQQ","yQQQQ":"y թ, QQQQ","H":"H","Hm":"H:mm","Hms":"H:mm:ss","j":"H","jm":"H:mm","jms":"H:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"H z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH.mm","Hms":"HH.mm.ss","j":"HH","jm":"HH.mm","jms":"HH.mm.ss","jmv":"HH.mm v","jmz":"HH.mm z","jz":"HH z","m":"m","ms":"mm.ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH.mm","Hms":"HH.mm.ss","j":"HH","jm":"HH.mm","jms":"HH.mm.ss","jmv":"HH.mm v","jmz":"HH.mm z","jz":"HH z","m":"m","ms":"mm.ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M.","MEd":"EEE, d.M.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"EEE, d. MMM","MMMM":"LLLL","MMMMd":"d. MMMM","MMMMEEEEd":"EEEE, d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M. y","yMd":"d.M.y","yMEd":"EEE, d.M.y","yMMM":"MMM y","yMMMd":"d. MMM y","yMMMEd":"EEE, d. MMM y","yMMMM":"MMMM y","yMMMMd":"d. MMMM y","yMMMMEEEEd":"EEEE, d. MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M","MEd":"EEE, d.M","MMM":"LLL","MMMd":"d בMMM","MMMEd":"EEE, d בMMM","MMMM":"LLLL","MMMMd":"d בMMMM","MMMMEEEEd":"EEEE, d בMMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M.y","yMd":"d.M.y","yMEd":"EEE, d.M.y","yMMM":"MMM y","yMMMd":"d בMMM y","yMMMEd":"EEE, d בMMM y","yMMMM":"MMMM y","yMMMMd":"d בMMMM y","yMMMMEEEEd":"EEEE, d בMMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"H","Hm":"H:mm","Hms":"H:mm:ss","j":"H","jm":"H:mm","jms":"H:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"H z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d日","E":"ccc","EEEE":"cccc","LLL":"M月","LLLL":"M月","M":"M月","Md":"M/d","MEd":"M/d(EEE)","MMM":"M月","MMMd":"M月d日","MMMEd":"M月d日(EEE)","MMMM":"M月","MMMMd":"M月d日","MMMMEEEEd":"M月d日EEEE","QQQ":"QQQ","QQQQ":"QQQQ","y":"y年","yM":"y/M","yMd":"y/M/d","yMEd":"y/M/d(EEE)","yMMM":"y年M月","yMMMd":"y年M月d日","yMMMEd":"y年M月d日(EEE)","yMMMM":"y年M月","yMMMMd":"y年M月d日","yMMMMEEEEd":"y年M月d日EEEE","yQQQ":"y/QQQ","yQQQQ":"y年QQQQ","H":"H時","Hm":"H:mm","Hms":"H:mm:ss","j":"H時","jm":"H:mm","jms":"H:mm:ss","jmv":"H:mm v","jmz":"H:mm z","jz":"H時 z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M","MEd":"EEE, d.M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M.y","yMd":"d.M.y","yMEd":"EEE, d.M.y","yMMM":"MMM. y","yMMMd":"d MMM. y","yMMMEd":"EEE, d MMM. y","yMMMM":"MMMM, y","yMMMMd":"d MMMM, y","yMMMMEEEEd":"EEEE, d MMMM, y","yQQQ":"QQQ, y","yQQQQ":"QQQQ, y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd.MM","MEd":"dd.MM, EEE","MMM":"LLL","MMMd":"d MMM","MMMEd":"d MMM, EEE","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"d MMMM, EEEE","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"MM.y","yMd":"dd.MM.y","yMEd":"dd.MM.y, EEE","yMMM":"y 'ж'. MMM","yMMMd":"y 'ж'. d MMM","yMMMEd":"y 'ж'. d MMM, EEE","yMMMM":"y 'ж'. MMMM","yMMMMd":"y 'ж'. d MMMM","yMMMMEEEEd":"y 'ж'. d MMMM, EEEE","yQQQ":"y 'ж'. QQQ","yQQQQ":"y 'ж'. QQQQ","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"d/M, EEE","MMM":"LLL","MMMd":"MMM d","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, M/d/y","yMMM":"MMM y","yMMMd":"MMM d,y","yMMMEd":"EEE, MMM d, y","yMMMM":"MMMM y","yMMMMd":"MMMM d, y","yMMMMEEEEd":"EEEE, MMMM d, y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d일","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"M월","Md":"M. d.","MEd":"M. d. (EEE)","MMM":"LLL","MMMd":"MMM d일","MMMEd":"MMM d일 (EEE)","MMMM":"LLLL","MMMMd":"MMMM d일","MMMMEEEEd":"MMMM d일 EEEE","QQQ":"QQQ","QQQQ":"QQQQ","y":"y년","yM":"y. M.","yMd":"y. M. d.","yMEd":"y. M. d. (EEE)","yMMM":"y년 MMM","yMMMd":"y년 MMM d일","yMMMEd":"y년 MMM d일 (EEE)","yMMMM":"y년 MMMM","yMMMMd":"y년 MMMM d일","yMMMMEEEEd":"y년 MMMM d일 EEEE","yQQQ":"y년 QQQ","yQQQQ":"y년 QQQQ","H":"H시","Hm":"HH:mm","Hms":"H시 m분 s초","j":"a h시","jm":"a h:mm","jms":"a h:mm:ss","jmv":"a h:mm v","jmz":"a h:mm z","jz":"a h시 z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd-MM","MEd":"dd-MM, EEE","MMM":"LLL","MMMd":"d-MMM","MMMEd":"d-MMM, EEE","MMMM":"LLLL","MMMMd":"d-MMMM","MMMMEEEEd":"d-MMMM, EEEE","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"y-MM","yMd":"y-dd-MM","yMEd":"y-dd-MM, EEE","yMMM":"y-'ж'. MMM","yMMMd":"y-'ж'. d-MMM","yMMMEd":"y-'ж'. d-MMM, EEE","yMMMM":"y-'ж'., MMMM","yMMMMd":"y-'ж'., d-MMMM","yMMMMEEEEd":"y-'ж'., d-MMMM, EEEE","yQQQ":"y-'ж'., QQQ","yQQQQ":"y-'ж'., QQQQ","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"EEE","EEEE":"EEEE","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE d MMM y","yMMMM":"y MMMM","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"H","Hm":"HH:mm","Hms":"HH:mm:ss","j":"H","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"H z","m":"m","ms":"m:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"EEE, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE d MMM","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"EEEE d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM y","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"dd","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"MM","Md":"MM-d","MEd":"MM-dd, EEE","MMM":"MM","MMMd":"MM-dd","MMMEd":"MM-dd, EEE","MMMM":"LLLL","MMMMd":"MMMM d 'd'.","MMMMEEEEd":"MMMM d 'd'., EEEE","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"y-MM","yMd":"y-MM-dd","yMEd":"y-MM-dd, EEE","yMMM":"y-MM","yMMMd":"y-MM-dd","yMMMEd":"y-MM-dd, EEE","yMMMM":"y 'm'. LLLL","yMMMMd":"y 'm'. MMMM d 'd'.","yMMMMEEEEd":"y 'm'. MMMM d 'd'., EEEE","yQQQ":"y QQQ","yQQQQ":"y QQQQ","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm; v","jmz":"HH:mm; z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"dd.MM.","MEd":"EEE, dd.MM.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"EEE, d. MMM","MMMM":"LLLL","MMMMd":"d. MMMM","MMMMEEEEd":"EEEE, d. MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y. 'g'.","yM":"MM.y.","yMd":"y.MM.d.","yMEd":"EEE, d.M.y.","yMMM":"y. 'g'. MMM","yMMMd":"y. 'g'. d. MMM","yMMMEd":"EEE, y. 'g'. d. MMM","yMMMM":"y. 'g'. MMMM","yMMMMd":"y. 'gada' d. MMMM","yMMMMEEEEd":"EEEE, y. 'gada' d. MMMM","yQQQ":"y. 'g'. QQQ","yQQQQ":"y. 'g'. QQQQ","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d.M","MEd":"EEE, d.M","MMM":"LLL","MMMd":"d MMM","MMMEd":"EEE, d MMM","MMMM":"LLLL","MMMMd":"d MMMM","MMMMEEEEd":"EEEE, d MMMM","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"M.y","yMd":"d.M.y","yMEd":"EEE, d.M.y","yMMM":"MMM y 'г'.","yMMMd":"d MMM y 'г'.","yMMMEd":"EEE, d MMM y 'г'.","yMMMM":"MMMM y 'г'.","yMMMMd":"d MMMM y","yMMMMEEEEd":"EEEE, d MMMM y","yQQQ":"QQQ y 'г'.","yQQQQ":"QQQQ y 'г'.","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"HH","jm":"HH:mm","jms":"HH:mm:ss","jmv":"HH:mm v","jmz":"HH:mm z","jz":"HH z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

View file

@ -0,0 +1 @@
{"d":"d","E":"ccc","EEEE":"cccc","LLL":"LLL","LLLL":"LLLL","M":"L","Md":"d/M","MEd":"d/M, EEE","MMM":"LLL","MMMd":"MMM d","MMMEd":"MMM d, EEE","MMMM":"LLLL","MMMMd":"MMMM d","MMMMEEEEd":"MMMM d, EEEE","QQQ":"QQQ","QQQQ":"QQQQ","y":"y","yM":"y-MM","yMd":"d/M/y","yMEd":"d-M-y, EEE","yMMM":"y MMM","yMMMd":"y MMM d","yMMMEd":"y MMM d, EEE","yMMMM":"y MMMM","yMMMMd":"y, MMMM d","yMMMMEEEEd":"y, MMMM d, EEEE","yQQQ":"y QQQ","yQQQQ":"y QQQQ","H":"HH","Hm":"HH:mm","Hms":"HH:mm:ss","j":"h a","jm":"h:mm a","jms":"h:mm:ss a","jmv":"h:mm a v","jmz":"h:mm a z","jz":"h a z","m":"m","ms":"mm:ss","s":"s","v":"v","z":"z","zzzz":"zzzz","ZZZZ":"ZZZZ"}

Some files were not shown because too many files have changed in this diff Show more