2026-06-04 19:29:35 +08:00

47 lines
1.7 KiB
JavaScript

const countryMeta = [
{ code: "BR", label: "巴西", names: ["Brazil", "巴西"], point: [-51.93, -14.24] },
{ code: "EG", label: "埃及", names: ["Egypt", "埃及"], point: [30.8, 26.82] },
{ code: "ID", label: "印度尼西亚", names: ["Indonesia", "印度尼西亚"], point: [113.92, -0.79] },
{ code: "IN", label: "印度", names: ["India", "印度"], point: [78.96, 20.59] },
{ code: "TH", label: "泰国", names: ["Thailand", "泰国"], point: [100.99, 15.87] },
{ code: "TR", label: "土耳其", names: ["Turkey", "土耳其"], point: [35.24, 38.96] },
{ code: "US", label: "美国", names: ["United States", "USA", "United States of America", "美国"], point: [-95.71, 37.09] },
{ code: "VN", label: "越南", names: ["Vietnam", "Viet Nam", "越南"], point: [108.28, 14.06] }
];
const metaByName = new Map();
const metaByCode = new Map();
for (const item of countryMeta) {
metaByCode.set(item.code, item);
for (const name of item.names) {
metaByName.set(normalizeKey(name), item);
}
}
export function resolveCountryMeta({ code, name }) {
const fromCode = code ? metaByCode.get(String(code).trim().toUpperCase()) : null;
if (fromCode) {
return fromCode;
}
return metaByName.get(normalizeKey(name)) || null;
}
export function countryFlag(code) {
const normalized = String(code || "").trim().toUpperCase();
if (!/^[A-Z]{2}$/.test(normalized)) {
return "";
}
return Array.from(normalized)
.map((char) => String.fromCodePoint(127397 + char.charCodeAt(0)))
.join("");
}
export function stripCountryFlagPrefix(value) {
return String(value || "").replace(/^(?:\s*[\u{1F1E6}-\u{1F1FF}]{2})+\s*/u, "").trim();
}
function normalizeKey(value) {
return String(value || "").trim().toLowerCase();
}