aslan-h5/src/stores/lang.js
2025-10-29 20:23:58 +08:00

59 lines
1.3 KiB
JavaScript

import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
export const useLangStore = defineStore('lang', () => {
// 状态
const langList = ref([
{
type: 'en',
value: 'English',
dir: 'ltr',
},
{
type: 'ar',
value: 'اللغة العربية',
dir: 'rtl',
},
])
const selectedLang = ref(langList.value[0])
// Getter
const currentLanguage = computed(() => selectedLang.value)
const availableLanguages = computed(() => langList.value)
// Action
const setLanguage = (lang) => {
selectedLang.value = lang
localStorage.setItem('preferred-language', lang.type)
}
// 初始化语言
const initLanguage = () => {
const savedLang = localStorage.getItem('preferred-language')
if (savedLang) {
const lang = langList.value.find((item) => item.type === savedLang)
if (lang) {
setLanguage(lang)
return
}
}
// 根据浏览器语言自动检测
const browserLang = navigator.language.split('-')[0]
const detectedLang = langList.value.find((item) => item.type === browserLang)
if (detectedLang) {
setLanguage(detectedLang)
}
}
return {
selectedLang,
langList,
currentLanguage,
availableLanguages,
setLanguage,
initLanguage,
}
})