gc_i18n 1.4.1 → 1.4.2

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,18 +7,20 @@
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
+ - [package.json](file://package.json) - *版本信息,从1.3.12升级到1.4.1*
11
11
  </cite>
12
12
 
13
13
  ## 更新摘要
14
14
  **变更内容**
15
15
  - 移除了 `fetchTranslate` 函数中的 `page` 参数,更新了函数签名和参数说明
16
- - 版本从 1.3.12 升级到 1.3.13
16
+ - 版本从 1.3.12 升级到 1.4.1
17
17
  - 更新了 `service.js` 中 `getTranslate` 方法的文档,以反映其新的行为:当返回 `common` 类型的翻译时,会移除当前路由的数据
18
18
  - 更新了 `gc_i18n.es.js` 中 `$t` 方法的文档,详细说明了其新的查找优先级:先查找 `route.key`,再查找 `common.key`,最后查找全局 `key`
19
19
  - 更新了 `utils.js` 中 `mergeArraysByKey` 函数的文档,说明了其在合并数据时会移除与 `common` 键匹配的当前路由数据
20
20
  - 修正了 `service.js` 中 `fetchTranslate` 和 `getTranslate` 方法的返回值描述,使其与代码实现一致
21
21
  - 更新了所有受影响部分的源代码引用,以反映最新的文件状态
22
+ - **新增**:标准化了后端翻译服务端点,从 `i18n-web//app/getsupportedlangs` 迁移到 `i18n-web/app/getsupportedlangs`
23
+ - **新增**:引入了 `getLanguagesWithCache` 函数,提供带缓存的语言列表获取功能
22
24
 
23
25
  ## 目录
24
26
  1. [简介](#简介)
@@ -76,7 +78,7 @@ $t(key: string): string
76
78
  **更新** 该方法的查找逻辑已更新,优先级为:`当前路由名.key` > `common.key` > `key`。
77
79
 
78
80
  **Section sources**
79
- - [gc_i18n.es.js:272-297](file://lib/gc_i18n.es.js#L272-L297) - *更新了 $t 方法的实现*
81
+ - [gc_i18n.es.js:315-364](file://lib/gc_i18n.es.js#L315-L364) - *更新了 $t 方法的实现*
80
82
  - [src/view/Home.vue](file://src/view/Home.vue#L19)
81
83
  - [src/view/login.vue](file://src/view/login.vue#L10)
82
84
 
@@ -110,7 +112,7 @@ $changeLocale(locale: string): Promise<void>
110
112
  **更新** 该方法的实现已更新,现在通过调用 `setLanguage` 方法来完成核心逻辑。
111
113
 
112
114
  **Section sources**
113
- - [gc_i18n.es.js:316-321](file://lib/gc_i18n.es.js#L316-L321) - *更新了 $changeLocale 方法的实现*
115
+ - [gc_i18n.es.js:383-392](file://lib/gc_i18n.es.js#L383-L392) - *更新了 $changeLocale 方法的实现*
114
116
  - [src/view/Home.vue](file://src/view/Home.vue#L2)
115
117
  - [src/view/login.vue](file://src/view/login.vue#L2)
116
118
 
@@ -146,6 +148,45 @@ function extractTranslationKeys(component: any): string[]
146
148
  ## service.js 异步接口
147
149
  `service.js` 封装了与后端语言服务通信的异步接口,负责获取和管理翻译数据。
148
150
 
151
+ ### getLanguagesWithCache (获取支持的语言列表 - 带缓存)
152
+ 获取系统支持的所有语言环境列表,并提供本地缓存功能。
153
+
154
+ **方法签名**
155
+ ```typescript
156
+ getLanguagesWithCache({ baseUrl, token, appCode, isRemote }: {
157
+ baseUrl: string;
158
+ token: string;
159
+ appCode: string;
160
+ isRemote?: boolean;
161
+ }): Promise<any[]>
162
+ ```
163
+
164
+ **参数**
165
+ - **baseUrl**: `string` - 后端服务的基础 URL。
166
+ - **token**: `string` - 用于身份验证的授权令牌。
167
+ - **appCode**: `string` - 应用的唯一标识码。
168
+ - **isRemote**: `boolean` (可选, 默认: `false`) - 是否强制从远程获取,跳过缓存。
169
+
170
+ **返回值**
171
+ - `Promise<any[]>` - 一个 Promise,resolve 时返回包含支持语言列表的数组。每个语言对象包含 `langCode` 和 `langName` 字段。
172
+
173
+ **副作用**
174
+ - 读取和写入本地存储(`store2`),以缓存语言列表。
175
+ - 可能发起网络请求。
176
+
177
+ **使用限制**
178
+ - 依赖于 `store2` 和 `lodash-es` 库。
179
+ - 当 `isRemote` 为 `false` 且缓存存在时,不会发起网络请求。
180
+
181
+ **错误处理建议**
182
+ - 确保 `store2` 正常工作,本地存储空间充足。
183
+ - 处理网络请求失败的情况,提供降级方案(如使用缓存数据)。
184
+
185
+ **更新** 新增的带缓存功能,提高了语言列表获取的性能和可靠性。
186
+
187
+ **Section sources**
188
+ - [service.js:19-61](file://packages/libs/service.js#L19-L61) - *新增的带缓存语言列表获取功能*
189
+
149
190
  ### getLanguages (获取支持的语言列表)
150
191
  获取系统支持的所有语言环境列表。
151
192
 
@@ -162,6 +203,8 @@ getLanguages({ baseUrl, token, appCode }: { baseUrl: string; token: string; appC
162
203
  **返回值**
163
204
  - `Promise<any>` - 一个 Promise,resolve 时返回包含支持语言列表的响应对象。
164
205
 
206
+ **更新** 端点已标准化为 `/i18n-web/app/getsupportedlangs`,移除了重复的斜杠。
207
+
165
208
  **Section sources**
166
209
  - [service.js:63-72](file://packages/libs/service.js#L63-L72)
167
210
 
@@ -327,5 +370,6 @@ console.log(keys); // 输出: ["hello", "greeting"]
327
370
  - **性能**: 频繁调用 `$changeLocale` 会导致应用重新渲染,应避免在短时间内多次调用。
328
371
  - **逻辑变更**: `getTranslate` 方法现在会移除 `common` 键覆盖的当前路由数据,这可能会影响某些依赖于特定键的组件。
329
372
  - **参数变更**: `fetchTranslate` 函数已移除 `page` 参数,使用时请注意更新调用方式。
373
+ - **端点标准化**: 所有翻译服务端点已标准化为 `/i18n-web/...` 结构,确保了后端服务的一致性。
330
374
 
331
- **版本更新** 本版本为 1.3.13,包含上述重要变更。
375
+ **版本更新** 本版本为 1.4.1,包含上述重要变更,特别是后端翻译服务端点的标准化迁移和新增的带缓存语言列表获取功能。
@@ -21,12 +21,10 @@
21
21
 
22
22
  ## 更新摘要
23
23
  **所做变更**
24
- - 更新了 i18n-earth 组件的重大功能增强:从简单的 Icon 组件升级为完整的 v-model 驱动编辑组件
25
- - 新增了模态框编辑功能,支持多语言翻译的实时编辑和保存
26
- - 增强了缓存机制,包括语言列表缓存和翻译数据缓存
27
- - 完善了组件的 Props 配置和事件处理机制
28
- - 更新了键盘快捷键配置,从 ctrl+shift+l 更改为 ctrl+shift+e
29
- - 新增了文本编辑模式功能,支持可视化翻译编辑
24
+ - 更新了API端点迁移:语言列表获取端点从 `/i18n-web/language/languages` 迁移到 `/i18n-web/app/getsupportedlangs`
25
+ - 更新了基础URL配置:从 `https://i18n.ihotel.cn` 更新为 `https://trans.ihotel.cn`
26
+ - 修正了语言列表API调用路径中的双斜杠问题
27
+ - 更新了文本编辑模式和i18n-earth组件的基础URL配置
30
28
 
31
29
  ## 目录
32
30
  1. [项目结构分析](#项目结构分析)
@@ -272,6 +270,7 @@ window.addEventListener("message", (event) => {
272
270
  | width | Number | `null` | input宽度(px),不传则使用默认样式 |
273
271
  | className | String | `""` | 自定义容器类名 |
274
272
  | languages | Array | `[]` | 自定义语言列表,不传则从store/API获取 |
273
+ | baseUrl | String | `"https://trans.ihotel.cn"` | API基础URL,从I18n实例传入 |
275
274
 
276
275
  ### 在应用中的使用
277
276
 
@@ -816,4 +815,117 @@ style O fill:#f96,stroke:#333
816
815
  - [service.js:1-189](file://packages/libs/service.js#L1-L189)
817
816
  - [utils.js:1-51](file://packages/libs/utils.js#L1-L51)
818
817
  - [textEditMode.js:1-623](file://packages/libs/textEditMode.js#L1-L623)
819
- - [textEditMode.css:1-166](file://packages/libs/textEditMode.css#L1-L166)
818
+ - [textEditMode.css:1-166](file://packages/libs/textEditMode.css#L1-L166)
819
+
820
+ ## API端点迁移详细说明
821
+
822
+ ### 语言列表获取端点迁移
823
+
824
+ **更新**:语言列表获取端点已从 `/i18n-web/language/languages` 迁移到 `/i18n-web/app/getsupportedlangs`
825
+
826
+ #### 旧版本(已废弃)
827
+ - 基础URL:`https://i18n.ihotel.cn`
828
+ - 端点路径:`/i18n-web/language/languages`
829
+ - 调用方式:`GET https://i18n.ihotel.cn/i18n-web/language/languages`
830
+
831
+ #### 新版本(当前)
832
+ - 基础URL:`https://trans.ihotel.cn`
833
+ - 端点路径:`/i18n-web/app/getsupportedlangs`
834
+ - 调用方式:`GET https://trans.ihotel.cn/i18n-web/app/getsupportedlangs?appCode={appCode}`
835
+
836
+ ### 代码变更详情
837
+
838
+ #### packages/index.js 中的baseUrl配置
839
+ ```javascript
840
+ this.baseUrl =
841
+ env === "dev" || dev === true
842
+ ? "https://test.ihotel.cn"
843
+ : !env || env === "local"
844
+ ? ""
845
+ : "https://trans.ihotel.cn";
846
+ ```
847
+
848
+ #### packages/libs/service.js 中的API调用
849
+ ```javascript
850
+ // 语言列表获取(带缓存)
851
+ const res = await http.get(`${baseUrl}/i18n-web//app/getsupportedlangs`, {
852
+ headers: {
853
+ appCode,
854
+ Authorization: token
855
+ }
856
+ });
857
+
858
+ // 语言列表获取(直接调用)
859
+ return http.get(
860
+ baseUrl + "/i18n-web/app/getsupportedlangs?appCode=" + appCode,
861
+ {
862
+ headers: {
863
+ Authorization: token
864
+ }
865
+ }
866
+ );
867
+ ```
868
+
869
+ #### packages/libs/textEditMode.js 中的baseUrl配置
870
+ ```javascript
871
+ this.baseUrl =
872
+ !env || env === "local"
873
+ ? ""
874
+ : env === "dev"
875
+ ? "https://test.ihotel.cn"
876
+ : "https://trans.ihotel.cn";
877
+ ```
878
+
879
+ #### packages/components/earth.js 中的baseUrl默认值
880
+ ```javascript
881
+ baseUrl: {
882
+ type: String,
883
+ default: "https://trans.ihotel.cn"
884
+ }
885
+ ```
886
+
887
+ ### 环境配置说明
888
+
889
+ | 环境变量 | 基础URL | 用途 |
890
+ |----------|---------|------|
891
+ | `local` | 空字符串 | 本地开发环境,使用相对路径 |
892
+ | `dev` | `https://test.ihotel.cn` | 开发测试环境 |
893
+ | `prod` | `https://trans.ihotel.cn` | 生产环境 |
894
+ | 未设置 | `https://trans.ihotel.cn` | 默认生产环境 |
895
+
896
+ ### 缓存机制
897
+
898
+ 语言列表获取已实现智能缓存机制:
899
+
900
+ 1. **内存缓存**:首次获取后缓存在内存中
901
+ 2. **localStorage缓存**:持久化存储语言列表
902
+ 3. **条件刷新**:支持强制从远程获取(`isRemote = true`)
903
+
904
+ ### 错误处理
905
+
906
+ API调用包含完善的错误处理机制:
907
+
908
+ ```javascript
909
+ try {
910
+ const res = await http.get(`${baseUrl}/i18n-web//app/getsupportedlangs`, {
911
+ headers: { appCode, Authorization: token }
912
+ });
913
+
914
+ if (res.data && res.data.result === 0) {
915
+ // 成功处理
916
+ const langs = _.get(res.data, "retVal", []);
917
+ store2.set("I18N_LANGUAGES", langs);
918
+ return formattedLangs;
919
+ }
920
+ } catch (error) {
921
+ console.error("获取语言列表失败:", error);
922
+ // 返回空数组或降级处理
923
+ return [];
924
+ }
925
+ ```
926
+
927
+ **本节来源**
928
+ - [index.js:113-118](file://packages/index.js#L113-L118)
929
+ - [service.js:40-71](file://packages/libs/service.js#L40-L71)
930
+ - [textEditMode.js:34-39](file://packages/libs/textEditMode.js#L34-L39)
931
+ - [earth.js:43-46](file://packages/components/earth.js#L43-L46)
@@ -16,10 +16,10 @@
16
16
 
17
17
  ## 更新摘要
18
18
  **所做更改**
19
- - 新增了 editKeyboard 配置选项,用于自定义文本编辑模式快捷键
20
- - 更新了配置项清单,添加了 editKeyboard 的详细说明
21
- - 新增了文本编辑模式功能的配置和使用说明
22
- - 更新了配置示例,包含 editKeyboard 的使用方法
19
+ - 更新了基础URL配置,将 `https://i18n.ihotel.cn` 更新为 `https://trans.ihotel.cn`
20
+ - 标准化了API端点路径,移除了重复的斜杠
21
+ - 更新了环境配置说明,反映最新的URL变更
22
+ - 修正了iframe配置的URL结构说明
23
23
 
24
24
  ## 目录
25
25
  1. [i18n构建配置](#i18n构建配置)
@@ -119,12 +119,12 @@ external: [
119
119
  ### 文本编辑模式功能
120
120
  **新增** 文本编辑模式功能提供了可视化的翻译编辑能力:
121
121
 
122
- - **快捷键**: 默认为 `shift+e`,可通过 `editKeyboard` 配置自定义
122
+ - **快捷键**: 默认为 `ctrl+shift+e`,可通过 `editKeyboard` 配置自定义
123
123
  - **功能**: 为页面中的翻译文本添加可编辑外框,点击即可编辑
124
124
  - **样式**: 提供专门的CSS样式支持编辑模式的视觉反馈
125
125
 
126
126
  **Section sources**
127
- - [packages/index.js:67-466](file://packages/index.js#L67-L466)
127
+ - [packages/index.js:67-547](file://packages/index.js#L67-L547)
128
128
 
129
129
  ## 初始化配置对象
130
130
 
@@ -161,7 +161,7 @@ external: [
161
161
  - **env**: 环境模式,支持 "local"、"dev"、"production"
162
162
  - **login**: 是否启用登录功能
163
163
  - **messages**: 预定义的语言消息对象
164
- - **editKeyboard**: 文本编辑模式快捷键,默认为 "shift+e"
164
+ - **editKeyboard**: 文本编辑模式快捷键,默认为 "ctrl+shift+e"
165
165
 
166
166
  **Section sources**
167
167
  - [src/main.js:1-12](file://src/main.js#L1-L12)
@@ -182,15 +182,15 @@ external: [
182
182
  | **orgCode** | String | null | 任意字符串 | 用于生成 JWT token 的组织代码 |
183
183
  | **loginRouteName** | String | "login" | 任意字符串 | 登录页面的路由名称 |
184
184
  | **login** | Boolean | false | true/false | 是否启用登录功能 |
185
- | **keyboard** | String | "shift>t" | 键盘快捷键组合 | 触发展示配置iframe的快捷键 |
186
- | **editKeyboard** | String | "shift+e" | 键盘快捷键组合 | 触发文本编辑模式的快捷键 |
185
+ | **keyboard** | String | "ctrl+shift+l" | 键盘快捷键组合 | 触发展示配置iframe的快捷键 |
186
+ | **editKeyboard** | String | "ctrl+shift+e" | 键盘快捷键组合 | 触发文本编辑模式的快捷键 |
187
187
  | **env** | String | "local" | "local"、"dev"、"production" | 环境模式,决定baseUrl |
188
188
  | **locale** | String | 浏览器语言或 "zh-CN" | 有效的语言代码 | 默认语言设置 |
189
189
  | **baseUrl** | String | 根据env计算 | "local"、"dev"、"production" 或自定义URL | 语言服务基础URL |
190
190
 
191
191
  ### 环境配置详解
192
192
 
193
- **更新** 环境配置系统现已支持三种字符串模式:
193
+ **更新** 环境配置系统现已支持三种字符串模式,基础URL已更新为 `https://trans.ihotel.cn`:
194
194
 
195
195
  #### 本地开发环境 (local)
196
196
  - **配置值**: `"local"`
@@ -216,6 +216,15 @@ external: [
216
216
  baseUrl: "https://custom-domain.com"
217
217
  ```
218
218
 
219
+ ### API端点标准化
220
+
221
+ **更新** API端点路径已标准化,移除了重复的斜杠:
222
+
223
+ - **语言列表接口**: `${baseUrl}/i18n-web/app/getsupportedlangs`
224
+ - **翻译获取接口**: `${baseUrl}/i18n-web/kv_translate/kv_translates`
225
+ - **用户词典接口**: `${baseUrl}/i18n-web/kv_translate/userDicts`
226
+ - **批量保存接口**: `${baseUrl}/i18n-web/kv_translate/batch`
227
+
219
228
  ### vue-i18n 配置项
220
229
 
221
230
  | 配置项 | 类型 | 默认值 | 有效值范围 | 实际影响 |
@@ -247,7 +256,7 @@ baseUrl: "https://custom-domain.com"
247
256
 
248
257
  | 配置项 | 类型 | 默认值 | 有效值范围 | 实际影响 |
249
258
  | --- | --- | --- | --- | --- |
250
- | **editKeyboard** | String | "shift+e" | 键盘快捷键组合 | 触发文本编辑模式的快捷键 |
259
+ | **editKeyboard** | String | "ctrl+shift+e" | 键盘快捷键组合 | 触发文本编辑模式的快捷键 |
251
260
  | **baseUrl** | String | 根据env计算 | URL地址 | 编辑模式的基础URL |
252
261
  | **iframeSrc** | String | `${baseUrl}/i18n-admin-front/#/config?...` | URL地址 | iframe加载的配置管理器地址 |
253
262
  | **iframeWidth** | String | "100%" | CSS 值 | iframe宽度 |
@@ -267,12 +276,12 @@ baseUrl: "https://custom-domain.com"
267
276
  | **iframeBorderStyle** | String | "none" | CSS 值 | iframe边框样式 |
268
277
 
269
278
  **Section sources**
270
- - [packages/index.js:67-466](file://packages/index.js#L67-L466)
279
+ - [packages/index.js:67-547](file://packages/index.js#L67-L547)
271
280
  - [vite.config.js:1-72](file://vite.config.js#L1-L72)
272
281
  - [packages/swal.css:1-18](file://packages/swal.css#L1-L18)
273
282
  - [package.json:13-20](file://package.json#L13-L20)
274
- - [packages/libs/textEditMode.js:1-475](file://packages/libs/textEditMode.js#L1-L475)
275
- - [packages/libs/textEditMode.css:1-167](file://packages/libs/textEditMode.css#L1-L167)
283
+ - [packages/libs/textEditMode.js:1-623](file://packages/libs/textEditMode.js#L1-L623)
284
+ - [packages/libs/textEditMode.css:1-166](file://packages/libs/textEditMode.css#L1-L166)
276
285
 
277
286
  ## 配置示例
278
287
 
@@ -333,7 +342,7 @@ const i18nInstance = new gc_i18n({
333
342
  token: "your-jwt-token",
334
343
  loginRouteName: "signin",
335
344
  login: true,
336
- env: "production" // 使用生产环境
345
+ env: "production" // 使用生产环境,基础URL更新为 https://trans.ihotel.cn
337
346
  });
338
347
  ```
339
348
 
@@ -424,13 +433,13 @@ export default {
424
433
  ```css
425
434
  /* 自定义编辑模式样式 */
426
435
  .i18n-editable-text {
427
- outline: 2px solid #ff6b6b !important;
428
- background-color: rgba(255, 107, 107, 0.1);
436
+ outline: 2px solid #2d8cf0 !important;
437
+ background-color: rgba(45, 140, 240, 0.05);
429
438
  }
430
439
 
431
440
  .i18n-editable-text:hover {
432
- outline: 2px solid #ff6b6b !important;
433
- background-color: rgba(255, 107, 107, 0.2);
441
+ outline: 2px solid #2d8cf0 !important;
442
+ background-color: rgba(45, 140, 240, 0.1);
434
443
  }
435
444
 
436
445
  .i18n-edit-modal-popup {
@@ -438,13 +447,13 @@ export default {
438
447
  }
439
448
 
440
449
  .i18n-edit-modal-title {
441
- color: #ff6b6b;
450
+ color: #2d8cf0;
442
451
  font-size: 20px;
443
452
  }
444
453
  ```
445
454
 
446
455
  **Section sources**
447
456
  - [lang/index.js:16-33](file://lang/index.js#L16-L33)
448
- - [packages/index.js:67-466](file://packages/index.js#L67-L466)
457
+ - [packages/index.js:67-547](file://packages/index.js#L67-L547)
449
458
  - [packages/swal.css:1-18](file://packages/swal.css#L1-L18)
450
- - [packages/libs/textEditMode.css:1-167](file://packages/libs/textEditMode.css#L1-L167)
459
+ - [packages/libs/textEditMode.css:1-166](file://packages/libs/textEditMode.css#L1-L166)