import { defineStore } from 'pinia' import { ref } from 'vue' import { defaultLocale, localeList } from '../locales' import i18n from '../i18n' export const useLocaleStore = defineStore('locale', () => { // 当前语言 const currentLocale = ref(defaultLocale) // 可用语言列表 const availableLocales = ref(localeList) // 初始化语言设置 const initLocale = () => { try { const storedLocale = uni.getStorageSync('locale') if (storedLocale) { currentLocale.value = storedLocale i18n.global.locale.value = storedLocale } } catch (e) { console.error('Failed to load locale:', e) } } // 切换语言 const setLocale = (locale) => { if (!locale || !localeList.find(item => item.value === locale)) { console.error('Invalid locale:', locale) return false } try { // 更新 i18n 语言 i18n.global.locale.value = locale // 更新 store 状态 currentLocale.value = locale // 持久化到本地存储 uni.setStorageSync('locale', locale) return true } catch (e) { console.error('Failed to set locale:', e) return false } } // 切换到下一个语言 const toggleLocale = () => { const currentIndex = localeList.findIndex(item => item.value === currentLocale.value) const nextIndex = (currentIndex + 1) % localeList.length const nextLocale = localeList[nextIndex].value return setLocale(nextLocale) } // 获取当前语言的显示名称 const getCurrentLocaleName = () => { const locale = localeList.find(item => item.value === currentLocale.value) return locale ? locale.label : '' } return { currentLocale, availableLocales, initLocale, setLocale, toggleLocale, getCurrentLocaleName } })