gc_i18n 1.3.12 → 1.4.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.
@@ -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)
@@ -15,26 +15,30 @@
15
15
  - [service.js](file://packages/libs/service.js)
16
16
  - [utils.js](file://packages/libs/utils.js)
17
17
  - [index.js](file://lang/index.js)
18
+ - [textEditMode.js](file://packages/libs/textEditMode.js)
19
+ - [textEditMode.css](file://packages/libs/textEditMode.css)
18
20
  </cite>
19
21
 
20
22
  ## 更新摘要
21
23
  **所做变更**
22
- - 更新了Earth组件的重大功能增强:从简单的Icon组件升级为完整的v-model驱动编辑组件
24
+ - 更新了 i18n-earth 组件的重大功能增强:从简单的 Icon 组件升级为完整的 v-model 驱动编辑组件
23
25
  - 新增了模态框编辑功能,支持多语言翻译的实时编辑和保存
24
26
  - 增强了缓存机制,包括语言列表缓存和翻译数据缓存
25
- - 完善了组件的Props配置和事件处理机制
26
- - 更新了组件的使用示例和最佳实践
27
+ - 完善了组件的 Props 配置和事件处理机制
28
+ - 更新了键盘快捷键配置,从 ctrl+shift+l 更改为 ctrl+shift+e
29
+ - 新增了文本编辑模式功能,支持可视化翻译编辑
27
30
 
28
31
  ## 目录
29
32
  1. [项目结构分析](#项目结构分析)
30
33
  2. [Vue组件与gc_i18n库集成机制](#vue组件与gc_i18n库集成机制)
31
- 3. [Earth组件:v-model驱动的多语言编辑器](#earth组件v-model驱动的多语言编辑器)
34
+ 3. [i18n-earth组件:v-model驱动的多语言编辑器](#i18n-earth组件v-model驱动的多语言编辑器)
32
35
  4. [config.vue语言切换控件详解](#configvue语言切换控件详解)
33
36
  5. [文本翻译函数$t()的使用分析](#文本翻译函数t的使用分析)
34
37
  6. [组件间语言状态共享实践](#组件间语言状态共享实践)
35
38
  7. [翻译文本传递与直接调用的权衡](#翻译文本传递与直接调用的权衡)
36
- 8. [核心流程序列图](#核心流程序列图)
37
- 9. [依赖关系图](#依赖关系图)
39
+ 8. [文本编辑模式与快捷键配置](#文本编辑模式与快捷键配置)
40
+ 9. [核心流程序列图](#核心流程序列图)
41
+ 10. [依赖关系图](#依赖关系图)
38
42
 
39
43
  ## 项目结构分析
40
44
 
@@ -59,6 +63,8 @@ earthCSS[earth.css]
59
63
  i18nUtils[i18nUtils.ts]
60
64
  service[service.js]
61
65
  utils[utils.js]
66
+ textEditMode[textEditMode.js]
67
+ textEditModeCSS[textEditMode.css]
62
68
  end
63
69
  subgraph "应用层"
64
70
  main[main.js]
@@ -71,7 +77,9 @@ lang --> pkg
71
77
  pkg --> earth
72
78
  pkg --> i18nUtils
73
79
  pkg --> service
80
+ pkg --> textEditMode
74
81
  earth --> earthCSS
82
+ textEditMode --> textEditModeCSS
75
83
  main --> app
76
84
  app --> home
77
85
  app --> login
@@ -92,7 +100,8 @@ Vue组件通过`gc_i18n`库实现国际化功能。该库基于`vue-i18n`构建
92
100
  2. `lang/index.js`初始化`gc_i18n`实例并注入Vue应用
93
101
  3. 各组件通过全局函数`$t()`进行文本翻译
94
102
  4. 特殊组件如`config.vue`提供翻译管理界面
95
- 5. Earth组件通过自动注册方式提供Vue 2/3兼容性支持
103
+ 5. i18n-earth组件通过自动注册方式提供Vue 2/3兼容性支持
104
+ 6. 文本编辑模式通过快捷键 ctrl+shift+e 启用
96
105
 
97
106
  ```mermaid
98
107
  sequenceDiagram
@@ -100,12 +109,14 @@ participant Main as main.js
100
109
  participant Lang as lang/index.js
101
110
  participant I18n as index.js
102
111
  participant Earth as earth.js
112
+ participant TextMode as textEditMode.js
103
113
  participant Component as Vue组件
104
114
  Main->>Lang : use(lang, router)
105
115
  Lang->>I18n : new gc_i18n(options)
106
116
  I18n->>I18n : initI18n()
107
117
  I18n->>I18n : initRouterGuards()
108
118
  I18n->>Earth : app.component("i18n-earth", earthVue)
119
+ I18n->>TextMode : 绑定快捷键 ctrl+shift+e
109
120
  Earth->>Component : 注册全局组件
110
121
  Component->>I18n : 调用$t("key")
111
122
  I18n-->>Component : 返回翻译文本
@@ -121,9 +132,9 @@ Note over I18n : 支持自动注册和手动注册
121
132
  - [main.js:1-12](file://src/main.js#L1-L12)
122
133
  - [lang/index.js:1-33](file://lang/index.js#L1-L33)
123
134
 
124
- ## Earth组件:v-model驱动的多语言编辑器
135
+ ## i18n-earth组件:v-model驱动的多语言编辑器
125
136
 
126
- **更新**:Earth组件已从简单的Icon组件升级为完整的v-model驱动编辑组件,具备强大的多语言编辑和管理功能
137
+ **更新**:i18n-earth组件已从简单的Icon组件升级为完整的v-model驱动编辑组件,具备强大的多语言编辑和管理功能
127
138
 
128
139
  ### 组件特性
129
140
  - 使用`vue-demi`库实现Vue 2/3兼容
@@ -137,7 +148,7 @@ Note over I18n : 支持自动注册和手动注册
137
148
 
138
149
  ### v-model数据结构
139
150
 
140
- Earth组件支持数组对象格式的v-model数据:
151
+ i18n-earth组件支持数组对象格式的v-model数据:
141
152
 
142
153
  ```javascript
143
154
  // v-model数据格式
@@ -407,7 +418,7 @@ ReloadPage --> End([完成])
407
418
 
408
419
  | 组件 | 模板中使用 | 脚本中使用 | 特点 |
409
420
  |------|------------|------------|------|
410
- | Home.vue | 是 | 是 | 完整的交互示例,包含Earth组件 |
421
+ | Home.vue | 是 | 是 | 完整的交互示例,包含i18n-earth组件 |
411
422
  | login.vue | 是 | 否 | 简单的静态翻译 |
412
423
  | test.vue | 否 | 否 | 无$t()调用,使用静态文本 |
413
424
 
@@ -419,7 +430,7 @@ ReloadPage --> End([完成])
419
430
  <div>首页</div>
420
431
  <RouterLink to="/test">测试</RouterLink>
421
432
 
422
- <!-- Earth组件使用 - v-model驱动的编辑器 -->
433
+ <!-- i18n-earth组件使用 - v-model驱动的编辑器 -->
423
434
  <i18n-earth
424
435
  :width="500"
425
436
  v-model="translations"
@@ -483,7 +494,7 @@ const handleSave = async (values) => {
483
494
  - 模板中使用`{{ $t("key") }}`进行动态翻译
484
495
  - 脚本中调用`$changeLocale`等全局函数
485
496
  - 包含完整的语言切换和用户管理功能
486
- - 集成了Earth组件展示Vue 2/3兼容性
497
+ - 集成了i18n-earth组件展示Vue 2/3兼容性
487
498
 
488
499
  ### login.vue中的使用
489
500
 
@@ -588,7 +599,7 @@ I18n->>Component : 触发页面刷新
588
599
  <ChildComponent :saveText="$t('common.save')" />
589
600
  ```
590
601
 
591
- **注意**:Earth组件通过自动注册机制在全局可用,无需手动注册。
602
+ **注意**:i18n-earth组件通过自动注册机制在全局可用,无需手动注册。
592
603
 
593
604
  **本节来源**
594
605
  - [index.js:491-501](file://packages/index.js#L491-L501)
@@ -649,6 +660,91 @@ export default {
649
660
  - [Home.vue:1-64](file://src/view/Home.vue#L1-L64)
650
661
  - [login.vue:1-15](file://src/view/login.vue#L1-L15)
651
662
 
663
+ ## 文本编辑模式与快捷键配置
664
+
665
+ ### 快捷键配置更新
666
+
667
+ **更新**:键盘快捷键配置已从 `ctrl+shift+l` 更改为 `ctrl+shift+e`
668
+
669
+ `gc_i18n`库现在支持自定义文本编辑模式快捷键:
670
+
671
+ ```javascript
672
+ // 默认配置
673
+ this.keyboard = keyboard || "ctrl+shift+l";
674
+ this.editKeyboard = options.editKeyboard || "ctrl+shift+e";
675
+
676
+ // 绑定快捷键
677
+ keyboardJS.bind(this.editKeyboard, (e) => {
678
+ e.preventDefault();
679
+ textEditMode.toggle();
680
+ });
681
+ ```
682
+
683
+ ### 文本编辑模式功能
684
+
685
+ 文本编辑模式提供了可视化的翻译编辑体验:
686
+
687
+ 1. **激活条件**:通过 `ctrl+shift+e` 快捷键激活
688
+ 2. **元素包装**:自动扫描页面文本节点并添加可编辑外框
689
+ 3. **弹窗编辑**:点击可编辑元素弹出SweetAlert2编辑窗口
690
+ 4. **实时保存**:编辑完成后自动保存到服务器
691
+
692
+ ### 编辑模式工作流程
693
+
694
+ ```mermaid
695
+ flowchart TD
696
+ Start([按下 ctrl+shift+e]) --> InitConfig["初始化配置"]
697
+ InitConfig --> ScanElements["扫描页面文本元素"]
698
+ ScanElements --> WrapElements["包装可编辑元素"]
699
+ WrapElements --> ShowTips["显示操作提示"]
700
+ ShowTips --> ClickElement{"点击可编辑元素?"}
701
+ ClickElement --> |是| OpenModal["打开编辑弹窗"]
702
+ ClickElement --> |否| WaitInput["等待用户输入"]
703
+ OpenModal --> EditText["编辑翻译内容"]
704
+ EditText --> SaveChanges["保存到服务器"]
705
+ SaveChanges --> UpdateCache["更新本地缓存"]
706
+ UpdateCache --> CloseModal["关闭弹窗"]
707
+ CloseModal --> End([完成])
708
+ ```
709
+
710
+ ### 编辑弹窗功能
711
+
712
+ 编辑弹窗支持多语言翻译编辑:
713
+
714
+ ```javascript
715
+ // 构建编辑表单
716
+ const langInputs = this.languages
717
+ .map(
718
+ (item) => `
719
+ <div class="i18n-edit-field">
720
+ <label class="i18n-edit-label">${item.langName}:</label>
721
+ <input
722
+ type="text"
723
+ class="i18n-edit-input"
724
+ data-lang="${item.langCode}"
725
+ value="${this.escapeHtml(_.get(value, item.langCode) || "")}"
726
+ placeholder="请输入${item.langName}翻译"
727
+ />
728
+ </div>
729
+ `
730
+ )
731
+ .join("");
732
+ ```
733
+
734
+ ### 配置选项
735
+
736
+ | 选项名 | 默认值 | 说明 |
737
+ |--------|--------|------|
738
+ | keyboard | "ctrl+shift+l" | 管理面板快捷键 |
739
+ | editKeyboard | "ctrl+shift+e" | 文本编辑模式快捷键 |
740
+ | baseUrl | 根据环境自动选择 | 翻译服务基础URL |
741
+
742
+ **本节来源**
743
+ - [index.js:109-111](file://packages/index.js#L109-L111)
744
+ - [index.js:153-157](file://packages/index.js#L153-L157)
745
+ - [textEditMode.js:1-623](file://packages/libs/textEditMode.js#L1-L623)
746
+ - [textEditMode.css:1-166](file://packages/libs/textEditMode.css#L1-L166)
747
+
652
748
  ## 核心流程序列图
653
749
 
654
750
  ```mermaid
@@ -656,6 +752,8 @@ sequenceDiagram
656
752
  participant User as 用户
657
753
  participant Component as Vue组件
658
754
  participant I18n as gc_i18n实例
755
+ participant Earth as i18n-earth组件
756
+ participant TextMode as 文本编辑模式
659
757
  participant Service as service.js
660
758
  participant Storage as localStorage
661
759
  participant Server as 远程服务器
@@ -669,8 +767,11 @@ Service->>Storage : 缓存翻译数据
669
767
  Service-->>I18n : 返回翻译结果
670
768
  I18n->>I18n : setLocaleMessage('en-US', data)
671
769
  I18n->>Component : 触发页面刷新
672
- Component->>Component : 重新渲染,使用英文文本
673
- Component-->>User : 显示英文界面
770
+ Component->>Earth : 更新当前语言显示
771
+ Earth->>User : 显示英文翻译
772
+ User->>TextMode : 按下 ctrl+shift+e
773
+ TextMode->>TextMode : 启用编辑模式
774
+ TextMode->>User : 显示可编辑元素
674
775
  ```
675
776
 
676
777
  **图表来源**
@@ -688,19 +789,22 @@ C --> D[packages/index.js]
688
789
  D --> E[earth.js]
689
790
  D --> F[i18nUtils.ts]
690
791
  D --> G[service.js]
691
- E --> H[earth.css]
692
- A --> I[router]
693
- I --> J[Home.vue]
694
- I --> K[login.vue]
695
- I --> L[test.vue]
696
- J --> D
697
- K --> D
792
+ D --> H[textEditMode.js]
793
+ E --> I[earth.css]
794
+ H --> J[textEditMode.css]
795
+ A --> K[router]
796
+ K --> L[Home.vue]
797
+ K --> M[login.vue]
798
+ K --> N[test.vue]
698
799
  L --> D
699
- M[earth.js] --> N[earth.css]
700
- O[service.js] --> P[utils.js]
800
+ M --> D
801
+ N --> D
802
+ O[earth.js] --> I
803
+ P[textEditMode.js] --> J
804
+ Q[service.js] --> R[utils.js]
701
805
  style A fill:#f9f,stroke:#333
702
806
  style D fill:#bbf,stroke:#333
703
- style M fill:#f96,stroke:#333
807
+ style O fill:#f96,stroke:#333
704
808
  ```
705
809
 
706
810
  **图表来源**
@@ -710,4 +814,6 @@ style M fill:#f96,stroke:#333
710
814
  - [earth.js:1-339](file://packages/components/earth.js#L1-L339)
711
815
  - [earth.css:1-144](file://packages/components/earth.css#L1-L144)
712
816
  - [service.js:1-189](file://packages/libs/service.js#L1-L189)
713
- - [utils.js:1-51](file://packages/libs/utils.js#L1-L51)
817
+ - [utils.js:1-51](file://packages/libs/utils.js#L1-L51)
818
+ - [textEditMode.js:1-623](file://packages/libs/textEditMode.js#L1-L623)
819
+ - [textEditMode.css:1-166](file://packages/libs/textEditMode.css#L1-L166)