import { defineStore } from 'pinia' import zhCn from 'element-plus/es/locale/lang/zh-cn' import en from 'element-plus/es/locale/lang/en' import zhMessages from '@/locales/zh-CN.js' // 中文语言包 import enMessages from '@/locales/en.js' // 定义localStorage的key const LANG_KEY = 'APP_CURRENT_LANG' const elLocaleMap = { 'zh-CN': zhCn, en: en } // 默认语言(优先从localStorage读取,没有则用浏览器默认) const defaultLang = localStorage.getItem(LANG_KEY) || (navigator.language || 'zh-CN').toLowerCase() export const useLangStore = defineStore('lang', { state: () => ({ // 当前语言 currentLang: defaultLang === 'en' ? 'en' : 'zh-CN', // 兼容处理,只保留en/zh-CN elLocale: elLocaleMap[defaultLang === 'en' ? 'en' : 'zh-CN'] }), actions: { // 切换语言 changeLang(lang) { this.currentLang = lang this.elLocale = elLocaleMap[lang === 'en' ? 'en' : 'zh-CN'] // 持久化到localStorage localStorage.setItem(LANG_KEY, lang) // 触发i18n实例的语言切换(后续在i18n配置中关联) if (window.$i18n && window.$i18n.global) { window.$i18n.global.locale.value = lang } window.$i18n.locale = lang console.log('切换到语言:', lang, $i18n) // 动态设置页面标题 this.updateDynamicTitle() }, // 动态更新页面标题 updateDynamicTitle() { // 从语言包获取网站标题 const siteTitle = this.currentLang === 'en' ? enMessages.common.title : zhMessages.common.title; if (siteTitle) { document.title = siteTitle } }, } })