feat: 添加语言管理功能,更新系统设置页面,优化用户体验
This commit is contained in:
60
src/composables/useLanguage.ts
Normal file
60
src/composables/useLanguage.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
import type { Locale } from "vue-i18n";
|
||||
|
||||
export interface Language {
|
||||
code: Locale;
|
||||
name: string;
|
||||
nativeName: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 语言管理组合式函数
|
||||
*/
|
||||
export function useLanguage() {
|
||||
const { locale, availableLocales } = useI18n();
|
||||
|
||||
// 可用的语言列表
|
||||
const languages: Language[] = [
|
||||
{
|
||||
code: "zh-CN",
|
||||
name: "Chinese (Simplified)",
|
||||
nativeName: "简体中文",
|
||||
},
|
||||
{
|
||||
code: "en-US",
|
||||
name: "English (US)",
|
||||
nativeName: "English",
|
||||
},
|
||||
];
|
||||
|
||||
// 当前语言
|
||||
const currentLanguage = computed(() => {
|
||||
return languages.find(lang => lang.code === locale.value) || languages[0];
|
||||
});
|
||||
|
||||
/**
|
||||
* 切换语言
|
||||
*/
|
||||
function setLanguage(langCode: Locale) {
|
||||
locale.value = langCode;
|
||||
// 持久化到 localStorage
|
||||
localStorage.setItem("app-language", langCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 localStorage 加载保存的语言
|
||||
*/
|
||||
function loadSavedLanguage() {
|
||||
const saved = localStorage.getItem("app-language") as Locale;
|
||||
if (saved && availableLocales.includes(saved)) {
|
||||
locale.value = saved;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
languages,
|
||||
currentLanguage,
|
||||
locale,
|
||||
setLanguage,
|
||||
loadSavedLanguage,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user