yh-i18n 2.2.13 → 2.2.15

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/excelTool.ts CHANGED
File without changes
package/index.d.ts CHANGED
File without changes
package/index.js CHANGED
@@ -37,10 +37,10 @@ const initlang = localStorage.translateLanguage || navLang || "zh_CN";
37
37
 
38
38
  export let i18n = null;
39
39
  window.translateReady = localStorage.translateReady ? localStorage.translateReady === "1" : import.meta.env.DEV;
40
- const isDev = window.translateReady;
41
40
  let contentReady = false;
42
41
 
43
42
  const keySet = new Set();
43
+ window.keySet = keySet;
44
44
  Object.keys(zhCNBase).forEach((key) => {
45
45
  keySet.add(key);
46
46
  });
@@ -48,7 +48,7 @@ Object.keys(zhCNBase).forEach((key) => {
48
48
  const unHandle = [];
49
49
 
50
50
  function addTranslate (key) {
51
- if (key.indexOf("vxe") === -1) {
51
+ if (key && key.indexOf("vxe") === -1) {
52
52
  try {
53
53
  axios.request({
54
54
  url: "/translate/insert",
@@ -78,7 +78,6 @@ function recursionAddTranslate () {
78
78
  }
79
79
  // 通过延时降低任务密度,避免挤兑正常逻辑的运算资源
80
80
  recursionAddTimer = setTimeout(() => {
81
- // cLog(`${unHandle.length} ${key}`);
82
81
  recursionAddTimer = null;
83
82
  recursionAddTranslate();
84
83
  }, 150);
@@ -86,14 +85,14 @@ function recursionAddTranslate () {
86
85
  }
87
86
 
88
87
  export const ct = (key, args) => {
89
- if (isDev && window.translateCollect) {
88
+ if (key && window.translateReady && window.translateCollect) {
90
89
  // 将 键的处理全部放入队列中,避免挤兑正常逻辑的运算资源
91
- if (!unHandle.includes(key)) {
90
+ if (!keySet.has(key) && !unHandle.includes(key)) {
92
91
  unHandle.push(key);
93
92
  recursionAddTranslate();
94
93
  }
95
94
  }
96
- if (i18n) {
95
+ if (key && i18n) {
97
96
  return i18n.global.t(key, args);
98
97
  } else {
99
98
  return key;
@@ -180,7 +179,6 @@ export const useI18nStore = defineStore("i18nStore", () => {
180
179
  });
181
180
 
182
181
  return {
183
- isDev,
184
182
  lang,
185
183
  setLang,
186
184
  langList,
@@ -214,7 +212,7 @@ async function getRemoteMessage (list) {
214
212
  try {
215
213
  let itemObj = JSON.parse(item);
216
214
  let mKey = itemObj.zh_CN;
217
- if (import.meta.env.DEV && !keySet.has(mKey)) {
215
+ if (window.translateReady && !keySet.has(mKey)) {
218
216
  keySet.add(mKey);
219
217
  }
220
218
  Object.entries(itemObj).forEach(([key, val]) => {
@@ -223,7 +221,7 @@ async function getRemoteMessage (list) {
223
221
  }
224
222
  });
225
223
  } catch (err) {
226
- if (isDev) {
224
+ if (window.translateReady) {
227
225
  // console.count("翻译数据格式不对");
228
226
  }
229
227
  }
@@ -268,7 +266,7 @@ function createLocalMessage (list) {
268
266
  }
269
267
 
270
268
  export function addI18nPage (router) {
271
- if (isDev) {
269
+ if (window.translateReady) {
272
270
  router.addRoute("Index", {
273
271
  path: "translate",
274
272
  name: "翻译管理",
@@ -304,10 +302,10 @@ export const yhI18n = {
304
302
  app.use(i18n);
305
303
  app.config.globalProperties.$T = ct;
306
304
 
307
- if (!isDev) {
308
- cLog("没有开启翻译管理,可以在开发环境或者在控制台运行后面的代码再刷新页面: `localStorage.translateLanguage = '1'`");
305
+ if (!window.translateReady) {
306
+ cLog("没有开启翻译管理,可以在开发环境或者在控制台运行后面的代码再刷新页面: `localStorage.translateReady = '1'`");
309
307
  }
310
- if (router && isDev) {
308
+ if (router && window.translateReady) {
311
309
  addI18nPage(router);
312
310
  } else {
313
311
  if (!router) {
package/lang/baseEnUS.js CHANGED
File without changes
package/lang/baseTh.js CHANGED
File without changes
package/lang/baseTr.js CHANGED
File without changes
package/lang/baseVi.js CHANGED
File without changes
package/lang/baseZhCn.js CHANGED
File without changes
package/lang/en.js CHANGED
File without changes
package/lang/th.js CHANGED
File without changes
package/lang/tr.js CHANGED
File without changes
package/lang/vi.js CHANGED
File without changes
package/lang/zh.js CHANGED
File without changes
package/language.vue CHANGED
File without changes
package/list.vue CHANGED
@@ -14,34 +14,34 @@
14
14
  <el-button
15
15
  type="primary"
16
16
  @click="getDataList">
17
- {{ ct("搜索") }}
17
+ {{ ct('搜索') }}
18
18
  </el-button>
19
- <el-button @click="resetList">{{ ct("重置") }}</el-button>
19
+ <el-button @click="resetList">{{ ct('重置') }}</el-button>
20
20
  </div>
21
21
  <div class="yh-i18n-list-actions">
22
22
  <el-button
23
23
  type="primary"
24
24
  @click="addOne">
25
25
  <i class="iconfont icon-add"></i>
26
- {{ ct("新增") }}
26
+ {{ ct('新增') }}
27
27
  </el-button>
28
28
  <el-button
29
29
  type="danger"
30
30
  @click="delMore">
31
31
  <i class="iconfont icon-delete"></i>
32
- {{ ct("批量删除") }}
32
+ {{ ct('批量删除') }}
33
33
  </el-button>
34
34
  <el-button
35
35
  text
36
36
  @click="exportExcel(listForm.total)">
37
- {{ ct("导出") }}
37
+ {{ ct('导出') }}
38
38
  </el-button>
39
39
  <div class="el-button is-text import-excel-button">
40
40
  <input
41
41
  class="import-excel-input"
42
42
  type="file"
43
43
  @change="importExcel($event, getDataList)" />
44
- {{ ct("导入") }}
44
+ {{ ct('导入') }}
45
45
  </div>
46
46
  </div>
47
47
  <el-table
@@ -66,18 +66,18 @@
66
66
  width="140"
67
67
  align="center"
68
68
  fixed="left">
69
- <template #default="{ row, $index }">
69
+ <template #default="{row, $index}">
70
70
  <el-button
71
71
  link
72
72
  type="primary"
73
73
  @click="editOne(row, $index)">
74
- {{ ct("编辑") }}
74
+ {{ ct('编辑') }}
75
75
  </el-button>
76
76
  <el-button
77
77
  link
78
78
  type="danger"
79
79
  @click="delOne(row.adTranslateId)">
80
- {{ ct("删除") }}
80
+ {{ ct('删除') }}
81
81
  </el-button>
82
82
  </template>
83
83
  </el-table-column>
@@ -95,7 +95,7 @@
95
95
  </el-table>
96
96
  <el-pagination
97
97
  background
98
- :page-sizes="[10, 100, 200, 500, 1000]"
98
+ :page-sizes="[10, 100, 200, 500, 10000]"
99
99
  v-model:page-size="listForm.pageSize"
100
100
  :total="listForm.total"
101
101
  v-model:current-page="listForm.pageNum"
@@ -121,46 +121,46 @@
121
121
  @click="prevOne"
122
122
  text
123
123
  :disabled="!isNaN(formDataIndex) && formDataIndex <= 0">
124
- {{ ct("上一个") }}(←)
124
+ {{ ct('上一个') }}(←)
125
125
  </el-button>
126
126
  <el-button
127
127
  type="primary"
128
128
  plain
129
129
  @click="cancelForm">
130
- {{ ct("取消") }}
130
+ {{ ct('取消') }}
131
131
  </el-button>
132
132
  <el-button
133
133
  type="primary"
134
134
  @click="saveOne">
135
- {{ ct("保存") }}
135
+ {{ ct('保存') }}
136
136
  </el-button>
137
137
  <el-button
138
138
  @click="nextOne"
139
139
  text
140
140
  :disabled="!isNaN(formDataIndex) && formDataIndex >= dataList.leng - 1">
141
- {{ ct("下一个") }}(→)
141
+ {{ ct('下一个') }}(→)
142
142
  </el-button>
143
143
  </div>
144
144
  </template>
145
145
  </el-dialog>
146
146
  </template>
147
147
  <script setup lang="ts">
148
- import { reactive, ref, onMounted, watch } from "vue";
149
- import { ElLoadingService, ElMessage, ElMessageBox } from "element-plus";
150
- import { useI18nStore, ct } from "yh-i18n";
151
- import http from "@/libs/api.request";
152
- import { VxeFormInstance, VxeFormPropTypes } from "vxe-table";
153
- import { exportExcel, importExcel } from "./excelTool";
148
+ import {reactive, ref, onMounted, watch} from 'vue';
149
+ import {ElLoadingService, ElMessage, ElMessageBox} from 'element-plus';
150
+ import {useI18nStore, ct} from 'yh-i18n';
151
+ import http from '@/libs/api.request';
152
+ import {VxeFormInstance, VxeFormPropTypes} from 'vxe-table';
153
+ import {exportExcel, importExcel} from './excelTool';
154
154
  const i18nStore = useI18nStore();
155
155
  const vxeFormRef = ref<VxeFormInstance>();
156
156
 
157
- const insertUrl = "/translate/insert";
158
- const updateUrl = "/translate/edit";
159
- const deleteUrl = "/translate/deleteTranslate";
157
+ const insertUrl = '/translate/insert';
158
+ const updateUrl = '/translate/edit';
159
+ const deleteUrl = '/translate/deleteTranslate';
160
160
 
161
161
  const i18nList = ref();
162
162
  const listForm = reactive({
163
- key: "",
163
+ key: '',
164
164
  pageNum: 1,
165
165
  pageSize: 10,
166
166
  total: 0,
@@ -168,14 +168,17 @@ const listForm = reactive({
168
168
  const listColumns = reactive<any>([]);
169
169
  const dataList = ref<any>([]);
170
170
  function getDataList(isReset = false) {
171
- let { key, pageNum, pageSize } = listForm;
171
+ let {key, pageNum, pageSize} = listForm;
172
172
  if (isReset) {
173
173
  pageNum = 1;
174
174
  }
175
+ let loading = ElLoadingService({
176
+ text: '获取列表数据中……',
177
+ });
175
178
  http
176
179
  .request({
177
- url: "/translate/select",
178
- method: "post",
180
+ url: '/translate/select',
181
+ method: 'post',
179
182
  data: {
180
183
  key,
181
184
  pageNum,
@@ -184,7 +187,7 @@ function getDataList(isReset = false) {
184
187
  })
185
188
  .then((res) => {
186
189
  let localKeys = i18nStore.localList.map((item) => item.value);
187
- let { records, total } = res.data.data;
190
+ let {records, total} = res.data.data;
188
191
  records = records.map((item) => {
189
192
  try {
190
193
  let content = JSON.parse(item.content);
@@ -196,7 +199,7 @@ function getDataList(isReset = false) {
196
199
  });
197
200
  localKeys.forEach((k) => {
198
201
  if (!keys.includes(k)) {
199
- item[k] = "";
202
+ item[k] = '';
200
203
  }
201
204
  });
202
205
  } catch (error) {}
@@ -204,6 +207,9 @@ function getDataList(isReset = false) {
204
207
  });
205
208
  dataList.value = records;
206
209
  listForm.total = total;
210
+ })
211
+ .finally(() => {
212
+ loading.close();
207
213
  });
208
214
  }
209
215
 
@@ -225,7 +231,7 @@ function rowClickHandler(row) {
225
231
  }
226
232
 
227
233
  function resetList() {
228
- listForm.key = "";
234
+ listForm.key = '';
229
235
  listForm.pageNum = 1;
230
236
  listForm.total = 0;
231
237
  getDataList();
@@ -266,8 +272,8 @@ function editOne(item, index) {
266
272
  }
267
273
  formShow.value = true;
268
274
  setTimeout(() => {
269
- (document.querySelector("#i18nFormItem1 input") as HTMLInputElement)?.focus();
270
- inputs = Array.from(document.querySelectorAll(".i18n-form-item input"));
275
+ (document.querySelector('#i18nFormItem1 input') as HTMLInputElement)?.focus();
276
+ inputs = Array.from(document.querySelectorAll('.i18n-form-item input'));
271
277
  }, 500);
272
278
  }
273
279
 
@@ -294,7 +300,7 @@ function saveOne() {
294
300
  data.id = formData.adTranslateId;
295
301
  }
296
302
  for (const key in formData) {
297
- if (key !== "key" && langList.includes(key)) {
303
+ if (key !== 'key' && langList.includes(key)) {
298
304
  const val = formData[key];
299
305
  data.content[key] = val;
300
306
  }
@@ -303,7 +309,7 @@ function saveOne() {
303
309
  http
304
310
  .request({
305
311
  url,
306
- method: "POST",
312
+ method: 'POST',
307
313
  data,
308
314
  })
309
315
  .then((res) => {
@@ -326,11 +332,11 @@ function saveOne() {
326
332
  }
327
333
 
328
334
  function delOne(id) {
329
- ElMessageBox.confirm("确认删除这条翻译记录吗?").then(() => {
335
+ ElMessageBox.confirm('确认删除这条翻译记录吗?').then(() => {
330
336
  http
331
337
  .request({
332
338
  url: deleteUrl,
333
- method: "POST",
339
+ method: 'POST',
334
340
  data: {
335
341
  id,
336
342
  },
@@ -347,19 +353,19 @@ function delOne(id) {
347
353
  }
348
354
 
349
355
  function delMore() {
350
- ElMessageBox.confirm("确认删除选中的翻译记录吗?").then(async () => {
356
+ ElMessageBox.confirm('确认删除选中的翻译记录吗?').then(async () => {
351
357
  let ids = i18nList.value?.getSelectionRows().map((row) => row.adTranslateId);
352
358
  if (ids && ids.length) {
353
359
  let len = ids.length;
354
360
  let loading = ElLoadingService({
355
- text: "正在删除选中的翻译……",
361
+ text: '正在删除选中的翻译……',
356
362
  });
357
363
  for (let i = 0; i < ids.length; i++) {
358
364
  const id = ids[i];
359
365
  loading.setText(`正在删除... ${i + 1}/${len}`);
360
366
  await http.request({
361
367
  url: deleteUrl,
362
- method: "POST",
368
+ method: 'POST',
363
369
  data: {
364
370
  id,
365
371
  },
@@ -373,18 +379,18 @@ function delMore() {
373
379
 
374
380
  const formItems = reactive<VxeFormPropTypes.Items>([
375
381
  {
376
- field: "key",
382
+ field: 'key',
377
383
  span: 24,
378
- title: "翻译键值",
384
+ title: '翻译键值',
379
385
  itemRender: {
380
- name: "$input",
381
- props: { class: "i18n-form-item", id: `i18nFormItem${1}` },
386
+ name: '$input',
387
+ props: {class: 'i18n-form-item', id: `i18nFormItem${1}`},
382
388
  },
383
389
  },
384
390
  ]);
385
391
 
386
392
  const fromRules = reactive<VxeFormPropTypes.Rules>({
387
- key: [{ required: true, type: "string", message: "请输入翻译键值" }],
393
+ key: [{required: true, type: 'string', message: '请输入翻译键值'}],
388
394
  });
389
395
 
390
396
  let needInit = true;
@@ -397,15 +403,15 @@ watch(
397
403
  listColumns.push({
398
404
  field: item.value,
399
405
  title: item.label,
400
- minWidth: "200",
406
+ minWidth: '200',
401
407
  });
402
408
  formItems.push({
403
409
  field: item.value,
404
410
  span: 24,
405
411
  title: item.label,
406
412
  itemRender: {
407
- name: "$input",
408
- props: { class: "i18n-form-item", id: `i18nFormItem${index + 2}` },
413
+ name: '$input',
414
+ props: {class: 'i18n-form-item', id: `i18nFormItem${index + 2}`},
409
415
  },
410
416
  });
411
417
  });
@@ -419,24 +425,24 @@ watch(
419
425
 
420
426
  onMounted(() => {
421
427
  getDataList();
422
- window.addEventListener("keydown", (e) => {
423
- let { key, ctrlKey, altKey } = e;
424
- if (key === "s" && ctrlKey) {
428
+ window.addEventListener('keydown', (e) => {
429
+ let {key, ctrlKey, altKey} = e;
430
+ if (key === 's' && ctrlKey) {
425
431
  e.preventDefault();
426
432
  e.stopPropagation();
427
433
  saveOne();
428
434
  }
429
- if (key === "ArrowRight" && (ctrlKey || altKey)) {
435
+ if (key === 'ArrowRight' && (ctrlKey || altKey)) {
430
436
  e.preventDefault();
431
437
  e.stopPropagation();
432
438
  nextOne();
433
439
  }
434
- if (key === "ArrowLeft" && (ctrlKey || altKey)) {
440
+ if (key === 'ArrowLeft' && (ctrlKey || altKey)) {
435
441
  e.preventDefault();
436
442
  e.stopPropagation();
437
443
  prevOne();
438
444
  }
439
- if (key === "Tab") {
445
+ if (key === 'Tab') {
440
446
  e.preventDefault();
441
447
  e.stopPropagation();
442
448
  if (
@@ -456,7 +462,7 @@ onMounted(() => {
456
462
  } else {
457
463
  setTimeout(() => {
458
464
  if (!document.activeElement || !inputs.includes(document.activeElement as HTMLInputElement)) {
459
- (document.querySelector("#i18nFormItem1 input") as HTMLInputElement)?.focus();
465
+ (document.querySelector('#i18nFormItem1 input') as HTMLInputElement)?.focus();
460
466
  }
461
467
  }, 100);
462
468
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yh-i18n",
3
- "version": "2.2.13",
3
+ "version": "2.2.15",
4
4
  "description": "对于国际化的封装",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/readme.md CHANGED
File without changes