feat: add Chinese-English language toggle

This commit is contained in:
eoao
2026-05-08 23:35:05 +08:00
parent f0bf6da963
commit 24f271a1ed
4 changed files with 39 additions and 5 deletions

View File

@@ -312,9 +312,9 @@ const en = {
character: '', character: '',
mustNotContain: 'Must Not Contain', mustNotContain: 'Must Not Contain',
mustNotContainDesc: 'Separate with commas', mustNotContainDesc: 'Separate with commas',
blackSubjectDesc: '输入多个值用,分开', blackSubjectDesc: 'Subject',
blackContentDesc: '输入多个值用,分开', blackContentDesc: 'Content',
blackFromDesc: '输入多个值用,分开', blackFromDesc: 'Sender or domain',
setSuccess: 'Settings saved successfully', setSuccess: 'Settings saved successfully',
details: 'Details', details: 'Details',
userDetails: 'User Details', userDetails: 'User Details',

View File

@@ -246,7 +246,7 @@ const zh = {
serverBusyErrorMsg: '服务器繁忙,请稍后重试', serverBusyErrorMsg: '服务器繁忙,请稍后重试',
reqFailErrorMsg: '请求失败,请稍后再试', reqFailErrorMsg: '请求失败,请稍后再试',
message: '邮件详情', message: '邮件详情',
language: '网站语言', language: '系统语言',
totalUserAccount: '{msg} 个', totalUserAccount: '{msg} 个',
sendBanned: '已禁用', sendBanned: '已禁用',
sendInternal: '仅站内', sendInternal: '仅站内',

View File

@@ -11,5 +11,8 @@ export const useSettingStore = defineStore('setting', {
}), }),
actions: { actions: {
} },
persist: {
pick: ['lang'],
},
}) })

View File

@@ -30,6 +30,18 @@
</div> </div>
</div> </div>
</div> </div>
<div class="language">
<div class="title">{{$t('language')}}</div>
<el-select
v-model="settingStore.lang"
class="language-select"
placeholder="Select"
@change="changeLang"
>
<el-option label="中文" value="zh"/>
<el-option label="English" value="en"/>
</el-select>
</div>
<div class="del-email" v-perm="'my:delete'"> <div class="del-email" v-perm="'my:delete'">
<div class="title">{{$t('deleteUser')}}</div> <div class="title">{{$t('deleteUser')}}</div>
<div style="color: var(--regular-text-color);"> <div style="color: var(--regular-text-color);">
@@ -56,9 +68,12 @@ import router from "@/router/index.js";
import {accountSetName} from "@/request/account.js"; import {accountSetName} from "@/request/account.js";
import {useAccountStore} from "@/store/account.js"; import {useAccountStore} from "@/store/account.js";
import {useI18n} from "vue-i18n"; import {useI18n} from "vue-i18n";
import {useSettingStore} from "@/store/setting.js";
import {setExtend} from "@/utils/day.js";
const { t } = useI18n() const { t } = useI18n()
const accountStore = useAccountStore() const accountStore = useAccountStore()
const settingStore = useSettingStore()
const userStore = useUserStore(); const userStore = useUserStore();
const setPwdLoading = ref(false) const setPwdLoading = ref(false)
const setNameShow = ref(false) const setNameShow = ref(false)
@@ -107,6 +122,11 @@ function setName() {
}) })
} }
function changeLang(lang) {
setExtend(lang === 'en' ? 'en' : 'zh-cn')
settingStore.lang = lang
}
const pwdShow = ref(false) const pwdShow = ref(false)
const form = reactive({ const form = reactive({
password: '', password: '',
@@ -249,6 +269,17 @@ function submitPwd() {
} }
} }
.language {
display: flex;
flex-direction: column;
gap: 20px;
margin-bottom: 40px;
.language-select {
width: 100px;
}
}
.del-email { .del-email {
font-size: 14px; font-size: 14px;
display: flex; display: flex;