index.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // 导入语言包
  2. import zhCN from './zh-CN.json';
  3. import enUS from './en-US.json';
  4. // 定义语言映射
  5. const langMap = {
  6. 'zh-CN': zhCN,
  7. 'en-US': enUS
  8. };
  9. // 默认语言(优先从本地存储读取,无则用浏览器默认)
  10. let currentLang = localStorage.getItem('app-lang') || (navigator.language || 'zh-CN').toLowerCase();
  11. // 兼容浏览器语言缩写(如en -> en-US)
  12. currentLang = currentLang === 'zh' ? 'zh-CN' : currentLang === 'en' ? 'en-US' : currentLang;
  13. // 当前语言包数据
  14. let currentLangData = langMap[currentLang] || zhCN;
  15. // 语言切换回调函数(用于更新页面)
  16. let langChangeCallback = null;
  17. // 语言管理对象
  18. const i18n = {
  19. // 获取当前语言
  20. getLang() {
  21. return currentLang;
  22. },
  23. // 切换语言
  24. setLang(lang) {
  25. if (!langMap[lang]) return; // 语言包不存在则不处理
  26. currentLang = lang;
  27. currentLangData = langMap[lang];
  28. localStorage.setItem('app-lang', lang); // 持久化
  29. // 触发回调更新页面
  30. if (langChangeCallback) langChangeCallback();
  31. },
  32. // 获取翻译文本(支持嵌套路径,如'common.title')
  33. t(key) {
  34. return key.split('.').reduce((obj, k) => obj?.[k] || key, currentLangData);
  35. },
  36. // 注册语言切换回调
  37. onLangChange(callback) {
  38. langChangeCallback = callback;
  39. }
  40. };
  41. export default i18n;