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.
- 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//346/240/270/345/277/203/345/272/223/345/256/236/347/216/260.md +137 -8
- package/.qoder/repowiki/zh/content//350/257/255/350/250/200/350/265/204/346/272/220/347/256/241/347/220/206.md +153 -20
- 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/content//351/253/230/347/272/247/347/224/250/346/263/225//351/253/230/347/272/247/347/224/250/346/263/225.md +24 -24
- package/.qoder/repowiki/zh/meta/repowiki-metadata.json +1 -1
- package/lib/gc_i18n.es.js +356 -323
- package/lib/gc_i18n.umd.js +16 -16
- package/package.json +1 -1
- package/packages/components/earth.js +6 -3
- package/packages/index.js +50 -12
- package/packages/libs/service.js +1 -1
- package/packages/libs/textEditMode.js +1 -1
|
@@ -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)
|
package/.qoder/repowiki/zh/content//346/240/270/345/277/203/345/272/223/345/256/236/347/216/260.md
CHANGED
|
@@ -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-
|
|
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: "
|
|
1135
|
+
text: "点击带蓝色虚线外框的文本即可编辑翻译内容,按 Ctrl+Shift+E 退出",
|
|
1007
1136
|
icon: "info",
|
|
1008
1137
|
timer: 2000,
|
|
1009
1138
|
showConfirmButton: false,
|