import 'dart:ui'; import 'package:get/get.dart'; import '../tools/app_manager.dart'; enum AppDept { starLock, } extension ExtensionAppDept on AppDept { static AppDept fromAppPackageName(String packageName) { AppDept dept = AppDept.starLock; packageName = packageName.toLowerCase(); if (packageName.contains('starLock')) { dept = AppDept.starLock; } return dept; } List get deptSupportedLocales { const Locale enL = Locale('en', 'US'); const Locale zhL = Locale('zh', 'CN'); const Locale twL = Locale('zh', 'TW'); const Locale hkL = Locale('zh', 'HK'); const Locale frL = Locale('fr', 'FR'); const Locale ruL = Locale('ru', 'RU'); const Locale deL = Locale('de', 'DE'); const Locale jaL = Locale('ja', 'JP'); const Locale koL = Locale('ko', 'KR'); const Locale itL = Locale('it', 'IT'); const Locale ptL = Locale('pt', 'PT'); const Locale esL = Locale('es', 'ES'); const Locale arL = Locale('ar', 'SA'); const Locale viL = Locale('vi', 'VN'); const Locale msL = Locale('ms', 'MY'); const Locale nlL = Locale('nl', 'NL'); const Locale roL = Locale('ro', 'RO'); const Locale ltL = Locale('lt', 'LT'); const Locale svL = Locale('sv', 'SE'); const Locale etL = Locale('et', 'EE'); const Locale plL = Locale('pl', 'PL'); const Locale skL = Locale('sk', 'SK'); const Locale csL = Locale('cs', 'CZ'); const Locale elL = Locale('el', 'GR'); const Locale heL = Locale('he', 'IL'); const Locale trL = Locale('tr', 'TR'); const Locale huL = Locale('hu', 'HU'); const Locale bgL = Locale('bg', 'BG'); const Locale kkL = Locale('kk', 'KZ'); const Locale bnL = Locale('bn', 'BD'); const Locale hbsL = Locale('hr', 'BA'); const Locale thL = Locale('th', 'TH'); const Locale idL = Locale('id', 'ID'); const Locale fiL = Locale('fi', 'FI'); const Locale daL = Locale('da', 'DK'); const Locale ukL = Locale('uk', 'UA'); const Locale srCyrillic = Locale('sr', 'RS'); return [ enL, zhL, twL, hkL, frL, ruL, deL, jaL, koL, itL, ptL, esL, arL, viL, msL, nlL, roL, ltL, svL, etL, plL, skL, csL, elL, heL, trL, huL, bgL, kkL, bnL, hbsL, thL, idL, fiL, daL, ukL, srCyrillic ]; } } AppDept appDept = ExtensionAppDept.fromAppPackageName(AppManager().packageName); final List appSupportedLocales = appDept.deptSupportedLocales; enum LanguageType { system, chinese, english, // 繁体中文(中国台湾) traditionalChineseTW, // 繁体中文(中国香港) traditionalChineseHK, // 法语 french, // 俄语 russian, // 德语 german, // 日语 japanese, // 韩语 korean, // 意大利语 italian, // 乌克兰语 // ukrainian, // 葡萄牙语 portuguese, // 西班牙语 spanish, // 阿拉伯语 arabic, // 越南语 vietnamese, // 马莱语 malay, // 荷兰语 dutch, // 罗马尼亚语 romanian, // 立陶宛语 lithuanian, // 瑞典语 swedish, // 爱沙尼亚语 estonian, // 波兰语 polish, // 斯洛伐克语 slovak, // 捷克语 czech, // 希腊语 greek, // 希伯来语 hebrew, // 塞尔维亚语(西里尔文) serbian, // 土耳其语 turkish, // 匈牙利语 hungarian, // 保加利亚语 bulgarian, // 哈萨克斯坦语 kazakh, // 孟加拉语 bengali, // 克罗地亚语 croatian, // 泰语 thai, // 印度尼西亚语 indonesian, // 芬兰语 finnish, // 丹麦语 danish, // 乌克兰语 ukrainian } extension ExtensionLanguageType on LanguageType { String get lanTitle { var str = ''; switch (this) { case LanguageType.english: str = '英文'.tr; break; case LanguageType.chinese: str = '简体中文'.tr; break; case LanguageType.traditionalChineseTW: str = '繁体中文(中国台湾)'.tr; break; case LanguageType.traditionalChineseHK: str = '繁体中文(中国香港)'.tr; break; case LanguageType.french: str = '法语'.tr; break; case LanguageType.russian: str = '俄语'.tr; break; case LanguageType.german: str = '德语'.tr; break; case LanguageType.japanese: str = '日语'.tr; break; case LanguageType.korean: str = '韩语'.tr; break; case LanguageType.italian: str = '意大利语'.tr; break; case LanguageType.portuguese: str = '葡萄牙语'.tr; break; case LanguageType.spanish: str = '西班牙语'.tr; break; case LanguageType.arabic: str = '阿拉伯语'.tr; break; case LanguageType.vietnamese: str = '越南语'.tr; break; case LanguageType.malay: str = '马来语'.tr; break; case LanguageType.dutch: str = '荷兰语'.tr; break; case LanguageType.romanian: str = '罗马尼亚语'.tr; break; case LanguageType.lithuanian: str = '立陶宛语'.tr; break; case LanguageType.swedish: str = '瑞典语'.tr; break; case LanguageType.estonian: str = '爱沙尼亚语'.tr; break; case LanguageType.polish: str = '波兰语'.tr; break; case LanguageType.slovak: str = '斯洛伐克语'.tr; break; case LanguageType.czech: str = '捷克语'.tr; break; case LanguageType.greek: str = '希腊语'.tr; break; case LanguageType.hebrew: str = '希伯来语'.tr; break; case LanguageType.serbian: str = '塞尔维亚语'.tr; break; case LanguageType.turkish: str = '土耳其语'.tr; break; case LanguageType.hungarian: str = '匈牙利语'.tr; break; case LanguageType.bulgarian: str = '保加利亚语'.tr; break; case LanguageType.kazakh: str = '哈萨克斯坦语'.tr; break; case LanguageType.bengali: str = '孟加拉语'.tr; break; case LanguageType.croatian: str = '克罗地亚语'.tr; break; case LanguageType.thai: str = '泰语'.tr; break; case LanguageType.indonesian: str = '印度尼西亚语'.tr; break; case LanguageType.finnish: str = '芬兰语'.tr; break; case LanguageType.danish: str = '丹麦语'.tr; break; case LanguageType.ukrainian: str = '乌克兰语'.tr; break; } return str; } static LanguageType fromLocale(Locale locale) { LanguageType languageType = LanguageType.english; final String code = locale.languageCode; final String countryCode = locale.countryCode ?? ''; switch (code.toLowerCase()) { case 'en': languageType = LanguageType.english; break; case 'zh': if (countryCode.toLowerCase() == 'cn') { languageType = LanguageType.chinese; } else if (countryCode.toLowerCase() == 'tw') { languageType = LanguageType.traditionalChineseTW; } else if (countryCode.toLowerCase() == 'hk') { languageType = LanguageType.traditionalChineseHK; } break; case 'fr': languageType = LanguageType.french; break; case 'ru': languageType = LanguageType.russian; break; case 'de': languageType = LanguageType.german; break; case 'ja': languageType = LanguageType.japanese; break; case 'ko': languageType = LanguageType.korean; break; case 'it': languageType = LanguageType.italian; break; case 'pt': languageType = LanguageType.portuguese; break; case 'es': languageType = LanguageType.spanish; break; case 'ar': languageType = LanguageType.arabic; break; case 'vi': languageType = LanguageType.vietnamese; break; case 'ms': languageType = LanguageType.malay; break; case 'nl': languageType = LanguageType.dutch; break; case 'ro': languageType = LanguageType.romanian; break; case 'lt': languageType = LanguageType.lithuanian; break; case 'sv': languageType = LanguageType.swedish; break; case 'et': languageType = LanguageType.estonian; break; case 'pl': languageType = LanguageType.polish; break; case 'sk': languageType = LanguageType.slovak; break; case 'cs': languageType = LanguageType.czech; break; case 'el': languageType = LanguageType.greek; break; case 'he': languageType = LanguageType.hebrew; break; case 'sr': languageType = LanguageType.serbian; break; case 'tr': languageType = LanguageType.turkish; break; case 'hu': languageType = LanguageType.hungarian; break; case 'bg': languageType = LanguageType.bulgarian; break; case 'kk': languageType = LanguageType.kazakh; break; case 'bn': languageType = LanguageType.bengali; break; case 'hr': languageType = LanguageType.croatian; break; case 'th': languageType = LanguageType.thai; break; case 'id': languageType = LanguageType.indonesian; break; case 'fi': languageType = LanguageType.finnish; break; case 'da': languageType = LanguageType.danish; break; case 'uk': languageType = LanguageType.ukrainian; break; default: languageType = LanguageType.english; break; } return languageType; } static Locale fromLanguageType(LanguageType languageType) { for (Locale locale in appDept.deptSupportedLocales) { switch (languageType) { case LanguageType.english: if (locale.languageCode == 'en' && locale.countryCode == 'US') { return locale; } break; case LanguageType.chinese: if (locale.languageCode == 'zh' && locale.countryCode == 'CN') { return locale; } break; case LanguageType.traditionalChineseTW: if (locale.languageCode == 'zh' && locale.countryCode == 'TW') { return locale; } break; case LanguageType.traditionalChineseHK: if (locale.languageCode == 'zh' && locale.countryCode == 'HK') { return locale; } break; case LanguageType.french: if (locale.languageCode == 'fr' && locale.countryCode == 'FR') { return locale; } break; case LanguageType.russian: if (locale.languageCode == 'ru' && locale.countryCode == 'RU') { return locale; } break; case LanguageType.german: if (locale.languageCode == 'de' && locale.countryCode == 'DE') { return locale; } break; case LanguageType.japanese: if (locale.languageCode == 'ja' && locale.countryCode == 'JP') { return locale; } break; case LanguageType.korean: if (locale.languageCode == 'ko' && locale.countryCode == 'KR') { return locale; } break; case LanguageType.italian: if (locale.languageCode == 'it' && locale.countryCode == 'IT') { return locale; } break; case LanguageType.portuguese: if (locale.languageCode == 'pt' && locale.countryCode == 'PT') { return locale; } break; case LanguageType.spanish: if (locale.languageCode == 'es' && locale.countryCode == 'ES') { return locale; } break; case LanguageType.arabic: if (locale.languageCode == 'ar' && locale.countryCode == 'SA') { return locale; } break; case LanguageType.vietnamese: if (locale.languageCode == 'vi' && locale.countryCode == 'VN') { return locale; } break; case LanguageType.malay: if (locale.languageCode == 'ms' && locale.countryCode == 'MY') { return locale; } break; case LanguageType.dutch: if (locale.languageCode == 'nl' && locale.countryCode == 'NL') { return locale; } break; case LanguageType.romanian: if (locale.languageCode == 'ro' && locale.countryCode == 'RO') { return locale; } break; case LanguageType.lithuanian: if (locale.languageCode == 'lt' && locale.countryCode == 'LT') { return locale; } break; case LanguageType.swedish: if (locale.languageCode == 'sv' && locale.countryCode == 'SE') { return locale; } break; case LanguageType.estonian: if (locale.languageCode == 'et' && locale.countryCode == 'EE') { return locale; } break; case LanguageType.polish: if (locale.languageCode == 'pl' && locale.countryCode == 'PL') { return locale; } break; case LanguageType.slovak: if (locale.languageCode == 'sk' && locale.countryCode == 'SK') { return locale; } break; case LanguageType.czech: if (locale.languageCode == 'cs' && locale.countryCode == 'CZ') { return locale; } break; case LanguageType.greek: if (locale.languageCode == 'el' && locale.countryCode == 'GR') { return locale; } break; case LanguageType.hebrew: if (locale.languageCode == 'he' && locale.countryCode == 'IL') { return locale; } break; case LanguageType.serbian: if (locale.languageCode == 'sr' && locale.countryCode == 'RS') { return locale; } break; case LanguageType.turkish: if (locale.languageCode == 'tr' && locale.countryCode == 'TR') { return locale; } break; case LanguageType.hungarian: if (locale.languageCode == 'hu' && locale.countryCode == 'HU') { return locale; } break; case LanguageType.bulgarian: if (locale.languageCode == 'bg' && locale.countryCode == 'BG') { return locale; } break; case LanguageType.kazakh: if (locale.languageCode == 'kk' && locale.countryCode == 'KZ') { return locale; } break; case LanguageType.bengali: if (locale.languageCode == 'bn' && locale.countryCode == 'BD') { return locale; } break; case LanguageType.croatian: if (locale.languageCode == 'hr' && locale.countryCode == 'BA') { return locale; } break; case LanguageType.thai: if (locale.languageCode == 'th' && locale.countryCode == 'TH') { return locale; } break; case LanguageType.indonesian: if (locale.languageCode == 'id' && locale.countryCode == 'ID') { return locale; } break; case LanguageType.finnish: if (locale.languageCode == 'fi' && locale.countryCode == 'FI') { return locale; } break; case LanguageType.danish: if (locale.languageCode == 'da' && locale.countryCode == 'DK') { return locale; } break; case LanguageType.ukrainian: if (locale.languageCode == 'uk' && locale.countryCode == 'UA') { return locale; } break; case LanguageType.system: // TODO: Handle this case. break; } } return const Locale('en', 'US'); } }