i18n-jsautotranslate 3.18.52 → 3.18.54

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.
@@ -0,0 +1,156 @@
1
+ <template>
2
+ <div class="LanguageSelect ignore">
3
+ <!-- Arco Design 选择器组件 -->
4
+ <a-select
5
+ v-model="language"
6
+ value-key="id"
7
+ @change="LanguageSelectOnChange"
8
+ popup-class="ignore"
9
+ placeholder="请选择语言"
10
+ >
11
+ <!-- 语言选项列表(使用Select的子组件Option) -->
12
+ <a-select-option
13
+ class="ignore"
14
+ v-for="item in languageList"
15
+ :key="item.id"
16
+ :label="item.name"
17
+ :value="item.id"
18
+ />
19
+ </a-select>
20
+ </div>
21
+ </template>
22
+
23
+ <script setup lang="ts">
24
+ import { ref, onMounted } from 'vue';
25
+ // 需要同时导入Select和Option组件
26
+ import { Select as ASelect, Option as ASelectOption } from '@arco-design/web-vue';
27
+ import translate from 'i18n-jsautotranslate'
28
+
29
+ // 定义语言选项类型
30
+ interface LanguageOption {
31
+ id: string;
32
+ name: string;
33
+ }
34
+
35
+ // 选中的语言ID(双向绑定值)
36
+ const language = ref<string | null>(null);
37
+ /*
38
+ 语言选项列表
39
+ 其中的值为:
40
+ { id: 'zh-CN', name: '简体中文' },
41
+ { id: 'en-US', name: 'English' },
42
+ */
43
+ const languageList = ref<LanguageOption[]>([]);
44
+
45
+ // 处理语言选择变化
46
+ const LanguageSelectOnChange = (value: string) => {
47
+ window.translate.selectLanguageTag.selectOnChange({
48
+ target: {
49
+ value: value
50
+ }
51
+ });
52
+ };
53
+
54
+ onMounted(() => {
55
+ //重写渲染语言下拉列表出现时的函数,这里是为了把默认创建的 <div id="translate" 这个给去掉,其他无改变
56
+ translate.selectLanguageTag.render = function(){ //v2增加
57
+ if(translate.selectLanguageTag.alreadyRender){
58
+ return;
59
+ }
60
+ translate.selectLanguageTag.alreadyRender = true;
61
+
62
+ //判断如果不显示select选择语言,直接就隐藏掉
63
+ if(!translate.selectLanguageTag.show){
64
+ return;
65
+ }
66
+
67
+ //从服务器加载支持的语言库
68
+ if(typeof(translate.request.api.language) == 'string' && translate.request.api.language.length > 0){
69
+ //从接口加载语种
70
+ translate.request.post(translate.request.api.language, {}, function(data){
71
+ if(data.result == 0){
72
+ console.log('load language list error : '+data.info);
73
+ return;
74
+ }
75
+ translate.request.api.language = data.list; //进行缓存,下一次切换语言渲染的时候直接从缓存取,就不用在通过网络加载了
76
+ translate.selectLanguageTag.customUI(data.list);
77
+ }, null);
78
+ }else if(typeof(translate.request.api.language) == 'object'){
79
+ //无网络环境下,自定义显示语种
80
+ translate.selectLanguageTag.customUI(translate.request.api.language);
81
+ }
82
+
83
+ //显示切换语言
84
+ var TranslateJsSelectLanguages = document.getElementsByClassName('LanguageSelect');
85
+ TranslateJsSelectLanguages[0].style.display = 'block';
86
+ }
87
+
88
+ //languageList 便是当前支持的能切换的语种,你可以 console.log(languageList); 打印出来看看
89
+ translate.selectLanguageTag.customUI = function(externalLanguageList){
90
+ //整理允许显示的语种
91
+ var allowLanguageList: LanguageOption[] = [];
92
+
93
+ //判断 selectLanguageTag.languages 中允许使用哪些
94
+ if(translate.selectLanguageTag.languages.length > 0){
95
+ //设置了自定义显示的语言
96
+ //都转小写判断
97
+ var langs_indexof = (','+translate.selectLanguageTag.languages+',').toLowerCase();
98
+
99
+ for(var i = 0; i<externalLanguageList.length; i++){
100
+ if(langs_indexof.indexOf(','+externalLanguageList[i].id.toLowerCase()+',') < 0){
101
+ //没发现,那不显示这个语种,调出
102
+ continue
103
+ }
104
+ allowLanguageList.push(externalLanguageList[i]);
105
+ }
106
+
107
+ }else{
108
+ //显示所有
109
+ allowLanguageList = externalLanguageList;
110
+ }
111
+
112
+ //赋予带渲染到界面的语言列表数据
113
+ languageList.value = allowLanguageList;
114
+
115
+ //显示上一次切换后的语种
116
+ setTimeout(function(){
117
+ language.value = translate.language.getCurrent();
118
+ }, 50);
119
+ }
120
+
121
+ const refreshLanguage = function(){
122
+ //渲染语言下拉列表出现
123
+ window.translate.selectLanguageTag.refreshRender();
124
+ //显示上一次切换后的语种
125
+ language.value = translate.language.getCurrent();
126
+ };
127
+
128
+ // 当用户打开页面后,第一次触发 translate.execute() 时,进行触发
129
+ translate.lifecycle.execute.trigger.push(function(data){
130
+ if(translate.executeTriggerNumber === 0){
131
+ //console.log('这是打开页面后,第一次触发 translate.execute() ,因为translate.executeNumber 记录的是translate.execute() 执行完的次数。');
132
+ // 触发语言下拉列表出现
133
+ //渲染语言下拉列表出现
134
+ refreshLanguage();
135
+ }
136
+ });
137
+
138
+ //如果已经触发了 translate.execute() 那么直接就渲染
139
+ //console.log(translate.executeTriggerNumber+ ', '+translate.state)
140
+ if(translate.executeTriggerNumber > 0 || translate.state > 0){
141
+ refreshLanguage();
142
+ }
143
+
144
+ });
145
+
146
+
147
+ </script>
148
+
149
+ <style scoped>
150
+ /* 避免被遮挡无法操作,设置z-index较高 */
151
+ .LanguageSelect {
152
+ z-index: 2147483583;
153
+ display:none;
154
+ }
155
+ </style>
156
+
package/index.js CHANGED
@@ -14,7 +14,7 @@ var translate = {
14
14
  * 格式:major.minor.patch.date
15
15
  */
16
16
  // AUTO_VERSION_START
17
- version: '3.18.52.20250927',
17
+ version: '3.18.54.20250927',
18
18
  // AUTO_VERSION_END
19
19
  /*
20
20
  当前使用的版本,默认使用v2. 可使用 setUseVersion2();
@@ -185,6 +185,7 @@ var translate = {
185
185
  return;
186
186
  }
187
187
  //console.log(data.list);
188
+ translate.request.api.language = data.list; //进行缓存,下一次切换语言渲染的时候直接从缓存取,就不用在通过网络加载了
188
189
  translate.selectLanguageTag.customUI(data.list);
189
190
  }, null);
190
191
  }else if(typeof(translate.request.api.language) == 'object'){
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18n-jsautotranslate",
3
- "version": "3.18.52",
3
+ "version": "3.18.54",
4
4
  "description": "Two lines of js realize automatic html translation. No need to change the page, no language configuration file, no API key, SEO friendly!",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -14,7 +14,7 @@
14
14
  ],
15
15
  "files": [
16
16
  "index.js",
17
- "ArcoDesign/Vue3/SelectLanguage.vue"
17
+ "ArcoDesign/**"
18
18
  ],
19
19
  "homepage": "https://github.com/xnx3/translate#readme",
20
20
  "bugs": {