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.
- package/.qoder/repowiki/zh/content/API /345/217/202/350/200/203.md" +17 -17
- package/.qoder/repowiki/zh/content//345/267/245/345/205/267/345/207/275/346/225/260.md +25 -14
- package/.qoder/repowiki/zh/content//347/273/204/344/273/266/351/233/206/346/210/220.md +133 -27
- package/.qoder/repowiki/zh/content//350/257/255/350/250/200/350/265/204/346/272/220/347/256/241/347/220/206.md +56 -19
- package/.qoder/repowiki/zh/content//351/253/230/347/272/247/347/224/250/346/263/225//346/226/207/346/234/254/347/274/226/350/276/221/346/250/241/345/274/217/345/212/237/350/203/275.md +23 -8
- package/.qoder/repowiki/zh/meta/repowiki-metadata.json +1 -1
- package/lib/gc_i18n.es.js +132 -115
- package/lib/gc_i18n.umd.js +8 -8
- package/package.json +1 -1
- package/packages/index.js +39 -10
- package/packages/libs/service.js +0 -2
|
@@ -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
|
-
-
|
|
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#
|
|
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,
|
|
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
|
-
**更新**
|
|
192
|
+
**更新** 移除了 `page` 参数,更新了函数签名和参数说明。
|
|
195
193
|
|
|
196
194
|
**Section sources**
|
|
197
|
-
- [service.js](file://packages/libs/service.js#
|
|
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#
|
|
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#
|
|
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#
|
|
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
|
-
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
J[index.js] --> |整合并使用| A
|
|
42
|
+
J --> |整合并使用| D
|
|
43
|
+
J --> |整合并使用| F
|
|
44
|
+
J --> |整合并使用| H
|
|
42
45
|
end
|
|
43
46
|
subgraph "核心库"
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
K[gc_i18n.js] --> |定义| L[Po, Mo, Pa, qn等函数]
|
|
48
|
+
J --> |依赖| K
|
|
46
49
|
end
|
|
47
50
|
subgraph "应用层"
|
|
48
|
-
|
|
51
|
+
M[src] --> |使用| J
|
|
49
52
|
end
|
|
50
|
-
A -->
|
|
51
|
-
D -->
|
|
52
|
-
F -->
|
|
53
|
-
|
|
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`
|
|
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,
|
|
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` 和 `
|
|
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.
|
|
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
|
-
- 更新了
|
|
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. [
|
|
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.
|
|
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
|
-
##
|
|
135
|
+
## i18n-earth组件:v-model驱动的多语言编辑器
|
|
125
136
|
|
|
126
|
-
**更新**:
|
|
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
|
-
|
|
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 | 是 | 是 | 完整的交互示例,包含
|
|
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
|
-
<!--
|
|
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
|
-
- 集成了
|
|
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
|
-
**注意**:
|
|
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->>
|
|
673
|
-
|
|
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
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
K -->
|
|
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
|
|
700
|
-
|
|
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
|
|
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)
|