// src/utils/languages.ts — 前端"语言选择器"数据源 // 默认本地常量,启动时拉服务端 /api/tts/languages 覆盖(覆盖失败用本地) export interface LangDef { key: string; // BCP-47 风格,如 zh-CMN / en-US label: string; // UI 显示 recommended: boolean; // 是否进推荐列表 vendorHint?: string; // 后端返回的 vendor+model 提示 } // 本地默认(服务端不可达时用) export const LANGUAGES_FALLBACK: LangDef[] = [ { key: 'zh-CMN', label: '普通话', recommended: true }, { key: 'zh-YUE', label: '粤语', recommended: true }, { key: 'zh-NEN', label: '东北话', recommended: true }, { key: 'zh-SCN', label: '四川话', recommended: true }, { key: 'zh-SHD', label: '山东话', recommended: true }, { key: 'zh-HEN', label: '河南话', recommended: true }, { key: 'zh-HNN', label: '湖南话', recommended: true }, { key: 'zh-SHX', label: '陕西话', recommended: true }, { key: 'zh-AHM', label: '安徽话', recommended: true }, { key: 'zh-MNN', label: '闽南话', recommended: true }, { key: 'en-US', label: '英语(美式)', recommended: true }, { key: 'en-GB', label: '英语(英式)', recommended: true }, { key: 'ja-JP', label: '日语', recommended: true }, { key: 'ko-KR', label: '韩语', recommended: true }, { key: 'id-ID', label: '印尼语', recommended: true }, ]; // 拉服务端最新列表 export async function fetchLanguagesFromServer(): Promise { // #ifdef MP-WEIXIN // // ... // #endif try { // @ts-ignore const api = (typeof uni !== 'undefined' && uni.request) ? uni : require('@dcloudio/uni-app').default; const base = (typeof __GLOBAL__ !== 'undefined' && __GLOBAL__.API_BASE) || ''; const res: any = await new Promise((resolve, reject) => { // @ts-ignore api.request({ url: `${base}/api/tts/languages`, method: 'GET', success: resolve, fail: reject }); }); const langs = (res?.data?.data?.languages || []) as LangDef[]; return langs.length > 0 ? langs : LANGUAGES_FALLBACK; } catch (e) { console.warn('[languages] 拉服务端失败,使用本地 fallback:', e); return LANGUAGES_FALLBACK; } } // 简单按 key 找 label export function getLangLabel(key: string, list: LangDef[]): string { return list.find(l => l.key === key)?.label || '普通话'; }