gc_i18n 1.5.10 → 1.5.11

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.
Files changed (56) hide show
  1. package/package.json +16 -2
  2. package/.qoder/repowiki/zh/content/API /345/217/202/350/200/203.md" +0 -585
  3. package/.qoder/repowiki/zh/content//345/267/245/345/205/267/345/207/275/346/225/260.md +0 -541
  4. package/.qoder/repowiki/zh/content//345/277/253/351/200/237/345/274/200/345/247/213.md +0 -447
  5. package/.qoder/repowiki/zh/content//346/225/205/351/232/234/346/216/222/351/231/244.md +0 -919
  6. package/.qoder/repowiki/zh/content//346/240/270/345/277/203/345/272/223/345/256/236/347/216/260.md +0 -2678
  7. package/.qoder/repowiki/zh/content//347/273/204/344/273/266/351/233/206/346/210/220.md +0 -929
  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 +0 -815
  9. package/.qoder/repowiki/zh/content//351/205/215/347/275/256/351/200/211/351/241/271.md +0 -660
  10. package/.qoder/repowiki/zh/content//351/241/271/347/233/256/347/256/200/344/273/213.md +0 -371
  11. package/.qoder/repowiki/zh/content//351/253/230/347/272/247/347/224/250/346/263/225/UI/346/241/206/346/236/266/351/233/206/346/210/220.md +0 -855
  12. package/.qoder/repowiki/zh/content//351/253/230/347/272/247/347/224/250/346/263/225/Vite /346/217/222/344/273/266/351/205/215/347/275/256/346/214/207/345/215/227.md" +0 -341
  13. package/.qoder/repowiki/zh/content//351/253/230/347/272/247/347/224/250/346/263/225/Vue 2 /351/233/206/346/210/220/346/214/207/345/215/227.md" +0 -476
  14. package/.qoder/repowiki/zh/content//351/253/230/347/272/247/347/224/250/346/263/225/Vue /347/244/272/344/276/213/351/241/271/347/233/256.md" +0 -529
  15. package/.qoder/repowiki/zh/content//351/253/230/347/272/247/347/224/250/346/263/225//344/276/235/350/265/226/347/256/241/347/220/206/347/255/226/347/225/245.md +0 -471
  16. package/.qoder/repowiki/zh/content//351/253/230/347/272/247/347/224/250/346/263/225//345/205/274/345/256/271/346/200/247/346/265/213/350/257/225/346/212/245/345/221/212.md +0 -433
  17. 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 +0 -685
  18. package/.qoder/repowiki/zh/content//351/253/230/347/272/247/347/224/250/346/263/225//346/236/204/345/273/272/347/263/273/347/273/237.md +0 -675
  19. package/.qoder/repowiki/zh/content//351/253/230/347/272/247/347/224/250/346/263/225//347/244/272/344/276/213/351/241/271/347/233/256/346/246/202/350/247/210.md +0 -540
  20. 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 +0 -2883
  21. package/.qoder/repowiki/zh/meta/repowiki-metadata.json +0 -1
  22. package/.vscode/extensions.json +0 -3
  23. package/AGENTS.md +0 -24
  24. package/example/README.md +0 -60
  25. package/example/TEST_REPORT.md +0 -198
  26. package/example/VITE_PLUGIN_CONFIG.md +0 -160
  27. package/example/vue2-test/VUE2_CONFIG_GUIDE.md +0 -157
  28. package/example/vue2-test/index.html +0 -18
  29. package/example/vue2-test/lang/index.js +0 -25
  30. package/example/vue2-test/lang/index.json +0 -30
  31. package/example/vue2-test/package.json +0 -20
  32. package/example/vue2-test/pnpm-lock.yaml +0 -2718
  33. package/example/vue2-test/src/App.vue +0 -47
  34. package/example/vue2-test/src/main.js +0 -27
  35. package/example/vue2-test/src/views/Home.vue +0 -19
  36. package/example/vue2-test/vite.config.js +0 -22
  37. package/example/vue3-test/index.html +0 -18
  38. package/example/vue3-test/lang/index.js +0 -29
  39. package/example/vue3-test/lang/index.json +0 -50
  40. package/example/vue3-test/package.json +0 -21
  41. package/example/vue3-test/pnpm-lock.yaml +0 -2884
  42. package/example/vue3-test/src/App.vue +0 -64
  43. package/example/vue3-test/src/auth.js +0 -43
  44. package/example/vue3-test/src/main.js +0 -37
  45. package/example/vue3-test/src/views/Home.vue +0 -17
  46. package/example/vue3-test/vite.config.js +0 -24
  47. package/index.html +0 -12
  48. package/pnpm-workspace.yaml +0 -3
  49. package/src/App.vue +0 -3
  50. package/src/assets/vue.svg +0 -1
  51. package/src/main.js +0 -11
  52. package/src/router/index.js +0 -27
  53. package/src/view/Home.vue +0 -65
  54. package/src/view/login.vue +0 -14
  55. package/src/view/test.vue +0 -5
  56. package/vite.config.js +0 -80
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gc_i18n",
3
- "version": "1.5.10",
3
+ "version": "1.5.11",
4
4
  "type": "module",
5
5
  "main": "./lib/gc_i18n.umd.js",
6
6
  "module": "./lib/gc_i18n.es.js",
@@ -8,13 +8,27 @@
8
8
  ".": {
9
9
  "import": "./lib/gc_i18n.es.js",
10
10
  "require": "./lib/gc_i18n.umd.js"
11
- }
11
+ },
12
+ "./gc_i18n.css": "./lib/gc_i18n.css",
13
+ "./style.css": "./lib/gc_i18n.css",
14
+ "./lib/gc_i18n.css": "./lib/gc_i18n.css"
12
15
  },
16
+ "files": [
17
+ "lib",
18
+ "lang",
19
+ "packages"
20
+ ],
21
+ "sideEffects": [
22
+ "*.css",
23
+ "**/*.css"
24
+ ],
13
25
  "scripts": {
14
26
  "dev": "vite",
15
27
  "dev:unit": "vite --mode unit --port 8080",
16
28
  "dev:template": "vite --mode template --port 8081",
17
29
  "build": "vite build",
30
+ "verify:package": "node scripts/verify-package.cjs",
31
+ "prepack": "pnpm build && pnpm verify:package",
18
32
  "preview": "vite preview",
19
33
  "cnpm": "cnpm sync gc_i18n"
20
34
  },
@@ -1,585 +0,0 @@
1
- # API 参考
2
-
3
- <cite>
4
- **本文档中引用的文件**
5
- - [package.json](file://package.json) - *版本信息,从1.4.3升级到1.4.4*
6
- - [packages/index.js](file://packages/index.js) - *库的入口点,包含初始化逻辑和setRouter方法*
7
- - [lib/gc_i18n.es.js](file://lib/gc_i18n.es.js) - *在最近的提交中更新,包含setRouter方法*
8
- - [i18nUtils.ts](file://packages/libs/i18nUtils.ts) - *在最近的提交中更新*
9
- - [service.js](file://packages/libs/service.js) - *在最近的提交中更新,包含关键逻辑变更*
10
- - [utils.js](file://packages/libs/utils.js) - *在最近的提交中更新,包含 mergeArraysByKey 函数*
11
- - [src/main.js](file://src/main.js) - *应用入口,展示如何集成gc_i18n*
12
- - [src/router/index.js](file://src/router/index.js) - *路由配置示例*
13
- </cite>
14
-
15
- ## 更新摘要
16
- **变更内容**
17
- - 版本从 1.4.3 升级到 1.4.4
18
- - 新增 `setRouter` 方法,支持延迟设置Vue Router实例
19
- - 增强的路由守卫功能,自动集成模态框关闭和翻译键收集
20
- - 更新了 `packages/index.js` 中路由守卫的 `closeModal` 功能集成
21
- - 更新了 `gc_i18n.es.js` 中 `$t` 方法的文档,详细说明了其新的查找优先级
22
- - 更新了 `utils.js` 中 `mergeArraysByKey` 函数的文档
23
- - 修正了 `service.js` 中 `fetchTranslate` 和 `getTranslate` 方法的返回值描述
24
- - 更新了所有受影响部分的源代码引用,以反映最新的文件状态
25
-
26
- ## 目录
27
- 1. [简介](#简介)
28
- 2. [核心 API 概述](#核心-api-概述)
29
- 3. [packages/index.js 公共方法](#packagesindexjs-公共方法)
30
- 4. [lib/gc_i18n.es.js 公共方法](#libgc_i18nesjs-公共方法)
31
- 5. [i18nUtils.ts 工具函数](#i18nutilsts-工具函数)
32
- 6. [service.js 异步接口](#servicesjs-异步接口)
33
- 7. [使用示例与最佳实践](#使用示例与最佳实践)
34
- 8. [错误处理与限制](#错误处理与限制)
35
-
36
- ## 简介
37
- 本 API 参考文档详细描述了 `gc_i18n` 国际化库的核心功能与接口。文档涵盖 `packages/index.js` 和 `lib/gc_i18n.es.js` 暴露的公共方法、`i18nUtils.ts` 中的工具函数以及 `service.js` 提供的异步服务接口。目标是为开发者提供一份全面、准确且易于理解的参考,以支持国际化功能的集成与开发。
38
-
39
- ## 核心 API 概述
40
- `gc_i18n` 库通过 Vue 3 的插件机制提供国际化支持。其核心功能包括:
41
- - **翻译功能**:通过 `$t` 方法在模板或代码中获取翻译文本。
42
- - **语言切换**:通过 `$changeLocale` 方法动态切换当前语言环境。
43
- - **路由器集成**:通过 `setRouter` 方法设置Vue Router实例,自动初始化路由守卫。
44
- - **语言包管理**:通过 `service.js` 提供的接口从后端获取和更新翻译资源。
45
- - **工具支持**:提供静态分析工具函数,用于提取项目中的翻译键。
46
- - **模态框关闭**:通过 `closeModal` 方法统一管理 SweetAlert2 模态框的关闭。
47
-
48
- **Section sources**
49
- - [packages/index.js](file://packages/index.js)
50
- - [lib/gc_i18n.es.js](file://lib/gc_i18n.es.js)
51
- - [service.js](file://packages/libs/service.js)
52
- - [i18nUtils.ts](file://packages/libs/i18nUtils.ts)
53
-
54
- ## packages/index.js 公共方法
55
- `packages/index.js` 作为库的主要入口点,提供了完整的国际化功能实现。该类通过构造函数接收配置选项,并提供多种公共方法供开发者使用。
56
-
57
- ### 构造函数 (I18n)
58
- 构造函数初始化国际化实例,支持多种配置选项。
59
-
60
- **方法签名**
61
- ```typescript
62
- constructor(options?: {
63
- router?: any;
64
- appCode?: string;
65
- messages?: Record<string, any>;
66
- token?: string;
67
- orgCode?: string;
68
- loginRouteName?: string;
69
- login?: boolean;
70
- keyboard?: string;
71
- locale?: string;
72
- env?: string;
73
- dev?: boolean;
74
- })
75
- ```
76
-
77
- **参数**
78
- - **router**: `any` (可选) - Vue Router 实例,允许延迟设置
79
- - **appCode**: `string` (可选) - 应用唯一标识码
80
- - **messages**: `Record<string, any>` (可选) - 本地消息覆盖
81
- - **token**: `string` (可选) - 认证令牌
82
- - **orgCode**: `string` (可选) - 组织代码,用于生成JWT
83
- - **loginRouteName**: `string` (可选, 默认: `"login"`) - 登录路由名称
84
- - **login**: `boolean` (可选) - 是否启用登录功能
85
- - **keyboard**: `string` (可选, 默认: `"ctrl+shift+l"`) - 快捷键配置
86
- - **locale**: `string` (可选) - 默认语言环境
87
- - **env**: `string` (可选) - 环境配置 (`"dev"|"local"|其他"`)
88
- - **dev**: `boolean` (可选) - 开发模式开关
89
-
90
- **返回值**
91
- - `I18n` - 初始化后的国际化实例
92
-
93
- **使用示例**
94
- ```javascript
95
- import I18n from 'gc_i18n';
96
-
97
- const i18n = new I18n({
98
- appCode: 'YOUR_APP_CODE',
99
- router: vueRouter,
100
- locale: 'zh-CN'
101
- });
102
- ```
103
-
104
- **Section sources**
105
- - [packages/index.js:81-139](file://packages/index.js#L81-L139)
106
-
107
- ### setRouter (设置路由器)
108
- 设置Vue Router实例,支持延迟设置。该方法会自动初始化路由守卫。
109
-
110
- **方法签名**
111
- ```typescript
112
- setRouter(router: any): I18n
113
- ```
114
-
115
- **参数**
116
- - **router**: `any` - Vue Router 实例
117
-
118
- **返回值**
119
- - `I18n` - 返回当前实例,支持链式调用
120
-
121
- **副作用**
122
- - 设置 `this.router` 属性
123
- - 调用 `initRouterGuards()` 初始化路由守卫
124
- - 支持链式调用返回当前实例
125
-
126
- **使用限制**
127
- - 该方法支持延迟设置,即可以在实例创建后任意时间设置router
128
- - 如果router已经存在,会直接初始化路由守卫
129
- - 返回当前实例,便于链式调用
130
-
131
- **错误处理建议**
132
- - 确保传入的router是有效的Vue Router实例
133
- - 在调用前检查router实例的状态
134
- - 如需重新初始化,可再次调用此方法
135
-
136
- **Section sources**
137
- - [packages/index.js:221-230](file://packages/index.js#L221-L230)
138
-
139
- ### initRouterGuards (初始化路由守卫)
140
- 初始化路由守卫,自动处理模态框关闭、翻译键收集和语言切换。
141
-
142
- **方法签名**
143
- ```typescript
144
- initRouterGuards(): void
145
- ```
146
-
147
- **参数**
148
- - 无参数
149
-
150
- **返回值**
151
- - `void` - 无返回值
152
-
153
- **副作用**
154
- - 注册 `beforeEach` 和 `afterEach` 路由守卫
155
- - 自动关闭 SweetAlert2 弹窗
156
- - 收集翻译键并更新 `translationKeys`
157
- - 设置当前路由名称
158
- - 更新 `I18N_CONFIG` 中的 `routerName`
159
-
160
- **增强功能**
161
- - **自动模态框管理**:在路由切换时自动调用 `closeModal()`
162
- - **翻译键收集**:自动收集当前页面使用的翻译键
163
- - **异步组件支持**:支持动态导入的异步组件
164
- - **登录路由检测**:自动识别登录路由并收集特殊翻译键
165
- - **路由名称跟踪**:维护当前路由名称以便 `$t` 方法使用
166
-
167
- **使用限制**
168
- - 仅在 `router` 存在时执行
169
- - 防止重复注册路由守卫
170
- - 处理异步组件加载错误
171
-
172
- **错误处理建议**
173
- - 捕获异步组件加载异常
174
- - 处理路由守卫注册冲突
175
- - 确保 `configInstance` 存在时才调用 `closeModal()`
176
-
177
- **Section sources**
178
- - [packages/index.js:232-335](file://packages/index.js#L232-L335)
179
-
180
- ## lib/gc_i18n.es.js 公共方法
181
- `lib/gc_i18n.es.js` 作为库的核心,通过向 Vue 应用实例的 `config.globalProperties` 挂载方法来暴露其公共 API。这些方法在 Vue 组件的模板和 `setup` 函数中均可直接使用。
182
-
183
- ### $t (翻译方法)
184
- 此方法用于根据给定的键(key)查找并返回对应的翻译文本。
185
-
186
- **方法签名**
187
- ```typescript
188
- $t(key: string, defaultValue?: string): string
189
- ```
190
-
191
- **参数**
192
- - **key**: `string` - 翻译资源的唯一标识符
193
- - **defaultValue**: `string` (可选) - 当翻译不存在时的默认值
194
-
195
- **返回值**
196
- - `string` - 与 `key` 对应的翻译文本。如果未找到匹配的翻译,则返回原始 `key`。
197
-
198
- **副作用**
199
- - 无直接副作用。其行为依赖于当前激活的语言环境和已加载的翻译资源。
200
- - 在内部,它会将 `key` 记录到 `translationKeySet` 中,用于后续的翻译键收集。
201
-
202
- **查找优先级**
203
- 该方法的查找逻辑已更新,优先级为:
204
- 1. `当前路由名.key` - 首选,针对特定路由的翻译
205
- 2. `common.key` - 次选,通用翻译
206
- 3. `key` - 最后选择,基础翻译
207
-
208
- **使用限制**
209
- - `key` 必须是字符串类型。
210
- - 该方法依赖于 `init` 过程中加载的语言包,若语言包未正确加载,可能返回不准确的翻译。
211
-
212
- **错误处理建议**
213
- - 在调用 `$t` 前,确保 `init` 过程已完成。
214
- - 在开发环境中,检查控制台日志以确认是否存在未找到的翻译键。
215
-
216
- **Section sources**
217
- - [lib/gc_i18n.es.js:2954-2971](file://lib/gc_i18n.es.js#L2954-L2971)
218
-
219
- ### $changeLocale (切换语言方法)
220
- 此方法用于动态更改当前应用的语言环境。
221
-
222
- **方法签名**
223
- ```typescript
224
- $changeLocale(locale: string): Promise<void>
225
- ```
226
-
227
- **参数**
228
- - **locale**: `string` - 目标语言环境的代码,例如 `"en-US"` 或 `"zh-CN"`。
229
-
230
- **返回值**
231
- - `Promise<void>` - 一个 Promise,当语言环境切换完成并重新加载相关资源后 resolve。
232
-
233
- **副作用**
234
- - 触发应用的重新渲染,以反映新的语言环境。
235
- - 发起网络请求以获取新的语言包。
236
- - 更新 `store2` 中的 `I18N_LANGUAGE` 值。
237
-
238
- **使用限制**
239
- - `locale` 必须是 `availableLocales` 数组中包含的有效语言代码。
240
- - 频繁调用可能导致性能下降。
241
-
242
- **错误处理建议**
243
- - 使用 `try-catch` 包裹异步调用,以捕获可能的网络错误。
244
- - 提供用户友好的错误提示,例如"切换语言失败,请稍后重试"。
245
-
246
- **Section sources**
247
- - [lib/gc_i18n.es.js:2979-2981](file://lib/gc_i18n.es.js#L2979-L2981)
248
-
249
- ### closeModal (关闭模态框方法)
250
- 此方法用于统一关闭 SweetAlert2 弹窗,确保模态框的正确销毁和资源清理。
251
-
252
- **方法签名**
253
- ```typescript
254
- closeModal(): void
255
- ```
256
-
257
- **参数**
258
- - 无参数
259
-
260
- **返回值**
261
- - `void` - 无返回值
262
-
263
- **副作用**
264
- - 关闭当前显示的 SweetAlert2 弹窗
265
- - 清理弹窗相关的事件监听器和 DOM 元素
266
- - 触发 `willClose` 和 `didClose` 事件回调
267
- - 释放内存资源,防止内存泄漏
268
-
269
- **使用限制**
270
- - 仅在 SweetAlert2 弹窗处于激活状态时有效
271
- - 调用后会触发弹窗的销毁流程,无法恢复
272
-
273
- **错误处理建议**
274
- - 确保在调用前检查弹窗是否已激活
275
- - 监听 `willClose` 和 `didClose` 事件以处理关闭后的逻辑
276
- - 在路由切换时自动调用此方法,避免弹窗残留
277
-
278
- **Section sources**
279
- - [lib/gc_i18n.es.js:1340-1350](file://lib/gc_i18n.es.js#L1340-L1350)
280
-
281
- ## i18nUtils.ts 工具函数
282
- `i18nUtils.ts` 文件提供了一个用于静态分析的工具函数,帮助开发者管理和审计翻译资源。
283
-
284
- ### extractTranslationKeys (提取翻译键)
285
- 此函数用于从 Vue 组件定义中提取所有使用的 `$t` 函数的键。
286
-
287
- **TypeScript 签名**
288
- ```typescript
289
- function extractTranslationKeys(component: any): string[]
290
- ```
291
-
292
- **参数**
293
- - **component**: `any` - 一个 Vue 组件的选项对象,通常包含 `template`, `render`, `setup`, `methods` 等属性。
294
-
295
- **返回值**
296
- - `string[]` - 一个包含所有唯一翻译键的字符串数组。
297
-
298
- **实现细节**
299
- - 该函数使用正则表达式 `/(\$t|_ctx\.\$t)\s*$$\s*(['"])([^'"]+?)\1/gs` 来匹配代码中 `$t(...)` 或 `_ctx.$t(...)` 的调用。
300
- - 它会递归地解析组件的 `template`、`render` 函数、`setup` 函数、`methods` 以及嵌套的子组件,以确保不遗漏任何翻译键。
301
- - 最终结果通过 `Set` 去重,保证返回的键数组是唯一的。
302
-
303
- **使用场景**
304
- - 构建工具中,用于生成缺失翻译键的报告。
305
- - 开发者手动检查组件,以确保所有翻译键都已定义。
306
-
307
- **Section sources**
308
- - [i18nUtils.ts:1-54](file://packages/libs/i18nUtils.ts#L1-L54)
309
-
310
- ## service.js 异步接口
311
- `service.js` 封装了与后端语言服务通信的异步接口,负责获取和管理翻译数据。
312
-
313
- ### getLanguagesWithCache (获取支持的语言列表 - 带缓存)
314
- 获取系统支持的所有语言环境列表,并提供本地缓存功能。
315
-
316
- **方法签名**
317
- ```typescript
318
- getLanguagesWithCache({ baseUrl, token, appCode, isRemote }: {
319
- baseUrl: string;
320
- token: string;
321
- appCode: string;
322
- isRemote?: boolean;
323
- }): Promise<any[]>
324
- ```
325
-
326
- **参数**
327
- - **baseUrl**: `string` - 后端服务的基础 URL。
328
- - **token**: `string` - 用于身份验证的授权令牌。
329
- - **appCode**: `string` - 应用的唯一标识码。
330
- - **isRemote**: `boolean` (可选, 默认: `false`) - 是否强制从远程获取,跳过缓存。
331
-
332
- **返回值**
333
- - `Promise<any[]>` - 一个 Promise,resolve 时返回包含支持语言列表的数组。每个语言对象包含 `langCode` 和 `langName` 字段。
334
-
335
- **副作用**
336
- - 读取和写入本地存储(`store2`),以缓存语言列表。
337
- - 可能发起网络请求。
338
-
339
- **使用限制**
340
- - 依赖于 `store2` 和 `lodash-es` 库。
341
- - 当 `isRemote` 为 `false` 且缓存存在时,不会发起网络请求。
342
-
343
- **错误处理建议**
344
- - 确保 `store2` 正常工作,本地存储空间充足。
345
- - 处理网络请求失败的情况,提供降级方案(如使用缓存数据)。
346
-
347
- **Section sources**
348
- - [service.js:19-61](file://packages/libs/service.js#L19-L61)
349
-
350
- ### getLanguages (获取支持的语言列表)
351
- 获取系统支持的所有语言环境列表。
352
-
353
- **方法签名**
354
- ```typescript
355
- getLanguages({ baseUrl, token, appCode }: { baseUrl: string; token: string; appCode: string }): Promise<any>
356
- ```
357
-
358
- **参数**
359
- - **baseUrl**: `string` - 后端服务的基础 URL。
360
- - **token**: `string` - 用于身份验证的授权令牌。
361
- - **appCode**: `string` - 应用的唯一标识码。
362
-
363
- **返回值**
364
- - `Promise<any>` - 一个 Promise,resolve 时返回包含支持语言列表的响应对象。
365
-
366
- **Section sources**
367
- - [service.js:63-72](file://packages/libs/service.js#L63-L72)
368
-
369
- ### fetchTranslate (获取翻译数据)
370
- 根据应用代码、语言等信息,从后端获取翻译数据。
371
-
372
- **方法签名**
373
- ```typescript
374
- fetchTranslate({ appCode, language, lastPullDate, baseUrl, token }: {
375
- appCode: string;
376
- language?: string;
377
- lastPullDate?: string;
378
- baseUrl: string;
379
- token: string;
380
- }): Promise<any>
381
- ```
382
-
383
- **参数**
384
- - **appCode**: `string` - 应用的唯一标识码。
385
- - **language**: `string` (可选, 默认: `"zh-CN"`) - 目标语言。
386
- - **lastPullDate**: `string` (可选) - 上次拉取数据的时间戳,用于增量更新。
387
- - **baseUrl**: `string` - 后端服务的基础 URL。
388
- - **token**: `string` - 用于身份验证的授权令牌。
389
-
390
- **返回值**
391
- - `Promise<any>` - 一个 Promise,resolve 时返回包含翻译数据的对象。如果请求成功,`res.data.result` 为 0,则返回 `res.data.retVal`;否则返回整个 `res` 对象。
392
-
393
- **Section sources**
394
- - [service.js:74-101](file://packages/libs/service.js#L74-L101)
395
-
396
- ### getTranslate (获取翻译数据 - 增强版)
397
- 此方法是 `fetchTranslate` 的增强版,它结合了本地存储(`store2`)来实现数据缓存和增量更新。
398
-
399
- **方法签名**
400
- ```typescript
401
- getTranslate({ baseUrl, appCode, language, token, routerName }: {
402
- baseUrl: string;
403
- appCode: string;
404
- language?: string;
405
- token: string;
406
- routerName: string;
407
- }): Promise<any>
408
- ```
409
-
410
- **参数**
411
- - 参数与 `fetchTranslate` 类似。
412
- - **routerName**: `string` - 当前路由的名称,用于 `mergeArraysByKey` 函数。
413
-
414
- **返回值**
415
- - `Promise<any>` - 一个 Promise,resolve 时返回合并后的翻译数据数组。
416
-
417
- **副作用**
418
- - 读取和写入本地存储(`store2`),以缓存翻译数据和 `lastPullDate`。
419
- - 可能发起网络请求。
420
- - 调用 `mergeArraysByKey` 函数合并数据。
421
-
422
- **使用限制**
423
- - 依赖于 `store2` 和 `lodash-es` 库。
424
- - 逻辑较为复杂,涉及缓存合并。
425
-
426
- **错误处理建议**
427
- - 确保 `store2` 正常工作,本地存储空间充足。
428
- - 处理网络请求失败的情况,提供降级方案(如使用缓存数据)。
429
-
430
- **更新** 该方法的行为已更新,当从后端获取到 `common` 类型的翻译时,会移除当前路由中同名的翻译数据。
431
-
432
- **Section sources**
433
- - [service.js:133-186](file://packages/libs/service.js#L133-L186)
434
-
435
- ### userDicts (用户词典)
436
- 提交用户自定义的翻译词典。
437
-
438
- **方法签名**
439
- ```typescript
440
- userDicts({ data, token, baseUrl }: { data: any; token: string; baseUrl: string }): Promise<any>
441
- ```
442
-
443
- **参数**
444
- - **data**: `any` - 用户词典数据。
445
- - **token**: `string` - 授权令牌。
446
- - **baseUrl**: `string` - 基础 URL。
447
-
448
- **返回值**
449
- - `Promise<any>` - 请求的响应。
450
-
451
- **Section sources**
452
- - [service.js:112-121](file://packages/libs/service.js#L112-L121)
453
-
454
- ### saveTranslate (保存翻译)
455
- 批量保存翻译数据。
456
-
457
- **方法签名**
458
- ```typescript
459
- saveTranslate({ data, token, baseUrl }: { data: any; token: string; baseUrl: string }): Promise<any>
460
- ```
461
-
462
- **参数**
463
- - **data**: `any` - 要保存的翻译数据。
464
- - **token**: `string` - 授权令牌。
465
- - **baseUrl**: `string` - 基础 URL。
466
-
467
- **返回值**
468
- - `Promise<any>` - 请求的响应。
469
-
470
- **Section sources**
471
- - [service.js:123-132](file://packages/libs/service.js#L123-L132)
472
-
473
- ## 使用示例与最佳实践
474
-
475
- ### 基本初始化
476
- ```javascript
477
- import { createApp } from 'vue';
478
- import I18n from 'gc_i18n';
479
- import router from './router';
480
-
481
- const app = createApp(App);
482
-
483
- // 创建国际化实例
484
- const i18n = new I18n({
485
- appCode: 'YOUR_APP_CODE',
486
- router: router,
487
- locale: 'zh-CN'
488
- });
489
-
490
- // 安装插件
491
- app.use(i18n);
492
- ```
493
-
494
- ### 延迟设置路由器
495
- ```javascript
496
- import { createApp } from 'vue';
497
- import I18n from 'gc_i18n';
498
- import router from './router';
499
-
500
- const app = createApp(App);
501
-
502
- // 先创建国际化实例,稍后再设置router
503
- const i18n = new I18n({
504
- appCode: 'YOUR_APP_CODE',
505
- locale: 'zh-CN'
506
- });
507
-
508
- // 稍后设置router
509
- i18n.setRouter(router);
510
-
511
- // 安装插件
512
- app.use(i18n);
513
- ```
514
-
515
- ### 在 Vue 模板中使用 $t
516
- ```vue
517
- <template>
518
- <h1>{{ $t("welcome_message") }}</h1>
519
- <p>{{ $t("description") }}</p>
520
- </template>
521
- ```
522
-
523
- ### 在 JavaScript 中切换语言
524
- ```javascript
525
- import { getCurrentInstance } from 'vue';
526
-
527
- export default {
528
- setup() {
529
- const { proxy } = getCurrentInstance();
530
-
531
- const changeLanguage = async (lang) => {
532
- try {
533
- await proxy.$changeLocale(lang);
534
- // 语言切换成功后的逻辑
535
- } catch (error) {
536
- console.error('切换语言失败:', error);
537
- }
538
- };
539
-
540
- return { changeLanguage };
541
- }
542
- }
543
- ```
544
-
545
- ### 提取组件中的翻译键
546
- ```javascript
547
- import { extractTranslationKeys } from './i18nUtils';
548
-
549
- const MyComponent = {
550
- template: '<div>{{ $t("hello") }}</div>',
551
- methods: {
552
- greet() {
553
- console.log(this.$t("greeting"));
554
- }
555
- }
556
- };
557
-
558
- const keys = extractTranslationKeys(MyComponent);
559
- console.log(keys); // 输出: ["hello", "greeting"]
560
- ```
561
-
562
- ### 路由守卫中集成 closeModal
563
- ```javascript
564
- // 在路由守卫中自动关闭模态框
565
- this.router.beforeEach(async (to, from, next) => {
566
- // 自动关闭配置中心弹窗
567
- this.configInstance && this.configInstance.closeModal();
568
- // 其他路由逻辑...
569
- });
570
- ```
571
-
572
- ## 错误处理与限制
573
- - **网络错误**: `service.js` 中的所有异步方法都可能因网络问题而失败。务必使用 `try-catch` 或 `.catch()` 处理 Promise 拒绝。
574
- - **缓存失效**: `getTranslate` 依赖本地存储。如果用户清除浏览器数据,缓存将丢失,需要重新下载完整语言包。
575
- - **类型安全**: `extractTranslationKeys` 的参数类型为 `any`,缺乏严格的类型检查,使用时需确保传入的是有效的组件对象。
576
- - **性能**: 频繁调用 `$changeLocale` 会导致应用重新渲染,应避免在短时间内多次调用。
577
- - **逻辑变更**: `getTranslate` 方法现在会移除 `common` 键覆盖的当前路由数据,这可能会影响某些依赖于特定键的组件。
578
- - **参数变更**: `fetchTranslate` 函数已移除 `page` 参数,使用时请注意更新调用方式。
579
- - **端点标准化**: 所有翻译服务端点已标准化为 `/i18n-web/...` 结构,确保了后端服务的一致性。
580
- - **模态框管理**: 新增的 `closeModal` 方法提供了统一的 SweetAlert2 弹窗管理,避免了弹窗残留问题。
581
- - **路由守卫增强**: `setRouter` 方法和增强的路由守卫功能提供了更完善的路由集成体验。
582
- - **延迟设置支持**: `setRouter` 方法支持延迟设置,提高了库的灵活性。
583
- - **版本更新** 本版本为 1.4.4,包含上述重要变更,特别是路由守卫中自动调用 `closeModal` 的功能集成。
584
-
585
- **版本更新** 本版本为 1.4.4,包含上述重要变更,特别是路由守卫中自动调用 `closeModal` 的功能集成。