@liujitcn/kratos-admin-core 0.0.19 → 0.0.21
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.
- package/README.md +2 -2
- package/dist/package/declarations/src/api/base/language.d.ts +8 -0
- package/dist/package/declarations/src/components/Dialog/ProDialog.vue.d.ts +1 -0
- package/dist/package/declarations/src/components/LocaleSwitch/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/index.d.ts +2 -0
- package/dist/package/declarations/src/locales/index.d.ts +63 -0
- package/dist/package/declarations/src/modules/index.d.ts +7 -2
- package/dist/package/declarations/src/request.d.ts +1 -0
- package/dist/package/declarations/src/routers/modules/staticRouter.d.ts +1 -0
- package/dist/package/declarations/src/rpc/base/v1/config.d.ts +2 -0
- package/dist/package/declarations/src/rpc/base/v1/language.d.ts +26 -0
- package/dist/package/declarations/src/rpc/system/admin/v1/base_dict.d.ts +79 -0
- package/dist/package/declarations/src/rpc/system/admin/v1/base_translation.d.ts +102 -0
- package/dist/package/declarations/src/stores/interface/index.d.ts +2 -0
- package/dist/package/declarations/src/stores/runtime.d.ts +1 -0
- package/dist/package/declarations/src/utils/dict.d.ts +2 -2
- package/dist/package/declarations/src/utils/index.d.ts +1 -1
- package/dist/package/declarations/src/utils/oauthProvider.d.ts +2 -0
- package/dist/package/declarations/src/utils/passwordStrength.d.ts +0 -7
- package/dist/package/src/App.vue +10 -1
- package/dist/package/src/api/base/language.ts +20 -0
- package/dist/package/src/api/base/oauth.ts +0 -1
- package/dist/package/src/api/system/auth.ts +0 -1
- package/dist/package/src/bootstrap.ts +57 -2
- package/dist/package/src/components/CronExpression/index.vue +80 -82
- package/dist/package/src/components/Dialog/FormDialog.vue +9 -4
- package/dist/package/src/components/Dialog/ProDialog.vue +10 -4
- package/dist/package/src/components/Dict/index.vue +5 -2
- package/dist/package/src/components/ECharts/config/index.ts +6 -1
- package/dist/package/src/components/ErrorMessage/index.vue +3 -1
- package/dist/package/src/components/ImportExcel/index.vue +29 -18
- package/dist/package/src/components/LocaleSwitch/index.vue +28 -0
- package/dist/package/src/components/PasswordStrength/index.vue +8 -5
- package/dist/package/src/components/ProForm/components/DynamicList.vue +8 -3
- package/dist/package/src/components/ProForm/components/KvList.vue +14 -6
- package/dist/package/src/components/ProTable/components/ColSetting.vue +7 -5
- package/dist/package/src/components/ProTable/components/TableColumn.vue +2 -1
- package/dist/package/src/components/ProTable/index.vue +36 -11
- package/dist/package/src/components/SearchForm/components/SearchFormItem.vue +9 -4
- package/dist/package/src/components/SearchForm/index.vue +6 -3
- package/dist/package/src/components/SelectFilter/index.vue +4 -1
- package/dist/package/src/components/SelectIcon/index.vue +8 -4
- package/dist/package/src/components/TreeFilter/index.vue +14 -6
- package/dist/package/src/components/Upload/File.vue +18 -13
- package/dist/package/src/components/Upload/Files.vue +22 -15
- package/dist/package/src/components/Upload/Img.vue +14 -11
- package/dist/package/src/components/Upload/Imgs.vue +15 -12
- package/dist/package/src/components/WangEditor/index.vue +12 -4
- package/dist/package/src/directives/modules/copy.ts +2 -1
- package/dist/package/src/hooks/useDownload.ts +3 -2
- package/dist/package/src/hooks/useHandleData.ts +5 -4
- package/dist/package/src/hooks/useTheme.ts +2 -1
- package/dist/package/src/hooks/useTime.ts +11 -2
- package/dist/package/src/index.ts +2 -0
- package/dist/package/src/layouts/components/Header/ToolBarRight.vue +2 -0
- package/dist/package/src/layouts/components/Header/components/AssemblySize.vue +8 -6
- package/dist/package/src/layouts/components/Header/components/Avatar.vue +11 -9
- package/dist/package/src/layouts/components/Header/components/Breadcrumb.vue +10 -2
- package/dist/package/src/layouts/components/Header/components/Fullscreen.vue +4 -2
- package/dist/package/src/layouts/components/Header/components/InfoDialog.vue +6 -3
- package/dist/package/src/layouts/components/Header/components/PasswordDialog.vue +6 -3
- package/dist/package/src/layouts/components/Header/components/SearchMenu.vue +5 -3
- package/dist/package/src/layouts/components/Header/components/ThemeSetting.vue +3 -1
- package/dist/package/src/layouts/components/Tabs/components/MoreButton.vue +9 -7
- package/dist/package/src/layouts/components/ThemeDrawer/index.vue +27 -24
- package/dist/package/src/locales/README.md +15 -0
- package/dist/package/src/locales/en-US.json +258 -0
- package/dist/package/src/locales/es-ES.json +258 -0
- package/dist/package/src/locales/fr-FR.json +258 -0
- package/dist/package/src/locales/index.ts +223 -0
- package/dist/package/src/locales/ja-JP.json +258 -0
- package/dist/package/src/locales/ko-KR.json +258 -0
- package/dist/package/src/locales/zh-CN.json +258 -0
- package/dist/package/src/locales/zh-TW.json +258 -0
- package/dist/package/src/modules/index.ts +7 -2
- package/dist/package/src/modules/kratosAdmin.ts +19 -1
- package/dist/package/src/request.ts +8 -1
- package/dist/package/src/routers/index.ts +4 -1
- package/dist/package/src/routers/modules/dynamicRouter.ts +3 -2
- package/dist/package/src/routers/modules/staticRouter.ts +8 -4
- package/dist/package/src/rpc/base/v1/config.ts +2 -0
- package/dist/package/src/rpc/base/v1/language.ts +37 -0
- package/dist/package/src/rpc/system/admin/v1/base_dict.ts +81 -0
- package/dist/package/src/rpc/system/admin/v1/base_translation.ts +117 -0
- package/dist/package/src/stores/interface/index.ts +2 -0
- package/dist/package/src/stores/modules/config.ts +5 -1
- package/dist/package/src/stores/modules/user.ts +2 -1
- package/dist/package/src/stores/runtime.ts +1 -0
- package/dist/package/src/utils/color.ts +5 -4
- package/dist/package/src/utils/dict.ts +27 -4
- package/dist/package/src/utils/eleValidate.ts +3 -2
- package/dist/package/src/utils/errorHandler.ts +9 -8
- package/dist/package/src/utils/index.ts +7 -6
- package/dist/package/src/utils/oauthProvider.ts +15 -10
- package/dist/package/src/utils/passwordCrypto.ts +3 -2
- package/dist/package/src/utils/passwordStrength.ts +1 -16
- package/dist/package/src/utils/request.ts +13 -8
- package/dist/package/src/views/error/403.vue +3 -1
- package/dist/package/src/views/error/404.vue +3 -1
- package/dist/package/src/views/error/500.vue +3 -1
- package/dist/package/src/views/error/pending.vue +5 -2
- package/dist/package/src/views/login/components/LoginForm.vue +53 -27
- package/dist/package/src/views/login/index.scss +6 -0
- package/dist/package/src/views/login/index.vue +2 -0
- package/dist/package/types/generated/auto-imports.d.ts +129 -111
- package/dist/package/types/generated/components.d.ts +67 -67
- package/package.json +3 -1
- package/types/generated/auto-imports.d.ts +129 -111
- package/types/generated/components.d.ts +67 -67
- package/vite.config.ts +8 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<el-drawer v-model="drawerVisible" title="
|
|
2
|
+
<el-drawer v-model="drawerVisible" :title="t('core.theme.settings')" size="290px">
|
|
3
3
|
<!-- 布局样式 -->
|
|
4
4
|
<el-divider class="divider" content-position="center">
|
|
5
5
|
<el-icon><Notification /></el-icon>
|
|
6
|
-
|
|
6
|
+
{{ t("core.theme.layout") }}
|
|
7
7
|
</el-divider>
|
|
8
8
|
<div class="layout-box">
|
|
9
|
-
<el-tooltip effect="dark" content="
|
|
9
|
+
<el-tooltip effect="dark" :content="t('core.theme.layout.vertical')" placement="top" :show-after="200">
|
|
10
10
|
<div :class="['layout-item layout-vertical', { 'is-active': layout == 'vertical' }]" @click="setLayout('vertical')">
|
|
11
11
|
<div class="layout-dark"></div>
|
|
12
12
|
<div class="layout-container">
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
</el-icon>
|
|
19
19
|
</div>
|
|
20
20
|
</el-tooltip>
|
|
21
|
-
<el-tooltip effect="dark" content="
|
|
21
|
+
<el-tooltip effect="dark" :content="t('core.theme.layout.classic')" placement="top" :show-after="200">
|
|
22
22
|
<div :class="['layout-item layout-classic', { 'is-active': layout == 'classic' }]" @click="setLayout('classic')">
|
|
23
23
|
<div class="layout-dark"></div>
|
|
24
24
|
<div class="layout-container">
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
</el-icon>
|
|
31
31
|
</div>
|
|
32
32
|
</el-tooltip>
|
|
33
|
-
<el-tooltip effect="dark" content="
|
|
33
|
+
<el-tooltip effect="dark" :content="t('core.theme.layout.transverse')" placement="top" :show-after="200">
|
|
34
34
|
<div :class="['layout-item layout-transverse', { 'is-active': layout == 'transverse' }]" @click="setLayout('transverse')">
|
|
35
35
|
<div class="layout-dark"></div>
|
|
36
36
|
<div class="layout-content"></div>
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
</el-icon>
|
|
40
40
|
</div>
|
|
41
41
|
</el-tooltip>
|
|
42
|
-
<el-tooltip effect="dark" content="
|
|
42
|
+
<el-tooltip effect="dark" :content="t('core.theme.layout.columns')" placement="top" :show-after="200">
|
|
43
43
|
<div :class="['layout-item layout-columns', { 'is-active': layout == 'columns' }]" @click="setLayout('columns')">
|
|
44
44
|
<div class="layout-dark"></div>
|
|
45
45
|
<div class="layout-light"></div>
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
</div>
|
|
53
53
|
<div class="theme-item">
|
|
54
54
|
<span>
|
|
55
|
-
|
|
56
|
-
<el-tooltip effect="dark" content="
|
|
55
|
+
{{ t("core.theme.asideInverted") }}
|
|
56
|
+
<el-tooltip effect="dark" :content="t('core.theme.asideInvertedTip')" placement="top">
|
|
57
57
|
<el-icon><QuestionFilled /></el-icon>
|
|
58
58
|
</el-tooltip>
|
|
59
59
|
</span>
|
|
@@ -61,8 +61,8 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
<div class="theme-item mb50">
|
|
63
63
|
<span>
|
|
64
|
-
|
|
65
|
-
<el-tooltip effect="dark" content="
|
|
64
|
+
{{ t("core.theme.headerInverted") }}
|
|
65
|
+
<el-tooltip effect="dark" :content="t('core.theme.headerInvertedTip')" placement="top">
|
|
66
66
|
<el-icon><QuestionFilled /></el-icon>
|
|
67
67
|
</el-tooltip>
|
|
68
68
|
</span>
|
|
@@ -72,60 +72,60 @@
|
|
|
72
72
|
<!-- 全局主题 -->
|
|
73
73
|
<el-divider class="divider" content-position="center">
|
|
74
74
|
<el-icon><ColdDrink /></el-icon>
|
|
75
|
-
|
|
75
|
+
{{ t("core.theme.global") }}
|
|
76
76
|
</el-divider>
|
|
77
77
|
<div class="theme-item">
|
|
78
|
-
<span
|
|
78
|
+
<span>{{ t("core.theme.color") }}</span>
|
|
79
79
|
<el-color-picker v-model="primary" :predefine="colorList" @change="changePrimary" />
|
|
80
80
|
</div>
|
|
81
81
|
<div class="theme-item">
|
|
82
|
-
<span
|
|
82
|
+
<span>{{ t("core.theme.dark") }}</span>
|
|
83
83
|
<SwitchDark />
|
|
84
84
|
</div>
|
|
85
85
|
<div class="theme-item">
|
|
86
|
-
<span
|
|
86
|
+
<span>{{ t("core.theme.grey") }}</span>
|
|
87
87
|
<el-switch v-model="isGrey" @change="changeGreyOrWeak('grey', !!$event)" />
|
|
88
88
|
</div>
|
|
89
89
|
<div class="theme-item mb40">
|
|
90
|
-
<span
|
|
90
|
+
<span>{{ t("core.theme.weak") }}</span>
|
|
91
91
|
<el-switch v-model="isWeak" @change="changeGreyOrWeak('weak', !!$event)" />
|
|
92
92
|
</div>
|
|
93
93
|
|
|
94
94
|
<!-- 界面设置 -->
|
|
95
95
|
<el-divider class="divider" content-position="center">
|
|
96
96
|
<el-icon><Setting /></el-icon>
|
|
97
|
-
|
|
97
|
+
{{ t("core.theme.interface") }}
|
|
98
98
|
</el-divider>
|
|
99
99
|
<div class="theme-item">
|
|
100
|
-
<span
|
|
100
|
+
<span>{{ t("core.theme.menuCollapse") }}</span>
|
|
101
101
|
<el-switch v-model="isCollapse" />
|
|
102
102
|
</div>
|
|
103
103
|
<div class="theme-item">
|
|
104
|
-
<span
|
|
104
|
+
<span>{{ t("core.theme.accordion") }}</span>
|
|
105
105
|
<el-switch v-model="accordion" />
|
|
106
106
|
</div>
|
|
107
107
|
<div class="theme-item">
|
|
108
|
-
<span
|
|
108
|
+
<span>{{ t("core.theme.watermark") }}</span>
|
|
109
109
|
<el-switch v-model="watermark" />
|
|
110
110
|
</div>
|
|
111
111
|
<div class="theme-item">
|
|
112
|
-
<span
|
|
112
|
+
<span>{{ t("core.theme.breadcrumb") }}</span>
|
|
113
113
|
<el-switch v-model="breadcrumb" />
|
|
114
114
|
</div>
|
|
115
115
|
<div class="theme-item">
|
|
116
|
-
<span
|
|
116
|
+
<span>{{ t("core.theme.breadcrumbIcon") }}</span>
|
|
117
117
|
<el-switch v-model="breadcrumbIcon" />
|
|
118
118
|
</div>
|
|
119
119
|
<div class="theme-item">
|
|
120
|
-
<span
|
|
120
|
+
<span>{{ t("core.theme.tabs") }}</span>
|
|
121
121
|
<el-switch v-model="tabs" />
|
|
122
122
|
</div>
|
|
123
123
|
<div class="theme-item">
|
|
124
|
-
<span
|
|
124
|
+
<span>{{ t("core.theme.tabsIcon") }}</span>
|
|
125
125
|
<el-switch v-model="tabsIcon" />
|
|
126
126
|
</div>
|
|
127
127
|
<div class="theme-item">
|
|
128
|
-
<span
|
|
128
|
+
<span>{{ t("core.theme.footer") }}</span>
|
|
129
129
|
<el-switch v-model="footer" />
|
|
130
130
|
</div>
|
|
131
131
|
</el-drawer>
|
|
@@ -140,6 +140,9 @@ import { LayoutType } from "../../../stores/interface";
|
|
|
140
140
|
import { DEFAULT_PRIMARY } from "../../../config";
|
|
141
141
|
import mittBus from "../../../utils/mittBus";
|
|
142
142
|
import SwitchDark from "../../../components/SwitchDark/index.vue";
|
|
143
|
+
import { useLocaleStore } from "../../../locales";
|
|
144
|
+
|
|
145
|
+
const { t } = useLocaleStore();
|
|
143
146
|
|
|
144
147
|
const { changePrimary, changeGreyOrWeak, setAsideTheme, setHeaderTheme } = useTheme();
|
|
145
148
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 管理端 Core 语言包
|
|
2
|
+
|
|
3
|
+
本目录提供管理端底座和公共组件使用的稳定文案,包括通用操作、字段、状态、登录认证、上传、校验和错误提示。语言包由 `../modules/kratosAdmin.ts` 导入,作为 `kratos-admin` 模块注册到 `packages/core/src/locales/index.ts`,最终由 `bootstrap.ts` 合并到 Vue I18n;core 内组件、hooks、请求错误处理和登录页通过 `t()` 或 `useLocaleStore()` 使用。
|
|
4
|
+
|
|
5
|
+
| 文件 | 用途 | 使用位置 |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| `zh-CN.json` | 简体中文固定 UI 默认语言包,也是七语键集合和占位符校验基准。 | 管理端固定文案默认语言及缺失翻译回退。 |
|
|
8
|
+
| `zh-TW.json` | 繁体中文公共语言包。 | 管理端切换为繁体中文时由 Vue I18n 使用。 |
|
|
9
|
+
| `en-US.json` | 英文公共语言包。 | 管理端切换为英文时由 Vue I18n 使用。 |
|
|
10
|
+
| `ja-JP.json` | 日文公共语言包。 | 管理端切换为日文时由 Vue I18n 使用。 |
|
|
11
|
+
| `ko-KR.json` | 韩语公共语言包。 | 管理端切换为韩语时由 Vue I18n 使用。 |
|
|
12
|
+
| `fr-FR.json` | 法语公共语言包。 | 管理端切换为法语时由 Vue I18n 使用。 |
|
|
13
|
+
| `es-ES.json` | 西班牙语公共语言包。 | 管理端切换为西班牙语时由 Vue I18n 使用。 |
|
|
14
|
+
|
|
15
|
+
语言包是标准 JSON,不能在文件内直接写注释;新增或修改键时七种语言必须同步更新。
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common.action.back": "Back",
|
|
3
|
+
"common.action.cancel": "Cancel",
|
|
4
|
+
"common.action.close": "Close",
|
|
5
|
+
"common.action.confirm": "Confirm",
|
|
6
|
+
"common.action.create": "Create",
|
|
7
|
+
"common.action.delete": "Delete",
|
|
8
|
+
"common.action.download": "Download",
|
|
9
|
+
"common.action.edit": "Edit",
|
|
10
|
+
"common.action.expand": "Expand",
|
|
11
|
+
"common.action.collapse": "Collapse",
|
|
12
|
+
"common.action.login": "Log in",
|
|
13
|
+
"common.action.logout": "Log out",
|
|
14
|
+
"common.action.reset": "Reset",
|
|
15
|
+
"common.action.retry": "Retry",
|
|
16
|
+
"common.action.save": "Save",
|
|
17
|
+
"common.action.search": "Search",
|
|
18
|
+
"common.action.upload": "Upload",
|
|
19
|
+
"common.action.view": "View",
|
|
20
|
+
"common.field.endTime": "End time",
|
|
21
|
+
"common.field.language": "Language",
|
|
22
|
+
"common.field.operation": "Actions",
|
|
23
|
+
"common.field.parameterName": "Parameter name",
|
|
24
|
+
"common.field.parameterValue": "Parameter value",
|
|
25
|
+
"common.field.phone": "Phone number",
|
|
26
|
+
"common.field.startTime": "Start time",
|
|
27
|
+
"common.language.en-US": "English",
|
|
28
|
+
"common.language.ja-JP": "日本語",
|
|
29
|
+
"common.language.zh-CN": "简体中文",
|
|
30
|
+
"common.language.zh-TW": "Traditional Chinese",
|
|
31
|
+
"common.language.ko-KR": "Korean",
|
|
32
|
+
"common.language.fr-FR": "French",
|
|
33
|
+
"common.language.es-ES": "Spanish",
|
|
34
|
+
"common.message.loading": "Loading",
|
|
35
|
+
"common.message.noData": "No data",
|
|
36
|
+
"common.message.operationSuccess": "Operation completed",
|
|
37
|
+
"common.message.systemError": "System error",
|
|
38
|
+
"common.message.unknown": "Unable to process this request. Try again later.",
|
|
39
|
+
"common.validation.phoneInvalid": "Enter a valid phone number",
|
|
40
|
+
"common.validation.phoneRequired": "Enter a phone number",
|
|
41
|
+
"common.title.notice": "Notice",
|
|
42
|
+
"common.title.warning": "Confirmation",
|
|
43
|
+
"common.placeholder.input": "Enter a value",
|
|
44
|
+
"common.placeholder.inputContent": "Enter content",
|
|
45
|
+
"common.placeholder.select": "Select a value",
|
|
46
|
+
"common.status.disabled": "Disabled",
|
|
47
|
+
"common.status.enabled": "Enabled",
|
|
48
|
+
"common.value.female": "Female",
|
|
49
|
+
"common.value.male": "Male",
|
|
50
|
+
"common.value.all": "All",
|
|
51
|
+
"core.auth.loginAgain": "Log in again",
|
|
52
|
+
"core.auth.refreshTokenMissing": "Refresh token is missing",
|
|
53
|
+
"core.auth.sessionExpired": "Your session has expired. Please log in again.",
|
|
54
|
+
"core.auth.noMenuPermission": "This account has no menu permissions. Contact an administrator.",
|
|
55
|
+
"core.auth.noPermission": "Access denied",
|
|
56
|
+
"core.clipboard.success": "Copied",
|
|
57
|
+
"core.cron.cycleUnit.day": "days",
|
|
58
|
+
"core.cron.cycleUnit.hour": "hours",
|
|
59
|
+
"core.cron.cycleUnit.minute": "minutes",
|
|
60
|
+
"core.cron.cycleUnit.month": "months",
|
|
61
|
+
"core.cron.cycleUnit.second": "seconds",
|
|
62
|
+
"core.cron.cycleUnit.year": "years",
|
|
63
|
+
"core.cron.description.every": "Every {unit}",
|
|
64
|
+
"core.cron.description.range": "{segment} from {start} to {end}",
|
|
65
|
+
"core.cron.description.specific": "{segment}: {values}",
|
|
66
|
+
"core.cron.description.step": "Starting at {start} {unit}, run every {step} {cycleUnit}",
|
|
67
|
+
"core.cron.description.unspecified": "{segment} not specified",
|
|
68
|
+
"core.cron.description.weekday": "Nearest weekday to day {day} of this month",
|
|
69
|
+
"core.cron.descriptionSeparator": "; ",
|
|
70
|
+
"core.cron.edit": "Edit expression",
|
|
71
|
+
"core.cron.everyUnit": "Every {unit}",
|
|
72
|
+
"core.cron.expression": "Cron expression",
|
|
73
|
+
"core.cron.from": "from",
|
|
74
|
+
"core.cron.lastDay": "Last day of this month",
|
|
75
|
+
"core.cron.nearestWorkday": "nearest weekday",
|
|
76
|
+
"core.cron.notConfigured": "No schedule configured",
|
|
77
|
+
"core.cron.placeholder": "Enter a Cron expression",
|
|
78
|
+
"core.cron.preset.dailyEight": "Daily at 8:00 AM",
|
|
79
|
+
"core.cron.preset.dailyMidnight": "Daily at midnight",
|
|
80
|
+
"core.cron.preset.everyFiveMinutes": "Every 5 minutes",
|
|
81
|
+
"core.cron.preset.everyHour": "Every hour",
|
|
82
|
+
"core.cron.preset.everyMinute": "Every minute",
|
|
83
|
+
"core.cron.preset.monthlyFirst": "Monthly on day 1 at midnight",
|
|
84
|
+
"core.cron.preset.nextYearDaily": "Daily next year at midnight",
|
|
85
|
+
"core.cron.presets": "Common expressions",
|
|
86
|
+
"core.cron.range": "Range",
|
|
87
|
+
"core.cron.repeat": "Repeat",
|
|
88
|
+
"core.cron.runOnce": "{unit}",
|
|
89
|
+
"core.cron.segment.day": "Day",
|
|
90
|
+
"core.cron.segment.hour": "Hour",
|
|
91
|
+
"core.cron.segment.minute": "Minute",
|
|
92
|
+
"core.cron.segment.month": "Month",
|
|
93
|
+
"core.cron.segment.second": "Second",
|
|
94
|
+
"core.cron.segment.year": "Year",
|
|
95
|
+
"core.cron.specific": "Specific",
|
|
96
|
+
"core.cron.startEvery": "{unit}, every",
|
|
97
|
+
"core.cron.thisMonth": "This month, day",
|
|
98
|
+
"core.cron.title": "Edit schedule expression",
|
|
99
|
+
"core.cron.to": "to",
|
|
100
|
+
"core.cron.unit.day": "day",
|
|
101
|
+
"core.cron.unit.hour": "hour",
|
|
102
|
+
"core.cron.unit.minute": "minute",
|
|
103
|
+
"core.cron.unit.month": "month",
|
|
104
|
+
"core.cron.unit.second": "second",
|
|
105
|
+
"core.cron.unit.year": "year",
|
|
106
|
+
"core.cron.unspecified": "Not specified",
|
|
107
|
+
"core.cron.valueSeparator": ", ",
|
|
108
|
+
"core.cron.valueWithUnit": "{value} {unit}",
|
|
109
|
+
"core.cron.workday": "Weekday",
|
|
110
|
+
"core.data.confirmAction": "Are you sure you want to {action}?",
|
|
111
|
+
"core.data.operationSuccess": "{action} completed",
|
|
112
|
+
"core.download.largeFileNotice": "Large datasets may take longer to download. Please wait.",
|
|
113
|
+
"core.error.403.detail": "You do not have permission to access this page.",
|
|
114
|
+
"core.error.403.title": "Access denied",
|
|
115
|
+
"core.error.404.detail": "The page you requested does not exist.",
|
|
116
|
+
"core.error.404.title": "Page not found",
|
|
117
|
+
"core.error.500.detail": "The server encountered an error.",
|
|
118
|
+
"core.error.500.title": "Server error",
|
|
119
|
+
"core.error.pending.detail": "This feature is under construction.",
|
|
120
|
+
"core.error.pending.title": "Coming soon",
|
|
121
|
+
"core.error.javascript.eval": "Invalid use of Eval",
|
|
122
|
+
"core.error.javascript.internal": "Internal JavaScript engine error",
|
|
123
|
+
"core.error.javascript.range": "Parameter is out of range",
|
|
124
|
+
"core.error.javascript.reference": "Object not found",
|
|
125
|
+
"core.error.javascript.syntax": "Syntax error",
|
|
126
|
+
"core.error.javascript.type": "Invalid type or object",
|
|
127
|
+
"core.error.javascript.unknown": "Unknown error",
|
|
128
|
+
"core.error.javascript.uri": "URI error",
|
|
129
|
+
"core.header.fullscreen": "Full screen",
|
|
130
|
+
"core.header.fullscreenExit": "Exit full screen",
|
|
131
|
+
"core.header.fullscreenUnsupported": "Full screen is not supported by this browser",
|
|
132
|
+
"core.header.language": "Change language",
|
|
133
|
+
"core.header.menuSearch": "Search menus",
|
|
134
|
+
"core.header.menuSearchEmpty": "No menus found",
|
|
135
|
+
"core.header.menuSearchPlaceholder": "Search by menu name or path",
|
|
136
|
+
"core.header.size.default": "Default",
|
|
137
|
+
"core.header.size.large": "Large",
|
|
138
|
+
"core.header.size.small": "Small",
|
|
139
|
+
"core.header.sizeSelect": "Component size",
|
|
140
|
+
"core.header.theme": "Theme settings",
|
|
141
|
+
"core.icon.empty": "No matching icons found",
|
|
142
|
+
"core.icon.placeholder": "Select an icon",
|
|
143
|
+
"core.icon.search": "Search icons",
|
|
144
|
+
"core.layout.departmentUnassigned": "No department assigned",
|
|
145
|
+
"core.layout.home": "Home",
|
|
146
|
+
"core.layout.info": "Personal information",
|
|
147
|
+
"core.layout.passwordChange": "Change password",
|
|
148
|
+
"core.layout.unnamedMenu": "Unnamed menu",
|
|
149
|
+
"core.layout.logoutConfirm": "Are you sure you want to log out?",
|
|
150
|
+
"core.layout.logoutSuccess": "Logged out",
|
|
151
|
+
"core.layout.notSet": "Not set",
|
|
152
|
+
"core.layout.profile": "Profile",
|
|
153
|
+
"core.layout.roleUnassigned": "No role assigned",
|
|
154
|
+
"core.login.behaviorClick": "Click the characters in order",
|
|
155
|
+
"core.login.behaviorConfirm": "Confirm",
|
|
156
|
+
"core.login.behaviorPuzzle": "Drag the slider to complete the puzzle",
|
|
157
|
+
"core.login.behaviorRotate": "Drag the slider to rotate the inner image upright",
|
|
158
|
+
"core.login.captcha": "Enter verification code",
|
|
159
|
+
"core.login.captchaAlt": "Verification code",
|
|
160
|
+
"core.login.greeting.afternoon": "Good afternoon",
|
|
161
|
+
"core.login.greeting.evening": "Good evening",
|
|
162
|
+
"core.login.greeting.morning": "Good morning",
|
|
163
|
+
"core.login.greeting.night": "Hello",
|
|
164
|
+
"core.login.greeting.noon": "Good afternoon",
|
|
165
|
+
"core.login.otherMethods": "Other sign-in methods",
|
|
166
|
+
"core.login.password": "Enter password",
|
|
167
|
+
"core.login.tenantCode": "Enter tenant code",
|
|
168
|
+
"core.login.userName": "Enter username",
|
|
169
|
+
"core.login.welcome": "Welcome to the admin console",
|
|
170
|
+
"core.oauth.dingtalk": "DingTalk",
|
|
171
|
+
"core.oauth.feishu": "Feishu",
|
|
172
|
+
"core.oauth.wechat": "WeChat",
|
|
173
|
+
"core.oauth.wechatmp": "WeChat Official Account",
|
|
174
|
+
"core.oauth.wechatwork": "WeCom",
|
|
175
|
+
"core.oauth.unknown": "Unknown provider",
|
|
176
|
+
"core.password.error": "Password must contain uppercase and lowercase letters, a number, and a special character, and be at least 8 characters long",
|
|
177
|
+
"core.password.cryptoUnsupported": "Password encryption is not supported in this environment",
|
|
178
|
+
"core.password.required": "Password is required",
|
|
179
|
+
"core.password.strength": "Password strength",
|
|
180
|
+
"core.password.strength.empty": "Not entered",
|
|
181
|
+
"core.password.strength.high": "High",
|
|
182
|
+
"core.password.strength.low": "Low",
|
|
183
|
+
"core.password.strength.medium": "Medium",
|
|
184
|
+
"core.password.tip": "Use at least 8 characters with uppercase and lowercase letters, a number, and a special character. The password must reach high strength before submission.",
|
|
185
|
+
"core.theme.accordion": "Accordion menu",
|
|
186
|
+
"core.theme.asideInverted": "Dark sidebar",
|
|
187
|
+
"core.theme.asideInvertedTip": "Use dark colors for the sidebar",
|
|
188
|
+
"core.theme.breadcrumb": "Breadcrumbs",
|
|
189
|
+
"core.theme.breadcrumbIcon": "Breadcrumb icons",
|
|
190
|
+
"core.theme.color": "Theme color",
|
|
191
|
+
"core.theme.dark": "Dark mode",
|
|
192
|
+
"core.theme.footer": "Footer",
|
|
193
|
+
"core.theme.global": "Global theme",
|
|
194
|
+
"core.theme.grey": "Grayscale mode",
|
|
195
|
+
"core.theme.headerInverted": "Dark header",
|
|
196
|
+
"core.theme.headerInvertedTip": "Use dark colors for the header",
|
|
197
|
+
"core.theme.interface": "Interface settings",
|
|
198
|
+
"core.theme.layout": "Layout",
|
|
199
|
+
"core.theme.layout.classic": "Classic",
|
|
200
|
+
"core.theme.layout.columns": "Columns",
|
|
201
|
+
"core.theme.layout.transverse": "Horizontal",
|
|
202
|
+
"core.theme.layout.vertical": "Vertical",
|
|
203
|
+
"core.theme.menuCollapse": "Collapse menu",
|
|
204
|
+
"core.theme.primaryReset": "Theme color reset to {color}",
|
|
205
|
+
"core.theme.settings": "Layout settings",
|
|
206
|
+
"core.theme.tabs": "Tabs",
|
|
207
|
+
"core.theme.tabsIcon": "Tab icons",
|
|
208
|
+
"core.theme.watermark": "Watermark",
|
|
209
|
+
"core.theme.weak": "Color vision mode",
|
|
210
|
+
"core.theme.colorHexInvalid": "Enter a valid hexadecimal color",
|
|
211
|
+
"core.theme.colorRgbInvalid": "Enter a valid RGB color",
|
|
212
|
+
"core.route.forbidden": "403 page",
|
|
213
|
+
"core.route.login": "Log in",
|
|
214
|
+
"core.route.notFound": "404 page",
|
|
215
|
+
"core.route.serverError": "500 page",
|
|
216
|
+
"core.tabs.closeAll": "Close all",
|
|
217
|
+
"core.tabs.closeCurrent": "Close current",
|
|
218
|
+
"core.tabs.closeLeft": "Close tabs to the left",
|
|
219
|
+
"core.tabs.closeOther": "Close other tabs",
|
|
220
|
+
"core.tabs.closeRight": "Close tabs to the right",
|
|
221
|
+
"core.tabs.maximize": "Maximize",
|
|
222
|
+
"core.tabs.refresh": "Refresh current",
|
|
223
|
+
"core.table.collapseAll": "Collapse all",
|
|
224
|
+
"core.table.columnName": "Column",
|
|
225
|
+
"core.table.columnSetting": "Column settings",
|
|
226
|
+
"core.table.expandAll": "Expand all",
|
|
227
|
+
"core.table.hideSearch": "Hide search",
|
|
228
|
+
"core.table.noConfigurableColumns": "No configurable columns",
|
|
229
|
+
"core.table.refresh": "Refresh data",
|
|
230
|
+
"core.table.show": "Visible",
|
|
231
|
+
"core.table.showSearch": "Show search",
|
|
232
|
+
"core.table.sort": "Sortable",
|
|
233
|
+
"core.tree.filterPlaceholder": "Enter keywords to filter",
|
|
234
|
+
"core.tree.resetSelection": "Reset selection",
|
|
235
|
+
"core.upload.action": "Upload file",
|
|
236
|
+
"core.upload.batchAdd": "Batch add {resource}",
|
|
237
|
+
"core.upload.batchFailed": "Failed to batch add {resource}. Upload the file again.",
|
|
238
|
+
"core.upload.batchSuccess": "{resource} added successfully",
|
|
239
|
+
"core.upload.click": "click to upload",
|
|
240
|
+
"core.upload.dataCover": "Overwrite data",
|
|
241
|
+
"core.upload.dragOrClick": "Drop a file here, or ",
|
|
242
|
+
"core.upload.excelFormat": "Upload a standard .xls or .xlsx file up to {size} MB",
|
|
243
|
+
"core.upload.file": "File upload",
|
|
244
|
+
"core.upload.fileFailed": "File upload failed. Try again.",
|
|
245
|
+
"core.upload.fileFormatInvalid": "The file format is not supported",
|
|
246
|
+
"core.upload.fileSizeExceeded": "The file must not exceed {size} MB",
|
|
247
|
+
"core.upload.fileSuccess": "File uploaded",
|
|
248
|
+
"core.upload.imageFailed": "Image upload failed. Try again.",
|
|
249
|
+
"core.upload.imageFormatInvalid": "The image format is not supported",
|
|
250
|
+
"core.upload.imageLimitExceeded": "You can upload up to {limit} images. Remove an image before uploading another.",
|
|
251
|
+
"core.upload.imageSizeExceeded": "The image must not exceed {size} MB",
|
|
252
|
+
"core.upload.imageSuccess": "Image uploaded",
|
|
253
|
+
"core.upload.limitExceeded": "You can upload up to {limit} files. Remove a file before uploading another.",
|
|
254
|
+
"core.upload.singleFileOnly": "Only one file can be uploaded",
|
|
255
|
+
"core.upload.template": "{resource} template",
|
|
256
|
+
"core.upload.templateDownload": "Download template",
|
|
257
|
+
"core.upload.unnamedFile": "Unnamed file"
|
|
258
|
+
}
|