初始化

This commit is contained in:
2026-03-03 09:53:54 +08:00
commit 3f349a35a4
437 changed files with 65639 additions and 0 deletions

View File

@@ -0,0 +1,123 @@
/**
* 国际化配置
*
* 基于 vue-i18n 实现的多语言国际化解决方案。
* 支持中文和英文切换,自动从本地存储恢复用户的语言偏好。
*
* ## 主要功能
*
* - 多语言支持 - 支持中文(简体)和英文两种语言
* - 语言切换 - 运行时动态切换语言,无需刷新页面
* - 持久化存储 - 自动保存和恢复用户的语言偏好
* - 全局注入 - 在任何组件中都可以使用 $t 函数进行翻译
* - 类型安全 - 提供 TypeScript 类型支持
*
* ## 支持的语言
*
* - zh: 简体中文
* - en: English
*
* @module locales
* @author Art Design Pro Team
*/
import { createI18n } from 'vue-i18n'
import type { I18n, I18nOptions } from 'vue-i18n'
import { LanguageEnum } from '@/enums/appEnum'
import { getSystemStorage } from '@/utils/storage'
import { StorageKeyManager } from '@/utils/storage/storage-key-manager'
// 同步导入语言文件
import enMessages from './langs/en.json'
import zhMessages from './langs/zh.json'
/**
* 存储键管理器实例
*/
const storageKeyManager = new StorageKeyManager()
/**
* 语言消息对象
*/
const messages = {
[LanguageEnum.EN]: enMessages,
[LanguageEnum.ZH]: zhMessages
}
/**
* 语言选项列表
* 用于语言切换下拉框
*/
export const languageOptions = [
{ value: LanguageEnum.ZH, label: '简体中文' },
{ value: LanguageEnum.EN, label: 'English' }
]
/**
* 从存储中获取语言设置
* @returns 语言设置,如果获取失败则返回默认语言
*/
const getDefaultLanguage = (): LanguageEnum => {
// 尝试从版本化的存储中获取语言设置
try {
const storageKey = storageKeyManager.getStorageKey('user')
const userStore = localStorage.getItem(storageKey)
if (userStore) {
const { language } = JSON.parse(userStore)
if (language && Object.values(LanguageEnum).includes(language)) {
return language
}
}
} catch (error) {
console.warn('[i18n] 从版本化存储获取语言设置失败:', error)
}
// 尝试从系统存储中获取语言设置
try {
const sys = getSystemStorage()
if (sys) {
const { user } = JSON.parse(sys)
if (user?.language && Object.values(LanguageEnum).includes(user.language)) {
return user.language
}
}
} catch (error) {
console.warn('[i18n] 从系统存储获取语言设置失败:', error)
}
// 返回默认语言
console.debug('[i18n] 使用默认语言:', LanguageEnum.ZH)
return LanguageEnum.ZH
}
/**
* i18n 配置选项
*/
const i18nOptions: I18nOptions = {
locale: getDefaultLanguage(),
legacy: false,
globalInjection: true,
fallbackLocale: LanguageEnum.ZH,
messages
}
/**
* i18n 实例
*/
const i18n: I18n = createI18n(i18nOptions)
/**
* 翻译函数类型
*/
interface Translation {
(key: string): string
}
/**
* 全局翻译函数
* 可在任何地方使用,无需导入 useI18n
*/
export const $t = i18n.global.t as Translation
export default i18n

View File

@@ -0,0 +1,297 @@
{
"httpMsg": {
"unauthorized": "Unauthorized access, please login again",
"forbidden": "Access to this resource is forbidden",
"notFound": "The requested resource does not exist",
"methodNotAllowed": "Request method not allowed",
"requestTimeout": "Request timeout, please try again later",
"internalServerError": "Internal server error, please try again later",
"badGateway": "Bad gateway error, please try again later",
"serviceUnavailable": "Service temporarily unavailable, please try again later",
"gatewayTimeout": "Gateway timeout, please try again later",
"requestCancelled": "Request cancelled",
"networkError": "Network connection error, please check your connection",
"requestFailed": "Request failed",
"requestConfigError": "Request configuration error"
},
"topBar": {
"search": {
"title": "Search"
},
"user": {
"userCenter": "User center",
"docs": "Document",
"github": "Github",
"lockScreen": "Lock screen",
"logout": "Log out"
},
"guide": {
"title": "Click here to view",
"theme": "Theme style",
"menu": "Open top menu",
"description": "More configurations"
}
},
"common": {
"tips": "Prompt",
"cancel": "Cancel",
"confirm": "Confirm",
"logOutTips": "Do you want to log out?"
},
"search": {
"placeholder": "Search page",
"historyTitle": "Search history",
"switchKeydown": "Navigate",
"selectKeydown": "Select",
"exitKeydown": "Close"
},
"setting": {
"menuType": {
"title": "Menu Layout",
"list": [
"Vertical",
"Horizontal",
"Mixed",
"Dual"
]
},
"theme": {
"title": "Theme Style",
"list": [
"Light",
"Dark",
"System"
]
},
"menu": {
"title": "Menu Style"
},
"color": {
"title": "Theme Color"
},
"box": {
"title": "Box Style",
"list": [
"Border",
"Shadow"
]
},
"container": {
"title": "Container Width",
"list": [
"Full",
"Boxed"
]
},
"basics": {
"title": "Basic Config",
"list": {
"multiTab": "Show work tab",
"accordion": "Sidebar opens accordion",
"collapseSidebar": "Show sidebar button",
"reloadPage": "Show reload page button",
"fastEnter": "Show fast enter",
"breadcrumb": "Show crumb navigation",
"language": "Show multilingual selection",
"progressBar": "Show top progress bar",
"weakMode": "Color Weakness Mode",
"watermark": "Global watermark",
"menuWidth": "Menu width",
"tabStyle": "Tab style",
"pageTransition": "Page animation",
"borderRadius": "Custom radius"
}
},
"tabStyle": {
"default": "Default",
"card": "Card",
"google": "Chrome"
},
"transition": {
"list": {
"none": "None",
"fade": "Fade",
"slideLeft": "Slide Left",
"slideBottom": "Slide Bottom",
"slideTop": "Slide Top"
}
},
"actions": {
"resetConfig": "Reset Config",
"copyConfig": "Copy Config",
"copySuccess": "Configuration copied to clipboard, paste it into src/config/setting.ts file",
"copyFailed": "Copy failed, please try again",
"resetFailed": "Reset failed, please refresh the page and try again"
}
},
"notice": {
"title": "Notice",
"btnRead": "Mark as read",
"bar": [
"Notice",
"Message",
"Todo"
],
"text": [
"No"
],
"viewAll": "View all"
},
"worktab": {
"btn": {
"refresh": "Refresh",
"fixed": "Fixed",
"unfixed": "Unfixed",
"closeLeft": "Close left",
"closeRight": "Close right",
"closeOther": "Close other",
"closeAll": "Close all"
}
},
"login": {
"leftView": {
"title": "A backend system of beauty and efficiency",
"subTitle": "A sleek and practical interface for a great user experience"
},
"title": "Welcome back",
"subTitle": "Please enter your account and password to login",
"roles": {
"super": "Super Admin",
"admin": "Admin",
"user": "User"
},
"placeholder": {
"username": "Please enter your account",
"password": "Please enter your password",
"code": "Please enter the verification code",
"slider": "Please slide to verify"
},
"sliderText": "Please slide to verify",
"sliderSuccessText": "Verification successful",
"rememberPwd": "Remember password",
"forgetPwd": "Forgot password",
"btnText": "Login",
"noAccount": "No account yet?",
"register": "Register",
"success": {
"title": "Login successful",
"message": "Welcome back"
}
},
"forgetPassword": {
"title": "Forgot password?",
"subTitle": "Enter your email to reset your password",
"placeholder": "Please enter your email",
"submitBtnText": "Submit",
"backBtnText": "Back"
},
"register": {
"title": "Create account",
"subTitle": "Welcome to join us, please fill in the following information to complete the registration",
"placeholder": {
"username": "Please enter your account",
"password": "Please enter your password",
"confirmPassword": "Please enter your password again"
},
"rule": {
"confirmPasswordRequired": "Please enter your password again",
"passwordMismatch": "The two passwords are inconsistent!",
"usernameLength": "The length is 3 to 20 characters",
"passwordLength": "The password length cannot be less than 6 digits",
"agreementRequired": "Please agree to the privacy policy"
},
"agreeText": "I agree",
"privacyPolicy": "Privacy policy",
"submitBtnText": "Register",
"hasAccount": "Already have an account?",
"toLogin": "To login"
},
"lockScreen": {
"pwdError": "Password error",
"lock": {
"inputPlaceholder": "Please input lock screen password",
"btnText": "Lock"
},
"unlock": {
"inputPlaceholder": "Please input unlock password",
"btnText": "Unlock",
"backBtnText": "Back to login"
}
},
"greeting": {
"dawn": "Good morning!",
"morning": "Good morning!",
"afternoon": "Good afternoon!",
"evening": "Good evening!"
},
"exceptionPage": {
"403": "Sorry, you do not have permission to access this page",
"404": "Sorry, the page you are trying to access does not exist",
"500": "Sorry, there was an error on the server",
"gohome": "Go Home"
},
"menus": {
"login": {
"title": "Login"
},
"register": {
"title": "Register"
},
"forgetPassword": {
"title": "Forget Password"
},
"outside": {
"title": "Outside"
},
"dashboard": {
"title": "Dashboard",
"console": "Console"
},
"result": {
"title": "Result Page",
"success": "Success",
"fail": "Fail"
},
"exception": {
"title": "Exception",
"forbidden": "403",
"notFound": "404",
"serverError": "500"
},
"system": {
"title": "System Settings",
"user": "User Manage",
"role": "Role Manage",
"userCenter": "User Center",
"menu": "Menu Manage"
}
},
"table": {
"form": {
"reset": "Reset",
"submit": "Submit"
},
"searchBar": {
"reset": "Reset",
"search": "Search",
"expand": "Expand",
"collapse": "Collapse",
"searchInputPlaceholder": "Please enter",
"searchSelectPlaceholder": "Please select"
},
"selection": "Select",
"sizeOptions": {
"small": "Compact",
"default": "Default",
"large": "Loose"
},
"column": {
"selection": "Select",
"expand": "Expand",
"index": "Index"
},
"zebra": "Zebra",
"border": "Border",
"headerBackground": "Header BG"
}
}

View File

@@ -0,0 +1,297 @@
{
"httpMsg": {
"unauthorized": "未授权访问,请重新登录",
"forbidden": "禁止访问该资源",
"notFound": "请求的资源不存在",
"methodNotAllowed": "请求方法不允许",
"requestTimeout": "请求超时,请稍后重试",
"internalServerError": "服务器内部错误,请稍后重试",
"badGateway": "网关错误,请稍后重试",
"serviceUnavailable": "服务暂时不可用,请稍后重试",
"gatewayTimeout": "网关超时,请稍后重试",
"requestCancelled": "请求已取消",
"networkError": "网络连接异常,请检查网络连接",
"requestFailed": "请求失败",
"requestConfigError": "请求配置错误"
},
"topBar": {
"search": {
"title": "搜索"
},
"user": {
"userCenter": "个人中心",
"docs": "使用文档",
"github": "Github",
"lockScreen": "锁定屏幕",
"logout": "退出登录"
},
"guide": {
"title": "点击这里查看",
"theme": "主题风格",
"menu": "开启顶栏菜单",
"description": "等更多配置"
}
},
"common": {
"tips": "提示",
"cancel": "取消",
"confirm": "确定",
"logOutTips": "您是否要退出登录?"
},
"search": {
"placeholder": "搜索页面",
"historyTitle": "搜索历史",
"switchKeydown": "切换",
"selectKeydown": "选择",
"exitKeydown": "关闭"
},
"setting": {
"menuType": {
"title": "菜单布局",
"list": [
"垂直",
"水平",
"混合",
"双列"
]
},
"theme": {
"title": "主题风格",
"list": [
"浅色",
"深色",
"系统"
]
},
"menu": {
"title": "菜单风格"
},
"color": {
"title": "系统主题色"
},
"box": {
"title": "盒子样式",
"list": [
"边框",
"阴影"
]
},
"container": {
"title": "容器宽度",
"list": [
"铺满",
"定宽"
]
},
"basics": {
"title": "基础配置",
"list": {
"multiTab": "开启多标签栏",
"accordion": "侧边栏开启手风琴模式",
"collapseSidebar": "显示折叠侧边栏按钮",
"fastEnter": "显示快速入口",
"reloadPage": "显示重载页面按钮",
"breadcrumb": "显示全局面包屑导航",
"language": "显示多语言选择",
"progressBar": "显示顶部进度条",
"weakMode": "色弱模式",
"watermark": "全局水印",
"menuWidth": "菜单宽度",
"tabStyle": "标签页风格",
"pageTransition": "页面切换动画",
"borderRadius": "自定义圆角"
}
},
"tabStyle": {
"default": "默认",
"card": "卡片",
"google": "谷歌"
},
"transition": {
"list": {
"none": "无动画",
"fade": "淡入淡出",
"slideLeft": "左侧滑入",
"slideBottom": "下方滑入",
"slideTop": "上方滑入"
}
},
"actions": {
"resetConfig": "重置配置",
"copyConfig": "复制配置",
"copySuccess": "配置已复制到剪贴板,可粘贴到 src/config/setting.ts 文件中",
"copyFailed": "复制失败,请重试",
"resetFailed": "重置失败,请刷新页面后重试"
}
},
"notice": {
"title": "通知",
"btnRead": "标为已读",
"bar": [
"通知",
"消息",
"代办"
],
"text": [
"暂无"
],
"viewAll": "查看全部"
},
"worktab": {
"btn": {
"refresh": "刷新",
"fixed": "固定",
"unfixed": "取消固定",
"closeLeft": "关闭左侧",
"closeRight": "关闭右侧",
"closeOther": "关闭其他",
"closeAll": "关闭全部"
}
},
"login": {
"leftView": {
"title": "一款兼具设计美学与高效开发的后台系统",
"subTitle": "美观实用的界面,经过视觉优化,确保卓越的用户体验"
},
"title": "欢迎回来",
"subTitle": "输入您的账号和密码登录",
"roles": {
"super": "超级管理员",
"admin": "管理员",
"user": "普通用户"
},
"placeholder": {
"username": "请输入账号",
"password": "请输入密码",
"code": "请输入验证码",
"slider": "请拖动滑块完成验证"
},
"sliderText": "按住滑块拖动",
"sliderSuccessText": "验证成功",
"rememberPwd": "记住密码",
"forgetPwd": "忘记密码",
"btnText": "登录",
"noAccount": "还没有账号?",
"register": "注册",
"success": {
"title": "登录成功",
"message": "欢迎回来"
}
},
"forgetPassword": {
"title": "忘记密码?",
"subTitle": "输入您的电子邮件来重置您的密码",
"placeholder": "请输入您的电子邮件",
"submitBtnText": "提交",
"backBtnText": "返回"
},
"register": {
"title": "创建账号",
"subTitle": "欢迎加入我们,请填写以下信息完成注册",
"placeholder": {
"username": "请输入账号",
"password": "请输入密码",
"confirmPassword": "请再次输入密码"
},
"rule": {
"confirmPasswordRequired": "请再次输入密码",
"passwordMismatch": "两次输入密码不一致!",
"usernameLength": "长度在 3 到 20 个字符",
"passwordLength": "密码长度不能小于6位",
"agreementRequired": "请同意隐私协议"
},
"agreeText": "我同意",
"privacyPolicy": "《隐私政策》",
"submitBtnText": "注册",
"hasAccount": "已有账号?",
"toLogin": "去登录"
},
"lockScreen": {
"pwdError": "密码错误",
"lock": {
"inputPlaceholder": "请输入锁屏密码",
"btnText": "锁定"
},
"unlock": {
"inputPlaceholder": "请输入解锁密码",
"btnText": "解锁",
"backBtnText": "返回登录"
}
},
"greeting": {
"dawn": "凌晨了!",
"morning": "上午好!",
"afternoon": "下午好!",
"evening": "晚上好!"
},
"exceptionPage": {
"403": "抱歉,您无权访问该页面",
"404": "抱歉,您访问的页面不存在",
"500": "抱歉,服务器出错了",
"gohome": "返回首页"
},
"menus": {
"login": {
"title": "登录"
},
"register": {
"title": "注册"
},
"forgetPassword": {
"title": "忘记密码"
},
"outside": {
"title": "内嵌页面"
},
"dashboard": {
"title": "仪表盘",
"console": "工作台"
},
"result": {
"title": "结果页面",
"success": "成功页",
"fail": "失败页"
},
"exception": {
"title": "异常页面",
"forbidden": "403",
"notFound": "404",
"serverError": "500"
},
"system": {
"title": "系统管理",
"user": "用户管理",
"role": "角色管理",
"userCenter": "个人中心",
"menu": "菜单管理"
}
},
"table": {
"form": {
"reset": "重置",
"submit": "提交"
},
"searchBar": {
"reset": "重置",
"search": "查询",
"expand": "展开",
"collapse": "收起",
"searchInputPlaceholder": "请输入",
"searchSelectPlaceholder": "请选择"
},
"selection": "选择",
"sizeOptions": {
"small": "紧凑",
"default": "默认",
"large": "宽松"
},
"column": {
"selection": "勾选",
"expand": "展开",
"index": "序号"
},
"zebra": "斑马纹",
"border": "边框",
"headerBackground": "表头背景"
}
}