gc_i18n 1.3.12 → 1.3.13
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.
|
@@ -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)
|