创建项目

This commit is contained in:
浅念
2025-11-19 18:01:09 +08:00
commit 228a444ed0
371 changed files with 105839 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
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'
// 创建存储键管理器实例
const storageKeyManager = new StorageKeyManager()
// 动态导入语言文件
const messages = {
[LanguageEnum.EN]: () => import('./langs/en.json'),
[LanguageEnum.ZH]: () => import('./langs/zh.json')
}
// 语言选项
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
}
const i18nOptions: I18nOptions = {
locale: getDefaultLanguage(),
legacy: false,
globalInjection: true,
fallbackLocale: LanguageEnum.ZH,
messages: {}
}
const i18n: I18n = createI18n(i18nOptions)
// 异步加载语言文件
Object.keys(messages).forEach((locale) => {
;(messages as Record<string, () => Promise<any>>)[locale]().then((msg) => {
i18n.global.setLocaleMessage(locale, msg.default)
})
})
interface Translation {
(key: string): string
}
export const $t = i18n.global.t as Translation
export default i18n
+422
View File
@@ -0,0 +1,422 @@
{
"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"
},
"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",
"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"
}
}
},
"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": "An Admin template focused on user experience",
"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": [
"Please enter your account",
"Please enter your password",
"Please slide to verify",
"Please select a company"
],
"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"
},
"otherLogin": "Other login methods"
},
"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": [
"Please enter your account",
"Please enter your password",
"Please enter your password again"
],
"rule": [
"Please enter your password again",
"The two passwords are inconsistent!",
"The length is 3 to 20 characters",
"The password length cannot be less than 6 digits",
"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"
}
},
"analysis": {
"todaySales": {
"title": "Today's Sales",
"subtitle": "Sales Summary",
"export": "Export",
"cards": {
"totalSales": {
"label": "Total Sales",
"change": "+15%"
},
"totalOrder": {
"label": "Total Order",
"change": "+5%"
},
"productSold": {
"label": "Product Sold",
"change": "+2%"
},
"newCustomers": {
"label": "New Customers",
"change": "+8%"
}
},
"fromYesterday": "from yesterday"
},
"visitorInsights": {
"title": "Visitor Insights",
"legend": {
"loyalCustomers": "Loyal Customers",
"newCustomers": "New Customers"
}
},
"totalRevenue": {
"title": "Total Revenue",
"legend": {
"onlineSales": "Online Sales",
"offlineSales": "Offline Sales"
}
},
"customerSatisfaction": {
"title": "Customer Satisfaction",
"legend": {
"lastMonth": "Last Month",
"thisMonth": "This Month"
}
},
"targetVsReality": {
"title": "Target vs Reality",
"realitySales": {
"label": "Reality Sales",
"sublabel": "Global"
},
"targetSales": {
"label": "Target Sales",
"sublabel": "Commercial"
}
},
"topProducts": {
"title": "Top Products",
"columns": {
"name": "Name",
"popularity": "Popularity",
"sales": "Sales"
},
"products": {
"homeDecor": {
"name": "Home Decor Range",
"sales": "10%"
},
"disneyBag": {
"name": "Disney Princess Pink Bag 18\"",
"sales": "29%"
},
"bathroom": {
"name": "Bathroom Essentials",
"sales": "65%"
},
"smartwatch": {
"name": "Apple Smartwatches",
"sales": "32%"
},
"fitness": {
"name": "Fitness Tracker",
"sales": "78%"
},
"earbuds": {
"name": "Wireless Earbuds",
"sales": "41%"
}
}
},
"salesMappingCountry": {
"title": "Sales Mapping by Country"
},
"volumeServiceLevel": {
"title": "Volume vs Service Level",
"legend": {
"volume": "Volume",
"services": "Services"
}
}
},
"greeting": {
"dawn": "Good morning!",
"morning": "Good morning!",
"afternoon": "Good afternoon!",
"evening": "Good evening!"
},
"exceptionPage": {
"gohome": "Go Home",
"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"
},
"menus": {
"login": {
"title": "Login"
},
"register": {
"title": "Register"
},
"forgetPassword": {
"title": "Forget Password"
},
"outside": {
"title": "Outside"
},
"dashboard": {
"title": "Dashboard",
"console": "Console",
"analysis": "Analysis",
"ecommerce": "Ecommerce"
},
"widgets": {
"title": "Components",
"iconList": "Icon List",
"iconSelector": "Icon Selector",
"imageCrop": "Image Crop",
"excel": "Excel Import Export",
"video": "Video Player",
"countTo": "Count To",
"wangEditor": "Wang Editor",
"watermark": "Watermark",
"contextMenu": "Context Menu",
"qrcode": "QR Code",
"drag": "Drag",
"textScroll": "Text Scroll",
"fireworks": "Fireworks",
"elementUI": "Component Overview"
},
"template": {
"title": "Template Center",
"chat": "Chat",
"cards": "Cards",
"banners": "Banners",
"charts": "Charts",
"map": "Map",
"calendar": "Calendar",
"pricing": "Pricing"
},
"article": {
"title": "Article Management",
"articleList": "Article List",
"articleDetail": "Article Detail",
"comment": "Comment",
"articlePublish": "Article Publish"
},
"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",
"nested": "Nested Menu",
"menu1": "Menu 1",
"menu2": "Menu 2",
"menu21": "Menu 2-1",
"menu3": "Menu 3",
"menu31": "Menu 3-1",
"menu32": "Menu 3-2",
"menu321": "Menu 3-2-1"
},
"safeguard": {
"title": "Safeguard",
"server": "Server"
},
"plan": {
"title": "Version Plan",
"log": "Change Log"
},
"help": {
"title": "Help Center",
"document": "Document"
}
},
"table": {
"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"
}
}
+428
View File
@@ -0,0 +1,428 @@
{
"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": "选择"
},
"setting": {
"menuType": {
"title": "菜单布局",
"list": ["垂直", "水平", "混合", "双列"]
},
"theme": {
"title": "主题风格",
"list": ["浅色", "深色", "系统"]
},
"menu": {
"title": "菜单风格"
},
"color": {
"title": "系统主题色"
},
"box": {
"title": "盒子样式",
"list": ["边框", "阴影"]
},
"container": {
"title": "容器宽度",
"list": ["铺满", "定宽"]
},
"basics": {
"title": "基础配置",
"list": {
"multiTab": "开启多标签栏",
"accordion": "侧边栏开启手风琴模式",
"collapseSidebar": "显示折叠侧边栏按钮",
"reloadPage": "显示重载页面按钮",
"breadcrumb": "显示全局面包屑导航",
"language": "显示多语言选择",
"progressBar": "显示顶部进度条",
"weakMode": "色弱模式",
"watermark": "全局水印",
"menuWidth": "菜单宽度",
"tabStyle": "标签页风格",
"pageTransition": "页面切换动画",
"borderRadius": "自定义圆角"
}
},
"tabStyle": {
"default": "默认",
"card": "卡片",
"google": "谷歌"
},
"transition": {
"list": {
"none": "无动画",
"fade": "淡入淡出",
"slideLeft": "左侧滑入",
"slideBottom": "下方滑入",
"slideTop": "上方滑入"
}
}
},
"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": ["请输入账号", "请输入密码", "请拖动滑块完成验证","请选择公司"],
"sliderText": "按住滑块拖动",
"sliderSuccessText": "验证成功",
"rememberPwd": "记住密码",
"forgetPwd": "忘记密码",
"btnText": "登录",
"noAccount": "还没有账号?",
"register": "注册",
"success": {
"title": "登录成功",
"message": "欢迎回来"
},
"otherLogin": "其他登录方式"
},
"forgetPassword": {
"title": "忘记密码?",
"subTitle": "输入您的电子邮件来重置您的密码",
"placeholder": "请输入您的电子邮件",
"submitBtnText": "提交",
"backBtnText": "返回"
},
"register": {
"title": "创建账号",
"subTitle": "欢迎加入我们,请填写以下信息完成注册",
"placeholder": ["请输入账号", "请输入密码", "请再次输入密码"],
"rule": [
"请再次输入密码",
"两次输入密码不一致!",
"长度在 3 到 20 个字符",
"密码长度不能小于6位",
"请同意隐私协议"
],
"agreeText": "我同意",
"privacyPolicy": "《隐私政策》",
"submitBtnText": "注册",
"hasAccount": "已有账号?",
"toLogin": "去登录"
},
"lockScreen": {
"pwdError": "密码错误",
"lock": {
"inputPlaceholder": "请输入锁屏密码",
"btnText": "锁定"
},
"unlock": {
"inputPlaceholder": "请输入解锁密码",
"btnText": "解锁",
"backBtnText": "返回登录"
}
},
"analysis": {
"todaySales": {
"title": "今日销售",
"subtitle": "销售总结",
"export": "导出",
"cards": {
"totalSales": {
"label": "总销售额",
"change": "+15%"
},
"totalOrder": {
"label": "总订单",
"change": "+5%"
},
"productSold": {
"label": "已售产品",
"change": "+2%"
},
"newCustomers": {
"label": "新客户",
"change": "+8%"
}
},
"fromYesterday": "较昨天"
},
"visitorInsights": {
"title": "访客洞察",
"legend": {
"loyalCustomers": "忠实客户",
"newCustomers": "新客户"
}
},
"totalRevenue": {
"title": "总收入",
"legend": {
"onlineSales": "线上销售",
"offlineSales": "线下销售"
}
},
"customerSatisfaction": {
"title": "客户满意度",
"legend": {
"lastMonth": "上月",
"thisMonth": "本月"
}
},
"targetVsReality": {
"title": "目标与实际",
"realitySales": {
"label": "实际销售",
"sublabel": "全球"
},
"targetSales": {
"label": "目标销售",
"sublabel": "商业"
}
},
"topProducts": {
"title": "热门产品",
"columns": {
"name": "名称",
"popularity": "热度",
"sales": "销量"
},
"products": {
"homeDecor": {
"name": "家居装饰系列",
"sales": "10%"
},
"disneyBag": {
"name": "迪士尼公主粉色包 18\"",
"sales": "29%"
},
"bathroom": {
"name": "浴室用品",
"sales": "65%"
},
"smartwatch": {
"name": "苹果智能手表",
"sales": "32%"
},
"fitness": {
"name": "健身追踪器",
"sales": "78%"
},
"earbuds": {
"name": "无线耳机",
"sales": "41%"
}
}
},
"salesMappingCountry": {
"title": "各国销售分布"
},
"volumeServiceLevel": {
"title": "业务量与服务水平",
"legend": {
"volume": "业务量",
"services": "服务"
}
}
},
"greeting": {
"dawn": "凌晨了!",
"morning": "上午好!",
"afternoon": "下午好!",
"evening": "晚上好!"
},
"exceptionPage": {
"gohome": "返回首页",
"403": "抱歉,您无权访问该页面",
"404": "抱歉,您访问的页面不存在",
"500": "抱歉,服务器出错了"
},
"menus": {
"login": {
"title": "登录"
},
"register": {
"title": "注册"
},
"forgetPassword": {
"title": "忘记密码"
},
"outside": {
"title": "内嵌页面"
},
"dashboard": {
"title": "仪表盘",
"console": "工作台",
"analysis": "分析页",
"ecommerce": "电子商务"
},
"widgets": {
"title": "组件中心",
"iconList": "Icon 图标",
"iconSelector": "图标选择器",
"imageCrop": "图像裁剪",
"excel": "Excel 导入导出",
"video": "视频播放器",
"countTo": "数字滚动",
"wangEditor": "富文本编辑器",
"watermark": "水印",
"contextMenu": "右键菜单",
"qrcode": "二维码",
"drag": "拖拽",
"textScroll": "文字滚动",
"fireworks": "礼花",
"elementUI": "组件总览"
},
"template": {
"title": "模板中心",
"chat": "聊天",
"cards": "卡片",
"banners": "横幅",
"charts": "图表",
"map": "地图",
"calendar": "日历",
"pricing": "定价"
},
"article": {
"title": "文章管理",
"articleList": "文章列表",
"articleDetail": "文章详情",
"comment": "留言管理",
"articlePublish": "文章发布"
},
"result": {
"title": "结果页面",
"success": "成功页",
"fail": "失败页"
},
"exception": {
"title": "异常页面",
"forbidden": "403",
"notFound": "404",
"serverError": "500"
},
"work": {
"title": "工单管理",
"order": "工单列表",
"type": "工单类型",
"orderDetail": "工单详情",
"orderCreate": "工单创建",
"orderEdit": "工单编辑",
"orderDelete": "工单删除",
"orderSearch": "工单搜索"
},
"system": {
"title": "系统管理",
"user": "用户管理",
"role": "角色管理",
"userCenter": "个人中心",
"menu": "菜单管理",
"nested": "嵌套菜单",
"menu1": "菜单1",
"menu2": "菜单2",
"menu21": "菜单2-1",
"menu3": "菜单3",
"menu31": "菜单3-1",
"menu32": "菜单3-2",
"menu321": "菜单3-2-1"
},
"safeguard": {
"title": "运维管理",
"server": "服务器管理"
},
"plan": {
"title": "版本计划",
"log": "更新日志"
},
"help": {
"title": "帮助中心",
"document": "官方文档"
},
"car":{
"title": "车辆管理",
"used": "二手车",
"newcar": "新车"
}
},
"table": {
"searchBar": {
"reset": "重置",
"search": "查询",
"expand": "展开",
"collapse": "收起",
"searchInputPlaceholder": "请输入",
"searchSelectPlaceholder": "请选择"
},
"selection": "选择",
"sizeOptions": {
"small": "紧凑",
"default": "默认",
"large": "宽松"
},
"column": {
"selection": "勾选",
"expand": "展开",
"index": "序号"
},
"zebra": "斑马纹",
"border": "边框",
"headerBackground": "表头背景"
}
}