yh-i18n 1.0.2 → 1.1.0

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
@@ -3,6 +3,12 @@ import { defineStore } from "pinia";
3
3
  import { createI18n } from "vue-i18n";
4
4
  import axios from "@/libs/api.request";
5
5
 
6
+ // base
7
+ import zhCNBase from "./lang/baseZhCn.js";
8
+ import enUSBase from "./lang/baseEnUS.js";
9
+ import thBase from "./lang/baseTh.js";
10
+ import viBase from "./lang/baseVi.js";
11
+ import trBase from "./lang/baseTr.js";
6
12
  // vxe table
7
13
  import zhCNVXETable from "vxe-table/lib/locale/lang/zh-CN";
8
14
  import enUSVXETable from "vxe-table/lib/locale/lang/en-US";
@@ -24,8 +30,7 @@ const initlang = localStorage.local || localLang || "zh_CN";
24
30
 
25
31
  export let i18n = null;
26
32
  const isDev = import.meta.env.DEV;
27
- let translateReady = true;
28
- window.translateReady = translateReady;
33
+ window.translateReady = false;
29
34
  function addTranslate(key) {
30
35
  if (key.indexOf("vxe") === -1) {
31
36
  try {
@@ -43,9 +48,13 @@ function addTranslate(key) {
43
48
  }
44
49
  }
45
50
  const keySet = new Set();
51
+ Object.keys(zhCNBase).forEach((key) => {
52
+ keySet.add(key);
53
+ });
54
+
46
55
  export const ct = (key, args) => {
47
56
  if (isDev) {
48
- if (!keySet.has(key) && translateReady) {
57
+ if (!keySet.has(key) && window.translateReady) {
49
58
  keySet.add(key);
50
59
  addTranslate(key);
51
60
  }
@@ -114,6 +123,7 @@ export const useI18nStore = defineStore("i18nStore", () => {
114
123
  }
115
124
  });
116
125
  }
126
+
117
127
  const title = computed(() => {
118
128
  return langList[lang.value];
119
129
  });
@@ -150,21 +160,21 @@ async function createMessage(list) {
150
160
  list.forEach((item) => {
151
161
  switch (item) {
152
162
  case "zh_CN":
153
- messages["zh_CN"] = Object.assign({}, zhCNVXETable);
163
+ messages["zh_CN"] = Object.assign(zhCNBase, zhCNVXETable);
154
164
  break;
155
165
  case "en_US":
156
- messages["en_US"] = Object.assign({}, enUSVXETable);
166
+ messages["en_US"] = Object.assign(enUSBase, enUSVXETable);
157
167
  break;
158
168
  case "th":
159
- messages["th"] = Object.assign({}, thVXETable);
169
+ messages["th"] = Object.assign(thBase, thVXETable);
160
170
  break;
161
171
 
162
172
  case "vi":
163
- messages["vi"] = Object.assign({}, viVXETable);
173
+ messages["vi"] = Object.assign(viBase, viVXETable);
164
174
  break;
165
175
 
166
176
  case "tr":
167
- messages["tr"] = Object.assign({}, trVXETable);
177
+ messages["tr"] = Object.assign(trBase, trVXETable);
168
178
  break;
169
179
 
170
180
  default:
@@ -191,16 +201,16 @@ async function createMessage(list) {
191
201
  }
192
202
  Object.entries(itemObj).forEach(([key, val]) => {
193
203
  if (list.includes(key)) {
194
- messages[key][mKey] = val;
204
+ if (!messages[key][mKey]) {
205
+ messages[key][mKey] = val;
206
+ }
195
207
  }
196
208
  });
197
209
  } catch (err) {
198
210
  console.error(err);
199
211
  }
200
212
  });
201
- } catch (error) {
202
- translateReady = false;
203
- }
213
+ } catch (error) {}
204
214
  return messages;
205
215
  }
206
216
 
@@ -0,0 +1,17 @@
1
+ export default {
2
+ 翻译键名: "Translate key names",
3
+ 翻译管理: "Translation management",
4
+ 键入以筛选键名: "filter key names",
5
+ 搜索: "search",
6
+ 新增: "New addition",
7
+ 批量删除: "Batch deletion",
8
+ 重置: "reset",
9
+ 编辑: "edit",
10
+ 删除: "delete",
11
+ 操作: "operation",
12
+ 中文简体: "Simplified Chinese",
13
+ English: "English",
14
+ ไทย: "Thailand.",
15
+ "Việt nam": "Vietnamese",
16
+ Türkçe: "Turkish",
17
+ };
package/lang/baseTh.js ADDED
@@ -0,0 +1,17 @@
1
+ export default {
2
+ 翻译键名: "ชื่อคีย์การแปล",
3
+ 翻译管理: "การจัดการการแปล",
4
+ 键入以筛选键名: "พิมพ์เพื่อกรองชื่อคีย์",
5
+ 搜索: "ค้นหา",
6
+ 新增: "เพิ่มใหม่",
7
+ 批量删除: "ลบแบทช์",
8
+ 重置: "รีเซ็ต",
9
+ 编辑: "บรรณาธิการ",
10
+ 删除: "ลบ",
11
+ 操作: "การดำเนินงาน",
12
+ 中文简体: "ภาษาจีนตัวย่อ",
13
+ English: "ภาษาอังกฤษ",
14
+ ไทย: "ไทย",
15
+ "Việt nam": "เวียดนาม",
16
+ Türkçe: "ตุรกี",
17
+ };
package/lang/baseTr.js ADDED
@@ -0,0 +1,17 @@
1
+ export default {
2
+ 翻译键名: "Anahtar isimlerini çevir",
3
+ 翻译管理: "Çeviri Yönetimi",
4
+ 键入以筛选键名: "Anahtar isimlerini silmek için yazın",
5
+ 搜索: "arama",
6
+ 新增: "Yeni ekleme",
7
+ 批量删除: "Toplu silme",
8
+ 重置: "Sıfırla",
9
+ 编辑: "edit",
10
+ 删除: "Sil",
11
+ 操作: "operasyon",
12
+ 中文简体: "Basitleştirilmiş Çince",
13
+ English: "İngilizce",
14
+ ไทย: "Tayland.",
15
+ "Việt nam": "Vietnamca",
16
+ Türkçe: "Türkçe",
17
+ };
package/lang/baseVi.js ADDED
@@ -0,0 +1,17 @@
1
+ export default {
2
+ 翻译键名: "Tên khóa dịch",
3
+ 翻译管理: "Quản lý phiên dịch",
4
+ 键入以筛选键名: "Nhập để lọc các tên khóa",
5
+ 搜索: "Tìm kiếm",
6
+ 新增: "Mới",
7
+ 批量删除: "Xóa hàng loạt",
8
+ 重置: "Đặt lại",
9
+ 编辑: "Chỉnh sửa",
10
+ 删除: "Xoá",
11
+ 操作: "Hoạt động",
12
+ 中文简体: "Trung Quốc",
13
+ English: "Tiếng Việt",
14
+ ไทย: "Thái Lan.",
15
+ "Việt nam": "Việt nam",
16
+ Türkçe: "Thổ Nhĩ Kỳ",
17
+ };
@@ -0,0 +1,17 @@
1
+ export default {
2
+ 翻译键名: "翻译键名",
3
+ 翻译管理: "翻译管理",
4
+ 键入以筛选键名: "键入以筛选键名",
5
+ 搜索: "搜索",
6
+ 新增: "新增",
7
+ 批量删除: "批量删除",
8
+ 重置: "重置",
9
+ 编辑: "编辑",
10
+ 删除: "删除",
11
+ 操作: "操作",
12
+ 中文简体: "中文简体",
13
+ English: "英语",
14
+ ไทย: "泰语",
15
+ "Việt nam": "越南语",
16
+ Türkçe: "土耳其语",
17
+ };
package/lang/th.js CHANGED
@@ -1,312 +1,311 @@
1
1
  export default {
2
2
  vxe: {
3
3
  loading: {
4
- text: "加载中...",
4
+ text: "กำลังดาวน์โหลด",
5
5
  },
6
6
  error: {
7
- groupFixed: "如果使用分组表头,固定列必须按组设置",
8
- groupMouseRange: "分组表头与 '{0}' 不能同时使用,这可能会出现错误",
9
- groupTag: "分组列头应该使用 '{0}' 而不是 '{1}',这可能会出现错误",
10
- scrollErrProp: "启用虚拟滚动后不支持该参数 '{0}'",
11
- errConflicts: "参数 '{0}' 与 '{1}' 有冲突",
12
- unableInsert: "无法插入到指定位置,请检查参数是否正确",
7
+ groupFixed:
8
+ "ถ้าใช้งานการจัดกลุ่มหัวข้อ ในคอลัมน์ต้องตั้งค่าตามการจัดกลุ่ม",
9
+ groupMouseRange:
10
+ "การจัดกลุ่มหัวข้อไม่สามารถใช้งานคู่กับ'{0}' ได้ในเวลาเดียวกัน ไม่เช่นนั้นจะมีแจ้งเตือนข้อความขัดแย้งขึ้นมา",
11
+ groupTag:
12
+ "การจัดกลุ่มส่วนหัวในคอลัมน์ควรใช้ '{0}' แทน '{1}' ไม่เช่นนั้นจะมีแจ้งเตือนข้อความขัดแย้งขึ้นมา",
13
+ scrollErrProp: "เมื่อเปิดใช้งานการเสมือน จะไม่สนับสนุนพารามิเตอร์ '{0}' ",
14
+ errConflicts: "พารามิเตอร์ '{0}' กับ'{1}'มีความขัดแย้งกัน",
15
+ unableInsert:
16
+ "ไม่สามารถแทรกลงในตำแหน่งที่ระบุได้ โปรดตรวจสอบว่าพารามิเตอร์ถูกต้องหรือไม่",
13
17
  useErr:
14
- "安装 '{0}' 模块时发生错误,可能顺序不正确,依赖的模块需要在 Table 之前安装",
15
- barUnableLink: "工具栏无法关联表格",
16
- expandContent: "展开行的插槽应该是 'content',请检查是否正确",
17
- reqModule: "缺少 '{0}' 模块",
18
- reqProp: "缺少必要的 '{0}' 参数,这可能会导致出现错误",
19
- emptyProp: "参数 '{0}' 不允许为空",
20
- errProp: "不支持的参数 '{0}',可能为 '{1}'",
21
- colRepet: "column.{0}='{1}' 重复了,这可能会导致某些功能无法使用",
22
- notFunc: "方法 '{0}' 不存在",
23
- notSlot: "插槽 '{0}' 不存在",
24
- noTree: "树结构不支持 '{0}'",
25
- notProp: "不支持的参数 '{0}'",
26
- coverProp: "'{0}' 的参数 '{1}' 被覆盖,这可能会出现错误",
27
- delFunc: "方法 '{0}' 已废弃,请使用 '{1}'",
28
- delProp: "参数 '{0}' 已废弃,请使用 '{1}'",
29
- delEvent: "事件 '{0}' 已废弃,请使用 '{1}'",
30
- removeProp: "参数 '{0}' 已废弃,不建议使用,这可能会导致出现错误",
18
+ "เกิดข้อผิดพลาดขณะติดตั้งโมดูล '{0}' ซึ่งอาจอยู่ในลำดับที่ไม่ถูกต้อง จำเป็นต้องติดตั้งโมดูลในตารางก่อน",
19
+ barUnableLink: "แถบเครื่องมือไม่สามารถเชื่อมต่อกับฟอร์มตารางได้",
20
+ expandContent:
21
+ "ช่องที่จะขยายแถวควรมีเนื้อหา โปรดตรวจสอบว่าถูกต้องหรือไม่",
22
+ reqModule: "โมดูล '{0}' ขาดหายไป",
23
+ reqProp:
24
+ "พารามิเตอร์ '{0}' ที่จำเป็นขาดหายไป ซึ่งอาจส่งผลให้เกิดข้อผิดพลาด",
25
+ emptyProp: "พารามิเตอร์ '{0}'ไม่อนุญาตให้เว้นว่าง",
26
+ errProp: "พารามิเตอร์ '{0}'ไม่ซัพพอท อาจจะต้องใช้ '{1}'",
27
+ colRepet: "column.{0} ='{1}' ซ้ำกัน ซึ่งอาจทำให้บางฟังก์ชันใช้งานไม่ได้",
28
+ notFunc: "วิธี '{0}' ไม่มีอยู่",
29
+ notSlot: "ในช่อง'{0}'ไม่มีอยู่",
30
+ noTree: "โครงสร้างไม่สนับสนุน '{0}'",
31
+ notProp: "พารามิเตอร์ที่ไม่สนับสนุน '{0}'",
32
+ coverProp: "พารามิเตอร์ '{0}'ถูก'{1}'เขียนทับ ซึ่งอาจทำให้เกิดข้อผิดพลาด",
33
+ delFunc: "วิธีการ '{0}' เลิกใช้แล้ว โปรดใช้ '{1}'",
34
+ delProp: "พารามิเตอร์ '{0}' เลิกใช้แล้ว โปรดใช้ '{1}'",
35
+ delEvent: "กิจกรรม '{0}' เลิกใช้แล้ว โปรดใช้ '{1}'",
36
+ removeProp:
37
+ "พารามิเตอร์ '{0}' เลิกใช้แล้วและไม่แนะนำให้ใช้อาจส่งผลให้เกิดข้อผิดพลาด",
31
38
  errFormat:
32
- "全局的格式化内容应该使用 'VXETable.formats' 定义,挂载 'formatter={0}' 的方式已不建议使用",
33
- notType: "不支持的文件类型 '{0}'",
34
- notExp: "该浏览器不支持导入/导出功能",
35
- impFields: "导入失败,请检查字段名和数据格式是否正确",
36
- treeNotImp: "树表格不支持导入",
39
+ "เนื้อหาการจัดรูปแบบสากลควรถูกกำหนดโดยใช้ 'VXETable.formats' ไม่แนะนำให้ใช้วิธีการเมานต์ 'formatter={0}' อีกต่อไป",
40
+ notType: "ไม่สนับสนุนประเภทไฟล์ '{0}'",
41
+ notExp: "เบราว์เซอร์นี้ไม่รองรับฟังก์ชันการนำเข้า/ส่งออก",
42
+ impFields:
43
+ "การนำเข้าล้มเหลว โปรดตรวจสอบว่าชื่อฟิลด์และรูปแบบข้อมูลถูกต้องหรือไม่",
44
+ treeNotImp: "ตารางแผนผังไม่รองรับการนำเข้า",
37
45
  },
38
46
  renderer: {
39
- search: "搜索",
47
+ search: "ค้นหา",
40
48
  cases: {
41
- equal: "等于",
42
- unequal: "不等于",
43
- gt: "大于",
44
- ge: "大于或等于",
45
- lt: "小于",
46
- le: "小于或等于",
47
- begin: "开头是",
48
- notbegin: "开头不是",
49
- endin: "结尾是",
50
- notendin: "结尾不是",
51
- include: "包含",
52
- exclude: "不包含",
53
- between: "介于",
54
- custom: "自定义筛选",
55
- insensitive: "不区分大小写",
56
- isSensitive: "区分大小写",
49
+ equal: "เท่ากับ",
50
+ unequal: "ไม่เท่ากับ",
51
+ gt: "มากกว่า",
52
+ ge: "มากกว่าหรือเท่ากับ",
53
+ lt: "น้อยกว่า",
54
+ le: "น้อยกว่าหรือเท่ากับ",
55
+ begin: "เริ่มต้นด้วย",
56
+ notbegin: "ไม่ใช่จุดเริ่มต้น",
57
+ endin: "จุดสิ้นสุด",
58
+ notendin: "ไม่ใช่จุดสิ้นสุด",
59
+ include: "ครอบคลุม",
60
+ exclude: "ไม่ครอบคลุม",
61
+ between: "ระหว่าง",
62
+ custom: "ตัวกรองแบบกำหนดเอง",
63
+ insensitive: "ไม่คำนึงถึงขนาดตัวพิมพ์",
64
+ isSensitive: "คำนึงถึงขนาดตัวพิมพ์",
57
65
  },
58
66
  combination: {
59
67
  menus: {
60
- clearSort: "清除排序",
61
- sortAsc: "升序",
62
- sortDesc: "降序",
63
- fixedColumn: "锁定列",
64
- fixedGroup: "锁定组",
65
- cancelFixed: "取消锁定",
66
- fixedLeft: "锁定左侧",
67
- fixedRight: "锁定右侧",
68
- clearFilter: "清除筛选",
69
- textOption: "文本筛选",
70
- numberOption: "数值筛选",
68
+ clearSort: "เรียงลำดับชัดเจน",
69
+ sortAsc: "ลำดับจากน้อยไปมาก",
70
+ sortDesc: "ลำดับจากมากไปน้อย",
71
+ fixedColumn: "ล็อคคอลัมน์",
72
+ fixedGroup: "ล็อคการจัดกลุ่ม",
73
+ cancelFixed: "ยกเลิกการล็อค",
74
+ fixedLeft: "ล็อคไปทางซ้าย",
75
+ fixedRight: "ล็อคไปทางขวา",
76
+ clearFilter: "ล้างตัวกรอง",
77
+ textOption: "ตัวกรองข้อความ",
78
+ numberOption: "ตัวกรองตัวเลข",
71
79
  },
72
80
  popup: {
73
- title: "自定义筛选的方式",
74
- currColumnTitle: "当前列:",
75
- and: "",
76
- or: "",
77
- describeHtml: "可用 ? 代表单个字符<br/>用 * 代表任意多个字符",
81
+ title: "วิธีปรับแต่งการกรอง",
82
+ currColumnTitle: "คอลัมน์ปัจจุบัน",
83
+ and: "กับ(และ)",
84
+ or: "หรือ",
85
+ describeHtml:
86
+ "แสดงถึงอักขระตัวเดียว<br/> * แสดงถึงการใช้อักขระจำนวนเท่าใดก็ได้",
78
87
  },
79
- empty: "(空白)",
80
- notData: "无匹配项",
88
+ empty: "ว่างเปล่า",
89
+ notData: "ไม่มีรายการที่เหมาะสม",
81
90
  },
82
91
  },
83
92
  pro: {
84
93
  area: {
85
- mergeErr: "无法对合并单元格进行该操作",
86
- multiErr: "无法对多重选择区域进行该操作",
94
+ mergeErr: "การดำเนินการนี้ไม่สามารถทำได้บนตารางที่ผสานเซลล์แล้ว",
95
+ multiErr: "การดำเนินการนี้ไม่สามารถทำได้ในการเลือกตัวเลือกหลายพื้นที่",
87
96
  extendErr:
88
- "如果延伸的区域包含被合并的单元格,所有合并的单元格需大小相同",
97
+ "หากช่วงขยายมีเซลล์ที่ผสานกัน เซลล์ที่ผสานทั้งหมดจะต้องมีขนาดเท่ากัน",
89
98
  pasteMultiErr:
90
- "无法粘贴,需要相同大小的复制的区域和粘贴的区域才能执行此操作",
99
+ "ไม่สามารถวางได้ พื้นที่ที่คัดลอกและวางจะต้องมีขนาดเท่ากันจึงจะดำเนินการนี้ได้",
91
100
  },
92
101
  fnr: {
93
- title: "查找和替换",
94
- findLabel: "查找",
95
- replaceLabel: "替换",
96
- findTitle: "查找内容:",
97
- replaceTitle: "替换为:",
102
+ title: "ค้นหาและแทนที่",
103
+ findLabel: "ค้นหา",
104
+ replaceLabel: "แทนที่",
105
+ findTitle: "ค้นหาเนื้อหา",
106
+ replaceTitle: "แทนที่",
98
107
  tabs: {
99
- find: "查找",
100
- replace: "替换",
108
+ find: "ค้นหา",
109
+ replace: "แทนที่",
101
110
  },
102
111
  filter: {
103
- re: "正则表达式",
104
- whole: "全词匹配",
105
- sensitive: "区分大小写",
112
+ re: "การแสดงปกติ",
113
+ whole: "การจับคู่คำทั้งหมด",
114
+ sensitive: "คำนึงถึงขนาดตัวพิมพ์",
106
115
  },
107
116
  btns: {
108
- findNext: "查找下一个",
109
- findAll: "查找全部",
110
- replace: "替换",
111
- replaceAll: "替换全部",
112
- cancel: "取消",
117
+ findNext: "ค้นหาต่อไป",
118
+ findAll: "ค้นหาทั้งหมด",
119
+ replace: "แทนที่",
120
+ replaceAll: "แทนที่ทั้งหมด",
121
+ cancel: "ยกเลิก",
113
122
  },
114
123
  header: {
115
- seq: "#",
116
- cell: "单元格",
117
- value: "",
124
+ seq: "เครื่องหมายชาร์ป",
125
+ cell: "หน่วยเซลล์",
126
+ value: "ค่า",
118
127
  },
119
- empty: "(空值)",
120
- reError: "无效的正则表达式",
121
- recordCount: "已找到 {0} 个单元格",
122
- notCell: "找不到匹配的单元格",
123
- replaceSuccess: "成功替换 {0} 个单元格",
128
+ empty: "ค่าว่าง",
129
+ reError: "การแสดงไร้ประสิทธิภาพ",
130
+ recordCount: "พบ{0}เซลล์แล้ว",
131
+ notCell: "ไม่พบเซลล์ที่ตรงกัน",
132
+ replaceSuccess: "แทนที่เซลล์{0} สำเร็จแล้ว",
124
133
  },
125
134
  },
126
135
  table: {
127
- emptyText: "暂无数据",
128
- allTitle: "全选/取消",
129
- seqTitle: "#",
130
- confirmFilter: "筛选",
131
- resetFilter: "重置",
132
- allFilter: "全部",
133
- sortAsc: "升序:最低到最高",
134
- sortDesc: "降序:最高到最低",
135
- filter: "对所选的列启用筛选",
136
- impSuccess: "成功导入 {0} 条记录",
137
- expLoading: "正在导出中",
138
- expSuccess: "导出成功",
139
- expFilename: "导出_{0}",
140
- expOriginFilename: "导出_源_{0}",
141
- customTitle: "列设置",
142
- customAll: "全部",
143
- customConfirm: "确认",
144
- customRestore: "还原",
136
+ emptyText: "ไม่มีข้อมูล",
137
+ allTitle: "เลือกทั้งหมด/ยกเลิก",
138
+ seqTitle: "เครื่องหมายชาร์ป",
139
+ customRestore: "การลดน้อยลง",
145
140
  },
146
141
  grid: {
147
- selectOneRecord: "请至少选择一条记录!",
148
- deleteSelectRecord: "您确定要删除所选记录吗?",
149
- removeSelectRecord: "您确定要移除所选记录吗?",
150
- dataUnchanged: "数据未改动!",
151
- delSuccess: "成功删除所选记录!",
152
- saveSuccess: "保存成功!",
153
- operError: "发生错误,操作失败!",
142
+ selectOneRecord: "โปรดเลือกอย่างน้อยหนึ่งรายการ!",
143
+ deleteSelectRecord: "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกที่เลือก?",
144
+ removeSelectRecord: "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกที่เลือก?",
145
+ dataUnchanged: "ข้อมูลไม่มีการเปลี่ยนแปลง!",
146
+ delSuccess: "ลบบันทึกที่เลือกเรียบร้อยแล้ว!",
147
+ saveSuccess: "บันทึกสำเร็จ",
148
+ operError: "เกิดข้อผิดพลาดและการดำเนินการล้มเหลว!",
154
149
  },
155
150
  select: {
156
- search: "搜索",
157
- loadingText: "加载中",
158
- emptyText: "暂无数据",
151
+ search: "ค้นหา",
152
+ loadingText: "กำลังดาวน์โหลด",
153
+ emptyText: "ไม่มีข้อมูล",
159
154
  },
160
155
  pager: {
161
- goto: "前往",
162
- pagesize: "{0}条/页",
163
- total: "{0} 条记录",
164
- pageClassifier: "",
165
- prevPage: "上一页",
166
- nextPage: "下一页",
167
- prevJump: "向上跳页",
168
- nextJump: "向下跳页",
156
+ goto: "ไปข้างหน้า",
157
+ pagesize: "{0} รายการ/หน้า",
158
+ total: "รวมทั้งหมด{0}รายการที่บันทึก",
159
+ pageClassifier: "หน้า",
160
+ prevPage: "หน้าก่อนหน้า",
161
+ nextPage: "หน้าถัดไป",
162
+ prevJump: "ข้ามขึ้นไป",
163
+ nextJump: "ข้ามลงมา",
169
164
  },
170
165
  alert: {
171
- title: "消息提示",
166
+ title: "การแจ้งเตือน",
172
167
  },
173
168
  button: {
174
- confirm: "确认",
175
- cancel: "取消",
169
+ confirm: "ยืนยัน",
170
+ cancel: "ยกเลิก",
176
171
  },
177
172
  import: {
178
173
  modes: {
179
- covering: "覆盖",
180
- insert: "新增",
174
+ covering: "ปิดบัง",
175
+ insert: "เพิ่มใหม่",
181
176
  },
182
- impTitle: "导入数据",
183
- impFile: "文件名",
184
- impSelect: "选择文件",
185
- impType: "文件类型",
186
- impOpts: "参数设置",
187
- impConfirm: "导入",
188
- impCancel: "取消",
177
+ impTitle: "นำเข้าข้อมูล",
178
+ impFile: "ชื่อไฟล์",
179
+ impSelect: "เลือกไฟล์",
180
+ impType: "ประเภทไฟล์",
181
+ impOpts: "ตั้งค่าพารามิเตอร์",
182
+ impConfirm: "นำเข้า",
183
+ impCancel: "ยกเลิก",
189
184
  },
190
185
  export: {
191
186
  types: {
192
- csv: "CSV (逗号分隔)(*.csv)",
193
- html: "网页(*.html)",
194
- xml: "XML 数据(*.xml)",
195
- txt: "文本文件(制表符分隔)(*.txt)",
196
- xls: "Excel 97-2003 工作簿(*.xls)",
197
- xlsx: "Excel 工作簿(*.xlsx)",
198
- pdf: "PDF (*.pdf)",
187
+ csv: "CSV (คั่นด้วยเครื่องหมายจุลภาค)(*.csv)",
188
+ html: "เว็บไซต์",
189
+ xml: "ข้อมูลXML (นามสกุลไฟล์)",
190
+ txt: "ไฟล์ข้อความ (คั่นด้วยแท็บ) (*.txt)",
191
+ xls: "ไฟล์งานExcel 97-2003 (*.xls)",
192
+ xlsx: "ไฟล์งานExcel (*.xlsx)",
193
+ pdf: "PDF (นามสกุลไฟล์)",
199
194
  },
200
195
  modes: {
201
- current: "当前数据(当前页的数据)",
202
- selected: "选中数据(当前页选中的数据)",
203
- all: "全量数据(包括所有分页的数据)",
196
+ current: "ข้อมูลปัจจุบัน (ข้อมูลของหน้าปัจจุบัน)",
197
+ selected: "ข้อมูลที่เลือก (ข้อมูลที่เลือกในหน้าปัจจุบัน)",
198
+ all: "ข้อมูลทั้งหมด (รวมถึงข้อมูลที่แบ่งหน้าทั้งหมด)",
204
199
  },
205
- printTitle: "打印数据",
206
- expTitle: "导出数据",
207
- expName: "文件名",
208
- expNamePlaceholder: "请输入文件名",
209
- expSheetName: "标题",
210
- expSheetNamePlaceholder: "请输入标题",
211
- expType: "保存类型",
212
- expMode: "选择数据",
213
- expCurrentColumn: "全部字段",
214
- expColumn: "选择字段",
215
- expOpts: "参数设置",
216
- expOptHeader: "表头",
217
- expHeaderTitle: "是否需要表头",
218
- expOptFooter: "表尾",
219
- expFooterTitle: "是否需要表尾",
220
- expOptColgroup: "分组表头",
221
- expColgroupTitle: "如果存在,则支持带有分组结构的表头",
222
- expOptMerge: "合并",
223
- expMergeTitle: "如果存在,则支持带有合并结构的单元格",
224
- expOptAllExpand: "展开层级",
225
- expAllExpandTitle: "如果存在,则支持将带有层级结构的数据全部展开",
226
- expOptUseStyle: "样式",
227
- expUseStyleTitle: "如果存在,则支持带样式的单元格",
228
- expOptOriginal: "源数据",
229
- expOriginalTitle: "如果为源数据,则支持导入到表格中",
230
- expPrint: "打印",
231
- expConfirm: "导出",
232
- expCancel: "取消",
200
+ printTitle: "ปริ้นข้อมูล",
201
+ expTitle: "นำออกข้อมูล",
202
+ expName: "ชื่อไฟล์",
203
+ expNamePlaceholder: "โปรดใส่ชื่อไฟล์",
204
+ expSheetName: "หัวข้อ",
205
+ expSheetNamePlaceholder: "โปรดใส่ชื่อหัวข้อ",
206
+ expType: "ประเภทการเซฟ",
207
+ expMode: "เลือกช้อมูล",
208
+ expCurrentColumn: "คำทั้งหมด",
209
+ expColumn: "เลือกเฉพาะคำ",
210
+ expOpts: "ตั้งค่าพารามิเตอร์",
211
+ expOptHeader: "หัวข้อ",
212
+ expHeaderTitle: "ต้องการตั้งหัวข้อหรือไม่",
213
+ expOptFooter: "ท้ายตาราง",
214
+ expFooterTitle: "ต้องการตั้งท้ายตารางหรือไม่",
215
+ expOptColgroup: "การจัดกลุ่มหัวข้อ",
216
+ expColgroupTitle:
217
+ "หากมีอยู่ ต้องการรองรับหัวข้อที่มีโครงสร้างการจัดกลุ่ม",
218
+ expOptMerge: "ผสานเข้าด้วยกัน",
219
+ expMergeTitle:
220
+ "หากมีอยู่ ต้องการรองรับเซลล์ที่มีโครงสร้างผสานเข้าด้วยกันหรือไม่",
221
+ expOptAllExpand: "ขยายลำดับชั้น",
222
+ expAllExpandTitle:
223
+ "หากมีอยู่ ต้องการรองรับการขยายข้อมูลทั้งหมดด้วยโครงสร้างแบบลำดับชั้นหรือไม่",
224
+ expOptUseStyle: "รูปแบบ",
225
+ expUseStyleTitle: "หากมีอยู่ ต้องการรองรับรูปแบบเซลล์หรือไม่",
226
+ expOptOriginal: "แหล่งข้อมูล",
227
+ expOriginalTitle:
228
+ "หากเป็นแหล่งข้อมูล ต้องการรองรับการนำเข้าลงในตารางหรือไม่",
229
+ expPrint: "ปริ้น",
230
+ expConfirm: "นำออก",
231
+ expCancel: "ยกเลิก",
233
232
  },
234
233
  modal: {
235
- zoomIn: "最大化",
236
- zoomOut: "还原",
237
- close: "关闭",
234
+ zoomIn: "ขยายใหญ่ขึ้น",
235
+ zoomOut: "คืนกลับสภาพเดิม",
236
+ close: "ปิด",
238
237
  },
239
238
  form: {
240
- folding: "收起",
241
- unfolding: "展开",
239
+ folding: "จัดเก็บ",
240
+ unfolding: "ขยายการดำเนินงาน",
242
241
  },
243
242
  toolbar: {
244
- import: "导入",
245
- export: "导出",
246
- print: "打印",
247
- refresh: "刷新",
248
- zoomIn: "全屏",
249
- zoomOut: "还原",
250
- custom: "列设置",
251
- customAll: "全部",
252
- customConfirm: "确认",
253
- customRestore: "还原",
243
+ import: "นำเข้า",
244
+ export: "นำออก",
245
+ print: "ปริ้น",
246
+ refresh: "รีเฟรช",
247
+ zoomIn: "ขนาดเต็มจอ",
248
+ zoomOut: "คืนกลับสภาพเดิม",
249
+ custom: "การตั้งค่าคอลัมน์",
250
+ customAll: "ทั้งหมด",
251
+ customConfirm: "ยืนยัน",
252
+ customRestore: "คืนกลับสภาพเดิม",
254
253
  },
255
254
  input: {
256
255
  date: {
257
- m1: "01 月",
258
- m2: "02 月",
259
- m3: "03 月",
260
- m4: "04 月",
261
- m5: "05 月",
262
- m6: "06 月",
263
- m7: "07 月",
264
- m8: "08 月",
265
- m9: "09 月",
266
- m10: "10 月",
267
- m11: "11 月",
268
- m12: "12 月",
269
- quarterLabel: "{0} ",
270
- monthLabel: "{0} ",
271
- dayLabel: "{0} {1}",
256
+ m1: "มกราคม",
257
+ m2: "กุมภาพัน์",
258
+ m3: "มีนาคม",
259
+ m4: "เมษายน",
260
+ m5: "พฤษภาคม",
261
+ m6: "มิถุนายน",
262
+ m7: "กรกฎาคม",
263
+ m8: "สิงหาคม",
264
+ m9: "กันยายน",
265
+ m10: "ตุลาคม",
266
+ m11: "พฤศจิกายน",
267
+ m12: "ธันวาคม",
268
+ quarterLabel: "{0} ปี",
269
+ monthLabel: "{0} ปี",
270
+ dayLabel: "{0} ปี {1}",
272
271
  labelFormat: {
273
- date: "yyyy-MM-dd",
274
- time: "HH:mm:ss",
275
- datetime: "yyyy-MM-dd HH:mm:ss",
276
- week: "yyyy 年第 WW 周",
277
- month: "yyyy-MM",
278
- quarter: "yyyy 年第 q 季度",
279
- year: "yyyy",
272
+ date: "ปี-เดือน-วัน",
273
+ time: "ชั่วโมง-นาที-วินาที",
274
+ datetime: "ปี-เดือน-วัน ชั่วโมง-นาที-วินาที",
275
+ week: "ปี-สัปดาห์ที่",
276
+ month: "ปี-เดือน",
277
+ quarter: "ปี-ฤดูกาล",
278
+ year: "ปี",
280
279
  },
281
280
  weeks: {
282
- w: "",
283
- w0: "周日",
284
- w1: "周一",
285
- w2: "周二",
286
- w3: "周三",
287
- w4: "周四",
288
- w5: "周五",
289
- w6: "周六",
281
+ w: "สัปดาห์",
282
+ w0: "วันอาทิตย์",
283
+ w1: "วันจันทร์",
284
+ w2: "วันอังคาร",
285
+ w3: "วันพุธ",
286
+ w4: "วันพฤหัสบดี",
287
+ w5: "วันศุกร์",
288
+ w6: "วันเสาร์",
290
289
  },
291
290
  months: {
292
- m0: "一月",
293
- m1: "二月",
294
- m2: "三月",
295
- m3: "四月",
296
- m4: "五月",
297
- m5: "六月",
298
- m6: "七月",
299
- m7: "八月",
300
- m8: "九月",
301
- m9: "十月",
302
- m10: "十一月",
303
- m11: "十二月",
291
+ m0: "มกราคม",
292
+ m1: "กุมภาพัน์",
293
+ m2: "มีนาคม",
294
+ m3: "เมษายน",
295
+ m4: "พฤษภาคม",
296
+ m5: "มิถุนายน",
297
+ m6: "กรกฎาคม",
298
+ m7: "สิงหาคม",
299
+ m8: "กันยายน",
300
+ m9: "ตุลาคม",
301
+ m10: "พฤศจิกายน",
302
+ m11: "ธันวาคม",
304
303
  },
305
304
  quarters: {
306
- q1: "第一季度",
307
- q2: "第二季度",
308
- q3: "第三季度",
309
- q4: "第四季度",
305
+ q1: "ฤดูกาลแรก",
306
+ q2: "ฤดูกาลที่สอง",
307
+ q3: "ฤดูกาลที่สาม",
308
+ q4: "ฤดูกาลที่สี่",
310
309
  },
311
310
  },
312
311
  },
package/language.vue CHANGED
@@ -14,17 +14,35 @@
14
14
  </el-dropdown-menu>
15
15
  </template>
16
16
  </el-dropdown>
17
- <el-link v-if="isDev" type="warning" href="/#/translate">翻译管理</el-link>
17
+ &nbsp;&nbsp;&nbsp;
18
+ <el-link v-if="isDev" type="warning" href="/#/translate">{{
19
+ ct("翻译管理")
20
+ }}</el-link>
21
+ &nbsp;&nbsp;&nbsp;
22
+ <el-switch
23
+ active-text="收集"
24
+ inactive-text="不收集"
25
+ inline-prompt
26
+ v-if="isDev"
27
+ v-model="isCollect"
28
+ ></el-switch>
18
29
  </template>
19
30
 
20
31
  <script setup>
21
- import { useI18nStore } from "yh-i18n";
32
+ import { useI18nStore, ct } from "yh-i18n";
22
33
  import { storeToRefs } from "pinia";
23
- import { ref } from "vue";
34
+ import { ref, watch } from "vue";
24
35
 
25
36
  const isDev = ref(import.meta.env.DEV);
26
37
 
27
38
  const i18nStore = useI18nStore();
39
+ const isCollect = ref(window.translateReady);
40
+ watch(
41
+ () => isCollect.value,
42
+ (val) => {
43
+ window.translateReady = val;
44
+ }
45
+ );
28
46
 
29
47
  const { localList, title } = storeToRefs(i18nStore);
30
48
 
package/list.vue CHANGED
@@ -5,11 +5,16 @@
5
5
  <i class="iconfont icon-add"></i>
6
6
  {{ ct("新增") }}
7
7
  </el-button>
8
+ <el-button type="danger" @click="delMore">
9
+ <i class="iconfont icon-delete"></i>
10
+ {{ ct("批量删除") }}
11
+ </el-button>
8
12
  <div class="yh-i18n-list-conditions">
9
13
  <el-form inline>
10
14
  <el-form-item :label="ct('翻译键名')">
11
15
  <el-input
12
16
  v-model="listForm.key"
17
+ @keyup.enter.stop.prevent="getDataList(true)"
13
18
  :placeholder="ct('键入以筛选键名')"
14
19
  ></el-input>
15
20
  </el-form-item>
@@ -20,7 +25,18 @@
20
25
  }}</el-button>
21
26
  <el-button @click="resetList">{{ ct("重置") }}</el-button>
22
27
  </div>
23
- <el-table :data="dataList" row-key="adTranslateId">
28
+ <el-table
29
+ ref="i18nList"
30
+ :data="dataList"
31
+ row-key="adTranslateId"
32
+ @row-click="rowClickHandler"
33
+ >
34
+ <el-table-column
35
+ type="selection"
36
+ width="60"
37
+ align="center"
38
+ fixed="left"
39
+ ></el-table-column>
24
40
  <el-table-column
25
41
  type="index"
26
42
  label="#"
@@ -53,12 +69,12 @@
53
69
  ></el-table-column>
54
70
  </el-table>
55
71
  <el-pagination
56
- small
57
72
  background
58
- :page-size="listForm.pageSize"
73
+ :page-sizes="[100, 200, 1000, 10000]"
74
+ v-model:page-size="listForm.pageSize"
59
75
  :total="listForm.total"
60
76
  v-model:current-page="listForm.pageNum"
61
- layout="prev,pager,next,total"
77
+ layout="sizes,prev,pager,next,total"
62
78
  ></el-pagination>
63
79
  </div>
64
80
  <el-dialog
@@ -105,11 +121,10 @@
105
121
  </template>
106
122
  <script setup lang="ts">
107
123
  import { reactive, ref, onMounted, watch } from "vue";
108
- import { ElMessage, ElMessageBox } from "element-plus";
124
+ import { ElLoadingService, ElMessage, ElMessageBox } from "element-plus";
109
125
  import { useI18nStore, ct } from "yh-i18n";
110
126
  import http from "@/libs/api.request";
111
127
  import { VxeFormInstance, VxeFormPropTypes } from "vxe-table";
112
- import { nextTick } from "vue";
113
128
 
114
129
  const i18nStore = useI18nStore();
115
130
  const vxeFormRef = ref<VxeFormInstance>();
@@ -118,16 +133,20 @@ const insertUrl = "/translate/insert";
118
133
  const updateUrl = "/translate/edit";
119
134
  const deleteUrl = "/translate/deleteTranslate";
120
135
 
136
+ const i18nList = ref();
121
137
  const listForm = reactive({
122
138
  key: "",
123
139
  pageNum: 1,
124
- pageSize: 100,
140
+ pageSize: 200,
125
141
  total: 0,
126
142
  });
127
143
  const listColumns = reactive<any>([]);
128
144
  const dataList = ref<any>([]);
129
- function getDataList() {
145
+ function getDataList(isReset = false) {
130
146
  let { key, pageNum, pageSize } = listForm;
147
+ if (isReset) {
148
+ pageNum = 1;
149
+ }
131
150
  http
132
151
  .request({
133
152
  url: "/translate/select",
@@ -162,6 +181,17 @@ function getDataList() {
162
181
  listForm.total = total;
163
182
  });
164
183
  }
184
+
185
+ watch(
186
+ () => listForm.pageNum,
187
+ () => {
188
+ getDataList();
189
+ }
190
+ );
191
+
192
+ function rowClickHandler(row) {
193
+ i18nList.value?.toggleRowSelection(row);
194
+ }
165
195
  function resetList() {
166
196
  listForm.key = "";
167
197
  listForm.pageNum = 1;
@@ -263,13 +293,39 @@ function delOne(id) {
263
293
  .then((res) => {
264
294
  if (res?.data?.status === 200) {
265
295
  ElMessage.success(res.data.msg);
266
- resetList();
296
+ getDataList();
267
297
  } else {
268
298
  ElMessage.error(res.data.msg);
269
299
  }
270
300
  });
271
301
  });
272
302
  }
303
+ function delMore() {
304
+ ElMessageBox.confirm("确认删除选中的翻译记录吗?").then(async () => {
305
+ let ids = i18nList.value
306
+ ?.getSelectionRows()
307
+ .map((row) => row.adTranslateId);
308
+ if (ids && ids.length) {
309
+ let len = ids.length;
310
+ let loading = ElLoadingService({
311
+ text: "正在删除选中的翻译……",
312
+ });
313
+ for (let i = 0; i < ids.length; i++) {
314
+ const id = ids[i];
315
+ loading.setText(`正在删除... ${i + 1}/${len}`);
316
+ await http.request({
317
+ url: deleteUrl,
318
+ method: "POST",
319
+ data: {
320
+ id,
321
+ },
322
+ });
323
+ }
324
+ loading.close();
325
+ getDataList();
326
+ }
327
+ });
328
+ }
273
329
 
274
330
  const formItems = reactive<VxeFormPropTypes.Items>([
275
331
  {
@@ -307,9 +363,6 @@ watch(
307
363
  props: { class: "i18n-form-item", id: `i18nFormItem${index + 2}` },
308
364
  },
309
365
  });
310
- fromRules[item.value] = [
311
- { required: true, type: "string", message: `请输入${item.label}` },
312
- ];
313
366
  });
314
367
  }
315
368
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yh-i18n",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "对于国际化的封装",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -12,7 +12,6 @@
12
12
  },
13
13
  "peerDependencies": {
14
14
  "vue": "3.2.47",
15
- "pinia": "2.0.35",
16
15
  "vxe-table": "4.3.10",
17
16
  "element-plus": "2.4.4"
18
17
  },