i18n-jsautotranslate 3.18.72 → 3.18.73

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/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.72.20251010',
17
+ version: '3.18.73.20251011',
18
18
  // AUTO_VERSION_END
19
19
  /*
20
20
  当前使用的版本,默认使用v2. 可使用 setUseVersion2();
@@ -0,0 +1,145 @@
1
+ <template>
2
+ <div class="LanguageSelect ignore">
3
+ <!-- 使用作用域插槽,将组件内部的数据和方法传递给父组件 -->
4
+ <slot
5
+ :LanguageSelectLanguageList="LanguageSelectLanguageList"
6
+ :LanguageSelectOnChange="LanguageSelectOnChange"
7
+ :LanguageSelectRenderLabel="LanguageSelectRenderLabel"
8
+ >
9
+ <!-- 默认的n-select实现 -->
10
+ <n-select
11
+ v-model:value="language"
12
+ @update:value="LanguageSelectOnChange"
13
+ placeholder="Please select language"
14
+ :options="LanguageSelectLanguageList"
15
+ label-field="name"
16
+ value-field="id"
17
+ class="ignore"
18
+ :render-label="LanguageSelectRenderLabel"
19
+ />
20
+ </slot>
21
+ </div>
22
+ </template>
23
+
24
+ <script setup lang="ts">
25
+ import { ref, onMounted, defineProps } from 'vue';
26
+ import { h } from 'vue';
27
+ import { NSelect } from 'naive-ui';
28
+
29
+ // 定义语言选项类型
30
+ interface LanguageOption {
31
+ id: string;
32
+ name: string;
33
+ }
34
+
35
+
36
+ // 选中的语言ID(双向绑定值)
37
+ const language = ref<string | null>(null);
38
+
39
+ // 语言选项列表
40
+ const LanguageSelectLanguageList = ref<LanguageOption[]>([]);
41
+
42
+ // 处理语言选择变化
43
+ const LanguageSelectOnChange = (value: string) => {
44
+ language.value = value;
45
+ window.translate.selectLanguageTag.selectOnChange({
46
+ target: {
47
+ value: value
48
+ }
49
+ });
50
+ };
51
+
52
+ // 自定义渲染标签函数
53
+ const LanguageSelectRenderLabel = (option: LanguageOption) => {
54
+ const { name } = option;
55
+ return h('span', { class: 'ignore' }, name);
56
+ };
57
+
58
+ onMounted(() => {
59
+ // 保留原有的初始化逻辑
60
+ if (typeof (translate) == 'object' && typeof (translate.vue3) == 'object' && typeof (translate.vue3.isUse) == 'boolean' && translate.vue3.isUse == true) {
61
+ // 正常,需要的,需要加载多语言切换Select
62
+ } else {
63
+ // 不需要显示
64
+ return;
65
+ }
66
+
67
+ translate.time.log(translate.vue3.isUse);
68
+
69
+ // 重写渲染语言下拉列表出现时的函数
70
+ translate.selectLanguageTag.render = function () {
71
+ if (translate.selectLanguageTag.alreadyRender) {
72
+ return;
73
+ }
74
+ translate.selectLanguageTag.alreadyRender = true;
75
+
76
+ // 判断如果不显示select选择语言,直接就隐藏掉
77
+ if (!translate.selectLanguageTag.show) {
78
+ return;
79
+ }
80
+
81
+ // 从服务器加载支持的语言库
82
+ if (typeof (translate.request.api.language) == 'string' && translate.request.api.language.length > 0) {
83
+ // 从接口加载语种
84
+ translate.request.post(translate.request.api.language, {}, function (data) {
85
+ if (data.result == 0) {
86
+ console.log('load language list error : ' + data.info);
87
+ return;
88
+ }
89
+ translate.request.api.language = data.list; // 进行缓存
90
+ translate.selectLanguageTag.customUI(data.list);
91
+ }, null);
92
+ } else if (typeof (translate.request.api.language) == 'object') {
93
+ // 无网络环境下,自定义显示语种
94
+ translate.selectLanguageTag.customUI(translate.request.api.language);
95
+ }
96
+
97
+ // 显示切换语言
98
+ const TranslateJsSelectLanguages = document.getElementsByClassName('LanguageSelect');
99
+ for (let li = 0; li < TranslateJsSelectLanguages.length; li++) {
100
+ TranslateJsSelectLanguages[li].style.display = 'block';
101
+ }
102
+ }
103
+
104
+ // 处理语言列表数据
105
+ translate.selectLanguageTag.customUI = function (externalLanguageList) {
106
+ // 整理允许显示的语种
107
+ const allowLanguageList: LanguageOption[] = [];
108
+
109
+ // 判断 selectLanguageTag.languages 中允许使用哪些
110
+ if (translate.selectLanguageTag.languages.length > 0) {
111
+ // 设置了自定义显示的语言
112
+ // 都转小写判断
113
+ const langs_indexof = (',' + translate.selectLanguageTag.languages + ',').toLowerCase();
114
+
115
+ for (let i = 0; i < externalLanguageList.length; i++) {
116
+ if (langs_indexof.indexOf(',' + externalLanguageList[i].id.toLowerCase() + ',') < 0) {
117
+ // 没发现,那不显示这个语种,调出
118
+ continue;
119
+ }
120
+ allowLanguageList.push(externalLanguageList[i]);
121
+ }
122
+
123
+ } else {
124
+ // 显示所有
125
+ allowLanguageList.push(...externalLanguageList);
126
+ }
127
+ // 赋予带渲染到界面的语言列表数据
128
+ LanguageSelectLanguageList.value = allowLanguageList;
129
+
130
+ // 显示上一次切换后的语种
131
+ language.value = translate.language.getCurrent();
132
+ }
133
+
134
+ // 渲染语言下拉列表出现
135
+ translate.selectLanguageTag.refreshRender();
136
+ });
137
+ </script>
138
+
139
+ <style scoped>
140
+ /* 避免被遮挡无法操作,设置z-index较高 */
141
+ .LanguageSelect {
142
+ z-index: 2147483583;
143
+ display: none;
144
+ }
145
+ </style>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18n-jsautotranslate",
3
- "version": "3.18.72",
3
+ "version": "3.18.73",
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,8 +14,9 @@
14
14
  ],
15
15
  "files": [
16
16
  "index.js",
17
- "ArcoDesign/**",
18
- "vue/**"
17
+ "ArcoDesign/Vue3/LanguageSelect.vue",
18
+ "vue/**",
19
+ "naiveUI/LanguageSelect.vue"
19
20
  ],
20
21
  "homepage": "https://github.com/xnx3/translate#readme",
21
22
  "bugs": {