698 lines
19 KiB
Dart
Executable File
698 lines
19 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');
|
||
const Locale ptBrL = Locale('pt', 'BR');
|
||
|
||
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,
|
||
ptBrL
|
||
];
|
||
}
|
||
}
|
||
|
||
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,
|
||
// 巴西葡萄牙语
|
||
brazilianPortuguese,
|
||
}
|
||
|
||
extension ExtensionLanguageType on LanguageType {
|
||
String get lanTitle {
|
||
var str = '';
|
||
switch (this) {
|
||
case LanguageType.english:
|
||
str = '英文'.tr + '(English)';
|
||
break;
|
||
case LanguageType.chinese:
|
||
str = '简体中文'.tr + '(Simplified Chinese)';
|
||
break;
|
||
case LanguageType.traditionalChineseTW:
|
||
str = '繁体中文(中国台湾)'.tr + '(Traditional Chinese TW)';
|
||
break;
|
||
case LanguageType.traditionalChineseHK:
|
||
str = '繁体中文(中国香港)'.tr + '(Traditional Chinese HK)';
|
||
break;
|
||
case LanguageType.french:
|
||
str = '法语'.tr + '(French)';
|
||
break;
|
||
case LanguageType.russian:
|
||
str = '俄语'.tr + '(Russian)';
|
||
break;
|
||
case LanguageType.german:
|
||
str = '德语'.tr + '(German)';
|
||
break;
|
||
case LanguageType.japanese:
|
||
str = '日语'.tr + '(Japanese)';
|
||
break;
|
||
case LanguageType.korean:
|
||
str = '韩语'.tr + '(Korean)';
|
||
break;
|
||
case LanguageType.italian:
|
||
str = '意大利语'.tr + '(Italian)';
|
||
break;
|
||
case LanguageType.portuguese:
|
||
str = '葡萄牙语'.tr + '(Portuguese)';
|
||
break;
|
||
case LanguageType.spanish:
|
||
str = '西班牙语'.tr + '(Spanish)';
|
||
break;
|
||
case LanguageType.arabic:
|
||
str = '阿拉伯语'.tr + '(Arabic)';
|
||
break;
|
||
case LanguageType.vietnamese:
|
||
str = '越南语'.tr + '(Vietnamese)';
|
||
break;
|
||
case LanguageType.malay:
|
||
str = '马来语'.tr + '(Malay)';
|
||
break;
|
||
case LanguageType.dutch:
|
||
str = '荷兰语'.tr + '(Dutch)';
|
||
break;
|
||
case LanguageType.romanian:
|
||
str = '罗马尼亚语'.tr + '(Romanian)';
|
||
break;
|
||
case LanguageType.lithuanian:
|
||
str = '立陶宛语'.tr + '(Lithuanian)';
|
||
break;
|
||
case LanguageType.swedish:
|
||
str = '瑞典语'.tr + '(Swedish)';
|
||
break;
|
||
case LanguageType.estonian:
|
||
str = '爱沙尼亚语'.tr + '(Estonian)';
|
||
break;
|
||
case LanguageType.polish:
|
||
str = '波兰语'.tr + '(Polish)';
|
||
break;
|
||
case LanguageType.slovak:
|
||
str = '斯洛伐克语'.tr + '(Slovak)';
|
||
break;
|
||
case LanguageType.czech:
|
||
str = '捷克语'.tr + '(Czech)';
|
||
break;
|
||
case LanguageType.greek:
|
||
str = '希腊语'.tr + '(Greek)';
|
||
break;
|
||
case LanguageType.hebrew:
|
||
str = '希伯来语'.tr + '(Hebrew)';
|
||
break;
|
||
case LanguageType.serbian:
|
||
str = '塞尔维亚语'.tr + '(Serbian)';
|
||
break;
|
||
case LanguageType.turkish:
|
||
str = '土耳其语'.tr + '(Turkish)';
|
||
break;
|
||
case LanguageType.hungarian:
|
||
str = '匈牙利语'.tr + '(Hungarian)';
|
||
break;
|
||
case LanguageType.bulgarian:
|
||
str = '保加利亚语'.tr + '(Bulgarian)';
|
||
break;
|
||
case LanguageType.kazakh:
|
||
str = '哈萨克斯坦语'.tr + '(Kazakh)';
|
||
break;
|
||
case LanguageType.bengali:
|
||
str = '孟加拉语'.tr + '(Bengali)';
|
||
break;
|
||
case LanguageType.croatian:
|
||
str = '克罗地亚语'.tr + '(Croatian)';
|
||
break;
|
||
case LanguageType.thai:
|
||
str = '泰语'.tr + '(Thai)';
|
||
break;
|
||
case LanguageType.indonesian:
|
||
str = '印度尼西亚语'.tr + '(Indonesian)';
|
||
break;
|
||
case LanguageType.finnish:
|
||
str = '芬兰语'.tr + '(Finnish)';
|
||
break;
|
||
case LanguageType.danish:
|
||
str = '丹麦语'.tr + '(Danish)';
|
||
break;
|
||
case LanguageType.ukrainian:
|
||
str = '乌克兰语'.tr + '(Ukrainian)';
|
||
break;
|
||
case LanguageType.hindi:
|
||
str = '印地语'.tr + '(Hindi)';
|
||
break;
|
||
case LanguageType.urdu:
|
||
str = '乌尔都语'.tr + '(Urdu)';
|
||
break;
|
||
case LanguageType.armenian:
|
||
str = '亚美尼亚语'.tr + '(Armenian)';
|
||
break;
|
||
case LanguageType.georgian:
|
||
str = '格鲁吉亚语'.tr + '(Georgian)';
|
||
break;
|
||
case LanguageType.brazilianPortuguese:
|
||
str = '巴西葡萄牙语'.tr + '(Brazilian Portuguese)';
|
||
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':
|
||
if (countryCode.toLowerCase() == 'br') {
|
||
languageType = LanguageType.brazilianPortuguese;
|
||
} else {
|
||
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.brazilianPortuguese:
|
||
if (locale.languageCode == 'pt' && locale.countryCode == 'BR') {
|
||
return locale;
|
||
}
|
||
break;
|
||
case LanguageType.system:
|
||
// TODO: Handle this case.
|
||
break;
|
||
}
|
||
}
|
||
return const Locale('en', 'US');
|
||
}
|
||
}
|