perf: remove the side effects of @vben-core/locales
							parent
							
								
									208d4188fc
								
							
						
					
					
						commit
						fd61d2efc4
					
				|  | @ -16,6 +16,7 @@ async function bootstrap(namespace: string) { | |||
|   await setupI18n(app, { | ||||
|     defaultLocale: preferences.app.locale, | ||||
|     loadMessages, | ||||
|     missingWarn: import.meta.env.PROD, | ||||
|   }); | ||||
| 
 | ||||
|   // 配置 pinia-store
 | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ import type { | |||
| 
 | ||||
| import { join } from 'node:path'; | ||||
| 
 | ||||
| import { getPackage, getPackages } from '@vben/node-utils'; | ||||
| import { getPackages } from '@vben/node-utils'; | ||||
| 
 | ||||
| import viteVueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'; | ||||
| import viteVue from '@vitejs/plugin-vue'; | ||||
|  | @ -118,11 +118,8 @@ async function loadApplicationPlugins( | |||
|       condition: i18n, | ||||
|       plugins: async () => { | ||||
|         const { packages } = await getPackages(); | ||||
|         const pkg = await getPackage('@vben-core/locales'); | ||||
| 
 | ||||
|         const include: string[] = [ | ||||
|           `${join(pkg?.dir ?? '', isBuild ? 'dist' : 'src', 'langs')}/*.yaml`, | ||||
|         ]; | ||||
|         const include: string[] = []; | ||||
| 
 | ||||
|         // 加载所有应用的国际化文件
 | ||||
|         for (const { dir, relativeDir } of packages) { | ||||
|  |  | |||
|  | @ -40,9 +40,6 @@ | |||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "peerDependencies": { | ||||
|     "vite": "latest" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@intlify/core-base": "^9.13.1", | ||||
|     "@vben-core/typings": "workspace:*", | ||||
|  |  | |||
|  | @ -8,18 +8,18 @@ import { createI18n } from 'vue-i18n'; | |||
| 
 | ||||
| const loadedLanguages = new Set<string>(); | ||||
| 
 | ||||
| // TODO:import.meta.env 和 import.meta.glob 是源码依赖,会导致该包依赖外部项目必须是vite才可以
 | ||||
| // TODO:import.meta.env,会导致该包依赖外部项目必须是vite才可以
 | ||||
| const i18n = createI18n({ | ||||
|   globalInjection: true, | ||||
|   legacy: false, | ||||
|   locale: '', | ||||
|   messages: {}, | ||||
|   missingWarn: import.meta.env.PROD, | ||||
|   silentFallbackWarn: !import.meta.env.PROD, | ||||
|   silentTranslationWarn: !import.meta.env.PROD, // true - warning off
 | ||||
| }); | ||||
| 
 | ||||
| const modules = import.meta.glob('./langs/*.y(a)?ml'); | ||||
| const modules = { | ||||
|   './langs/en-US.json': async () => import('./langs/en-US.json'), | ||||
|   './langs/zh-CN.json': async () => import('./langs/zh-CN.json'), | ||||
| }; | ||||
| 
 | ||||
| const localesMap = loadLocalesMap(modules); | ||||
| 
 | ||||
|  | @ -31,11 +31,12 @@ function loadLocalesMap(modules: Record<string, () => Promise<unknown>>) { | |||
|   const localesMap: Record<Locale, ImportLocaleFn> = {}; | ||||
| 
 | ||||
|   for (const [path, loadLocale] of Object.entries(modules)) { | ||||
|     const key = path.match(/([\w-]*)\.y(a)?ml/)?.[1]; | ||||
|     const key = path.match(/([\w-]*)\.(yaml|yml|json)/)?.[1]; | ||||
|     if (key) { | ||||
|       localesMap[key] = loadLocale as ImportLocaleFn; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   return localesMap; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -25,9 +25,17 @@ async function setupI18n(app: App, options: LocaleSetupOptions = {}) { | |||
|   loadMessages = options.loadMessages || (async () => ({})); | ||||
|   app.use(i18n); | ||||
|   await loadLocaleMessages(defaultLocale); | ||||
| 
 | ||||
|   // 在控制台打印警告
 | ||||
|   i18n.global.setMissingHandler((locale, key) => { | ||||
|     options.missingWarn && | ||||
|       console.warn( | ||||
|         `[intlify] Not found '${key}' key in '${locale}' locale messages.`, | ||||
|       ); | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| export { $t, loadLocaleMessages, loadLocalesMap, setupI18n }; | ||||
| export { $t, i18n, loadLocaleMessages, loadLocalesMap, setupI18n }; | ||||
| export { useI18n } from 'vue-i18n'; | ||||
| export type { Locale } from 'vue-i18n'; | ||||
| export type { ImportLocaleFn }; | ||||
|  |  | |||
|  | @ -0,0 +1,251 @@ | |||
| { | ||||
|   "page": { | ||||
|     "essentials": { | ||||
|       "login": "Login", | ||||
|       "register": "Register", | ||||
|       "code-login": "Code Login", | ||||
|       "qrcode-login": "Qrcode Login", | ||||
|       "forget-password": "Forget Password" | ||||
|     }, | ||||
|     "dashboard": { | ||||
|       "title": "Dashboard", | ||||
|       "analytics": "Analytics", | ||||
|       "workspace": "Workspace" | ||||
|     }, | ||||
|     "vben": { | ||||
|       "about": "About", | ||||
|       "document": "Document" | ||||
|     } | ||||
|   }, | ||||
|   "common": { | ||||
|     "back": "Back", | ||||
|     "back-to-home": "Back To Home", | ||||
|     "login": "Login", | ||||
|     "logout": "Logout", | ||||
|     "prompt": "Prompt", | ||||
|     "cancel": "Cancel", | ||||
|     "confirm": "Comfirm", | ||||
|     "not-data": "No data", | ||||
|     "refresh": "Refresh" | ||||
|   }, | ||||
|   "fallback": { | ||||
|     "page-not-found": "Oops! Page Not Found", | ||||
|     "page-not-found-desc": "Sorry, we couldn't find the page you were looking for.", | ||||
|     "forbidden": "Oops! Access Denied", | ||||
|     "forbidden-desc": "Sorry, but you don't have permission to access this page.", | ||||
|     "internal-error": "Oops! Something Went Wrong", | ||||
|     "internal-error-desc": "Sorry, but the server encountered an error.", | ||||
|     "offline": "Offline Page", | ||||
|     "offline-error": "Oops! Network Error", | ||||
|     "offline-error-desc": "Sorry, can't connect to the internet. Check your connection.", | ||||
|     "coming-soon": "Coming soon" | ||||
|   }, | ||||
|   "widgets": { | ||||
|     "document": "Document", | ||||
|     "qa": "FAQ & Help", | ||||
|     "setting": "Setting", | ||||
|     "logout-tip": "Do you want to log out?", | ||||
|     "view-all": "View all messages", | ||||
|     "notifications": "Notifications", | ||||
|     "make-all-as-read": "Make all as read", | ||||
|     "clear-notifications": "Clear", | ||||
|     "search": { | ||||
|       "title": "Search", | ||||
|       "search-navigate": "Search Navigate", | ||||
|       "select": "To select", | ||||
|       "navigate": "To navigate", | ||||
|       "close": "To close", | ||||
|       "no-results": "No results for", | ||||
|       "no-recent": "No recent searches", | ||||
|       "recent": "Recent" | ||||
|     } | ||||
|   }, | ||||
|   "authentication": { | ||||
|     "welcome-back": "Welcome Back", | ||||
|     "page-title": "Plug-and-play backend system", | ||||
|     "page-desc": "Efficient, versatile frontend template", | ||||
|     "login-success": "Login successful", | ||||
|     "login-success-desc": "Welcome back", | ||||
|     "login-subtitle": "Enter your account details to manage your projects", | ||||
|     "username": "Username", | ||||
|     "password": "Password", | ||||
|     "username-tip": "Username is required", | ||||
|     "password-tip": "Password is required", | ||||
|     "remember-me": "Remember Me", | ||||
|     "create-an-account": "Create an account", | ||||
|     "create-account": "Create account", | ||||
|     "already-account": "Already have an account?", | ||||
|     "account-tip": "Don't have an account yet?", | ||||
|     "sign-up": "Sign Up", | ||||
|     "sign-up-subtitle": "Make managing your applications simple and fun", | ||||
|     "comfirm-password": "Comfirm Password", | ||||
|     "comfirm-password-tip": "The passwords entered twice do not match", | ||||
|     "sign-up-agree": "I agree to", | ||||
|     "sign-up-privacy-policy": "Privacy-policy", | ||||
|     "sign-up-terms": "Terms", | ||||
|     "sign-up-agree-tip": "Please agree to the Privacy Policy and Terms", | ||||
|     "go-login": "Login instead", | ||||
|     "password-strength": "Use 8 or more characters with a mix of letters, numbers & symbols", | ||||
|     "forget-password": "Forget Password?", | ||||
|     "forget-password-subtitle": "Enter your email and we'll send you instructions to reset your password", | ||||
|     "email-tip": "Email is required", | ||||
|     "send-reset-link": "Send Reset Link", | ||||
|     "email": "Email", | ||||
|     "qrcode-subtitle": "Please scan the QR code to log in on your mobile device", | ||||
|     "qrcode-prompt": "Scanning the code to complete the login", | ||||
|     "qrcode-login": "QR Login", | ||||
|     "code-subtitle": "Please enter your phone number to start managing your projects", | ||||
|     "code": "Security code", | ||||
|     "code-tip": "Security code is required", | ||||
|     "mobile": "Mobile", | ||||
|     "mobile-login": "Mobile Login", | ||||
|     "mobile-tip": "Mobile is required", | ||||
|     "send-code": "Get Security code", | ||||
|     "send-text": "Reacquire in {0}s", | ||||
|     "third-party-login": "Or continue with", | ||||
|     "layout": { | ||||
|       "center": "Align Center", | ||||
|       "align-left": "Align Left", | ||||
|       "align-right": "Align Right" | ||||
|     } | ||||
|   }, | ||||
|   "preferences": { | ||||
|     "title": "Preferences", | ||||
|     "subtitle": "Customize Preferences & Preview in Real Time", | ||||
|     "reset-tip": "The data has changed, click to reset", | ||||
|     "appearance": "Appearance", | ||||
|     "layout": "Layout", | ||||
|     "content": "Content", | ||||
|     "other": "Other", | ||||
|     "wide": "Fluid", | ||||
|     "compact": "Fixed Width", | ||||
|     "follow-system": "Follow System", | ||||
|     "vertical": "Vertical", | ||||
|     "vertical-tip": "Side Vertical Menu Mode", | ||||
|     "horizontal": "Horizontal", | ||||
|     "horizontal-tip": "Top Horizontal Menu", | ||||
|     "two-column": "Two Column", | ||||
|     "two-column-tip": "Vertical Two Column Menu Mode", | ||||
|     "mixed-menu": "Mixed Menu", | ||||
|     "split-menu": "Split Menu", | ||||
|     "mixed-menu-tip": "Vertical & Horizontal Menu Co-exists", | ||||
|     "full-content": "Full Content", | ||||
|     "full-content-tip": "Display only the main content, no menus", | ||||
|     "weak-mode": "Color Weak Mode", | ||||
|     "gray-mode": "Gray Mode", | ||||
|     "normal": "Normal", | ||||
|     "plain": "Plain", | ||||
|     "rounded": "Rounded", | ||||
|     "interface-control": "Interface Layout Control", | ||||
|     "copy": "Copy Preferences", | ||||
|     "copy-success": "Copy successful. Please replace in `src/preferences.ts` of the app", | ||||
|     "clear-and-logout": "Clear Cache & Logout", | ||||
|     "reset-success": "Preferences reset successfully", | ||||
|     "mode": "Mode", | ||||
|     "logo-visible": "Display Logo", | ||||
|     "general": "General", | ||||
|     "language": "Language", | ||||
|     "dynamic-title": "Dynamic Title", | ||||
|     "ai-assistant": "Ai Assistant", | ||||
|     "sidebar": { | ||||
|       "title": "Sidebar", | ||||
|       "width": "Width", | ||||
|       "visible": "Display Sidebar", | ||||
|       "collapsed": "Collpase Menu", | ||||
|       "collapsed-show-title": "Display menu name" | ||||
|     }, | ||||
|     "tabbar": { | ||||
|       "title": "Tabbar", | ||||
|       "enable": "Enable Tab Bar", | ||||
|       "icon": "Display Tabbar Icon", | ||||
|       "context-menu": { | ||||
|         "reload": "Reload", | ||||
|         "close": "Close", | ||||
|         "pin": "Pin", | ||||
|         "unpin": "Unpin", | ||||
|         "close-left": "Close Left", | ||||
|         "close-right": "Close Right", | ||||
|         "close-other": "Close Other", | ||||
|         "close-all": "Close All" | ||||
|       } | ||||
|     }, | ||||
|     "navigation-menu": { | ||||
|       "title": "Navigation Menu", | ||||
|       "style": "Navigation menu style", | ||||
|       "split": "Navigation Menu Separation", | ||||
|       "accordion": "Sidebar Navigation Menu Accordion mode", | ||||
|       "split-tip": "When enabled, the sidebar shows the top bar's submenu" | ||||
|     }, | ||||
|     "breadcrumb": { | ||||
|       "title": "Breadcrumb", | ||||
|       "home": "Display the home button", | ||||
|       "enable": "Enable Breadcrumb", | ||||
|       "icon": "Display breadcrumb icon", | ||||
|       "background": "background", | ||||
|       "style": "Breadcrumb Type", | ||||
|       "hide-only-one": "Hidden when only one left" | ||||
|     }, | ||||
|     "animation": { | ||||
|       "title": "Animation", | ||||
|       "loading": "Page transition loading", | ||||
|       "transition": "Page transition animation", | ||||
|       "progress": "Page transition progress" | ||||
|     }, | ||||
|     "theme": { | ||||
|       "title": "Theme", | ||||
|       "radius": "Radius", | ||||
|       "light": "Light", | ||||
|       "dark": "Dark", | ||||
|       "dark-menu": "Semi Dark Menu", | ||||
|       "weak-mode": "Color Weak Mode", | ||||
|       "gray-mode": "Gray Mode", | ||||
|       "builtin": { | ||||
|         "title": "Built-in", | ||||
|         "default": "Default", | ||||
|         "violet": "Violet", | ||||
|         "pink": "Pink", | ||||
|         "rose": "Rose", | ||||
|         "sky-blue": "Sky Blue", | ||||
|         "deep-blue": "Deep Blue", | ||||
|         "green": "Green", | ||||
|         "deep-green": "Deep Green", | ||||
|         "orange": "Orange", | ||||
|         "yellow": "Yellow", | ||||
|         "zinc": "Zinc", | ||||
|         "neutral": "Neutral", | ||||
|         "slate": "Slate", | ||||
|         "gray": "Gray", | ||||
|         "custom": "Custom" | ||||
|       } | ||||
|     }, | ||||
|     "header": { | ||||
|       "title": "Header", | ||||
|       "visible": "Display Header", | ||||
|       "mode-static": "Static", | ||||
|       "mode-fixed": "Fixed", | ||||
|       "mode-auto": "Auto hide/display", | ||||
|       "mode-auto-scroll": "Scroll hide/display" | ||||
|     }, | ||||
|     "footer": { | ||||
|       "title": "Footer", | ||||
|       "visible": "Display Footer", | ||||
|       "fixed": "Fixed at the bottom" | ||||
|     }, | ||||
|     "copyright": { | ||||
|       "title": "Copyright", | ||||
|       "enable": "Enable copyright", | ||||
|       "company-name": "Company name", | ||||
|       "company-site-link": "Company homepage", | ||||
|       "date": "Date", | ||||
|       "icp": "ICP number", | ||||
|       "icp-link": "ICP Site Link" | ||||
|     }, | ||||
|     "shortcut-keys": { | ||||
|       "title": "Shortcut Keys", | ||||
|       "global": "Global", | ||||
|       "search": "Global Search", | ||||
|       "logout": "Logout", | ||||
|       "preferences": "Preferences" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | @ -1,234 +0,0 @@ | |||
| page: | ||||
|   essentials: | ||||
|     login: Login | ||||
|     register: Register | ||||
|     code-login: Code Login | ||||
|     qrcode-login: Qrcode Login | ||||
|     forget-password: Forget Password | ||||
|   dashboard: | ||||
|     title: Dashboard | ||||
|     analytics: Analytics | ||||
|     workspace: Workspace | ||||
|   vben: | ||||
|     about: About | ||||
|     document: Document | ||||
| 
 | ||||
| common: | ||||
|   back: Back | ||||
|   back-to-home: Back To Home | ||||
|   login: Login | ||||
|   logout: Logout | ||||
|   prompt: Prompt | ||||
|   cancel: Cancel | ||||
|   confirm: Comfirm | ||||
|   not-data: No data | ||||
|   refresh: Refresh | ||||
| 
 | ||||
| fallback: | ||||
|   page-not-found: Oops! Page Not Found | ||||
|   page-not-found-desc: Sorry, we couldn't find the page you were looking for. | ||||
|   forbidden: Oops! Access Denied | ||||
|   forbidden-desc: Sorry, but you don't have permission to access this page. | ||||
|   internal-error: Oops! Something Went Wrong | ||||
|   internal-error-desc: Sorry, but the server encountered an error. | ||||
|   offline: Offline Page | ||||
|   offline-error: Oops! Network Error | ||||
|   offline-error-desc: Sorry, can't connect to the internet. Check your connection. | ||||
|   coming-soon: Coming soon | ||||
| 
 | ||||
| widgets: | ||||
|   document: Document | ||||
|   qa: FAQ & Help | ||||
|   setting: Setting | ||||
|   logout-tip: Do you want to log out? | ||||
|   view-all: View all messages | ||||
|   notifications: Notifications | ||||
|   make-all-as-read: Make all as read | ||||
|   clear-notifications: Clear | ||||
|   search: | ||||
|     title: Search | ||||
|     search-navigate: Search Navigate | ||||
|     select: To select | ||||
|     navigate: To navigate | ||||
|     close: To close | ||||
|     no-results: No results for | ||||
|     no-recent: No recent searches | ||||
|     recent: Recent | ||||
| 
 | ||||
| authentication: | ||||
|   welcome-back: Welcome Back | ||||
|   page-title: Plug-and-play backend system | ||||
|   page-desc: Efficient, versatile frontend template | ||||
|   login-success: Login successful | ||||
|   login-success-desc: Welcome back | ||||
|   login-subtitle: Enter your account details to manage your projects | ||||
|   username: Username | ||||
|   password: Password | ||||
|   username-tip: Username is required | ||||
|   password-tip: Password is required | ||||
|   remember-me: Remember Me | ||||
|   create-an-account: Create an account | ||||
|   create-account: Create account | ||||
|   already-account: Already have an account? | ||||
|   account-tip: Don't have an account yet? | ||||
|   sign-up: Sign Up | ||||
|   sign-up-subtitle: Make managing your applications simple and fun | ||||
|   comfirm-password: Comfirm Password | ||||
|   comfirm-password-tip: The passwords entered twice do not match | ||||
|   sign-up-agree: I agree to | ||||
|   sign-up-privacy-policy: Privacy-policy | ||||
|   sign-up-terms: Terms | ||||
|   sign-up-agree-tip: Please agree to the Privacy Policy and Terms | ||||
|   go-login: Login instead | ||||
|   password-strength: Use 8 or more characters with a mix of letters, numbers & symbols | ||||
|   forget-password: Forget Password? | ||||
|   forget-password-subtitle: Enter your email and we'll send you instructions to reset your password | ||||
|   email-tip: Email is required | ||||
|   send-reset-link: Send Reset Link | ||||
|   email: Email | ||||
|   qrcode-subtitle: Please scan the QR code to log in on your mobile device | ||||
|   qrcode-prompt: Scanning the code to complete the login | ||||
|   qrcode-login: QR Login | ||||
|   code-subtitle: Please enter your phone number to start managing your projects | ||||
|   code: Security code | ||||
|   code-tip: Security code is required | ||||
|   mobile: Mobile | ||||
|   mobile-login: Mobile Login | ||||
|   mobile-tip: Mobile is required | ||||
|   send-code: Get Security code | ||||
|   send-text: "Reacquire in {0}s" | ||||
|   third-party-login: Or continue with | ||||
|   layout: | ||||
|     center: Align Center | ||||
|     align-left: Align Left | ||||
|     align-right: Align Right | ||||
| 
 | ||||
| preferences: | ||||
|   title: Preferences | ||||
|   subtitle: Customize Preferences & Preview in Real Time | ||||
|   reset-tip: The data has changed, click to reset | ||||
|   # appearance | ||||
|   appearance: Appearance | ||||
|   # layout | ||||
|   layout: Layout | ||||
|   content: Content | ||||
|   other: Other | ||||
|   wide: Fluid | ||||
|   compact: Fixed Width | ||||
|   follow-system: Follow System | ||||
|   vertical: Vertical | ||||
|   vertical-tip: Side Vertical Menu Mode | ||||
|   horizontal: Horizontal | ||||
|   horizontal-tip: Top Horizontal Menu | ||||
|   two-column: Two Column | ||||
|   two-column-tip: Vertical Two Column Menu Mode | ||||
|   mixed-menu: Mixed Menu | ||||
|   split-menu: Split Menu | ||||
|   mixed-menu-tip: Vertical & Horizontal Menu Co-exists | ||||
|   full-content: Full Content | ||||
|   full-content-tip: Display only the main content, no menus | ||||
|   weak-mode: Color Weak Mode | ||||
|   gray-mode: Gray Mode | ||||
|   normal: Normal | ||||
|   plain: Plain | ||||
|   rounded: Rounded | ||||
|   interface-control: Interface Layout Control | ||||
|   copy: Copy Preferences | ||||
|   copy-success: Copy successful. Please replace in `src/preferences.ts` of the app | ||||
|   clear-and-logout: Clear Cache & Logout | ||||
|   reset-success: Preferences reset successfully | ||||
|   mode: Mode | ||||
|   logo-visible: Display Logo | ||||
|   # general | ||||
|   general: General | ||||
|   language: Language | ||||
|   dynamic-title: Dynamic Title | ||||
|   ai-assistant: Ai Assistant | ||||
|   sidebar: | ||||
|     title: Sidebar | ||||
|     width: Width | ||||
|     visible: Display Sidebar | ||||
|     collapsed: Collpase Menu | ||||
|     collapsed-show-title: Display menu name | ||||
|   tabbar: | ||||
|     title: Tabbar | ||||
|     enable: Enable Tab Bar | ||||
|     icon: Display Tabbar Icon | ||||
|     context-menu: | ||||
|       reload: Reload | ||||
|       close: Close | ||||
|       pin: Pin | ||||
|       unpin: Unpin | ||||
|       close-left: Close Left | ||||
|       close-right: Close Right | ||||
|       close-other: Close Other | ||||
|       close-all: Close All | ||||
|   navigation-menu: | ||||
|     title: Navigation Menu | ||||
|     style: Navigation menu style | ||||
|     split: Navigation Menu Separation | ||||
|     accordion: Sidebar Navigation Menu Accordion mode | ||||
|     split-tip: When enabled, the sidebar shows the top bar's submenu | ||||
|   breadcrumb: | ||||
|     title: Breadcrumb | ||||
|     home: Display the home button | ||||
|     enable: Enable Breadcrumb | ||||
|     icon: Display breadcrumb icon | ||||
|     background: background | ||||
|     style: Breadcrumb Type | ||||
|     hide-only-one: Hidden when only one left | ||||
|   animation: | ||||
|     title: Animation | ||||
|     loading: Page transition loading | ||||
|     transition: Page transition animation | ||||
|     progress: Page transition progress | ||||
|   theme: | ||||
|     title: Theme | ||||
|     radius: Radius | ||||
|     light: Light | ||||
|     dark: Dark | ||||
|     dark-menu: Semi Dark Menu | ||||
|     weak-mode: Color Weak Mode | ||||
|     gray-mode: Gray Mode | ||||
|     builtin: | ||||
|       title: Built-in | ||||
|       default: Default | ||||
|       violet: Violet | ||||
|       pink: Pink | ||||
|       rose: Rose | ||||
|       sky-blue: Sky Blue | ||||
|       deep-blue: Deep Blue | ||||
|       green: Green | ||||
|       deep-green: Deep Green | ||||
|       orange: Orange | ||||
|       yellow: Yellow | ||||
|       zinc: Zinc | ||||
|       neutral: Neutral | ||||
|       slate: Slate | ||||
|       gray: Gray | ||||
|       custom: Custom | ||||
|   header: | ||||
|     title: Header | ||||
|     visible: Display Header | ||||
|     mode-static: Static | ||||
|     mode-fixed: Fixed | ||||
|     mode-auto: Auto hide/display | ||||
|     mode-auto-scroll: Scroll hide/display | ||||
|   footer: | ||||
|     title: Footer | ||||
|     visible: Display Footer | ||||
|     fixed: Fixed at the bottom | ||||
|   copyright: | ||||
|     title: Copyright | ||||
|     enable: Enable copyright | ||||
|     company-name: Company name | ||||
|     company-site-link: Company homepage | ||||
|     date: Date | ||||
|     icp: ICP number | ||||
|     icp-link: ICP Site Link | ||||
|   shortcut-keys: | ||||
|     title: Shortcut Keys | ||||
|     global: Global | ||||
|     search: Global Search | ||||
|     logout: Logout | ||||
|     preferences: Preferences | ||||
|  | @ -0,0 +1,250 @@ | |||
| { | ||||
|   "page": { | ||||
|     "essentials": { | ||||
|       "login": "登陆", | ||||
|       "register": "注册", | ||||
|       "code-login": "验证码登陆", | ||||
|       "qrcode-login": "二维码登陆", | ||||
|       "forget-password": "忘记密码" | ||||
|     }, | ||||
|     "dashboard": { | ||||
|       "title": "概览", | ||||
|       "analytics": "分析页", | ||||
|       "workspace": "工作台" | ||||
|     }, | ||||
|     "vben": { | ||||
|       "about": "关于", | ||||
|       "document": "文档" | ||||
|     } | ||||
|   }, | ||||
|   "common": { | ||||
|     "back": "返回", | ||||
|     "back-to-home": "返回首页", | ||||
|     "login": "登录", | ||||
|     "logout": "退出登录", | ||||
|     "prompt": "提示", | ||||
|     "cancel": "取消", | ||||
|     "confirm": "确认", | ||||
|     "not-data": "暂无数据", | ||||
|     "refresh": "刷新", | ||||
|     "loading-menu": "加载菜单中" | ||||
|   }, | ||||
|   "fallback": { | ||||
|     "page-not-found": "哎呀!未找到页面", | ||||
|     "page-not-found-desc": "抱歉,我们无法找到您要找的页面。", | ||||
|     "forbidden": "哎呀!访问被拒绝", | ||||
|     "forbidden-desc": "抱歉,您没有权限访问此页面。", | ||||
|     "internal-error": "哎呀!出错了", | ||||
|     "internal-error-desc": "抱歉,服务器遇到错误。", | ||||
|     "offline": "离线页面", | ||||
|     "offline-error": "哎呀!网络错误", | ||||
|     "offline-error-desc": "抱歉,无法连接到互联网,请检查您的网络连接并重试。", | ||||
|     "coming-soon": "即将推出" | ||||
|   }, | ||||
|   "widgets": { | ||||
|     "document": "文档", | ||||
|     "qa": "问题 & 帮助", | ||||
|     "setting": "设置", | ||||
|     "logout-tip": "是否退出登录?", | ||||
|     "view-all": "查看所有消息", | ||||
|     "notifications": "通知", | ||||
|     "make-all-as-read": "全部标记为已读", | ||||
|     "clear-notifications": "清空", | ||||
|     "search": { | ||||
|       "title": "搜索", | ||||
|       "search-navigate": "搜索导航菜单", | ||||
|       "select": "选择", | ||||
|       "navigate": "导航", | ||||
|       "close": "关闭", | ||||
|       "no-results": "未找到搜索结果", | ||||
|       "no-recent": "没有搜索历史", | ||||
|       "recent": "搜索历史" | ||||
|     } | ||||
|   }, | ||||
|   "authentication": { | ||||
|     "welcome-back": "欢迎回来", | ||||
|     "page-title": "开箱即用的大型中后台管理系统", | ||||
|     "page-desc": "工程化、高性能、跨组件库的前端模版", | ||||
|     "login-success": "登录成功", | ||||
|     "login-success-desc": "欢迎回来", | ||||
|     "login-subtitle": "请输入您的帐户信息以开始管理您的项目", | ||||
|     "username": "账号", | ||||
|     "password": "密码", | ||||
|     "username-tip": "请输入用户名", | ||||
|     "password-tip": "请输入密码", | ||||
|     "remember-me": "记住账号", | ||||
|     "create-an-account": "创建一个账号", | ||||
|     "create-account": "创建账号", | ||||
|     "already-account": "已经有账号了?", | ||||
|     "account-tip": "还没有账号?", | ||||
|     "sign-up": "注册", | ||||
|     "sign-up-subtitle": "让您的应用程序管理变得简单而有趣", | ||||
|     "comfirm-password": "确认密码", | ||||
|     "comfirm-password-tip": "两次输入的密码不一致", | ||||
|     "sign-up-agree": "我同意", | ||||
|     "sign-up-privacy-policy": "隐私政策", | ||||
|     "sign-up-terms": "条款", | ||||
|     "sign-up-agree-tip": "请同意隐私政策和条款", | ||||
|     "go-login": "去登录", | ||||
|     "password-strength": "使用 8 个或更多字符,混合字母、数字和符号", | ||||
|     "forget-password": "忘记密码?", | ||||
|     "forget-password-subtitle": "输入您的电子邮件,我们将向您发送重置密码的连接", | ||||
|     "email-tip": "请输入邮箱", | ||||
|     "send-reset-link": "发送重置链接", | ||||
|     "email": "邮箱", | ||||
|     "qrcode-subtitle": "请用手机扫描二维码登录", | ||||
|     "qrcode-prompt": "扫码后点击 '确认',即可完成登录", | ||||
|     "qrcode-login": "扫码登录", | ||||
|     "code-subtitle": "请输入您的手机号码以开始管理您的项目", | ||||
|     "code": "验证码", | ||||
|     "code-tip": "请输入验证码", | ||||
|     "mobile": "手机号码", | ||||
|     "mobile-login": "手机号登录", | ||||
|     "mobile-tip": "请输入手机号码", | ||||
|     "send-code": "获取验证码", | ||||
|     "send-text": "{0}秒后重新获取", | ||||
|     "third-party-login": "其他登录方式", | ||||
|     "layout": { | ||||
|       "center": "居中", | ||||
|       "align-left": "居左", | ||||
|       "align-right": "居右" | ||||
|     } | ||||
|   }, | ||||
|   "preferences": { | ||||
|     "title": "偏好设置", | ||||
|     "subtitle": "自定义偏好设置 & 实时预览", | ||||
|     "reset-tip": "数据有变化,点击可进行重置", | ||||
|     "appearance": "外观", | ||||
|     "layout": "布局", | ||||
|     "content": "内容", | ||||
|     "other": "其它", | ||||
|     "wide": "流式", | ||||
|     "compact": "定宽", | ||||
|     "follow-system": "跟随系统", | ||||
|     "vertical": "垂直", | ||||
|     "vertical-tip": "侧边垂直菜单模式", | ||||
|     "horizontal": "水平", | ||||
|     "horizontal-tip": "水平菜单模式,菜单全部显示在顶部", | ||||
|     "two-column": "双列菜单", | ||||
|     "two-column-tip": "垂直双列菜单模式", | ||||
|     "mixed-menu": "混合菜单", | ||||
|     "mixed-menu-tip": "垂直水平菜单共存", | ||||
|     "split-menu": "切割菜单", | ||||
|     "full-content": "内容全屏", | ||||
|     "full-content-tip": "不显示任何菜单,只显示内容主体", | ||||
|     "interface-control": "界面布局控制", | ||||
|     "normal": "默认", | ||||
|     "plain": "朴素", | ||||
|     "rounded": "圆润", | ||||
|     "copy": "复制偏好设置", | ||||
|     "copy-success": "拷贝成功,请在 app 下的 `src/preferences.ts`内进行覆盖", | ||||
|     "clear-and-logout": "清空缓存 & 退出登录", | ||||
|     "reset-success": "重置偏好设置成功", | ||||
|     "mode": "模式", | ||||
|     "logo-visible": "显示 Logo", | ||||
|     "general": "通用", | ||||
|     "language": "语言", | ||||
|     "dynamic-title": "动态标题", | ||||
|     "ai-assistant": "Ai 助手", | ||||
|     "sidebar": { | ||||
|       "title": "侧边栏", | ||||
|       "width": "宽度", | ||||
|       "visible": "显示侧边栏", | ||||
|       "collapsed": "折叠菜单", | ||||
|       "collapsed-show-title": "显示菜单名" | ||||
|     }, | ||||
|     "tabbar": { | ||||
|       "title": "标签栏", | ||||
|       "enable": "启用标签栏", | ||||
|       "icon": "显示标签栏图标", | ||||
|       "context-menu": { | ||||
|         "reload": "重新加载", | ||||
|         "close": "关闭标签页", | ||||
|         "pin": "固定标签页", | ||||
|         "unpin": "取消固定标签页", | ||||
|         "close-left": "关闭左侧标签页", | ||||
|         "close-right": "关闭右侧标签页", | ||||
|         "close-other": "关闭其它标签页", | ||||
|         "close-all": "关闭全部标签页" | ||||
|       } | ||||
|     }, | ||||
|     "navigation-menu": { | ||||
|       "title": "导航菜单", | ||||
|       "style": "导航菜单风格", | ||||
|       "accordion": "侧边导航菜单手风琴模式", | ||||
|       "split": "导航菜单分离", | ||||
|       "split-tip": "开启时,侧边栏显示顶栏对应菜单的子菜单" | ||||
|     }, | ||||
|     "breadcrumb": { | ||||
|       "title": "面包屑导航", | ||||
|       "enable": "开启面包屑导航", | ||||
|       "icon": "显示面包屑图标", | ||||
|       "home": "显示首页按钮", | ||||
|       "style": "面包屑风格", | ||||
|       "hide-only-one": "仅有一个时隐藏", | ||||
|       "background": "背景" | ||||
|     }, | ||||
|     "animation": { | ||||
|       "title": "动画", | ||||
|       "loading": "页面切换 Loading", | ||||
|       "transition": "页面切换动画", | ||||
|       "progress": "页面切换进度条" | ||||
|     }, | ||||
|     "theme": { | ||||
|       "title": "主题", | ||||
|       "radius": "圆角", | ||||
|       "light": "浅色", | ||||
|       "dark": "深色", | ||||
|       "dark-menu": "深色菜单", | ||||
|       "weak-mode": "色弱模式", | ||||
|       "gray-mode": "灰色模式", | ||||
|       "builtin": { | ||||
|         "title": "内置主题", | ||||
|         "default": "默认", | ||||
|         "violet": "紫罗兰", | ||||
|         "pink": "樱花粉", | ||||
|         "rose": "玫瑰红", | ||||
|         "sky-blue": "天蓝色", | ||||
|         "deep-blue": "深蓝色", | ||||
|         "green": "浅绿色", | ||||
|         "deep-green": "深绿色", | ||||
|         "orange": "橙黄色", | ||||
|         "yellow": "柠檬黄", | ||||
|         "zinc": "锌色灰", | ||||
|         "neutral": "中性色", | ||||
|         "slate": "石板灰", | ||||
|         "gray": "中灰色", | ||||
|         "custom": "自定义" | ||||
|       } | ||||
|     }, | ||||
|     "header": { | ||||
|       "title": "顶栏", | ||||
|       "mode-static": "静止", | ||||
|       "mode-fixed": "固定", | ||||
|       "mode-auto": "自动隐藏和显示", | ||||
|       "mode-auto-scroll": "滚动隐藏和显示", | ||||
|       "visible": "显示顶栏" | ||||
|     }, | ||||
|     "footer": { | ||||
|       "title": "底栏", | ||||
|       "visible": "显示底栏", | ||||
|       "fixed": "固定在底部" | ||||
|     }, | ||||
|     "copyright": { | ||||
|       "title": "版权", | ||||
|       "enable": "启用版权", | ||||
|       "company-name": "公司名", | ||||
|       "company-site-link": "公司主页", | ||||
|       "date": "日期", | ||||
|       "icp": "ICP 备案号", | ||||
|       "icp-link": "ICP 网站链接" | ||||
|     }, | ||||
|     "shortcut-keys": { | ||||
|       "title": "快捷键", | ||||
|       "global": "全局", | ||||
|       "search": "全局搜索", | ||||
|       "logout": "退出登录", | ||||
|       "preferences": "偏好设置" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | @ -1,233 +0,0 @@ | |||
| page: | ||||
|   essentials: | ||||
|     login: 登陆 | ||||
|     register: 注册 | ||||
|     code-login: 验证码登陆 | ||||
|     qrcode-login: 二维码登陆 | ||||
|     forget-password: 忘记密码 | ||||
|   dashboard: | ||||
|     title: 概览 | ||||
|     analytics: 分析页 | ||||
|     workspace: 工作台 | ||||
|   vben: | ||||
|     about: 关于 | ||||
|     document: 文档 | ||||
| 
 | ||||
| common: | ||||
|   back: 返回 | ||||
|   back-to-home: 返回首页 | ||||
|   login: 登录 | ||||
|   logout: 退出登录 | ||||
|   prompt: 提示 | ||||
|   cancel: 取消 | ||||
|   confirm: 确认 | ||||
|   not-data: 暂无数据 | ||||
|   refresh: 刷新 | ||||
|   loading-menu: 加载菜单中 | ||||
| 
 | ||||
| fallback: | ||||
|   page-not-found: 哎呀!未找到页面 | ||||
|   page-not-found-desc: 抱歉,我们无法找到您要找的页面。 | ||||
|   forbidden: 哎呀!访问被拒绝 | ||||
|   forbidden-desc: 抱歉,您没有权限访问此页面。 | ||||
|   internal-error: 哎呀!出错了 | ||||
|   internal-error-desc: 抱歉,服务器遇到错误。 | ||||
|   offline: 离线页面 | ||||
|   offline-error: 哎呀!网络错误 | ||||
|   offline-error-desc: 抱歉,无法连接到互联网,请检查您的网络连接并重试。 | ||||
|   coming-soon: 即将推出 | ||||
| 
 | ||||
| widgets: | ||||
|   document: 文档 | ||||
|   qa: 问题 & 帮助 | ||||
|   setting: 设置 | ||||
|   logout-tip: 是否退出登录? | ||||
|   view-all: 查看所有消息 | ||||
|   notifications: 通知 | ||||
|   make-all-as-read: 全部标记为已读 | ||||
|   clear-notifications: 清空 | ||||
|   search: | ||||
|     title: 搜索 | ||||
|     search-navigate: 搜索导航菜单 | ||||
|     select: 选择 | ||||
|     navigate: 导航 | ||||
|     close: 关闭 | ||||
|     no-results: 未找到搜索结果 | ||||
|     no-recent: 没有搜索历史 | ||||
|     recent: 搜索历史 | ||||
| 
 | ||||
| authentication: | ||||
|   welcome-back: 欢迎回来 | ||||
|   page-title: 开箱即用的大型中后台管理系统 | ||||
|   page-desc: 工程化、高性能、跨组件库的前端模版 | ||||
|   login-success: 登录成功 | ||||
|   login-success-desc: 欢迎回来 | ||||
|   login-subtitle: 请输入您的帐户信息以开始管理您的项目 | ||||
|   username: 账号 | ||||
|   password: 密码 | ||||
|   username-tip: 请输入用户名 | ||||
|   password-tip: 请输入密码 | ||||
|   remember-me: 记住账号 | ||||
|   create-an-account: 创建一个账号 | ||||
|   create-account: 创建账号 | ||||
|   already-account: 已经有账号了? | ||||
|   account-tip: 还没有账号? | ||||
|   sign-up: 注册 | ||||
|   sign-up-subtitle: 让您的应用程序管理变得简单而有趣 | ||||
|   comfirm-password: 确认密码 | ||||
|   comfirm-password-tip: 两次输入的密码不一致 | ||||
|   sign-up-agree: 我同意 | ||||
|   sign-up-privacy-policy: 隐私政策 | ||||
|   sign-up-terms: 条款 | ||||
|   sign-up-agree-tip: 请同意隐私政策和条款 | ||||
|   go-login: 去登录 | ||||
|   password-strength: 使用 8 个或更多字符,混合字母、数字和符号 | ||||
|   forget-password: 忘记密码? | ||||
|   forget-password-subtitle: 输入您的电子邮件,我们将向您发送重置密码的连接 | ||||
|   email-tip: 请输入邮箱 | ||||
|   send-reset-link: 发送重置链接 | ||||
|   email: 邮箱 | ||||
|   qrcode-subtitle: 请用手机扫描二维码登录 | ||||
|   qrcode-prompt: 扫码后点击 '确认',即可完成登录 | ||||
|   qrcode-login: 扫码登录 | ||||
|   code-subtitle: 请输入您的手机号码以开始管理您的项目 | ||||
|   code: 验证码 | ||||
|   code-tip: 请输入验证码 | ||||
|   mobile: 手机号码 | ||||
|   mobile-login: 手机号登录 | ||||
|   mobile-tip: 请输入手机号码 | ||||
|   send-code: 获取验证码 | ||||
|   send-text: "{0}秒后重新获取" | ||||
|   third-party-login: 其他登录方式 | ||||
|   layout: | ||||
|     center: 居中 | ||||
|     align-left: 居左 | ||||
|     align-right: 居右 | ||||
| 
 | ||||
| preferences: | ||||
|   title: 偏好设置 | ||||
|   subtitle: 自定义偏好设置 & 实时预览 | ||||
|   reset-tip: 数据有变化,点击可进行重置 | ||||
|   # appearance | ||||
|   appearance: 外观 | ||||
|   # layout | ||||
|   layout: 布局 | ||||
|   content: 内容 | ||||
|   other: 其它 | ||||
|   wide: 流式 | ||||
|   compact: 定宽 | ||||
|   follow-system: 跟随系统 | ||||
|   vertical: 垂直 | ||||
|   vertical-tip: 侧边垂直菜单模式 | ||||
|   horizontal: 水平 | ||||
|   horizontal-tip: 水平菜单模式,菜单全部显示在顶部 | ||||
|   two-column: 双列菜单 | ||||
|   two-column-tip: 垂直双列菜单模式 | ||||
|   mixed-menu: 混合菜单 | ||||
|   mixed-menu-tip: 垂直水平菜单共存 | ||||
|   split-menu: 切割菜单 | ||||
|   full-content: 内容全屏 | ||||
|   full-content-tip: 不显示任何菜单,只显示内容主体 | ||||
|   interface-control: 界面布局控制 | ||||
|   normal: 默认 | ||||
|   plain: 朴素 | ||||
|   rounded: 圆润 | ||||
|   copy: 复制偏好设置 | ||||
|   copy-success: 拷贝成功,请在 app 下的 `src/preferences.ts`内进行覆盖 | ||||
|   clear-and-logout: 清空缓存 & 退出登录 | ||||
|   reset-success: 重置偏好设置成功 | ||||
|   mode: 模式 | ||||
|   logo-visible: 显示 Logo | ||||
|   # general | ||||
|   general: 通用 | ||||
|   language: 语言 | ||||
|   dynamic-title: 动态标题 | ||||
|   ai-assistant: Ai 助手 | ||||
|   sidebar: | ||||
|     title: 侧边栏 | ||||
|     width: 宽度 | ||||
|     visible: 显示侧边栏 | ||||
|     collapsed: 折叠菜单 | ||||
|     collapsed-show-title: 显示菜单名 | ||||
|   tabbar: | ||||
|     title: 标签栏 | ||||
|     enable: 启用标签栏 | ||||
|     icon: 显示标签栏图标 | ||||
|     context-menu: | ||||
|       reload: 重新加载 | ||||
|       close: 关闭标签页 | ||||
|       pin: 固定标签页 | ||||
|       unpin: 取消固定标签页 | ||||
|       close-left: 关闭左侧标签页 | ||||
|       close-right: 关闭右侧标签页 | ||||
|       close-other: 关闭其它标签页 | ||||
|       close-all: 关闭全部标签页 | ||||
|   navigation-menu: | ||||
|     title: 导航菜单 | ||||
|     style: 导航菜单风格 | ||||
|     accordion: 侧边导航菜单手风琴模式 | ||||
|     split: 导航菜单分离 | ||||
|     split-tip: 开启时,侧边栏显示顶栏对应菜单的子菜单 | ||||
|   breadcrumb: | ||||
|     title: 面包屑导航 | ||||
|     enable: 开启面包屑导航 | ||||
|     icon: 显示面包屑图标 | ||||
|     home: 显示首页按钮 | ||||
|     style: 面包屑风格 | ||||
|     hide-only-one: 仅有一个时隐藏 | ||||
|     background: 背景 | ||||
|   animation: | ||||
|     title: 动画 | ||||
|     loading: 页面切换 Loading | ||||
|     transition: 页面切换动画 | ||||
|     progress: 页面切换进度条 | ||||
|   theme: | ||||
|     title: 主题 | ||||
|     radius: 圆角 | ||||
|     light: 浅色 | ||||
|     dark: 深色 | ||||
|     dark-menu: 深色菜单 | ||||
|     weak-mode: 色弱模式 | ||||
|     gray-mode: 灰色模式 | ||||
|     builtin: | ||||
|       title: 内置主题 | ||||
|       default: 默认 | ||||
|       violet: 紫罗兰 | ||||
|       pink: 樱花粉 | ||||
|       rose: 玫瑰红 | ||||
|       sky-blue: 天蓝色 | ||||
|       deep-blue: 深蓝色 | ||||
|       green: 浅绿色 | ||||
|       deep-green: 深绿色 | ||||
|       orange: 橙黄色 | ||||
|       yellow: 柠檬黄 | ||||
|       zinc: 锌色灰 | ||||
|       neutral: 中性色 | ||||
|       slate: 石板灰 | ||||
|       gray: 中灰色 | ||||
|       custom: 自定义 | ||||
|   header: | ||||
|     title: 顶栏 | ||||
|     mode-static: 静止 | ||||
|     mode-fixed: 固定 | ||||
|     mode-auto: 自动隐藏和显示 | ||||
|     mode-auto-scroll: 滚动隐藏和显示 | ||||
|     visible: 显示顶栏 | ||||
|   footer: | ||||
|     title: 底栏 | ||||
|     visible: 显示底栏 | ||||
|     fixed: 固定在底部 | ||||
|   copyright: | ||||
|     title: 版权 | ||||
|     enable: 启用版权 | ||||
|     company-name: 公司名 | ||||
|     company-site-link: 公司主页 | ||||
|     date: 日期 | ||||
|     icp: ICP 备案号 | ||||
|     icp-link: ICP 网站链接 | ||||
|   shortcut-keys: | ||||
|     title: 快捷键 | ||||
|     global: 全局 | ||||
|     search: 全局搜索 | ||||
|     logout: 退出登录 | ||||
|     preferences: 偏好设置 | ||||
|  | @ -18,6 +18,10 @@ interface LocaleSetupOptions { | |||
|    * @returns | ||||
|    */ | ||||
|   loadMessages?: LoadMessageFn; | ||||
|   /** | ||||
|    * Whether to warn when the key is not found | ||||
|    */ | ||||
|   missingWarn?: boolean; | ||||
| } | ||||
| 
 | ||||
| export type { | ||||
|  |  | |||
|  | @ -635,9 +635,6 @@ importers: | |||
|       '@vben-core/typings': | ||||
|         specifier: workspace:* | ||||
|         version: link:../shared/typings | ||||
|       vite: | ||||
|         specifier: latest | ||||
|         version: 5.3.3(@types/node@20.14.10)(sass@1.77.6)(terser@5.31.1) | ||||
|       vue: | ||||
|         specifier: ^3.4.31 | ||||
|         version: 3.4.31(typescript@5.5.3) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 vben
						vben