mirror of
https://git.fightbot.fun/hxuanyu/BingPaper.git
synced 2026-03-07 21:09:34 +08:00
增加多地区每日图片抓取能力
This commit is contained in:
75
webapp/src/lib/mkt-utils.ts
Normal file
75
webapp/src/lib/mkt-utils.ts
Normal file
@@ -0,0 +1,75 @@
|
||||
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user