Localize time picker (#11967)
* Internationalize the time picker - header layout and formatting - 12-hour vs 24-hour dial - RTL * make TimeOfDayFormat an enum * address comments
This commit is contained in:
parent
72cc92cba6
commit
cbdefead38
@ -76,7 +76,7 @@ String generateLocalizationsMap() {
|
||||
const Map<String, Map<String, String>> localizations = const <String, Map<String, String>> {''');
|
||||
|
||||
final String lastLocale = localeToResources.keys.last;
|
||||
for (String locale in localeToResources.keys) {
|
||||
for (String locale in localeToResources.keys.toList()..sort()) {
|
||||
output.writeln(' "$locale": const <String, String>{');
|
||||
|
||||
final Map<String, String> resources = localeToResources[locale];
|
||||
@ -126,7 +126,7 @@ void main(List<String> args) {
|
||||
}
|
||||
}
|
||||
|
||||
final String regenerate = 'dart gen_localizations ${directory.path} ${args[1]}';
|
||||
final String regenerate = 'dart dev/tools/gen_localizations.dart ${directory.path} ${args[1]}';
|
||||
print(outputHeader.replaceFirst('@(regenerate)', regenerate));
|
||||
print(generateLocalizationsMap());
|
||||
}
|
||||
|
@ -4,134 +4,15 @@
|
||||
|
||||
// This file has been automatically generated. Please do not edit it manually.
|
||||
// To regenerate the file, use:
|
||||
// dart gen_localizations packages/flutter/lib/src/material/i18n material
|
||||
// dart dev/tools/gen_localizations.dart lib/src/material/i18n material
|
||||
|
||||
/// Maps from [Locale.languageCode] to a map that contains the localized strings
|
||||
/// for that locale.
|
||||
///
|
||||
/// This variable is used by [MaterialLocalizations].
|
||||
const Map<String, Map<String, String>> localizations = const <String, Map<String, String>> {
|
||||
"sd": const <String, String>{
|
||||
"openAppDrawerTooltip": r"اوپن جي مينڊيٽ مينيو",
|
||||
"backButtonTooltip": r"پوئتي",
|
||||
"closeButtonTooltip": r"بند ڪريو",
|
||||
"nextMonthTooltip": r"ايندڙ مهيني",
|
||||
"previousMonthTooltip": r"پويون مهينو",
|
||||
"nextPageTooltip": r"اڳيون پيج",
|
||||
"previousPageTooltip": r"پويون صفحو",
|
||||
"showMenuTooltip": r"ڏيکاريو",
|
||||
"licensesPageTitle": r"لائسنس",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow جي $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow کان $rowCount تقريبن",
|
||||
"rowsPerPageTitle": r"رني پاسي وارو صفحو",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount شيون چونڊيل",
|
||||
"cancelButtonLabel": r"منسوخ ڪيو",
|
||||
"closeButtonLabel": r"بند ڪريو",
|
||||
"continueButtonLabel": r"جاري رکو",
|
||||
"copyButtonLabel": r"ڪاپي",
|
||||
"cutButtonLabel": r"پٽي",
|
||||
"okButtonLabel": r"ٺيڪ آهي",
|
||||
"pasteButtonLabel": r"پيسٽ ڪريو",
|
||||
"selectAllButtonLabel": r"سڀ چونڊيو",
|
||||
"viewLicensesButtonLabel": r"لائسنس ڏسو"
|
||||
},
|
||||
"fa": const <String, String>{
|
||||
"openAppDrawerTooltip": r"منوی ناوبری را باز کنید",
|
||||
"backButtonTooltip": r"بازگشت",
|
||||
"closeButtonTooltip": r"بستن",
|
||||
"nextMonthTooltip": r"ماه بعد",
|
||||
"previousMonthTooltip": r"ماه گذشته",
|
||||
"nextPageTooltip": r"صفحه بعد",
|
||||
"previousPageTooltip": r"صفحه قبلی",
|
||||
"showMenuTooltip": r"نمایش منو",
|
||||
"licensesPageTitle": r"مجوز",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow از $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow از حدود $rowCount",
|
||||
"rowsPerPageTitle": r"ردیف در صفحه:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount آیتم های انتخاب شده",
|
||||
"cancelButtonLabel": r"لغو",
|
||||
"closeButtonLabel": r"بستن",
|
||||
"continueButtonLabel": r"ادامه دهید",
|
||||
"copyButtonLabel": r"کپی",
|
||||
"cutButtonLabel": r"برش",
|
||||
"okButtonLabel": r"تایید",
|
||||
"pasteButtonLabel": r"چسباندن",
|
||||
"selectAllButtonLabel": r"انتخاب همه",
|
||||
"viewLicensesButtonLabel": r"مشاهده مجوز"
|
||||
},
|
||||
"ur": const <String, String>{
|
||||
"openAppDrawerTooltip": r"کھولیں نیویگیشن مینو",
|
||||
"backButtonTooltip": r"واپس",
|
||||
"closeButtonTooltip": r"بند کریں",
|
||||
"nextMonthTooltip": r"اگلا مھینہ",
|
||||
"previousMonthTooltip": r"پچھلا مھینہ",
|
||||
"nextPageTooltip": r"اگلا صفحہ",
|
||||
"previousPageTooltip": r"سابقہ صفحہ",
|
||||
"showMenuTooltip": r"مینو دکھائیں",
|
||||
"licensesPageTitle": r"لائسنس",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow کے $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow میں سے $rowCount تقریبا",
|
||||
"rowsPerPageTitle": r"رویوں فی صفحہ:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount منتخب کردہ اشیاء",
|
||||
"cancelButtonLabel": r"منسوخ کریں",
|
||||
"closeButtonLabel": r"بند کریں",
|
||||
"continueButtonLabel": r"جاری رکھیں",
|
||||
"copyButtonLabel": r"کاپی",
|
||||
"cutButtonLabel": r"کاٹیں",
|
||||
"okButtonLabel": r"ٹھیک ہے",
|
||||
"pasteButtonLabel": r"چسپاں",
|
||||
"selectAllButtonLabel": r"تکاپیمام منتخب کریں",
|
||||
"viewLicensesButtonLabel": r"لائسنس دیکھیں"
|
||||
},
|
||||
"ps": const <String, String>{
|
||||
"openAppDrawerTooltip": r"د پرانیستی نیینګ مینو",
|
||||
"backButtonTooltip": r"شاته",
|
||||
"closeButtonTooltip": r"بنده",
|
||||
"nextMonthTooltip": r"بله میاشت",
|
||||
"previousMonthTooltip": r"تیره میاشت",
|
||||
"nextPageTooltip": r"بله پاڼه",
|
||||
"previousPageTooltip": r"مخکینی مخ",
|
||||
"showMenuTooltip": r"غورنۍ ښودل",
|
||||
"licensesPageTitle": r"جوازونه",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow د $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow څخه $rowCount د",
|
||||
"rowsPerPageTitle": r"د هرې پاڼې پاڼې:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount توکي غوره شوي",
|
||||
"cancelButtonLabel": r"لغوه کول",
|
||||
"closeButtonLabel": r"تړل",
|
||||
"continueButtonLabel": r"منځپانګې",
|
||||
"copyButtonLabel": r"کاپی",
|
||||
"cutButtonLabel": r"کم کړئ",
|
||||
"okButtonLabel": r"سمه ده",
|
||||
"pasteButtonLabel": r"پیټ کړئ",
|
||||
"selectAllButtonLabel": r"غوره کړئ",
|
||||
"viewLicensesButtonLabel": r"لیدلس وګورئ"
|
||||
},
|
||||
"he": const <String, String>{
|
||||
"openAppDrawerTooltip": r"פתח תפריט ניווט",
|
||||
"backButtonTooltip": r"אחורה",
|
||||
"closeButtonTooltip": r"סגור",
|
||||
"nextMonthTooltip": r"חודש הבא",
|
||||
"previousMonthTooltip": r"חודש שעבר",
|
||||
"nextPageTooltip": r"עמוד הבא",
|
||||
"previousPageTooltip": r"עמוד קודם",
|
||||
"showMenuTooltip": r"הצג תפריט",
|
||||
"licensesPageTitle": r"רישיונות",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow מתוך $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow מתוך כ $rowCount",
|
||||
"rowsPerPageTitle": r"שורות לעמוד:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount פריטים שנבחרו",
|
||||
"cancelButtonLabel": r"ביטול",
|
||||
"closeButtonLabel": r"סגור",
|
||||
"continueButtonLabel": r"לְהַמשִׁיך",
|
||||
"copyButtonLabel": r"קיבלתי!",
|
||||
"cutButtonLabel": r"גזור",
|
||||
"okButtonLabel": r"בסדר",
|
||||
"pasteButtonLabel": r"הדבק",
|
||||
"selectAllButtonLabel": r"בחר הכל",
|
||||
"viewLicensesButtonLabel": r"ראה רישיונות"
|
||||
},
|
||||
"ar": const <String, String>{
|
||||
"timeOfDayFormat": r"h:mm a",
|
||||
"openAppDrawerTooltip": r"افتح قائمة التنقل",
|
||||
"backButtonTooltip": r"الى الخلف",
|
||||
"closeButtonTooltip": r"إغلا",
|
||||
@ -153,159 +34,12 @@ const Map<String, Map<String, String>> localizations = const <String, Map<String
|
||||
"okButtonLabel": r"حسنا",
|
||||
"pasteButtonLabel": r"عجين",
|
||||
"selectAllButtonLabel": r"اختر الكل",
|
||||
"viewLicensesButtonLabel": r"عرض التراخيص"
|
||||
},
|
||||
"it": const <String, String>{
|
||||
"openAppDrawerTooltip": r"Apri il menu di navigazione",
|
||||
"backButtonTooltip": r"Indietro",
|
||||
"closeButtonTooltip": r"Chiudi",
|
||||
"nextMonthTooltip": r"Il prossimo mese",
|
||||
"previousMonthTooltip": r"Il mese scorso",
|
||||
"nextPageTooltip": r"Pagina successiva",
|
||||
"previousPageTooltip": r"Pagina precedente",
|
||||
"showMenuTooltip": r"Mostra il menu",
|
||||
"licensesPageTitle": r"Licenze",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow di $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow di circa $rowCount",
|
||||
"rowsPerPageTitle": r"Righe per pagina:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount selezionati",
|
||||
"cancelButtonLabel": r"ANNULLA",
|
||||
"closeButtonLabel": r"CHIUDI",
|
||||
"continueButtonLabel": r"CONTINUA",
|
||||
"copyButtonLabel": r"COPY",
|
||||
"cutButtonLabel": r"TAGLIARE",
|
||||
"okButtonLabel": r"OK",
|
||||
"pasteButtonLabel": r"INCOLLA",
|
||||
"selectAllButtonLabel": r"SELEZIONA TUTTO",
|
||||
"viewLicensesButtonLabel": r"VEDI LE LICENZE"
|
||||
},
|
||||
"pt": const <String, String>{
|
||||
"openAppDrawerTooltip": r"Abrir menu de navegação",
|
||||
"backButtonTooltip": r"Costas",
|
||||
"closeButtonTooltip": r"Fechar",
|
||||
"nextMonthTooltip": r"Próximo mês",
|
||||
"previousMonthTooltip": r"Mês anterior",
|
||||
"nextPageTooltip": r"Próxima página",
|
||||
"previousPageTooltip": r"Página anterior",
|
||||
"showMenuTooltip": r"Mostrar menu",
|
||||
"licensesPageTitle": r"Licenças",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow de $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow de cerca de $rowCount",
|
||||
"rowsPerPageTitle": r"Linhas por página:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount selecionados",
|
||||
"cancelButtonLabel": r"CANCELAR",
|
||||
"closeButtonLabel": r"FECHAR",
|
||||
"continueButtonLabel": r"CONTINUAR",
|
||||
"copyButtonLabel": r"CÓPIA DE",
|
||||
"cutButtonLabel": r"CORTA",
|
||||
"okButtonLabel": r"OK",
|
||||
"pasteButtonLabel": r"COLAR",
|
||||
"selectAllButtonLabel": r"SELECIONAR TUDO",
|
||||
"viewLicensesButtonLabel": r"VER LICENÇAS"
|
||||
},
|
||||
"es": const <String, String>{
|
||||
"openAppDrawerTooltip": r"Abrir el menú de navegación",
|
||||
"backButtonTooltip": r"Espalda",
|
||||
"closeButtonTooltip": r"Cerrar",
|
||||
"nextMonthTooltip": r"Próximo mes",
|
||||
"previousMonthTooltip": r"Mes anterior",
|
||||
"nextPageTooltip": r"Siguiente página",
|
||||
"previousPageTooltip": r"Pagina anterior",
|
||||
"showMenuTooltip": r"Muestrame el menu",
|
||||
"licensesPageTitle": r"Licencias",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow de $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow de aproximadamente $rowCount",
|
||||
"rowsPerPageTitle": r"Filas por página:",
|
||||
"selectedRowCountTitleZero": r"No se han seleccionado elementos",
|
||||
"selectedRowCountTitleOne": r"1 artículo seleccionado",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount artículos seleccionados",
|
||||
"cancelButtonLabel": r"CANCELAR",
|
||||
"closeButtonLabel": r"CERRAR",
|
||||
"continueButtonLabel": r"CONTINUAR",
|
||||
"copyButtonLabel": r"COPIAR",
|
||||
"cutButtonLabel": r"CORTAR",
|
||||
"okButtonLabel": r"OK",
|
||||
"pasteButtonLabel": r"PEGAR",
|
||||
"selectAllButtonLabel": r"SELECCIONAR TODO",
|
||||
"viewLicensesButtonLabel": r"VER LICENCIAS"
|
||||
},
|
||||
"fr": const <String, String>{
|
||||
"openAppDrawerTooltip": r"Ouvrir le menu de navigation",
|
||||
"backButtonTooltip": r"Retour",
|
||||
"closeButtonTooltip": r"Fermer",
|
||||
"nextMonthTooltip": r"Mois Suivant",
|
||||
"previousMonthTooltip": r"Mois précédent",
|
||||
"nextPageTooltip": r"Page suivante",
|
||||
"previousPageTooltip": r"Page précédente",
|
||||
"showMenuTooltip": r"Afficher le menu",
|
||||
"licensesPageTitle": r"Licences",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow de $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow d'environ $rowCount",
|
||||
"rowsPerPageTitle": r"Lignes par page:",
|
||||
"selectedRowCountTitleZero": r"Aucun élément sélectionné",
|
||||
"selectedRowCountTitleOne": r"1 élément sélectionné",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount éléments sélectionnés",
|
||||
"cancelButtonLabel": r"ANNULER",
|
||||
"closeButtonLabel": r"FERMER",
|
||||
"continueButtonLabel": r"CONTINUER",
|
||||
"copyButtonLabel": r"COPIER",
|
||||
"cutButtonLabel": r"COUPER",
|
||||
"okButtonLabel": r"OK",
|
||||
"pasteButtonLabel": r"COLLER",
|
||||
"selectAllButtonLabel": r"TOUT SÉLECTIONNER",
|
||||
"viewLicensesButtonLabel": r"AFFICHER LES LICENCES"
|
||||
},
|
||||
"zh": const <String, String>{
|
||||
"openAppDrawerTooltip": r"打开导航菜单",
|
||||
"backButtonTooltip": r"返回",
|
||||
"closeButtonTooltip": r"关闭",
|
||||
"nextMonthTooltip": r"下一个月",
|
||||
"previousMonthTooltip": r"上一个月",
|
||||
"nextPageTooltip": r"下一页",
|
||||
"previousPageTooltip": r"上一页",
|
||||
"showMenuTooltip": r"显示菜单",
|
||||
"licensesPageTitle": r"许可证",
|
||||
"pageRowsInfoTitle": r"$rowCount中的$firstRow-$lastRow",
|
||||
"pageRowsInfoTitleApproximate": r"约$rowCount中的$firstRow-$lastRow",
|
||||
"rowsPerPageTitle": r"每页行数:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount行所选",
|
||||
"cancelButtonLabel": r"取消",
|
||||
"continueButtonLabel": r"继续",
|
||||
"closeButtonLabel": r"关闭",
|
||||
"copyButtonLabel": r"复制",
|
||||
"cutButtonLabel": r"剪切",
|
||||
"okButtonLabel": r"确定",
|
||||
"pasteButtonLabel": r"粘贴",
|
||||
"selectAllButtonLabel": r"全选",
|
||||
"viewLicensesButtonLabel": r"查看许可证"
|
||||
},
|
||||
"en": const <String, String>{
|
||||
"openAppDrawerTooltip": r"Open navigation menu",
|
||||
"backButtonTooltip": r"Back",
|
||||
"closeButtonTooltip": r"Close",
|
||||
"nextMonthTooltip": r"Next month",
|
||||
"previousMonthTooltip": r"Previous month",
|
||||
"nextPageTooltip": r"Next page",
|
||||
"previousPageTooltip": r"Previous page",
|
||||
"showMenuTooltip": r"Show menu",
|
||||
"licensesPageTitle": r"Licenses",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow of $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow of about $rowCount",
|
||||
"rowsPerPageTitle": r"Rows per page:",
|
||||
"selectedRowCountTitleZero": r"No items selected",
|
||||
"selectedRowCountTitleOne": r"1 item selected",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount items selected",
|
||||
"cancelButtonLabel": r"CANCEL",
|
||||
"closeButtonLabel": r"CLOSE",
|
||||
"continueButtonLabel": r"CONTINUE",
|
||||
"copyButtonLabel": r"COPY",
|
||||
"cutButtonLabel": r"CUT",
|
||||
"okButtonLabel": r"OK",
|
||||
"pasteButtonLabel": r"PASTE",
|
||||
"selectAllButtonLabel": r"SELECT ALL",
|
||||
"viewLicensesButtonLabel": r"VIEW LICENSES"
|
||||
"viewLicensesButtonLabel": r"عرض التراخيص",
|
||||
"anteMeridiemAbbreviation": r"ص",
|
||||
"postMeridiemAbbreviation": r"م"
|
||||
},
|
||||
"de": const <String, String>{
|
||||
"timeOfDayFormat": r"HH:mm",
|
||||
"openAppDrawerTooltip": r"Navigationsmenü öffnen",
|
||||
"backButtonTooltip": r"Zurück",
|
||||
"closeButtonTooltip": r"Schließen",
|
||||
@ -331,7 +65,181 @@ const Map<String, Map<String, String>> localizations = const <String, Map<String
|
||||
"selectAllButtonLabel": r"ALLES AUSWÄHLEN",
|
||||
"viewLicensesButtonLabel": r"LIZENZEN ANZEIGEN"
|
||||
},
|
||||
"en": const <String, String>{
|
||||
"timeOfDayFormat": r"h:mm a",
|
||||
"openAppDrawerTooltip": r"Open navigation menu",
|
||||
"backButtonTooltip": r"Back",
|
||||
"closeButtonTooltip": r"Close",
|
||||
"nextMonthTooltip": r"Next month",
|
||||
"previousMonthTooltip": r"Previous month",
|
||||
"nextPageTooltip": r"Next page",
|
||||
"previousPageTooltip": r"Previous page",
|
||||
"showMenuTooltip": r"Show menu",
|
||||
"licensesPageTitle": r"Licenses",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow of $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow of about $rowCount",
|
||||
"rowsPerPageTitle": r"Rows per page:",
|
||||
"selectedRowCountTitleZero": r"No items selected",
|
||||
"selectedRowCountTitleOne": r"1 item selected",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount items selected",
|
||||
"cancelButtonLabel": r"CANCEL",
|
||||
"closeButtonLabel": r"CLOSE",
|
||||
"continueButtonLabel": r"CONTINUE",
|
||||
"copyButtonLabel": r"COPY",
|
||||
"cutButtonLabel": r"CUT",
|
||||
"okButtonLabel": r"OK",
|
||||
"pasteButtonLabel": r"PASTE",
|
||||
"selectAllButtonLabel": r"SELECT ALL",
|
||||
"viewLicensesButtonLabel": r"VIEW LICENSES",
|
||||
"anteMeridiemAbbreviation": r"AM",
|
||||
"postMeridiemAbbreviation": r"PM"
|
||||
},
|
||||
"en_GB": const <String, String>{
|
||||
"timeOfDayFormat": r"HH:mm"
|
||||
},
|
||||
"en_IE": const <String, String>{
|
||||
"timeOfDayFormat": r"HH:mm"
|
||||
},
|
||||
"en_ZA": const <String, String>{
|
||||
"timeOfDayFormat": r"HH:mm"
|
||||
},
|
||||
"es": const <String, String>{
|
||||
"timeOfDayFormat": r"H:mm",
|
||||
"openAppDrawerTooltip": r"Abrir el menú de navegación",
|
||||
"backButtonTooltip": r"Espalda",
|
||||
"closeButtonTooltip": r"Cerrar",
|
||||
"nextMonthTooltip": r"Próximo mes",
|
||||
"previousMonthTooltip": r"Mes anterior",
|
||||
"nextPageTooltip": r"Siguiente página",
|
||||
"previousPageTooltip": r"Pagina anterior",
|
||||
"showMenuTooltip": r"Muestrame el menu",
|
||||
"licensesPageTitle": r"Licencias",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow de $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow de aproximadamente $rowCount",
|
||||
"rowsPerPageTitle": r"Filas por página:",
|
||||
"selectedRowCountTitleZero": r"No se han seleccionado elementos",
|
||||
"selectedRowCountTitleOne": r"1 artículo seleccionado",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount artículos seleccionados",
|
||||
"cancelButtonLabel": r"CANCELAR",
|
||||
"closeButtonLabel": r"CERRAR",
|
||||
"continueButtonLabel": r"CONTINUAR",
|
||||
"copyButtonLabel": r"COPIAR",
|
||||
"cutButtonLabel": r"CORTAR",
|
||||
"okButtonLabel": r"OK",
|
||||
"pasteButtonLabel": r"PEGAR",
|
||||
"selectAllButtonLabel": r"SELECCIONAR TODO",
|
||||
"viewLicensesButtonLabel": r"VER LICENCIAS"
|
||||
},
|
||||
"es_US": const <String, String>{
|
||||
"timeOfDayFormat": r"h:mm a"
|
||||
},
|
||||
"fa": const <String, String>{
|
||||
"timeOfDayFormat": r"H:mm",
|
||||
"openAppDrawerTooltip": r"منوی ناوبری را باز کنید",
|
||||
"backButtonTooltip": r"بازگشت",
|
||||
"closeButtonTooltip": r"بستن",
|
||||
"nextMonthTooltip": r"ماه بعد",
|
||||
"previousMonthTooltip": r"ماه گذشته",
|
||||
"nextPageTooltip": r"صفحه بعد",
|
||||
"previousPageTooltip": r"صفحه قبلی",
|
||||
"showMenuTooltip": r"نمایش منو",
|
||||
"licensesPageTitle": r"مجوز",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow از $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow از حدود $rowCount",
|
||||
"rowsPerPageTitle": r"ردیف در صفحه:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount آیتم های انتخاب شده",
|
||||
"cancelButtonLabel": r"لغو",
|
||||
"closeButtonLabel": r"بستن",
|
||||
"continueButtonLabel": r"ادامه دهید",
|
||||
"copyButtonLabel": r"کپی",
|
||||
"cutButtonLabel": r"برش",
|
||||
"okButtonLabel": r"تایید",
|
||||
"pasteButtonLabel": r"چسباندن",
|
||||
"selectAllButtonLabel": r"انتخاب همه",
|
||||
"viewLicensesButtonLabel": r"مشاهده مجوز"
|
||||
},
|
||||
"fr": const <String, String>{
|
||||
"timeOfDayFormat": r"HH:mm",
|
||||
"openAppDrawerTooltip": r"Ouvrir le menu de navigation",
|
||||
"backButtonTooltip": r"Retour",
|
||||
"closeButtonTooltip": r"Fermer",
|
||||
"nextMonthTooltip": r"Mois Suivant",
|
||||
"previousMonthTooltip": r"Mois précédent",
|
||||
"nextPageTooltip": r"Page suivante",
|
||||
"previousPageTooltip": r"Page précédente",
|
||||
"showMenuTooltip": r"Afficher le menu",
|
||||
"licensesPageTitle": r"Licences",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow de $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow d'environ $rowCount",
|
||||
"rowsPerPageTitle": r"Lignes par page:",
|
||||
"selectedRowCountTitleZero": r"Aucun élément sélectionné",
|
||||
"selectedRowCountTitleOne": r"1 élément sélectionné",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount éléments sélectionnés",
|
||||
"cancelButtonLabel": r"ANNULER",
|
||||
"closeButtonLabel": r"FERMER",
|
||||
"continueButtonLabel": r"CONTINUER",
|
||||
"copyButtonLabel": r"COPIER",
|
||||
"cutButtonLabel": r"COUPER",
|
||||
"okButtonLabel": r"OK",
|
||||
"pasteButtonLabel": r"COLLER",
|
||||
"selectAllButtonLabel": r"TOUT SÉLECTIONNER",
|
||||
"viewLicensesButtonLabel": r"AFFICHER LES LICENCES"
|
||||
},
|
||||
"fr_CA": const <String, String>{
|
||||
"timeOfDayFormat": r"HH 'h' mm"
|
||||
},
|
||||
"he": const <String, String>{
|
||||
"timeOfDayFormat": r"H:mm",
|
||||
"openAppDrawerTooltip": r"פתח תפריט ניווט",
|
||||
"backButtonTooltip": r"אחורה",
|
||||
"closeButtonTooltip": r"סגור",
|
||||
"nextMonthTooltip": r"חודש הבא",
|
||||
"previousMonthTooltip": r"חודש שעבר",
|
||||
"nextPageTooltip": r"עמוד הבא",
|
||||
"previousPageTooltip": r"עמוד קודם",
|
||||
"showMenuTooltip": r"הצג תפריט",
|
||||
"licensesPageTitle": r"רישיונות",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow מתוך $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow מתוך כ $rowCount",
|
||||
"rowsPerPageTitle": r"שורות לעמוד:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount פריטים שנבחרו",
|
||||
"cancelButtonLabel": r"ביטול",
|
||||
"closeButtonLabel": r"סגור",
|
||||
"continueButtonLabel": r"לְהַמשִׁיך",
|
||||
"copyButtonLabel": r"קיבלתי!",
|
||||
"cutButtonLabel": r"גזור",
|
||||
"okButtonLabel": r"בסדר",
|
||||
"pasteButtonLabel": r"הדבק",
|
||||
"selectAllButtonLabel": r"בחר הכל",
|
||||
"viewLicensesButtonLabel": r"ראה רישיונות"
|
||||
},
|
||||
"it": const <String, String>{
|
||||
"timeOfDayFormat": r"HH:mm",
|
||||
"openAppDrawerTooltip": r"Apri il menu di navigazione",
|
||||
"backButtonTooltip": r"Indietro",
|
||||
"closeButtonTooltip": r"Chiudi",
|
||||
"nextMonthTooltip": r"Il prossimo mese",
|
||||
"previousMonthTooltip": r"Il mese scorso",
|
||||
"nextPageTooltip": r"Pagina successiva",
|
||||
"previousPageTooltip": r"Pagina precedente",
|
||||
"showMenuTooltip": r"Mostra il menu",
|
||||
"licensesPageTitle": r"Licenze",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow di $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow di circa $rowCount",
|
||||
"rowsPerPageTitle": r"Righe per pagina:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount selezionati",
|
||||
"cancelButtonLabel": r"ANNULLA",
|
||||
"closeButtonLabel": r"CHIUDI",
|
||||
"continueButtonLabel": r"CONTINUA",
|
||||
"copyButtonLabel": r"COPY",
|
||||
"cutButtonLabel": r"TAGLIARE",
|
||||
"okButtonLabel": r"OK",
|
||||
"pasteButtonLabel": r"INCOLLA",
|
||||
"selectAllButtonLabel": r"SELEZIONA TUTTO",
|
||||
"viewLicensesButtonLabel": r"VEDI LE LICENZE"
|
||||
},
|
||||
"ja": const <String, String>{
|
||||
"timeOfDayFormat": r"H:mm",
|
||||
"openAppDrawerTooltip": r"ナビゲーションメニューを開く",
|
||||
"backButtonTooltip": r"戻る",
|
||||
"closeButtonTooltip": r"閉じる",
|
||||
@ -355,7 +263,58 @@ const Map<String, Map<String, String>> localizations = const <String, Map<String
|
||||
"selectAllButtonLabel": r"全選択",
|
||||
"viewLicensesButtonLabel": r"ライセンス表記"
|
||||
},
|
||||
"ps": const <String, String>{
|
||||
"timeOfDayFormat": r"HH:mm",
|
||||
"openAppDrawerTooltip": r"د پرانیستی نیینګ مینو",
|
||||
"backButtonTooltip": r"شاته",
|
||||
"closeButtonTooltip": r"بنده",
|
||||
"nextMonthTooltip": r"بله میاشت",
|
||||
"previousMonthTooltip": r"تیره میاشت",
|
||||
"nextPageTooltip": r"بله پاڼه",
|
||||
"previousPageTooltip": r"مخکینی مخ",
|
||||
"showMenuTooltip": r"غورنۍ ښودل",
|
||||
"licensesPageTitle": r"جوازونه",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow د $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow څخه $rowCount د",
|
||||
"rowsPerPageTitle": r"د هرې پاڼې پاڼې:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount توکي غوره شوي",
|
||||
"cancelButtonLabel": r"لغوه کول",
|
||||
"closeButtonLabel": r"تړل",
|
||||
"continueButtonLabel": r"منځپانګې",
|
||||
"copyButtonLabel": r"کاپی",
|
||||
"cutButtonLabel": r"کم کړئ",
|
||||
"okButtonLabel": r"سمه ده",
|
||||
"pasteButtonLabel": r"پیټ کړئ",
|
||||
"selectAllButtonLabel": r"غوره کړئ",
|
||||
"viewLicensesButtonLabel": r"لیدلس وګورئ"
|
||||
},
|
||||
"pt": const <String, String>{
|
||||
"timeOfDayFormat": r"HH:mm",
|
||||
"openAppDrawerTooltip": r"Abrir menu de navegação",
|
||||
"backButtonTooltip": r"Costas",
|
||||
"closeButtonTooltip": r"Fechar",
|
||||
"nextMonthTooltip": r"Próximo mês",
|
||||
"previousMonthTooltip": r"Mês anterior",
|
||||
"nextPageTooltip": r"Próxima página",
|
||||
"previousPageTooltip": r"Página anterior",
|
||||
"showMenuTooltip": r"Mostrar menu",
|
||||
"licensesPageTitle": r"Licenças",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow de $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow de cerca de $rowCount",
|
||||
"rowsPerPageTitle": r"Linhas por página:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount selecionados",
|
||||
"cancelButtonLabel": r"CANCELAR",
|
||||
"closeButtonLabel": r"FECHAR",
|
||||
"continueButtonLabel": r"CONTINUAR",
|
||||
"copyButtonLabel": r"CÓPIA DE",
|
||||
"cutButtonLabel": r"CORTA",
|
||||
"okButtonLabel": r"OK",
|
||||
"pasteButtonLabel": r"COLAR",
|
||||
"selectAllButtonLabel": r"SELECIONAR TUDO",
|
||||
"viewLicensesButtonLabel": r"VER LICENÇAS"
|
||||
},
|
||||
"ru": const <String, String>{
|
||||
"timeOfDayFormat": r"H:mm",
|
||||
"openAppDrawerTooltip": r"Открыть меню навигации",
|
||||
"backButtonTooltip": r"назад",
|
||||
"closeButtonTooltip": r"Закрыть",
|
||||
@ -378,5 +337,85 @@ const Map<String, Map<String, String>> localizations = const <String, Map<String
|
||||
"pasteButtonLabel": r"Паст",
|
||||
"selectAllButtonLabel": r"Выбрать все",
|
||||
"viewLicensesButtonLabel": r"ПРОСМОТРЕТЬ ЛИЦЕНЗИИ"
|
||||
},
|
||||
"sd": const <String, String>{
|
||||
"timeOfDayFormat": r"HH:mm",
|
||||
"openAppDrawerTooltip": r"اوپن جي مينڊيٽ مينيو",
|
||||
"backButtonTooltip": r"پوئتي",
|
||||
"closeButtonTooltip": r"بند ڪريو",
|
||||
"nextMonthTooltip": r"ايندڙ مهيني",
|
||||
"previousMonthTooltip": r"پويون مهينو",
|
||||
"nextPageTooltip": r"اڳيون پيج",
|
||||
"previousPageTooltip": r"پويون صفحو",
|
||||
"showMenuTooltip": r"ڏيکاريو",
|
||||
"licensesPageTitle": r"لائسنس",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow جي $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow کان $rowCount تقريبن",
|
||||
"rowsPerPageTitle": r"رني پاسي وارو صفحو",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount شيون چونڊيل",
|
||||
"cancelButtonLabel": r"منسوخ ڪيو",
|
||||
"closeButtonLabel": r"بند ڪريو",
|
||||
"continueButtonLabel": r"جاري رکو",
|
||||
"copyButtonLabel": r"ڪاپي",
|
||||
"cutButtonLabel": r"پٽي",
|
||||
"okButtonLabel": r"ٺيڪ آهي",
|
||||
"pasteButtonLabel": r"پيسٽ ڪريو",
|
||||
"selectAllButtonLabel": r"سڀ چونڊيو",
|
||||
"viewLicensesButtonLabel": r"لائسنس ڏسو"
|
||||
},
|
||||
"ur": const <String, String>{
|
||||
"timeOfDayFormat": r"h:mm a",
|
||||
"openAppDrawerTooltip": r"کھولیں نیویگیشن مینو",
|
||||
"backButtonTooltip": r"واپس",
|
||||
"closeButtonTooltip": r"بند کریں",
|
||||
"nextMonthTooltip": r"اگلا مھینہ",
|
||||
"previousMonthTooltip": r"پچھلا مھینہ",
|
||||
"nextPageTooltip": r"اگلا صفحہ",
|
||||
"previousPageTooltip": r"سابقہ صفحہ",
|
||||
"showMenuTooltip": r"مینو دکھائیں",
|
||||
"licensesPageTitle": r"لائسنس",
|
||||
"pageRowsInfoTitle": r"$firstRow–$lastRow کے $rowCount",
|
||||
"pageRowsInfoTitleApproximate": r"$firstRow–$lastRow میں سے $rowCount تقریبا",
|
||||
"rowsPerPageTitle": r"رویوں فی صفحہ:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount منتخب کردہ اشیاء",
|
||||
"cancelButtonLabel": r"منسوخ کریں",
|
||||
"closeButtonLabel": r"بند کریں",
|
||||
"continueButtonLabel": r"جاری رکھیں",
|
||||
"copyButtonLabel": r"کاپی",
|
||||
"cutButtonLabel": r"کاٹیں",
|
||||
"okButtonLabel": r"ٹھیک ہے",
|
||||
"pasteButtonLabel": r"چسپاں",
|
||||
"selectAllButtonLabel": r"تکاپیمام منتخب کریں",
|
||||
"viewLicensesButtonLabel": r"لائسنس دیکھیں",
|
||||
"anteMeridiemAbbreviation": r"AM",
|
||||
"postMeridiemAbbreviation": r"PM"
|
||||
},
|
||||
"zh": const <String, String>{
|
||||
"timeOfDayFormat": r"ah:mm",
|
||||
"openAppDrawerTooltip": r"打开导航菜单",
|
||||
"backButtonTooltip": r"背部",
|
||||
"closeButtonTooltip": r"关",
|
||||
"nextMonthTooltip": r"-下月就29了。",
|
||||
"previousMonthTooltip": r"前一个月",
|
||||
"nextPageTooltip": r"下一页",
|
||||
"previousPageTooltip": r"上一页",
|
||||
"showMenuTooltip": r"显示菜单",
|
||||
"licensesPageTitle": r"许可证",
|
||||
"pageRowsInfoTitle": r"$rowCount中的$firstRow-$lastRow",
|
||||
"pageRowsInfoTitleApproximate": r"约$rowCount中的$firstRow-$lastRow",
|
||||
"rowsPerPageTitle": r"每页行数:",
|
||||
"selectedRowCountTitleOther": r"$selectedRowCount行所选",
|
||||
"cancelButtonLabel": r"取消",
|
||||
"continueButtonLabel": r"继续",
|
||||
"closeButtonLabel": r"关闭",
|
||||
"copyButtonLabel": r"复制",
|
||||
"cutButtonLabel": r"剪切",
|
||||
"okButtonLabel": r"确定",
|
||||
"pasteButtonLabel": r"粘贴",
|
||||
"selectAllButtonLabel": r"全选",
|
||||
"viewLicensesButtonLabel": r"查看许可证",
|
||||
"anteMeridiemAbbreviation": r"上午",
|
||||
"postMeridiemAbbreviation": r"下午"
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "h:mm a",
|
||||
"openAppDrawerTooltip": "افتح قائمة التنقل",
|
||||
"backButtonTooltip": "الى الخلف",
|
||||
"closeButtonTooltip": "إغلا",
|
||||
@ -20,5 +21,7 @@
|
||||
"okButtonLabel": "حسنا",
|
||||
"pasteButtonLabel": "عجين",
|
||||
"selectAllButtonLabel": "اختر الكل",
|
||||
"viewLicensesButtonLabel": "عرض التراخيص"
|
||||
"viewLicensesButtonLabel": "عرض التراخيص",
|
||||
"anteMeridiemAbbreviation": "ص",
|
||||
"postMeridiemAbbreviation": "م"
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "HH:mm",
|
||||
"openAppDrawerTooltip": "Navigationsmenü öffnen",
|
||||
"backButtonTooltip": "Zurück",
|
||||
"closeButtonTooltip": "Schließen",
|
||||
|
@ -1,4 +1,10 @@
|
||||
{
|
||||
"timeOfDayFormat": "h:mm a",
|
||||
"@timeOfDayFormat": {
|
||||
"description": "The ICU 'Short Time' pattern, such as 'HH:mm', 'h:mm a', 'H:mm'. See: http://demo.icu-project.org/icu-bin/locexp?d_=en&_=en_US",
|
||||
"type": "text"
|
||||
},
|
||||
|
||||
"openAppDrawerTooltip": "Open navigation menu",
|
||||
"@openAppDrawerTooltip": {
|
||||
"description": "The tooltip for the leading AppBar menu (aka 'hamburger') button",
|
||||
@ -126,5 +132,17 @@
|
||||
"@viewLicensesButtonLabel": {
|
||||
"description": "The label for the about box's view licenses button.",
|
||||
"type": "text"
|
||||
},
|
||||
|
||||
"anteMeridiemAbbreviation": "AM",
|
||||
"@anteMeridiemAbbreviation": {
|
||||
"description": "The abbreviation for ante meridiem (before noon) shown in the time picker.",
|
||||
"type": "text"
|
||||
},
|
||||
|
||||
"postMeridiemAbbreviation": "PM",
|
||||
"@postMeridiemAbbreviation": {
|
||||
"description": "The abbreviation for post meridiem (after noon) shown in the time picker.",
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"timeOfDayFormat": "HH:mm"
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"timeOfDayFormat": "HH:mm"
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"timeOfDayFormat": "HH:mm"
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "H:mm",
|
||||
"openAppDrawerTooltip": "Abrir el menú de navegación",
|
||||
"backButtonTooltip": "Espalda",
|
||||
"closeButtonTooltip": "Cerrar",
|
||||
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"timeOfDayFormat": "h:mm a"
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "H:mm",
|
||||
"openAppDrawerTooltip": "منوی ناوبری را باز کنید",
|
||||
"backButtonTooltip": "بازگشت",
|
||||
"closeButtonTooltip": "بستن",
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "HH:mm",
|
||||
"openAppDrawerTooltip": "Ouvrir le menu de navigation",
|
||||
"backButtonTooltip": "Retour",
|
||||
"closeButtonTooltip": "Fermer",
|
||||
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"timeOfDayFormat": "HH 'h' mm"
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "H:mm",
|
||||
"openAppDrawerTooltip": "פתח תפריט ניווט",
|
||||
"backButtonTooltip": "אחורה",
|
||||
"closeButtonTooltip": "סגור",
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "HH:mm",
|
||||
"openAppDrawerTooltip": "Apri il menu di navigazione",
|
||||
"backButtonTooltip": "Indietro",
|
||||
"closeButtonTooltip": "Chiudi",
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "H:mm",
|
||||
"openAppDrawerTooltip": "ナビゲーションメニューを開く",
|
||||
"backButtonTooltip": "戻る",
|
||||
"closeButtonTooltip": "閉じる",
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "HH:mm",
|
||||
"openAppDrawerTooltip": "د پرانیستی نیینګ مینو",
|
||||
"backButtonTooltip": "شاته",
|
||||
"closeButtonTooltip": "بنده",
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "HH:mm",
|
||||
"openAppDrawerTooltip": "Abrir menu de navegação",
|
||||
"backButtonTooltip": "Costas",
|
||||
"closeButtonTooltip": "Fechar",
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "H:mm",
|
||||
"openAppDrawerTooltip": "Открыть меню навигации",
|
||||
"backButtonTooltip": "назад",
|
||||
"closeButtonTooltip": "Закрыть",
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "HH:mm",
|
||||
"openAppDrawerTooltip": "اوپن جي مينڊيٽ مينيو",
|
||||
"backButtonTooltip": "پوئتي",
|
||||
"closeButtonTooltip": "بند ڪريو",
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "h:mm a",
|
||||
"openAppDrawerTooltip": "کھولیں نیویگیشن مینو",
|
||||
"backButtonTooltip": "واپس",
|
||||
"closeButtonTooltip": "بند کریں",
|
||||
@ -20,5 +21,7 @@
|
||||
"okButtonLabel": "ٹھیک ہے",
|
||||
"pasteButtonLabel": "چسپاں",
|
||||
"selectAllButtonLabel": "تکاپیمام منتخب کریں",
|
||||
"viewLicensesButtonLabel": "لائسنس دیکھیں"
|
||||
"viewLicensesButtonLabel": "لائسنس دیکھیں",
|
||||
"anteMeridiemAbbreviation": "AM",
|
||||
"postMeridiemAbbreviation": "PM"
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"timeOfDayFormat": "ah:mm",
|
||||
"openAppDrawerTooltip": "打开导航菜单",
|
||||
"backButtonTooltip": "返回",
|
||||
"closeButtonTooltip": "关闭",
|
||||
@ -20,5 +21,11 @@
|
||||
"okButtonLabel": "确定",
|
||||
"pasteButtonLabel": "粘贴",
|
||||
"selectAllButtonLabel": "全选",
|
||||
"viewLicensesButtonLabel": "查看许可证"
|
||||
"viewLicensesButtonLabel": "查看许可证",
|
||||
"backButtonTooltip": "背部",
|
||||
"closeButtonTooltip": "关",
|
||||
"nextMonthTooltip": "-下月就29了。",
|
||||
"previousMonthTooltip": "前一个月",
|
||||
"anteMeridiemAbbreviation": "上午",
|
||||
"postMeridiemAbbreviation": "下午"
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import 'package:intl/intl.dart' as intl;
|
||||
|
||||
import 'i18n/localizations.dart';
|
||||
|
||||
/// Defines the localized resource values used by the Material widgts.
|
||||
/// Defines the localized resource values used by the Material widgets.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
@ -80,6 +80,18 @@ abstract class MaterialLocalizations {
|
||||
/// Label for the [AboutBox] button that shows the [LicensePage].
|
||||
String get viewLicensesButtonLabel;
|
||||
|
||||
/// The abbreviation for ante meridiem (before noon) shown in the time picker.
|
||||
String get anteMeridiemAbbreviation;
|
||||
|
||||
/// The abbreviation for post meridiem (after noon) shown in the time picker.
|
||||
String get postMeridiemAbbreviation;
|
||||
|
||||
/// The format used to lay out the time picker.
|
||||
///
|
||||
/// The documentation for [TimeOfDayFormat] enum values provides details on
|
||||
/// each supported layout.
|
||||
TimeOfDayFormat get timeOfDayFormat;
|
||||
|
||||
/// The `MaterialLocalizations` from the closest [Localizations] instance
|
||||
/// that encloses the given context.
|
||||
///
|
||||
@ -99,25 +111,30 @@ abstract class MaterialLocalizations {
|
||||
|
||||
/// Localized strings for the material widgets.
|
||||
class DefaultMaterialLocalizations implements MaterialLocalizations {
|
||||
/// Construct an object that defines the material widgets' localized strings
|
||||
/// Constructs an object that defines the material widgets' localized strings
|
||||
/// for the given `locale`.
|
||||
///
|
||||
/// [LocalizationsDelegate] implementations typically call the static [load]
|
||||
/// function, rather than constructing this class directly.
|
||||
DefaultMaterialLocalizations(this.locale) {
|
||||
factory DefaultMaterialLocalizations(Locale locale) {
|
||||
assert(locale != null);
|
||||
_nameToValue = localizations[_localeName]
|
||||
?? localizations[locale.languageCode]
|
||||
?? localizations['en']
|
||||
?? <String, String>{};
|
||||
|
||||
final Map<String, String> result = <String, String>{};
|
||||
if (localizations.containsKey(locale.languageCode))
|
||||
result.addAll(localizations[locale.languageCode]);
|
||||
if (localizations.containsKey(locale.toString()))
|
||||
result.addAll(localizations[locale.toString()]);
|
||||
return new DefaultMaterialLocalizations._(locale, result);
|
||||
}
|
||||
|
||||
Map<String, String> _nameToValue;
|
||||
DefaultMaterialLocalizations._(this.locale, this._nameToValue);
|
||||
|
||||
/// The locale for which the values of this class's localized resources
|
||||
/// have been translated.
|
||||
final Locale locale;
|
||||
|
||||
final Map<String, String> _nameToValue;
|
||||
|
||||
String get _localeName {
|
||||
final String localeName = locale.countryCode.isEmpty ? locale.languageCode : locale.toString();
|
||||
return intl.Intl.canonicalizedLocale(localeName);
|
||||
@ -224,6 +241,47 @@ class DefaultMaterialLocalizations implements MaterialLocalizations {
|
||||
@override
|
||||
String get viewLicensesButtonLabel => _nameToValue['viewLicensesButtonLabel'];
|
||||
|
||||
@override
|
||||
String get anteMeridiemAbbreviation => _nameToValue['anteMeridiemAbbreviation'];
|
||||
|
||||
@override
|
||||
String get postMeridiemAbbreviation => _nameToValue['postMeridiemAbbreviation'];
|
||||
|
||||
/// The [TimeOfDayFormat] corresponding to one of the following supported
|
||||
/// patterns:
|
||||
///
|
||||
/// * `HH:mm`
|
||||
/// * `HH.mm`
|
||||
/// * `HH 'h' mm`
|
||||
/// * `HH:mm น.`
|
||||
/// * `H:mm`
|
||||
/// * `h:mm a`
|
||||
/// * `a h:mm`
|
||||
/// * `ah:mm`
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * http://demo.icu-project.org/icu-bin/locexp?d_=en&_=en_US shows the
|
||||
/// short time pattern used in locale en_US
|
||||
@override
|
||||
TimeOfDayFormat get timeOfDayFormat {
|
||||
final String icuShortTimePattern = _nameToValue['timeOfDayFormat'];
|
||||
|
||||
assert(() {
|
||||
if (!_icuTimeOfDayToEnum.containsKey(icuShortTimePattern)) {
|
||||
throw new FlutterError(
|
||||
'"$icuShortTimePattern" is not one of the ICU short time patterns '
|
||||
'supported by the material library. Here is the list of supported '
|
||||
'patterns:\n ' +
|
||||
_icuTimeOfDayToEnum.keys.join('\n ')
|
||||
);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
return _icuTimeOfDayToEnum[icuShortTimePattern];
|
||||
}
|
||||
|
||||
/// Creates an object that provides localized resource values for the
|
||||
/// for the widgets of the material library.
|
||||
///
|
||||
@ -233,3 +291,66 @@ class DefaultMaterialLocalizations implements MaterialLocalizations {
|
||||
return new SynchronousFuture<MaterialLocalizations>(new DefaultMaterialLocalizations(locale));
|
||||
}
|
||||
}
|
||||
|
||||
const Map<String, TimeOfDayFormat> _icuTimeOfDayToEnum = const <String, TimeOfDayFormat>{
|
||||
'HH:mm': TimeOfDayFormat.HH_colon_mm,
|
||||
'HH.mm': TimeOfDayFormat.HH_dot_mm,
|
||||
"HH 'h' mm": TimeOfDayFormat.frenchCanadian,
|
||||
'HH:mm น.': TimeOfDayFormat.HH_colon_mm,
|
||||
'H:mm': TimeOfDayFormat.H_colon_mm,
|
||||
'h:mm a': TimeOfDayFormat.h_colon_mm_space_a,
|
||||
'a h:mm': TimeOfDayFormat.a_space_h_colon_mm,
|
||||
'ah:mm': TimeOfDayFormat.a_space_h_colon_mm,
|
||||
};
|
||||
|
||||
/// Determines how the time picker invoked using [showTimePicker] formats and
|
||||
/// lays out the time controls.
|
||||
///
|
||||
/// The time picker provides layout configurations optimized for each of the
|
||||
/// enum values.
|
||||
enum TimeOfDayFormat {
|
||||
/// Corresponds to the ICU 'HH:mm' pattern.
|
||||
///
|
||||
/// This format uses 24-hour two-digit zero-padded hours. Controls are always
|
||||
/// laid out horizontally. Hours are separated from minutes by one colon
|
||||
/// character.
|
||||
HH_colon_mm,
|
||||
|
||||
/// Corresponds to the ICU 'HH.mm' pattern.
|
||||
///
|
||||
/// This format uses 24-hour two-digit zero-padded hours. Controls are always
|
||||
/// laid out horizontally. Hours are separated from minutes by one dot
|
||||
/// character.
|
||||
HH_dot_mm,
|
||||
|
||||
/// Corresponds to the ICU "HH 'h' mm" pattern used in Canadian French.
|
||||
///
|
||||
/// This format uses 24-hour two-digit zero-padded hours. Controls are always
|
||||
/// laid out horizontally. Hours are separated from minutes by letter 'h'.
|
||||
frenchCanadian,
|
||||
|
||||
/// Corresponds to the ICU 'H:mm' pattern.
|
||||
///
|
||||
/// This format uses 24-hour non-padded variable-length hours. Controls are
|
||||
/// always laid out horizontally. Hours are separated from minutes by one
|
||||
/// colon character.
|
||||
H_colon_mm,
|
||||
|
||||
/// Corresponds to the ICU 'h:mm a' pattern.
|
||||
///
|
||||
/// This format uses 12-hour non-padded variable-length hours with a day
|
||||
/// period. Controls are laid out horizontally in portrait mode. In landscape
|
||||
/// mode, the day period appears vertically after (consistent with the ambient
|
||||
/// [TextDirection]) hour-minute indicator. Hours are separated from minutes
|
||||
/// by one colon character.
|
||||
h_colon_mm_space_a,
|
||||
|
||||
/// Corresponds to the ICU 'a h:mm' pattern.
|
||||
///
|
||||
/// This format uses 12-hour non-padded variable-length hours with a day
|
||||
/// period. Controls are laid out horizontally in portrait mode. In landscape
|
||||
/// mode, the day period appears vertically before (consistent with the
|
||||
/// ambient [TextDirection]) hour-minute indicator. Hours are separated from
|
||||
/// minutes by one colon character.
|
||||
a_space_h_colon_mm,
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -43,7 +43,7 @@ AxisDirection _getDefaultCrossAxisDirection(BuildContext context, AxisDirection
|
||||
/// example, if the [axisDirection] is [AxisDirection.down], the first sliver
|
||||
/// before [center] is placed above the [center]. The slivers that are later in
|
||||
/// the child list than [center] are placed in order in the [axisDirection]. For
|
||||
/// example, in the preceeding scenario, the first sliver after [center] is
|
||||
/// example, in the preceding scenario, the first sliver after [center] is
|
||||
/// placed below the [center].
|
||||
///
|
||||
/// [Viewport] cannot contain box children directly. Instead, use a
|
||||
|
@ -2,19 +2,24 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import 'feedback_tester.dart';
|
||||
|
||||
class _TimePickerLauncher extends StatelessWidget {
|
||||
const _TimePickerLauncher({ Key key, this.onChanged }) : super(key: key);
|
||||
const _TimePickerLauncher({ Key key, this.onChanged, this.locale }) : super(key: key);
|
||||
|
||||
final ValueChanged<TimeOfDay> onChanged;
|
||||
final Locale locale;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return new MaterialApp(
|
||||
locale: locale,
|
||||
home: new Material(
|
||||
child: new Center(
|
||||
child: new Builder(
|
||||
@ -36,15 +41,18 @@ class _TimePickerLauncher extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
Future<Offset> startPicker(WidgetTester tester, ValueChanged<TimeOfDay> onChanged) async {
|
||||
await tester.pumpWidget(new _TimePickerLauncher(onChanged: onChanged));
|
||||
Future<Offset> startPicker(WidgetTester tester, ValueChanged<TimeOfDay> onChanged,
|
||||
{ Locale locale: const Locale('en', 'US') }) async {
|
||||
await tester.pumpWidget(new _TimePickerLauncher(onChanged: onChanged, locale: locale,));
|
||||
await tester.tap(find.text('X'));
|
||||
await tester.pumpAndSettle(const Duration(seconds: 1));
|
||||
return tester.getCenter(find.byKey(const Key('time-picker-dial')));
|
||||
}
|
||||
|
||||
Future<Null> finishPicker(WidgetTester tester) async {
|
||||
await tester.tap(find.text('OK'));
|
||||
final Element timePickerElement = tester.element(find.byElementPredicate((Element element) => element.widget.runtimeType.toString() == '_TimePickerDialog'));
|
||||
final MaterialLocalizations materialLocalizations = MaterialLocalizations.of(timePickerElement);
|
||||
await tester.tap(find.text(materialLocalizations.okButtonLabel));
|
||||
await tester.pumpAndSettle(const Duration(seconds: 1));
|
||||
}
|
||||
|
||||
@ -197,4 +205,78 @@ void main() {
|
||||
expect(feedback.hapticCount, 3);
|
||||
});
|
||||
});
|
||||
|
||||
group('localization', () {
|
||||
testWidgets('can localize the header in all known formats', (WidgetTester tester) async {
|
||||
// TODO(yjbanov): also test `HH.mm` (in_ID), `a h:mm` (ko_KR) and `HH:mm น.` (th_TH) when we have .arb files for them
|
||||
final Map<Locale, List<String>> locales = <Locale, List<String>>{
|
||||
const Locale('en', 'US'): const <String>['hour h', 'string :', 'minute', 'period'], //'h:mm a'
|
||||
const Locale('en', 'GB'): const <String>['hour HH', 'string :', 'minute'], //'HH:mm'
|
||||
const Locale('es', 'ES'): const <String>['hour H', 'string :', 'minute'], //'H:mm'
|
||||
const Locale('fr', 'CA'): const <String>['hour HH', 'string h', 'minute'], //'HH \'h\' mm'
|
||||
const Locale('zh', 'ZH'): const <String>['period', 'hour h', 'string :', 'minute'], //'ah:mm'
|
||||
};
|
||||
|
||||
for (Locale locale in locales.keys) {
|
||||
final Offset center = await startPicker(tester, (TimeOfDay time) { }, locale: locale);
|
||||
final List<String> actual = <String>[];
|
||||
tester.element(find.byType(CustomMultiChildLayout)).visitChildren((Element child) {
|
||||
final LayoutId layout = child.widget;
|
||||
final String fragmentType = '${layout.child.runtimeType}';
|
||||
final dynamic widget = layout.child;
|
||||
if (fragmentType == '_MinuteControl') {
|
||||
actual.add('minute');
|
||||
} else if (fragmentType == '_DayPeriodControl') {
|
||||
actual.add('period');
|
||||
} else if (fragmentType == '_HourControl') {
|
||||
actual.add('hour ${widget.hourFormat.toString().split('.').last}');
|
||||
} else if (fragmentType == '_StringFragment') {
|
||||
actual.add('string ${widget.value}');
|
||||
} else {
|
||||
fail('Unsupported fragment type: $fragmentType');
|
||||
}
|
||||
});
|
||||
expect(actual, locales[locale]);
|
||||
await tester.tapAt(new Offset(center.dx, center.dy - 50.0));
|
||||
await finishPicker(tester);
|
||||
}
|
||||
});
|
||||
|
||||
testWidgets('uses single-ring 12-hour dial for h hour format', (WidgetTester tester) async {
|
||||
// Tap along the segment stretching from the center to the edge at
|
||||
// 12:00 AM position. Because there's only one ring, no matter where you
|
||||
// tap the time will be the same. See the 24-hour dial test that behaves
|
||||
// differently.
|
||||
for (int i = 1; i < 10; i++) {
|
||||
TimeOfDay result;
|
||||
final Offset center = await startPicker(tester, (TimeOfDay time) { result = time; });
|
||||
final Size size = tester.getSize(find.byKey(const Key('time-picker-dial')));
|
||||
final double dy = (size.height / 2.0 / 10) * i;
|
||||
await tester.tapAt(new Offset(center.dx, center.dy - dy));
|
||||
await finishPicker(tester);
|
||||
expect(result, equals(const TimeOfDay(hour: 0, minute: 0)));
|
||||
}
|
||||
});
|
||||
|
||||
testWidgets('uses two-ring 24-hour dial for H and HH hour formats', (WidgetTester tester) async {
|
||||
const List<Locale> locales = const <Locale>[
|
||||
const Locale('en', 'GB'), // HH
|
||||
const Locale('es', 'ES'), // H
|
||||
];
|
||||
for (Locale locale in locales) {
|
||||
// Tap along the segment stretching from the center to the edge at
|
||||
// 12:00 AM position. There are two rings. At ~70% mark, the ring
|
||||
// switches between inner ring and outer ring.
|
||||
for (int i = 1; i < 10; i++) {
|
||||
TimeOfDay result;
|
||||
final Offset center = await startPicker(tester, (TimeOfDay time) { result = time; }, locale: locale);
|
||||
final Size size = tester.getSize(find.byKey(const Key('time-picker-dial')));
|
||||
final double dy = (size.height / 2.0 / 10) * i;
|
||||
await tester.tapAt(new Offset(center.dx, center.dy - dy));
|
||||
await finishPicker(tester);
|
||||
expect(result, equals(new TimeOfDay(hour: i < 7 ? 12 : 0, minute: 0)));
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user