mirror of
https://git.fightbot.fun/hxuanyu/BingPaper.git
synced 2026-03-07 18:19:33 +08:00
76 lines
2.3 KiB
TypeScript
76 lines
2.3 KiB
TypeScript
|
|
const MKT_STORAGE_KEY = 'bing_paper_selected_mkt'
|
|
const DEFAULT_MKT = 'zh-CN'
|
|
|
|
/**
|
|
* 默认地区列表 (兜底用)
|
|
*/
|
|
export const DEFAULT_REGIONS = [
|
|
{ value: 'zh-CN', label: '中国 (zh-CN)' },
|
|
{ value: 'en-US', label: '美国 (en-US)' },
|
|
{ value: 'ja-JP', label: '日本 (ja-JP)' },
|
|
{ value: 'en-AU', label: '澳大利亚 (en-AU)' },
|
|
{ value: 'en-GB', label: '英国 (en-GB)' },
|
|
{ value: 'de-DE', label: '德国 (de-DE)' },
|
|
{ value: 'en-NZ', label: '新西兰 (en-NZ)' },
|
|
{ value: 'en-CA', label: '加拿大 (en-CA)' },
|
|
{ value: 'fr-FR', label: '法国 (fr-FR)' },
|
|
{ value: 'it-IT', label: '意大利 (it-IT)' },
|
|
{ value: 'es-ES', label: '西班牙 (es-ES)' },
|
|
{ value: 'pt-BR', label: '巴西 (pt-BR)' },
|
|
{ value: 'ko-KR', label: '韩国 (ko-KR)' },
|
|
{ value: 'en-IN', label: '印度 (en-IN)' },
|
|
{ value: 'ru-RU', label: '俄罗斯 (ru-RU)' },
|
|
{ value: 'zh-HK', label: '中国香港 (zh-HK)' },
|
|
{ value: 'zh-TW', label: '中国台湾 (zh-TW)' },
|
|
]
|
|
|
|
/**
|
|
* 支持的地区列表 (优先使用后端提供的)
|
|
*/
|
|
export let SUPPORTED_REGIONS = [...DEFAULT_REGIONS]
|
|
|
|
/**
|
|
* 更新支持的地区列表
|
|
*/
|
|
export function setSupportedRegions(regions: typeof DEFAULT_REGIONS): void {
|
|
SUPPORTED_REGIONS = regions
|
|
}
|
|
|
|
/**
|
|
* 获取浏览器首选地区
|
|
*/
|
|
export function getBrowserMkt(): string {
|
|
const lang = navigator.language || (navigator as any).userLanguage
|
|
if (!lang) return DEFAULT_MKT
|
|
|
|
// 尝试精确匹配
|
|
const exactMatch = SUPPORTED_REGIONS.find(r => r.value.toLowerCase() === lang.toLowerCase())
|
|
if (exactMatch) return exactMatch.value
|
|
|
|
// 尝试模糊匹配 (前两个字符,如 en-GB 匹配 en-US)
|
|
const prefix = lang.split('-')[0].toLowerCase()
|
|
const prefixMatch = SUPPORTED_REGIONS.find(r => r.value.split('-')[0].toLowerCase() === prefix)
|
|
if (prefixMatch) return prefixMatch.value
|
|
|
|
return DEFAULT_MKT
|
|
}
|
|
|
|
/**
|
|
* 获取当前选择的地区 (优先从 localStorage 获取,其次从浏览器获取)
|
|
*/
|
|
export function getDefaultMkt(): string {
|
|
const saved = localStorage.getItem(MKT_STORAGE_KEY)
|
|
if (saved && SUPPORTED_REGIONS.some(r => r.value === saved)) {
|
|
return saved
|
|
}
|
|
return getBrowserMkt()
|
|
}
|
|
|
|
/**
|
|
* 保存选择的地区
|
|
*/
|
|
export function setSavedMkt(mkt: string): void {
|
|
localStorage.setItem(MKT_STORAGE_KEY, mkt)
|
|
}
|