| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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
- }
- },
-
-
- }
- })
|