165 lines
4.5 KiB
TypeScript
165 lines
4.5 KiB
TypeScript
import type {
|
|
CityDetail,
|
|
CityListItem,
|
|
CitySummary,
|
|
} from "@/lib/dashboard-types";
|
|
|
|
const CITY_NAME_ZH: Record<string, string> = {
|
|
Amsterdam: "阿姆斯特丹",
|
|
Ankara: "安卡拉",
|
|
Atlanta: "亚特兰大",
|
|
Austin: "奥斯汀",
|
|
Beijing: "北京",
|
|
"Buenos Aires": "布宜诺斯艾利斯",
|
|
Busan: "釜山",
|
|
"Cape Town": "开普敦",
|
|
Chengdu: "成都",
|
|
Chicago: "芝加哥",
|
|
Chongqing: "重庆",
|
|
Dallas: "达拉斯",
|
|
Denver: "丹佛",
|
|
Guangzhou: "广州",
|
|
Helsinki: "赫尔辛基",
|
|
"Hong Kong": "香港",
|
|
Houston: "休斯敦",
|
|
Istanbul: "伊斯坦布尔",
|
|
Jakarta: "雅加达",
|
|
Jeddah: "吉达",
|
|
Karachi: "卡拉奇",
|
|
"shenzhen": "深圳",
|
|
London: "伦敦",
|
|
Lucknow: "勒克瑙",
|
|
Madrid: "马德里",
|
|
Manila: "马尼拉",
|
|
Miami: "迈阿密",
|
|
Milan: "米兰",
|
|
Moscow: "莫斯科",
|
|
"Mexico City": "墨西哥城",
|
|
Munich: "慕尼黑",
|
|
"New York": "纽约",
|
|
Panama: "巴拿马城",
|
|
"Panama City": "巴拿马城",
|
|
Paris: "巴黎",
|
|
Qingdao: "青岛",
|
|
"Sao Paulo": "圣保罗",
|
|
"São Paulo": "圣保罗",
|
|
Seattle: "西雅图",
|
|
Seoul: "首尔",
|
|
Shenzhen: "深圳",
|
|
Singapore: "新加坡",
|
|
Taipei: "台北",
|
|
Tokyo: "东京",
|
|
Toronto: "多伦多",
|
|
Warsaw: "华沙",
|
|
Wellington: "惠灵顿",
|
|
Wuhan: "武汉",
|
|
};
|
|
|
|
const AIRPORT_NAME_ZH: Record<string, string> = {
|
|
Amsterdam: "史基浦机场",
|
|
Ankara: "安卡拉埃森博阿机场",
|
|
Atlanta: "哈茨菲尔德-杰克逊亚特兰大国际机场",
|
|
Austin: "奥斯汀-伯格斯特龙国际机场",
|
|
Beijing: "北京首都国际机场",
|
|
"Buenos Aires": "埃塞萨国际机场",
|
|
Busan: "金海国际机场",
|
|
"Cape Town": "开普敦国际机场",
|
|
Chengdu: "成都双流国际机场",
|
|
Chicago: "奥黑尔国际机场",
|
|
Chongqing: "重庆江北国际机场",
|
|
Dallas: "达拉斯爱田机场",
|
|
Denver: "丹佛国际机场",
|
|
Guangzhou: "广州白云国际机场",
|
|
Helsinki: "赫尔辛基机场",
|
|
"Hong Kong": "香港天文台总部",
|
|
Houston: "乔治布什洲际机场",
|
|
Istanbul: "伊斯坦布尔机场",
|
|
Jakarta: "苏加诺-哈达国际机场",
|
|
Jeddah: "阿卜杜勒-阿齐兹国王国际机场",
|
|
Karachi: "真纳国际机场",
|
|
"shenzhen": "深圳监测站",
|
|
London: "希思罗机场",
|
|
Lucknow: "乔杜里·查兰·辛格国际机场",
|
|
Madrid: "马德里-巴拉哈斯机场",
|
|
Manila: "尼诺伊·阿基诺国际机场",
|
|
Miami: "迈阿密国际机场",
|
|
Milan: "米兰马尔彭萨机场",
|
|
Moscow: "谢列梅捷沃国际机场",
|
|
"Mexico City": "墨西哥城贝尼托·胡亚雷斯国际机场",
|
|
Munich: "慕尼黑机场",
|
|
"New York": "拉瓜迪亚机场",
|
|
"Panama City": "托库门国际机场",
|
|
Paris: "戴高乐机场",
|
|
Qingdao: "青岛胶东国际机场",
|
|
"Sao Paulo": "瓜鲁柳斯国际机场",
|
|
"São Paulo": "瓜鲁柳斯国际机场",
|
|
Seattle: "西雅图-塔科马国际机场",
|
|
Seoul: "仁川国际机场",
|
|
Shenzhen: "深圳宝安国际机场",
|
|
Singapore: "樟宜机场",
|
|
Taipei: "台北松山机场",
|
|
Tokyo: "羽田机场",
|
|
Toronto: "多伦多皮尔逊国际机场",
|
|
Warsaw: "华沙肖邦机场",
|
|
Wellington: "惠灵顿机场",
|
|
Wuhan: "武汉天河国际机场",
|
|
};
|
|
|
|
const AIRPORT_NAME_EN: Record<string, string> = {
|
|
"Hong Kong": "Hong Kong Observatory HQ",
|
|
"shenzhen": "shenzhen Monitoring Station",
|
|
};
|
|
|
|
function normalizeCityKey(value: string | null | undefined) {
|
|
return String(value || "").trim();
|
|
}
|
|
|
|
export function getLocalizedCityName(
|
|
cityName: string | null | undefined,
|
|
fallback: string | null | undefined,
|
|
locale: string,
|
|
) {
|
|
const key = normalizeCityKey(cityName);
|
|
const text = String(fallback || "").trim() || key;
|
|
if (locale === "en-US") return text;
|
|
return CITY_NAME_ZH[key] || text;
|
|
}
|
|
|
|
export function getLocalizedAirportName(
|
|
cityName: string | null | undefined,
|
|
fallback: string | null | undefined,
|
|
locale: string,
|
|
) {
|
|
const key = normalizeCityKey(cityName);
|
|
const text = String(fallback || "").trim();
|
|
if (locale === "en-US") {
|
|
return AIRPORT_NAME_EN[key] || text;
|
|
}
|
|
return AIRPORT_NAME_ZH[key] || text;
|
|
}
|
|
|
|
export function getLocalizedCityDisplay(
|
|
city: CityListItem,
|
|
locale: string,
|
|
summary?: CitySummary | null,
|
|
detail?: CityDetail | null,
|
|
) {
|
|
return getLocalizedCityName(
|
|
city.name,
|
|
summary?.display_name || detail?.display_name || city.display_name,
|
|
locale,
|
|
);
|
|
}
|
|
|
|
export function getLocalizedAirportDisplay(
|
|
city: CityListItem,
|
|
locale: string,
|
|
detail?: CityDetail | null,
|
|
) {
|
|
return getLocalizedAirportName(
|
|
city.name,
|
|
city.airport || detail?.risk?.airport || detail?.settlement_station?.airport_name,
|
|
locale,
|
|
);
|
|
}
|