languages.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // src/utils/languages.ts — 前端"语言选择器"数据源
  2. // 默认本地常量,启动时拉服务端 /api/tts/languages 覆盖(覆盖失败用本地)
  3. export interface LangDef {
  4. key: string; // BCP-47 风格,如 zh-CMN / en-US
  5. label: string; // UI 显示
  6. recommended: boolean; // 是否进推荐列表
  7. vendorHint?: string; // 后端返回的 vendor+model 提示
  8. }
  9. // 本地默认(服务端不可达时用)
  10. export const LANGUAGES_FALLBACK: LangDef[] = [
  11. { key: 'zh-CMN', label: '普通话', recommended: true },
  12. { key: 'zh-YUE', label: '粤语', recommended: true },
  13. { key: 'zh-NEN', label: '东北话', recommended: true },
  14. { key: 'zh-SCN', label: '四川话', recommended: true },
  15. { key: 'zh-SHD', label: '山东话', recommended: true },
  16. { key: 'zh-HEN', label: '河南话', recommended: true },
  17. { key: 'zh-HNN', label: '湖南话', recommended: true },
  18. { key: 'zh-SHX', label: '陕西话', recommended: true },
  19. { key: 'zh-AHM', label: '安徽话', recommended: true },
  20. { key: 'zh-MNN', label: '闽南话', recommended: true },
  21. { key: 'en-US', label: '英语(美式)', recommended: true },
  22. { key: 'en-GB', label: '英语(英式)', recommended: true },
  23. { key: 'ja-JP', label: '日语', recommended: true },
  24. { key: 'ko-KR', label: '韩语', recommended: true },
  25. { key: 'id-ID', label: '印尼语', recommended: true },
  26. ];
  27. // 拉服务端最新列表
  28. export async function fetchLanguagesFromServer(): Promise<LangDef[]> {
  29. // #ifdef MP-WEIXIN
  30. // // ...
  31. // #endif
  32. try {
  33. // @ts-ignore
  34. const api = (typeof uni !== 'undefined' && uni.request) ? uni : require('@dcloudio/uni-app').default;
  35. const base = (typeof __GLOBAL__ !== 'undefined' && __GLOBAL__.API_BASE) || '';
  36. const res: any = await new Promise((resolve, reject) => {
  37. // @ts-ignore
  38. api.request({ url: `${base}/api/tts/languages`, method: 'GET', success: resolve, fail: reject });
  39. });
  40. const langs = (res?.data?.data?.languages || []) as LangDef[];
  41. return langs.length > 0 ? langs : LANGUAGES_FALLBACK;
  42. } catch (e) {
  43. console.warn('[languages] 拉服务端失败,使用本地 fallback:', e);
  44. return LANGUAGES_FALLBACK;
  45. }
  46. }
  47. // 简单按 key 找 label
  48. export function getLangLabel(key: string, list: LangDef[]): string {
  49. return list.find(l => l.key === key)?.label || '普通话';
  50. }