import 'gen/app_localizations.dart'; extension PluriAppLocalizationsExt on AppLocalizations { String _lang() { final locale = localeName.toLowerCase(); if (locale.startsWith('es')) return 'es'; if (locale.startsWith('en')) return 'en'; if (locale.startsWith('fr')) return 'fr'; if (locale.startsWith('de')) return 'de'; if (locale.startsWith('it')) return 'it'; if (locale.startsWith('pt')) return 'pt'; if (locale.startsWith('ru')) return 'ru'; if (locale.startsWith('ja')) return 'ja'; if (locale.startsWith('zh')) return 'zh'; if (locale.startsWith('ar')) return 'ar'; if (locale.startsWith('hi')) return 'hi'; if (locale.startsWith('bn')) return 'bn'; if (locale.startsWith('id')) return 'id'; return 'en'; } String _pick(Map values) => values[_lang()] ?? values['en'] ?? values.values.first; String weekdayLong(int day) => switch (day) { DateTime.monday => _pick({ 'es': 'lunes', 'en': 'Monday', 'fr': 'lundi', 'de': 'Montag', 'it': 'lunedì', 'pt': 'segunda-feira', 'ru': 'понедельник', 'ja': '月曜日', 'zh': '星期一', 'ar': 'الإثنين', 'hi': 'सोमवार', 'bn': 'সোমবার', 'id': 'Senin', }), DateTime.tuesday => _pick({ 'es': 'martes', 'en': 'Tuesday', 'fr': 'mardi', 'de': 'Dienstag', 'it': 'martedì', 'pt': 'terça-feira', 'ru': 'вторник', 'ja': '火曜日', 'zh': '星期二', 'ar': 'الثلاثاء', 'hi': 'मंगलवार', 'bn': 'মঙ্গলবার', 'id': 'Selasa', }), DateTime.wednesday => _pick({ 'es': 'miércoles', 'en': 'Wednesday', 'fr': 'mercredi', 'de': 'Mittwoch', 'it': 'mercoledì', 'pt': 'quarta-feira', 'ru': 'среда', 'ja': '水曜日', 'zh': '星期三', 'ar': 'الأربعاء', 'hi': 'बुधवार', 'bn': 'বুধবার', 'id': 'Rabu', }), DateTime.thursday => _pick({ 'es': 'jueves', 'en': 'Thursday', 'fr': 'jeudi', 'de': 'Donnerstag', 'it': 'giovedì', 'pt': 'quinta-feira', 'ru': 'четверг', 'ja': '木曜日', 'zh': '星期四', 'ar': 'الخميس', 'hi': 'गुरुवार', 'bn': 'বৃহস্পতিবার', 'id': 'Kamis', }), DateTime.friday => _pick({ 'es': 'viernes', 'en': 'Friday', 'fr': 'vendredi', 'de': 'Freitag', 'it': 'venerdì', 'pt': 'sexta-feira', 'ru': 'пятница', 'ja': '金曜日', 'zh': '星期五', 'ar': 'الجمعة', 'hi': 'शुक्रवार', 'bn': 'শুক্রবার', 'id': 'Jumat', }), DateTime.saturday => _pick({ 'es': 'sábado', 'en': 'Saturday', 'fr': 'samedi', 'de': 'Samstag', 'it': 'sabato', 'pt': 'sábado', 'ru': 'суббота', 'ja': '土曜日', 'zh': '星期六', 'ar': 'السبت', 'hi': 'शनिवार', 'bn': 'শনিবার', 'id': 'Sabtu', }), DateTime.sunday => _pick({ 'es': 'domingo', 'en': 'Sunday', 'fr': 'dimanche', 'de': 'Sonntag', 'it': 'domenica', 'pt': 'domingo', 'ru': 'воскресенье', 'ja': '日曜日', 'zh': '星期日', 'ar': 'الأحد', 'hi': 'रविवार', 'bn': 'রবিবার', 'id': 'Minggu', }), _ => _pick({ 'es': 'día', 'en': 'day', 'fr': 'jour', 'de': 'Tag', 'it': 'giorno', 'pt': 'dia', 'ru': 'день', 'ja': '日', 'zh': '日', 'ar': 'يوم', 'hi': 'दिन', 'bn': 'দিন', 'id': 'hari', }), }; String monthName(int month) => switch (month) { 1 => _pick({ 'es': 'enero', 'en': 'January', 'fr': 'janvier', 'de': 'Januar', 'it': 'gennaio', 'pt': 'janeiro', 'ru': 'января', 'ja': '1月', 'zh': '1月', 'ar': 'يناير', 'hi': 'जनवरी', 'bn': 'জানুয়ারি', 'id': 'Januari', }), 2 => _pick({ 'es': 'febrero', 'en': 'February', 'fr': 'février', 'de': 'Februar', 'it': 'febbraio', 'pt': 'fevereiro', 'ru': 'февраля', 'ja': '2月', 'zh': '2月', 'ar': 'فبراير', 'hi': 'फ़रवरी', 'bn': 'ফেব্রুয়ারি', 'id': 'Februari', }), 3 => _pick({ 'es': 'marzo', 'en': 'March', 'fr': 'mars', 'de': 'März', 'it': 'marzo', 'pt': 'março', 'ru': 'марта', 'ja': '3月', 'zh': '3月', 'ar': 'مارس', 'hi': 'मार्च', 'bn': 'মার্চ', 'id': 'Maret', }), 4 => _pick({ 'es': 'abril', 'en': 'April', 'fr': 'avril', 'de': 'April', 'it': 'aprile', 'pt': 'abril', 'ru': 'апреля', 'ja': '4月', 'zh': '4月', 'ar': 'أبريل', 'hi': 'अप्रैल', 'bn': 'এপ্রিল', 'id': 'April', }), 5 => _pick({ 'es': 'mayo', 'en': 'May', 'fr': 'mai', 'de': 'Mai', 'it': 'maggio', 'pt': 'maio', 'ru': 'мая', 'ja': '5月', 'zh': '5月', 'ar': 'مايو', 'hi': 'मई', 'bn': 'মে', 'id': 'Mei', }), 6 => _pick({ 'es': 'junio', 'en': 'June', 'fr': 'juin', 'de': 'Juni', 'it': 'giugno', 'pt': 'junho', 'ru': 'июня', 'ja': '6月', 'zh': '6月', 'ar': 'يونيو', 'hi': 'जून', 'bn': 'জুন', 'id': 'Juni', }), 7 => _pick({ 'es': 'julio', 'en': 'July', 'fr': 'juillet', 'de': 'Juli', 'it': 'luglio', 'pt': 'julho', 'ru': 'июля', 'ja': '7月', 'zh': '7月', 'ar': 'يوليو', 'hi': 'जुलाई', 'bn': 'জুলাই', 'id': 'Juli', }), 8 => _pick({ 'es': 'agosto', 'en': 'August', 'fr': 'août', 'de': 'August', 'it': 'agosto', 'pt': 'agosto', 'ru': 'августа', 'ja': '8月', 'zh': '8月', 'ar': 'أغسطس', 'hi': 'अगस्त', 'bn': 'আগস্ট', 'id': 'Agustus', }), 9 => _pick({ 'es': 'septiembre', 'en': 'September', 'fr': 'septembre', 'de': 'September', 'it': 'settembre', 'pt': 'setembro', 'ru': 'сентября', 'ja': '9月', 'zh': '9月', 'ar': 'سبتمبر', 'hi': 'सितंबर', 'bn': 'সেপ্টেম্বর', 'id': 'September', }), 10 => _pick({ 'es': 'octubre', 'en': 'October', 'fr': 'octobre', 'de': 'Oktober', 'it': 'ottobre', 'pt': 'outubro', 'ru': 'октября', 'ja': '10月', 'zh': '10月', 'ar': 'أكتوبر', 'hi': 'अक्टूबर', 'bn': 'অক্টোবর', 'id': 'Oktober', }), 11 => _pick({ 'es': 'noviembre', 'en': 'November', 'fr': 'novembre', 'de': 'November', 'it': 'novembre', 'pt': 'novembro', 'ru': 'ноября', 'ja': '11月', 'zh': '11月', 'ar': 'نوفمبر', 'hi': 'नवंबर', 'bn': 'নভেম্বর', 'id': 'November', }), 12 => _pick({ 'es': 'diciembre', 'en': 'December', 'fr': 'décembre', 'de': 'Dezember', 'it': 'dicembre', 'pt': 'dezembro', 'ru': 'декабря', 'ja': '12月', 'zh': '12月', 'ar': 'ديسمبر', 'hi': 'दिसंबर', 'bn': 'ডিসেম্বর', 'id': 'Desember', }), _ => _pick({ 'es': 'mes', 'en': 'month', 'fr': 'mois', 'de': 'Monat', 'it': 'mese', 'pt': 'mês', 'ru': 'месяц', 'ja': '月', 'zh': '月', 'ar': 'شهر', 'hi': 'महीना', 'bn': 'মাস', 'id': 'bulan', }), }; String dateTimeSentence(DateTime date) { final local = date.toLocal(); final hm = '${local.hour.toString().padLeft(2, '0')}:${local.minute.toString().padLeft(2, '0')}'; return _pick({ 'es': '${weekdayLong(local.weekday)} ${local.day} de ${monthName(local.month)} a las $hm', 'en': '${weekdayLong(local.weekday)}, ${monthName(local.month)} ${local.day} at $hm', 'fr': '${weekdayLong(local.weekday)} ${local.day} ${monthName(local.month)} à $hm', 'de': '${weekdayLong(local.weekday)}, ${local.day}. ${monthName(local.month)} um $hm', 'it': '${weekdayLong(local.weekday)} ${local.day} ${monthName(local.month)} alle $hm', 'pt': '${weekdayLong(local.weekday)}, ${local.day} de ${monthName(local.month)} às $hm', 'ru': '${weekdayLong(local.weekday)}, ${local.day} ${monthName(local.month)} в $hm', 'ja': '${monthName(local.month)}${local.day}日(${weekdayLong(local.weekday)})$hm', 'zh': '${monthName(local.month)}${local.day}日 ${weekdayLong(local.weekday)} $hm', 'ar': '${weekdayLong(local.weekday)} ${local.day} ${monthName(local.month)} في $hm', 'hi': '${weekdayLong(local.weekday)}, ${local.day} ${monthName(local.month)} $hm बजे', 'bn': '${weekdayLong(local.weekday)}, ${local.day} ${monthName(local.month)} $hm', 'id': '${weekdayLong(local.weekday)}, ${local.day} ${monthName(local.month)} pukul $hm', }); } }