Add support for romanian locale (#13807)
diff --git a/AUTHORS b/AUTHORS
index 3501c54..1472643 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -19,3 +19,4 @@
Stefano Rodriguez <hlsroddy@gmail.com>
Yusuke Konishi <yahpeycoy0403@gmail.com>
Fredrik Simón <fredrik@fsimon.net>
+Ali Bitek <alibitek@protonmail.ch>
diff --git a/packages/flutter/lib/src/material/app.dart b/packages/flutter/lib/src/material/app.dart
index fb32cb0..8fac0a4 100644
--- a/packages/flutter/lib/src/material/app.dart
+++ b/packages/flutter/lib/src/material/app.dart
@@ -377,6 +377,7 @@
/// ja - Japanese
/// ps - Pashto
/// pt - Portugese
+ /// ro - Romanian
/// ru - Russian
/// sd - Sindhi
/// ur - Urdu
diff --git a/packages/flutter_localizations/lib/src/l10n/date_localizations.dart b/packages/flutter_localizations/lib/src/l10n/date_localizations.dart
index bfabb84..19d685c 100644
--- a/packages/flutter_localizations/lib/src/l10n/date_localizations.dart
+++ b/packages/flutter_localizations/lib/src/l10n/date_localizations.dart
@@ -1980,6 +1980,184 @@
r'''{1} {0}'''
],
},
+ 'ro': const <String, dynamic>{
+ 'NAME': r'''ro''',
+ 'ERAS': const <dynamic>[r'''î.Hr.''', r'''d.Hr.'''],
+ 'ERANAMES': const <dynamic>[r'''înainte de Hristos''', r'''după Hristos'''],
+ 'NARROWMONTHS': const <dynamic>[
+ r'''I''',
+ r'''F''',
+ r'''M''',
+ r'''A''',
+ r'''M''',
+ r'''I''',
+ r'''I''',
+ r'''A''',
+ r'''S''',
+ r'''O''',
+ r'''N''',
+ r'''D'''
+ ],
+ 'STANDALONENARROWMONTHS': const <dynamic>[
+ r'''I''',
+ r'''F''',
+ r'''M''',
+ r'''A''',
+ r'''M''',
+ r'''I''',
+ r'''I''',
+ r'''A''',
+ r'''S''',
+ r'''O''',
+ r'''N''',
+ r'''D'''
+ ],
+ 'MONTHS': const <dynamic>[
+ r'''ianuarie''',
+ r'''februarie''',
+ r'''martie''',
+ r'''aprilie''',
+ r'''mai''',
+ r'''iunie''',
+ r'''iulie''',
+ r'''august''',
+ r'''septembrie''',
+ r'''octombrie''',
+ r'''noiembrie''',
+ r'''decembrie'''
+ ],
+ 'STANDALONEMONTHS': const <dynamic>[
+ r'''ianuarie''',
+ r'''februarie''',
+ r'''martie''',
+ r'''aprilie''',
+ r'''mai''',
+ r'''iunie''',
+ r'''iulie''',
+ r'''august''',
+ r'''septembrie''',
+ r'''octombrie''',
+ r'''noiembrie''',
+ r'''decembrie'''
+ ],
+ 'SHORTMONTHS': const <dynamic>[
+ r'''ian.''',
+ r'''feb.''',
+ r'''mar.''',
+ r'''apr.''',
+ r'''mai''',
+ r'''iun.''',
+ r'''iul.''',
+ r'''aug.''',
+ r'''sept.''',
+ r'''oct.''',
+ r'''nov.''',
+ r'''dec.'''
+ ],
+ 'STANDALONESHORTMONTHS': const <dynamic>[
+ r'''ian.''',
+ r'''feb.''',
+ r'''mar.''',
+ r'''apr.''',
+ r'''mai''',
+ r'''iun.''',
+ r'''iul.''',
+ r'''aug.''',
+ r'''sept.''',
+ r'''oct.''',
+ r'''nov.''',
+ r'''dec.'''
+ ],
+ 'WEEKDAYS': const <dynamic>[
+ r'''duminică''',
+ r'''luni''',
+ r'''marți''',
+ r'''miercuri''',
+ r'''joi''',
+ r'''vineri''',
+ r'''sâmbătă'''
+ ],
+ 'STANDALONEWEEKDAYS': const <dynamic>[
+ r'''duminică''',
+ r'''luni''',
+ r'''marți''',
+ r'''miercuri''',
+ r'''joi''',
+ r'''vineri''',
+ r'''sâmbătă'''
+ ],
+ 'SHORTWEEKDAYS': const <dynamic>[
+ r'''dum.''',
+ r'''lun.''',
+ r'''mar.''',
+ r'''mie.''',
+ r'''joi''',
+ r'''vin.''',
+ r'''sâm.'''
+ ],
+ 'STANDALONESHORTWEEKDAYS': const <dynamic>[
+ r'''dum.''',
+ r'''lun.''',
+ r'''mar.''',
+ r'''mie.''',
+ r'''joi''',
+ r'''vin.''',
+ r'''sâm.'''
+ ],
+ 'NARROWWEEKDAYS': const <dynamic>[
+ r'''D''',
+ r'''L''',
+ r'''M''',
+ r'''M''',
+ r'''J''',
+ r'''V''',
+ r'''S'''
+ ],
+ 'STANDALONENARROWWEEKDAYS': const <dynamic>[
+ r'''D''',
+ r'''L''',
+ r'''M''',
+ r'''M''',
+ r'''J''',
+ r'''V''',
+ r'''S'''
+ ],
+ 'SHORTQUARTERS': const <dynamic>[
+ r'''trim. I''',
+ r'''trim. II''',
+ r'''trim. III''',
+ r'''trim. IV'''
+ ],
+ 'QUARTERS': const <dynamic>[
+ r'''trimestrul I''',
+ r'''trimestrul al II-lea''',
+ r'''trimestrul al III-lea''',
+ r'''trimestrul al IV-lea'''
+ ],
+ 'AMPMS': const <dynamic>[r'''a.m.''', r'''p.m.'''],
+ 'DATEFORMATS': const <dynamic>[
+ r'''EEEE, d MMMM y''',
+ r'''d MMMM y''',
+ r'''d MMM y''',
+ r'''dd.MM.y'''
+ ],
+ 'TIMEFORMATS': const <dynamic>[
+ r'''HH:mm:ss zzzz''',
+ r'''HH:mm:ss z''',
+ r'''HH:mm:ss''',
+ r'''HH:mm'''
+ ],
+ 'AVAILABLEFORMATS': null,
+ 'FIRSTDAYOFWEEK': 0,
+ 'WEEKENDRANGE': const <dynamic>[5, 6],
+ 'FIRSTWEEKCUTOFFDAY': 6,
+ 'DATETIMEFORMATS': const <dynamic>[
+ r'''{1}, {0}''',
+ r'''{1}, {0}''',
+ r'''{1}, {0}''',
+ r'''{1}, {0}'''
+ ],
+ },
'ru': const <String, dynamic>{
'NAME': r'''ru''',
'ERAS': const <dynamic>[r'''до н. э.''', r'''н. э.'''],
@@ -3025,6 +3203,52 @@
'zzzz': r'''zzzz''',
'ZZZZ': r'''ZZZZ''',
},
+ 'ro': const <String, dynamic>{
+ 'd': r'''d''',
+ 'E': r'''ccc''',
+ 'EEEE': r'''cccc''',
+ 'LLL': r'''LLL''',
+ 'LLLL': r'''LLLL''',
+ 'M': r'''L''',
+ 'Md': r'''dd.MM''',
+ 'MEd': r'''EEE, dd.MM''',
+ 'MMM': r'''LLL''',
+ 'MMMd': r'''d MMM''',
+ 'MMMEd': r'''EEE, d MMM''',
+ 'MMMM': r'''LLLL''',
+ 'MMMMd': r'''d MMMM''',
+ 'MMMMEEEEd': r'''EEEE, d MMMM''',
+ 'QQQ': r'''QQQ''',
+ 'QQQQ': r'''QQQQ''',
+ 'y': r'''y''',
+ 'yM': r'''MM.y''',
+ 'yMd': r'''dd.MM.y''',
+ 'yMEd': r'''EEE, dd.MM.y''',
+ 'yMMM': r'''MMM y''',
+ 'yMMMd': r'''d MMM y''',
+ 'yMMMEd': r'''EEE, d MMM y''',
+ 'yMMMM': r'''MMMM y''',
+ 'yMMMMd': r'''d MMMM y''',
+ 'yMMMMEEEEd': r'''EEEE, d MMMM y''',
+ 'yQQQ': r'''QQQ y''',
+ 'yQQQQ': r'''QQQQ y''',
+ 'H': r'''HH''',
+ 'Hm': r'''HH:mm''',
+ 'Hms': r'''HH:mm:ss''',
+ 'j': r'''HH''',
+ 'jm': r'''HH:mm''',
+ 'jms': r'''HH:mm:ss''',
+ 'jmv': r'''HH:mm v''',
+ 'jmz': r'''HH:mm z''',
+ 'jz': r'''HH z''',
+ 'm': r'''m''',
+ 'ms': r'''mm:ss''',
+ 's': r'''s''',
+ 'v': r'''v''',
+ 'z': r'''z''',
+ 'zzzz': r'''zzzz''',
+ 'ZZZZ': r'''ZZZZ''',
+ },
'ru': const <String, dynamic>{
'd': r'''d''',
'E': r'''ccc''',
diff --git a/packages/flutter_localizations/lib/src/l10n/localizations.dart b/packages/flutter_localizations/lib/src/l10n/localizations.dart
index 6720d49..97b0448 100644
--- a/packages/flutter_localizations/lib/src/l10n/localizations.dart
+++ b/packages/flutter_localizations/lib/src/l10n/localizations.dart
@@ -681,6 +681,48 @@
}
// ignore: camel_case_types
+class _Bundle_ro extends TranslationBundle {
+ const _Bundle_ro() : super(null);
+ @override String get scriptCategory => r'English-like';
+ @override String get timeOfDayFormat => r'HH:mm';
+ @override String get openAppDrawerTooltip => r'Deschide meniul de navigare';
+ @override String get backButtonTooltip => r'Înapoi';
+ @override String get closeButtonTooltip => r'Închide';
+ @override String get deleteButtonTooltip => r'Șterge';
+ @override String get nextMonthTooltip => r'Luna următoare';
+ @override String get previousMonthTooltip => r'Luna precedentă';
+ @override String get nextPageTooltip => r'Pagina următoare';
+ @override String get previousPageTooltip => r'Pagina precedentă';
+ @override String get showMenuTooltip => r'Afișează meniul';
+ @override String get aboutListTileTitle => r'Despre $applicationName';
+ @override String get licensesPageTitle => r'Licențe';
+ @override String get pageRowsInfoTitle => r'$firstRow – $lastRow din $rowCount';
+ @override String get pageRowsInfoTitleApproximate => r'$firstRow – $lastRow din aproximativ $rowCount';
+ @override String get rowsPerPageTitle => r'Linii pe pagină:';
+ @override String get tabLabel => r'Tab $tabIndex din $tabCount';
+ @override String get selectedRowCountTitleZero => r'Nu există elemente selectate';
+ @override String get selectedRowCountTitleOne => r'1 element selectat';
+ @override String get selectedRowCountTitleOther => r'$selectedRowCount elemente selectate';
+ @override String get cancelButtonLabel => r'ANULEAZĂ';
+ @override String get closeButtonLabel => r'ÎNCHIDE';
+ @override String get continueButtonLabel => r'CONTINUĂ';
+ @override String get copyButtonLabel => r'COPIAZĂ';
+ @override String get cutButtonLabel => r'TAIE';
+ @override String get okButtonLabel => r'OK';
+ @override String get pasteButtonLabel => r'LIPEȘTE';
+ @override String get selectAllButtonLabel => r'SELECTEAZĂ TOT';
+ @override String get viewLicensesButtonLabel => r'AFIȘEAZĂ LICENȚELE';
+ @override String get anteMeridiemAbbreviation => r'AM';
+ @override String get postMeridiemAbbreviation => r'PM';
+ @override String get timePickerHourModeAnnouncement => r'Selectați orele';
+ @override String get timePickerMinuteModeAnnouncement => r'Selectați minutele';
+ @override String get signedInLabel => r'Autentificat';
+ @override String get hideAccountsLabel => r'Ascunde conturile';
+ @override String get showAccountsLabel => r'Afișează conturile';
+ @override String get modalBarrierDismissLabel => r'Ignoră';
+}
+
+// ignore: camel_case_types
class _Bundle_ru extends TranslationBundle {
const _Bundle_ru() : super(null);
@override String get scriptCategory => r'English-like';
@@ -1459,6 +1501,8 @@
}
return const _Bundle_pt();
}
+ case 'ro':
+ return const _Bundle_ro();
case 'ru':
return const _Bundle_ru();
case 'th':
diff --git a/packages/flutter_localizations/lib/src/l10n/material_ro.arb b/packages/flutter_localizations/lib/src/l10n/material_ro.arb
new file mode 100644
index 0000000..0de4e8e
--- /dev/null
+++ b/packages/flutter_localizations/lib/src/l10n/material_ro.arb
@@ -0,0 +1,39 @@
+{
+ "scriptCategory": "English-like",
+ "timeOfDayFormat": "HH:mm",
+ "openAppDrawerTooltip": "Deschide meniul de navigare",
+ "backButtonTooltip": "Înapoi",
+ "closeButtonTooltip": "Închide",
+ "deleteButtonTooltip": "Șterge",
+ "nextMonthTooltip": "Luna următoare",
+ "previousMonthTooltip": "Luna precedentă",
+ "nextPageTooltip": "Pagina următoare",
+ "previousPageTooltip": "Pagina precedentă",
+ "showMenuTooltip": "Afișează meniul",
+ "aboutListTileTitle": "Despre $applicationName",
+ "licensesPageTitle": "Licențe",
+ "pageRowsInfoTitle": "$firstRow – $lastRow din $rowCount",
+ "pageRowsInfoTitleApproximate": "$firstRow – $lastRow din aproximativ $rowCount",
+ "rowsPerPageTitle": "Linii pe pagină:",
+ "tabLabel": "Tab $tabIndex din $tabCount",
+ "selectedRowCountTitleZero": "Nu există elemente selectate",
+ "selectedRowCountTitleOne": "1 element selectat",
+ "selectedRowCountTitleOther": "$selectedRowCount elemente selectate",
+ "cancelButtonLabel": "ANULEAZĂ",
+ "closeButtonLabel": "ÎNCHIDE",
+ "continueButtonLabel": "CONTINUĂ",
+ "copyButtonLabel": "COPIAZĂ",
+ "cutButtonLabel": "TAIE",
+ "okButtonLabel": "OK",
+ "pasteButtonLabel": "LIPEȘTE",
+ "selectAllButtonLabel": "SELECTEAZĂ TOT",
+ "viewLicensesButtonLabel": "AFIȘEAZĂ LICENȚELE",
+ "anteMeridiemAbbreviation": "AM",
+ "postMeridiemAbbreviation": "PM",
+ "timePickerHourModeAnnouncement": "Selectați orele",
+ "timePickerMinuteModeAnnouncement": "Selectați minutele",
+ "signedInLabel": "Autentificat",
+ "hideAccountsLabel": "Ascunde conturile",
+ "showAccountsLabel": "Afișează conturile",
+ "modalBarrierDismissLabel": "Ignoră"
+}
\ No newline at end of file
diff --git a/packages/flutter_localizations/lib/src/material_localizations.dart b/packages/flutter_localizations/lib/src/material_localizations.dart
index d9f8eff..6378177 100644
--- a/packages/flutter_localizations/lib/src/material_localizations.dart
+++ b/packages/flutter_localizations/lib/src/material_localizations.dart
@@ -49,6 +49,7 @@
/// * pl - Polish
/// * ps - Pashto
/// * pt - Portuguese
+/// * ro - Romanian
/// * ru - Russian
/// * th - Thai
/// * tr - Turkish
@@ -504,6 +505,7 @@
'ja', // Japanese
'ps', // Pashto
'pt', // Portugese
+ 'ro', // Romanian
'ru', // Russian
'ur', // Urdu
'zh', // Simplified Chinese
diff --git a/packages/flutter_localizations/test/date_picker_test.dart b/packages/flutter_localizations/test/date_picker_test.dart
index dfb16a4..be22aff 100644
--- a/packages/flutter_localizations/test/date_picker_test.dart
+++ b/packages/flutter_localizations/test/date_picker_test.dart
@@ -36,6 +36,12 @@
'expectedDaysOfMonth': new List<String>.generate(30, (int i) => '${i + 1}'),
'expectedMonthYearHeader': 'сентябрь 2017 г.',
},
+ const Locale('ro', 'RO'): <String, dynamic>{
+ 'textDirection': TextDirection.ltr,
+ 'expectedDaysOfWeek': <String>['D', 'L', 'M', 'M', 'J', 'V', 'S'],
+ 'expectedDaysOfMonth': new List<String>.generate(30, (int i) => '${i + 1}'),
+ 'expectedMonthYearHeader': 'septembrie 2017',
+ },
// Tests RTL.
const Locale('ar', 'AR'): <String, dynamic>{
'textDirection': TextDirection.rtl,
diff --git a/packages/flutter_localizations/test/translations_test.dart b/packages/flutter_localizations/test/translations_test.dart
index 827a51a..fe05557 100644
--- a/packages/flutter_localizations/test/translations_test.dart
+++ b/packages/flutter_localizations/test/translations_test.dart
@@ -22,6 +22,7 @@
'pl', // Polish
'ps', // Pashto
'pt', // Portugese
+ 'ro', // Romanian
'ru', // Russian
'th', // Thai
'tr', // Turkish
@@ -95,5 +96,11 @@
expect(localizations.selectedRowCountTitle(1), '1 elemento seleccionado');
expect(localizations.selectedRowCountTitle(2), '2 elementos seleccionados');
expect(localizations.selectedRowCountTitle(123456789), '123.456.789 elementos seleccionados');
+
+ localizations = new GlobalMaterialLocalizations(const Locale('ro', ''));
+ expect(localizations.selectedRowCountTitle(0), 'Nu există elemente selectate');
+ expect(localizations.selectedRowCountTitle(1), '1 element selectat');
+ expect(localizations.selectedRowCountTitle(2), '2 elemente selectate');
+ expect(localizations.selectedRowCountTitle(123456789), '123.456.789 elemente selectate');
});
}