smart-admin-web 10.24.0 → 10.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"en-US.js","sources":["../../src/locales/en-US.ts"],"sourcesContent":["export default {\n common: {\n rowNo: 'No.',\n copySuffix: '- Copy',\n zoomIn: 'Maximize',\n zoomOut: 'Restore',\n success: 'Success',\n confirm: 'Confirm',\n confirmTitle: 'Confirm',\n cancel: 'Cancel',\n close: 'Close',\n more: 'More',\n search: 'Search',\n reset: 'Reset',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n add: 'Add',\n edit: 'Edit',\n delete: 'Delete',\n save: 'Save',\n submit: 'Submit',\n format: 'Format',\n copy: 'Copy',\n copied: 'Copied',\n loading: 'Loading…',\n yes: 'Yes',\n no: 'No',\n status: 'Status',\n enabled: 'Enabled',\n disabled: 'Disabled',\n visible: 'Visible',\n hidden: 'Hidden',\n operation: 'Actions',\n createTime: 'Created',\n batchDelete: 'Batch delete',\n batchDeleteConfirm: 'Delete the {count} selected item(s)? This cannot be undone.',\n all: 'All',\n noData: 'No data',\n back: 'Back',\n detail: 'Detail',\n },\n notFound: {\n desc: 'Page not found',\n back: 'Back to workbench',\n currentApp: 'Current app: {app}',\n otherApp: 'This page belongs to the \"{app}\" app, not the one you are in',\n switchAndOpen: 'Switch to \"{app}\" and open it',\n },\n // Content-area render fallback (components/ErrorBoundary)\n errorBoundary: {\n title: 'This page hit an error',\n desc: 'The page threw an unhandled exception while rendering. You can retry, or go back home and keep working.',\n retry: 'Retry',\n home: 'Go home',\n },\n // Portal bootstrap failure (network / 5xx / rate limit): the session is fine, so it is kept\n bootError: {\n title: 'Could not load the workbench',\n desc: 'We could not fetch your apps and menus. This is usually a network problem or a temporarily unavailable server. You are still signed in.',\n retry: 'Retry',\n relogin: 'Sign in again',\n },\n missingRoute: {\n title: 'Menu page unavailable',\n message: 'The component path configured for “{title}” does not exist: {component}',\n },\n userPicker: {\n title: 'Select users',\n org: 'Organizations',\n available: 'Available',\n selected: 'Selected',\n searchName: 'Search by name',\n searchAccount: 'Search by account',\n selectPage: 'Select page',\n unselectPage: 'Deselect page',\n total: '{n} users',\n existing: 'Existing',\n remove: 'Remove',\n emptySelected: 'No users selected',\n prevPage: 'Previous page',\n nextPage: 'Next page',\n clear: 'Clear',\n },\n app: {\n theme: 'Theme',\n dark: 'Dark',\n light: 'Light',\n accent: 'Accent',\n density: 'Density',\n comfortable: 'Comfortable',\n compact: 'Compact',\n language: 'Language',\n collapse: 'Collapse',\n openMenu: 'Open menu',\n switchModule: 'Switch app',\n appearance: 'Appearance',\n back: 'Back',\n forward: 'Forward',\n logout: 'Log out',\n personalCenter: 'Account',\n clearCache: 'Clear cache',\n cacheCleared: 'Cache cleared',\n profile: 'Profile',\n password: 'Change password',\n security: 'Account security',\n sessions: 'My sessions',\n bindings: 'Account bindings',\n search: 'Search',\n fullscreen: 'Fullscreen',\n exitFullscreen: 'Exit fullscreen',\n settings: 'Settings',\n notice: {\n title: 'Notifications',\n empty: 'No notifications',\n markAllRead: 'Mark all read',\n viewAll: 'View all',\n },\n },\n settings: {\n title: 'Settings',\n tabAppearance: 'Appearance',\n tabLayout: 'Layout',\n tabGeneral: 'General',\n themeMode: 'Theme mode',\n auto: 'Auto',\n themeColor: 'Theme color',\n custom: 'Custom',\n accentName: {\n blue: 'Blue',\n indigo: 'Indigo',\n purple: 'Purple',\n teal: 'Teal',\n green: 'Green',\n graphite: 'Graphite',\n custom: 'Custom color',\n },\n accentDemoButton: 'Button',\n accentDemoLink: 'Link text',\n layout: 'Layout',\n layoutVertical: 'Vertical',\n layoutVerticalMix: 'Vertical Mix',\n layoutVerticalHybridHeaderFirst: 'Left Hybrid (Header)',\n layoutHorizontal: 'Horizontal',\n layoutTopHybridSidebarFirst: 'Top Hybrid (Sidebar)',\n layoutTopHybridHeaderFirst: 'Top Hybrid (Header)',\n interface: 'Interface',\n formStyle: 'Form style',\n formStyleModal: 'Dialog',\n formStyleDrawer: 'Drawer',\n showBreadcrumb: 'Breadcrumb',\n showTabs: 'Tabs',\n fixedHeader: 'Fixed header',\n pageTransition: 'Page transition',\n transitionNone: 'None',\n transitionFade: 'Fade',\n transitionFadeSlide: 'Fade slide',\n resetConfirm: 'Reset all settings to default?',\n copyConfig: 'Copy config',\n configCopied:\n 'Current config copied (paste into DEFAULTS in stores/app.ts to make it the new default)',\n searchPlaceholder: 'Search menu…',\n searchEmpty: 'No matching menu',\n searchHint: '↑↓ navigate · ↵ open · Esc close',\n descBreadcrumb: 'Show the page path in the header',\n descTabs: 'Keep opened pages and switch between them',\n descFixedHeader: 'Pin the header with frosted glass',\n descPageTransition: 'Animation when switching pages',\n descCollapse: 'Hide the sidebar, more room for content',\n },\n tabs: {\n refresh: 'Refresh',\n pin: 'Pin',\n unpin: 'Unpin',\n close: 'Close',\n closeOthers: 'Close others',\n closeLeft: 'Close left',\n closeRight: 'Close right',\n closeAll: 'Close all',\n },\n login: {\n title: 'Sign in',\n subtitle: 'A unified access layer for every org and app',\n headlinePre: 'Enterprise ',\n headlineAccent: 'RBAC',\n headlinePost: ' console',\n welcome: 'Welcome back',\n welcomeSub: 'Sign in to continue',\n featRbac: 'RBAC authorization',\n featScope: 'Multi-org data scope',\n featPortal: 'Multi-app portal',\n account: 'Account',\n accountPlaceholder: 'Enter account',\n password: 'Password',\n passwordPlaceholder: 'Enter password',\n required: 'Enter account and password',\n captcha: 'Captcha',\n captchaPlaceholder: 'Enter captcha',\n captchaMathPlaceholder: 'Enter the result',\n captchaRequired: 'Enter the captcha',\n remember: 'Remember me',\n submit: 'Sign in',\n success: 'Signed in',\n smsLogin: 'SMS sign-in',\n accountLogin: 'Password sign-in',\n phone: 'Phone',\n phonePlaceholder: 'Enter phone number',\n smsCode: 'SMS code',\n smsCodePlaceholder: 'Enter the SMS code',\n smsRequired: 'Enter phone number and SMS code',\n sendCode: 'Send code',\n resendAfter: 'Resend in {s}s',\n smsSent: 'Code sent',\n mfaTitle: 'A code was sent to {phone}',\n mfaSub: 'Enter the SMS code to finish signing in',\n setupAuthenticator: 'Set up authenticator',\n totpTitle: 'Two-factor authentication',\n totpSub: 'Enter the 6-digit code from your authenticator app',\n totpCode: 'Authenticator code',\n totpPlaceholder: 'Enter 6-digit code',\n totpBindTitle: 'Authenticator required',\n totpBindSub:\n 'An administrator requires two-factor authentication for this account. Set it up, then sign in again.',\n useRecovery: 'Use a recovery code',\n backToPassword: 'Back to password sign-in',\n otherMethods: 'Other methods',\n moreMethods: 'More sign-in methods',\n ssoWecom: 'WeCom',\n ssoDingtalk: 'DingTalk',\n sso: 'SSO',\n ssoComingSoon: 'Third-party login coming soon',\n layoutLabel: 'Switch sign-in layout',\n layoutToSolo: 'Switch to single column',\n layoutToSplit: 'Switch to two columns',\n },\n module: {\n choose: 'Choose app',\n empty: 'No accessible apps. Contact your administrator.',\n setDefault: 'Set default',\n isDefault: 'Default',\n back: 'Back',\n enter: 'Enter',\n manage: 'Modules',\n code: 'Code',\n name: 'Name',\n icon: 'Icon',\n defaultRoute: 'Default route',\n apiPrefix: 'API prefix',\n apiPrefixHint:\n 'Filters the permission-route dropdown by app. Enter the backend route segment (e.g. sys, biz); empty = no filter',\n sort: 'Sort',\n remark: 'Remark',\n builtin: 'Built-in',\n codeRequired: 'Enter a code',\n nameRequired: 'Enter a name',\n addTitle: 'Add app',\n editTitle: 'Edit app',\n deleteConfirm: 'Delete app \"{title}\"?',\n disableConfirm: 'Disable app \"{title}\"? It will disappear from the portal',\n builtinNoDisable: 'The built-in app cannot be disabled',\n delegatable: 'Delegatable',\n delegatableHint:\n \"When on, administrators can grant or deny this app's menus to individual users (time-limited)\",\n builtinNotDelegatable: 'The built-in app is never delegatable',\n saved: 'Saved',\n deleted: 'Deleted',\n },\n menu: {\n searchPlaceholder: 'Search title / route / permission',\n workbench: 'Workbench',\n profile: 'Profile',\n password: 'Change password',\n security: 'Account security',\n notice: 'My notifications',\n sessions: 'My sessions',\n bindings: 'Account bindings',\n manage: 'Menus',\n parent: 'Parent',\n parentRoot: 'Top level (root)',\n type: 'Type',\n typeCatalog: 'Catalog',\n typeMenu: 'Page',\n typeButton: 'Button',\n title: 'Title',\n permission: 'Permission',\n permissionPlaceholder: 'Pick routes (multiple allowed)',\n permissionHint:\n 'A button may carry several routes; granting it grants them all. A Query button carries the list and detail routes.',\n configPerms: 'Permissions ({n})',\n showAllRoutes: \"Show all apps' routes\",\n routesInApp: 'This app',\n routesOther: 'Other apps',\n module: 'App',\n moduleHint: 'Top-level catalog only',\n linkHint:\n 'External / embed: an http(s) URL in Path = external link (new window); an http(s) URL in Component = embedded iframe.',\n moduleAll: 'All',\n moduleUnassigned: 'Unassigned',\n path: 'Route path',\n component: 'Component',\n icon: 'Icon',\n sort: 'Sort',\n visible: 'Sidebar visible',\n titleRequired: 'Enter a title',\n addTitle: 'Add menu',\n editTitle: 'Edit menu',\n addChild: 'Add child',\n buttons: 'Buttons',\n buttonManagerTitle: '\"{title}\" · Buttons',\n buttonParent: 'Parent page',\n addButton: 'Add button',\n batchFromRoutes: 'Add from routes',\n batchTitle: 'Add buttons from routes',\n batchSearchPlaceholder: 'Search method / path / title',\n noRoutesLeft: 'No routes to add (all covered by this menu, or the route list is empty)',\n btnQuery: 'Query',\n btnCreate: 'Create',\n btnUpdate: 'Edit',\n btnDelete: 'Delete',\n deleteConfirm: 'Delete menu \"{title}\"?',\n disableConfirm: 'Disable menu \"{title}\"? Its children will be hidden too',\n saved: 'Saved',\n deleted: 'Deleted',\n },\n // Translations of the kernel seed menu / app titles (DefaultMenuSeed / DefaultModuleSeed); the title -> key table is locales/kernelMenuTitles.ts\n menuTitle: {\n module: {\n system: 'System',\n business: 'Business Center',\n },\n catalog: {\n org: 'Organization',\n ops: 'System Operations',\n schedule: 'Job Scheduling',\n audit: 'Audit Logs',\n ai: 'AI Gateway',\n },\n page: {\n workbench: 'Workbench',\n org: 'Organizations',\n position: 'Positions',\n user: 'Users',\n role: 'Roles',\n config: 'System Settings',\n dict: 'Dictionaries',\n menu: 'Menus',\n module: 'Modules',\n notice: 'Notifications',\n recycle: 'Recycle Bin',\n monitor: 'Server Monitor',\n cache: 'Cache',\n apiDocs: 'API Docs',\n job: 'Scheduled Jobs',\n jobLog: 'Job Runs',\n jobMonitor: 'Job Monitor',\n loginLog: 'Login Logs',\n opLog: 'Operation Logs',\n exceptionLog: 'Exception Logs',\n session: 'Online Sessions',\n file: 'Files',\n aiModel: 'AI Models',\n aiUsage: 'AI Usage',\n },\n button: {\n orgQuery: 'Org - Query',\n orgCreate: 'Org - Create',\n orgUpdate: 'Org - Update',\n orgDelete: 'Org - Delete',\n orgCopy: 'Org - Copy',\n positionQuery: 'Position - Query',\n positionCreate: 'Position - Create',\n positionUpdate: 'Position - Update',\n positionDelete: 'Position - Delete',\n userQuery: 'User - Query',\n userCreate: 'User - Create',\n userUpdate: 'User - Update',\n userDelete: 'User - Delete',\n userResetPassword: 'User - Reset Password',\n userToggle: 'User - Enable / Disable',\n userImport: 'User - Import',\n userExport: 'User - Export',\n userGrantMenus: 'User - Grant Menus',\n roleQuery: 'Role - Query',\n roleCreate: 'Role - Create',\n roleUpdate: 'Role - Update',\n roleDelete: 'Role - Delete',\n roleGrantMenus: 'Role - Grant Menus',\n roleDataScope: 'Role - Data Scope',\n roleGrantUsers: 'Role - Grant Users',\n ping: 'Connectivity Probe',\n configQuery: 'Config - Query',\n configCreate: 'Config - Create',\n configUpdate: 'Config - Update',\n configDelete: 'Config - Delete',\n configUploadLogo: 'Config - Upload Logo',\n sensitiveQuery: 'Sensitive Action - Query',\n sensitiveCreate: 'Sensitive Action - Create',\n sensitiveDelete: 'Sensitive Action - Delete',\n mfaClear: 'MFA - Unbind User Authenticator',\n dictTypeQuery: 'Dict Type - Query',\n dictTypeCreate: 'Dict Type - Create',\n dictTypeUpdate: 'Dict Type - Update',\n dictTypeDelete: 'Dict Type - Delete',\n dictItemQuery: 'Dict Item - Query',\n dictItemCreate: 'Dict Item - Create',\n dictItemUpdate: 'Dict Item - Update',\n dictItemDelete: 'Dict Item - Delete',\n menuQuery: 'Menu - Query',\n menuCreate: 'Menu - Create',\n menuUpdate: 'Menu - Update',\n menuDelete: 'Menu - Delete',\n moduleQuery: 'Module - Query',\n moduleCreate: 'Module - Create',\n moduleUpdate: 'Module - Update',\n moduleDelete: 'Module - Delete',\n noticeQuery: 'Notice - Query',\n noticePublish: 'Notice - Publish',\n noticeDelete: 'Notice - Delete',\n recycleQuery: 'Recycle Bin - Query',\n recyclePurge: 'Recycle Bin - Delete Permanently',\n recycleRestore: 'Recycle Bin - Restore',\n monitorQuery: 'Server Monitor - Query',\n cacheFlushAuth: 'Cache - Clear Permissions',\n cacheFlushDict: 'Cache - Clear Dictionaries',\n cacheFlushConfig: 'Cache - Clear Configs',\n cacheRebuildPortal: 'Cache - Rebuild Portal Menus',\n apiDocsView: 'API Docs - View Contract',\n jobQuery: 'Job - Query',\n jobCreate: 'Job - Create',\n jobUpdate: 'Job - Update',\n jobDelete: 'Job - Delete',\n jobToggle: 'Job - Enable / Disable',\n jobRun: 'Job - Run Once',\n jobLogQuery: 'Job Run - Query',\n jobLogKill: 'Job Run - Terminate',\n jobLogClear: 'Job Run - Clear',\n jobMonitorQuery: 'Job Monitor - Query',\n loginLogQuery: 'Login Log - Query',\n loginLogClear: 'Login Log - Clear',\n opLogQuery: 'Operation Log - Query',\n opLogClear: 'Operation Log - Clear',\n opLogExport: 'Operation Log - Export',\n exceptionLogQuery: 'Exception Log - Query',\n exceptionLogClear: 'Exception Log - Clear',\n sessionQuery: 'Online Session - Query',\n sessionKick: 'Force Logout',\n fileQuery: 'File - Query',\n fileUpload: 'File - Upload',\n fileDelete: 'File - Delete',\n fileDownload: 'File - Download',\n aiProviderQuery: 'AI Provider - Query',\n aiProviderCreate: 'AI Provider - Create',\n aiProviderUpdate: 'AI Provider - Update',\n aiProviderDelete: 'AI Provider - Delete',\n aiProviderTest: 'AI Provider - Test Connection',\n aiUsageQuery: 'AI Usage - Query',\n },\n },\n iconPicker: {\n placeholder: 'Select icon',\n title: 'Select icon',\n search: 'Search icon name…',\n local: 'Local SVG',\n online: 'Online',\n onlinePlaceholder: 'Any iconify name, e.g. mdi:home',\n use: 'Use',\n offlineHint: 'Offline — online icons not bundled cannot be previewed',\n empty: 'No matching icon',\n more: '{n} more — keep typing to narrow',\n },\n // SmartTable (smart-naive-table) chrome text; search/reset/density reuse common/app keys, injected globally in createSmartAdmin.ts\n table: {\n refresh: 'Refresh',\n columnSettings: 'Columns',\n columnSettingsReset: 'Restore defaults',\n fixedLeft: 'Pin left',\n fixedRight: 'Pin right',\n fixedNone: 'Unpin',\n expand: 'Expand',\n collapse: 'Collapse',\n total: 'Total {n}',\n // TableZoomButton (blow a wide table up to the full viewport)\n zoom: 'Zoom in',\n zoomExit: 'Zoom out',\n // Shown when a search condition is beyond what the backend can express (see utils/tableFilter.ts)\n filterFallback:\n 'Some search conditions are not supported by the server (one condition per field; a date range needs \"on or after\" plus \"on or before\" joined by AND). Searching with the recognizable ones.',\n filterTruncated:\n 'More than 10000 rows: search only covers the first 10000. Use a more specific condition.',\n },\n workbench: {\n welcome: 'Hello, {name}',\n subtitle: 'SmartAdmin · Enterprise RBAC console',\n roles: 'Roles',\n users: 'Authorized users',\n perms: 'Permissions',\n online: 'Online sessions',\n trendTitle: 'Activity (last 7 days)',\n distributionTitle: 'Resource distribution',\n trendLogins: 'Logins',\n trendActive: 'Active users',\n },\n // Business app workbench (dashboard/biz.vue; real data, an app overrides the same page key with its own stats)\n biz: {\n welcome: 'Welcome back, {name}',\n subtitle: 'App workbench',\n onlineDuration: 'Online for {hours}h {minutes}m',\n onlineDurationShort: 'Online for {minutes}m',\n lastLogin: 'Last sign-in {time}',\n firstLogin: 'First sign-in',\n todo: 'To-dos',\n todoEmpty: 'Nothing pending',\n quick: 'Shortcuts',\n quickPinned: 'Pinned',\n quickSuggested: 'Frequent · click the star to pin',\n quickAdd: 'Add shortcut',\n quickPin: 'Pin',\n quickUnpin: 'Remove',\n notices: 'My notifications',\n noticesEmpty: 'No notifications',\n noMenus: 'No menus in this app yet',\n },\n user: {\n title: 'Users',\n account: 'Account',\n name: 'Name',\n status: 'Status',\n enabled: 'Enabled',\n disabled: 'Disabled',\n superAdmin: 'Super',\n createTime: 'Created',\n // Write-side field (create/edit only)\n password: 'Initial password',\n passwordHint: 'Leave blank to auto-generate one (shown once after creation)',\n org: 'Org',\n allOrgs: 'All',\n // Group name of the org panel; in a narrow content area the tree moves into a drawer, where it is also the toolbar button + drawer title\n orgFilter: 'Organization',\n // Panel header button tips: once fully expanded it becomes \"collapse to first level\"; \"hide\" slides the whole panel left, after which the toolbar button's tip is \"show\"\n collapseToFirstLevel: 'Collapse to first level',\n hideOrgPanel: 'Hide organization panel',\n showOrgPanel: 'Show organization panel',\n orgPlaceholder: 'Select org (optional)',\n position: 'Position',\n positionPlaceholder: 'Select position (optional)',\n director: 'Manager',\n directorPlaceholder: 'Select manager (optional)',\n nickname: 'Nickname',\n nicknamePlaceholder: 'Nickname (optional)',\n phone: 'Phone',\n phonePlaceholder: 'Phone (optional)',\n phoneInvalid: 'Invalid phone number',\n email: 'Email',\n emailPlaceholder: 'Email (optional)',\n emailInvalid: 'Invalid email',\n gender: 'Gender',\n genderPlaceholder: 'Select gender (optional)',\n avatar: 'Avatar',\n avatarUploading: 'Uploading…',\n roles: 'Roles',\n rolesPlaceholder: 'Assign roles (optional)',\n accountRequired: 'Enter an account',\n nameRequired: 'Enter a name',\n addTitle: 'Add user',\n editTitle: 'Edit user',\n deleteConfirm: 'Delete user \"{name}\"?',\n disableConfirm: 'Disable user \"{name}\"?',\n saved: 'Saved',\n deleted: 'Deleted',\n resetPassword: 'Reset password',\n newPassword: 'New password',\n newPasswordHint: 'Leave blank to auto-generate one',\n resetDone: 'Password reset',\n createDone: 'User created',\n resetDoneHint:\n 'Relay the initial password below to the user; it will not show again after closing:',\n copy: 'Copy',\n copied: 'Copied to clipboard',\n copyFailed: 'Copy failed, please select manually',\n forceTotp: 'Require authenticator',\n totpBound: 'Authenticator bound',\n issueTotpInvite: 'Invite authenticator',\n clearMfa: 'Unbind authenticator',\n clearMfaConfirm:\n 'Unbind authenticator for \"{name}\"? They must set it up again before two-factor sign-in works.',\n mfaCleared: 'Authenticator unbound for user',\n totpInviteTitle: 'Authenticator invite for {name}',\n totpInviteOnce:\n 'This invitation is shown only now. Send the link or token to the user through an approved channel.',\n totpInviteUrl: 'Binding link',\n totpInviteToken: 'Invite token',\n totpInviteExpires: 'Expires at',\n },\n userGrant: {\n action: 'Grant menus',\n title: 'Grant menus · {name}',\n tabGrant: 'Individual grants',\n tabEffective: 'Effective access',\n hint: 'Grant through roles as usual and keep only exceptions here. Allow covers that one node; Deny also revokes everything below it and beats any allow.',\n noRoles:\n 'This user has no role, so the data scope is \"self only\": granted pages open but show only data the user created.',\n readonly: 'View only: {reason}',\n readonlyNoReason: 'View only',\n follow: 'Follow roles',\n allow: 'Allow',\n deny: 'Deny',\n effective: 'Effective',\n ineffective: 'Not effective',\n expired: 'Expired',\n deniedByAncestor: 'Denied by parent',\n notGrantable: 'Only a super admin can grant menus in this module',\n expireLongTerm: 'No expiry',\n remark: 'Reason (optional)',\n leaked: 'These APIs stay callable:',\n leakedFrom: '{code} (from {from})',\n summary: 'Allow {allow} · Deny {deny}',\n unsaved: 'Unsaved changes',\n invalidExpiry: '{count} record(s) have a missing or out-of-range expiry date',\n saved: 'Grants saved',\n overview: 'Individual grants',\n colUser: 'User',\n colMenu: 'Menu',\n colState: 'State',\n colSource: 'Source',\n colEffect: 'Effect',\n colStatus: 'Validity',\n colExpire: 'Expires',\n colGrantor: 'Granted by',\n colGrantTime: 'Granted at',\n colRemark: 'Reason',\n adjust: 'Adjust',\n statusActive: 'Active',\n statusExpiring: 'Expiring in 7 days',\n statusExpired: 'Expired',\n },\n mfa: {\n bindTitle: 'Set up authenticator',\n recoveryTitle: 'Use recovery code',\n useRecovery: 'Use a recovery code',\n backToBind: 'Set up authenticator',\n stepVerify: 'Verify',\n stepAuthenticator: 'Authenticator',\n stepRecovery: 'Recovery codes',\n bindHint:\n 'Enter your account and current password to enroll (TOTP must be enabled by the admin).',\n account: 'Account',\n currentPassword: 'Current password',\n startBind: 'Start setup',\n bindRequired: 'Enter your account and current password',\n scanSetupHint:\n 'Scan the QR code with Google Authenticator, Microsoft Authenticator, or a similar app.',\n manualSetupHint:\n 'If you cannot scan, enter the key manually in your authenticator app, then type the current 6-digit code.',\n manualKey: 'Manual setup key',\n otpauthUri: 'Authenticator URI',\n authenticatorCode: 'Authenticator code',\n completeBind: 'Complete setup',\n codeRequired: 'Enter the authenticator code',\n recoveryOnce:\n 'Save these recovery codes now. Each can be used once and they will not be displayed again. Download them to your device for safekeeping.',\n copy: 'Copy',\n copied: 'Copied to clipboard',\n copyFailed: 'Copy failed; select and copy manually',\n copyAll: 'Copy all codes',\n downloadCodes: 'Download',\n recoveryDownloaded: 'Recovery codes download started',\n recoveryDownloadHeader: 'SmartAdmin recovery codes (account: {account})',\n recoveryDownloadFooter: 'Each code can be used only once. Store offline and do not share.',\n backToLogin: 'Back to sign in',\n recoveryHint:\n 'A recovery code removes your authenticator and signs out existing sessions. Enroll again afterwards.',\n recoveryCode: 'Recovery code',\n submitRecovery: 'Use recovery code',\n recoveryRequired: 'Enter your account, current password, and recovery code',\n recoveryDone:\n 'Authenticator removed. Sign in again and complete a new self-service setup if required.',\n bindStartResponseIncomplete: 'The setup response was incomplete. Start the setup again.',\n bindCompleteResponseIncomplete: 'The setup response was incomplete. Start the setup again.',\n },\n reauth: {\n title: 'Re-authenticate',\n hint: 'This is a high-risk change. Enter an authenticator code or your current password to continue (valid for about 5 minutes).',\n method: 'Method',\n methodTotp: 'Authenticator',\n methodPassword: 'Current password',\n totpCode: 'Code',\n totpPlaceholder: '6-digit code',\n totpRequired: 'Enter the authenticator code',\n password: 'Current password',\n passwordPlaceholder: 'Current login password',\n passwordRequired: 'Enter your current password',\n confirm: 'Verify and continue',\n },\n // Import wizard / export column picker\n import: {\n button: 'Import',\n wizardTitle: 'Import users',\n stepUpload: 'Upload',\n stepMapping: 'Map columns',\n stepPreview: 'Preview & fix',\n stepResult: 'Done',\n downloadTemplate: 'Download template',\n dropHint: 'Click or drop an xlsx here',\n dropSub: '.xlsx only; use template dropdown values for dict columns',\n needFile: 'Please choose a file first',\n mappingHint: 'Map file headers to target fields. Auto-matched ones are pre-selected.',\n fileHeader: 'File header',\n targetColumn: 'Target column',\n unmap: '(Skip)',\n summary: '{total} rows, {errors} with errors',\n summaryDup: 'plus {n} already existing',\n onlyErrors: 'Errors only',\n revalidate: 'Re-validate',\n revalidated: 'Re-validated: {errors}/{total} rows have errors',\n errors: 'Errors',\n ok: 'OK',\n errorCount: '{n}',\n dupTag: 'Exists',\n // Key suffix = the DuplicateStrategy value (0 skip / 1 overwrite / 2 error)\n dupHint: {\n 0: 'This row already exists; it will be skipped on commit. No change needed.',\n 1: 'This row already exists; it will be updated on commit. No change needed.',\n 2: 'This row already exists and the current strategy treats that as a failure.',\n },\n strategy: 'Duplicates',\n strategySkip: 'Skip existing',\n strategyOverwrite: 'Overwrite existing',\n strategyError: 'Treat existing as error',\n commit: 'Commit import',\n prev: 'Back',\n next: 'Next',\n resultTitle: 'Import finished',\n resultTotal: 'Total {n}',\n resultInserted: 'Inserted {n}',\n resultUpdated: 'Updated {n}',\n resultSkipped: 'Skipped {n}',\n resultFailed: 'Failed {n}',\n editFailures: 'Edit failed rows',\n downloadErrorReport: 'Download error report',\n noErrorRows: 'No error rows',\n },\n export: {\n button: 'Export',\n pickColumns: 'Choose columns',\n selectAll: 'Select all',\n confirm: 'Export',\n done: 'Export started',\n },\n config: {\n title: 'Configs',\n key: 'Key',\n name: 'Name',\n value: 'Value',\n group: 'Group',\n sort: 'Sort',\n remark: 'Remark',\n keyRequired: 'Enter a key',\n nameRequired: 'Enter a name',\n addTitle: 'Add config',\n editTitle: 'Edit config',\n deleteConfirm: 'Delete config \"{name}\"?',\n saved: 'Saved',\n deleted: 'Deleted',\n keyManagedBy: 'This key is managed by the \"{tab}\" form. Edit it there after saving.',\n unsaved: '{n} unsaved change(s)',\n unsavedTab: 'Unsaved changes',\n discard: 'Discard',\n leaveTitle: 'Discard unsaved changes?',\n leaveConfirm: 'You have unsaved configuration changes. They will be lost if you leave.',\n tab: {\n brand: 'Branding & login',\n signin: 'Sign-in methods',\n security: 'Security',\n watermark: 'Watermark',\n sensitive: 'Sensitive actions',\n upload: 'Uploads',\n job: 'Scheduled jobs',\n advanced: 'Advanced',\n },\n brand: {\n desc: 'How the site looks in the browser tab, the sidebar, the footer and the login page.',\n preview: 'Live preview',\n previewAdmin: 'Admin',\n previewLogin: 'Login',\n groupSite: 'Site',\n groupLogin: 'Login page',\n copyrightPh: 'Leave empty to show the site name',\n copyrightUrlHint: 'When set, the footer copyright becomes a link',\n },\n watermark: {\n desc: 'Overlaid on every page after sign-in, never on the login page.',\n groupContent: 'Content',\n groupStyle: 'Style',\n enable: 'Enable watermark',\n enableHint:\n 'Overlay faint text on every page so a leaked screenshot can be traced to a person',\n content: 'Content',\n contentHint: 'Each user sees their own details, in the order below',\n contentEmpty: 'Nothing is selected, so no watermark will show',\n field: {\n name: 'Name',\n account: 'Account',\n org: 'Organization',\n phone: 'Phone (last 4)',\n time: 'Current time',\n text: 'Custom text',\n },\n text: 'Custom text',\n textHint: 'e.g. \"Internal only\"; the same for everyone',\n textPlaceholder: 'Up to {max} characters',\n timeFormat: 'Time format',\n layout: 'Layout',\n layoutSingle: 'One line',\n layoutMulti: 'Multi-line',\n fontSize: 'Font size',\n opacity: 'Strength',\n opacityHint: 'Higher is easier to read the mark, and harder to read the page',\n rotate: 'Angle',\n density: 'Density',\n sparse: 'Loose',\n normal: 'Normal',\n dense: 'Tight',\n cross: 'Staggered',\n crossHint: 'Offset alternate rows by half a tile so it is harder to crop out',\n },\n logo: {\n title: 'Logo',\n edit: 'Change logo',\n upload: 'Upload a new image…',\n useUrl: 'Use an image URL…',\n remove: 'Remove, use the default',\n help: 'PNG, JPG or WEBP, cropped square; also the browser tab icon',\n fallback:\n 'Without a logo the built-in one is used. The browser tab icon follows the logo too.',\n badType: 'Only PNG, JPG and WEBP images are supported',\n tooLarge: 'The image must be at most {mb} MB',\n cropTitle: 'Crop new logo',\n cropTip: 'Drag or use the arrow keys to reposition; scroll, the slider or +/- to zoom',\n zoom: 'Zoom',\n apply: 'Set new logo',\n cropFailed: 'Cropping failed, try another image',\n badUrl: 'Enter an address starting with http:// or https://, or a site path starting with /',\n urlHint: 'The image must be publicly readable. A square image works best.',\n },\n advanced: {\n desc: 'Configs that belong to none of the tabs above, edited as raw key/value rows. Keys the tabs above manage are not listed here.',\n },\n preview: {\n minutes: '{n} min',\n hours: '{n} h',\n days: '{n} days',\n off: '(not enabled)',\n sep: ', ',\n expand: 'Expand',\n collapse: 'Collapse',\n req: {\n upper: 'an uppercase letter',\n lower: 'a lowercase letter',\n digit: 'a digit',\n special: 'a special character',\n },\n lock: 'After {count} wrong passwords in a row the account is locked for {minutes} min',\n lockOff: 'Wrong passwords never lock the account',\n captcha: 'Sign-in asks for a captcha ({type})',\n totp: 'Users can use an authenticator as a second factor',\n totpSuper: 'Users can use an authenticator as a second factor; super admins must',\n smsMfa: 'Users with a bound phone verify an SMS code at sign-in',\n password: 'Passwords need at least {min} characters and {reqs}',\n passwordMin: 'Passwords need at least {min} characters',\n expire: 'Passwords must be changed every {days} days',\n noExpire: 'Passwords never expire',\n history: 'A new password cannot repeat the last {n}',\n historyOff: 'A new password may repeat an old one',\n firstChange: 'Admin-created accounts must change their password at first sign-in',\n firstChangeOff: 'New accounts keep their initial password at first sign-in',\n session: 'Access tokens renew every {access}; sign-in lasts up to {refresh}',\n rateLimit: 'At most {permit} requests per {seconds} s from one source',\n },\n job: {\n desc: 'How long run logs are kept and who hears about failures.',\n preview: 'Live preview · effect',\n groupLog: 'Run logs',\n groupAlert: 'Failure alerts',\n logRetentionDays: 'Keep for',\n logRetentionHint: 'Older logs are cleaned up daily',\n alertEmails: 'Alert emails',\n alertEmailsHint: 'Press Enter to add; none means no email',\n previewRetention: 'Run logs are kept for {days} days; older ones are cleaned up daily',\n previewKeep: 'Keep {days} days',\n previewAxisStart: '{days} days ago',\n previewToday: 'Today',\n previewTo: 'To',\n previewSubject: 'Subject',\n previewSubjectText: '[{site}] Scheduled job failed: Daily report',\n previewBody: 'Job \"Daily report\" failed at 02:00 after 3 retries.',\n previewError: 'database connection timed out (30s)',\n previewNoAlert: 'Failed runs send no email; they are only recorded in the run log',\n },\n externalAuth: {\n preview: 'Live preview · sign-in box',\n previewOther: 'Other sign-in options',\n hint: 'Which sign-in options appear on the login page. Connection details for each third party are entered in its Settings and stored encrypted.',\n groupLocal: 'Local account',\n groupThird: 'Third-party',\n password: 'Username and password',\n passwordHint: 'Always available',\n smsHint: 'Sign in with phone number and SMS code',\n state: {\n notInstalled: 'Not installed',\n unconfigured: 'Not configured',\n configured: 'Configured',\n },\n settings: 'Settings',\n addOidc: 'Add OIDC',\n needPackage: 'Install the {pkg} package on the server first',\n codeRegistered: 'Registered in code; not configured here',\n linkByAccount: 'Link by account',\n linkByAccountHint:\n 'People with the same account ID are bound to the local account on first sign-in; asks to confirm',\n linkByAccountConfirmTitle: 'Turn on link by account?',\n linkByAccountConfirm:\n 'The first time someone signs in with {name}, if their {name} account ID is exactly the same as a local account, the two are bound and they are signed in directly. Super admins, disabled accounts and accounts already bound to {name} are never linked. Make sure both sides are the same people first, e.g. local accounts were synced from {name}.',\n field: {\n displayName: 'Display name',\n code: 'Identifier',\n corpId: 'Corp ID',\n agentId: 'Agent ID',\n corpSecret: 'App secret',\n appKey: 'AppKey',\n appSecret: 'AppSecret',\n clientId: 'Client ID',\n clientSecret: 'Client secret',\n appId: 'AppId',\n authority: 'Authority',\n scopes: 'Scopes',\n usePkce: 'Use PKCE',\n },\n sheet: {\n title: '{name} sign-in settings',\n addOidc: 'Add OIDC',\n oidcHint: 'A standard OpenID Connect identity source',\n secretNote: 'Secrets are stored encrypted and are not displayed after saving',\n namePlaceholder: 'e.g. Company SSO',\n codePlaceholder: 'lowercase letters, digits, hyphens',\n codeFixed: 'Cannot be changed after saving',\n codeTaken: 'This identifier is already in use',\n secretPlaceholder: 'Paste the secret',\n secretSet: 'set',\n keepSecret: 'Leave blank to keep · current {now}',\n secretRetype: 'Enter the secret again',\n endpointMoved:\n 'Authority changed: to avoid sending the saved secret to a new address, enter the client secret again.',\n ephemeralKey:\n 'The data-protection master key is temporary, so secrets cannot be saved yet. Configure SmartAdmin:Security:DataProtection:Key and restart.',\n ephemeralTitle: 'The master key is temporary; saving is unavailable',\n callback: 'Callback URL',\n callbackHint: 'Enter this callback URL in the {name} console.',\n idp: 'identity provider',\n callbackMissing:\n 'SmartAdmin:ExternalAuth:CallbackBaseUrl is not set in production, so the callback URL cannot be computed.',\n copyFailed: 'Copy failed; select it manually',\n test: 'Test connection',\n testing: 'Testing…',\n saved: 'Saved',\n clear: 'Clear settings',\n clearTitle: 'Clear the settings for \"{name}\"?',\n clearConfirm:\n 'After clearing, this sign-in option is unavailable and disappears from the login page. Accounts users have already bound to {name} are not deleted.',\n cleared: 'Cleared',\n },\n check: {\n reachable: 'Connectivity',\n credentials: 'Credentials',\n agent: 'AgentId',\n appId: 'AppId',\n secret: 'AppSecret',\n discovery: 'Discovery document',\n issuer: 'Issuer match',\n endpoints: 'Authorization and token endpoints',\n clientSecret: 'Client secret',\n timeout: 'Timeout',\n error: 'Error',\n },\n checkStatus: {\n ok: 'passed',\n failed: 'failed',\n skipped: 'not verified',\n },\n },\n base: {\n siteTitle: 'Site title',\n siteSubtitle: 'Subtitle',\n copyright: 'Copyright',\n copyrightUrl: 'Copyright link',\n },\n login: {\n language: 'Login page language',\n localeZh: 'Chinese',\n localeEn: 'English',\n showFeatures: 'Show feature list',\n headline: 'Headline',\n headlinePlaceholder: 'Leave empty to use the built-in headline',\n highlight: 'Highlight',\n highlightPlaceholder: 'Word in the headline to highlight',\n highlightHint: 'Word in the headline shown in the accent color',\n features: 'Features',\n featuresPlaceholder: 'One per line, up to 5',\n featuresHint: 'One per line, up to 5',\n highlightMissing: 'Not in the headline; it will render as plain text',\n tooManyFeatures: 'At most 5 features',\n },\n security: {\n desc: 'Sign-in protection, password rules, session length and rate limits. Takes effect on save.',\n preview: 'Rules users will meet',\n groupLogin: 'Sign-in protection',\n groupSession: 'Session',\n groupRate: 'Rate limit',\n zeroNoLock: '0 = never lock',\n zeroNever: '0 = never expires',\n zeroOff: '0 = no limit',\n unit: { times: 'times', minutes: 'min', days: 'days', seconds: 's', chars: 'chars' },\n tryLabel: 'Try a password',\n tryMin: 'At least {n} chars',\n tryPass: 'Accepted',\n tryFail: 'Rejected',\n loginLock: {\n maxFailCount: 'Lock after failures',\n lockMinutes: 'Lock duration',\n },\n password: {\n title: 'Password',\n minLength: 'Min length',\n mustContain: 'Must contain',\n chipUpper: 'A-Z',\n chipLower: 'a-z',\n chipDigit: '0-9',\n // @ 在 vue-i18n 里是链接语法,要用字面量插值转义\n chipSpecial: \"#{'@'}!\",\n requireUpper: 'Require uppercase',\n requireLower: 'Require lowercase',\n requireDigit: 'Require digit',\n requireSpecial: 'Require special char',\n expireDays: 'Max age',\n historyCount: 'No reuse of last',\n forceChangeOnFirstLogin: 'Change at first sign-in',\n forceChangeOnFirstLoginHint: 'New accounts only; resets still require a change',\n },\n session: {\n accessMinutes: 'Access token lifetime',\n refreshMinutes: 'Stay signed in up to',\n },\n captcha: {\n enabled: 'Login captcha',\n type: 'Type',\n types: { char: 'Characters', path: 'Stroke', math: 'Arithmetic' },\n },\n totp: {\n enabled: 'Authenticator (TOTP)',\n requireForSuperAdmin: 'Required for super admins',\n hint: 'Toggles like login captcha — takes effect immediately. Per-user “require authenticator” only enforces at sign-in when this is on; users bind under Account security.',\n },\n sms: {\n hint: 'The second factor only applies to users with a bound phone; in development, codes are printed to the backend log — production requires a real SMS provider (ISmsSender).',\n },\n mfa: { enabled: 'SMS second factor' },\n smsLogin: { enabled: 'SMS code sign-in' },\n rateLimit: {\n enabled: 'Enabled',\n windowSeconds: 'Window',\n permitPerWindow: 'Per source, at most',\n authPermitPerWindow: 'Sign-in endpoints, at most',\n },\n highSens: {\n code: 'Permission code',\n remark: 'Remark',\n codePh: 'e.g. POST:/api/v1/biz/order/refund',\n remarkPh: 'Remark (optional)',\n codeRequired: 'Permission code is required',\n },\n },\n sensitive: {\n desc: 'Users must verify their identity again before calling these endpoints. Built-in ones cannot be removed; add your own business endpoints. Changes apply immediately.',\n preview: 'What users see when they call it',\n previewTip: 'Click a row to switch',\n previewDoing: 'You are about to call',\n method: 'Method',\n path: 'Endpoint',\n builtin: 'Built-in',\n added: 'Added, effective now',\n removed: 'Removed, effective now',\n removeConfirm: 'Remove \"{code}\"? Calling it will no longer require re-verification.',\n },\n upload: {\n desc: 'Size and type limits for every upload on the site. Takes effect on save.',\n preview: 'Live preview · upload box',\n previewDrop: 'Click or drop files here',\n previewLimit: 'Accepts {exts}, up to {mb} MB per file',\n previewDefault: 'server default types',\n groupLimit: 'Limits',\n maxSizeMb: 'Max file size',\n allowedExtensions: 'Allowed types',\n extTip: 'Empty = server default',\n quickAdd: 'Quick add',\n preset: { images: 'Images', docs: 'Documents', archives: 'Archives', clear: 'Clear' },\n fileOk: 'OK',\n fileBadExt: '{ext} not allowed',\n fileTooBig: 'Over {mb} MB',\n fileDefault: 'Per server default',\n },\n },\n // Dict management (master-detail: types on the left, items on the right)\n dict: {\n title: 'Dictionaries',\n typeTitle: 'Dictionary types',\n code: 'Type code',\n name: 'Type name',\n searchName: 'Search name',\n sort: 'Sort',\n remark: 'Remark',\n codeRequired: 'Enter a type code',\n nameRequired: 'Enter a type name',\n addTypeTitle: 'Add dict type',\n editTypeTitle: 'Edit dict type',\n typeDeleteConfirm: 'Delete dict type \"{name}\"? Its items will be removed too.',\n typeSaved: 'Saved',\n typeDeleted: 'Deleted',\n itemsOf: 'Items of \"{name}\"',\n selectTypeHint: 'Select a dict type above to manage its items',\n itemLabel: 'Label',\n itemValue: 'Value',\n itemLabelRequired: 'Enter a label',\n itemValueRequired: 'Enter a value',\n addItem: 'Add item',\n addItemTitle: 'Add dict item',\n editItemTitle: 'Edit dict item',\n itemDeleteConfirm: 'Delete dict item \"{label}\"?',\n itemSaved: 'Saved',\n itemDeleted: 'Deleted',\n codeImmutable: 'The code cannot be changed after creation',\n itemsSheetTitle: 'Dict items',\n selectItem: 'Select',\n },\n // Org management (tree table + parent-org tree select)\n org: {\n title: 'Organizations',\n searchPlaceholder: 'Search name / code',\n name: 'Name',\n code: 'Code',\n category: 'Category',\n categoryPlaceholder: 'Select category',\n sort: 'Sort',\n parent: 'Parent org',\n parentPlaceholder: 'Select parent (blank = top level)',\n nameRequired: 'Enter a name',\n codePlaceholder: 'Leave blank to auto-generate',\n codeImmutableHint: 'The code cannot be changed after creation',\n addChild: 'Add child',\n addTitle: 'Add org',\n editTitle: 'Edit org',\n deleteConfirm: 'Delete org \"{name}\"?',\n copy: 'Copy',\n copyTitle: 'Copy org',\n copyConfirm: 'This will copy \"{name}\" and all descendants. Cloned codes get a -copy suffix.',\n copyNameLabel: 'New org name',\n copied: 'Copied',\n saved: 'Saved',\n deleted: 'Deleted',\n },\n // File management (list + upload/download/delete)\n file: {\n title: 'Files',\n name: 'File name',\n extension: 'Ext',\n size: 'Size',\n contentType: 'Type',\n uploadTime: 'Uploaded',\n upload: 'Upload',\n uploadChunked: 'Chunked upload',\n uploaded: 'Uploaded successfully',\n download: 'Download',\n deleteConfirm: 'Delete file \"{name}\"?',\n deleted: 'Deleted',\n },\n // Notifications (NoticeController admin side: publish / list / delete)\n notice: {\n title: 'Notifications',\n mine: 'My notifications',\n status: 'Status',\n read: 'Read',\n unread: 'Unread',\n allRead: 'All marked as read',\n noticeTitle: 'Title',\n content: 'Content',\n type: 'Type',\n typeNotice: 'Notice',\n typeAnnouncement: 'Announcement',\n typeMessage: 'Message',\n receiver: 'Recipients',\n receiverAll: 'Everyone',\n receiverRole: 'Roles',\n receiverUser: 'Users',\n receiverPlaceholder: 'Select recipients',\n receiverRequired: 'Select at least one recipient',\n publishTime: 'Published at',\n publish: 'Publish',\n publishTitle: 'Publish notification',\n titleRequired: 'Title is required',\n deleteConfirm: 'Delete notification \"{title}\"?',\n published: 'Published',\n deleted: 'Deleted',\n view: 'View',\n detailTitle: 'Notification detail',\n // Action buttons (optional at publish time, rendered under the body)\n actions: 'Actions',\n actionsHint:\n 'Up to 5; a url starting with /api/ is called as an API, any other site path opens as a page; a label containing \".\" is translated as an i18n key',\n actionCount: '{count} action(s)',\n actionLabel: 'Label',\n actionMethod: 'Method',\n actionUrl: 'Site path',\n actionStyle: 'Style',\n actionStyleDefault: 'Default',\n actionStylePrimary: 'Primary',\n actionStyleError: 'Danger',\n actionNeedConfirm: 'Confirm first',\n actionNeedComment: 'Ask for a comment',\n actionAdd: 'Add action',\n actionConfirm: 'Run \"{label}\"?',\n actionCommentPlaceholder: 'Your comment (optional)',\n actionDone: 'Done',\n actionInvalidUrl: 'Invalid action url',\n },\n // Realtime (SignalR; instant push when SmartAdmin:Realtime:Enabled, else polling / lazy 401)\n realtime: {\n forcedLogout: 'You have been signed out by an administrator',\n },\n // Online sessions (read-only + force logout)\n session: {\n title: 'Online sessions',\n account: 'Account',\n ip: 'IP',\n device: 'Device',\n loginTime: 'Login time',\n expiresAt: 'Expires at',\n kick: 'Force logout',\n self: 'Current session',\n kickConfirm: 'Force-logout the session of \"{account}\"? It will be invalidated immediately.',\n kicked: 'Forced logout',\n mineTitle: 'My sessions',\n current: 'This device',\n kickMineConfirm: 'Sign out the session on this device? It will be invalidated immediately.',\n },\n // External login / SSO: callback result page + personal-center account bindings\n oauth: {\n processing: 'Signing you in…',\n backToLogin: 'Returning to the sign-in page',\n failed: 'Third-party sign-in failed, please try again',\n bindingsTitle: 'Account bindings',\n bindingsHint:\n 'Bind a third-party account to sign in with one click. Binding redirects you to that provider to authorize once.',\n bindingsTip:\n 'Binding opens the provider for authorization. After unbinding you can no longer sign in with that account.',\n boundCountLabel: 'bound',\n bindTip: 'Use the button below to authorize and bind',\n disabledTip: 'This method is turned off; existing bindings can still be removed',\n cannotBind: 'Unavailable',\n noProviders: 'No third-party sign-in methods are enabled',\n thirdParty: 'third-party account',\n pendingLinkTitle: 'Link {name}',\n pendingLinkHint:\n 'This {name} is not linked yet. Sign in with your own system account; you will be asked to confirm binding after login. Do not open binding links from unknown sources.',\n pendingLinkSuccess: '{name} linked. You can sign in with it next time.',\n pendingLinkConfirmTitle: 'Bind this third-party account?',\n pendingLinkConfirmContent:\n 'Bind {name}{identity} to the current account “{account}”. If this is not the account you just authorized, choose “Sign in only”.',\n pendingLinkConfirmOk: 'Bind',\n pendingLinkConfirmSkip: 'Sign in only',\n pendingLinkIdentity: ' ({display})',\n bind: 'Bind',\n unbind: 'Unbind',\n bound: 'Bound',\n notBound: 'Not bound',\n boundAt: 'Bound at {time}',\n unbound: 'Unbound',\n unbindConfirm: 'Unbind \"{name}\"? You will no longer be able to sign in with it.',\n disabled: 'Disabled',\n // Built-in brand display names (used when the backend sends no displayName)\n brand: {\n github: 'GitHub',\n wechat: 'WeChat',\n wecom: 'WeCom',\n dingtalk: 'DingTalk',\n gitee: 'Gitee',\n qq: 'QQ',\n },\n },\n // Position management (plain CRUD; positions are not linked to orgs)\n position: {\n title: 'Positions',\n code: 'Code',\n name: 'Name',\n sort: 'Sort',\n codePlaceholder: 'Auto-generated if empty',\n codeImmutableHint: 'The code cannot be changed after creation',\n nameRequired: 'Enter a name',\n addTitle: 'Add position',\n editTitle: 'Edit position',\n deleteConfirm: 'Delete position \"{name}\"?',\n saved: 'Saved',\n deleted: 'Deleted',\n },\n role: {\n title: 'Roles',\n code: 'Code',\n name: 'Name',\n sort: 'Sort',\n remark: 'Remark',\n codeRequired: 'Enter a code',\n nameRequired: 'Enter a name',\n addTitle: 'Add role',\n editTitle: 'Edit role',\n deleteConfirm: 'Delete role \"{name}\"? Its grants, data scope and user links will be removed.',\n deleteConfirmNoUsers: 'Delete role \"{name}\"? No user currently holds it.',\n deleteConfirmWithUsers:\n 'Role \"{name}\" is held by {count} user(s). Deleting it strips those users of every permission it grants, and the links cannot be restored. Delete anyway?',\n batchDeleteWithUsers:\n 'Delete the {count} selected role(s)? {users} user(s) will immediately lose the permissions they grant, and the links cannot be restored.',\n isDelegatable: 'Delegatable',\n isDelegatableHint:\n 'When enabled, non-superadmin users can assign this role to users within their data scope',\n grantUsers: 'Grant users',\n grantUsersSaved: 'User grants saved',\n saved: 'Saved',\n deleted: 'Deleted',\n grantMenus: 'Grant menus',\n grantSaved: 'Grants saved',\n apiOnlyRow: 'API only (no page)',\n grantSearch: 'Search directories, pages or buttons',\n grantSearchClear: 'Clear search',\n grantSelectAll: 'Select all in \"{name}\"',\n noButtons: 'No button permissions',\n grantNoMatch: 'No matching permissions',\n grantNoMatchElsewhere:\n '{count} directory(ies) match in other apps. Switch the app above to view them.',\n grantNoMenus: 'No menus in this app',\n grantSummary: 'Granted {on} / {total}',\n grantSummarySplit: '{pages} pages · {buttons} buttons',\n grantUnsaved: 'Unsaved changes',\n systemMenusBuiltinOnly:\n 'Apart from User Management and Role Management, menus that ship with the system can only be granted to built-in roles and are hidden here',\n dataScope: 'Data scope',\n scopeType: 'Scope type',\n customOrgs: 'Custom orgs',\n customOrgsHint: 'Select orgs visible to this role',\n scopeSaved: 'Data scope saved',\n scope: {\n all: 'All data',\n org: 'Own org',\n orgAndChildren: 'Own org & below',\n self: 'Self only',\n custom: 'Custom orgs',\n },\n },\n log: {\n loginTitle: 'Login logs',\n account: 'Account',\n result: 'Result',\n success: 'Success',\n failed: 'Failed',\n resultCode: 'Code',\n name: 'Name',\n ip: 'IP',\n userAgent: 'Client',\n device: 'Device',\n clear: 'Clear logs',\n clearLoginConfirm: 'Clear all login logs? This is a hard delete and cannot be undone.',\n cleared: 'Cleared',\n // Operation logs\n opTitle: 'Operation logs',\n opName: 'Operation',\n method: 'Method',\n path: 'Path',\n elapsed: 'Elapsed',\n operator: 'Operator',\n operatorPlaceholder: 'Select operator',\n param: 'Params',\n exception: 'Exception',\n detail: 'Detail',\n clearOpConfirm: 'Clear all operation logs? This is a hard delete and cannot be undone.',\n // Exception logs\n exceptionTitle: 'Exception logs',\n exceptionType: 'Exception type',\n exceptionMessage: 'Message',\n stackTrace: 'Stack trace',\n traceId: 'Trace ID',\n clearExceptionConfirm: 'Clear all exception logs? This is a hard delete and cannot be undone.',\n },\n monitor: {\n title: 'Server monitor',\n refresh: 'Refresh',\n cpu: 'CPU usage',\n memory: 'Memory usage',\n runtime: 'Runtime',\n disk: 'Disk',\n processorCount: 'Processors',\n threadCount: 'Threads',\n gcHeap: 'GC heap',\n totalMemory: 'Available',\n machineName: 'Machine',\n framework: 'Framework',\n os: 'OS',\n arch: 'Arch',\n uptime: 'Uptime',\n free: 'Free',\n days: 'd',\n hours: 'h',\n minutes: 'm',\n },\n // Scheduled jobs (job list / run logs / monitor / CronEditor; error texts live in error.job.*, do not duplicate)\n job: {\n title: 'Scheduled Jobs',\n name: 'Job name',\n code: 'Job code',\n codePlaceholder: 'Unique code, immutable after creation',\n remark: 'Remark',\n nameRequired: 'Please enter the job name',\n codeRequired: 'Please enter the job code',\n addTitle: 'New job',\n editTitle: 'Edit job',\n deleteConfirm: 'Delete job \"{name}\"?',\n saved: 'Saved; takes effect within 30 seconds across the cluster',\n deleted: 'Deleted',\n runOnce: 'Run',\n runConfirm: 'Run job \"{name}\" once now? This run does not affect its schedule.',\n runStarted: 'Run triggered',\n viewLogs: 'Logs',\n protectedTip: 'Built-in job is protected from deletion',\n pauseConfirm: 'Pause job \"{name}\"? It will no longer be scheduled.',\n panicTooltip:\n 'Tripped after {n} consecutive failures; re-enabling resets the counter and resumes scheduling',\n nextRunTime: 'Next run',\n lastRunTime: 'Last run',\n runCount: 'Runs / Errors',\n status: { ready: 'Ready', paused: 'Paused', completed: 'Completed', panic: 'Panic' },\n form: {\n sectionBasic: 'Basic',\n sectionTrigger: 'Trigger',\n sectionHandler: 'Payload',\n sectionAdvanced: 'Advanced',\n sectionAdvancedHint:\n 'Active window, misfire, concurrency, retry and alerting — saving works without opening this',\n startTime: 'Active from',\n endTime: 'Active until',\n windowPlaceholder: 'Empty = unlimited',\n misfireStrategy: 'Misfire strategy',\n misfireSkip: 'Skip',\n misfireFireOnceNow: 'Fire once now',\n concurrencyMode: 'Concurrency',\n concurrencySerial: 'Serial (skip overlap)',\n concurrencyParallel: 'Parallel',\n timeoutSeconds: 'Timeout (s)',\n timeoutHint: '0 = unlimited',\n retryCount: 'Retry count',\n retryIntervalSeconds: 'Retry interval (s)',\n failAlertThreshold: 'Failure alert threshold',\n failAlertHint: '0 = no alert, no panic',\n alertByNotice: 'Alert via notice',\n alertEmails: 'Alert emails',\n alertEmailsPlaceholder: 'Comma separated; empty falls back to global config',\n },\n trigger: {\n kind: 'Trigger',\n cron: 'Cron',\n interval: 'Fixed interval',\n oneShot: 'One-shot',\n cronExpression: 'Cron expression',\n cronRequired: 'Please enter a cron expression',\n intervalSeconds: 'Interval seconds',\n intervalRequired: 'Please enter interval seconds (≥5)',\n oneShotTime: 'Run at',\n oneShotRequired: 'Please pick the run time',\n seconds: 's',\n everySeconds: 'Every {n}s',\n },\n handler: {\n kind: 'Payload type',\n compiled: 'Compiled',\n http: 'HTTP',\n sql: 'SQL',\n sqlDisabledHint: 'SQL payloads are off — the backend must set SmartAdmin:Jobs:Sql:Enabled',\n name: 'Handler',\n namePlaceholder: 'Pick a registered handler',\n nameRequired: 'Please pick a handler',\n props: 'Properties',\n propKey: 'Key',\n propValue: 'Value',\n addProp: 'Add item',\n httpUrl: 'Request URL',\n httpUrlRequired: 'Please enter the request URL',\n httpMethod: 'Method',\n httpHeaders: 'Headers',\n headersMaskHint:\n 'For security, stored header values show as ********; leave unchanged to keep them as-is',\n httpBody: 'Body',\n successStatuses: 'Success statuses',\n successStatusesPlaceholder: 'e.g. 200,201; empty = any 2xx',\n sqlText: 'SQL statement',\n sqlRequired: 'Please enter the SQL statement',\n },\n log: {\n title: 'Job Runs',\n job: 'Job',\n jobPlaceholder: 'Select job',\n fireMode: 'Fired by',\n fireModeSchedule: 'Schedule',\n fireModeManual: 'Manual',\n fireModeBackfill: 'Backfill',\n fireModeMisfireSkip: 'Misfire skip',\n scheduledTime: 'Scheduled at',\n startTime: 'Started at',\n elapsed: 'Elapsed',\n runStatus: 'Status',\n running: 'Running',\n success: 'Success',\n failed: 'Failed',\n timeout: 'Timeout',\n cancelled: 'Cancelled',\n skipped: 'Skipped',\n retryIndex: 'Retry',\n node: 'Node',\n kill: 'Kill',\n killConfirm:\n 'Kill this run of \"{name}\"? Once the flag is written, the executing node stops within seconds.',\n killed: 'Kill requested',\n clear: 'Clear logs',\n clearTitle: 'Clear run logs',\n clearRange: 'Range',\n clearAll: 'All records',\n beforeDays: 'Older than {n} days',\n clearHint: 'Running records are always kept; this is a hard delete and cannot be undone.',\n cleared: 'Removed {n} records',\n message: 'Handler output',\n error: 'Error',\n attempts: 'Attempts of the same fire',\n firstTry: 'First try',\n retryN: 'Retry #{n}',\n },\n monitor: {\n title: 'Job Monitor',\n todaySuccess: 'Success today',\n todayFailed: 'Failed today',\n running: 'Running',\n totalJobs: 'Total jobs',\n trendTitle: '14-day success/failure trend',\n trendSuccess: 'Success',\n trendFailed: 'Failed',\n upcomingTitle: 'Upcoming runs',\n upcomingJob: 'Job',\n upcomingTime: 'Time',\n nodesTitle: 'Cluster nodes',\n nodeName: 'Node',\n role: 'Role',\n leader: 'leader',\n standby: 'standby',\n lastHeartbeat: 'Last heartbeat',\n workerId: 'WorkerId',\n pid: 'PID',\n justNow: 'just now',\n secondsAgo: '{n}s ago',\n minutesAgo: '{n}m ago',\n hoursAgo: '{n}h ago',\n },\n cron: {\n tabSecond: 'Second',\n tabMinute: 'Minute',\n tabHour: 'Hour',\n tabDay: 'Day',\n tabMonth: 'Month',\n tabWeek: 'Week',\n tabExpression: 'Expression',\n every: 'Every',\n any: 'Not specified (?)',\n range: 'Range',\n to: 'to',\n step: 'Step',\n stepFrom: 'from',\n stepEvery: ', every',\n list: 'Values',\n lastDay: 'Last day (L)',\n lastDayHint: '0 = last day, n = n days before month end (L-n)',\n nearestWeekday: 'Nearest weekday (nW)',\n nearestWeekdayHint: 'Nearest weekday to that day, within the month',\n lastWeekday: 'Last weekday (LW)',\n lastOfWeek: 'Last weekday-of-month (nL)',\n nth: 'Nth weekday (n#m)',\n nthPrefix: 'the',\n nthInfix: 'th',\n sun: 'Sun',\n mon: 'Mon',\n tue: 'Tue',\n wed: 'Wed',\n thu: 'Thu',\n fri: 'Fri',\n sat: 'Sat',\n expressionPlaceholder: 'e.g. 0 0 2 * * ? (sec min hour day month week)',\n expressionHint:\n '5 fields (seconds auto-filled) or 6; day and week cannot both be restricted — one must be * or ?',\n normalized: 'Normalized',\n nextRuns: 'Next {n} runs',\n noUpcoming: 'No future occurrences',\n everySecondWarning:\n 'This expression effectively fires every second — make sure that is intended',\n },\n },\n // AI model management (providers + models; error text lives in error.ai.*, don't duplicate)\n aiModel: {\n title: 'AI Models',\n searchPlaceholder: 'Search provider code / name',\n addProvider: 'Add provider',\n editProvider: 'Edit provider',\n deleteProvider: 'Delete provider',\n deleteConfirm:\n 'Delete provider \"{name}\"? Its models are deleted too; existing usage logs are unaffected.',\n deleted: 'Deleted',\n saved: 'Saved',\n enabled: 'Enabled',\n disabled: 'Disabled',\n pendingConfigTip: 'No API key configured yet — fill it in before saving',\n pendingConfig: 'Pending setup',\n provider: {\n code: 'Provider code',\n codePlaceholder: 'Unique code, immutable after creation',\n codeRequired: 'Please enter a provider code',\n name: 'Provider name',\n nameRequired: 'Please enter a provider name',\n preset: 'Provider preset',\n presetPlaceholder: 'Pick a preset provider to fill in protocol and base URL',\n presetCustom: 'Custom',\n protocol: 'Protocol',\n baseUrl: 'Base URL',\n baseUrlRequired: 'Please enter a base URL',\n authScheme: 'Auth scheme',\n apiKey: 'API key',\n apiKeyPlaceholder: 'Leave empty to keep the existing key',\n apiKeyHint: 'A saved key only echoes back masked, never in plain text',\n hasApiKeyYes: 'Configured',\n hasApiKeyNo: 'Not configured',\n disableConfirm: 'Disable provider \"{name}\"?',\n sort: 'Sort',\n remark: 'Remark',\n },\n model: {\n title: 'Models',\n add: 'Add model',\n remove: 'Remove',\n name: 'Model name',\n nameRequired: 'Please enter a model name',\n displayName: 'Display name',\n displayNameRequired: 'Please enter a display name',\n contextWindow: 'Context window',\n contextWindowPlaceholder: 'e.g. 128000, leave empty for unlimited',\n inputPrice: 'Input price',\n outputPrice: 'Output price',\n pricePlaceholder: 'Per million tokens, leave empty for free',\n enabled: 'Enabled',\n isDefault: 'Default model',\n setDefault: 'Set as default',\n defaultTag: 'Default',\n atLeastOne: 'Keep at least one model',\n duplicateName: 'Duplicate model name',\n noDefault: 'No default model set',\n defaultUniqueHint:\n 'The default model is unique across all providers: saving a new default here clears the default of any other provider.',\n },\n test: {\n action: 'Test connection',\n testing: 'Testing…',\n ok: 'Connected',\n failed: 'Connection failed',\n latency: '{ms} ms',\n model: 'Model',\n usage: 'Usage',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n error: 'Error',\n },\n },\n // AI usage stats (filters / summary tiles / grouping / trend / detail table)\n aiUsage: {\n title: 'AI Usage',\n filter: {\n dateRange: 'Date range',\n today: 'Today',\n last7Days: 'Last 7 days',\n last30Days: 'Last 30 days',\n provider: 'Provider',\n providerAll: 'All providers',\n model: 'Model',\n modelAll: 'All models',\n scene: 'Scene',\n sceneAll: 'All scenes',\n scenePlaceholder: 'Filter by call scene',\n },\n metric: {\n totalTokens: 'Total tokens',\n totalCalls: 'Total calls',\n failureCount: 'Failures',\n avgLatency: 'Avg. latency',\n },\n groupBy: {\n label: 'Group by',\n provider: 'By provider',\n model: 'By model',\n scene: 'By scene',\n user: 'By user',\n },\n trend: {\n title: 'Usage trend',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n callCount: 'Calls',\n },\n table: {\n createTime: 'Time',\n provider: 'Provider',\n model: 'Model',\n scene: 'Scene',\n user: 'User',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n latency: 'Latency',\n status: 'Status',\n success: 'Success',\n failed: 'Failed',\n requestId: 'Request Id',\n streamed: 'Streamed',\n usageSource: 'Usage source',\n usageSourceReported: 'Reported upstream',\n usageSourceMissing: 'Estimated (missing)',\n },\n share: 'Share',\n },\n cache: {\n authTitle: 'Permission cache',\n authDesc:\n \"Clear every user's permission-code and data-scope cache. Forces authorization to be recomputed on the next request after direct DB edits or troubleshooting.\",\n authConfirm:\n \"Clear all users' permission / data-scope cache? Authorization will be recomputed on the next request.\",\n dictTitle: 'Dictionary cache',\n dictDesc:\n 'Clear cached items for every dictionary type. Forces dropdown data sources to rebuild from the latest dictionaries after direct DB edits.',\n dictConfirm: 'Clear all dictionary item cache?',\n configTitle: 'Config cache',\n configDesc:\n 'Clear the read-through cache of every system config item. Forces config values to be re-read from the latest tables after direct DB edits.',\n configConfirm: 'Clear all system config cache?',\n portalTitle: 'Portal menu cache',\n portalDesc:\n \"Bump the portal generation, invalidating every user's module / menu-tree cache so it rebuilds on next entry.\",\n portalConfirm:\n \"Rebuild the portal menu cache? Every user's menu will be recomputed on their next request.\",\n execute: 'Execute',\n flushed: 'Cleared {n} cache entries',\n portalDone: 'Portal menu cache rebuilt',\n note: 'Invalidation only — no key browsing, no value reads: the cache holds plaintext OTP / one-time tokens and keys embed phone numbers / IPs. Normal authorization changes already invalidate automatically; this page is for manual refresh after out-of-band changes such as direct DB edits.',\n },\n profile: {\n title: 'Profile',\n account: 'Account',\n name: 'Name',\n org: 'Org',\n position: 'Position',\n nickname: 'Nickname',\n gender: 'Gender',\n phone: 'Phone',\n email: 'Email',\n avatar: 'Avatar',\n avatarUploading: 'Uploading…',\n phoneInvalid: 'Invalid phone number',\n emailInvalid: 'Invalid email format',\n saved: 'Profile updated',\n },\n personalSecurity: {\n title: 'Account security',\n // Everyone: what the user can do — no admin console paths.\n hint: 'Bind or manage your authenticator (TOTP) for sign-in two-factor verification.',\n // Admins only (super-admin / system-config access): points at Security policy toggle.\n adminHint:\n 'If setup fails or sign-in never asks for a code, open System config → Security and ensure “Enable authenticator” is on.',\n bindDesc:\n 'Self-service setup uses your account and current password. You can also use a recovery code to remove and rebind.',\n setupAuthenticator: 'Set up authenticator',\n useRecovery: 'Use recovery code',\n note: 'Start voluntary setup from this page. If MFA is required and not bound yet, a prompt appears after password sign-in succeeds.',\n },\n changePassword: {\n title: 'Change password',\n oldPassword: 'Current password',\n newPassword: 'New password',\n confirmPassword: 'Confirm new password',\n oldRequired: 'Please enter your current password',\n newRequired: 'Please enter a new password',\n confirmRequired: 'Please confirm your new password',\n mismatch: 'Passwords do not match',\n changed: 'Password changed, please sign in again',\n forcedHint:\n 'First login or password reset — please change your password before using the system.',\n strength: { label: 'Password strength', weak: 'Weak', fair: 'Fair', strong: 'Strong' },\n rules: {\n minLength: 'At least {n} characters',\n upper: 'Contains uppercase',\n lower: 'Contains lowercase',\n digit: 'Contains a digit',\n special: 'Contains a special character',\n specialOptional: 'Contains a special character (optional, stronger)',\n },\n },\n error: {\n _fallback: 'Operation failed, please try again',\n // Client-side failures (not backend error codes): the timeout guard fired, or the call was cancelled\n network: {\n timeout: 'Request timed out, check your connection and try again',\n aborted: 'Request cancelled',\n },\n auth: {\n passwordWrong: 'Incorrect account or password',\n captchaExpired: 'Captcha expired',\n captchaWrong: 'Incorrect captcha',\n accountLocked: 'Account locked, try again later',\n accountDisabled: 'Account disabled',\n tokenInvalid: 'Invalid session, please sign in again',\n refreshTokenInvalid: 'Session expired, please sign in again',\n tooManyRequests: 'Too many requests, slow down',\n smsCodeRequired: 'Please enter the SMS verification code',\n smsCodeWrong: 'Incorrect SMS verification code',\n smsCodeExpired: 'SMS verification code is incorrect or expired, please request a new one',\n smsLoginDisabled: 'SMS code sign-in is not enabled',\n oauthProviderDisabled: 'This third-party sign-in method is not enabled or does not exist',\n oauthStateInvalid: 'Sign-in session expired, please start the third-party sign-in again',\n oauthExchangeFailed: 'Third-party sign-in failed to resolve identity, please try again',\n oauthAccountNotBound:\n 'This third-party account is not linked yet; sign in with your system account to complete linking',\n oauthAlreadyBound:\n 'This third-party account is already bound, or the current account is already bound to the same provider',\n totpRequired: 'Please enter the authenticator code to complete MFA',\n totpWrong: 'Incorrect authenticator code',\n totpNotBound: 'Authenticator is not bound yet; complete binding first',\n bindInviteInvalid: 'Authenticator setup is invalid or expired. Start again.',\n mfaBindInvalid: 'Authenticator setup is invalid or expired. Start again.',\n recoveryCodeInvalid: 'Recovery code is invalid or already used',\n csrfInvalid: 'Request validation failed; refresh the page and try again',\n reauthRequired: 'This action requires re-authentication',\n mfaBindPasswordRequired: 'Verify your current password before binding an authenticator',\n apiKeyInvalid: 'API key missing or invalid',\n externalAuthTypeNotFound: 'Sign-in type does not exist or its package is not installed',\n externalAuthCodeExists: 'This code is already in use',\n externalAuthCodeInvalid: 'Code is invalid or conflicts with a built-in sign-in method',\n externalAuthFieldMissing: 'Required field missing: {field}',\n externalAuthDataProtectionKeyMissing:\n 'No data-protection master key is configured, so third-party secrets cannot be stored safely. Set SmartAdmin:Security:DataProtection:Key first',\n externalAuthProviderNotFound: 'This sign-in method is not configured',\n externalAuthEndpointBlocked:\n 'This address is rejected by the outbound-request fence; check the scheme, host and network range',\n },\n perm: {\n denied: 'Access denied',\n demoReadOnly: 'Demo environment is read-only',\n superAdminRequired: 'This action requires super admin privileges',\n menuNotGrantable: \"This menu's module does not allow delegated grants\",\n targetIsDelegatedAdmin:\n 'The user is an administrator; only a super admin can grant them menus individually',\n delegatedGrantExpiryInvalid:\n 'An allow grant needs an expiry date at most {maxDays} days away',\n },\n user: {\n notFound: 'User not found',\n accountExists: 'Account already exists',\n superAdminProtected: 'Super admin is protected',\n passwordTooWeak: 'New password does not meet the complexity policy',\n passwordReused: 'New password must differ from your current and recently used passwords',\n outOfDataScope: 'Target user is outside your data scope',\n avatarUrlInvalid: 'Avatar URL is not allowed',\n cannotOperateSelf: 'You cannot perform this action on yourself',\n menuGrantInvalid:\n 'Invalid grant changes: each menu at most once, and the expiry must be in the future',\n },\n role: {\n notFound: 'Role not found',\n codeExists: 'Role code already exists',\n notDelegatable: 'Role is not delegatable',\n systemMenuNotAssignable:\n 'Apart from User Management and Role Management, menus that ship with the system can only be granted to built-in roles',\n },\n org: {\n notFound: 'Org not found',\n hasChildren: 'Org has children and cannot be deleted',\n invalidParent: 'Invalid parent org',\n codeExists: 'Org code already exists',\n hasUsers: 'Org still has active users and cannot be deleted',\n outOfScope: 'Target org is outside your data scope',\n },\n position: {\n notFound: 'Position not found',\n codeExists: 'Position code already exists',\n hasUsers: 'Position still has active users and cannot be deleted',\n },\n module: {\n notFound: 'App not found',\n codeExists: 'App code already exists',\n protected: 'Built-in app is protected',\n accessDenied: 'No access to this app',\n hasMenus: 'App still has menus attached; move or delete them first',\n },\n menu: {\n notFound: 'Menu not found',\n hasChildren: 'Menu has children and cannot be deleted',\n invalidParent: 'Invalid parent menu (cannot be itself or its descendant)',\n },\n session: { notFound: 'Session not found or already signed out' },\n dict: {\n typeNotFound: 'Dict type not found',\n typeCodeExists: 'Dict type code exists',\n itemNotFound: 'Dict item not found',\n seedProtected: 'Seed data is protected and cannot be deleted',\n itemValueExists: 'Dict item value already exists under this type',\n },\n config: { notFound: 'Config not found', keyExists: 'Config key exists' },\n notice: {\n notFound: 'Notification not found',\n receiverRequired: 'At least one receiver must be specified',\n receiverNotFound: 'Receiver does not exist or is disabled',\n actionInvalid:\n 'Invalid action list: label required, method must be GET/POST, url must be a site path starting with a single /, at most 5 actions',\n },\n file: {\n empty: 'Empty file',\n tooLarge: 'File too large',\n extNotAllowed: 'File type not allowed',\n notFound: 'File not found',\n chunkMissing: 'Missing chunk, please retry upload',\n chunkHashMismatch: 'File integrity check failed, please re-upload',\n },\n excel: {\n providerMissing:\n 'Excel support is not installed; install SmartAdmin.Excel and call AddSmartAdminExcel()',\n },\n import: {\n fileEmpty: 'Import file is empty',\n rowLimitExceeded: 'Import row count exceeds the limit',\n columnMissing: 'A required column is not mapped',\n cellRequired: 'This cell is required',\n cellDictInvalid: 'Invalid dictionary value',\n cellRefNotFound: 'Referenced data not found',\n cellFormatInvalid: 'Invalid cell format',\n duplicateInFile: 'Business key is duplicated within the file',\n duplicateInDb: 'Business key already exists in the database',\n orgOutOfScope: 'Organization is outside the current data scope',\n },\n export: {\n tooManyRows: 'Export exceeds the row limit; narrow your filters first',\n columnInvalid: 'Requested export column is not allowed',\n },\n job: {\n notFound: 'Job not found',\n codeExists: 'Job code already exists',\n cronInvalid: 'Invalid cron expression',\n triggerInvalid: 'Invalid trigger configuration',\n handlerNotFound: 'Job handler not registered',\n alreadyRunning: 'Previous run is still in progress',\n runNotAlive: 'This run is not in progress',\n sqlDisabled: 'SQL jobs are disabled',\n httpUrlBlocked: 'Target URL rejected by security policy',\n statusConflict: 'Operation not allowed in current job status',\n propsInvalid: 'Job properties missing or invalid',\n logNotFound: 'Job run record not found',\n runLimitReached: 'Concurrent run limit reached, try again later',\n protected: 'Built-in job is protected from deletion',\n },\n ai: {\n providerNotFound: 'Provider not found',\n providerCodeExists: 'Provider code already exists',\n providerDisabled: 'Provider is disabled',\n apiKeyMissing: 'API key is not configured',\n baseUrlBlocked: 'Target URL rejected by security policy',\n presetNotFound: 'Preset provider not found',\n presetImmutable: \"A preset provider's protocol/preset id cannot be changed\",\n modelNotFound: 'Model not found',\n noDefaultModel: 'No default model configured',\n modelDisabled: 'Model is disabled',\n modelNameExists: 'Model name already exists',\n upstreamError: 'Upstream service call failed',\n upstreamTimeout: 'Upstream service call timed out',\n upstreamRateLimited: 'Upstream service rate-limited, please retry later',\n upstreamAuthFailed: 'Upstream authentication failed, check the API key',\n upstreamBadResponse: 'Upstream service returned an unexpected response',\n dataProtectionKeyMissing: 'Data protection key unavailable, cannot decrypt the API key',\n sceneRequired: 'A call scene is required',\n multimodalSystemUnsupported:\n 'System messages do not support multi-part content such as images',\n structuredOutputUnsupported:\n 'This provider does not support structured output (json_schema) constraints',\n },\n recycle: {\n notFound: 'Deleted record not found',\n uniqueConflict: 'Restore failed: code/account already taken by another record',\n invalidType: 'Unsupported recycle bin type',\n },\n request: {\n pageSizeExceeded:\n 'Page size exceeds the limit of {max}; use a smaller page or the export endpoint',\n },\n system: { internal: 'Internal server error' },\n },\n\n // Recycle bin\n recycle: {\n title: 'Recycle Bin',\n name: 'Name',\n code: 'Code',\n deletedAt: 'Deleted at',\n restore: 'Restore',\n purge: 'Purge',\n restoreConfirm: 'Restore \"{name}\"?',\n purgeConfirm: 'Permanently delete \"{name}\"? This cannot be undone.',\n restored: 'Restored',\n purged: 'Permanently deleted',\n empty: 'Recycle bin is empty',\n tabs: {\n user: 'Users',\n role: 'Roles',\n org: 'Orgs',\n position: 'Positions',\n module: 'Modules',\n config: 'Configs',\n dict: 'Dicts',\n menu: 'Menus',\n job: 'Jobs',\n },\n },\n // API docs entry page\n apiDocs: {\n title: 'API Docs',\n openedHint: 'API docs opened in a new tab.',\n fallbackLink: \"Didn't open automatically? Click here\",\n copyToken: 'Copy my API token',\n copyTokenHint:\n 'In the new tab, click Authentication → Bearer in the top right and paste the token you just copied',\n tokenCopied: 'Copied',\n tokenWarn:\n 'The token is the credential of your current session and acts as your identity. Do not share it with anyone.',\n },\n // User import / export: column titles + file names (mirror UserImportProfile / UserExportProfile columns)\n userExport: {\n account: 'Account',\n name: 'Name',\n nickname: 'Nickname',\n phone: 'Phone',\n email: 'Email',\n gender: 'Gender',\n orgName: 'Organization',\n positionName: 'Position',\n directorName: 'Director',\n enabled: 'Enabled',\n superAdmin: 'Super Admin',\n createTime: 'Created At',\n fileName: 'users.xlsx',\n importTemplateName: 'user-import-template.xlsx',\n errorReportName: 'user-import-errors.xlsx',\n },\n logOp: {\n fileName: 'op-logs.xlsx',\n },\n}\n"],"names":["enUS"],"mappings":"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"}
1
+ {"version":3,"file":"en-US.js","sources":["../../src/locales/en-US.ts"],"sourcesContent":["export default {\n common: {\n rowNo: 'No.',\n copySuffix: '- Copy',\n zoomIn: 'Maximize',\n zoomOut: 'Restore',\n success: 'Success',\n confirm: 'Confirm',\n confirmTitle: 'Confirm',\n cancel: 'Cancel',\n close: 'Close',\n more: 'More',\n search: 'Search',\n reset: 'Reset',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n add: 'Add',\n edit: 'Edit',\n delete: 'Delete',\n save: 'Save',\n submit: 'Submit',\n format: 'Format',\n copy: 'Copy',\n copied: 'Copied',\n loading: 'Loading…',\n yes: 'Yes',\n no: 'No',\n status: 'Status',\n enabled: 'Enabled',\n disabled: 'Disabled',\n visible: 'Visible',\n hidden: 'Hidden',\n operation: 'Actions',\n createTime: 'Created',\n batchDelete: 'Batch delete',\n batchDeleteConfirm: 'Delete the {count} selected item(s)? This cannot be undone.',\n all: 'All',\n noData: 'No data',\n loadFailed: 'Failed to load',\n back: 'Back',\n detail: 'Detail',\n },\n notFound: {\n desc: 'Page not found',\n back: 'Back to workbench',\n currentApp: 'Current app: {app}',\n otherApp: 'This page belongs to the \"{app}\" app, not the one you are in',\n switchAndOpen: 'Switch to \"{app}\" and open it',\n },\n // Content-area render fallback (components/ErrorBoundary)\n errorBoundary: {\n title: 'This page hit an error',\n desc: 'The page threw an unhandled exception while rendering. You can retry, or go back home and keep working.',\n retry: 'Retry',\n home: 'Go home',\n },\n // Portal bootstrap failure (network / 5xx / rate limit): the session is fine, so it is kept\n bootError: {\n title: 'Could not load the workbench',\n desc: 'We could not fetch your apps and menus. This is usually a network problem or a temporarily unavailable server. You are still signed in.',\n retry: 'Retry',\n relogin: 'Sign in again',\n },\n missingRoute: {\n title: 'Menu page unavailable',\n message: 'The component path configured for “{title}” does not exist: {component}',\n },\n userPicker: {\n title: 'Select users',\n org: 'Organizations',\n available: 'Available',\n selected: 'Selected',\n search: 'Search by name or account',\n selectPage: 'Select page',\n unselectPage: 'Deselect page',\n total: '{n} users',\n existing: 'Existing',\n remove: 'Remove',\n emptySelected: 'No users selected',\n prevPage: 'Previous page',\n nextPage: 'Next page',\n clear: 'Clear',\n },\n app: {\n theme: 'Theme',\n dark: 'Dark',\n light: 'Light',\n accent: 'Accent',\n density: 'Density',\n comfortable: 'Comfortable',\n compact: 'Compact',\n language: 'Language',\n collapse: 'Collapse',\n openMenu: 'Open menu',\n switchModule: 'Switch app',\n appearance: 'Appearance',\n back: 'Back',\n forward: 'Forward',\n logout: 'Log out',\n personalCenter: 'Account',\n clearCache: 'Clear cache',\n cacheCleared: 'Cache cleared',\n profile: 'Profile',\n password: 'Change password',\n security: 'Account security',\n sessions: 'My sessions',\n bindings: 'Account bindings',\n search: 'Search',\n fullscreen: 'Fullscreen',\n exitFullscreen: 'Exit fullscreen',\n settings: 'Settings',\n notice: {\n title: 'Notifications',\n empty: 'No notifications',\n emptyMessage: 'No messages',\n tabMessage: 'Messages',\n tabNotice: 'Notices',\n markAllRead: 'Mark all read',\n viewAll: 'View all',\n },\n },\n settings: {\n title: 'Settings',\n tabAppearance: 'Appearance',\n tabLayout: 'Layout',\n tabGeneral: 'General',\n themeMode: 'Theme mode',\n auto: 'Auto',\n themeColor: 'Theme color',\n custom: 'Custom',\n accentName: {\n blue: 'Blue',\n indigo: 'Indigo',\n purple: 'Purple',\n teal: 'Teal',\n green: 'Green',\n graphite: 'Graphite',\n custom: 'Custom color',\n },\n accentDemoButton: 'Button',\n accentDemoLink: 'Link text',\n layout: 'Layout',\n layoutVertical: 'Vertical',\n layoutVerticalMix: 'Vertical Mix',\n layoutVerticalHybridHeaderFirst: 'Left Hybrid (Header)',\n layoutHorizontal: 'Horizontal',\n layoutTopHybridSidebarFirst: 'Top Hybrid (Sidebar)',\n layoutTopHybridHeaderFirst: 'Top Hybrid (Header)',\n interface: 'Interface',\n formStyle: 'Form style',\n formStyleModal: 'Dialog',\n formStyleDrawer: 'Drawer',\n showBreadcrumb: 'Breadcrumb',\n showTabs: 'Tabs',\n fixedHeader: 'Fixed header',\n pageTransition: 'Page transition',\n transitionNone: 'None',\n transitionFade: 'Fade',\n transitionFadeSlide: 'Fade slide',\n resetConfirm: 'Reset all settings to default?',\n copyConfig: 'Copy config',\n configCopied:\n 'Current config copied (paste into DEFAULTS in stores/app.ts to make it the new default)',\n searchPlaceholder: 'Search menu…',\n searchEmpty: 'No matching menu',\n searchHint: '↑↓ navigate · ↵ open · Esc close',\n descBreadcrumb: 'Show the page path in the header',\n descTabs: 'Keep opened pages and switch between them',\n descFixedHeader: 'Pin the header with frosted glass',\n descPageTransition: 'Animation when switching pages',\n descCollapse: 'Hide the sidebar, more room for content',\n },\n tabs: {\n refresh: 'Refresh',\n pin: 'Pin',\n unpin: 'Unpin',\n close: 'Close',\n closeOthers: 'Close others',\n closeLeft: 'Close left',\n closeRight: 'Close right',\n closeAll: 'Close all',\n },\n login: {\n title: 'Sign in',\n subtitle: 'A unified access layer for every org and app',\n headlinePre: 'Enterprise ',\n headlineAccent: 'RBAC',\n headlinePost: ' console',\n welcome: 'Welcome back',\n welcomeSub: 'Sign in to continue',\n featRbac: 'RBAC authorization',\n featScope: 'Multi-org data scope',\n featPortal: 'Multi-app portal',\n account: 'Account',\n accountPlaceholder: 'Enter account',\n password: 'Password',\n passwordPlaceholder: 'Enter password',\n required: 'Enter account and password',\n captcha: 'Captcha',\n captchaPlaceholder: 'Enter captcha',\n captchaMathPlaceholder: 'Enter the result',\n captchaRequired: 'Enter the captcha',\n remember: 'Remember me',\n submit: 'Sign in',\n success: 'Signed in',\n smsLogin: 'SMS sign-in',\n accountLogin: 'Password sign-in',\n phone: 'Phone',\n phonePlaceholder: 'Enter phone number',\n smsCode: 'SMS code',\n smsCodePlaceholder: 'Enter the SMS code',\n smsRequired: 'Enter phone number and SMS code',\n sendCode: 'Send code',\n resendAfter: 'Resend in {s}s',\n smsSent: 'Code sent',\n mfaTitle: 'A code was sent to {phone}',\n mfaSub: 'Enter the SMS code to finish signing in',\n setupAuthenticator: 'Set up authenticator',\n totpTitle: 'Two-factor authentication',\n totpSub: 'Enter the 6-digit code from your authenticator app',\n totpCode: 'Authenticator code',\n totpPlaceholder: 'Enter 6-digit code',\n totpBindTitle: 'Authenticator required',\n totpBindSub:\n 'An administrator requires two-factor authentication for this account. Set it up, then sign in again.',\n useRecovery: 'Use a recovery code',\n backToPassword: 'Back to password sign-in',\n otherMethods: 'Other methods',\n moreMethods: 'More sign-in methods',\n ssoWecom: 'WeCom',\n ssoDingtalk: 'DingTalk',\n sso: 'SSO',\n ssoComingSoon: 'Third-party login coming soon',\n layoutLabel: 'Switch sign-in layout',\n layoutToSolo: 'Switch to single column',\n layoutToSplit: 'Switch to two columns',\n },\n module: {\n choose: 'Choose app',\n empty: 'No accessible apps. Contact your administrator.',\n setDefault: 'Set default',\n isDefault: 'Default',\n back: 'Back',\n enter: 'Enter',\n manage: 'Modules',\n code: 'Code',\n name: 'Name',\n icon: 'Icon',\n defaultRoute: 'Default route',\n apiPrefix: 'API prefix',\n apiPrefixHint:\n 'Filters the permission-route dropdown by app. Enter the backend route segment (e.g. sys, biz); empty = no filter',\n sort: 'Sort',\n remark: 'Remark',\n builtin: 'Built-in',\n codeRequired: 'Enter a code',\n nameRequired: 'Enter a name',\n addTitle: 'Add app',\n editTitle: 'Edit app',\n deleteConfirm: 'Delete app \"{title}\"?',\n disableConfirm: 'Disable app \"{title}\"? It will disappear from the portal',\n builtinNoDisable: 'The built-in app cannot be disabled',\n delegatable: 'Delegatable',\n delegatableHint:\n \"When on, administrators can grant or deny this app's menus to individual users (time-limited)\",\n builtinNotDelegatable: 'The built-in app is never delegatable',\n saved: 'Saved',\n deleted: 'Deleted',\n },\n menu: {\n searchPlaceholder: 'Search title / route / permission',\n workbench: 'Workbench',\n profile: 'Profile',\n password: 'Change password',\n security: 'Account security',\n notice: 'My notifications',\n sessions: 'My sessions',\n bindings: 'Account bindings',\n manage: 'Menus',\n parent: 'Parent',\n parentRoot: 'Top level (root)',\n type: 'Type',\n typeCatalog: 'Catalog',\n typeMenu: 'Page',\n typeButton: 'Button',\n title: 'Title',\n permission: 'Permission',\n permissionPlaceholder: 'Pick routes (multiple allowed)',\n permissionHint:\n 'A button may carry several routes; granting it grants them all. A Query button carries the list and detail routes.',\n configPerms: 'Permissions ({n})',\n showAllRoutes: \"Show all apps' routes\",\n routesInApp: 'This app',\n routesOther: 'Other apps',\n module: 'App',\n moduleHint: 'Top-level catalog only',\n linkHint:\n 'External / embed: an http(s) URL in Path = external link (new window); an http(s) URL in Component = embedded iframe.',\n moduleAll: 'All',\n moduleUnassigned: 'Unassigned',\n path: 'Route path',\n component: 'Component',\n icon: 'Icon',\n sort: 'Sort',\n visible: 'Sidebar visible',\n titleRequired: 'Enter a title',\n addTitle: 'Add menu',\n editTitle: 'Edit menu',\n addChild: 'Add child',\n buttons: 'Buttons',\n buttonManagerTitle: '\"{title}\" · Buttons',\n buttonParent: 'Parent page',\n addButton: 'Add button',\n batchFromRoutes: 'Add from routes',\n batchTitle: 'Add buttons from routes',\n batchSearchPlaceholder: 'Search method / path / title',\n noRoutesLeft: 'No routes to add (all covered by this menu, or the route list is empty)',\n btnQuery: 'Query',\n btnCreate: 'Create',\n btnUpdate: 'Edit',\n btnDelete: 'Delete',\n deleteConfirm: 'Delete menu \"{title}\"?',\n disableConfirm: 'Disable menu \"{title}\"? Its children will be hidden too',\n saved: 'Saved',\n deleted: 'Deleted',\n },\n // Translations of the kernel seed menu / app titles (DefaultMenuSeed / DefaultModuleSeed); the title -> key table is locales/kernelMenuTitles.ts\n menuTitle: {\n module: {\n system: 'System',\n business: 'Business Center',\n },\n catalog: {\n org: 'Organization',\n ops: 'System Operations',\n schedule: 'Job Scheduling',\n audit: 'Audit Logs',\n ai: 'AI Gateway',\n },\n page: {\n workbench: 'Workbench',\n org: 'Organizations',\n position: 'Positions',\n user: 'Users',\n role: 'Roles',\n config: 'System Settings',\n dict: 'Dictionaries',\n menu: 'Menus',\n module: 'Modules',\n notice: 'Notifications',\n recycle: 'Recycle Bin',\n monitor: 'Server Monitor',\n cache: 'Cache',\n apiDocs: 'API Docs',\n job: 'Scheduled Jobs',\n jobLog: 'Job Runs',\n jobMonitor: 'Job Monitor',\n loginLog: 'Login Logs',\n opLog: 'Operation Logs',\n exceptionLog: 'Exception Logs',\n session: 'Online Sessions',\n file: 'Files',\n aiModel: 'AI Models',\n aiUsage: 'AI Usage',\n },\n button: {\n orgQuery: 'Org - Query',\n orgCreate: 'Org - Create',\n orgUpdate: 'Org - Update',\n orgDelete: 'Org - Delete',\n orgCopy: 'Org - Copy',\n positionQuery: 'Position - Query',\n positionCreate: 'Position - Create',\n positionUpdate: 'Position - Update',\n positionDelete: 'Position - Delete',\n userQuery: 'User - Query',\n userCreate: 'User - Create',\n userUpdate: 'User - Update',\n userDelete: 'User - Delete',\n userResetPassword: 'User - Reset Password',\n userToggle: 'User - Enable / Disable',\n userImport: 'User - Import',\n userExport: 'User - Export',\n userGrantMenus: 'User - Grant Menus',\n roleQuery: 'Role - Query',\n roleCreate: 'Role - Create',\n roleUpdate: 'Role - Update',\n roleDelete: 'Role - Delete',\n roleGrantMenus: 'Role - Grant Menus',\n roleDataScope: 'Role - Data Scope',\n roleGrantUsers: 'Role - Grant Users',\n ping: 'Connectivity Probe',\n configQuery: 'Config - Query',\n configCreate: 'Config - Create',\n configUpdate: 'Config - Update',\n configDelete: 'Config - Delete',\n configUploadLogo: 'Config - Upload Logo',\n sensitiveQuery: 'Sensitive Action - Query',\n sensitiveCreate: 'Sensitive Action - Create',\n sensitiveDelete: 'Sensitive Action - Delete',\n mfaClear: 'MFA - Unbind User Authenticator',\n dictTypeQuery: 'Dict Type - Query',\n dictTypeCreate: 'Dict Type - Create',\n dictTypeUpdate: 'Dict Type - Update',\n dictTypeDelete: 'Dict Type - Delete',\n dictItemQuery: 'Dict Item - Query',\n dictItemCreate: 'Dict Item - Create',\n dictItemUpdate: 'Dict Item - Update',\n dictItemDelete: 'Dict Item - Delete',\n menuQuery: 'Menu - Query',\n menuCreate: 'Menu - Create',\n menuUpdate: 'Menu - Update',\n menuDelete: 'Menu - Delete',\n moduleQuery: 'Module - Query',\n moduleCreate: 'Module - Create',\n moduleUpdate: 'Module - Update',\n moduleDelete: 'Module - Delete',\n noticeQuery: 'Notice - Query',\n noticePublish: 'Notice - Publish',\n noticeDelete: 'Notice - Delete',\n recycleQuery: 'Recycle Bin - Query',\n recyclePurge: 'Recycle Bin - Delete Permanently',\n recycleRestore: 'Recycle Bin - Restore',\n monitorQuery: 'Server Monitor - Query',\n cacheFlushAuth: 'Cache - Clear Permissions',\n cacheFlushDict: 'Cache - Clear Dictionaries',\n cacheFlushConfig: 'Cache - Clear Configs',\n cacheRebuildPortal: 'Cache - Rebuild Portal Menus',\n apiDocsView: 'API Docs - View Contract',\n jobQuery: 'Job - Query',\n jobCreate: 'Job - Create',\n jobUpdate: 'Job - Update',\n jobDelete: 'Job - Delete',\n jobToggle: 'Job - Enable / Disable',\n jobRun: 'Job - Run Once',\n jobLogQuery: 'Job Run - Query',\n jobLogKill: 'Job Run - Terminate',\n jobLogClear: 'Job Run - Clear',\n jobMonitorQuery: 'Job Monitor - Query',\n loginLogQuery: 'Login Log - Query',\n loginLogClear: 'Login Log - Clear',\n opLogQuery: 'Operation Log - Query',\n opLogClear: 'Operation Log - Clear',\n opLogExport: 'Operation Log - Export',\n exceptionLogQuery: 'Exception Log - Query',\n exceptionLogClear: 'Exception Log - Clear',\n sessionQuery: 'Online Session - Query',\n sessionKick: 'Force Logout',\n fileQuery: 'File - Query',\n fileUpload: 'File - Upload',\n fileDelete: 'File - Delete',\n fileDownload: 'File - Download',\n aiProviderQuery: 'AI Provider - Query',\n aiProviderCreate: 'AI Provider - Create',\n aiProviderUpdate: 'AI Provider - Update',\n aiProviderDelete: 'AI Provider - Delete',\n aiProviderTest: 'AI Provider - Test Connection',\n aiUsageQuery: 'AI Usage - Query',\n },\n },\n iconPicker: {\n placeholder: 'Select icon',\n title: 'Select icon',\n search: 'Search icon name…',\n local: 'Local SVG',\n online: 'Online',\n onlinePlaceholder: 'Any iconify name, e.g. mdi:home',\n use: 'Use',\n offlineHint: 'Offline — online icons not bundled cannot be previewed',\n empty: 'No matching icon',\n more: '{n} more — keep typing to narrow',\n },\n // SmartTable (smart-naive-table) chrome text; search/reset/density reuse common/app keys, injected globally in createSmartAdmin.ts\n table: {\n refresh: 'Refresh',\n columnSettings: 'Columns',\n columnSettingsReset: 'Restore defaults',\n fixedLeft: 'Pin left',\n fixedRight: 'Pin right',\n fixedNone: 'Unpin',\n expand: 'Expand',\n collapse: 'Collapse',\n total: 'Total {n}',\n // TableZoomButton (blow a wide table up to the full viewport)\n zoom: 'Zoom in',\n zoomExit: 'Zoom out',\n // Shown when a search condition is beyond what the backend can express (see utils/tableFilter.ts)\n filterFallback:\n 'Some search conditions are not supported by the server (one condition per field; a date range needs \"on or after\" plus \"on or before\" joined by AND). Searching with the recognizable ones.',\n filterTruncated:\n 'More than 10000 rows: search only covers the first 10000. Use a more specific condition.',\n },\n workbench: {\n welcome: 'Hello, {name}',\n subtitle: 'SmartAdmin · Enterprise RBAC console',\n roles: 'Roles',\n users: 'Authorized users',\n perms: 'Permissions',\n online: 'Online sessions',\n trendTitle: 'Activity (last 7 days)',\n distributionTitle: 'Resource distribution',\n trendLogins: 'Logins',\n trendActive: 'Active users',\n },\n // Business app workbench (dashboard/biz.vue; real data, an app overrides the same page key with its own stats)\n biz: {\n welcome: 'Welcome back, {name}',\n subtitle: 'App workbench',\n onlineDuration: 'Online for {hours}h {minutes}m',\n onlineDurationShort: 'Online for {minutes}m',\n lastLogin: 'Last sign-in {time}',\n firstLogin: 'First sign-in',\n todo: 'To-dos',\n todoEmpty: 'Nothing pending',\n quick: 'Shortcuts',\n quickPinned: 'Pinned',\n quickSuggested: 'Frequent · click the star to pin',\n quickAdd: 'Add shortcut',\n quickPin: 'Pin',\n quickUnpin: 'Remove',\n notices: 'My notifications',\n noticesEmpty: 'No notifications',\n noMenus: 'No menus in this app yet',\n },\n user: {\n title: 'Users',\n account: 'Account',\n name: 'Name',\n status: 'Status',\n enabled: 'Enabled',\n disabled: 'Disabled',\n superAdmin: 'Super',\n createTime: 'Created',\n // Write-side field (create/edit only)\n password: 'Initial password',\n passwordHint: 'Leave blank to auto-generate one (shown once after creation)',\n org: 'Org',\n allOrgs: 'All',\n // Group name of the org panel; in a narrow content area the tree moves into a drawer, where it is also the toolbar button + drawer title\n orgFilter: 'Organization',\n // Shown once when the position / role / manager options fail to load, without interrupting the list; {names} lists what failed\n optionsLoadFailed:\n 'Failed to load options for {names}. Dropdowns in the add/edit form may be empty; refresh the page to retry',\n // Panel header button tips: once fully expanded it becomes \"collapse to first level\"; \"hide\" slides the whole panel left, after which the toolbar button's tip is \"show\"\n collapseToFirstLevel: 'Collapse to first level',\n hideOrgPanel: 'Hide organization panel',\n showOrgPanel: 'Show organization panel',\n orgPlaceholder: 'Select org (optional)',\n position: 'Position',\n positionPlaceholder: 'Select position (optional)',\n director: 'Manager',\n directorPlaceholder: 'Select manager (optional)',\n nickname: 'Nickname',\n nicknamePlaceholder: 'Nickname (optional)',\n phone: 'Phone',\n phonePlaceholder: 'Phone (optional)',\n phoneInvalid: 'Invalid phone number',\n email: 'Email',\n emailPlaceholder: 'Email (optional)',\n emailInvalid: 'Invalid email',\n gender: 'Gender',\n genderPlaceholder: 'Select gender (optional)',\n avatar: 'Avatar',\n avatarUploading: 'Uploading…',\n roles: 'Roles',\n rolesPlaceholder: 'Assign roles (optional)',\n accountRequired: 'Enter an account',\n nameRequired: 'Enter a name',\n addTitle: 'Add user',\n editTitle: 'Edit user',\n deleteConfirm: 'Delete user \"{name}\"?',\n disableConfirm: 'Disable user \"{name}\"?',\n saved: 'Saved',\n deleted: 'Deleted',\n resetPassword: 'Reset password',\n newPassword: 'New password',\n newPasswordHint: 'Leave blank to auto-generate one',\n resetDone: 'Password reset',\n createDone: 'User created',\n resetDoneHint:\n 'Relay the initial password below to the user; it will not show again after closing:',\n copy: 'Copy',\n copied: 'Copied to clipboard',\n copyFailed: 'Copy failed, please select manually',\n forceTotp: 'Require authenticator',\n totpBound: 'Authenticator bound',\n issueTotpInvite: 'Invite authenticator',\n clearMfa: 'Unbind authenticator',\n clearMfaConfirm:\n 'Unbind authenticator for \"{name}\"? They must set it up again before two-factor sign-in works.',\n mfaCleared: 'Authenticator unbound for user',\n totpInviteTitle: 'Authenticator invite for {name}',\n totpInviteOnce:\n 'This invitation is shown only now. Send the link or token to the user through an approved channel.',\n totpInviteUrl: 'Binding link',\n totpInviteToken: 'Invite token',\n totpInviteExpires: 'Expires at',\n },\n userGrant: {\n action: 'Grant menus',\n title: 'Grant menus · {name}',\n tabGrant: 'Individual grants',\n tabEffective: 'Effective access',\n hint: 'Grant through roles as usual and keep only exceptions here. Allow covers that one node; Deny also revokes everything below it and beats any allow.',\n noRoles:\n 'This user has no role, so the data scope is \"self only\": granted pages open but show only data the user created.',\n readonly: 'View only: {reason}',\n readonlyNoReason: 'View only',\n follow: 'Follow roles',\n allow: 'Allow',\n deny: 'Deny',\n effective: 'Effective',\n ineffective: 'Not effective',\n expired: 'Expired',\n deniedByAncestor: 'Denied by parent',\n notGrantable: 'Only a super admin can grant menus in this module',\n expireLongTerm: 'No expiry',\n remark: 'Reason (optional)',\n leaked: 'These APIs stay callable:',\n leakedFrom: '{code} (from {from})',\n summary: 'Allow {allow} · Deny {deny}',\n unsaved: 'Unsaved changes',\n invalidExpiry: '{count} record(s) have a missing or out-of-range expiry date',\n saved: 'Grants saved',\n overview: 'Individual grants',\n colUser: 'User',\n colMenu: 'Menu',\n colState: 'State',\n colSource: 'Source',\n colEffect: 'Effect',\n colStatus: 'Validity',\n colExpire: 'Expires',\n colGrantor: 'Granted by',\n colGrantTime: 'Granted at',\n colRemark: 'Reason',\n adjust: 'Adjust',\n statusActive: 'Active',\n statusExpiring: 'Expiring in 7 days',\n statusExpired: 'Expired',\n },\n mfa: {\n bindTitle: 'Set up authenticator',\n recoveryTitle: 'Use recovery code',\n useRecovery: 'Use a recovery code',\n backToBind: 'Set up authenticator',\n stepVerify: 'Verify',\n stepAuthenticator: 'Authenticator',\n stepRecovery: 'Recovery codes',\n bindHint:\n 'Enter your account and current password to enroll (TOTP must be enabled by the admin).',\n account: 'Account',\n currentPassword: 'Current password',\n startBind: 'Start setup',\n bindRequired: 'Enter your account and current password',\n scanSetupHint:\n 'Scan the QR code with Google Authenticator, Microsoft Authenticator, or a similar app.',\n manualSetupHint:\n 'If you cannot scan, enter the key manually in your authenticator app, then type the current 6-digit code.',\n manualKey: 'Manual setup key',\n otpauthUri: 'Authenticator URI',\n authenticatorCode: 'Authenticator code',\n completeBind: 'Complete setup',\n codeRequired: 'Enter the authenticator code',\n recoveryOnce:\n 'Save these recovery codes now. Each can be used once and they will not be displayed again. Download them to your device for safekeeping.',\n copy: 'Copy',\n copied: 'Copied to clipboard',\n copyFailed: 'Copy failed; select and copy manually',\n copyAll: 'Copy all codes',\n downloadCodes: 'Download',\n recoveryDownloaded: 'Recovery codes download started',\n recoveryDownloadHeader: 'SmartAdmin recovery codes (account: {account})',\n recoveryDownloadFooter: 'Each code can be used only once. Store offline and do not share.',\n backToLogin: 'Back to sign in',\n recoveryHint:\n 'A recovery code removes your authenticator and signs out existing sessions. Enroll again afterwards.',\n recoveryCode: 'Recovery code',\n submitRecovery: 'Use recovery code',\n recoveryRequired: 'Enter your account, current password, and recovery code',\n recoveryDone:\n 'Authenticator removed. Sign in again and complete a new self-service setup if required.',\n bindStartResponseIncomplete: 'The setup response was incomplete. Start the setup again.',\n bindCompleteResponseIncomplete: 'The setup response was incomplete. Start the setup again.',\n },\n reauth: {\n title: 'Re-authenticate',\n hint: 'This is a high-risk change. Enter an authenticator code or your current password to continue (valid for about 5 minutes).',\n method: 'Method',\n methodTotp: 'Authenticator',\n methodPassword: 'Current password',\n totpCode: 'Code',\n totpPlaceholder: '6-digit code',\n totpRequired: 'Enter the authenticator code',\n password: 'Current password',\n passwordPlaceholder: 'Current login password',\n passwordRequired: 'Enter your current password',\n confirm: 'Verify and continue',\n },\n // Import wizard / export column picker\n import: {\n button: 'Import',\n wizardTitle: 'Import users',\n stepUpload: 'Upload',\n stepMapping: 'Map columns',\n stepPreview: 'Preview & fix',\n stepResult: 'Done',\n downloadTemplate: 'Download template',\n dropHint: 'Click or drop an xlsx here',\n dropSub: '.xlsx only; use template dropdown values for dict columns',\n needFile: 'Please choose a file first',\n mappingHint: 'Map file headers to target fields. Auto-matched ones are pre-selected.',\n fileHeader: 'File header',\n targetColumn: 'Target column',\n unmap: '(Skip)',\n summary: '{total} rows, {errors} with errors',\n summaryDup: 'plus {n} already existing',\n onlyErrors: 'Errors only',\n revalidate: 'Re-validate',\n revalidated: 'Re-validated: {errors}/{total} rows have errors',\n errors: 'Errors',\n ok: 'OK',\n errorCount: '{n}',\n dupTag: 'Exists',\n // Key suffix = the DuplicateStrategy value (0 skip / 1 overwrite / 2 error)\n dupHint: {\n 0: 'This row already exists; it will be skipped on commit. No change needed.',\n 1: 'This row already exists; it will be updated on commit. No change needed.',\n 2: 'This row already exists and the current strategy treats that as a failure.',\n },\n strategy: 'Duplicates',\n strategySkip: 'Skip existing',\n strategyOverwrite: 'Overwrite existing',\n strategyError: 'Treat existing as error',\n commit: 'Commit import',\n prev: 'Back',\n next: 'Next',\n resultTitle: 'Import finished',\n resultTotal: 'Total {n}',\n resultInserted: 'Inserted {n}',\n resultUpdated: 'Updated {n}',\n resultSkipped: 'Skipped {n}',\n resultFailed: 'Failed {n}',\n editFailures: 'Edit failed rows',\n downloadErrorReport: 'Download error report',\n noErrorRows: 'No error rows',\n },\n export: {\n button: 'Export',\n pickColumns: 'Choose columns',\n selectAll: 'Select all',\n confirm: 'Export',\n done: 'Export started',\n },\n config: {\n title: 'Configs',\n key: 'Key',\n name: 'Name',\n value: 'Value',\n group: 'Group',\n sort: 'Sort',\n remark: 'Remark',\n keyRequired: 'Enter a key',\n nameRequired: 'Enter a name',\n addTitle: 'Add config',\n editTitle: 'Edit config',\n deleteConfirm: 'Delete config \"{name}\"?',\n saved: 'Saved',\n deleted: 'Deleted',\n keyManagedBy: 'This key is managed by the \"{tab}\" form. Edit it there after saving.',\n unsaved: '{n} unsaved change(s)',\n unsavedTab: 'Unsaved changes',\n discard: 'Discard',\n leaveTitle: 'Discard unsaved changes?',\n leaveConfirm: 'You have unsaved configuration changes. They will be lost if you leave.',\n tab: {\n brand: 'Branding & login',\n signin: 'Sign-in methods',\n security: 'Security',\n watermark: 'Watermark',\n sensitive: 'Sensitive actions',\n upload: 'Uploads',\n job: 'Scheduled jobs',\n advanced: 'Advanced',\n },\n brand: {\n desc: 'How the site looks in the browser tab, the sidebar, the footer and the login page.',\n preview: 'Live preview',\n previewAdmin: 'Admin',\n previewLogin: 'Login',\n groupSite: 'Site',\n groupLogin: 'Login page',\n copyrightPh: 'Leave empty to show the site name',\n copyrightUrlHint: 'When set, the footer copyright becomes a link',\n },\n watermark: {\n desc: 'Overlaid on every page after sign-in, never on the login page.',\n groupContent: 'Content',\n groupStyle: 'Style',\n enable: 'Enable watermark',\n enableHint:\n 'Overlay faint text on every page so a leaked screenshot can be traced to a person',\n content: 'Content',\n contentHint: 'Each user sees their own details, in the order below',\n contentEmpty: 'Nothing is selected, so no watermark will show',\n field: {\n name: 'Name',\n account: 'Account',\n org: 'Organization',\n phone: 'Phone (last 4)',\n time: 'Current time',\n text: 'Custom text',\n },\n text: 'Custom text',\n textHint: 'e.g. \"Internal only\"; the same for everyone',\n textPlaceholder: 'Up to {max} characters',\n timeFormat: 'Time format',\n layout: 'Layout',\n layoutSingle: 'One line',\n layoutMulti: 'Multi-line',\n fontSize: 'Font size',\n opacity: 'Strength',\n opacityHint: 'Higher is easier to read the mark, and harder to read the page',\n rotate: 'Angle',\n density: 'Density',\n sparse: 'Loose',\n normal: 'Normal',\n dense: 'Tight',\n cross: 'Staggered',\n crossHint: 'Offset alternate rows by half a tile so it is harder to crop out',\n },\n logo: {\n title: 'Logo',\n edit: 'Change logo',\n upload: 'Upload a new image…',\n useUrl: 'Use an image URL…',\n remove: 'Remove, use the default',\n help: 'PNG, JPG or WEBP, cropped square; also the browser tab icon',\n fallback:\n 'Without a logo the built-in one is used. The browser tab icon follows the logo too.',\n badType: 'Only PNG, JPG and WEBP images are supported',\n tooLarge: 'The image must be at most {mb} MB',\n cropTitle: 'Crop new logo',\n cropTip: 'Drag or use the arrow keys to reposition; scroll, the slider or +/- to zoom',\n zoom: 'Zoom',\n apply: 'Set new logo',\n cropFailed: 'Cropping failed, try another image',\n badUrl: 'Enter an address starting with http:// or https://, or a site path starting with /',\n urlHint: 'The image must be publicly readable. A square image works best.',\n },\n advanced: {\n desc: 'Configs that belong to none of the tabs above, edited as raw key/value rows. Keys the tabs above manage are not listed here.',\n },\n preview: {\n minutes: '{n} min',\n hours: '{n} h',\n days: '{n} days',\n off: '(not enabled)',\n sep: ', ',\n expand: 'Expand',\n collapse: 'Collapse',\n req: {\n upper: 'an uppercase letter',\n lower: 'a lowercase letter',\n digit: 'a digit',\n special: 'a special character',\n },\n lock: 'After {count} wrong passwords in a row the account is locked for {minutes} min',\n lockOff: 'Wrong passwords never lock the account',\n captcha: 'Sign-in asks for a captcha ({type})',\n totp: 'Users can use an authenticator as a second factor',\n totpSuper: 'Users can use an authenticator as a second factor; super admins must',\n smsMfa: 'Users with a bound phone verify an SMS code at sign-in',\n password: 'Passwords need at least {min} characters and {reqs}',\n passwordMin: 'Passwords need at least {min} characters',\n expire: 'Passwords must be changed every {days} days',\n noExpire: 'Passwords never expire',\n history: 'A new password cannot repeat the last {n}',\n historyOff: 'A new password may repeat an old one',\n firstChange: 'Admin-created accounts must change their password at first sign-in',\n firstChangeOff: 'New accounts keep their initial password at first sign-in',\n session: 'Access tokens renew every {access}; sign-in lasts up to {refresh}',\n rateLimit: 'At most {permit} requests per {seconds} s from one source',\n },\n job: {\n desc: 'How long run logs are kept and who hears about failures.',\n preview: 'Live preview · effect',\n groupLog: 'Run logs',\n groupAlert: 'Failure alerts',\n logRetentionDays: 'Keep for',\n logRetentionHint: 'Older logs are cleaned up daily',\n alertEmails: 'Alert emails',\n alertEmailsHint: 'Press Enter to add; none means no email',\n previewRetention: 'Run logs are kept for {days} days; older ones are cleaned up daily',\n previewKeep: 'Keep {days} days',\n previewAxisStart: '{days} days ago',\n previewToday: 'Today',\n previewTo: 'To',\n previewSubject: 'Subject',\n previewSubjectText: '[{site}] Scheduled job failed: Daily report',\n previewBody: 'Job \"Daily report\" failed at 02:00 after 3 retries.',\n previewError: 'database connection timed out (30s)',\n previewNoAlert: 'Failed runs send no email; they are only recorded in the run log',\n },\n externalAuth: {\n preview: 'Live preview · sign-in box',\n previewOther: 'Other sign-in options',\n hint: 'Which sign-in options appear on the login page. Connection details for each third party are entered in its Settings and stored encrypted.',\n groupLocal: 'Local account',\n groupThird: 'Third-party',\n password: 'Username and password',\n passwordHint: 'Always available',\n smsHint: 'Sign in with phone number and SMS code',\n state: {\n notInstalled: 'Not installed',\n unconfigured: 'Not configured',\n configured: 'Configured',\n },\n settings: 'Settings',\n addOidc: 'Add OIDC',\n needPackage: 'Install the {pkg} package on the server first',\n codeRegistered: 'Registered in code; not configured here',\n linkByAccount: 'Link by account',\n linkByAccountHint:\n 'People with the same account ID are bound to the local account on first sign-in; asks to confirm',\n linkByAccountConfirmTitle: 'Turn on link by account?',\n linkByAccountConfirm:\n 'The first time someone signs in with {name}, if their {name} account ID is exactly the same as a local account, the two are bound and they are signed in directly. Super admins, disabled accounts and accounts already bound to {name} are never linked. Make sure both sides are the same people first, e.g. local accounts were synced from {name}.',\n field: {\n displayName: 'Display name',\n code: 'Identifier',\n corpId: 'Corp ID',\n agentId: 'Agent ID',\n corpSecret: 'App secret',\n appKey: 'AppKey',\n appSecret: 'AppSecret',\n clientId: 'Client ID',\n clientSecret: 'Client secret',\n appId: 'AppId',\n authority: 'Authority',\n scopes: 'Scopes',\n usePkce: 'Use PKCE',\n },\n sheet: {\n title: '{name} sign-in settings',\n addOidc: 'Add OIDC',\n oidcHint: 'A standard OpenID Connect identity source',\n secretNote: 'Secrets are stored encrypted and are not displayed after saving',\n namePlaceholder: 'e.g. Company SSO',\n codePlaceholder: 'lowercase letters, digits, hyphens',\n codeFixed: 'Cannot be changed after saving',\n codeTaken: 'This identifier is already in use',\n secretPlaceholder: 'Paste the secret',\n secretSet: 'set',\n keepSecret: 'Leave blank to keep · current {now}',\n secretRetype: 'Enter the secret again',\n endpointMoved:\n 'Authority changed: to avoid sending the saved secret to a new address, enter the client secret again.',\n ephemeralKey:\n 'The data-protection master key is temporary, so secrets cannot be saved yet. Configure SmartAdmin:Security:DataProtection:Key and restart.',\n ephemeralTitle: 'The master key is temporary; saving is unavailable',\n callback: 'Callback URL',\n callbackHint: 'Enter this callback URL in the {name} console.',\n idp: 'identity provider',\n callbackMissing:\n 'SmartAdmin:ExternalAuth:CallbackBaseUrl is not set in production, so the callback URL cannot be computed.',\n copyFailed: 'Copy failed; select it manually',\n test: 'Test connection',\n testing: 'Testing…',\n saved: 'Saved',\n clear: 'Clear settings',\n clearTitle: 'Clear the settings for \"{name}\"?',\n clearConfirm:\n 'After clearing, this sign-in option is unavailable and disappears from the login page. Accounts users have already bound to {name} are not deleted.',\n cleared: 'Cleared',\n },\n check: {\n reachable: 'Connectivity',\n credentials: 'Credentials',\n agent: 'AgentId',\n appId: 'AppId',\n secret: 'AppSecret',\n discovery: 'Discovery document',\n issuer: 'Issuer match',\n endpoints: 'Authorization and token endpoints',\n clientSecret: 'Client secret',\n timeout: 'Timeout',\n error: 'Error',\n },\n checkStatus: {\n ok: 'passed',\n failed: 'failed',\n skipped: 'not verified',\n },\n },\n base: {\n siteTitle: 'Site title',\n siteSubtitle: 'Subtitle',\n copyright: 'Copyright',\n copyrightUrl: 'Copyright link',\n },\n login: {\n language: 'Login page language',\n localeZh: 'Chinese',\n localeEn: 'English',\n showFeatures: 'Show feature list',\n headline: 'Headline',\n headlinePlaceholder: 'Leave empty to use the built-in headline',\n highlight: 'Highlight',\n highlightPlaceholder: 'Word in the headline to highlight',\n highlightHint: 'Word in the headline shown in the accent color',\n features: 'Features',\n featuresPlaceholder: 'One per line, up to 5',\n featuresHint: 'One per line, up to 5',\n highlightMissing: 'Not in the headline; it will render as plain text',\n tooManyFeatures: 'At most 5 features',\n },\n security: {\n desc: 'Sign-in protection, password rules, session length and rate limits. Takes effect on save.',\n preview: 'Rules users will meet',\n groupLogin: 'Sign-in protection',\n groupSession: 'Session',\n groupRate: 'Rate limit',\n zeroNoLock: '0 = never lock',\n zeroNever: '0 = never expires',\n zeroOff: '0 = no limit',\n unit: { times: 'times', minutes: 'min', days: 'days', seconds: 's', chars: 'chars' },\n tryLabel: 'Try a password',\n tryMin: 'At least {n} chars',\n tryPass: 'Accepted',\n tryFail: 'Rejected',\n loginLock: {\n maxFailCount: 'Lock after failures',\n lockMinutes: 'Lock duration',\n },\n password: {\n title: 'Password',\n minLength: 'Min length',\n mustContain: 'Must contain',\n chipUpper: 'A-Z',\n chipLower: 'a-z',\n chipDigit: '0-9',\n // @ 在 vue-i18n 里是链接语法,要用字面量插值转义\n chipSpecial: \"#{'@'}!\",\n requireUpper: 'Require uppercase',\n requireLower: 'Require lowercase',\n requireDigit: 'Require digit',\n requireSpecial: 'Require special char',\n expireDays: 'Max age',\n historyCount: 'No reuse of last',\n forceChangeOnFirstLogin: 'Change at first sign-in',\n forceChangeOnFirstLoginHint: 'New accounts only; resets still require a change',\n },\n session: {\n accessMinutes: 'Access token lifetime',\n refreshMinutes: 'Stay signed in up to',\n },\n captcha: {\n enabled: 'Login captcha',\n type: 'Type',\n types: { char: 'Characters', path: 'Stroke', math: 'Arithmetic' },\n },\n totp: {\n enabled: 'Authenticator (TOTP)',\n requireForSuperAdmin: 'Required for super admins',\n hint: 'Toggles like login captcha — takes effect immediately. Per-user “require authenticator” only enforces at sign-in when this is on; users bind under Account security.',\n },\n sms: {\n hint: 'The second factor only applies to users with a bound phone; in development, codes are printed to the backend log — production requires a real SMS provider (ISmsSender).',\n },\n mfa: { enabled: 'SMS second factor' },\n smsLogin: { enabled: 'SMS code sign-in' },\n rateLimit: {\n enabled: 'Enabled',\n windowSeconds: 'Window',\n permitPerWindow: 'Per source, at most',\n authPermitPerWindow: 'Sign-in endpoints, at most',\n },\n highSens: {\n code: 'Permission code',\n remark: 'Remark',\n codePh: 'e.g. POST:/api/v1/biz/order/refund',\n remarkPh: 'Remark (optional)',\n codeRequired: 'Permission code is required',\n },\n },\n sensitive: {\n desc: 'Users must verify their identity again before calling these endpoints. Built-in ones cannot be removed; add your own business endpoints. Changes apply immediately.',\n preview: 'What users see when they call it',\n previewTip: 'Click a row to switch',\n previewDoing: 'You are about to call',\n method: 'Method',\n path: 'Endpoint',\n builtin: 'Built-in',\n added: 'Added, effective now',\n removed: 'Removed, effective now',\n removeConfirm: 'Remove \"{code}\"? Calling it will no longer require re-verification.',\n },\n upload: {\n desc: 'Size and type limits for every upload on the site. Takes effect on save.',\n preview: 'Live preview · upload box',\n previewDrop: 'Click or drop files here',\n previewLimit: 'Accepts {exts}, up to {mb} MB per file',\n previewDefault: 'server default types',\n groupLimit: 'Limits',\n maxSizeMb: 'Max file size',\n allowedExtensions: 'Allowed types',\n extTip: 'Empty = server default',\n quickAdd: 'Quick add',\n preset: { images: 'Images', docs: 'Documents', archives: 'Archives', clear: 'Clear' },\n fileOk: 'OK',\n fileBadExt: '{ext} not allowed',\n fileTooBig: 'Over {mb} MB',\n fileDefault: 'Per server default',\n },\n },\n // Dict management (master-detail: types on the left, items on the right)\n dict: {\n title: 'Dictionaries',\n typeTitle: 'Dictionary types',\n code: 'Type code',\n name: 'Type name',\n searchName: 'Search name',\n sort: 'Sort',\n remark: 'Remark',\n codeRequired: 'Enter a type code',\n nameRequired: 'Enter a type name',\n addTypeTitle: 'Add dict type',\n editTypeTitle: 'Edit dict type',\n typeDeleteConfirm: 'Delete dict type \"{name}\"? Its items will be removed too.',\n typeSaved: 'Saved',\n typeDeleted: 'Deleted',\n itemsOf: 'Items of \"{name}\"',\n selectTypeHint: 'Select a dict type above to manage its items',\n itemLabel: 'Label',\n itemValue: 'Value',\n itemLabelRequired: 'Enter a label',\n itemValueRequired: 'Enter a value',\n addItem: 'Add item',\n addItemTitle: 'Add dict item',\n editItemTitle: 'Edit dict item',\n itemDeleteConfirm: 'Delete dict item \"{label}\"?',\n itemSaved: 'Saved',\n itemDeleted: 'Deleted',\n codeImmutable: 'The code cannot be changed after creation',\n itemsSheetTitle: 'Dict items',\n selectItem: 'Select',\n },\n // Org management (tree table + parent-org tree select)\n org: {\n title: 'Organizations',\n searchPlaceholder: 'Search by name',\n name: 'Name',\n code: 'Code',\n category: 'Category',\n categoryPlaceholder: 'Select category',\n sort: 'Sort',\n parent: 'Parent org',\n parentPlaceholder: 'Select parent (blank = top level)',\n nameRequired: 'Enter a name',\n codePlaceholder: 'Leave blank to auto-generate',\n codeImmutableHint: 'The code cannot be changed after creation',\n addChild: 'Add child',\n addTitle: 'Add org',\n editTitle: 'Edit org',\n deleteConfirm: 'Delete org \"{name}\"?',\n copy: 'Copy',\n copyTitle: 'Copy org',\n copyConfirm: 'This will copy \"{name}\" and all descendants. Cloned codes get a -copy suffix.',\n copyNameLabel: 'New org name',\n copied: 'Copied',\n saved: 'Saved',\n deleted: 'Deleted',\n },\n // File management (list + upload/download/delete)\n file: {\n title: 'Files',\n name: 'File name',\n extension: 'Ext',\n size: 'Size',\n contentType: 'Type',\n uploadTime: 'Uploaded',\n upload: 'Upload',\n uploadChunked: 'Chunked upload',\n uploaded: 'Uploaded successfully',\n download: 'Download',\n deleteConfirm: 'Delete file \"{name}\"?',\n deleted: 'Deleted',\n },\n // Notifications (NoticeController admin side: publish / list / delete)\n notice: {\n title: 'Notifications',\n mine: 'My notifications',\n status: 'Status',\n read: 'Read',\n unread: 'Unread',\n allRead: 'All marked as read',\n noticeTitle: 'Title',\n content: 'Content',\n type: 'Type',\n typeNotice: 'Notice',\n typeAnnouncement: 'Announcement',\n typeMessage: 'Message',\n receiver: 'Recipients',\n receiverAll: 'Everyone',\n receiverRole: 'Roles',\n receiverUser: 'Users',\n receiverPlaceholder: 'Select recipients',\n receiverRequired: 'Select at least one recipient',\n publishTime: 'Published at',\n publish: 'Publish',\n publishTitle: 'Publish notification',\n titleRequired: 'Title is required',\n deleteConfirm: 'Delete notification \"{title}\"?',\n published: 'Published',\n deleted: 'Deleted',\n view: 'View',\n detailTitle: 'Notification detail',\n // Action buttons (optional at publish time, rendered under the body)\n actions: 'Actions',\n actionsHint:\n 'Up to 5; a url starting with /api/ is called as an API, any other site path opens as a page; a label containing \".\" is translated as an i18n key',\n actionCount: '{count} action(s)',\n actionLabel: 'Label',\n actionMethod: 'Method',\n actionUrl: 'Site path',\n actionStyle: 'Style',\n actionStyleDefault: 'Default',\n actionStylePrimary: 'Primary',\n actionStyleError: 'Danger',\n actionNeedConfirm: 'Confirm first',\n actionNeedComment: 'Ask for a comment',\n actionAdd: 'Add action',\n actionConfirm: 'Run \"{label}\"?',\n actionCommentPlaceholder: 'Your comment (optional)',\n actionDone: 'Done',\n actionInvalidUrl: 'Invalid action url',\n },\n // Realtime (SignalR; instant push when SmartAdmin:Realtime:Enabled, else polling / lazy 401)\n realtime: {\n forcedLogout: 'You have been signed out by an administrator',\n },\n // Online sessions (read-only + force logout)\n session: {\n title: 'Online sessions',\n account: 'Account',\n ip: 'IP',\n device: 'Device',\n loginTime: 'Login time',\n expiresAt: 'Expires at',\n kick: 'Force logout',\n self: 'Current session',\n kickConfirm: 'Force-logout the session of \"{account}\"? It will be invalidated immediately.',\n kicked: 'Forced logout',\n mineTitle: 'My sessions',\n current: 'This device',\n kickMineConfirm: 'Sign out the session on this device? It will be invalidated immediately.',\n },\n // External login / SSO: callback result page + personal-center account bindings\n oauth: {\n processing: 'Signing you in…',\n backToLogin: 'Returning to the sign-in page',\n failed: 'Third-party sign-in failed, please try again',\n bindingsTitle: 'Account bindings',\n bindingsHint:\n 'Bind a third-party account to sign in with one click. Binding redirects you to that provider to authorize once.',\n bindingsTip:\n 'Binding opens the provider for authorization. After unbinding you can no longer sign in with that account.',\n boundCountLabel: 'bound',\n bindTip: 'Use the button below to authorize and bind',\n disabledTip: 'This method is turned off; existing bindings can still be removed',\n cannotBind: 'Unavailable',\n noProviders: 'No third-party sign-in methods are enabled',\n thirdParty: 'third-party account',\n pendingLinkTitle: 'Link {name}',\n pendingLinkHint:\n 'This {name} is not linked yet. Sign in with your own system account; you will be asked to confirm binding after login. Do not open binding links from unknown sources.',\n pendingLinkSuccess: '{name} linked. You can sign in with it next time.',\n pendingLinkConfirmTitle: 'Bind this third-party account?',\n pendingLinkConfirmContent:\n 'Bind {name}{identity} to the current account “{account}”. If this is not the account you just authorized, choose “Sign in only”.',\n pendingLinkConfirmOk: 'Bind',\n pendingLinkConfirmSkip: 'Sign in only',\n pendingLinkIdentity: ' ({display})',\n bind: 'Bind',\n unbind: 'Unbind',\n bound: 'Bound',\n notBound: 'Not bound',\n boundAt: 'Bound at {time}',\n unbound: 'Unbound',\n unbindConfirm: 'Unbind \"{name}\"? You will no longer be able to sign in with it.',\n disabled: 'Disabled',\n // Built-in brand display names (used when the backend sends no displayName)\n brand: {\n github: 'GitHub',\n wechat: 'WeChat',\n wecom: 'WeCom',\n dingtalk: 'DingTalk',\n gitee: 'Gitee',\n qq: 'QQ',\n },\n },\n // Position management (plain CRUD; positions are not linked to orgs)\n position: {\n title: 'Positions',\n code: 'Code',\n name: 'Name',\n sort: 'Sort',\n codePlaceholder: 'Auto-generated if empty',\n codeImmutableHint: 'The code cannot be changed after creation',\n nameRequired: 'Enter a name',\n addTitle: 'Add position',\n editTitle: 'Edit position',\n deleteConfirm: 'Delete position \"{name}\"?',\n saved: 'Saved',\n deleted: 'Deleted',\n },\n role: {\n title: 'Roles',\n code: 'Code',\n name: 'Name',\n sort: 'Sort',\n remark: 'Remark',\n codeRequired: 'Enter a code',\n nameRequired: 'Enter a name',\n addTitle: 'Add role',\n editTitle: 'Edit role',\n deleteConfirm: 'Delete role \"{name}\"? Its grants, data scope and user links will be removed.',\n deleteConfirmNoUsers: 'Delete role \"{name}\"? No user currently holds it.',\n deleteConfirmWithUsers:\n 'Role \"{name}\" is held by {count} user(s). Deleting it strips those users of every permission it grants, and the links cannot be restored. Delete anyway?',\n batchDeleteWithUsers:\n 'Delete the {count} selected role(s)? {users} user(s) will immediately lose the permissions they grant, and the links cannot be restored.',\n isDelegatable: 'Delegatable',\n isDelegatableHint:\n 'When enabled, non-superadmin users can assign this role to users within their data scope',\n grantUsers: 'Grant users',\n grantUsersSaved: 'User grants saved',\n saved: 'Saved',\n deleted: 'Deleted',\n grantMenus: 'Grant menus',\n grantSaved: 'Grants saved',\n apiOnlyRow: 'API only (no page)',\n grantSearch: 'Search directories, pages or buttons',\n grantSearchClear: 'Clear search',\n grantSelectAll: 'Select all in \"{name}\"',\n noButtons: 'No button permissions',\n grantNoMatch: 'No matching permissions',\n grantNoMatchElsewhere:\n '{count} directory(ies) match in other apps. Switch the app above to view them.',\n grantNoMenus: 'No menus in this app',\n grantSummary: 'Granted {on} / {total}',\n grantSummarySplit: '{pages} pages · {buttons} buttons',\n grantUnsaved: 'Unsaved changes',\n systemMenusBuiltinOnly:\n 'Apart from User Management and Role Management, menus that ship with the system can only be granted to built-in roles and are hidden here',\n dataScope: 'Data scope',\n scopeType: 'Scope type',\n customOrgs: 'Custom orgs',\n customOrgsHint: 'Select orgs visible to this role',\n scopeSaved: 'Data scope saved',\n scope: {\n all: 'All data',\n org: 'Own org',\n orgAndChildren: 'Own org & below',\n self: 'Self only',\n custom: 'Custom orgs',\n },\n },\n log: {\n loginTitle: 'Login logs',\n account: 'Account',\n result: 'Result',\n success: 'Success',\n failed: 'Failed',\n resultCode: 'Code',\n name: 'Name',\n ip: 'IP',\n userAgent: 'Client',\n device: 'Device',\n clear: 'Clear logs',\n clearLoginConfirm: 'Clear all login logs? This is a hard delete and cannot be undone.',\n cleared: 'Cleared',\n // Operation logs\n opTitle: 'Operation logs',\n opName: 'Operation',\n method: 'Method',\n path: 'Path',\n elapsed: 'Elapsed',\n operator: 'Operator',\n operatorPlaceholder: 'Select operator',\n param: 'Params',\n exception: 'Exception',\n detail: 'Detail',\n clearOpConfirm: 'Clear all operation logs? This is a hard delete and cannot be undone.',\n // Exception logs\n exceptionTitle: 'Exception logs',\n exceptionType: 'Exception type',\n exceptionMessage: 'Message',\n stackTrace: 'Stack trace',\n traceId: 'Trace ID',\n clearExceptionConfirm: 'Clear all exception logs? This is a hard delete and cannot be undone.',\n },\n monitor: {\n title: 'Server monitor',\n refresh: 'Refresh',\n cpu: 'CPU usage',\n memory: 'Memory usage',\n runtime: 'Runtime',\n disk: 'Disk',\n processorCount: 'Processors',\n threadCount: 'Threads',\n gcHeap: 'GC heap',\n totalMemory: 'Available',\n machineName: 'Machine',\n framework: 'Framework',\n os: 'OS',\n arch: 'Arch',\n uptime: 'Uptime',\n free: 'Free',\n days: 'd',\n hours: 'h',\n minutes: 'm',\n },\n // Scheduled jobs (job list / run logs / monitor / CronEditor; error texts live in error.job.*, do not duplicate)\n job: {\n title: 'Scheduled Jobs',\n name: 'Job name',\n code: 'Job code',\n codePlaceholder: 'Unique code, immutable after creation',\n remark: 'Remark',\n nameRequired: 'Please enter the job name',\n codeRequired: 'Please enter the job code',\n addTitle: 'New job',\n editTitle: 'Edit job',\n deleteConfirm: 'Delete job \"{name}\"?',\n saved: 'Saved; takes effect within 30 seconds across the cluster',\n deleted: 'Deleted',\n runOnce: 'Run',\n runConfirm: 'Run job \"{name}\" once now? This run does not affect its schedule.',\n runStarted: 'Run triggered',\n viewLogs: 'Logs',\n protectedTip: 'Built-in job is protected from deletion',\n pauseConfirm: 'Pause job \"{name}\"? It will no longer be scheduled.',\n panicTooltip:\n 'Tripped after {n} consecutive failures; re-enabling resets the counter and resumes scheduling',\n nextRunTime: 'Next run',\n lastRunTime: 'Last run',\n runCount: 'Runs / Errors',\n status: { ready: 'Ready', paused: 'Paused', completed: 'Completed', panic: 'Panic' },\n form: {\n sectionBasic: 'Basic',\n sectionTrigger: 'Trigger',\n sectionHandler: 'Payload',\n sectionAdvanced: 'Advanced',\n sectionAdvancedHint:\n 'Active window, misfire, concurrency, retry and alerting — saving works without opening this',\n startTime: 'Active from',\n endTime: 'Active until',\n windowPlaceholder: 'Empty = unlimited',\n misfireStrategy: 'Misfire strategy',\n misfireSkip: 'Skip',\n misfireFireOnceNow: 'Fire once now',\n concurrencyMode: 'Concurrency',\n concurrencySerial: 'Serial (skip overlap)',\n concurrencyParallel: 'Parallel',\n timeoutSeconds: 'Timeout (s)',\n timeoutHint: '0 = unlimited',\n retryCount: 'Retry count',\n retryIntervalSeconds: 'Retry interval (s)',\n failAlertThreshold: 'Failure alert threshold',\n failAlertHint: '0 = no alert, no panic',\n alertByNotice: 'Alert via notice',\n alertEmails: 'Alert emails',\n alertEmailsPlaceholder: 'Comma separated; empty falls back to global config',\n },\n trigger: {\n kind: 'Trigger',\n cron: 'Cron',\n interval: 'Fixed interval',\n oneShot: 'One-shot',\n cronExpression: 'Cron expression',\n cronRequired: 'Please enter a cron expression',\n intervalSeconds: 'Interval seconds',\n intervalRequired: 'Please enter interval seconds (≥5)',\n oneShotTime: 'Run at',\n oneShotRequired: 'Please pick the run time',\n seconds: 's',\n everySeconds: 'Every {n}s',\n },\n handler: {\n kind: 'Payload type',\n compiled: 'Compiled',\n http: 'HTTP',\n sql: 'SQL',\n sqlDisabledHint: 'SQL payloads are off — the backend must set SmartAdmin:Jobs:Sql:Enabled',\n name: 'Handler',\n namePlaceholder: 'Pick a registered handler',\n nameRequired: 'Please pick a handler',\n props: 'Properties',\n propKey: 'Key',\n propValue: 'Value',\n addProp: 'Add item',\n httpUrl: 'Request URL',\n httpUrlRequired: 'Please enter the request URL',\n httpMethod: 'Method',\n httpHeaders: 'Headers',\n headersMaskHint:\n 'For security, stored header values show as ********; leave unchanged to keep them as-is',\n httpBody: 'Body',\n successStatuses: 'Success statuses',\n successStatusesPlaceholder: 'e.g. 200,201; empty = any 2xx',\n sqlText: 'SQL statement',\n sqlRequired: 'Please enter the SQL statement',\n },\n log: {\n title: 'Job Runs',\n job: 'Job',\n jobPlaceholder: 'Select job',\n fireMode: 'Fired by',\n fireModeSchedule: 'Schedule',\n fireModeManual: 'Manual',\n fireModeBackfill: 'Backfill',\n fireModeMisfireSkip: 'Misfire skip',\n scheduledTime: 'Scheduled at',\n startTime: 'Started at',\n elapsed: 'Elapsed',\n runStatus: 'Status',\n running: 'Running',\n success: 'Success',\n failed: 'Failed',\n timeout: 'Timeout',\n cancelled: 'Cancelled',\n skipped: 'Skipped',\n retryIndex: 'Retry',\n node: 'Node',\n kill: 'Kill',\n killConfirm:\n 'Kill this run of \"{name}\"? Once the flag is written, the executing node stops within seconds.',\n killed: 'Kill requested',\n clear: 'Clear logs',\n clearTitle: 'Clear run logs',\n clearRange: 'Range',\n clearAll: 'All records',\n beforeDays: 'Older than {n} days',\n clearHint: 'Running records are always kept; this is a hard delete and cannot be undone.',\n cleared: 'Removed {n} records',\n message: 'Handler output',\n error: 'Error',\n attempts: 'Attempts of the same fire',\n firstTry: 'First try',\n retryN: 'Retry #{n}',\n },\n monitor: {\n title: 'Job Monitor',\n todaySuccess: 'Success today',\n todayFailed: 'Failed today',\n running: 'Running',\n totalJobs: 'Total jobs',\n trendTitle: '14-day success/failure trend',\n trendSuccess: 'Success',\n trendFailed: 'Failed',\n upcomingTitle: 'Upcoming runs',\n upcomingJob: 'Job',\n upcomingTime: 'Time',\n nodesTitle: 'Cluster nodes',\n nodeName: 'Node',\n role: 'Role',\n leader: 'leader',\n standby: 'standby',\n lastHeartbeat: 'Last heartbeat',\n workerId: 'WorkerId',\n pid: 'PID',\n justNow: 'just now',\n secondsAgo: '{n}s ago',\n minutesAgo: '{n}m ago',\n hoursAgo: '{n}h ago',\n },\n cron: {\n tabSecond: 'Second',\n tabMinute: 'Minute',\n tabHour: 'Hour',\n tabDay: 'Day',\n tabMonth: 'Month',\n tabWeek: 'Week',\n tabExpression: 'Expression',\n every: 'Every',\n any: 'Not specified (?)',\n range: 'Range',\n to: 'to',\n step: 'Step',\n stepFrom: 'from',\n stepEvery: ', every',\n list: 'Values',\n lastDay: 'Last day (L)',\n lastDayHint: '0 = last day, n = n days before month end (L-n)',\n nearestWeekday: 'Nearest weekday (nW)',\n nearestWeekdayHint: 'Nearest weekday to that day, within the month',\n lastWeekday: 'Last weekday (LW)',\n lastOfWeek: 'Last weekday-of-month (nL)',\n nth: 'Nth weekday (n#m)',\n nthPrefix: 'the',\n nthInfix: 'th',\n sun: 'Sun',\n mon: 'Mon',\n tue: 'Tue',\n wed: 'Wed',\n thu: 'Thu',\n fri: 'Fri',\n sat: 'Sat',\n expressionPlaceholder: 'e.g. 0 0 2 * * ? (sec min hour day month week)',\n expressionHint:\n '5 fields (seconds auto-filled) or 6; day and week cannot both be restricted — one must be * or ?',\n normalized: 'Normalized',\n nextRuns: 'Next {n} runs',\n noUpcoming: 'No future occurrences',\n everySecondWarning:\n 'This expression effectively fires every second — make sure that is intended',\n },\n },\n // AI model management (providers + models; error text lives in error.ai.*, don't duplicate)\n aiModel: {\n title: 'AI Models',\n searchPlaceholder: 'Search provider code / name',\n addProvider: 'Add provider',\n editProvider: 'Edit provider',\n deleteProvider: 'Delete provider',\n deleteConfirm:\n 'Delete provider \"{name}\"? Its models are deleted too; existing usage logs are unaffected.',\n deleted: 'Deleted',\n saved: 'Saved',\n enabled: 'Enabled',\n disabled: 'Disabled',\n pendingConfigTip: 'No API key configured yet — fill it in before saving',\n pendingConfig: 'Pending setup',\n provider: {\n code: 'Provider code',\n codePlaceholder: 'Unique code, immutable after creation',\n codeRequired: 'Please enter a provider code',\n name: 'Provider name',\n nameRequired: 'Please enter a provider name',\n preset: 'Provider preset',\n presetPlaceholder: 'Pick a preset provider to fill in protocol and base URL',\n presetCustom: 'Custom',\n protocol: 'Protocol',\n baseUrl: 'Base URL',\n baseUrlRequired: 'Please enter a base URL',\n authScheme: 'Auth scheme',\n apiKey: 'API key',\n apiKeyPlaceholder: 'Leave empty to keep the existing key',\n apiKeyHint: 'A saved key only echoes back masked, never in plain text',\n hasApiKeyYes: 'Configured',\n hasApiKeyNo: 'Not configured',\n disableConfirm: 'Disable provider \"{name}\"?',\n sort: 'Sort',\n remark: 'Remark',\n },\n model: {\n title: 'Models',\n add: 'Add model',\n remove: 'Remove',\n name: 'Model name',\n nameRequired: 'Please enter a model name',\n displayName: 'Display name',\n displayNameRequired: 'Please enter a display name',\n contextWindow: 'Context window',\n contextWindowPlaceholder: 'e.g. 128000, leave empty for unlimited',\n inputPrice: 'Input price',\n outputPrice: 'Output price',\n pricePlaceholder: 'Per million tokens, leave empty for free',\n enabled: 'Enabled',\n isDefault: 'Default model',\n setDefault: 'Set as default',\n defaultTag: 'Default',\n atLeastOne: 'Keep at least one model',\n duplicateName: 'Duplicate model name',\n noDefault: 'No default model set',\n defaultUniqueHint:\n 'The default model is unique across all providers: saving a new default here clears the default of any other provider.',\n },\n test: {\n action: 'Test connection',\n testing: 'Testing…',\n ok: 'Connected',\n failed: 'Connection failed',\n latency: '{ms} ms',\n model: 'Model',\n usage: 'Usage',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n error: 'Error',\n },\n },\n // AI usage stats (filters / summary tiles / grouping / trend / detail table)\n aiUsage: {\n title: 'AI Usage',\n filter: {\n dateRange: 'Date range',\n today: 'Today',\n last7Days: 'Last 7 days',\n last30Days: 'Last 30 days',\n provider: 'Provider',\n providerAll: 'All providers',\n model: 'Model',\n modelAll: 'All models',\n scene: 'Scene',\n sceneAll: 'All scenes',\n scenePlaceholder: 'Filter by call scene',\n },\n metric: {\n totalTokens: 'Total tokens',\n totalCalls: 'Total calls',\n failureCount: 'Failures',\n avgLatency: 'Avg. latency',\n },\n groupBy: {\n label: 'Group by',\n provider: 'By provider',\n model: 'By model',\n scene: 'By scene',\n user: 'By user',\n },\n trend: {\n title: 'Usage trend',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n callCount: 'Calls',\n },\n table: {\n createTime: 'Time',\n provider: 'Provider',\n model: 'Model',\n scene: 'Scene',\n user: 'User',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n latency: 'Latency',\n status: 'Status',\n success: 'Success',\n failed: 'Failed',\n requestId: 'Request Id',\n streamed: 'Streamed',\n usageSource: 'Usage source',\n usageSourceReported: 'Reported upstream',\n usageSourceMissing: 'Estimated (missing)',\n },\n share: 'Share',\n },\n cache: {\n authTitle: 'Permission cache',\n authDesc:\n \"Clear every user's permission-code and data-scope cache. Forces authorization to be recomputed on the next request after direct DB edits or troubleshooting.\",\n authConfirm:\n \"Clear all users' permission / data-scope cache? Authorization will be recomputed on the next request.\",\n dictTitle: 'Dictionary cache',\n dictDesc:\n 'Clear cached items for every dictionary type. Forces dropdown data sources to rebuild from the latest dictionaries after direct DB edits.',\n dictConfirm: 'Clear all dictionary item cache?',\n configTitle: 'Config cache',\n configDesc:\n 'Clear the read-through cache of every system config item. Forces config values to be re-read from the latest tables after direct DB edits.',\n configConfirm: 'Clear all system config cache?',\n portalTitle: 'Portal menu cache',\n portalDesc:\n \"Bump the portal generation, invalidating every user's module / menu-tree cache so it rebuilds on next entry.\",\n portalConfirm:\n \"Rebuild the portal menu cache? Every user's menu will be recomputed on their next request.\",\n execute: 'Execute',\n flushed: 'Cleared {n} cache entries',\n portalDone: 'Portal menu cache rebuilt',\n note: 'Invalidation only — no key browsing, no value reads: the cache holds plaintext OTP / one-time tokens and keys embed phone numbers / IPs. Normal authorization changes already invalidate automatically; this page is for manual refresh after out-of-band changes such as direct DB edits.',\n },\n profile: {\n title: 'Profile',\n account: 'Account',\n name: 'Name',\n org: 'Org',\n position: 'Position',\n nickname: 'Nickname',\n gender: 'Gender',\n phone: 'Phone',\n email: 'Email',\n avatar: 'Avatar',\n avatarUploading: 'Uploading…',\n phoneInvalid: 'Invalid phone number',\n emailInvalid: 'Invalid email format',\n saved: 'Profile updated',\n },\n personalSecurity: {\n title: 'Account security',\n // Everyone: what the user can do — no admin console paths.\n hint: 'Bind or manage your authenticator (TOTP) for sign-in two-factor verification.',\n // Admins only (super-admin / system-config access): points at Security policy toggle.\n adminHint:\n 'If setup fails or sign-in never asks for a code, open System config → Security and ensure “Enable authenticator” is on.',\n bindDesc:\n 'Self-service setup uses your account and current password. You can also use a recovery code to remove and rebind.',\n setupAuthenticator: 'Set up authenticator',\n useRecovery: 'Use recovery code',\n note: 'Start voluntary setup from this page. If MFA is required and not bound yet, a prompt appears after password sign-in succeeds.',\n },\n changePassword: {\n title: 'Change password',\n oldPassword: 'Current password',\n newPassword: 'New password',\n confirmPassword: 'Confirm new password',\n oldRequired: 'Please enter your current password',\n newRequired: 'Please enter a new password',\n confirmRequired: 'Please confirm your new password',\n mismatch: 'Passwords do not match',\n changed: 'Password changed, please sign in again',\n forcedHint:\n 'First login or password reset — please change your password before using the system.',\n strength: { label: 'Password strength', weak: 'Weak', fair: 'Fair', strong: 'Strong' },\n rules: {\n minLength: 'At least {n} characters',\n upper: 'Contains uppercase',\n lower: 'Contains lowercase',\n digit: 'Contains a digit',\n special: 'Contains a special character',\n specialOptional: 'Contains a special character (optional, stronger)',\n },\n },\n error: {\n _fallback: 'Operation failed, please try again',\n // Client-side failures (not backend error codes): the timeout guard fired, or the call was cancelled\n network: {\n timeout: 'Request timed out, check your connection and try again',\n aborted: 'Request cancelled',\n },\n auth: {\n passwordWrong: 'Incorrect account or password',\n captchaExpired: 'Captcha expired',\n captchaWrong: 'Incorrect captcha',\n accountLocked: 'Account locked, try again later',\n accountDisabled: 'Account disabled',\n tokenInvalid: 'Invalid session, please sign in again',\n refreshTokenInvalid: 'Session expired, please sign in again',\n tooManyRequests: 'Too many requests, slow down',\n smsCodeRequired: 'Please enter the SMS verification code',\n smsCodeWrong: 'Incorrect SMS verification code',\n smsCodeExpired: 'SMS verification code is incorrect or expired, please request a new one',\n smsLoginDisabled: 'SMS code sign-in is not enabled',\n oauthProviderDisabled: 'This third-party sign-in method is not enabled or does not exist',\n oauthStateInvalid: 'Sign-in session expired, please start the third-party sign-in again',\n oauthExchangeFailed: 'Third-party sign-in failed to resolve identity, please try again',\n oauthAccountNotBound:\n 'This third-party account is not linked yet; sign in with your system account to complete linking',\n oauthAlreadyBound:\n 'This third-party account is already bound, or the current account is already bound to the same provider',\n totpRequired: 'Please enter the authenticator code to complete MFA',\n totpWrong: 'Incorrect authenticator code',\n totpNotBound: 'Authenticator is not bound yet; complete binding first',\n bindInviteInvalid: 'Authenticator setup is invalid or expired. Start again.',\n mfaBindInvalid: 'Authenticator setup is invalid or expired. Start again.',\n recoveryCodeInvalid: 'Recovery code is invalid or already used',\n csrfInvalid: 'Request validation failed; refresh the page and try again',\n reauthRequired: 'This action requires re-authentication',\n mfaBindPasswordRequired: 'Verify your current password before binding an authenticator',\n apiKeyInvalid: 'API key missing or invalid',\n externalAuthTypeNotFound: 'Sign-in type does not exist or its package is not installed',\n externalAuthCodeExists: 'This code is already in use',\n externalAuthCodeInvalid: 'Code is invalid or conflicts with a built-in sign-in method',\n externalAuthFieldMissing: 'Required field missing: {field}',\n externalAuthDataProtectionKeyMissing:\n 'No data-protection master key is configured, so third-party secrets cannot be stored safely. Set SmartAdmin:Security:DataProtection:Key first',\n externalAuthProviderNotFound: 'This sign-in method is not configured',\n externalAuthEndpointBlocked:\n 'This address is rejected by the outbound-request fence; check the scheme, host and network range',\n },\n perm: {\n denied: 'Access denied',\n demoReadOnly: 'Demo environment is read-only',\n superAdminRequired: 'This action requires super admin privileges',\n menuNotGrantable: \"This menu's module does not allow delegated grants\",\n targetIsDelegatedAdmin:\n 'The user is an administrator; only a super admin can grant them menus individually',\n delegatedGrantExpiryInvalid:\n 'An allow grant needs an expiry date at most {maxDays} days away',\n },\n user: {\n notFound: 'User not found',\n accountExists: 'Account already exists',\n superAdminProtected: 'Super admin is protected',\n passwordTooWeak: 'New password does not meet the complexity policy',\n passwordReused: 'New password must differ from your current and recently used passwords',\n outOfDataScope: 'Target user is outside your data scope',\n avatarUrlInvalid: 'Avatar URL is not allowed',\n cannotOperateSelf: 'You cannot perform this action on yourself',\n menuGrantInvalid:\n 'Invalid grant changes: each menu at most once, and the expiry must be in the future',\n },\n role: {\n notFound: 'Role not found',\n codeExists: 'Role code already exists',\n notDelegatable: 'Role is not delegatable',\n systemMenuNotAssignable:\n 'Apart from User Management and Role Management, menus that ship with the system can only be granted to built-in roles',\n },\n org: {\n notFound: 'Org not found',\n hasChildren: 'Org has children and cannot be deleted',\n invalidParent: 'Invalid parent org',\n codeExists: 'Org code already exists',\n hasUsers: 'Org still has active users and cannot be deleted',\n outOfScope: 'Target org is outside your data scope',\n },\n position: {\n notFound: 'Position not found',\n codeExists: 'Position code already exists',\n hasUsers: 'Position still has active users and cannot be deleted',\n },\n module: {\n notFound: 'App not found',\n codeExists: 'App code already exists',\n protected: 'Built-in app is protected',\n accessDenied: 'No access to this app',\n hasMenus: 'App still has menus attached; move or delete them first',\n },\n menu: {\n notFound: 'Menu not found',\n hasChildren: 'Menu has children and cannot be deleted',\n invalidParent: 'Invalid parent menu (cannot be itself or its descendant)',\n },\n session: { notFound: 'Session not found or already signed out' },\n dict: {\n typeNotFound: 'Dict type not found',\n typeCodeExists: 'Dict type code exists',\n itemNotFound: 'Dict item not found',\n seedProtected: 'Seed data is protected and cannot be deleted',\n itemValueExists: 'Dict item value already exists under this type',\n },\n config: { notFound: 'Config not found', keyExists: 'Config key exists' },\n notice: {\n notFound: 'Notification not found',\n receiverRequired: 'At least one receiver must be specified',\n receiverNotFound: 'Receiver does not exist or is disabled',\n actionInvalid:\n 'Invalid action list: label required, method must be GET/POST, url must be a site path starting with a single /, at most 5 actions',\n },\n file: {\n empty: 'Empty file',\n tooLarge: 'File too large',\n extNotAllowed: 'File type not allowed',\n notFound: 'File not found',\n chunkMissing: 'Missing chunk, please retry upload',\n chunkHashMismatch: 'File integrity check failed, please re-upload',\n },\n excel: {\n providerMissing:\n 'Excel support is not installed; install SmartAdmin.Excel and call AddSmartAdminExcel()',\n },\n import: {\n fileEmpty: 'Import file is empty',\n rowLimitExceeded: 'Import row count exceeds the limit',\n columnMissing: 'A required column is not mapped',\n cellRequired: 'This cell is required',\n cellDictInvalid: 'Invalid dictionary value',\n cellRefNotFound: 'Referenced data not found',\n cellFormatInvalid: 'Invalid cell format',\n duplicateInFile: 'Business key is duplicated within the file',\n duplicateInDb: 'Business key already exists in the database',\n orgOutOfScope: 'Organization is outside the current data scope',\n },\n export: {\n tooManyRows: 'Export exceeds the row limit; narrow your filters first',\n columnInvalid: 'Requested export column is not allowed',\n },\n job: {\n notFound: 'Job not found',\n codeExists: 'Job code already exists',\n cronInvalid: 'Invalid cron expression',\n triggerInvalid: 'Invalid trigger configuration',\n handlerNotFound: 'Job handler not registered',\n alreadyRunning: 'Previous run is still in progress',\n runNotAlive: 'This run is not in progress',\n sqlDisabled: 'SQL jobs are disabled',\n httpUrlBlocked: 'Target URL rejected by security policy',\n statusConflict: 'Operation not allowed in current job status',\n propsInvalid: 'Job properties missing or invalid',\n logNotFound: 'Job run record not found',\n runLimitReached: 'Concurrent run limit reached, try again later',\n protected: 'Built-in job is protected from deletion',\n },\n ai: {\n providerNotFound: 'Provider not found',\n providerCodeExists: 'Provider code already exists',\n providerDisabled: 'Provider is disabled',\n apiKeyMissing: 'API key is not configured',\n baseUrlBlocked: 'Target URL rejected by security policy',\n presetNotFound: 'Preset provider not found',\n presetImmutable: \"A preset provider's protocol/preset id cannot be changed\",\n modelNotFound: 'Model not found',\n noDefaultModel: 'No default model configured',\n modelDisabled: 'Model is disabled',\n modelNameExists: 'Model name already exists',\n upstreamError: 'Upstream service call failed',\n upstreamTimeout: 'Upstream service call timed out',\n upstreamRateLimited: 'Upstream service rate-limited, please retry later',\n upstreamAuthFailed: 'Upstream authentication failed, check the API key',\n upstreamBadResponse: 'Upstream service returned an unexpected response',\n dataProtectionKeyMissing: 'Data protection key unavailable, cannot decrypt the API key',\n sceneRequired: 'A call scene is required',\n multimodalSystemUnsupported:\n 'System messages do not support multi-part content such as images',\n structuredOutputUnsupported:\n 'This provider does not support structured output (json_schema) constraints',\n },\n recycle: {\n notFound: 'Deleted record not found',\n uniqueConflict: 'Restore failed: code/account already taken by another record',\n invalidType: 'Unsupported recycle bin type',\n },\n request: {\n pageSizeExceeded:\n 'Page size exceeds the limit of {max}; use a smaller page or the export endpoint',\n },\n system: { internal: 'Internal server error' },\n },\n\n // Recycle bin\n recycle: {\n title: 'Recycle Bin',\n name: 'Name',\n code: 'Code',\n deletedAt: 'Deleted at',\n restore: 'Restore',\n purge: 'Purge',\n restoreConfirm: 'Restore \"{name}\"?',\n purgeConfirm: 'Permanently delete \"{name}\"? This cannot be undone.',\n restored: 'Restored',\n purged: 'Permanently deleted',\n empty: 'Recycle bin is empty',\n tabs: {\n user: 'Users',\n role: 'Roles',\n org: 'Orgs',\n position: 'Positions',\n module: 'Modules',\n config: 'Configs',\n dict: 'Dicts',\n menu: 'Menus',\n job: 'Jobs',\n },\n },\n // API docs entry page\n apiDocs: {\n title: 'API Docs',\n openedHint: 'API docs opened in a new tab.',\n fallbackLink: \"Didn't open automatically? Click here\",\n copyToken: 'Copy my API token',\n copyTokenHint:\n 'In the new tab, click Authentication → Bearer in the top right and paste the token you just copied',\n tokenCopied: 'Copied',\n tokenWarn:\n 'The token is the credential of your current session and acts as your identity. Do not share it with anyone.',\n },\n // User import / export: column titles + file names (mirror UserImportProfile / UserExportProfile columns)\n userExport: {\n account: 'Account',\n name: 'Name',\n nickname: 'Nickname',\n phone: 'Phone',\n email: 'Email',\n gender: 'Gender',\n orgName: 'Organization',\n positionName: 'Position',\n directorName: 'Director',\n enabled: 'Enabled',\n superAdmin: 'Super Admin',\n createTime: 'Created At',\n fileName: 'users.xlsx',\n importTemplateName: 'user-import-template.xlsx',\n errorReportName: 'user-import-errors.xlsx',\n },\n logOp: {\n fileName: 'op-logs.xlsx',\n },\n}\n"],"names":["enUS"],"mappings":"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"}