gc_i18n 1.3.13 → 1.4.1

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.
@@ -7,11 +7,13 @@
7
7
  - [service.js](file://packages/libs/service.js) - *在最近的提交中更新,包含关键逻辑变更*
8
8
  - [utils.js](file://packages/libs/utils.js) - *在最近的提交中更新,包含 mergeArraysByKey 函数*
9
9
  - [packages/index.js](file://packages/index.js) - *库的入口点,包含初始化逻辑*
10
+ - [package.json](file://package.json) - *版本信息,从1.3.12升级到1.3.13*
10
11
  </cite>
11
12
 
12
13
  ## 更新摘要
13
14
  **变更内容**
14
- - 更新了服务端点路径:`/i18n-web/sysoption/getsupportedlangs` 已更新为 `/i18n-web/app/getsupportedlangs`
15
+ - 移除了 `fetchTranslate` 函数中的 `page` 参数,更新了函数签名和参数说明
16
+ - 版本从 1.3.12 升级到 1.3.13
15
17
  - 更新了 `service.js` 中 `getTranslate` 方法的文档,以反映其新的行为:当返回 `common` 类型的翻译时,会移除当前路由的数据
16
18
  - 更新了 `gc_i18n.es.js` 中 `$t` 方法的文档,详细说明了其新的查找优先级:先查找 `route.key`,再查找 `common.key`,最后查找全局 `key`
17
19
  - 更新了 `utils.js` 中 `mergeArraysByKey` 函数的文档,说明了其在合并数据时会移除与 `common` 键匹配的当前路由数据
@@ -74,7 +76,7 @@ $t(key: string): string
74
76
  **更新** 该方法的查找逻辑已更新,优先级为:`当前路由名.key` > `common.key` > `key`。
75
77
 
76
78
  **Section sources**
77
- - [gc_i18n.es.js](file://lib/gc_i18n.es.js#L272-L297) - *更新了 $t 方法的实现*
79
+ - [gc_i18n.es.js:272-297](file://lib/gc_i18n.es.js#L272-L297) - *更新了 $t 方法的实现*
78
80
  - [src/view/Home.vue](file://src/view/Home.vue#L19)
79
81
  - [src/view/login.vue](file://src/view/login.vue#L10)
80
82
 
@@ -108,7 +110,7 @@ $changeLocale(locale: string): Promise<void>
108
110
  **更新** 该方法的实现已更新,现在通过调用 `setLanguage` 方法来完成核心逻辑。
109
111
 
110
112
  **Section sources**
111
- - [gc_i18n.es.js](file://lib/gc_i18n.es.js#L316-L321) - *更新了 $changeLocale 方法的实现*
113
+ - [gc_i18n.es.js:316-321](file://lib/gc_i18n.es.js#L316-L321) - *更新了 $changeLocale 方法的实现*
112
114
  - [src/view/Home.vue](file://src/view/Home.vue#L2)
113
115
  - [src/view/login.vue](file://src/view/login.vue#L2)
114
116
 
@@ -139,7 +141,7 @@ function extractTranslationKeys(component: any): string[]
139
141
  - 开发者手动检查组件,以确保所有翻译键都已定义。
140
142
 
141
143
  **Section sources**
142
- - [i18nUtils.ts](file://packages/libs/i18nUtils.ts#L1-L54) - *文件内容未变,但其提取的键会影响 $t 的行为*
144
+ - [i18nUtils.ts:1-54](file://packages/libs/i18nUtils.ts#L1-L54) - *文件内容未变,但其提取的键会影响 $t 的行为*
143
145
 
144
146
  ## service.js 异步接口
145
147
  `service.js` 封装了与后端语言服务通信的异步接口,负责获取和管理翻译数据。
@@ -160,20 +162,17 @@ getLanguages({ baseUrl, token, appCode }: { baseUrl: string; token: string; appC
160
162
  **返回值**
161
163
  - `Promise<any>` - 一个 Promise,resolve 时返回包含支持语言列表的响应对象。
162
164
 
163
- **更新** 服务端点已从 `/i18n-web/sysoption/getsupportedlangs` 更新为 `/i18n-web/app/getsupportedlangs`。
164
-
165
165
  **Section sources**
166
- - [service.js](file://packages/libs/service.js#L10-L19)
166
+ - [service.js:63-72](file://packages/libs/service.js#L63-L72)
167
167
 
168
168
  ### fetchTranslate (获取翻译数据)
169
- 根据应用代码、语言、页面等信息,从后端获取翻译数据。
169
+ 根据应用代码、语言等信息,从后端获取翻译数据。
170
170
 
171
171
  **方法签名**
172
172
  ```typescript
173
- fetchTranslate({ appCode, language, page, lastPullDate, baseUrl, token }: {
173
+ fetchTranslate({ appCode, language, lastPullDate, baseUrl, token }: {
174
174
  appCode: string;
175
175
  language?: string;
176
- page?: string;
177
176
  lastPullDate?: string;
178
177
  baseUrl: string;
179
178
  token: string;
@@ -183,7 +182,6 @@ fetchTranslate({ appCode, language, page, lastPullDate, baseUrl, token }: {
183
182
  **参数**
184
183
  - **appCode**: `string` - 应用的唯一标识码。
185
184
  - **language**: `string` (可选, 默认: `"zh-CN"`) - 目标语言。
186
- - **page**: `string` (可选) - 当前页面标识。
187
185
  - **lastPullDate**: `string` (可选) - 上次拉取数据的时间戳,用于增量更新。
188
186
  - **baseUrl**: `string` - 后端服务的基础 URL。
189
187
  - **token**: `string` - 用于身份验证的授权令牌。
@@ -191,10 +189,10 @@ fetchTranslate({ appCode, language, page, lastPullDate, baseUrl, token }: {
191
189
  **返回值**
192
190
  - `Promise<any>` - 一个 Promise,resolve 时返回包含翻译数据的对象。如果请求成功,`res.data.result` 为 0,则返回 `res.data.retVal`;否则返回整个 `res` 对象。
193
191
 
194
- **更新** 修正了返回值描述,使其与代码中的 `resolve(res)` 逻辑一致。
192
+ **更新** 移除了 `page` 参数,更新了函数签名和参数说明。
195
193
 
196
194
  **Section sources**
197
- - [service.js](file://packages/libs/service.js#L21-L50)
195
+ - [service.js:74-101](file://packages/libs/service.js#L74-L101)
198
196
 
199
197
  ### getTranslate (获取翻译数据 - 增强版)
200
198
  此方法是 `fetchTranslate` 的增强版,它结合了本地存储(`store2`)来实现数据缓存和增量更新。
@@ -233,7 +231,7 @@ getTranslate({ baseUrl, appCode, language, token, routerName }: {
233
231
  **更新** 该方法的行为已更新,当从后端获取到 `common` 类型的翻译时,会移除当前路由中同名的翻译数据。
234
232
 
235
233
  **Section sources**
236
- - [service.js](file://packages/libs/service.js#L82-L135) - *更新了 getTranslate 方法的实现*
234
+ - [service.js:133-186](file://packages/libs/service.js#L133-L186) - *更新了 getTranslate 方法的实现*
237
235
 
238
236
  ### userDicts (用户词典)
239
237
  提交用户自定义的翻译词典。
@@ -252,7 +250,7 @@ userDicts({ data, token, baseUrl }: { data: any; token: string; baseUrl: string
252
250
  - `Promise<any>` - 请求的响应。
253
251
 
254
252
  **Section sources**
255
- - [service.js](file://packages/libs/service.js#L61-L70)
253
+ - [service.js:112-121](file://packages/libs/service.js#L112-L121)
256
254
 
257
255
  ### saveTranslate (保存翻译)
258
256
  批量保存翻译数据。
@@ -271,7 +269,7 @@ saveTranslate({ data, token, baseUrl }: { data: any; token: string; baseUrl: str
271
269
  - `Promise<any>` - 请求的响应。
272
270
 
273
271
  **Section sources**
274
- - [service.js](file://packages/libs/service.js#L72-L81)
272
+ - [service.js:123-132](file://packages/libs/service.js#L123-L132)
275
273
 
276
274
  ## 使用示例与最佳实践
277
275
 
@@ -328,4 +326,6 @@ console.log(keys); // 输出: ["hello", "greeting"]
328
326
  - **类型安全**: `extractTranslationKeys` 的参数类型为 `any`,缺乏严格的类型检查,使用时需确保传入的是有效的组件对象。
329
327
  - **性能**: 频繁调用 `$changeLocale` 会导致应用重新渲染,应避免在短时间内多次调用。
330
328
  - **逻辑变更**: `getTranslate` 方法现在会移除 `common` 键覆盖的当前路由数据,这可能会影响某些依赖于特定键的组件。
331
- - **服务端点变更**: 注意服务端点已从 `/i18n-web/sysoption/getsupportedlangs` 更新为 `/i18n-web/app/getsupportedlangs`,请确保后端配置正确。
329
+ - **参数变更**: `fetchTranslate` 函数已移除 `page` 参数,使用时请注意更新调用方式。
330
+
331
+ **版本更新** 本版本为 1.3.13,包含上述重要变更。
@@ -6,6 +6,7 @@
6
6
  - [i18nUtils.ts](file://packages/libs/i18nUtils.ts)
7
7
  - [service.js](file://packages/libs/service.js)
8
8
  - [index.js](file://packages/index.js)
9
+ - [textEditMode.js](file://packages/libs/textEditMode.js)
9
10
  - [gc_i18n.js](file://lib/gc_i18n.js)
10
11
  </cite>
11
12
 
@@ -34,29 +35,33 @@ A[utils.js] --> |提供| B[通用辅助函数]
34
35
  A --> |新增| C[RTL语言检测函数]
35
36
  D[i18nUtils.ts] --> |提供| E[i18n专用工具]
36
37
  F[service.js] --> |提供| G[外部服务接口]
38
+ H[textEditMode.js] --> |提供| I[文本编辑模式]
37
39
  end
38
40
  subgraph "入口与整合"
39
- H[index.js] --> |整合并使用| A
40
- H --> |整合并使用| D
41
- H --> |整合并使用| F
41
+ J[index.js] --> |整合并使用| A
42
+ J --> |整合并使用| D
43
+ J --> |整合并使用| F
44
+ J --> |整合并使用| H
42
45
  end
43
46
  subgraph "核心库"
44
- I[gc_i18n.js] --> |定义| J[Po, Mo, Pa, qn等函数]
45
- H --> |依赖| I
47
+ K[gc_i18n.js] --> |定义| L[Po, Mo, Pa, qn等函数]
48
+ J --> |依赖| K
46
49
  end
47
50
  subgraph "应用层"
48
- K[src] --> |使用| H
51
+ M[src] --> |使用| J
49
52
  end
50
- A --> H
51
- D --> H
52
- F --> H
53
- I --> H
53
+ A --> J
54
+ D --> J
55
+ F --> J
56
+ H --> J
57
+ K --> J
54
58
  ```
55
59
 
56
60
  **图示来源**
57
61
  - [utils.js](file://packages/libs/utils.js)
58
62
  - [i18nUtils.ts](file://packages/libs/i18nUtils.ts)
59
63
  - [service.js](file://packages/libs/service.js)
64
+ - [textEditMode.js](file://packages/libs/textEditMode.js)
60
65
  - [index.js](file://packages/index.js)
61
66
  - [gc_i18n.js](file://lib/gc_i18n.js)
62
67
 
@@ -65,11 +70,12 @@ I --> H
65
70
  - [utils.js](file://packages/libs/utils.js)
66
71
  - [i18nUtils.ts](file://packages/libs/i18nUtils.ts)
67
72
  - [service.js](file://packages/libs/service.js)
73
+ - [textEditMode.js](file://packages/libs/textEditMode.js)
68
74
  - [index.js](file://packages/index.js)
69
75
 
70
76
  ## 核心工具模块分析
71
77
 
72
- 本项目的核心工具模块由 `packages/libs` 目录下的三个文件构成:`utils.js` 提供通用的JavaScript辅助函数;`i18nUtils.ts` 专注于国际化流程中的特定任务,如提取翻译键;`service.js` 则封装了与后端服务器通信的API,用于加载和保存语言包。这些模块在 `packages/index.js` 中被统一导入和整合,最终暴露为一个完整的 `I18n` 类供应用使用。
78
+ 本项目的核心工具模块由 `packages/libs` 目录下的四个文件构成:`utils.js` 提供通用的JavaScript辅助函数;`i18nUtils.ts` 专注于国际化流程中的特定任务,如提取翻译键;`service.js` 则封装了与后端服务器通信的API,用于加载和保存语言包;`textEditMode.js` 提供了文本编辑模式功能。这些模块在 `packages/index.js` 中被统一导入和整合,最终暴露为一个完整的 `I18n` 类供应用使用。
73
79
 
74
80
  ## 国际化工具函数 (i18nUtils.ts)
75
81
 
@@ -321,10 +327,12 @@ RTL检测功能完善了国际化系统的用户体验,特别是在处理阿
321
327
 
322
328
  #### `fetchTranslate`
323
329
  - **功能**: 从服务器获取翻译数据。支持通过 `lastPullDate` 参数进行增量拉取。
324
- - **参数**: `{ appCode, language, page, lastPullDate, baseUrl, token }`
330
+ - **参数**: `{ appCode, language, lastPullDate, baseUrl, token }`
325
331
  - **返回**: Promise,解析为翻译数据对象。
326
332
  - **HTTP请求**: `GET /i18n-web/kv_translate/kv_translates`
327
333
 
334
+ **更新** 移除了 `page` 参数的相关描述,保持与其他文档的一致性。
335
+
328
336
  #### `getTranslate`
329
337
  - **功能**: 这是 `service.js` 中最复杂的函数,它结合了本地缓存和远程请求,实现了智能的语言包加载策略。
330
338
  - **流程**:
@@ -372,7 +380,7 @@ end
372
380
 
373
381
  ## 模块整合与协作关系
374
382
 
375
- `packages/index.js` 作为主入口文件,负责将 `utils.js`、`i18nUtils.ts` 和 `service.js` 三个工具模块整合成一个完整的 `I18n` 类。
383
+ `packages/index.js` 作为主入口文件,负责将 `utils.js`、`i18nUtils.ts`、`service.js` 和 `textEditMode.js` 四个工具模块整合成一个完整的 `I18n` 类。
376
384
 
377
385
  ### 协作流程
378
386
 
@@ -384,7 +392,8 @@ end
384
392
  - `getTranslate` 内部会调用 `utils.js` 的 `convertArrayToObject` 将数据转换为 `vue-i18n` 可用的格式。
385
393
  4. **数据加载**: `getTranslate` 函数在 `service.js` 中定义,但其内部调用的 `Uo`、`qn`、`Mo`、`Po` 等函数实际定义在 `lib/gc_i18n.js` 中,这表明 `service.js` 依赖于核心库。
386
394
  5. **RTL方向更新**: 在语言切换时,系统会重新检测RTL状态并更新文档方向。
387
- 6. **最终整合**: `index.js` 将所有功能整合后,通过 `install` 方法注入到Vue应用中,使 `$t` 等全局函数可用。
395
+ 6. **文本编辑模式**: `textEditMode.js` 提供了额外的文本编辑功能,支持页面和路由级别的翻译管理。
396
+ 7. **最终整合**: `index.js` 将所有功能整合后,通过 `install` 方法注入到Vue应用中,使 `$t` 等全局函数可用。
388
397
 
389
398
  ### 关键协作点
390
399
  - `index.js` 使用 `i18nUtils.ts` 进行**键的提取**。
@@ -392,6 +401,7 @@ end
392
401
  - `service.js` 使用 `utils.js` 进行**数据的转换和合并**。
393
402
  - `index.js` 使用 `utils.js` 的 `isRTLLocale` 进行**RTL语言检测**。
394
403
  - `service.js` 依赖 `gc_i18n.js` 提供的底层**网络请求和缓存函数**。
404
+ - `textEditMode.js` 与 `service.js` 协作,提供**文本编辑和翻译管理**功能。
395
405
 
396
406
  ### RTL功能的完整协作链
397
407
  ```mermaid
@@ -413,4 +423,5 @@ G --> H[提供isRTL实例方法]
413
423
  - [utils.js](file://packages/libs/utils.js)
414
424
  - [i18nUtils.ts](file://packages/libs/i18nUtils.ts)
415
425
  - [service.js](file://packages/libs/service.js)
426
+ - [textEditMode.js](file://packages/libs/textEditMode.js)
416
427
  - [gc_i18n.js](file://lib/gc_i18n.js)
@@ -24,6 +24,8 @@
24
24
  ## 更新摘要
25
25
  **变更内容**
26
26
  - 核心I18n类完全重写,引入Vue 2/3兼容层和createI18nCompat函数
27
+ - **新增中文语言模式兼容性支持**,通过normalizeLocale方法支持zh-CN和zh-TW的自动规范化
28
+ - **内部代码重构改进**,axios别名从Ve改为je,多个函数重命名等
27
29
  - 支持自动版本检测和适配,统一Vue 2和Vue 3的API差异
28
30
  - 增强路由守卫机制,支持动态组件加载和翻译键收集
29
31
  - 重构翻译查找机制,支持路由特定键和通用键的优先级处理
@@ -47,9 +49,10 @@
47
49
  3. [Vue插件安装机制](#vue插件安装机制)
48
50
  4. [公共API接口文档](#公共api接口文档)
49
51
  5. [RTL方向管理功能](#rtl方向管理功能)
50
- 6. [文本编辑模式功能](#文本编辑模式功能)
51
- 7. [非组件环境使用](#非组件环境使用)
52
- 8. [样式文件作用](#样式文件作用)
52
+ 6. [中文语言模式兼容性](#中文语言模式兼容性)
53
+ 7. [文本编辑模式功能](#文本编辑模式功能)
54
+ 8. [非组件环境使用](#非组件环境使用)
55
+ 9. [样式文件作用](#样式文件作用)
53
56
 
54
57
  ## 项目结构分析
55
58
 
@@ -511,7 +514,7 @@ export const getLanguagesWithCache = async ({
511
514
  **本节来源**
512
515
  - [packages/index.js:67-411](file://packages/index.js#L67-L411)
513
516
  - [packages/libs/i18nUtils.ts:1-54](file://packages/libs/i18nUtils.ts#L1-L54)
514
- - [packages/libs/service.js:1-188](file://packages/libs/service.js#L1-L188)
517
+ - [packages/libs/service.js:1-187](file://packages/libs/service.js#L1-L187)
515
518
  - [packages/swal.css:1-18](file://packages/swal.css#L1-L18)
516
519
 
517
520
  ## Vue插件安装机制
@@ -903,6 +906,132 @@ async setLanguage(language = "zh-CN") {
903
906
  - [packages/index.js:310-343](file://packages/index.js#L310-L343)
904
907
  - [packages/libs/utils.js:3-22](file://packages/libs/utils.js#L3-L22)
905
908
 
909
+ ## 中文语言模式兼容性
910
+
911
+ ### 语言代码规范化机制
912
+
913
+ **新增** I18n类引入了normalizeLocale方法,专门处理中文语言模式的兼容性支持:
914
+
915
+ ```javascript
916
+ /**
917
+ * 规范化语言代码,兼容浏览器语言简写
918
+ * @param {string} locale - 原始语言代码
919
+ * @returns {string} 规范化后的语言代码
920
+ */
921
+ normalizeLocale(locale) {
922
+ if (!locale) return "zh-CN";
923
+ // 处理简写形式:zh -> zh-CN, en -> en-US
924
+ const localeMap = {
925
+ zh: "zh-CN",
926
+ en: "en-US"
927
+ };
928
+ return localeMap[locale] || locale;
929
+ }
930
+ ```
931
+
932
+ ### 中文简体和繁体支持
933
+
934
+ **新增** 完整的中文语言模式支持,包括简体中文(zh-CN)和繁体中文(zh-TW):
935
+
936
+ ```javascript
937
+ // 语言资源文件包含简体和繁体中文翻译
938
+ {
939
+ "qylb2": {
940
+ "zh-cn": "首页", // 简体中文
941
+ "zh-tw": "首頁" // 繁體中文
942
+ },
943
+ "jcve2": {
944
+ "zh-cn": "测试",
945
+ "zh-tw": "測試"
946
+ },
947
+ "i55x296": {
948
+ "zh-cn": "简体中文内容",
949
+ "zh-tw": "簡體中文內容"
950
+ },
951
+ "7vs7of6": {
952
+ "zh-cn": "繁體中文內容",
953
+ "zh-tw": "繁體中文內容"
954
+ }
955
+ }
956
+ ```
957
+
958
+ ### 自动语言检测和回退机制
959
+
960
+ **更新** 语言加载时的智能回退机制:
961
+
962
+ ```javascript
963
+ async setLanguage(language = "zh-CN") {
964
+ // 规范化语言代码
965
+ language = this.normalizeLocale(language);
966
+ const commonMessagesKey = "I18N_MESSAGES_COMMON_" + language;
967
+ let commonMessages = store2.get(commonMessagesKey);
968
+ if (_.isEmpty(commonMessages)) {
969
+ try {
970
+ const lang = await http.get(
971
+ `https://cdn.ihotel.cn/i18n_messages/${language}.json`
972
+ );
973
+ if (lang) {
974
+ const { data } = lang;
975
+ commonMessages = data;
976
+ store2.set(commonMessagesKey, data);
977
+ }
978
+ } catch (error) {
979
+ // 请求失败时,如果是非 zh-CN,则回退到 zh-CN
980
+ if (language !== "zh-CN") {
981
+ console.warn(`语言 ${language} 加载失败,回退到 zh-CN`, error);
982
+ return this.setLanguage("zh-CN");
983
+ }
984
+ // 如果 zh-CN 也失败了,使用空对象
985
+ console.error("zh-CN 语言文件加载失败", error);
986
+ commonMessages = {};
987
+ }
988
+ }
989
+ // ... 其他语言切换逻辑
990
+ }
991
+ ```
992
+
993
+ ### 语言资源文件结构
994
+
995
+ **新增** 语言资源文件采用JSON格式,支持多语言键值对:
996
+
997
+ ```json
998
+ {
999
+ "message_key": {
1000
+ "zh-cn": "简体中文翻译",
1001
+ "zh-tw": "繁體中文翻譯",
1002
+ "en-us": "English translation"
1003
+ },
1004
+ "another_key": {
1005
+ "zh-cn": "另一个简体中文翻译",
1006
+ "zh-tw": "另一個繁體中文翻譯"
1007
+ }
1008
+ }
1009
+ ```
1010
+
1011
+ ### 中文语言模式最佳实践
1012
+
1013
+ **新增** 使用中文语言模式的推荐做法:
1014
+
1015
+ ```javascript
1016
+ // 1. 使用规范化的语言代码
1017
+ const i18n = new I18n({
1018
+ locale: 'zh', // 自动规范化为 'zh-CN'
1019
+ appCode: 'MY_APP'
1020
+ });
1021
+
1022
+ // 2. 在组件中使用翻译
1023
+ const translated = $t('page.title'); // 自动选择 zh-CN 或 zh-TW
1024
+
1025
+ // 3. 支持动态语言切换
1026
+ await $changeLocale('zh-TW'); // 切换到繁体中文
1027
+ await $changeLocale('zh-CN'); // 切换到简体中文
1028
+ ```
1029
+
1030
+ **本节来源**
1031
+ - [packages/index.js:168-176](file://packages/index.js#L168-L176)
1032
+ - [packages/index.js:437-492](file://packages/index.js#L437-L492)
1033
+ - [lang/index.json:1-130](file://lang/index.json#L1-L130)
1034
+
906
1035
  ## 文本编辑模式功能
907
1036
 
908
1037
  ### 文本编辑模式概述
@@ -961,11 +1090,11 @@ swalCSS --> swal2Container
961
1090
 
962
1091
  ### 文本编辑模式快捷键配置
963
1092
 
964
- 文本编辑模式支持自定义快捷键绑定,默认使用"shift+e"组合键:
1093
+ 文本编辑模式支持自定义快捷键绑定,默认使用"ctrl+shift+e"组合键:
965
1094
 
966
1095
  ```javascript
967
- // 文本编辑模式快捷键,默认为 shift+e,支持自定义传入
968
- this.editKeyboard = options.editKeyboard || "shift+e";
1096
+ // 文本编辑模式快捷键,默认为 ctrl+shift+e,支持自定义传入
1097
+ this.editKeyboard = options.editKeyboard || "ctrl+shift+e";
969
1098
 
970
1099
  // 绑定文本编辑模式快捷键
971
1100
  keyboardJS.bind(this.editKeyboard, (e) => {
@@ -1003,7 +1132,7 @@ enableEditMode() {
1003
1132
  // 显示提示
1004
1133
  Swal.fire({
1005
1134
  title: "文本编辑模式已开启",
1006
- text: "点击带外框的文本即可编辑翻译内容,按 Shift+E 退出",
1135
+ text: "点击带蓝色虚线外框的文本即可编辑翻译内容,按 Ctrl+Shift+E 退出",
1007
1136
  icon: "info",
1008
1137
  timer: 2000,
1009
1138
  showConfirmButton: false,