@liujitcn/kratos-uni-app-core 0.0.29 → 0.0.32
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 +30 -7
- package/dist/module.mjs +164 -16
- package/dist/vite.mjs +4 -5
- package/package.json +3 -1
- package/src/api/base/{config.ts → v1/config.ts} +6 -2
- package/src/api/base/{file.ts → v1/file.ts} +6 -2
- package/src/api/base/{language.ts → v1/language.ts} +2 -2
- package/src/api/base/{login.ts → v1/login.ts} +3 -3
- package/src/api/base/v1/mfa.ts +127 -0
- package/src/api/base/{oauth.ts → v1/oauth.ts} +3 -3
- package/src/api/system/{auth.ts → app/v1/auth.ts} +8 -15
- package/src/api/system/{base_area.ts → app/v1/base_area.ts} +2 -2
- package/src/api/system/app/v1/base_dict.ts +21 -0
- package/src/api/{base/menu.ts → system/app/v1/base_menu.ts} +2 -2
- package/src/bootstrap.ts +1 -1
- package/src/components/KratosSettingsPage.vue +292 -0
- package/src/components/KratosTabBar.vue +71 -1
- package/src/components/MfaManageDialog.vue +469 -0
- package/src/components/MfaRecoveryCodesDialog.vue +192 -0
- package/src/components/MfaSetupPanel.vue +160 -0
- package/src/components/PasswordVerifyDialog.vue +277 -0
- package/src/index.ts +2 -0
- package/src/locales/README.md +2 -1
- package/src/locales/en-US.json +41 -4
- package/src/locales/index.ts +10 -1
- package/src/locales/ja-JP.json +41 -4
- package/src/locales/zh-CN.json +41 -4
- package/src/locales/zh-TW.json +41 -4
- package/src/navigation.ts +115 -53
- package/src/rpc/base/v1/login.ts +37 -4
- package/src/rpc/base/v1/mfa.ts +180 -0
- package/src/rpc/base/v1/oauth.ts +25 -0
- package/src/rpc/system/app/v1/auth.ts +7 -0
- package/src/rpc/system/common/v1/common.ts +35 -0
- package/src/stores/modules/setting.ts +1 -1
- package/src/stores/modules/user.ts +29 -10
- package/src/utils/clipboard.ts +33 -0
- package/src/utils/http.ts +10 -13
- package/src/utils/passwordCrypto.ts +1 -1
- package/src/utils/webauthn.ts +101 -0
- package/src/views/pages/login/login.vue +299 -13
- package/src/vite.ts +4 -7
- package/src/api/system/base_dict.ts +0 -24
package/README.md
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
# @liujitcn/kratos-uni-app-core
|
|
2
2
|
|
|
3
|
-
`@liujitcn/kratos-uni-app-core`
|
|
3
|
+
`@liujitcn/kratos-uni-app-core` 是应用底座包,提供模块协议、启动流程、动态导航、认证与请求、MFA 校验、共享状态、基础页面和构建期页面装配能力。业务模块只能通过本包公开 exports 使用这些能力。
|
|
4
4
|
|
|
5
5
|
## 目录结构
|
|
6
6
|
|
|
7
7
|
```text
|
|
8
8
|
packages/core
|
|
9
9
|
├── src
|
|
10
|
-
│ ├── api #
|
|
11
|
-
│ ├── components #
|
|
10
|
+
│ ├── api # 与 Proto 完整路径一致的接口 service
|
|
11
|
+
│ ├── components # 启动状态、自绘 tabBar、公共设置页和 MFA 组件
|
|
12
12
|
│ ├── rpc # Buf 生成的 TypeScript 接口类型
|
|
13
13
|
│ ├── static # 底座图片和 tab 图标
|
|
14
14
|
│ ├── stores # Pinia 设置与用户状态
|
|
15
15
|
│ ├── styles # 全局基础样式
|
|
16
16
|
│ ├── types # uni-app 与第三方类型补充
|
|
17
|
-
│ ├── utils # HTTP
|
|
17
|
+
│ ├── utils # HTTP、认证、文件、MFA/WebAuthn 和导航工具
|
|
18
18
|
│ ├── views # 首页、登录、状态页和 WebView
|
|
19
19
|
│ ├── bootstrap.ts # 应用初始化
|
|
20
20
|
│ ├── module.ts # 模块定义与注册表
|
|
@@ -26,14 +26,17 @@ packages/core
|
|
|
26
26
|
└── package.json
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
`src/rpc` 是生成产物,只能通过 workspace 根目录的 `pnpm generate:rpc` 更新;该命令委托
|
|
29
|
+
`src/rpc` 是生成产物,只能通过 workspace 根目录的 `pnpm generate:rpc` 更新;该命令委托 Frontend 的 `make ts-uni-app` 和 `backend/api/buf.uni-app.typescript.gen.yaml` 生成。
|
|
30
30
|
|
|
31
31
|
## 功能
|
|
32
32
|
|
|
33
33
|
- 定义 `KratosAppModule`、`viewKey`、静态页面覆盖和模块图标协议。
|
|
34
|
-
- 从 `/v1/app/base/menu` 加载 `
|
|
34
|
+
- 从 `/v1/app/base/menu` 加载 `99000000` 下的扁平菜单,按 `parent_id` 构建树,以二级页面生成 tabBar,并原子更新动态路由和层级导航。
|
|
35
35
|
- 按匿名态、登录态缓存导航,并在远端不可用时回退到最近缓存或默认菜单。
|
|
36
|
-
- 统一认证、token、HTTP、上传、配置、Pinia 和基础页面能力。
|
|
36
|
+
- 统一认证、token、MFA、HTTP、上传、配置、Pinia 和基础页面能力。
|
|
37
|
+
- 提供可复用的 `KratosSettingsPage`,统一语言、MFA、微信设置和退出登录,并允许产品在最上方追加业务设置。
|
|
38
|
+
- 公开通用密码弹窗、MFA 绑定面板与恢复码弹窗,供登录页和业务模块复用同一套绑定界面。
|
|
39
|
+
- 登录阶段支持 TOTP、WebAuthn 和一次性恢复码校验;WebAuthn 编解码封装在 `src/utils/webauthn.ts`。
|
|
37
40
|
- 构建时扫描模块 `src/views/**/*.vue`,逐文件合并模块 static,生成宿主页并在退出时按事务精确恢复。
|
|
38
41
|
|
|
39
42
|
## 公开入口
|
|
@@ -43,4 +46,24 @@ packages/core
|
|
|
43
46
|
- `@liujitcn/kratos-uni-app-core/vite`:Vite 配置与页面装配插件。
|
|
44
47
|
- `@liujitcn/kratos-uni-app-core/api/*`、`components/*.vue`、`utils/*`、`views/*`:白名单子路径。
|
|
45
48
|
|
|
49
|
+
## 公共设置页
|
|
50
|
+
|
|
51
|
+
产品设置页通过公开子路径引用 `KratosSettingsPage`。`extensions` 是唯一业务扩展插槽,固定直接渲染在页面视口最上方;没有传入内容时不会生成容器或额外间距。
|
|
52
|
+
|
|
53
|
+
```vue
|
|
54
|
+
<script setup lang="ts">
|
|
55
|
+
import KratosSettingsPage from '@liujitcn/kratos-uni-app-core/components/KratosSettingsPage.vue'
|
|
56
|
+
</script>
|
|
57
|
+
|
|
58
|
+
<template>
|
|
59
|
+
<KratosSettingsPage>
|
|
60
|
+
<template #extensions>
|
|
61
|
+
<ShopSettingsSection />
|
|
62
|
+
</template>
|
|
63
|
+
</KratosSettingsPage>
|
|
64
|
+
</template>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
扩展内容由产品模块自行组织完整卡片。页面顺序固定为业务扩展、MFA 与语言、微信设置、退出登录;产品模块可以注册自己的物理页面,并通过后注册的 `SETTINGS` viewKey 覆盖 system 默认包装页。
|
|
68
|
+
|
|
46
69
|
构建与验证命令见 [workspace 文档](../../README.md)。
|
package/dist/module.mjs
CHANGED
|
@@ -54,6 +54,8 @@ var zh_CN_default = {
|
|
|
54
54
|
"core.crypto.public_key_invalid": "\u516C\u94A5\u683C\u5F0F\u65E0\u6548",
|
|
55
55
|
"core.crypto.random_failed": "\u968F\u673A\u6570\u751F\u6210\u5931\u8D25",
|
|
56
56
|
"core.crypto.unsupported": "\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u5BC6\u7801\u52A0\u5BC6",
|
|
57
|
+
"core.password.verify_title": "\u9A8C\u8BC1\u5BC6\u7801",
|
|
58
|
+
"core.password.verify_label": "\u5F53\u524D\u5BC6\u7801",
|
|
57
59
|
"core.file.upload_failed": "\u4E0A\u4F20\u5931\u8D25",
|
|
58
60
|
"core.home.account_capability": "\u8D26\u6237\u80FD\u529B",
|
|
59
61
|
"core.home.account_capability_description": "\u4E2A\u4EBA\u8D44\u6599\u3001\u5E94\u7528\u8BBE\u7F6E\u4E0E\u667A\u80FD\u52A9\u624B\u5165\u53E3\u5DF2\u4FDD\u7559",
|
|
@@ -84,6 +86,23 @@ var zh_CN_default = {
|
|
|
84
86
|
"core.login.captcha_write_failed": "\u9A8C\u8BC1\u7801\u56FE\u7247\u5199\u5165\u5931\u8D25",
|
|
85
87
|
"core.login.default_sub_title": "\u6B22\u8FCE\u4F7F\u7528\u672C\u5E94\u7528",
|
|
86
88
|
"core.login.login_success": "\u767B\u5F55\u6210\u529F",
|
|
89
|
+
"core.login.mfa_title": "\u591A\u56E0\u7D20\u8BA4\u8BC1",
|
|
90
|
+
"core.login.mfa_code": "\u8BF7\u8F93\u5165\u52A8\u6001\u53E3\u4EE4",
|
|
91
|
+
"core.login.mfa_recovery_code": "\u6062\u590D\u7801\uFF08\u53EF\u9009\uFF09",
|
|
92
|
+
"core.login.mfa_setup_title": "\u7ED1\u5B9A\u591A\u56E0\u7D20\u8BA4\u8BC1",
|
|
93
|
+
"core.login.mfa_copy_uri": "\u590D\u5236\u7ED1\u5B9A\u5730\u5740",
|
|
94
|
+
"core.login.mfa_copy_success": "\u7ED1\u5B9A\u5730\u5740\u5DF2\u590D\u5236",
|
|
95
|
+
"core.login.mfa_recovery_codes_copied": "\u6062\u590D\u7801\u5DF2\u590D\u5236",
|
|
96
|
+
"core.login.mfa_recovery_codes_title": "\u4FDD\u5B58 MFA \u6062\u590D\u7801",
|
|
97
|
+
"core.login.mfa_recovery_codes_warning": "\u6BCF\u4E2A\u6062\u590D\u7801\u53EA\u80FD\u4F7F\u7528\u4E00\u6B21\uFF0C\u6B64\u5F39\u7A97\u5173\u95ED\u540E\u4E0D\u4F1A\u518D\u6B21\u663E\u793A\u3002",
|
|
98
|
+
"core.login.mfa_copy_recovery_codes": "\u590D\u5236\u6062\u590D\u7801",
|
|
99
|
+
"core.login.mfa_recovery_codes_confirm": "\u6211\u5DF2\u4FDD\u5B58",
|
|
100
|
+
"core.login.mfa_setup_success": "\u591A\u56E0\u7D20\u8BA4\u8BC1\u7ED1\u5B9A\u6210\u529F\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\u3002",
|
|
101
|
+
"core.login.mfa_webauthn_action": "\u4F7F\u7528 Passkey",
|
|
102
|
+
"core.login.mfa_webauthn_setup_unsupported": "\u5F53\u524D\u5E73\u53F0\u4E0D\u652F\u6301 WebAuthn\uFF0C\u8BF7\u4F7F\u7528 TOTP \u6216\u6062\u590D\u7801\u3002",
|
|
103
|
+
"core.login.mfa_webauthn_setup_invalid": "WebAuthn \u6CE8\u518C\u672A\u8FD4\u56DE\u6709\u6548\u51ED\u636E\u3002",
|
|
104
|
+
"core.login.mfa_webauthn_login_unsupported": "\u5F53\u524D\u5E73\u53F0\u4E0D\u652F\u6301 WebAuthn\uFF0C\u8BF7\u4F7F\u7528\u6062\u590D\u7801\u3002",
|
|
105
|
+
"core.login.mfa_webauthn_login_invalid": "WebAuthn \u767B\u5F55\u672A\u8FD4\u56DE\u6709\u6548\u51ED\u636E\u3002",
|
|
87
106
|
"core.login.password": "\u8BF7\u8F93\u5165\u5BC6\u7801",
|
|
88
107
|
"core.login.privacy": "\u300A\u9690\u79C1\u534F\u8BAE\u300B",
|
|
89
108
|
"core.login.protocol_missing": "\u670D\u52A1\u6761\u6B3E\u548C\u9690\u79C1\u534F\u8BAE\u672A\u914D\u7F6E",
|
|
@@ -97,17 +116,15 @@ var zh_CN_default = {
|
|
|
97
116
|
"core.login.wechat_bind_tip": "\u8BE5\u5FAE\u4FE1\u5C1A\u672A\u7ED1\u5B9A\uFF0C\u8BF7\u767B\u5F55\u5DF2\u6709\u8D26\u53F7\u5B8C\u6210\u7ED1\u5B9A",
|
|
98
117
|
"core.login.wechat_failed": "\u5FAE\u4FE1\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
|
|
99
118
|
"core.navigation.home": "\u9996\u9875",
|
|
119
|
+
"core.navigation.message": "\u6D88\u606F",
|
|
100
120
|
"core.navigation.error.access": "\u83DC\u5355\u8BBF\u95EE\u6A21\u5F0F\u65E0\u6548\uFF1A{access}",
|
|
101
121
|
"core.navigation.error.child_tab": "\u53EA\u6709\u79FB\u52A8\u7AEF\u4E8C\u7EA7\u83DC\u5355\u53EF\u4EE5\u4F5C\u4E3A tab\uFF1A{name}",
|
|
102
122
|
"core.navigation.error.cycle": "\u79FB\u52A8\u7AEF\u83DC\u5355\u5B58\u5728\u5FAA\u73AF\u7236\u7EA7\uFF1A{name}",
|
|
103
123
|
"core.navigation.error.identity": "\u83DC\u5355 id\u3001name \u6216 app/ \u8DEF\u5F84\u65E0\u6548",
|
|
104
|
-
"core.navigation.error.item_object": "\u83DC\u5355\u9879\u4E0D\u662F\u5BF9\u8C61",
|
|
105
|
-
"core.navigation.error.list_missing": "\u83DC\u5355\u54CD\u5E94\u7F3A\u5C11\u6241\u5E73\u5217\u8868",
|
|
106
124
|
"core.navigation.error.name_prefix": "\u83DC\u5355\u540D\u79F0\u5FC5\u987B\u4F7F\u7528 App \u524D\u7F00\uFF1A{name}",
|
|
107
125
|
"core.navigation.error.parent_invalid": "\u79FB\u52A8\u7AEF\u83DC\u5355\u7236\u7EA7\u7F16\u53F7\u65E0\u6548\uFF1A{name}",
|
|
108
126
|
"core.navigation.error.parent_missing": "\u83DC\u5355\u7F3A\u5C11\u7236\u7EA7\u7F16\u53F7\uFF1A{name}",
|
|
109
127
|
"core.navigation.error.parent_not_found": "\u79FB\u52A8\u7AEF\u83DC\u5355\u7236\u7EA7\u4E0D\u5B58\u5728\uFF1A{name}",
|
|
110
|
-
"core.navigation.error.response_object": "\u83DC\u5355\u54CD\u5E94\u4E0D\u662F\u5BF9\u8C61",
|
|
111
128
|
"core.navigation.error.root_tab": "\u79FB\u52A8\u7AEF\u4E8C\u7EA7\u83DC\u5355\u5FC5\u987B\u4F5C\u4E3A tab\uFF1A{name}",
|
|
112
129
|
"core.navigation.error.tab_count": "tabBar \u53EA\u80FD\u914D\u7F6E 0 \u6216 2-5 \u9879",
|
|
113
130
|
"core.navigation.error.unique": "\u83DC\u5355 id\u3001name\u3001path \u5FC5\u987B\u552F\u4E00",
|
|
@@ -118,6 +135,22 @@ var zh_CN_default = {
|
|
|
118
135
|
"core.protocol.not_configured": "{title}\u672A\u914D\u7F6E\uFF0C\u6682\u65F6\u65E0\u6CD5\u67E5\u770B",
|
|
119
136
|
"core.protocol.privacy": "\u9690\u79C1\u534F\u8BAE",
|
|
120
137
|
"core.protocol.service": "\u670D\u52A1\u6761\u6B3E",
|
|
138
|
+
"core.settings.authorization": "\u6388\u6743\u7BA1\u7406",
|
|
139
|
+
"core.settings.contact": "\u8054\u7CFB\u6211\u4EEC",
|
|
140
|
+
"core.settings.feedback": "\u95EE\u9898\u53CD\u9988",
|
|
141
|
+
"core.settings.logout_confirm": "\u662F\u5426\u9000\u51FA\u767B\u5F55\uFF1F",
|
|
142
|
+
"core.settings.logout_failed": "\u9000\u51FA\u767B\u5F55\u5931\u8D25",
|
|
143
|
+
"core.settings.mfa_bind_success": "\u591A\u56E0\u7D20\u8BA4\u8BC1\u7ED1\u5B9A\u6210\u529F",
|
|
144
|
+
"core.settings.mfa_disable_action": "\u7981\u7528",
|
|
145
|
+
"core.settings.mfa_disable_factor_required": "\u8BF7\u8F93\u5165\u52A8\u6001\u53E3\u4EE4\u6216\u6062\u590D\u7801\u3002",
|
|
146
|
+
"core.settings.mfa_disable_success": "\u591A\u56E0\u7D20\u8BA4\u8BC1\u5DF2\u7981\u7528",
|
|
147
|
+
"core.settings.mfa_disable_title": "\u7981\u7528\u591A\u56E0\u7D20\u8BA4\u8BC1",
|
|
148
|
+
"core.settings.mfa_disabled": "\u672A\u542F\u7528",
|
|
149
|
+
"core.settings.mfa_enabled_method": "\u5DF2\u542F\u7528\uFF08{method}\uFF09",
|
|
150
|
+
"core.settings.mfa_method_totp": "TOTP",
|
|
151
|
+
"core.settings.mfa_method_webauthn": "WebAuthn",
|
|
152
|
+
"core.settings.mfa_title": "\u591A\u56E0\u7D20\u8BA4\u8BC1",
|
|
153
|
+
"core.settings.title": "\u8BBE\u7F6E",
|
|
121
154
|
"core.status.CONFIG_ERROR": "\u5BFC\u822A\u914D\u7F6E\u65E0\u6548",
|
|
122
155
|
"core.status.forbidden": "\u6682\u65E0\u8BBF\u95EE\u6743\u9650",
|
|
123
156
|
"core.status.NOT_FOUND": "\u9875\u9762\u4E0D\u5B58\u5728",
|
|
@@ -126,7 +159,11 @@ var zh_CN_default = {
|
|
|
126
159
|
"core.status.loading": "\u6B63\u5728\u52A0\u8F7D",
|
|
127
160
|
"core.webview.embed_blocked": "\u5F53\u524D H5 \u9875\u9762\u53EF\u80FD\u88AB\u76EE\u6807\u7AD9\u70B9\u9650\u5236\u5D4C\u5165",
|
|
128
161
|
"core.webview.invalid_url": "\u7F3A\u5C11\u6709\u6548\u94FE\u63A5\u5730\u5740",
|
|
129
|
-
"core.webview.open_failed": "\u94FE\u63A5\u65E0\u6CD5\u6253\u5F00"
|
|
162
|
+
"core.webview.open_failed": "\u94FE\u63A5\u65E0\u6CD5\u6253\u5F00",
|
|
163
|
+
"common.value.top_level": "\u9876\u7EA7\u8282\u70B9",
|
|
164
|
+
"common.resource.default": "{resource}",
|
|
165
|
+
"common.action.delete_resource": "\u5220\u9664{resource}",
|
|
166
|
+
"common.action.set_field_status": "\u8BBE\u7F6E{field}"
|
|
130
167
|
};
|
|
131
168
|
|
|
132
169
|
// src/locales/en-US.json
|
|
@@ -160,6 +197,8 @@ var en_US_default = {
|
|
|
160
197
|
"core.crypto.public_key_invalid": "Invalid public key",
|
|
161
198
|
"core.crypto.random_failed": "Failed to generate random data",
|
|
162
199
|
"core.crypto.unsupported": "Password encryption is not supported in this environment",
|
|
200
|
+
"core.password.verify_title": "Verify password",
|
|
201
|
+
"core.password.verify_label": "Current password",
|
|
163
202
|
"core.file.upload_failed": "Upload failed",
|
|
164
203
|
"core.home.account_capability": "Account features",
|
|
165
204
|
"core.home.account_capability_description": "Profile, app settings, and AI assistant access are included",
|
|
@@ -190,6 +229,23 @@ var en_US_default = {
|
|
|
190
229
|
"core.login.captcha_write_failed": "Failed to save verification image",
|
|
191
230
|
"core.login.default_sub_title": "Welcome",
|
|
192
231
|
"core.login.login_success": "Logged in",
|
|
232
|
+
"core.login.mfa_title": "Multi-factor authentication",
|
|
233
|
+
"core.login.mfa_code": "Enter the authenticator code",
|
|
234
|
+
"core.login.mfa_recovery_code": "Recovery code (optional)",
|
|
235
|
+
"core.login.mfa_setup_title": "Bind multi-factor authentication",
|
|
236
|
+
"core.login.mfa_copy_uri": "Copy binding address",
|
|
237
|
+
"core.login.mfa_copy_success": "Binding address copied",
|
|
238
|
+
"core.login.mfa_recovery_codes_copied": "Recovery codes copied",
|
|
239
|
+
"core.login.mfa_recovery_codes_title": "Save MFA recovery codes",
|
|
240
|
+
"core.login.mfa_recovery_codes_warning": "Each code works once and will not be shown again after this dialog closes.",
|
|
241
|
+
"core.login.mfa_copy_recovery_codes": "Copy recovery codes",
|
|
242
|
+
"core.login.mfa_recovery_codes_confirm": "I saved them",
|
|
243
|
+
"core.login.mfa_setup_success": "Multi-factor authentication enabled. Please sign in again.",
|
|
244
|
+
"core.login.mfa_webauthn_action": "Use passkey",
|
|
245
|
+
"core.login.mfa_webauthn_setup_unsupported": "WebAuthn is not supported on this platform. Use TOTP or a recovery code.",
|
|
246
|
+
"core.login.mfa_webauthn_setup_invalid": "WebAuthn registration did not return a valid credential.",
|
|
247
|
+
"core.login.mfa_webauthn_login_unsupported": "WebAuthn is not supported on this platform. Use a recovery code.",
|
|
248
|
+
"core.login.mfa_webauthn_login_invalid": "WebAuthn authentication did not return a valid credential.",
|
|
193
249
|
"core.login.password": "Enter password",
|
|
194
250
|
"core.login.privacy": "Privacy Policy",
|
|
195
251
|
"core.login.protocol_missing": "Terms of Service and Privacy Policy are not configured",
|
|
@@ -203,17 +259,15 @@ var en_US_default = {
|
|
|
203
259
|
"core.login.wechat_bind_tip": "This WeChat account is not linked. Log in to an existing account to link it.",
|
|
204
260
|
"core.login.wechat_failed": "WeChat login failed. Try again later.",
|
|
205
261
|
"core.navigation.home": "Home",
|
|
262
|
+
"core.navigation.message": "Messages",
|
|
206
263
|
"core.navigation.error.access": "Invalid menu access mode: {access}",
|
|
207
264
|
"core.navigation.error.child_tab": "Only second-level app menus can be tabs: {name}",
|
|
208
265
|
"core.navigation.error.cycle": "Menu parent cycle detected: {name}",
|
|
209
266
|
"core.navigation.error.identity": "Menu id, name, or app/ path is invalid",
|
|
210
|
-
"core.navigation.error.item_object": "Menu item is not an object",
|
|
211
|
-
"core.navigation.error.list_missing": "Menu response does not contain a flat list",
|
|
212
267
|
"core.navigation.error.name_prefix": "Menu name must start with App: {name}",
|
|
213
268
|
"core.navigation.error.parent_invalid": "Menu parent id is invalid: {name}",
|
|
214
269
|
"core.navigation.error.parent_missing": "Menu parent id is missing: {name}",
|
|
215
270
|
"core.navigation.error.parent_not_found": "Menu parent was not found: {name}",
|
|
216
|
-
"core.navigation.error.response_object": "Menu response is not an object",
|
|
217
271
|
"core.navigation.error.root_tab": "Second-level app menu must be a tab: {name}",
|
|
218
272
|
"core.navigation.error.tab_count": "tabBar must contain 0 or 2-5 items",
|
|
219
273
|
"core.navigation.error.unique": "Menu id, name, and path must be unique",
|
|
@@ -224,6 +278,22 @@ var en_US_default = {
|
|
|
224
278
|
"core.protocol.not_configured": "{title} is not configured and cannot be viewed",
|
|
225
279
|
"core.protocol.privacy": "Privacy Policy",
|
|
226
280
|
"core.protocol.service": "Terms of Service",
|
|
281
|
+
"core.settings.authorization": "Authorization settings",
|
|
282
|
+
"core.settings.contact": "Contact us",
|
|
283
|
+
"core.settings.feedback": "Feedback",
|
|
284
|
+
"core.settings.logout_confirm": "Log out now?",
|
|
285
|
+
"core.settings.logout_failed": "Logout failed",
|
|
286
|
+
"core.settings.mfa_bind_success": "Multi-factor authentication enabled",
|
|
287
|
+
"core.settings.mfa_disable_action": "Disable",
|
|
288
|
+
"core.settings.mfa_disable_factor_required": "Enter a TOTP code or recovery code.",
|
|
289
|
+
"core.settings.mfa_disable_success": "Multi-factor authentication disabled",
|
|
290
|
+
"core.settings.mfa_disable_title": "Disable multi-factor authentication",
|
|
291
|
+
"core.settings.mfa_disabled": "Not enabled",
|
|
292
|
+
"core.settings.mfa_enabled_method": "Enabled ({method})",
|
|
293
|
+
"core.settings.mfa_method_totp": "TOTP",
|
|
294
|
+
"core.settings.mfa_method_webauthn": "WebAuthn",
|
|
295
|
+
"core.settings.mfa_title": "Multi-factor authentication",
|
|
296
|
+
"core.settings.title": "Settings",
|
|
227
297
|
"core.status.CONFIG_ERROR": "Invalid navigation configuration",
|
|
228
298
|
"core.status.forbidden": "Access denied",
|
|
229
299
|
"core.status.NOT_FOUND": "Page not found",
|
|
@@ -232,7 +302,11 @@ var en_US_default = {
|
|
|
232
302
|
"core.status.loading": "Loading",
|
|
233
303
|
"core.webview.embed_blocked": "The destination may block embedding on H5",
|
|
234
304
|
"core.webview.invalid_url": "No valid link was provided",
|
|
235
|
-
"core.webview.open_failed": "Unable to open link"
|
|
305
|
+
"core.webview.open_failed": "Unable to open link",
|
|
306
|
+
"common.value.top_level": "Top level",
|
|
307
|
+
"common.resource.default": "{resource}",
|
|
308
|
+
"common.action.delete_resource": "Delete {resource}",
|
|
309
|
+
"common.action.set_field_status": "Set {field}"
|
|
236
310
|
};
|
|
237
311
|
|
|
238
312
|
// src/locales/ja-JP.json
|
|
@@ -266,6 +340,8 @@ var ja_JP_default = {
|
|
|
266
340
|
"core.crypto.public_key_invalid": "\u516C\u958B\u9375\u306E\u5F62\u5F0F\u304C\u7121\u52B9\u3067\u3059",
|
|
267
341
|
"core.crypto.random_failed": "\u4E71\u6570\u306E\u751F\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
|
|
268
342
|
"core.crypto.unsupported": "\u73FE\u5728\u306E\u74B0\u5883\u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u6697\u53F7\u5316\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093",
|
|
343
|
+
"core.password.verify_title": "\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u78BA\u8A8D",
|
|
344
|
+
"core.password.verify_label": "\u73FE\u5728\u306E\u30D1\u30B9\u30EF\u30FC\u30C9",
|
|
269
345
|
"core.file.upload_failed": "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
|
|
270
346
|
"core.home.account_capability": "\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u6A5F\u80FD",
|
|
271
347
|
"core.home.account_capability_description": "\u500B\u4EBA\u60C5\u5831\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u8A2D\u5B9A\u3001\u30B9\u30DE\u30FC\u30C8\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u5165\u53E3\u304C\u4E88\u7D04\u3055\u308C\u3066\u3044\u307E\u3059",
|
|
@@ -296,6 +372,23 @@ var ja_JP_default = {
|
|
|
296
372
|
"core.login.captcha_write_failed": "\u691C\u8A3C\u30B3\u30FC\u30C9\u30A4\u30E1\u30FC\u30B8\u306E\u66F8\u304D\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
|
|
297
373
|
"core.login.default_sub_title": "\u3053\u306E\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3078\u3088\u3046\u3053\u305D",
|
|
298
374
|
"core.login.login_success": "\u30ED\u30B0\u30A4\u30F3\u306B\u6210\u529F\u3057\u307E\u3057\u305F",
|
|
375
|
+
"core.login.mfa_title": "\u591A\u8981\u7D20\u8A8D\u8A3C",
|
|
376
|
+
"core.login.mfa_code": "\u8A8D\u8A3C\u30B3\u30FC\u30C9\u3092\u5165\u529B",
|
|
377
|
+
"core.login.mfa_recovery_code": "\u30EA\u30AB\u30D0\u30EA\u30FC\u30B3\u30FC\u30C9\uFF08\u4EFB\u610F\uFF09",
|
|
378
|
+
"core.login.mfa_setup_title": "\u591A\u8981\u7D20\u8A8D\u8A3C\u3092\u8A2D\u5B9A",
|
|
379
|
+
"core.login.mfa_copy_uri": "\u767B\u9332\u30A2\u30C9\u30EC\u30B9\u3092\u30B3\u30D4\u30FC",
|
|
380
|
+
"core.login.mfa_copy_success": "\u767B\u9332\u30A2\u30C9\u30EC\u30B9\u3092\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F",
|
|
381
|
+
"core.login.mfa_recovery_codes_copied": "\u30EA\u30AB\u30D0\u30EA\u30FC\u30B3\u30FC\u30C9\u3092\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F",
|
|
382
|
+
"core.login.mfa_recovery_codes_title": "MFA \u30EA\u30AB\u30D0\u30EA\u30FC\u30B3\u30FC\u30C9\u3092\u4FDD\u5B58",
|
|
383
|
+
"core.login.mfa_recovery_codes_warning": "\u5404\u30B3\u30FC\u30C9\u306F\u4E00\u5EA6\u3060\u3051\u4F7F\u7528\u3067\u304D\u3001\u30C0\u30A4\u30A2\u30ED\u30B0\u3092\u9589\u3058\u308B\u3068\u518D\u8868\u793A\u3055\u308C\u307E\u305B\u3093\u3002",
|
|
384
|
+
"core.login.mfa_copy_recovery_codes": "\u30EA\u30AB\u30D0\u30EA\u30FC\u30B3\u30FC\u30C9\u3092\u30B3\u30D4\u30FC",
|
|
385
|
+
"core.login.mfa_recovery_codes_confirm": "\u4FDD\u5B58\u3057\u307E\u3057\u305F",
|
|
386
|
+
"core.login.mfa_setup_success": "\u591A\u8981\u7D20\u8A8D\u8A3C\u3092\u8A2D\u5B9A\u3057\u307E\u3057\u305F\u3002\u518D\u5EA6\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
387
|
+
"core.login.mfa_webauthn_action": "\u30D1\u30B9\u30AD\u30FC\u3092\u4F7F\u7528",
|
|
388
|
+
"core.login.mfa_webauthn_setup_unsupported": "\u3053\u306E\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u306F WebAuthn \u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\u3002TOTP \u307E\u305F\u306F\u30EA\u30AB\u30D0\u30EA\u30FC\u30B3\u30FC\u30C9\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
389
|
+
"core.login.mfa_webauthn_setup_invalid": "WebAuthn \u767B\u9332\u3067\u6709\u52B9\u306A\u30AF\u30EC\u30C7\u30F3\u30B7\u30E3\u30EB\u304C\u8FD4\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002",
|
|
390
|
+
"core.login.mfa_webauthn_login_unsupported": "\u3053\u306E\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u306F WebAuthn \u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u30EA\u30AB\u30D0\u30EA\u30FC\u30B3\u30FC\u30C9\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
391
|
+
"core.login.mfa_webauthn_login_invalid": "WebAuthn \u8A8D\u8A3C\u3067\u6709\u52B9\u306A\u30AF\u30EC\u30C7\u30F3\u30B7\u30E3\u30EB\u304C\u8FD4\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002",
|
|
299
392
|
"core.login.password": "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
300
393
|
"core.login.privacy": "\u300C\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u540C\u610F\u66F8\u300D",
|
|
301
394
|
"core.login.protocol_missing": "\u5229\u7528\u898F\u7D04\u3068\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u898F\u7D04\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
|
|
@@ -309,17 +402,15 @@ var ja_JP_default = {
|
|
|
309
402
|
"core.login.wechat_bind_tip": "\u3053\u306E WeChat \u30A2\u30AB\u30A6\u30F3\u30C8\u306F\u307E\u3060\u30D0\u30A4\u30F3\u30C9\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u30D0\u30A4\u30F3\u30C9\u3092\u5B8C\u4E86\u3059\u308B\u306B\u306F\u3001\u65E2\u5B58\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
310
403
|
"core.login.wechat_failed": "WeChat \u30ED\u30B0\u30A4\u30F3\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u5F8C\u3067\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
311
404
|
"core.navigation.home": "\u30DB\u30FC\u30E0",
|
|
405
|
+
"core.navigation.message": "\u30E1\u30C3\u30BB\u30FC\u30B8",
|
|
312
406
|
"core.navigation.error.access": "\u7121\u52B9\u306A\u30E1\u30CB\u30E5\u30FC \u30A2\u30AF\u30BB\u30B9 \u30E2\u30FC\u30C9: {access}",
|
|
313
407
|
"core.navigation.error.child_tab": "\u30E2\u30D0\u30A4\u30EB \u30BB\u30AB\u30F3\u30C0\u30EA \u30E1\u30CB\u30E5\u30FC\u306E\u307F\u304C\u30BF\u30D6\u3068\u3057\u3066\u4F7F\u7528\u3067\u304D\u307E\u3059: {name}",
|
|
314
408
|
"core.navigation.error.cycle": "\u30E2\u30D0\u30A4\u30EB \u30E1\u30CB\u30E5\u30FC\u306B\u306F\u30EB\u30FC\u30D7\u306E\u89AA\u304C\u3042\u308A\u307E\u3059: {name}",
|
|
315
409
|
"core.navigation.error.identity": "\u30E1\u30CB\u30E5\u30FC ID\u3001\u540D\u524D\u3001\u307E\u305F\u306F\u30A2\u30D7\u30EA/\u30D1\u30B9\u304C\u7121\u52B9\u3067\u3059",
|
|
316
|
-
"core.navigation.error.item_object": "\u30E1\u30CB\u30E5\u30FC\u9805\u76EE\u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093",
|
|
317
|
-
"core.navigation.error.list_missing": "\u30E1\u30CB\u30E5\u30FC\u5FDC\u7B54\u306B\u30D5\u30E9\u30C3\u30C8 \u30EA\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093",
|
|
318
410
|
"core.navigation.error.name_prefix": "\u30E1\u30CB\u30E5\u30FC\u540D\u306B\u306F\u30A2\u30D7\u30EA\u306E\u63A5\u982D\u8F9E\u3092\u4F7F\u7528\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059: {name}",
|
|
319
411
|
"core.navigation.error.parent_invalid": "\u30E2\u30D0\u30A4\u30EB \u30E1\u30CB\u30E5\u30FC\u306E\u89AA\u756A\u53F7\u304C\u7121\u52B9\u3067\u3059: {name}",
|
|
320
412
|
"core.navigation.error.parent_missing": "\u30E1\u30CB\u30E5\u30FC\u306B\u89AA\u756A\u53F7\u304C\u3042\u308A\u307E\u305B\u3093: {name}",
|
|
321
413
|
"core.navigation.error.parent_not_found": "\u30E2\u30D0\u30A4\u30EB \u30E1\u30CB\u30E5\u30FC\u306E\u89AA\u304C\u5B58\u5728\u3057\u307E\u305B\u3093: {name}",
|
|
322
|
-
"core.navigation.error.response_object": "\u30E1\u30CB\u30E5\u30FC\u5FDC\u7B54\u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093",
|
|
323
414
|
"core.navigation.error.root_tab": "\u30E2\u30D0\u30A4\u30EB \u30BB\u30AB\u30F3\u30C0\u30EA \u30E1\u30CB\u30E5\u30FC\u306F\u30BF\u30D6\u3068\u3057\u3066\u4F7F\u7528\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059: {name}",
|
|
324
415
|
"core.navigation.error.tab_count": "tabBar \u306F 0 \u307E\u305F\u306F 2 \uFF5E 5 \u500B\u306E\u9805\u76EE\u306E\u307F\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059",
|
|
325
416
|
"core.navigation.error.unique": "\u30E1\u30CB\u30E5\u30FC ID\u3001\u540D\u524D\u3001\u30D1\u30B9\u306F\u4E00\u610F\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
|
|
@@ -330,6 +421,22 @@ var ja_JP_default = {
|
|
|
330
421
|
"core.protocol.not_configured": "{title} \u306F\u69CB\u6210\u3055\u308C\u3066\u3044\u306A\u3044\u305F\u3081\u3001\u4E00\u6642\u7684\u306B\u8868\u793A\u3067\u304D\u307E\u305B\u3093\u3002",
|
|
331
422
|
"core.protocol.privacy": "\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u898F\u7D04",
|
|
332
423
|
"core.protocol.service": "\u5229\u7528\u898F\u7D04",
|
|
424
|
+
"core.settings.authorization": "\u8A8D\u53EF\u7BA1\u7406",
|
|
425
|
+
"core.settings.contact": "\u304A\u554F\u3044\u5408\u308F\u305B",
|
|
426
|
+
"core.settings.feedback": "\u554F\u984C\u306E\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF",
|
|
427
|
+
"core.settings.logout_confirm": "\u30ED\u30B0\u30A2\u30A6\u30C8\u3057\u307E\u3059\u304B?",
|
|
428
|
+
"core.settings.logout_failed": "\u30ED\u30B0\u30A2\u30A6\u30C8\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
|
|
429
|
+
"core.settings.mfa_bind_success": "\u591A\u8981\u7D20\u8A8D\u8A3C\u3092\u6709\u52B9\u306B\u3057\u307E\u3057\u305F",
|
|
430
|
+
"core.settings.mfa_disable_action": "\u7121\u52B9\u306B\u3059\u308B",
|
|
431
|
+
"core.settings.mfa_disable_factor_required": "TOTP \u30B3\u30FC\u30C9\u307E\u305F\u306F\u30EA\u30AB\u30D0\u30EA\u30FC\u30B3\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
432
|
+
"core.settings.mfa_disable_success": "\u591A\u8981\u7D20\u8A8D\u8A3C\u3092\u7121\u52B9\u306B\u3057\u307E\u3057\u305F",
|
|
433
|
+
"core.settings.mfa_disable_title": "\u591A\u8981\u7D20\u8A8D\u8A3C\u3092\u7121\u52B9\u5316",
|
|
434
|
+
"core.settings.mfa_disabled": "\u672A\u8A2D\u5B9A",
|
|
435
|
+
"core.settings.mfa_enabled_method": "\u6709\u52B9\uFF08{method}\uFF09",
|
|
436
|
+
"core.settings.mfa_method_totp": "TOTP",
|
|
437
|
+
"core.settings.mfa_method_webauthn": "WebAuthn",
|
|
438
|
+
"core.settings.mfa_title": "\u591A\u8981\u7D20\u8A8D\u8A3C",
|
|
439
|
+
"core.settings.title": "\u8A2D\u5B9A",
|
|
333
440
|
"core.status.CONFIG_ERROR": "\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u69CB\u6210\u304C\u7121\u52B9\u3067\u3059",
|
|
334
441
|
"core.status.forbidden": "\u307E\u3060\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093",
|
|
335
442
|
"core.status.NOT_FOUND": "\u30DA\u30FC\u30B8\u304C\u5B58\u5728\u3057\u307E\u305B\u3093",
|
|
@@ -338,7 +445,11 @@ var ja_JP_default = {
|
|
|
338
445
|
"core.status.loading": "\u3092\u30ED\u30FC\u30C9\u4E2D\u3067\u3059",
|
|
339
446
|
"core.webview.embed_blocked": "\u73FE\u5728\u306E H5 \u30DA\u30FC\u30B8\u306F\u3001\u30BF\u30FC\u30B2\u30C3\u30C8 \u30B5\u30A4\u30C8\u306B\u3088\u3063\u3066\u57CB\u3081\u8FBC\u307F\u304C\u5236\u9650\u3055\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059",
|
|
340
447
|
"core.webview.invalid_url": "\u6709\u52B9\u306A\u30EA\u30F3\u30AF \u30A2\u30C9\u30EC\u30B9\u304C\u3042\u308A\u307E\u305B\u3093",
|
|
341
|
-
"core.webview.open_failed": "\u30EA\u30F3\u30AF\u3092\u958B\u3051\u307E\u305B\u3093"
|
|
448
|
+
"core.webview.open_failed": "\u30EA\u30F3\u30AF\u3092\u958B\u3051\u307E\u305B\u3093",
|
|
449
|
+
"common.value.top_level": "\u30C8\u30C3\u30D7\u30EC\u30D9\u30EB",
|
|
450
|
+
"common.resource.default": "{resource}",
|
|
451
|
+
"common.action.delete_resource": "{resource}\u3092\u524A\u9664",
|
|
452
|
+
"common.action.set_field_status": "{field}\u3092\u8A2D\u5B9A"
|
|
342
453
|
};
|
|
343
454
|
|
|
344
455
|
// src/locales/zh-TW.json
|
|
@@ -372,6 +483,8 @@ var zh_TW_default = {
|
|
|
372
483
|
"core.crypto.public_key_invalid": "\u516C\u9470\u683C\u5F0F\u7121\u6548",
|
|
373
484
|
"core.crypto.random_failed": "\u96A8\u6A5F\u6578\u751F\u6210\u5931\u6557",
|
|
374
485
|
"core.crypto.unsupported": "\u7576\u524D\u74B0\u5883\u4E0D\u652F\u63F4\u5BC6\u78BC\u52A0\u5BC6",
|
|
486
|
+
"core.password.verify_title": "\u9A57\u8B49\u5BC6\u78BC",
|
|
487
|
+
"core.password.verify_label": "\u7576\u524D\u5BC6\u78BC",
|
|
375
488
|
"core.file.upload_failed": "\u4E0A\u50B3\u5931\u6557",
|
|
376
489
|
"core.home.account_capability": "\u8CEC\u6236\u80FD\u529B",
|
|
377
490
|
"core.home.account_capability_description": "\u500B\u4EBA\u8CC7\u6599\u3001\u61C9\u7528\u8A2D\u5B9A\u8207\u667A\u6167\u52A9\u624B\u5165\u53E3\u5DF2\u4FDD\u7559",
|
|
@@ -402,6 +515,23 @@ var zh_TW_default = {
|
|
|
402
515
|
"core.login.captcha_write_failed": "\u9A57\u8B49\u78BC\u5716\u7247\u5BEB\u5165\u5931\u6557",
|
|
403
516
|
"core.login.default_sub_title": "\u6B61\u8FCE\u4F7F\u7528\u672C\u61C9\u7528",
|
|
404
517
|
"core.login.login_success": "\u767B\u5165\u6210\u529F",
|
|
518
|
+
"core.login.mfa_title": "\u591A\u56E0\u7D20\u8A8D\u8B49",
|
|
519
|
+
"core.login.mfa_code": "\u8ACB\u8F38\u5165\u52D5\u614B\u5BC6\u78BC",
|
|
520
|
+
"core.login.mfa_recovery_code": "\u6062\u5FA9\u78BC\uFF08\u53EF\u9078\uFF09",
|
|
521
|
+
"core.login.mfa_setup_title": "\u7D81\u5B9A\u591A\u56E0\u7D20\u8A8D\u8B49",
|
|
522
|
+
"core.login.mfa_copy_uri": "\u8907\u88FD\u7D81\u5B9A\u5730\u5740",
|
|
523
|
+
"core.login.mfa_copy_success": "\u7D81\u5B9A\u5730\u5740\u5DF2\u8907\u88FD",
|
|
524
|
+
"core.login.mfa_recovery_codes_copied": "\u6062\u5FA9\u78BC\u5DF2\u8907\u88FD",
|
|
525
|
+
"core.login.mfa_recovery_codes_title": "\u5132\u5B58 MFA \u6062\u5FA9\u78BC",
|
|
526
|
+
"core.login.mfa_recovery_codes_warning": "\u6BCF\u500B\u6062\u5FA9\u78BC\u53EA\u80FD\u4F7F\u7528\u4E00\u6B21\uFF0C\u95DC\u9589\u6B64\u8996\u7A97\u5F8C\u4E0D\u6703\u518D\u6B21\u986F\u793A\u3002",
|
|
527
|
+
"core.login.mfa_copy_recovery_codes": "\u8907\u88FD\u6062\u5FA9\u78BC",
|
|
528
|
+
"core.login.mfa_recovery_codes_confirm": "\u6211\u5DF2\u5132\u5B58",
|
|
529
|
+
"core.login.mfa_setup_success": "\u591A\u56E0\u7D20\u8A8D\u8B49\u7D81\u5B9A\u6210\u529F\uFF0C\u8ACB\u91CD\u65B0\u767B\u5165\u3002",
|
|
530
|
+
"core.login.mfa_webauthn_action": "\u4F7F\u7528 Passkey",
|
|
531
|
+
"core.login.mfa_webauthn_setup_unsupported": "\u76EE\u524D\u5E73\u53F0\u4E0D\u652F\u63F4 WebAuthn\uFF0C\u8ACB\u4F7F\u7528 TOTP \u6216\u6062\u5FA9\u78BC\u3002",
|
|
532
|
+
"core.login.mfa_webauthn_setup_invalid": "WebAuthn \u8A3B\u518A\u672A\u56DE\u50B3\u6709\u6548\u6191\u8B49\u3002",
|
|
533
|
+
"core.login.mfa_webauthn_login_unsupported": "\u76EE\u524D\u5E73\u53F0\u4E0D\u652F\u63F4 WebAuthn\uFF0C\u8ACB\u4F7F\u7528\u6062\u5FA9\u78BC\u3002",
|
|
534
|
+
"core.login.mfa_webauthn_login_invalid": "WebAuthn \u767B\u5165\u672A\u56DE\u50B3\u6709\u6548\u6191\u8B49\u3002",
|
|
405
535
|
"core.login.password": "\u8ACB\u8F38\u5165\u5BC6\u78BC",
|
|
406
536
|
"core.login.privacy": "\u300A\u96B1\u79C1\u5354\u8B70\u300B",
|
|
407
537
|
"core.login.protocol_missing": "\u670D\u52D9\u689D\u6B3E\u548C\u96B1\u79C1\u5354\u8B70\u672A\u914D\u7F6E",
|
|
@@ -415,17 +545,15 @@ var zh_TW_default = {
|
|
|
415
545
|
"core.login.wechat_bind_tip": "\u8A72\u5FAE\u4FE1\u5C1A\u672A\u7E6B\u7D50\uFF0C\u8ACB\u767B\u5165\u5DF2\u6709\u8CEC\u865F\u5B8C\u6210\u7E6B\u7D50",
|
|
416
546
|
"core.login.wechat_failed": "\u5FAE\u4FE1\u767B\u5165\u5931\u6557\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",
|
|
417
547
|
"core.navigation.home": "\u9996\u9801",
|
|
548
|
+
"core.navigation.message": "\u6D88\u606F",
|
|
418
549
|
"core.navigation.error.access": "\u9078\u55AE\u8A2A\u554F\u6A21\u5F0F\u7121\u6548\uFF1A{access}",
|
|
419
550
|
"core.navigation.error.child_tab": "\u53EA\u6709\u79FB\u52D5\u7AEF\u4E8C\u7D1A\u9078\u55AE\u53EF\u4EE5\u4F5C\u70BA tab\uFF1A{name}",
|
|
420
551
|
"core.navigation.error.cycle": "\u79FB\u52D5\u7AEF\u9078\u55AE\u5B58\u5728\u8FF4\u5708\u7236\u7D1A\uFF1A{name}",
|
|
421
552
|
"core.navigation.error.identity": "\u9078\u55AE id\u3001name \u6216 app/ \u8DEF\u5F91\u7121\u6548",
|
|
422
|
-
"core.navigation.error.item_object": "\u9078\u55AE\u9805\u4E0D\u662F\u7269\u4EF6",
|
|
423
|
-
"core.navigation.error.list_missing": "\u9078\u55AE\u97FF\u61C9\u7F3A\u5C11\u6241\u5E73\u5217\u8868",
|
|
424
553
|
"core.navigation.error.name_prefix": "\u9078\u55AE\u540D\u7A31\u5FC5\u9808\u4F7F\u7528 App \u5B57\u9996\uFF1A{name}",
|
|
425
554
|
"core.navigation.error.parent_invalid": "\u79FB\u52D5\u7AEF\u9078\u55AE\u7236\u7D1A\u7DE8\u865F\u7121\u6548\uFF1A{name}",
|
|
426
555
|
"core.navigation.error.parent_missing": "\u9078\u55AE\u7F3A\u5C11\u7236\u7D1A\u7DE8\u865F\uFF1A{name}",
|
|
427
556
|
"core.navigation.error.parent_not_found": "\u79FB\u52D5\u7AEF\u9078\u55AE\u7236\u7D1A\u4E0D\u5B58\u5728\uFF1A{name}",
|
|
428
|
-
"core.navigation.error.response_object": "\u9078\u55AE\u97FF\u61C9\u4E0D\u662F\u7269\u4EF6",
|
|
429
557
|
"core.navigation.error.root_tab": "\u79FB\u52D5\u7AEF\u4E8C\u7D1A\u9078\u55AE\u5FC5\u9808\u4F5C\u70BA tab\uFF1A{name}",
|
|
430
558
|
"core.navigation.error.tab_count": "tabBar \u53EA\u80FD\u914D\u7F6E 0 \u6216 2-5 \u9805",
|
|
431
559
|
"core.navigation.error.unique": "\u9078\u55AE id\u3001name\u3001path \u5FC5\u9808\u552F\u4E00",
|
|
@@ -436,6 +564,22 @@ var zh_TW_default = {
|
|
|
436
564
|
"core.protocol.not_configured": "{title}\u672A\u914D\u7F6E\uFF0C\u66AB\u6642\u7121\u6CD5\u6AA2\u8996",
|
|
437
565
|
"core.protocol.privacy": "\u96B1\u79C1\u5354\u8B70",
|
|
438
566
|
"core.protocol.service": "\u670D\u52D9\u689D\u6B3E",
|
|
567
|
+
"core.settings.authorization": "\u6388\u6B0A\u7BA1\u7406",
|
|
568
|
+
"core.settings.contact": "\u806F\u7D61\u6211\u5011",
|
|
569
|
+
"core.settings.feedback": "\u554F\u984C\u53CD\u994B",
|
|
570
|
+
"core.settings.logout_confirm": "\u662F\u5426\u9000\u51FA\u767B\u5165\uFF1F",
|
|
571
|
+
"core.settings.logout_failed": "\u9000\u51FA\u767B\u5165\u5931\u6557",
|
|
572
|
+
"core.settings.mfa_bind_success": "\u591A\u56E0\u7D20\u8A8D\u8B49\u7D81\u5B9A\u6210\u529F",
|
|
573
|
+
"core.settings.mfa_disable_action": "\u505C\u7528",
|
|
574
|
+
"core.settings.mfa_disable_factor_required": "\u8ACB\u8F38\u5165\u52D5\u614B\u5BC6\u78BC\u6216\u6062\u5FA9\u78BC\u3002",
|
|
575
|
+
"core.settings.mfa_disable_success": "\u591A\u56E0\u7D20\u8A8D\u8B49\u5DF2\u505C\u7528",
|
|
576
|
+
"core.settings.mfa_disable_title": "\u505C\u7528\u591A\u56E0\u7D20\u8A8D\u8B49",
|
|
577
|
+
"core.settings.mfa_disabled": "\u672A\u555F\u7528",
|
|
578
|
+
"core.settings.mfa_enabled_method": "\u5DF2\u555F\u7528\uFF08{method}\uFF09",
|
|
579
|
+
"core.settings.mfa_method_totp": "TOTP",
|
|
580
|
+
"core.settings.mfa_method_webauthn": "WebAuthn",
|
|
581
|
+
"core.settings.mfa_title": "\u591A\u56E0\u7D20\u8A8D\u8B49",
|
|
582
|
+
"core.settings.title": "\u8A2D\u5B9A",
|
|
439
583
|
"core.status.CONFIG_ERROR": "\u5C0E\u822A\u914D\u7F6E\u7121\u6548",
|
|
440
584
|
"core.status.forbidden": "\u66AB\u7121\u8A2A\u554F\u8A31\u53EF\u6B0A",
|
|
441
585
|
"core.status.NOT_FOUND": "\u9801\u9762\u4E0D\u5B58\u5728",
|
|
@@ -444,7 +588,11 @@ var zh_TW_default = {
|
|
|
444
588
|
"core.status.loading": "\u6B63\u5728\u8F09\u5165",
|
|
445
589
|
"core.webview.embed_blocked": "\u7576\u524D H5 \u9801\u9762\u53EF\u80FD\u88AB\u76EE\u6A19\u7AD9\u9EDE\u9650\u5236\u5D4C\u5165",
|
|
446
590
|
"core.webview.invalid_url": "\u7F3A\u5C11\u6709\u6548\u9023\u7D50\u5730\u5740",
|
|
447
|
-
"core.webview.open_failed": "\u9023\u7D50\u7121\u6CD5\u958B\u555F"
|
|
591
|
+
"core.webview.open_failed": "\u9023\u7D50\u7121\u6CD5\u958B\u555F",
|
|
592
|
+
"common.value.top_level": "\u9802\u7D1A\u7BC0\u9EDE",
|
|
593
|
+
"common.resource.default": "{resource}",
|
|
594
|
+
"common.action.delete_resource": "\u522A\u9664{resource}",
|
|
595
|
+
"common.action.set_field_status": "\u8A2D\u5B9A{field}"
|
|
448
596
|
};
|
|
449
597
|
|
|
450
598
|
// src/locales/generated.ts
|
package/dist/vite.mjs
CHANGED
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
readFileSync,
|
|
7
7
|
readdirSync,
|
|
8
8
|
rmdirSync,
|
|
9
|
-
rmSync,
|
|
10
9
|
statSync,
|
|
11
10
|
unlinkSync,
|
|
12
11
|
writeFileSync
|
|
@@ -284,12 +283,9 @@ function restoreBuildTransaction(transaction, transactionFile) {
|
|
|
284
283
|
removeEmptyParents(dirname(file), transaction.inputDir);
|
|
285
284
|
}
|
|
286
285
|
removeGeneratedStaticFiles(
|
|
287
|
-
transaction.generatedStaticFiles
|
|
286
|
+
transaction.generatedStaticFiles,
|
|
288
287
|
resolve(transaction.inputDir, "static")
|
|
289
288
|
);
|
|
290
|
-
if (transaction.generatedStatic && transaction.generatedStaticFiles === void 0) {
|
|
291
|
-
rmSync(resolve(transaction.inputDir, "static"), { recursive: true, force: true });
|
|
292
|
-
}
|
|
293
289
|
writeFileSync(transaction.pagesFile, transaction.originalPages);
|
|
294
290
|
if (existsSync(transactionFile))
|
|
295
291
|
unlinkSync(transactionFile);
|
|
@@ -505,10 +501,13 @@ function appendPage(manifest, page) {
|
|
|
505
501
|
function createPageWrapper(page) {
|
|
506
502
|
const source = page.source.replace(/\\/g, "/");
|
|
507
503
|
return `<script setup lang="ts">
|
|
504
|
+
import { onShow } from '@dcloudio/uni-app'
|
|
505
|
+
import { setAppPageTitle } from '@liujitcn/kratos-uni-app-core'
|
|
508
506
|
import KratosPage from ${JSON.stringify(source)}
|
|
509
507
|
import KratosTabBar from '@liujitcn/kratos-uni-app-core/components/KratosTabBar.vue'
|
|
510
508
|
|
|
511
509
|
defineOptions({ inheritAttrs: false })
|
|
510
|
+
onShow(() => setAppPageTitle(${JSON.stringify(page.route)}))
|
|
512
511
|
</script>
|
|
513
512
|
|
|
514
513
|
<template>
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "git@github.com:liujitcn/kratos-admin.git"
|
|
9
9
|
},
|
|
10
|
-
"version": "0.0.
|
|
10
|
+
"version": "0.0.32",
|
|
11
11
|
"type": "module",
|
|
12
12
|
"files": [
|
|
13
13
|
"dist",
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"./components/*.vue": "./src/components/*.vue",
|
|
26
26
|
"./rpc/*": "./src/rpc/*",
|
|
27
27
|
"./stores": "./src/stores/index.ts",
|
|
28
|
+
"./navigation": "./src/navigation.ts",
|
|
28
29
|
"./static/*": "./src/static/*",
|
|
29
30
|
"./styles/base.scss": "./src/styles/base.scss",
|
|
30
31
|
"./uni.scss": "./src/uni.scss",
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
"go-captcha-uni": "1.0.6",
|
|
49
50
|
"pinia": "^2.0.27",
|
|
50
51
|
"pinia-plugin-persistedstate": "^3.2.0",
|
|
52
|
+
"qrcode-generator": "^2.0.4",
|
|
51
53
|
"vite": "5.2.8",
|
|
52
54
|
"vue": "^3.4.21"
|
|
53
55
|
},
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { http } from '
|
|
2
|
-
import type {
|
|
1
|
+
import { http } from '../../../utils/http'
|
|
2
|
+
import type {
|
|
3
|
+
ConfigService,
|
|
4
|
+
GetConfigRequest,
|
|
5
|
+
GetConfigResponse,
|
|
6
|
+
} from '../../../rpc/base/v1/config'
|
|
3
7
|
|
|
4
8
|
const CONFIG_URL = '/v1/base/config'
|
|
5
9
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { http } from '
|
|
2
|
-
import type {
|
|
1
|
+
import { http } from '../../../utils/http'
|
|
2
|
+
import type {
|
|
3
|
+
DownloadFileRequest,
|
|
4
|
+
MultiUploadFileResponse,
|
|
5
|
+
FileInfo,
|
|
6
|
+
} from '../../../rpc/base/v1/file'
|
|
3
7
|
|
|
4
8
|
const FILE_URL = '/v1/base/file'
|
|
5
9
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { http } from '
|
|
1
|
+
import { http } from '../../../utils/http'
|
|
2
2
|
import type {
|
|
3
3
|
OptionLanguageRequest,
|
|
4
4
|
OptionLanguageResponse,
|
|
5
5
|
LanguageService,
|
|
6
|
-
} from '
|
|
6
|
+
} from '../../../rpc/base/v1/language'
|
|
7
7
|
|
|
8
8
|
const LANGUAGE_URL = '/v1/base/language'
|
|
9
9
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { http } from '
|
|
1
|
+
import { http } from '../../../utils/http'
|
|
2
2
|
import type {
|
|
3
3
|
CaptchaRequest,
|
|
4
4
|
CaptchaResponse,
|
|
@@ -12,8 +12,8 @@ import type {
|
|
|
12
12
|
VerifyCaptchaRequest,
|
|
13
13
|
VerifyCaptchaResponse,
|
|
14
14
|
LoginService,
|
|
15
|
-
} from '
|
|
16
|
-
import type { Empty } from '
|
|
15
|
+
} from '../../../rpc/base/v1/login'
|
|
16
|
+
import type { Empty } from '../../../rpc/google/protobuf/empty'
|
|
17
17
|
|
|
18
18
|
const CAPTCHA_URL = '/v1/base/captcha'
|
|
19
19
|
const CAPTCHA_VERIFY_URL = '/v1/base/captcha/verify'
|