682 lines
18 KiB
Dart
Executable File
682 lines
18 KiB
Dart
Executable File
import 'dart:ui';
|
|
import 'package:get/get.dart';
|
|
import 'package:star_lock/app_settings/app_settings.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<Locale> 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', 'HR');
|
|
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 hiL = Locale('hi', 'IN');
|
|
const Locale urL = Locale('ur', 'PK');
|
|
const Locale hyL = Locale('hy', 'AM');
|
|
const Locale kaL = Locale('ka', 'GE');
|
|
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,
|
|
hiL,
|
|
urL,
|
|
hyL,
|
|
kaL,
|
|
srCyrillic
|
|
];
|
|
}
|
|
}
|
|
|
|
AppDept appDept = ExtensionAppDept.fromAppPackageName(AppManager().packageName);
|
|
|
|
final List<Locale> 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,
|
|
//印地语、
|
|
hindi,
|
|
//乌尔都语
|
|
urdu,
|
|
//亚美尼亚语
|
|
armenian,
|
|
//格鲁吉亚语
|
|
georgian,
|
|
}
|
|
|
|
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;
|
|
case LanguageType.hindi:
|
|
str = '印地语'.tr;
|
|
break;
|
|
case LanguageType.urdu:
|
|
str = '乌尔都语'.tr;
|
|
break;
|
|
case LanguageType.armenian:
|
|
str = '亚美尼亚语'.tr;
|
|
break;
|
|
case LanguageType.georgian:
|
|
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;
|
|
case 'hi':
|
|
languageType = LanguageType.hindi;
|
|
break;
|
|
case 'ur':
|
|
languageType = LanguageType.urdu;
|
|
break;
|
|
case 'hy':
|
|
languageType = LanguageType.armenian;
|
|
break;
|
|
case 'ka':
|
|
languageType = LanguageType.georgian;
|
|
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 == 'HR') {
|
|
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.hindi:
|
|
if (locale.languageCode == 'hi' && locale.countryCode == 'HI') {
|
|
return locale;
|
|
}
|
|
break;
|
|
case LanguageType.urdu:
|
|
if (locale.languageCode == 'ur' && locale.countryCode == 'UR') {
|
|
return locale;
|
|
}
|
|
break;
|
|
case LanguageType.armenian:
|
|
if (locale.languageCode == 'hy' && locale.countryCode == 'AM') {
|
|
return locale;
|
|
}
|
|
break;
|
|
case LanguageType.georgian:
|
|
if (locale.languageCode == 'ka' && locale.countryCode == 'GE') {
|
|
return locale;
|
|
}
|
|
break;
|
|
case LanguageType.system:
|
|
// TODO: Handle this case.
|
|
break;
|
|
}
|
|
}
|
|
return const Locale('en', 'US');
|
|
}
|
|
}
|