| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // 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<LangDef[]> {
- // #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 || '普通话';
- }
|