593 lines
15 KiB
TypeScript
593 lines
15 KiB
TypeScript
export const countryMap = {
|
||
BO: "Bolivia, Plurinational State of",
|
||
CG: "Congo, Republic of the",
|
||
KP: "North Korea",
|
||
KR: "South Korea",
|
||
MD: "Moldova, Republic of",
|
||
RU: "Russia",
|
||
VA: "Holy See",
|
||
AF: "Afghanistan",
|
||
AL: "Albania",
|
||
DZ: "Algeria",
|
||
AD: "Andorra",
|
||
AO: "Angola",
|
||
AG: "Antigua and Barbuda",
|
||
AR: "Argentina",
|
||
AM: "Armenia",
|
||
AU: "Australia",
|
||
AT: "Austria",
|
||
AZ: "Azerbaijan",
|
||
BS: "Bahamas",
|
||
BH: "Bahrain",
|
||
BD: "Bangladesh",
|
||
BB: "Barbados",
|
||
BY: "Belarus",
|
||
BE: "Belgium",
|
||
BZ: "Belize",
|
||
BJ: "Benin",
|
||
BT: "Bhutan",
|
||
BA: "Bosnia and Herzegovina",
|
||
BW: "Botswana",
|
||
BR: "Brazil",
|
||
BN: "Brunei Darussalam",
|
||
BG: "Bulgaria",
|
||
BF: "Burkina Faso",
|
||
BI: "Burundi",
|
||
CV: "Cabo Verde",
|
||
KH: "Cambodia",
|
||
CM: "Cameroon",
|
||
CA: "Canada",
|
||
CF: "Central African Republic",
|
||
TD: "Chad",
|
||
CL: "Chile",
|
||
CN: "China",
|
||
CO: "Colombia",
|
||
KM: "Comoros",
|
||
CD: "Congo, Democratic Republic of the",
|
||
CR: "Costa Rica",
|
||
CI: "Côte d'Ivoire",
|
||
HR: "Croatia",
|
||
CU: "Cuba",
|
||
CY: "Cyprus",
|
||
CZ: "Czechia",
|
||
DK: "Denmark",
|
||
DJ: "Djibouti",
|
||
DM: "Dominica",
|
||
DO: "Dominican Republic",
|
||
EC: "Ecuador",
|
||
EG: "Egypt",
|
||
SV: "El Salvador",
|
||
GQ: "Equatorial Guinea",
|
||
ER: "Eritrea",
|
||
EE: "Estonia",
|
||
SZ: "Eswatini",
|
||
ET: "Ethiopia",
|
||
FJ: "Fiji",
|
||
FI: "Finland",
|
||
FR: "France",
|
||
GA: "Gabon",
|
||
GM: "Gambia",
|
||
GE: "Georgia",
|
||
DE: "Germany",
|
||
GH: "Ghana",
|
||
GR: "Greece",
|
||
GD: "Grenada",
|
||
GT: "Guatemala",
|
||
GN: "Guinea",
|
||
GW: "Guinea-Bissau",
|
||
GY: "Guyana",
|
||
HT: "Haiti",
|
||
HN: "Honduras",
|
||
HU: "Hungary",
|
||
HK: "Hong Kong,China",
|
||
IS: "Iceland",
|
||
IN: "India",
|
||
ID: "Indonesia",
|
||
IR: "Iran",
|
||
IQ: "Iraq",
|
||
IE: "Ireland",
|
||
IL: "Israel",
|
||
IT: "Italy",
|
||
JM: "Jamaica",
|
||
JP: "Japan",
|
||
JO: "Jordan",
|
||
KZ: "Kazakhstan",
|
||
KE: "Kenya",
|
||
KI: "Kiribati",
|
||
KW: "Kuwait",
|
||
KG: "Kyrgyzstan",
|
||
LA: "Lao People's Democratic Republic",
|
||
LV: "Latvia",
|
||
LB: "Lebanon",
|
||
LS: "Lesotho",
|
||
LR: "Liberia",
|
||
LY: "Libya",
|
||
LI: "Liechtenstein",
|
||
LT: "Lithuania",
|
||
LU: "Luxembourg",
|
||
MG: "Madagascar",
|
||
MW: "Malawi",
|
||
MY: "Malaysia",
|
||
MV: "Maldives",
|
||
ML: "Mali",
|
||
MT: "Malta",
|
||
MH: "Marshall Islands",
|
||
MR: "Mauritania",
|
||
MU: "Mauritius",
|
||
MX: "Mexico",
|
||
FM: "Micronesia, Federated States of",
|
||
MC: "Monaco",
|
||
MN: "Mongolia",
|
||
ME: "Montenegro",
|
||
MA: "Morocco",
|
||
MZ: "Mozambique",
|
||
MM: "Myanmar",
|
||
NA: "Namibia",
|
||
NR: "Nauru",
|
||
NP: "Nepal",
|
||
NL: "Netherlands",
|
||
NZ: "New Zealand",
|
||
NI: "Nicaragua",
|
||
NE: "Niger",
|
||
NG: "Nigeria",
|
||
NU: "Niue",
|
||
MK: "North Macedonia",
|
||
NO: "Norway",
|
||
OM: "Oman",
|
||
PK: "Pakistan",
|
||
PW: "Palau",
|
||
PA: "Panama",
|
||
PG: "Papua New Guinea",
|
||
PY: "Paraguay",
|
||
PE: "Peru",
|
||
PH: "Philippines",
|
||
PL: "Poland",
|
||
PT: "Portugal",
|
||
QA: "Qatar",
|
||
RO: "Romania",
|
||
RW: "Rwanda",
|
||
KN: "Saint Kitts and Nevis",
|
||
LC: "Saint Lucia",
|
||
VC: "Saint Vincent and the Grenadines",
|
||
WS: "Samoa",
|
||
SM: "San Marino",
|
||
ST: "Sao Tome and Principe",
|
||
SA: "Saudi Arabia",
|
||
SN: "Senegal",
|
||
RS: "Serbia",
|
||
SC: "Seychelles",
|
||
SL: "Sierra Leone",
|
||
SG: "Singapore",
|
||
SK: "Slovakia",
|
||
SI: "Slovenia",
|
||
SB: "Solomon Islands",
|
||
SO: "Somalia",
|
||
ZA: "South Africa",
|
||
SS: "South Sudan",
|
||
ES: "Spain",
|
||
LK: "Sri Lanka",
|
||
SD: "Sudan",
|
||
SR: "Suriname",
|
||
SE: "Sweden",
|
||
CH: "Switzerland",
|
||
SY: "Syrian Arab Republic",
|
||
TJ: "Tajikistan",
|
||
TZ: "Tanzania",
|
||
TH: "Thailand",
|
||
TL: "Timor-Leste",
|
||
TG: "Togo",
|
||
TK: "Tokelau",
|
||
TO: "Tonga",
|
||
TT: "Trinidad and Tobago",
|
||
TN: "Tunisia",
|
||
TR: "Turkey",
|
||
TM: "Turkmenistan",
|
||
TV: "Tuvalu",
|
||
UG: "Uganda",
|
||
UA: "Ukraine",
|
||
AE: "United Arab Emirates",
|
||
GB: "United Kingdom",
|
||
US: "United States",
|
||
UY: "Uruguay",
|
||
UZ: "Uzbekistan",
|
||
VU: "Vanuatu",
|
||
VE: "Venezuela",
|
||
VN: "Vietnam",
|
||
YE: "Yemen",
|
||
ZM: "Zambia",
|
||
ZW: "Zimbabwe",
|
||
AQ: "Antarctica",
|
||
AS: "American Samoa",
|
||
AX: "Åland Islands",
|
||
BM: "Bermuda",
|
||
MO: "Macao,China",
|
||
PS: "Palestine, State of",
|
||
PR: "Puerto Rico",
|
||
TW: "Taiwan,China",
|
||
XK: "Kosovo",
|
||
};
|
||
|
||
export const getCountryName = (code: string) => {
|
||
return countryMap[code.toUpperCase()] || code;
|
||
};
|
||
|
||
const vendorMap = [
|
||
// 手机厂商
|
||
{ prefix: /^CPH/i, vendor: "OPPO" }, // OPPO 智能手机
|
||
{ prefix: /^V\d/i, vendor: "Vivo" }, // Vivo 智能手机
|
||
{ prefix: /^(M\d|220\d|230\d|240\d)/i, vendor: "Xiaomi" }, // 小米/Redmi 智能手机
|
||
{ prefix: /^RMX/i, vendor: "Realme" }, // Realme 智能手机
|
||
{ prefix: /^SM-/i, vendor: "Samsung" }, // 三星智能手机/平板
|
||
{
|
||
prefix: /^(ANA|STF|VOG|JNY|LYA|TAS|DBR|ADY|FNE|REP|NOP|ROD)/i,
|
||
vendor: "Huawei",
|
||
},
|
||
{ prefix: /^iPhone/i, vendor: "iPhone" }, // 苹果 iPhone
|
||
{ prefix: /^(IN|KB|LE|CPH\d{4})/i, vendor: "OnePlus" }, // OnePlus 智能手机
|
||
{ prefix: /^(TA-\d|\d{4}$)/i, vendor: "Nokia" }, // 诺基亚智能手机/功能机
|
||
{ prefix: /^XQ-/i, vendor: "Sony" }, // 索尼 Xperia 智能手机
|
||
{ prefix: /^XT/i, vendor: "Motorola" }, // 摩托罗拉智能手机
|
||
{ prefix: /^(GP|G[0-9A-Z]{3})/i, vendor: "Google" }, // Google Pixel 智能手机
|
||
{ prefix: /^LM-/i, vendor: "LG" }, // LG 智能手机
|
||
{ prefix: /^ASUS-/i, vendor: "Asus" }, // 华硕智能手机
|
||
|
||
// 平板厂商
|
||
{ prefix: /^iPad/i, vendor: "Apple" }, // 苹果 iPad
|
||
{ prefix: /^(TBL-|TB-)/i, vendor: "Lenovo" }, // 联想平板
|
||
|
||
// 电脑厂商
|
||
{ prefix: /^MacBook/i, vendor: "MacBook" }, // 苹果 MacBook
|
||
{ prefix: /^(A1\d{2}|A2\d{2})/i, vendor: "Apple" }, // 苹果 MacBook 内部型号
|
||
{ prefix: /^(XPS|Latitude|Inspiron)/i, vendor: "Dell" }, // 戴尔笔记本
|
||
{ prefix: /^(Pavilion|EliteBook|ProBook|Envy)/i, vendor: "HP" }, // 惠普电脑
|
||
{ prefix: /^(ThinkPad|IdeaPad|Legion)/i, vendor: "Lenovo" }, // 联想笔记本
|
||
{ prefix: /^(ROG|ZenBook|VivoBook|G[5-9]|Strix)/i, vendor: "Asus" }, // 华硕笔记本
|
||
{ prefix: /^(Acer-|Predator|Nitro)/i, vendor: "Acer" }, // 宏碁笔记本/游戏设备
|
||
{ prefix: /^Surface/i, vendor: "Microsoft" }, // 微软 Surface
|
||
{ prefix: /^(MateBook|MagicBook)/i, vendor: "Huawei" }, // 华为笔记本
|
||
|
||
// 其他设备
|
||
{ prefix: /^Watch/i, vendor: "Apple Watch" }, // 苹果 Watch
|
||
{ prefix: /^GT-/i, vendor: "Huawei Watch" }, // 华为手表
|
||
{ prefix: /^MiBand/i, vendor: "Xiaomi Watch" }, // 小米手环
|
||
];
|
||
|
||
export const getDeviceVendor = (model: string) => {
|
||
const upperModel = model.toUpperCase();
|
||
for (const { prefix, vendor } of vendorMap) {
|
||
if (typeof prefix === "string" && upperModel.startsWith(prefix)) {
|
||
return vendor;
|
||
} else if (prefix instanceof RegExp && prefix.test(upperModel)) {
|
||
return vendor;
|
||
}
|
||
}
|
||
return model;
|
||
};
|
||
|
||
export function getRegionName(regionCode: string) {
|
||
const regionMap = {
|
||
// Vercel/Cloudflare 地区代码
|
||
hkg1: "Hong Kong",
|
||
sin1: "Singapore",
|
||
iad1: "Washington D.C. (US East)",
|
||
gru1: "São Paulo (Brazil)",
|
||
sfo1: "San Francisco (US West)",
|
||
cdg1: "Paris (France)",
|
||
cle1: "Cleveland (US Central)",
|
||
cpt1: "Cape Town (South Africa)",
|
||
|
||
// AWS 地区代码
|
||
"us-east-1": "N. Virginia (US East)",
|
||
"us-west-1": "N. California (US West)",
|
||
"us-west-2": "Oregon (US West)",
|
||
"eu-west-1": "Ireland (Europe)",
|
||
"eu-central-1": "Frankfurt (Europe)",
|
||
"ap-southeast-1": "Singapore (Asia Pacific)",
|
||
"ap-northeast-1": "Tokyo (Asia Pacific)",
|
||
"ap-south-1": "Mumbai (Asia Pacific)",
|
||
|
||
// Cloudflare 地区代码
|
||
lhr: "London (UK)",
|
||
fra: "Frankfurt (Germany)",
|
||
ams: "Amsterdam (Netherlands)",
|
||
nrt: "Tokyo (Japan)",
|
||
icn: "Seoul (South Korea)",
|
||
syd: "Sydney (Australia)",
|
||
yyz: "Toronto (Canada)",
|
||
mia: "Miami (US Southeast)",
|
||
lax: "Los Angeles (US West)",
|
||
ord: "Chicago (US Central)",
|
||
atl: "Atlanta (US Southeast)",
|
||
dfw: "Dallas (US Central)",
|
||
sea: "Seattle (US West)",
|
||
bos: "Boston (US Northeast)",
|
||
ewr: "Newark (US Northeast)",
|
||
jfk: "New York (US Northeast)",
|
||
|
||
// 其他常见地区代码
|
||
pdx1: "Portland (US West)",
|
||
bom1: "Mumbai (India)",
|
||
syd1: "Sydney (Australia)",
|
||
nrt1: "Tokyo (Japan)",
|
||
fra1: "Frankfurt (Germany)",
|
||
lon1: "London (UK)",
|
||
ams1: "Amsterdam (Netherlands)",
|
||
tor1: "Toronto (Canada)",
|
||
nyc1: "New York (US East)",
|
||
dub1: "Dublin (Ireland)",
|
||
blr1: "Bangalore (India)",
|
||
sgp1: "Singapore",
|
||
hnd1: "Tokyo Haneda (Japan)",
|
||
kix1: "Osaka (Japan)",
|
||
icn1: "Seoul (South Korea)",
|
||
bkk1: "Bangkok (Thailand)",
|
||
mnl1: "Manila (Philippines)",
|
||
jkt1: "Jakarta (Indonesia)",
|
||
mel1: "Melbourne (Australia)",
|
||
per1: "Perth (Australia)",
|
||
akl1: "Auckland (New Zealand)",
|
||
mad1: "Madrid (Spain)",
|
||
bcn1: "Barcelona (Spain)",
|
||
mxp1: "Milan (Italy)",
|
||
vie1: "Vienna (Austria)",
|
||
zrh1: "Zurich (Switzerland)",
|
||
sto1: "Stockholm (Sweden)",
|
||
hel1: "Helsinki (Finland)",
|
||
cph1: "Copenhagen (Denmark)",
|
||
osl1: "Oslo (Norway)",
|
||
waw1: "Warsaw (Poland)",
|
||
prg1: "Prague (Czech Republic)",
|
||
bud1: "Budapest (Hungary)",
|
||
buh1: "Bucharest (Romania)",
|
||
sof1: "Sofia (Bulgaria)",
|
||
ath1: "Athens (Greece)",
|
||
ist1: "Istanbul (Turkey)",
|
||
tlv1: "Tel Aviv (Israel)",
|
||
cai1: "Cairo (Egypt)",
|
||
jnb1: "Johannesburg (South Africa)",
|
||
lag1: "Lagos (Nigeria)",
|
||
nbo1: "Nairobi (Kenya)",
|
||
dxb1: "Dubai (UAE)",
|
||
bah1: "Bahrain",
|
||
khi1: "Karachi (Pakistan)",
|
||
del1: "Delhi (India)",
|
||
ccj1: "Kolkata (India)",
|
||
maa1: "Chennai (India)",
|
||
hyd1: "Hyderabad (India)",
|
||
pnq1: "Pune (India)",
|
||
};
|
||
|
||
return regionMap[regionCode.toLowerCase()] || regionCode.toUpperCase();
|
||
}
|
||
|
||
export function getLanguageName(langCode: string) {
|
||
// 统一转换为小写处理大小写不一致
|
||
const normalizedCode = langCode.toLowerCase();
|
||
|
||
const languageMap = {
|
||
// 英语系列
|
||
en: "English",
|
||
"en-us": "English (United States)",
|
||
"en-gb": "English (United Kingdom)",
|
||
"en-ca": "English (Canada)",
|
||
"en-au": "English (Australia)",
|
||
"en-nz": "English (New Zealand)",
|
||
"en-ie": "English (Ireland)",
|
||
"en-za": "English (South Africa)",
|
||
"en-in": "English (India)",
|
||
|
||
// 中文系列
|
||
zh: "Chinese",
|
||
"zh-cn": "Chinese (Simplified)",
|
||
"zh-tw": "Chinese (Traditional)",
|
||
"zh-hk": "Chinese (Hong Kong)",
|
||
"zh-sg": "Chinese (Singapore)",
|
||
|
||
// 法语系列
|
||
fr: "French",
|
||
"fr-fr": "French (France)",
|
||
"fr-ca": "French (Canada)",
|
||
"fr-be": "French (Belgium)",
|
||
"fr-ch": "French (Switzerland)",
|
||
|
||
// 德语系列
|
||
de: "German",
|
||
"de-de": "German (Germany)",
|
||
"de-at": "German (Austria)",
|
||
"de-ch": "German (Switzerland)",
|
||
|
||
// 西班牙语系列
|
||
es: "Spanish",
|
||
"es-es": "Spanish (Spain)",
|
||
"es-mx": "Spanish (Mexico)",
|
||
"es-ar": "Spanish (Argentina)",
|
||
"es-co": "Spanish (Colombia)",
|
||
"es-cl": "Spanish (Chile)",
|
||
|
||
// 葡萄牙语系列
|
||
pt: "Portuguese",
|
||
"pt-pt": "Portuguese (Portugal)",
|
||
"pt-br": "Portuguese (Brazil)",
|
||
|
||
// 意大利语
|
||
it: "Italian",
|
||
"it-it": "Italian (Italy)",
|
||
|
||
// 俄语
|
||
ru: "Russian",
|
||
"ru-ru": "Russian (Russia)",
|
||
|
||
// 日语
|
||
ja: "Japanese",
|
||
"ja-jp": "Japanese (Japan)",
|
||
|
||
// 韩语
|
||
ko: "Korean",
|
||
"ko-kr": "Korean (South Korea)",
|
||
|
||
// 阿拉伯语
|
||
ar: "Arabic",
|
||
"ar-sa": "Arabic (Saudi Arabia)",
|
||
"ar-ae": "Arabic (UAE)",
|
||
"ar-eg": "Arabic (Egypt)",
|
||
|
||
// 荷兰语
|
||
nl: "Dutch",
|
||
"nl-nl": "Dutch (Netherlands)",
|
||
"nl-be": "Dutch (Belgium)",
|
||
|
||
// 北欧语言
|
||
sv: "Swedish",
|
||
"sv-se": "Swedish (Sweden)",
|
||
da: "Danish",
|
||
"da-dk": "Danish (Denmark)",
|
||
no: "Norwegian",
|
||
"no-no": "Norwegian (Norway)",
|
||
"nb-no": "Norwegian Bokmål",
|
||
"nn-no": "Norwegian Nynorsk",
|
||
fi: "Finnish",
|
||
"fi-fi": "Finnish (Finland)",
|
||
|
||
// 其他常见语言
|
||
hi: "Hindi",
|
||
"hi-in": "Hindi (India)",
|
||
th: "Thai",
|
||
"th-th": "Thai (Thailand)",
|
||
vi: "Vietnamese",
|
||
"vi-vn": "Vietnamese (Vietnam)",
|
||
tr: "Turkish",
|
||
"tr-tr": "Turkish (Turkey)",
|
||
pl: "Polish",
|
||
"pl-pl": "Polish (Poland)",
|
||
cs: "Czech",
|
||
"cs-cz": "Czech (Czech Republic)",
|
||
sk: "Slovak",
|
||
"sk-sk": "Slovak (Slovakia)",
|
||
hu: "Hungarian",
|
||
"hu-hu": "Hungarian (Hungary)",
|
||
ro: "Romanian",
|
||
"ro-ro": "Romanian (Romania)",
|
||
bg: "Bulgarian",
|
||
"bg-bg": "Bulgarian (Bulgaria)",
|
||
hr: "Croatian",
|
||
"hr-hr": "Croatian (Croatia)",
|
||
sr: "Serbian",
|
||
"sr-rs": "Serbian (Serbia)",
|
||
sl: "Slovenian",
|
||
"sl-si": "Slovenian (Slovenia)",
|
||
et: "Estonian",
|
||
"et-ee": "Estonian (Estonia)",
|
||
lv: "Latvian",
|
||
"lv-lv": "Latvian (Latvia)",
|
||
lt: "Lithuanian",
|
||
"lt-lt": "Lithuanian (Lithuania)",
|
||
el: "Greek",
|
||
"el-gr": "Greek (Greece)",
|
||
he: "Hebrew",
|
||
"he-il": "Hebrew (Israel)",
|
||
fa: "Persian",
|
||
"fa-ir": "Persian (Iran)",
|
||
ur: "Urdu",
|
||
"ur-pk": "Urdu (Pakistan)",
|
||
bn: "Bengali",
|
||
"bn-bd": "Bengali (Bangladesh)",
|
||
ta: "Tamil",
|
||
"ta-in": "Tamil (India)",
|
||
te: "Telugu",
|
||
"te-in": "Telugu (India)",
|
||
ml: "Malayalam",
|
||
"ml-in": "Malayalam (India)",
|
||
kn: "Kannada",
|
||
"kn-in": "Kannada (India)",
|
||
gu: "Gujarati",
|
||
"gu-in": "Gujarati (India)",
|
||
pa: "Punjabi",
|
||
"pa-in": "Punjabi (India)",
|
||
mr: "Marathi",
|
||
"mr-in": "Marathi (India)",
|
||
ne: "Nepali",
|
||
"ne-np": "Nepali (Nepal)",
|
||
si: "Sinhala",
|
||
"si-lk": "Sinhala (Sri Lanka)",
|
||
my: "Myanmar",
|
||
"my-mm": "Myanmar (Myanmar)",
|
||
km: "Khmer",
|
||
"km-kh": "Khmer (Cambodia)",
|
||
lo: "Lao",
|
||
"lo-la": "Lao (Laos)",
|
||
ka: "Georgian",
|
||
"ka-ge": "Georgian (Georgia)",
|
||
hy: "Armenian",
|
||
"hy-am": "Armenian (Armenia)",
|
||
az: "Azerbaijani",
|
||
"az-az": "Azerbaijani (Azerbaijan)",
|
||
kk: "Kazakh",
|
||
"kk-kz": "Kazakh (Kazakhstan)",
|
||
ky: "Kyrgyz",
|
||
"ky-kg": "Kyrgyz (Kyrgyzstan)",
|
||
uz: "Uzbek",
|
||
"uz-uz": "Uzbek (Uzbekistan)",
|
||
tg: "Tajik",
|
||
"tg-tj": "Tajik (Tajikistan)",
|
||
mn: "Mongolian",
|
||
"mn-mn": "Mongolian (Mongolia)",
|
||
bo: "Tibetan",
|
||
"bo-cn": "Tibetan (China)",
|
||
ug: "Uyghur",
|
||
"ug-cn": "Uyghur (China)",
|
||
id: "Indonesian",
|
||
"id-id": "Indonesian (Indonesia)",
|
||
ms: "Malay",
|
||
"ms-my": "Malay (Malaysia)",
|
||
tl: "Filipino",
|
||
"tl-ph": "Filipino (Philippines)",
|
||
sw: "Swahili",
|
||
"sw-ke": "Swahili (Kenya)",
|
||
am: "Amharic",
|
||
"am-et": "Amharic (Ethiopia)",
|
||
ha: "Hausa",
|
||
"ha-ng": "Hausa (Nigeria)",
|
||
yo: "Yoruba",
|
||
"yo-ng": "Yoruba (Nigeria)",
|
||
ig: "Igbo",
|
||
"ig-ng": "Igbo (Nigeria)",
|
||
zu: "Zulu",
|
||
"zu-za": "Zulu (South Africa)",
|
||
xh: "Xhosa",
|
||
"xh-za": "Xhosa (South Africa)",
|
||
af: "Afrikaans",
|
||
"af-za": "Afrikaans (South Africa)",
|
||
};
|
||
|
||
// 如果找到精确匹配,返回对应值
|
||
if (languageMap[normalizedCode]) {
|
||
return languageMap[normalizedCode];
|
||
}
|
||
|
||
// 如果没有精确匹配,尝试匹配语言部分(如 en-xx -> English)
|
||
const langPart = normalizedCode.split("-")[0];
|
||
if (languageMap[langPart]) {
|
||
return languageMap[langPart];
|
||
}
|
||
|
||
// 如果都没有匹配,返回原始值(大写)
|
||
return langCode.toUpperCase();
|
||
}
|
||
|
||
export function getEngineName(engine: string) {
|
||
const engineMap = {
|
||
Blink: "Chrome Engine",
|
||
WebKit: "Safari Engine",
|
||
Gecko: "Firefox Engine",
|
||
Trident: "IE Engine",
|
||
EdgeHTML: "Edge Engine",
|
||
Presto: "Opera Engine",
|
||
};
|
||
|
||
return engineMap[engine] || `${engine} Engine`;
|
||
}
|
||
|
||
export function getBotName(bot: boolean) {
|
||
return bot === true ? "Bot" : "Human";
|
||
}
|