| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // 导入语言包
- import zhCN from './zh-CN.json';
- import enUS from './en-US.json';
- // 定义语言映射
- const langMap = {
- 'zh-CN': zhCN,
- 'en-US': enUS
- };
- // 默认语言(优先从本地存储读取,无则用浏览器默认)
- let currentLang = localStorage.getItem('app-lang') || (navigator.language || 'zh-CN').toLowerCase();
- // 兼容浏览器语言缩写(如en -> en-US)
- currentLang = currentLang === 'zh' ? 'zh-CN' : currentLang === 'en' ? 'en-US' : currentLang;
- // 当前语言包数据
- let currentLangData = langMap[currentLang] || zhCN;
- // 语言切换回调函数(用于更新页面)
- let langChangeCallback = null;
- // 语言管理对象
- const i18n = {
- // 获取当前语言
- getLang() {
- return currentLang;
- },
- // 切换语言
- setLang(lang) {
- if (!langMap[lang]) return; // 语言包不存在则不处理
- currentLang = lang;
- currentLangData = langMap[lang];
- localStorage.setItem('app-lang', lang); // 持久化
- // 触发回调更新页面
- if (langChangeCallback) langChangeCallback();
- },
- // 获取翻译文本(支持嵌套路径,如'common.title')
- t(key) {
- return key.split('.').reduce((obj, k) => obj?.[k] || key, currentLangData);
- },
- // 注册语言切换回调
- onLangChange(callback) {
- langChangeCallback = callback;
- }
- };
- export default i18n;
|