diff --git a/.gitee/ISSUE_TEMPLATE/bug_report.yml b/.gitee/ISSUE_TEMPLATE/bug_report.yml index b9bbce6103..24b895f67b 100644 --- a/.gitee/ISSUE_TEMPLATE/bug_report.yml +++ b/.gitee/ISSUE_TEMPLATE/bug_report.yml @@ -12,10 +12,10 @@ body: - type: checkboxes id: issue_confirm_read_agreement attributes: - label: "是否已准备好复现 demo?" + label: "是否已准备好复现链接与示例代码?" description: "按要求准备好复现 Demo,复现 Demo 操作步骤:https://vxetable.cn/issues.html" options: - - label: "我已确认要求提供复现链接与示例代码" + - label: "我确定已准备好以上复现链接" required: true - type: textarea id: issue_describe @@ -69,7 +69,7 @@ body: id: issue_confirm_latest_version attributes: label: "是否使用当前最新版本?" - description: "我已确认是最新版本,仅支持提交最新版本的问题反馈,非最新版本不予处理,一律关闭" + description: "仅支持提交最新版本的问题反馈,非最新版本不予处理,一律自动关闭" options: - - label: "我已确认是使用最新版本并已按要求提供复现链接与示例代码" + - label: "我确定已经更新到最新版本后依然存在该问题" required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index b9bbce6103..24b895f67b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -12,10 +12,10 @@ body: - type: checkboxes id: issue_confirm_read_agreement attributes: - label: "是否已准备好复现 demo?" + label: "是否已准备好复现链接与示例代码?" description: "按要求准备好复现 Demo,复现 Demo 操作步骤:https://vxetable.cn/issues.html" options: - - label: "我已确认要求提供复现链接与示例代码" + - label: "我确定已准备好以上复现链接" required: true - type: textarea id: issue_describe @@ -69,7 +69,7 @@ body: id: issue_confirm_latest_version attributes: label: "是否使用当前最新版本?" - description: "我已确认是最新版本,仅支持提交最新版本的问题反馈,非最新版本不予处理,一律关闭" + description: "仅支持提交最新版本的问题反馈,非最新版本不予处理,一律自动关闭" options: - - label: "我已确认是使用最新版本并已按要求提供复现链接与示例代码" + - label: "我确定已经更新到最新版本后依然存在该问题" required: true \ No newline at end of file diff --git a/examples/views/table/TableTest2.vue b/examples/views/table/TableTest2.vue index 9513cb9822..a982199afe 100644 --- a/examples/views/table/TableTest2.vue +++ b/examples/views/table/TableTest2.vue @@ -15,7 +15,7 @@ :row-config="{useKey: true,drag:true}" :row-drag-config="{trigger:'row',disabledMethod:disabledRowMethod}" :column-config="{useKey: true,drag: true}" - :column-drag-config="{isCrossDrag:true,isToChildDrag:true,isSelfToChildDrag:true,trigger:'default',disabledMethod:disabledColumnMethod}" + :column-drag-config="{isPeerDrag:true,isToChildDrag:true,isSelfToChildDrag:true,trigger:'default',disabledMethod:disabledColumnMethod}" :custom-config="customConfig" :loading="demo1.loading" :import-config="{modes: importModes}" diff --git a/package.json b/package.json index 771b465139..ff90344485 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vxe-table", - "version": "4.10.0-beta.13", + "version": "4.10.0", "description": "一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟树、拖拽排序,懒加载、快捷菜单、数据校验、树形结构、打印、导入导出、自定义模板、渲染器、JSON 配置式...", "scripts": { "update": "npm install --legacy-peer-deps", @@ -28,7 +28,7 @@ "style": "lib/style.css", "typings": "types/index.d.ts", "dependencies": { - "vxe-pc-ui": "^4.3.51" + "vxe-pc-ui": "^4.3.54" }, "devDependencies": { "@types/resize-observer-browser": "^0.1.11", @@ -63,9 +63,9 @@ "postcss": "^8.4.38", "sass": "^1.80.4", "sass-loader": "^14.2.0", - "typescript": "~4.5.5", - "vue": "3.5.5", - "vue-router": "^4.3.2" + "typescript": "~4.7.4", + "vue": "3.4.27", + "vue-router": "~4.3.2" }, "vetur": { "tags": "helper/vetur/tags.json", diff --git a/packages/locale/lang/de-DE.ts b/packages/locale/lang/de-DE.ts index 3fdabc9831..a3448afc8e 100644 --- a/packages/locale/lang/de-DE.ts +++ b/packages/locale/lang/de-DE.ts @@ -1,55 +1,56 @@ -export default { +export default +{ vxe: { base: { - pleaseInput: '请输入', - pleaseSelect: '请选择', + pleaseInput: 'Bitte treten Sie ein', + pleaseSelect: 'Bitte auswählen', comma: ',', fullStop: '。' }, loading: { - text: '加载中...' + text: 'Laden...' }, error: { - downErr: '下载失败', - groupFixed: '如果使用分组表头,冻结列必须按组设置', - groupMouseRange: '分组表头与 "{0}" 不能同时使用,这可能会出现错误', - groupTag: '分组列头应该使用 "{0}" 而不是 "{1}",这可能会出现错误', - scrollErrProp: '启用虚拟滚动后不支持该参数 "{0}"', - errConflicts: '参数 "{0}" 与 "{1}" 有冲突', - unableInsert: '无法插入到指定位置,请检查参数是否正确', - useErr: '安装 "{0}" 模块时发生错误,可能顺序不正确,依赖的模块需要在 Table 之前安装', - barUnableLink: '工具栏无法关联表格', - expandContent: '展开行的插槽应该是 "content",请检查是否正确', - reqComp: '缺少 "{0}" 组件,请检查是否正确安装。 https://vxeui.com/#/start/useGlobal', - reqModule: '缺少 "{0}" 模块', - reqProp: '缺少必要的 "{0}" 参数,这可能会导致出现错误', - emptyProp: '参数 "{0}" 不允许为空', - errProp: '不支持的参数 "{0}",可能为 "{1}"', - colRepet: 'column.{0}="{1}" 重复了,这可能会导致某些功能无法使用', - notFunc: '方法 "{0}" 不存在', - errFunc: '参数 "{0}" 不是一个方法', - notValidators: '全局校验 "{0}" 不存在', - notFormats: '全局格式化 "{0}" 不存在', - notCommands: '全局指令 "{0}" 不存在', - notSlot: '插槽 "{0}" 不存在', - noTree: '树结构不支持 "{0}"', - notProp: '不支持的参数 "{0}"', - checkProp: '当数据量过大时可能会导致复选框卡顿,建议设置参数 "{0}" 提升渲染速度', - coverProp: '"{0}" 的参数 "{1}" 重复定义,这可能会出现错误', - uniField: '字段名 "{0}" 重复定义,这可能会出现错误', - repeatKey: '主键重复 {0}="{1}",这可能会出现错误', - delFunc: '方法 "{0}" 已废弃,请使用 "{1}"', - delProp: '参数 "{0}" 已废弃,请使用 "{1}"', - delEvent: '事件 "{0}" 已废弃,请使用 "{1}"', - removeProp: '参数 "{0}" 已废弃,不建议使用,这可能会导致出现错误', - errFormat: '全局的格式化内容应该使用 "VXETable.formats" 定义,挂载 "formatter={0}" 的方式已不建议使用', - notType: '不支持的文件类型 "{0}"', - notExp: '该浏览器不支持导入/导出功能', - impFields: '导入失败,请检查字段名和数据格式是否正确', - treeNotImp: '树表格不支持导入', - treeCrossDrag: '只能拖拽第一层级', - treeDragChild: '父级不能拖拽到自己的子级中', - reqPlugin: '可选扩展插件 "{1}" https://vxeui.com/other{0}/#/{1}/install' + downErr: 'Der Download ist fehlgeschlagen', + groupFixed: 'Bei Verwendung von Gruppenköpfen müssen eingefrorene Spalten nach Gruppe festgelegt werden', + groupMouseRange: 'Der Gruppenheader und „{0}“ können nicht gleichzeitig verwendet werden, was zu einem Fehler führen kann.', + groupTag: 'Bei der Gruppierung von Spaltenüberschriften sollte „{0}“ anstelle von „{1}“ verwendet werden, was zu Fehlern führen kann', + scrollErrProp: 'Der Parameter „{0}“ wird nicht unterstützt, wenn virtuelles Scrollen aktiviert ist', + errConflicts: 'Parameter „{0}“ stehen im Konflikt mit „{1}“', + unableInsert: 'Das Einfügen an der angegebenen Position ist nicht möglich. Bitte überprüfen Sie, ob die Parameter korrekt sind', + useErr: 'Bei der Installation des Moduls „{0}“ ist möglicherweise die falsche Reihenfolge aufgetreten. Die abhängigen Module müssen vor der Tabelle installiert werden.', + barUnableLink: 'Die Symbolleiste kann nicht mit der Tabelle verknüpft werden', + expandContent: 'Der Slot zum Erweitern der Zeile sollte „content“ lauten. Bitte überprüfen Sie, ob er korrekt ist', + reqComp: 'Die Komponente „{0}“ fehlt. Bitte überprüfen Sie, ob sie korrekt installiert ist. https://vxeui.com/#/start/useGlobal', + reqModule: 'Fehlendes Modul „{0}“', + reqProp: 'Der erforderliche Parameter „{0}“ fehlt, was zu einem Fehler führen kann', + emptyProp: 'Der Parameter „{0}“ darf nicht leer sein', + errProp: 'Nicht unterstützter Parameter „{0}“, möglicherweise „{1}“', + colRepet: 'Column.{0}="{1}" wird wiederholt, was dazu führen kann, dass einige Funktionen unbrauchbar werden', + notFunc: 'Methode „{0}“ existiert nicht', + errFunc: 'Parameter „{0}“ ist keine Methode', + notValidators: 'Globale Prüfung „{0}“ existiert nicht', + notFormats: 'Das globale Format „{0}“ existiert nicht', + notCommands: 'Die globale Direktive „{0}“ existiert nicht', + notSlot: 'Slot „{0}“ existiert nicht', + noTree: 'Die Baumstruktur unterstützt „{0}“ nicht', + notProp: 'Nicht unterstützter Parameter „{0}“', + checkProp: 'Wenn die Datenmenge zu groß ist, kann es zum Einfrieren des Kontrollkästchens kommen. Es wird empfohlen, den Parameter „{0}“ festzulegen, um die Rendering-Geschwindigkeit zu verbessern.', + coverProp: 'Der Parameter „{1}“ von „{0}“ wird wiederholt definiert, was zu einem Fehler führen kann.', + uniField: 'Der Feldname „{0}“ wird wiederholt definiert, was zu einem Fehler führen kann', + repeatKey: 'Doppelter Primärschlüssel {0}="{1}", dies kann zu einem Fehler führen', + delFunc: 'Methode „{0}“ ist veraltet, bitte verwenden Sie „{1}“', + delProp: 'Parameter „{0}“ ist veraltet, bitte verwenden Sie „{1}“', + delEvent: 'Das Ereignis „{0}“ ist veraltet. Bitte verwenden Sie „{1}“.', + removeProp: 'Der Parameter „{0}“ ist veraltet und wird nicht empfohlen und kann zu Fehlern führen', + errFormat: 'Globale Formatierungsinhalte sollten mit „VXETable.formats“ definiert werden. Die Mountmethode „formatter={0}“ wird nicht mehr empfohlen.', + notType: 'Nicht unterstützter Dateityp „{0}“', + notExp: 'Dieser Browser unterstützt keine Import-/Exportfunktion', + impFields: 'Der Import ist fehlgeschlagen. Bitte überprüfen Sie, ob der Feldname und das Datenformat korrekt sind', + treeNotImp: 'Baumtabellen unterstützen den Import nicht', + treeCrossDrag: 'Nur die erste Ebene kann gezogen werden', + treeDragChild: 'Ein übergeordnetes Element kann nicht in seine eigenen untergeordneten Elemente gezogen werden', + reqPlugin: 'Optionale Erweiterung „{1}“ https://vxeui.com/other{0}/#/{1}/install' }, table: { emptyText: 'Noch keine Daten', @@ -78,614 +79,614 @@ export default { dragTip: 'Umzug: {0}' }, grid: { - selectOneRecord: '请至少选择一条记录!', - deleteSelectRecord: '您确定要删除所选记录吗?', - removeSelectRecord: '您确定要移除所选记录吗?', - dataUnchanged: '数据未改动!', - delSuccess: '成功删除所选记录!', - saveSuccess: '保存成功!', - operError: '发生错误,操作失败!' + selectOneRecord: 'Bitte wählen Sie mindestens einen Datensatz aus!', + deleteSelectRecord: 'Sind Sie sicher, dass Sie die ausgewählten Datensätze löschen möchten?', + removeSelectRecord: 'Sind Sie sicher, dass Sie die ausgewählten Datensätze entfernen möchten?', + dataUnchanged: 'Die Daten wurden nicht geändert!', + delSuccess: 'Ausgewählte Datensätze erfolgreich gelöscht!', + saveSuccess: 'Erfolgreich gespeichert!', + operError: 'Es ist ein Fehler aufgetreten und der Vorgang ist fehlgeschlagen!' }, select: { - search: '搜索', - loadingText: '加载中', - emptyText: '暂无数据' + search: 'suchen', + loadingText: 'Laden', + emptyText: 'Noch keine Daten' }, pager: { - goto: '前往', - gotoTitle: '页数', - pagesize: '{0}条/页', - total: '共 {0} 条记录', - pageClassifier: '页', - homePage: '首页', - homePageTitle: '首页', - prevPage: '上一页', - prevPageTitle: '上一页', - nextPage: '下一页', - nextPageTitle: '下一页', - prevJump: '向上跳页', - prevJumpTitle: '向上跳页', - nextJump: '向下跳页', - nextJumpTitle: '向下跳页', - endPage: '末页', - endPageTitle: '末页' + goto: 'Gehe zu', + gotoTitle: 'Anzahl der Seiten', + pagesize: '{0} Elemente/Seite', + total: 'Insgesamt {0} Datensätze', + pageClassifier: 'Seite', + homePage: 'Titelseite', + homePageTitle: 'Titelseite', + prevPage: 'Vorherige Seite', + prevPageTitle: 'Vorherige Seite', + nextPage: 'Nächste Seite', + nextPageTitle: 'Nächste Seite', + prevJump: 'Seite nach oben springen', + prevJumpTitle: 'Seite nach oben springen', + nextJump: 'Seite nach unten springen', + nextJumpTitle: 'Seite nach unten springen', + endPage: 'Letzte Seite', + endPageTitle: 'Letzte Seite' }, alert: { - title: '系统提示' + title: 'Systemaufforderung' }, button: { - confirm: '确认', - cancel: '取消' + confirm: 'bestätigen', + cancel: 'Stornieren' }, filter: { - search: '搜索' + search: 'suchen' }, custom: { - cstmTitle: '列设置', - cstmRestore: '恢复默认', - cstmCancel: '取消', - cstmConfirm: '确定', - cstmConfirmRestore: '请确认是否恢复成默认列配置?', - cstmDragTarget: '移动:{0}', + cstmTitle: 'Spalteneinstellungen', + cstmRestore: 'Standard wiederherstellen', + cstmCancel: 'Stornieren', + cstmConfirm: 'Sicher', + cstmConfirmRestore: 'Bitte bestätigen Sie, ob die Standardspaltenkonfiguration wiederhergestellt werden soll.', + cstmDragTarget: 'Umzug: {0}', setting: { - colSort: '排序', - sortHelpTip: '点击并拖动图标可以调整列的排序', - colTitle: '列标题', - colResizable: '列宽(像素)', - colVisible: '是否显示', - colFixed: '冻结列', - colFixedMax: '冻结列(最多 {0} 列)', - fixedLeft: '左侧', - fixedUnset: '不设置', - fixedRight: '右侧' + colSort: 'Sortieren', + sortHelpTip: 'Klicken Sie auf das Symbol und ziehen Sie es, um die Spaltenreihenfolge anzupassen', + colTitle: 'Spaltenüberschrift', + colResizable: 'Spaltenbreite (Pixel)', + colVisible: 'Ob angezeigt werden soll', + colFixed: 'Spalten einfrieren', + colFixedMax: 'Spalten einfrieren (bis zu {0} Spalten)', + fixedLeft: 'linke Seite', + fixedUnset: 'Nicht festgelegt', + fixedRight: 'rechte Seite' } }, import: { modes: { - covering: '覆盖方式(直接覆盖表格数据)', - insert: '底部追加(在表格的底部追加新数据)', - insertTop: '顶部追加(在表格的顶部追加新数据)', - insertBottom: '底部追加(在表格的底部追加新数据)' + covering: 'Überschreibmethode (Tabellendaten direkt überschreiben)', + insert: 'Unten anhängen (neue Daten am Ende der Tabelle anhängen)', + insertTop: 'Top append (neue Daten oben an die Tabelle anhängen)', + insertBottom: 'Unten anhängen (neue Daten am Ende der Tabelle anhängen)' }, - impTitle: '导入数据', - impFile: '文件名', - impSelect: '选择文件', - impType: '文件类型', - impOpts: '参数设置', - impMode: '导入模式', - impConfirm: '导入', - impCancel: '取消' + impTitle: 'Daten importieren', + impFile: 'Dateiname', + impSelect: 'Datei auswählen', + impType: 'Dateityp', + impOpts: 'Parametereinstellungen', + impMode: 'Importmodus', + impConfirm: 'Import', + impCancel: 'Stornieren' }, export: { types: { - csv: 'CSV (逗号分隔)(*.csv)', - html: '网页(*.html)', - xml: 'XML 数据(*.xml)', - txt: '文本文件(制表符分隔)(*.txt)', - xls: 'Excel 97-2003 工作簿(*.xls)', - xlsx: 'Excel 工作簿(*.xlsx)', + csv: 'CSV (durch Kommas getrennt) (*.csv)', + html: 'Webseite (*.html)', + xml: 'XML-Daten (*.xml)', + txt: 'Textdatei (tabulatorgetrennt) (*.txt)', + xls: 'Excel 97-2003-Arbeitsmappe (*.xls)', + xlsx: 'Excel-Arbeitsmappe (*.xlsx)', pdf: 'PDF (*.pdf)' }, modes: { - current: '当前数据(当前页的数据)', - selected: '选中数据(当前页选中的数据)', - all: '全量数据(包括所有分页的数据)' + current: 'Aktuelle Daten (Daten der aktuellen Seite)', + selected: 'Ausgewählte Daten (ausgewählte Daten auf der aktuellen Seite)', + all: 'Vollständige Daten (einschließlich aller paginierten Daten)' }, - printTitle: '打印数据', - expTitle: '导出数据', - expName: '文件名', - expNamePlaceholder: '请输入文件名', - expSheetName: '标题', - expSheetNamePlaceholder: '请输入标题', - expType: '保存类型', - expMode: '选择数据', - expCurrentColumn: '全部字段', - expColumn: '选择字段', - expOpts: '参数设置', - expOptHeader: '表头', - expHeaderTitle: '是否需要表头', - expOptFooter: '表尾', - expFooterTitle: '是否需要表尾', - expOptColgroup: '分组表头', - expColgroupTitle: '如果存在,则支持带有分组结构的表头', - expOptMerge: '合并', - expMergeTitle: '如果存在,则支持带有合并结构的单元格', - expOptAllExpand: '展开层级', - expAllExpandTitle: '如果存在,则支持将带有层级结构的数据全部展开', - expOptUseStyle: '样式', - expUseStyleTitle: '如果存在,则支持带样式的单元格', - expOptOriginal: '源数据', - expOriginalTitle: '如果为源数据,则支持导入到表格中', - expPrint: '打印', - expConfirm: '导出', - expCancel: '取消' + printTitle: 'Daten drucken', + expTitle: 'Daten exportieren', + expName: 'Dateiname', + expNamePlaceholder: 'Bitte geben Sie einen Dateinamen ein', + expSheetName: 'Titel', + expSheetNamePlaceholder: 'Bitte geben Sie einen Titel ein', + expType: 'Speichertyp', + expMode: 'Daten auswählen', + expCurrentColumn: 'Alle Felder', + expColumn: 'Feld auswählen', + expOpts: 'Parametereinstellungen', + expOptHeader: 'Kopfzeile', + expHeaderTitle: 'Ist eine Kopfzeile erforderlich?', + expOptFooter: 'Ende des Tisches', + expFooterTitle: 'Ist eine Tabellenfußzeile erforderlich?', + expOptColgroup: 'Gruppenkopf', + expColgroupTitle: 'Sofern vorhanden, werden Header mit Gruppierungsstrukturen unterstützt', + expOptMerge: 'verschmelzen', + expMergeTitle: 'Unterstützt Zellen mit Zusammenführungsstrukturen, sofern vorhanden', + expOptAllExpand: 'Ebene erweitern', + expAllExpandTitle: 'Wenn vorhanden, unterstützt es die Erweiterung aller Daten mit einer hierarchischen Struktur.', + expOptUseStyle: 'Stil', + expUseStyleTitle: 'Formatierte Zellen werden unterstützt, sofern vorhanden', + expOptOriginal: 'Quelldaten', + expOriginalTitle: 'Wenn es sich um Quelldaten handelt, wird der Import in die Tabelle unterstützt', + expPrint: 'Drucken', + expConfirm: 'Export', + expCancel: 'Stornieren' }, modal: { - errTitle: '错误提示', - zoomMin: '最小化', - zoomIn: '最大化', - zoomOut: '还原', - close: '关闭', - miniMaxSize: '最小化窗口的数量不能超过 {0} 个', - footPropErr: 'show-footer 仅用于启用表尾,需配合 show-confirm-button | show-cancel-button | 插槽使用' + errTitle: 'Fehlermeldung', + zoomMin: 'minimieren', + zoomIn: 'maximieren', + zoomOut: 'Reduktion', + close: 'Schließung', + miniMaxSize: 'Die Anzahl der minimierten Fenster darf {0} nicht überschreiten.', + footPropErr: 'show-footer wird nur zum Aktivieren der Tabellenfußzeile verwendet und muss mit dem Show-Confirm-Button | verwendet werden' }, drawer: { - close: '关闭' + close: 'Schließung' }, form: { - folding: '收起', - unfolding: '展开' + folding: 'schließen', + unfolding: 'Expandieren' }, toolbar: { - import: '导入', - export: '导出', - print: '打印', - refresh: '刷新', - zoomIn: '全屏', - zoomOut: '还原', - custom: '列设置', - customAll: '全部', - customConfirm: '确认', - customRestore: '重置', - fixedLeft: '冻结在左侧', - fixedRight: '冻结在右侧', - cancelFixed: '取消冻结列' + import: 'Import', + export: 'Export', + print: 'Drucken', + refresh: 'auffrischen', + zoomIn: 'Vollbild', + zoomOut: 'Reduktion', + custom: 'Spalteneinstellungen', + customAll: 'alle', + customConfirm: 'bestätigen', + customRestore: 'zurücksetzen', + fixedLeft: 'links eingefroren', + fixedRight: 'rechts eingefroren', + cancelFixed: 'Spalte freigeben' }, input: { date: { - m1: '01 月', - m2: '02 月', - m3: '03 月', - m4: '04 月', - m5: '05 月', - m6: '06 月', - m7: '07 月', - m8: '08 月', - m9: '09 月', - m10: '10 月', - m11: '11 月', - m12: '12 月', - quarterLabel: '{0} 年', - monthLabel: '{0} 年', - dayLabel: '{0} 年 {1}', + m1: 'Januar', + m2: 'Februar', + m3: 'Marsch', + m4: 'April', + m5: 'Mai', + m6: '06. Juni', + m7: 'Juli', + m8: 'August', + m9: 'September', + m10: 'Oktober', + m11: 'November', + m12: 'Dezember', + quarterLabel: '{0} Jahre', + monthLabel: '{0} Jahre', + dayLabel: '{0} Jahr {1}', labelFormat: { date: 'yyyy-MM-dd', time: 'HH:mm:ss', datetime: 'yyyy-MM-dd HH:mm:ss', - week: 'yyyy 年第 WW 周', + week: 'Week WW of year yyyy', month: 'yyyy-MM', - quarter: 'yyyy 年第 q 季度', + quarter: 'quarter q of year yyyy', year: 'yyyy' }, weeks: { - w: '周', - w0: '周日', - w1: '周一', - w2: '周二', - w3: '周三', - w4: '周四', - w5: '周五', - w6: '周六' + w: 'Woche', + w0: 'Sonntag', + w1: 'am Montag', + w2: 'Dienstag', + w3: 'Mittwoch', + w4: 'Donnerstag', + w5: 'Freitag', + w6: 'Samstag' }, months: { - m0: '一月', - m1: '二月', - m2: '三月', - m3: '四月', - m4: '五月', - m5: '六月', - m6: '七月', - m7: '八月', - m8: '九月', - m9: '十月', - m10: '十一月', - m11: '十二月' + m0: 'Januar', + m1: 'Februar', + m2: 'Marsch', + m3: 'April', + m4: 'Mai', + m5: 'Juni', + m6: 'Juli', + m7: 'August', + m8: 'September', + m9: 'Oktober', + m10: 'November', + m11: 'Dezember' }, quarters: { - q1: '第一季度', - q2: '第二季度', - q3: '第三季度', - q4: '第四季度' + q1: 'erstes Viertel', + q2: 'zweites Viertel', + q3: 'drittes Viertel', + q4: 'viertes Viertel' } } }, numberInput: { - currencySymbol: '$' + currencySymbol: '¥' }, imagePreview: { - popupTitle: '预览', + popupTitle: 'Vorschau', operBtn: { - zoomOut: '缩小', - zoomIn: '放大', - pctFull: '等比例缩放', - pct11: '显示原始尺寸', - rotateLeft: '向左旋转', - rotateRight: '向右旋转', - print: '点击打印图片', - download: '点击下载图片' + zoomOut: 'herauszoomen', + zoomIn: 'vergrößern', + pctFull: 'proportionale Skalierung', + pct11: 'Originalgröße anzeigen', + rotateLeft: 'Nach links drehen', + rotateRight: 'Nach rechts drehen', + print: 'Klicken Sie hier, um das Bild auszudrucken', + download: 'Klicken Sie hier, um das Bild herunterzuladen' } }, upload: { - fileBtnText: '点击或拖拽上传', - imgBtnText: '点击或拖拽上传', - dragPlaceholder: '请把文件拖放到这个区域即可上传', - imgSizeHint: '单张{0}', - imgCountHint: '最多{0}张', - fileTypeHint: '支持 {0} 文件类型', - fileSizeHint: '单个文件大小不超过{0}', - fileCountHint: '最多可上传{0}个文件', - uploadTypeErr: '文件类型不匹配!', - overCountErr: '最多只能选择{0}个文件!', - overCountExtraErr: '已超出最大数量{0}个,超出的{1}个文件将被忽略!', - overSizeErr: '文件大小最大不能超过{0}!', - reUpload: '重新上传', - uploadProgress: '上传中 {0}%', - uploadErr: '上传失败', - uploadSuccess: '上传成功', - moreBtnText: '更多({0})', - viewItemTitle: '点击查看', + fileBtnText: 'Zum Hochladen klicken oder ziehen', + imgBtnText: 'Zum Hochladen klicken oder ziehen', + dragPlaceholder: 'Bitte ziehen Sie die Datei per Drag & Drop in diesen Bereich, um sie hochzuladen', + imgSizeHint: 'Broschüre {0}', + imgCountHint: 'Maximal {0} Bilder', + fileTypeHint: 'Unterstützte {0} Dateitypen', + fileSizeHint: 'Die Größe einer einzelnen Datei überschreitet nicht {0}', + fileCountHint: 'Es können bis zu {0} Dateien hochgeladen werden', + uploadTypeErr: 'Dateityp stimmt nicht überein!', + overCountErr: 'Es können nur {0} Dateien ausgewählt werden!', + overCountExtraErr: 'Die maximale Anzahl von {0} Dateien wurde überschritten. Die überschüssigen {1} Dateien werden ignoriert!', + overSizeErr: 'Die maximale Dateigröße darf {0} nicht überschreiten!', + reUpload: 'Erneut hochladen', + uploadProgress: '{0} % werden hochgeladen', + uploadErr: 'Der Upload ist fehlgeschlagen', + uploadSuccess: 'Hochladen erfolgreich', + moreBtnText: 'Mehr ({0})', + viewItemTitle: 'Klicken Sie zum Anzeigen', morePopup: { - readTitle: '查看列表', - imageTitle: '上传图片', - fileTitle: '上传文件' + readTitle: 'Liste anzeigen', + imageTitle: 'Bilder hochladen', + fileTitle: 'Dateien hochladen' } }, empty: { - defText: '暂无数据' + defText: 'Noch keine Daten' }, colorPicker: { - clear: '清除', - confirm: '确认', - copySuccess: '已复制到剪贴板:{0}' + clear: 'Klar', + confirm: 'bestätigen', + copySuccess: 'In die Zwischenablage kopiert: {0}' }, formDesign: { - formName: '表单名称', - defFormTitle: '未命名的表单', - widgetPropTab: '控件属性', - widgetFormTab: '表单属性', + formName: 'Formularname', + defFormTitle: 'unbenannte Form', + widgetPropTab: 'Steuereigenschaften', + widgetFormTab: 'Formulareigenschaften', error: { - wdFormUni: '该类型的控件在表单中只允许添加一个', - wdSubUni: '该类型的控件在子表中只允许添加一个' + wdFormUni: 'Dem Formular darf nur ein Steuerelement dieses Typs hinzugefügt werden', + wdSubUni: 'Der Untertabelle darf nur ein Steuerelement dieses Typs hinzugefügt werden' }, styleSetting: { - btn: '样式设置', - title: '表单的样式设置', - layoutTitle: '控件布局', - verticalLayout: '上下布局', - horizontalLayout: '横向布局', - styleTitle: '标题样式', - boldTitle: '标题加粗', - fontBold: '加粗', - fontNormal: '常规', - colonTitle: '显示冒号', - colonVisible: '显示', - colonHidden: '隐藏', - alignTitle: '对齐方式', - widthTitle: '标题宽度', - alignLeft: '居左', - alignRight: '居右', - unitPx: '像素', - unitPct: '百分比' + btn: 'Stileinstellungen', + title: 'Einstellungen für den Formularstil', + layoutTitle: 'Steuerungslayout', + verticalLayout: 'Layout oben und unten', + horizontalLayout: 'Horizontales Layout', + styleTitle: 'Titelstil', + boldTitle: 'Titel fett', + fontBold: 'Deutlich', + fontNormal: 'konventionell', + colonTitle: 'Doppelpunkt anzeigen', + colonVisible: 'zeigen', + colonHidden: 'verstecken', + alignTitle: 'Ausrichtung', + widthTitle: 'Titelbreite', + alignLeft: 'Auf der linken Seite', + alignRight: 'Rechts', + unitPx: 'Pixel', + unitPct: 'Prozentsatz' }, widget: { group: { - base: '基础控件', - layout: '布局控件', - system: '系统控件', - module: '模块控件', - chart: '图表控件', - advanced: '高级控件' + base: 'Grundlegende Steuerelemente', + layout: 'Layout-Steuerelemente', + system: 'Systemkontrollen', + module: 'Modulsteuerung', + chart: 'Diagrammsteuerung', + advanced: 'Erweiterte Steuerelemente' }, - copyTitle: '副本_{0}', + copyTitle: 'Kopieren_{0}', component: { - input: '输入框', - textarea: '文本域', - select: '下拉选择', - row: '一行多列', - title: '标题', - text: '文本', - subtable: '子表', - VxeSwitch: '是/否', - VxeInput: '输入框', - VxeNumberInput: '数字', - VxeDatePicker: '日期', - VxeTextarea: '文本域', - VxeSelect: '下拉选择', - VxeTreeSelect: '树形选择', - VxeRadioGroup: '单选框', - VxeCheckboxGroup: '复选框', - VxeUploadFile: '文件', - VxeUploadImage: '图片', - VxeRate: '评分', - VxeSlider: '滑块' + input: 'Eingabefeld', + textarea: 'Textfeld', + select: 'Dropdown-Auswahl', + row: 'Eine Zeile und mehrere Spalten', + title: 'Titel', + text: 'Text', + subtable: 'Untertabelle', + VxeSwitch: 'ob', + VxeInput: 'Eingabefeld', + VxeNumberInput: 'Nummer', + VxeDatePicker: 'Datum', + VxeTextarea: 'Textfeld', + VxeSelect: 'Dropdown-Auswahl', + VxeTreeSelect: 'Baumauswahl', + VxeRadioGroup: 'Optionsfeld', + VxeCheckboxGroup: 'Kontrollkästchen', + VxeUploadFile: 'dokumentieren', + VxeUploadImage: 'Bild', + VxeRate: 'Punktzahl', + VxeSlider: 'Schieberegler' } }, widgetProp: { - name: '控件名称', - placeholder: '提示语', - required: '必填校验', - multiple: '允许多选', + name: 'Kontrollname', + placeholder: 'prompt', + required: 'Erforderliche Verifizierung', + multiple: 'Mehrfachauswahl zulassen', displaySetting: { - name: '显示设置', - pc: '电脑端', - mobile: '手机端', - visible: '显示', - hidden: '隐藏' + name: 'Anzeigeeinstellungen', + pc: 'PC', + mobile: 'Mobile Version', + visible: 'zeigen', + hidden: 'verstecken' }, dataSource: { - name: '数据源', - defValue: '选项{0}', - addOption: '添加选项', - batchEditOption: '批量编辑', - batchEditTip: '每行对应一个选项,支持从表格、Excel、WPS 中直接复制粘贴。', - batchEditSubTip: '每行对应一个选项,如果是分组,子项可以是空格或制表键开头,支持从表格、Excel、WPS 中直接复制粘贴。', - buildOption: '生成选项' + name: 'Datenquelle', + defValue: 'Option {0}', + addOption: 'Optionen hinzufügen', + batchEditOption: 'Stapelbearbeitung', + batchEditTip: 'Jede Zeile entspricht einer Option und unterstützt das direkte Kopieren und Einfügen aus Tabellen, Excel und WPS.', + batchEditSubTip: 'Jede Zeile entspricht einer Option. Wenn es sich um eine Gruppe handelt, können die Unterelemente mit einem Leerzeichen oder einer Tabulatortaste beginnen. Direktes Kopieren und Einfügen aus Tabellen, Excel und WPS wird unterstützt.', + buildOption: 'Build-Optionen' }, rowProp: { - colSize: '列数', - col2: '两列', - col3: '三列', - col4: '四列', - col6: '六列', - layout: '布局' + colSize: 'Anzahl der Spalten', + col2: 'zwei Spalten', + col3: 'drei Spalten', + col4: 'vier Spalten', + col6: 'sechs Spalten', + layout: 'Layout' }, textProp: { - name: '内容', - alignTitle: '对齐方式', - alignLeft: '居左', - alignCenter: '居中', - alignRight: '居右', - colorTitle: '字体颜色', - sizeTitle: '字体大小', - boldTitle: '字体加粗', - fontNormal: '常规', - fontBold: '加粗' + name: 'Inhalt', + alignTitle: 'Ausrichtung', + alignLeft: 'Auf der linken Seite', + alignCenter: 'Center', + alignRight: 'Rechts', + colorTitle: 'Schriftfarbe', + sizeTitle: 'Schriftgröße', + boldTitle: 'Fette Schriftart', + fontNormal: 'konventionell', + fontBold: 'Deutlich' }, subtableProp: { - seqTitle: '序号', - showSeq: '显示序号', - showCheckbox: '允许多选', - errSubDrag: '子表不支持该控件,请使用其他控件', - colPlace: '将控件拖拽进来' + seqTitle: 'Seriennummer', + showSeq: 'Seriennummer anzeigen', + showCheckbox: 'Mehrfachauswahl zulassen', + errSubDrag: 'Die Untertabelle unterstützt dieses Steuerelement nicht. Bitte verwenden Sie andere Steuerelemente', + colPlace: 'Ziehen Sie das Steuerelement hinein' }, uploadProp: { - limitFileCount: '文件数量限制', - limitFileSize: '文件大小限制', - multiFile: '允许上传多个文件', - limitImgCount: '图片数量限制', - limitImgSize: '图片大小限制', - multiImg: '允许上传多张图片' + limitFileCount: 'Dateimengenbegrenzung', + limitFileSize: 'Dateigrößenbeschränkung', + multiFile: 'Mehrere Datei-Uploads zulassen', + limitImgCount: 'Bildmengenbegrenzung', + limitImgSize: 'Beschränkung der Bildgröße', + multiImg: 'Erlauben Sie das Hochladen mehrerer Bilder' } } }, listDesign: { - fieldSettingTab: '字段设置', - listSettingTab: '参数设置', - searchTitle: '查询条件', - listTitle: '列表字段', - searchField: '查询字段', - listField: '列表字段', + fieldSettingTab: 'Feldeinstellungen', + listSettingTab: 'Parametereinstellungen', + searchTitle: 'Abfragebedingungen', + listTitle: 'Listenfeld', + searchField: 'Abfragefeld', + listField: 'Listenfeld', activeBtn: { - ActionButtonUpdate: '编辑', - ActionButtonDelete: '删除' + ActionButtonUpdate: 'bearbeiten', + ActionButtonDelete: 'löschen' }, search: { - addBtn: '编辑', - emptyText: '未配置查询条件', - editPopupTitle: '编辑查询字段' + addBtn: 'bearbeiten', + emptyText: 'Keine Abfragebedingungen konfiguriert', + editPopupTitle: 'Abfragefelder bearbeiten' }, searchPopup: { - colTitle: '标题', - saveBtn: '保存' + colTitle: 'Titel', + saveBtn: 'speichern' } }, text: { - copySuccess: '已复制到剪贴板', - copyError: '当前环境不支持该操作' + copySuccess: 'In die Zwischenablage kopiert', + copyError: 'Die aktuelle Umgebung unterstützt diesen Vorgang nicht' }, countdown: { formats: { - yyyy: '年', - MM: '月', - dd: '天', - HH: '时', - mm: '分', - ss: '秒' + yyyy: 'Jahr', + MM: 'Mond', + dd: 'Himmel', + HH: 'Stunde', + mm: 'Punkt', + ss: 'Zweite' } }, plugins: { extendCellArea: { area: { - mergeErr: '无法对合并单元格进行该操作', - multiErr: '无法对多重选择区域进行该操作', - selectErr: '无法操作指定区域的单元格', - extendErr: '如果延伸的区域包含被合并的单元格,所有合并的单元格需大小相同', - pasteMultiErr: '无法粘贴,需要相同大小的复制的区域和粘贴的区域才能执行此操作', - cpInvalidErr: '该操作无法进行,您选择的区域中存在被禁止的列({0})' + mergeErr: 'Dieser Vorgang kann nicht für verbundene Zellen ausgeführt werden', + multiErr: 'Dieser Vorgang kann nicht für mehrere Auswahlbereiche ausgeführt werden', + selectErr: 'Zellen im angegebenen Bereich können nicht bearbeitet werden', + extendErr: 'Wenn der erweiterte Bereich verbundene Zellen enthält, müssen alle zusammengeführten Zellen dieselbe Größe haben', + pasteMultiErr: 'Das Einfügen ist nicht möglich. Die kopierten und eingefügten Bereiche müssen dieselbe Größe haben, um diesen Vorgang ausführen zu können', + cpInvalidErr: 'Der Vorgang kann nicht ausgeführt werden. Der von Ihnen ausgewählte Bereich enthält verbotene Spalten ({0}).' }, fnr: { - title: '查找和替换', - findLabel: '查找', - replaceLabel: '替换', - findTitle: '查找内容:', - replaceTitle: '替换为:', + title: 'Suchen und ersetzen', + findLabel: 'Finden', + replaceLabel: 'ersetzen', + findTitle: 'Finden Sie was:', + replaceTitle: 'Ersetzen durch:', tabs: { - find: '查找', - replace: '替换' + find: 'Finden', + replace: 'ersetzen' }, filter: { - re: '正则表达式', - whole: '全词匹配', - sensitive: '区分大小写' + re: 'regulärer Ausdruck', + whole: 'Ganzwortübereinstimmung', + sensitive: 'Groß- und Kleinschreibung beachten' }, btns: { - findNext: '查找下一个', - findAll: '查找全部', - replace: '替换', - replaceAll: '替换全部', - cancel: '取消' + findNext: 'Weiter finden', + findAll: 'Finden Sie alle', + replace: 'ersetzen', + replaceAll: 'Alles ersetzen', + cancel: 'Stornieren' }, header: { seq: '#', - cell: '单元格', - value: '值' + cell: 'Zelle', + value: 'Wert' }, body: { - row: '行:{0}', - col: '列:{0}' + row: 'Zeile: {0}', + col: 'Spalte: {0}' }, - empty: '(空值)', - reError: '无效的正则表达式', - recordCount: '已找到 {0} 个单元格', - notCell: '找不到匹配的单元格', - replaceSuccess: '成功替换 {0} 个单元格' + empty: '(Nullwert)', + reError: 'Ungültiger regulärer Ausdruck', + recordCount: '{0} Zellen gefunden', + notCell: 'Keine passende Zelle gefunden', + replaceSuccess: '{0} Zellen erfolgreich ersetzt' } }, filterComplexInput: { menus: { - fixedColumn: '冻结列', - fixedGroup: '冻结分组', - cancelFixed: '取消冻结', - fixedLeft: '冻结左侧', - fixedRight: '冻结右侧' + fixedColumn: 'Spalten einfrieren', + fixedGroup: 'Gruppe einfrieren', + cancelFixed: 'Auftauen', + fixedLeft: 'einfrieren links', + fixedRight: 'richtig einfrieren' }, cases: { - equal: '等于', - gt: '大于', - lt: '小于', - begin: '开头是', - endin: '结尾是', - include: '包含', - isSensitive: '区分大小写' + equal: 'gleich', + gt: 'größer als', + lt: 'weniger als', + begin: 'Der Anfang ist', + endin: 'Das Ende ist', + include: 'Enthalten', + isSensitive: 'Groß- und Kleinschreibung beachten' } }, filterCombination: { menus: { - clearSort: '清除排序', - sortAsc: '升序', - sortDesc: '降序', - fixedColumn: '冻结列', - fixedGroup: '冻结分组', - cancelFixed: '取消冻结', - fixedLeft: '冻结左侧', - fixedRight: '冻结右侧', - clearFilter: '清除筛选', - textOption: '文本筛选', - numberOption: '数值筛选' + clearSort: 'Klare Sortierung', + sortAsc: 'Aufsteigende Reihenfolge', + sortDesc: 'absteigende Reihenfolge', + fixedColumn: 'Spalten einfrieren', + fixedGroup: 'Gruppe einfrieren', + cancelFixed: 'Auftauen', + fixedLeft: 'einfrieren links', + fixedRight: 'richtig einfrieren', + clearFilter: 'Filter löschen', + textOption: 'Textfilter', + numberOption: 'numerischer Filter' }, popup: { - title: '自定义筛选的方式', - currColumnTitle: '当前列:', - and: '与', - or: '或', - describeHtml: '可用 ? 代表单个字符
用 * 代表任意多个字符' + title: 'So passen Sie die Filterung an', + currColumnTitle: 'Aktuelle Spalte:', + and: 'Und', + or: 'oder', + describeHtml: 'Verfügbar ? steht für ein einzelnes Zeichen
Verwenden Sie *, um eine beliebige Anzahl von Zeichen darzustellen' }, cases: { - equal: '等于', - unequal: '不等于', - gt: '大于', - ge: '大于或等于', - lt: '小于', - le: '小于或等于', - begin: '开头是', - notbegin: '开头不是', - endin: '结尾是', - notendin: '结尾不是', - include: '包含', - exclude: '不包含', - between: '介于', - custom: '自定义筛选', - insensitive: '不区分大小写', - isSensitive: '区分大小写' + equal: 'gleich', + unequal: 'nicht gleich', + gt: 'größer als', + ge: 'größer oder gleich', + lt: 'weniger als', + le: 'kleiner oder gleich', + begin: 'Der Anfang ist', + notbegin: 'Nicht am Anfang', + endin: 'Das Ende ist', + notendin: 'Das Ende ist es nicht', + include: 'Enthalten', + exclude: 'Nicht im Lieferumfang enthalten', + between: 'zwischen', + custom: 'Benutzerdefinierter Filter', + insensitive: 'Nicht zwischen Groß- und Kleinschreibung unterscheiden', + isSensitive: 'Groß- und Kleinschreibung beachten' }, - empty: '(空白)', - notData: '无匹配项' + empty: '(leer)', + notData: 'Keine Übereinstimmung' } }, pro: { area: { - mergeErr: '无法对合并单元格进行该操作', - multiErr: '无法对多重选择区域进行该操作', - extendErr: '如果延伸的区域包含被合并的单元格,所有合并的单元格需大小相同', - pasteMultiErr: '无法粘贴,需要相同大小的复制的区域和粘贴的区域才能执行此操作' + mergeErr: 'Dieser Vorgang kann nicht für verbundene Zellen ausgeführt werden', + multiErr: 'Dieser Vorgang kann nicht für mehrere Auswahlbereiche ausgeführt werden', + extendErr: 'Wenn der erweiterte Bereich verbundene Zellen enthält, müssen alle zusammengeführten Zellen dieselbe Größe haben', + pasteMultiErr: 'Das Einfügen ist nicht möglich. Die kopierten und eingefügten Bereiche müssen dieselbe Größe haben, um diesen Vorgang ausführen zu können' }, fnr: { - title: '查找和替换', - findLabel: '查找', - replaceLabel: '替换', - findTitle: '查找内容:', - replaceTitle: '替换为:', + title: 'Suchen und ersetzen', + findLabel: 'Finden', + replaceLabel: 'ersetzen', + findTitle: 'Finden Sie was:', + replaceTitle: 'Ersetzen durch:', tabs: { - find: '查找', - replace: '替换' + find: 'Finden', + replace: 'ersetzen' }, filter: { - re: '正则表达式', - whole: '全词匹配', - sensitive: '区分大小写' + re: 'regulärer Ausdruck', + whole: 'Ganzwortübereinstimmung', + sensitive: 'Groß- und Kleinschreibung beachten' }, btns: { - findNext: '查找下一个', - findAll: '查找全部', - replace: '替换', - replaceAll: '替换全部', - cancel: '取消' + findNext: 'Weiter finden', + findAll: 'Finden Sie alle', + replace: 'ersetzen', + replaceAll: 'Alles ersetzen', + cancel: 'Stornieren' }, header: { seq: '#', - cell: '单元格', - value: '值' + cell: 'Zelle', + value: 'Wert' }, - empty: '(空值)', - reError: '无效的正则表达式', - recordCount: '已找到 {0} 个单元格', - notCell: '找不到匹配的单元格', - replaceSuccess: '成功替换 {0} 个单元格' + empty: '(Nullwert)', + reError: 'Ungültiger regulärer Ausdruck', + recordCount: '{0} Zellen gefunden', + notCell: 'Keine passende Zelle gefunden', + replaceSuccess: '{0} Zellen erfolgreich ersetzt' } }, renderer: { - search: '搜索', + search: 'suchen', cases: { - equal: '等于', - unequal: '不等于', - gt: '大于', - ge: '大于或等于', - lt: '小于', - le: '小于或等于', - begin: '开头是', - notbegin: '开头不是', - endin: '结尾是', - notendin: '结尾不是', - include: '包含', - exclude: '不包含', - between: '介于', - custom: '自定义筛选', - insensitive: '不区分大小写', - isSensitive: '区分大小写' + equal: 'gleich', + unequal: 'nicht gleich', + gt: 'größer als', + ge: 'größer oder gleich', + lt: 'weniger als', + le: 'kleiner oder gleich', + begin: 'Der Anfang ist', + notbegin: 'Nicht am Anfang', + endin: 'Das Ende ist', + notendin: 'Das Ende ist es nicht', + include: 'Enthalten', + exclude: 'Nicht im Lieferumfang enthalten', + between: 'zwischen', + custom: 'Benutzerdefinierter Filter', + insensitive: 'Nicht zwischen Groß- und Kleinschreibung unterscheiden', + isSensitive: 'Groß- und Kleinschreibung beachten' }, combination: { menus: { - clearSort: '清除排序', - sortAsc: '升序', - sortDesc: '降序', - fixedColumn: '冻结列', - fixedGroup: '冻结分组', - cancelFixed: '取消冻结', - fixedLeft: '冻结到左侧', - fixedRight: '冻结到右侧', - clearFilter: '清除筛选', - textOption: '文本筛选', - numberOption: '数值筛选' + clearSort: 'Klare Sortierung', + sortAsc: 'Aufsteigende Reihenfolge', + sortDesc: 'absteigende Reihenfolge', + fixedColumn: 'Spalten einfrieren', + fixedGroup: 'Gruppe einfrieren', + cancelFixed: 'Auftauen', + fixedLeft: 'nach links einfrieren', + fixedRight: 'nach rechts einfrieren', + clearFilter: 'Filter löschen', + textOption: 'Textfilter', + numberOption: 'numerischer Filter' }, popup: { - title: '自定义筛选的方式', - currColumnTitle: '当前列:', - and: '与', - or: '或', - describeHtml: '可用 ? 代表单个字符
用 * 代表任意多个字符' + title: 'So passen Sie die Filterung an', + currColumnTitle: 'Aktuelle Spalte:', + and: 'Und', + or: 'oder', + describeHtml: 'Verfügbar ? steht für ein einzelnes Zeichen
Verwenden Sie *, um eine beliebige Anzahl von Zeichen darzustellen' }, - empty: '(空白)', - notData: '无匹配项' + empty: '(leer)', + notData: 'Keine Übereinstimmung' } } } diff --git a/packages/locale/lang/en-US.ts b/packages/locale/lang/en-US.ts index 7b1da5bddb..d7ad21323e 100644 --- a/packages/locale/lang/en-US.ts +++ b/packages/locale/lang/en-US.ts @@ -1,234 +1,234 @@ export default { vxe: { base: { - pleaseInput: 'Please input', - pleaseSelect: 'Select', - comma: ',', - fullStop: '.' + pleaseInput: 'Please enter', + pleaseSelect: 'Please select', + comma: ',', + fullStop: '。' }, loading: { - text: 'Loading...' + text: 'loading...' }, error: { - downErr: 'Download failed.', - groupFixed: 'If you use group headers, the freeze columns must be set by group.', - groupMouseRange: 'Grouping headers and "{0}" cannot be used at the same time, which may cause errors.', - groupTag: 'Grouping column header should use "{0}" instead of "{1}", which may cause errors.', - scrollErrProp: 'The parameter "{0}" is not supported when virtual scrolling is enabled.', - errConflicts: 'Argument "{0}" conflicts with "{1}"', - unableInsert: 'Unable to insert to the specified location.', - useErr: 'Error installing "{0}" module, possibly in the wrong order, dependent modules need to be installed before Table.', - barUnableLink: 'Toolbar cannot associate table.', - expandContent: 'Expand row slot should be "content", please check if it is correct.', - reqComp: 'Require "{0}" component, check whether the install is correct. https://vxeui.com/#/start/useGlobal', - reqModule: 'require "{0}" module.', - reqProp: 'Missing the necessary "{0}" parameter, which can cause error.', - emptyProp: 'The property "{0}" is not allowed to be empty.', - errProp: 'Unsupported parameter "{0}", possibly "{1}".', - colRepet: 'column.{0}="{0}" is duplicated, which may make some features unusable', - notFunc: 'method "{0}" not exist.', - errFunc: 'The argument "{0}" is not a method', - notValidators: 'Global validators "{0}" no existe.', - notFormats: 'Global formats "{0}" no existe.', - notCommands: 'Global commands "{0}" no existe.', - notSlot: 'slot "{0}" does not exist', - noTree: 'The tree structure does not support "{0}".', - notProp: 'Unsupported parameters "{0}"', - checkProp: 'The checkbox may stall when the amount of data is too large, it is recommended to set the parameter "{0}" to increase the rendering speed ', - coverProp: 'The parameter "{1}" to "{0}" is repeatedly defined. This may cause an error.', - uniField: 'The field "{0}" is repeatedly defined, which may cause an error.', - repeatKey: 'The primary key repeats {0}="{1}", which may cause an error', - delFunc: 'The function "{0}" is deprecated, please use "{1}".', - delProp: 'The property "{0}" is deprecated, please use "{1}".', - delEvent: 'The event "{0}" is deprecated, please use "{1}"', - removeProp: 'The property "{0}" is deprecated and is not recommended, which may cause error.', - errFormat: 'The global formatted content should be defined with "VXETable.formats". Mounting "formatter={0}" is not recommended.', - notType: 'Unsupported file types "{0}"', - notExp: 'The browser does not support import / export.', - impFields: 'Import failed, please check that the field name and data format are correct.', - treeNotImp: 'Tree table does not support import.', - treeCrossDrag: 'Only drag and drop the first level', - treeDragChild: 'The parent cannot be dragged into its own child', - reqPlugin: 'Optional extensions "{1}" https://vxeui.com/other{0}/#/{1}/install' + downErr: 'Download failed', + groupFixed: 'If using group headers, frozen columns must be set by group', + groupMouseRange: 'The group header and "{0}" cannot be used at the same time, which may cause an error.', + groupTag: 'Grouping column headers should use "{0}" instead of "{1}", which may cause errors', + scrollErrProp: 'The parameter "{0}" is not supported when virtual scrolling is enabled', + errConflicts: 'Parameters "{0}" conflict with "{1}"', + unableInsert: 'Unable to insert into the specified position, please check whether the parameters are correct', + useErr: 'An error occurred while installing the "{0}" module. The order may be incorrect. The dependent modules need to be installed before Table.', + barUnableLink: 'The toolbar cannot be associated with the table', + expandContent: 'The slot to expand the row should be "content", please check if it is correct', + reqComp: 'The "{0}" component is missing, please check if it is installed correctly. https://vxeui.com/#/start/useGlobal', + reqModule: 'Missing module "{0}"', + reqProp: 'The required "{0}" parameter is missing, which may result in an error', + emptyProp: 'Parameter "{0}" is not allowed to be empty', + errProp: 'Unsupported parameter "{0}", possible "{1}"', + colRepet: 'column.{0}="{1}" is repeated, which may cause some functions to become unusable', + notFunc: 'Method "{0}" does not exist', + errFunc: 'Parameter "{0}" is not a method', + notValidators: 'Global check "{0}" does not exist', + notFormats: 'Global format "{0}" does not exist', + notCommands: 'Global directive "{0}" does not exist', + notSlot: 'Slot "{0}" does not exist', + noTree: 'The tree structure does not support "{0}"', + notProp: 'Unsupported parameter "{0}"', + checkProp: 'When the amount of data is too large, it may cause the check box to freeze. It is recommended to set the parameter "{0}" to improve the rendering speed.', + coverProp: 'The parameter "{1}" of "{0}" is defined repeatedly, which may cause an error.', + uniField: 'Field name "{0}" is defined repeatedly, which may cause an error', + repeatKey: 'Duplicate primary key {0}="{1}", this may cause an error', + delFunc: 'Method "{0}" is deprecated, please use "{1}"', + delProp: 'Parameter "{0}" is obsolete, please use "{1}"', + delEvent: 'Event "{0}" is deprecated, please use "{1}"', + removeProp: 'Parameter "{0}" is deprecated and is not recommended and may result in errors', + errFormat: 'Global formatting content should be defined using "VXETable.formats". The method of mounting "formatter={0}" is no longer recommended.', + notType: 'Unsupported file type "{0}"', + notExp: 'This browser does not support import/export functionality', + impFields: 'Import failed, please check whether the field name and data format are correct', + treeNotImp: 'Tree tables do not support importing', + treeCrossDrag: 'Only the first level can be dragged', + treeDragChild: 'A parent cannot be dragged into its own children', + reqPlugin: 'Optional extension "{1}" https://vxeui.com/other{0}/#/{1}/install' }, table: { - emptyText: 'No Data', - allTitle: 'Select all / cancel', - seqTitle: 'N/S', - actionTitle: 'Action', - confirmFilter: 'Confirm', - resetFilter: 'Reset', - allFilter: 'All', - sortAsc: 'Ascending: lowest to highest', - sortDesc: 'Descending: highest to lowest', + emptyText: 'No data yet', + allTitle: 'Select all/Cancel', + seqTitle: 'serial number', + actionTitle: 'operate', + confirmFilter: 'filter', + resetFilter: 'reset', + allFilter: 'all', + sortAsc: 'Ascending order: lowest to highest', + sortDesc: 'Descending order: highest to lowest', filter: 'Enable filtering on selected columns', impSuccess: 'Successfully imported {0} records', expLoading: 'Exporting', - expSuccess: 'Export success', - expError: 'Export failure', + expSuccess: 'Export successful', + expError: 'Export failed', expFilename: 'Export_{0}', - expOriginFilename: 'Export_original_{0}', + expOriginFilename: 'export_source_{0}', customTitle: 'Column settings', - customAll: 'All', - customConfirm: 'Confirm', - customClose: 'Close', + customAll: 'all', + customConfirm: 'confirm', + customClose: 'closure', customCancel: 'Cancel', - customRestore: 'Restore', - maxFixedCol: 'The maximum number of Freeze columns cannot exceed {0}', - dragTip: 'Moving: {0}' + customRestore: 'Restore default', + maxFixedCol: 'The maximum number of frozen columns cannot exceed {0}', + dragTip: 'Move: {0}' }, grid: { - selectOneRecord: 'Please choose at least one piece of record!', - deleteSelectRecord: 'Are you sure you want to delete the selected record?', - removeSelectRecord: 'Are you sure you want to remove the selected record?', - dataUnchanged: 'Data unchanged! ', - delSuccess: 'Successfully deleted the selected record!', + selectOneRecord: 'Please select at least one record!', + deleteSelectRecord: 'Are you sure you want to delete the selected records?', + removeSelectRecord: 'Are you sure you want to remove the selected records?', + dataUnchanged: 'The data has not been changed!', + delSuccess: 'Selected records successfully deleted!', saveSuccess: 'Saved successfully!', - operError: 'Error occurred, operation failed!' + operError: 'An error occurred and the operation failed!' }, select: { - search: 'Search', - loadingText: 'Loading', - emptyText: 'No Data' + search: 'search', + loadingText: 'loading', + emptyText: 'No data yet' }, pager: { goto: 'Go to', - gotoTitle: 'Number', - pagesize: '{0}/page', + gotoTitle: 'Number of pages', + pagesize: '{0} items/page', total: 'Total {0} records', - pageClassifier: '', - homePage: 'Home', - homePageTitle: 'Home page', + pageClassifier: 'Page', + homePage: 'front page', + homePageTitle: 'front page', prevPage: 'Previous page', prevPageTitle: 'Previous page', - nextPage: 'next page', - nextPageTitle: 'next page', - prevJump: 'Jump previous page', - prevJumpTitle: 'Jump previous page', - nextJump: 'Jump next page', - nextJumpTitle: 'Jump next page', - endPage: 'End page', - endPageTitle: 'End' + nextPage: 'Next page', + nextPageTitle: 'Next page', + prevJump: 'Jump page up', + prevJumpTitle: 'Jump page up', + nextJump: 'Jump page down', + nextJumpTitle: 'Jump page down', + endPage: 'Last page', + endPageTitle: 'Last page' }, alert: { - title: 'System messages' + title: 'System prompt' }, button: { - confirm: 'Confirm', + confirm: 'confirm', cancel: 'Cancel' }, filter: { - search: '搜索' + search: 'search' }, custom: { - cstmTitle: 'Column Settings', + cstmTitle: 'Column settings', cstmRestore: 'Restore default', - cstmCancel: 'Cancelar', - cstmConfirm: 'Confirm', - cstmConfirmRestore: 'Please confirm whether to restore the default column configuration?', - cstmDragTarget: 'Moving: {0}', + cstmCancel: 'Cancel', + cstmConfirm: 'Sure', + cstmConfirmRestore: 'Please confirm whether to restore to the default column configuration?', + cstmDragTarget: 'Move: {0}', setting: { - colSort: 'Sort', - sortHelpTip: 'Click and drag the icon to adjust the order of the columns.', - colTitle: 'Column title', - colResizable: 'Column width (px)', - colVisible: 'Display', + colSort: 'sort', + sortHelpTip: 'Click and drag the icon to adjust column ordering', + colTitle: 'Column header', + colResizable: 'Column width (pixels)', + colVisible: 'Whether to display', colFixed: 'Freeze columns', - colFixedMax: 'Freeze columns (Max. {0})', - fixedLeft: 'Left', - fixedUnset: 'Unset', - fixedRight: 'Right' + colFixedMax: 'Freeze columns (up to {0} columns)', + fixedLeft: 'left side', + fixedUnset: 'Not set', + fixedRight: 'right side' } }, import: { modes: { - covering: 'Overwrite mode (directly overwrite table data)', - insert: 'Bottom append (appends new data to the bottom of the table)', - insertTop: 'Top append (appends new data to the top of the table)', - insertBottom: 'Bottom append (appends new data to the bottom of the table)' + covering: 'Overwriting method (directly overwrite table data)', + insert: 'Append at the bottom (append new data at the bottom of the table)', + insertTop: 'Top append (append new data at the top of the table)', + insertBottom: 'Append at the bottom (append new data at the bottom of the table)' }, impTitle: 'Import data', - impFile: 'Filename', + impFile: 'file name', impSelect: 'Select file', impType: 'File type', - impOpts: 'Settings', - impMode: 'Import mode', - impConfirm: 'Import', + impOpts: 'Parameter settings', + impMode: 'import mode', + impConfirm: 'import', impCancel: 'Cancel' }, export: { types: { - csv: 'CSV (Comma separated) (*.csv)', - html: 'Web Page (*.html)', - xml: 'XML Data(*.xml)', - txt: 'Text (Tab delimited) (*.txt)', - xls: 'Excel 97-2003 Workbook(*.xls)', - xlsx: 'Excel Workbook (*.xlsx)', + csv: 'CSV (comma separated)(*.csv)', + html: 'Web page (*.html)', + xml: 'XML data (*.xml)', + txt: 'Text file (tab delimited) (*.txt)', + xls: 'Excel 97-2003 workbook (*.xls)', + xlsx: 'Excel workbook (*.xlsx)', pdf: 'PDF (*.pdf)' }, modes: { - current: 'Current data (data of current page)', - selected: 'Selected data (data selected on the current page)', - all: 'Full data (including all paging data)' + current: 'Current data (data of the current page)', + selected: 'Selected data (selected data on the current page)', + all: 'Full data (including all paginated data)' }, printTitle: 'Print data', expTitle: 'Export data', - expName: 'Filename', - expNamePlaceholder: 'Please enter filename', - expSheetName: 'Title', + expName: 'file name', + expNamePlaceholder: 'Please enter a file name', + expSheetName: 'title', expSheetNamePlaceholder: 'Please enter a title', - expType: 'Save the type', + expType: 'save type', expMode: 'Select data', - expCurrentColumn: 'All the field', + expCurrentColumn: 'All fields', expColumn: 'Select field', - expOpts: 'Settings', + expOpts: 'Parameter settings', expOptHeader: 'Header', - expHeaderTitle: 'Do I need a header', - expOptFooter: 'Footer', - expFooterTitle: 'Do you need the footer table', + expHeaderTitle: 'Is a header required?', + expOptFooter: 'end of table', + expFooterTitle: 'Is a table footer required?', expOptColgroup: 'Group header', - expColgroupTitle: 'If it exists, headers with grouping structure are supported', - expOptMerge: 'Merge', - expMergeTitle: 'If it exists, cells with merged structures are supported', - expOptAllExpand: 'Expand nodes', - expAllExpandTitle: 'If it exists, all data with tree structure can be expanded', - expOptUseStyle: 'Styles', - expUseStyleTitle: 'If it exists, cells with styles are supported', - expOptOriginal: 'Source data', - expOriginalTitle: 'If it is source data, import into the table is supported', + expColgroupTitle: 'If present, headers with grouping structures are supported', + expOptMerge: 'merge', + expMergeTitle: 'Supports cells with merge structures if present', + expOptAllExpand: 'Expand level', + expAllExpandTitle: 'If it exists, it supports expanding all data with hierarchical structure.', + expOptUseStyle: 'style', + expUseStyleTitle: 'Styled cells are supported if present', + expOptOriginal: 'source data', + expOriginalTitle: 'If it is source data, it supports importing into the table', expPrint: 'Print', expConfirm: 'Export', expCancel: 'Cancel' }, modal: { - errTitle: 'Error', - zoomMin: 'Minimize', - zoomIn: 'Maximize', - zoomOut: 'Reduction', - close: 'Close', - miniMaxSize: 'The number of minimized Windows cannot exceed {0}.', - footPropErr: '"show-footer" is only used to enable table tails and needs to be used in conjunction with "show-confirm-button" | "show-cancel-button" | slots' + errTitle: 'Error message', + zoomMin: 'minimize', + zoomIn: 'maximize', + zoomOut: 'reduction', + close: 'closure', + miniMaxSize: 'The number of minimized windows cannot exceed {0}', + footPropErr: 'show-footer is only used to enable table footer and needs to be used with show-confirm-button | show-cancel-button | slot' }, drawer: { - close: 'Close' + close: 'closure' }, form: { - folding: 'Folding', - unfolding: 'Unfolding' + folding: 'close', + unfolding: 'Expand' }, toolbar: { - import: 'Import', + import: 'import', export: 'Export', - print: 'Printing', - refresh: 'Refresh', - zoomIn: 'Full screen', - zoomOut: 'Reduction', + print: 'Print', + refresh: 'refresh', + zoomIn: 'full screen', + zoomOut: 'reduction', custom: 'Column settings', - customAll: 'All', - customConfirm: 'Confirm', - customRestore: 'Reset', - fixedLeft: 'Freeze on the left', - fixedRight: 'Freeze on the right', + customAll: 'all', + customConfirm: 'confirm', + customRestore: 'reset', + fixedLeft: 'frozen on left', + fixedRight: 'frozen on right', cancelFixed: 'Unfreeze column' }, input: { @@ -238,455 +238,455 @@ export default { m3: 'March', m4: 'April', m5: 'May', - m6: 'June', + m6: 'June 06', m7: 'July', m8: 'August', m9: 'September', m10: 'October', m11: 'November', m12: 'December', - quarterLabel: '{0}', - monthLabel: '{0}', - dayLabel: '{1} {0}', + quarterLabel: '{0} years', + monthLabel: '{0} years', + dayLabel: '{0} year {1}', labelFormat: { - date: 'dd/MM/yyyy', + date: 'yyyy-MM-dd', time: 'HH:mm:ss', datetime: 'yyyy-MM-dd HH:mm:ss', - week: '[Week] WW, yyyy', - month: 'MM/yyyy', - quarter: '[Quarter] q, yyyy', + week: 'Week WW of year yyyy', + month: 'yyyy-MM', + quarter: 'quarter q of year yyyy', year: 'yyyy' }, weeks: { - w: 'Week', - w0: 'Sun', - w1: 'Mon', - w2: 'Tue', - w3: 'Wed', - w4: 'Thu', - w5: 'Fri', - w6: 'Sat' + w: 'week', + w0: 'Sunday', + w1: 'on Monday', + w2: 'Tuesday', + w3: 'Wednesday', + w4: 'Thursday', + w5: 'Friday', + w6: 'Saturday' }, months: { - m0: 'Jan', - m1: 'Feb', - m2: 'Mar', - m3: 'Apr', + m0: 'January', + m1: 'February', + m2: 'March', + m3: 'April', m4: 'May', - m5: 'Jun', - m6: 'Jul', - m7: 'Aug', - m8: 'Sep', - m9: 'Oct', - m10: 'Nov', - m11: 'Dec' + m5: 'June', + m6: 'July', + m7: 'August', + m8: 'September', + m9: 'October', + m10: 'November', + m11: 'December' }, quarters: { - q1: 'First quarter', - q2: 'Second quarter', - q3: 'Third quarter', - q4: 'Fourth quarter' + q1: 'first quarter', + q2: 'second quarter', + q3: 'third quarter', + q4: 'fourth quarter' } } }, numberInput: { - currencySymbol: '$' + currencySymbol: '¥' }, imagePreview: { popupTitle: 'Preview', operBtn: { - zoomOut: 'Reduce', - zoomIn: 'Enlarge', - pctFull: 'Proportional scaling', + zoomOut: 'zoom out', + zoomIn: 'enlarge', + pctFull: 'proportional scaling', pct11: 'Show original size', rotateLeft: 'Rotate left', rotateRight: 'Rotate right', - print: 'Click to print', - download: 'Click to download' + print: 'Click to print picture', + download: 'Click to download image' } }, upload: { - fileBtnText: 'Click or drag', - imgBtnText: 'Click or drag', - dragPlaceholder: 'Please drag and drop the file into this area to upload it.', - imgSizeHint: 'Single {0}', - imgCountHint: 'Up to {0}', - fileTypeHint: 'Support {0} file types', - fileSizeHint: 'Single file size does not exceed {0}', - fileCountHint: 'Up to {0} file can be uploaded', - uploadTypeErr: 'File type does not match!', - overCountErr: 'You can only choose {0} file!', - overCountExtraErr: 'It has exceeded the maximum number {0}, and more than {0} file will be ignored!超出最大数量 1 个,超出的 1 个文件将被忽略!', - overSizeErr: 'The size of the file is not more than {0}}!', - reUpload: 'Re upload', + fileBtnText: 'Click or drag to upload', + imgBtnText: 'Click or drag to upload', + dragPlaceholder: 'Please drag and drop the file into this area to upload it', + imgSizeHint: 'Leaflet {0}', + imgCountHint: 'Maximum {0} pictures', + fileTypeHint: 'Supported {0} file types', + fileSizeHint: 'The size of a single file does not exceed {0}', + fileCountHint: 'Up to {0} files can be uploaded', + uploadTypeErr: 'File type mismatch!', + overCountErr: 'Only {0} files can be selected!', + overCountExtraErr: 'The maximum number of {0} files has been exceeded. The excess {1} files will be ignored!', + overSizeErr: 'The maximum file size cannot exceed {0}!', + reUpload: 'Reupload', uploadProgress: 'Uploading {0}%', - uploadErr: 'Fail to upload', - uploadSuccess: 'Successfully upload', + uploadErr: 'Upload failed', + uploadSuccess: 'Upload successful', moreBtnText: 'More ({0})', - viewItemTitle: 'click to view', + viewItemTitle: 'Click to view', morePopup: { - readTitle: 'List', - imageTitle: 'Upload image', - fileTitle: 'Upload file' + readTitle: 'View list', + imageTitle: 'Upload pictures', + fileTitle: 'Upload files' } }, empty: { - defText: 'No Data' + defText: 'No data yet' }, colorPicker: { clear: 'Clear', - confirm: 'Confirm', + confirm: 'confirm', copySuccess: 'Copied to clipboard: {0}' }, formDesign: { - formName: 'Form name', - defFormTitle: 'Unnamed form', - widgetPropTab: 'Field property', - widgetFormTab: 'Form property', + formName: 'form name', + defFormTitle: 'unnamed form', + widgetPropTab: 'Control properties', + widgetFormTab: 'form properties', error: { - wdFormUni: 'Only one control of this type is allowed to be added to the form.', - wdSubUni: 'Only one control of this type is allowed to be added to a sub table.' + wdFormUni: 'Only one control of this type is allowed to be added to the form', + wdSubUni: 'Only one control of this type is allowed to be added to the subtable' }, styleSetting: { - btn: 'Style setting', - title: 'Form style setting', - layoutTitle: 'Field layout', - verticalLayout: 'Vertical layout', + btn: 'Style settings', + title: 'Form style settings', + layoutTitle: 'Control layout', + verticalLayout: 'Top and bottom layout', horizontalLayout: 'Horizontal layout', styleTitle: 'Title style', - boldTitle: 'Bold title', + boldTitle: 'Title bold', fontBold: 'Bold', - fontNormal: 'Normal', - colonTitle: 'Display colon', - colonVisible: 'Visible', - colonHidden: 'Hidden', - alignTitle: 'Title align', - widthTitle: 'Title width', - alignLeft: 'Left', - alignRight: 'Right', - unitPx: 'Px', - unitPct: 'Pct' + fontNormal: 'conventional', + colonTitle: 'Show colon', + colonVisible: 'show', + colonHidden: 'hide', + alignTitle: 'Alignment', + widthTitle: 'title width', + alignLeft: 'On the left', + alignRight: 'On the right', + unitPx: 'Pixel', + unitPct: 'percentage' }, widget: { group: { - base: 'Base control', - layout: 'Layout control', - system: 'System control', - module: 'Module control', - chart: 'Chart control', - advanced: 'Advanced control' + base: 'Basic controls', + layout: 'Layout controls', + system: 'System controls', + module: 'module control', + chart: 'chart control', + advanced: 'Advanced controls' }, copyTitle: 'Copy_{0}', component: { - input: 'Input', - textarea: 'Textarea', - select: 'Select', - row: 'Row/column', - title: 'Title', - text: 'Text', + input: 'Input box', + textarea: 'text field', + select: 'drop down selection', + row: 'One row and multiple columns', + title: 'title', + text: 'text', subtable: 'Subtable', - VxeSwitch: 'Yes/no', - VxeInput: 'Input', - VxeNumberInput: 'Number', - VxeDatePicker: 'Date', - VxeTextarea: 'Textarea', - VxeSelect: 'Select', - VxeTreeSelect: 'Tree select', - VxeRadioGroup: 'Radio', - VxeCheckboxGroup: 'Checkbox', - VxeUploadFile: 'File', - VxeUploadImage: 'Image', - VxeRate: 'Rate', - VxeSlider: 'Slider' + VxeSwitch: 'whether', + VxeInput: 'Input box', + VxeNumberInput: 'number', + VxeDatePicker: 'date', + VxeTextarea: 'text field', + VxeSelect: 'drop down selection', + VxeTreeSelect: 'tree selection', + VxeRadioGroup: 'radio button', + VxeCheckboxGroup: 'checkbox', + VxeUploadFile: 'document', + VxeUploadImage: 'picture', + VxeRate: 'score', + VxeSlider: 'slider' } }, widgetProp: { - name: 'Field name', - placeholder: 'Field placeholder', - required: 'Required', - multiple: 'Allow to select multiple', + name: 'Control name', + placeholder: 'prompt', + required: 'Required verification', + multiple: 'Allow multiple selections', displaySetting: { - name: 'Display setting', + name: 'display settings', pc: 'PC', - mobile: 'Mobile', - visible: 'Visible', - hidden: 'Hidden' + mobile: 'Mobile version', + visible: 'show', + hidden: 'hide' }, dataSource: { - name: 'Data source', + name: 'data source', defValue: 'Option {0}', - addOption: 'Add option', - batchEditOption: 'Batch edit', - batchEditTip: 'Each row corresponds to an option, supporting direct copying and pasting from tables, Excel, and WPS.', - batchEditSubTip: 'Each row corresponds to an option. If grouped, the sub items can start with spaces or tab keys, and can be directly copied and pasted from tables, Excel, or WPS.', - buildOption: 'Build option' + addOption: 'Add options', + batchEditOption: 'Batch editing', + batchEditTip: 'Each row corresponds to an option, and supports copying and pasting directly from tables, Excel, and WPS.', + batchEditSubTip: 'Each row corresponds to an option. If it is a group, the sub-items can start with a space or a tab key. Direct copy and paste from tables, Excel, and WPS is supported.', + buildOption: 'Build options' }, rowProp: { colSize: 'Number of columns', - col2: 'Two columns', - col3: 'Three columns', - col4: 'Four columns', - col6: 'Six columns', - layout: 'Layout' + col2: 'two columns', + col3: 'three columns', + col4: 'four columns', + col6: 'six columns', + layout: 'layout' }, textProp: { - name: 'Content', - alignTitle: 'Align', - alignLeft: 'Left', - alignCenter: 'Center', - alignRight: 'Right', - colorTitle: 'Color', - sizeTitle: 'Font size', - boldTitle: 'Font bold', - fontNormal: 'Normal', + name: 'content', + alignTitle: 'Alignment', + alignLeft: 'On the left', + alignCenter: 'center', + alignRight: 'On the right', + colorTitle: 'Font color', + sizeTitle: 'font size', + boldTitle: 'Bold font', + fontNormal: 'conventional', fontBold: 'Bold' }, subtableProp: { - seqTitle: 'S/N', + seqTitle: 'serial number', showSeq: 'Display serial number', showCheckbox: 'Allow multiple selections', - errSubDrag: 'The sub table does not support this control. Please use another control.', - colPlace: 'Drag the control in.' + errSubDrag: 'The subtable does not support this control, please use other controls', + colPlace: 'Drag the control in' }, uploadProp: { - limitFileCount: 'File quantity limitation', - limitFileSize: 'File size limitation', - multiFile: 'Allows multiple files', - limitImgCount: 'Image quantity limitation', - limitImgSize: 'Image size limitation', - multiImg: 'Allows multiple images' + limitFileCount: 'File quantity limit', + limitFileSize: 'File size limit', + multiFile: 'Allow multiple file uploads', + limitImgCount: 'Picture quantity limit', + limitImgSize: 'Image size limit', + multiImg: 'Allow multiple images to be uploaded' } } }, listDesign: { - fieldSettingTab: 'Field', - listSettingTab: 'Parameter', - searchTitle: 'Search', - listTitle: 'List', - searchField: 'Search field', - listField: 'List field', + fieldSettingTab: 'Field settings', + listSettingTab: 'Parameter settings', + searchTitle: 'Query conditions', + listTitle: 'list field', + searchField: 'Query field', + listField: 'list field', activeBtn: { - ActionButtonUpdate: 'Edit', - ActionButtonDelete: 'Delete' + ActionButtonUpdate: 'edit', + ActionButtonDelete: 'delete' }, search: { - addBtn: 'Edit', - emptyText: 'No filter condition is configured.', - editPopupTitle: 'Edit search fields' + addBtn: 'edit', + emptyText: 'No query conditions configured', + editPopupTitle: 'Edit query fields' }, searchPopup: { - colTitle: 'Title', - saveBtn: 'Save' + colTitle: 'title', + saveBtn: 'save' } }, text: { - copySuccess: 'Successfully copied to clipboard.', - copyError: 'The current environment does not support this operation.' + copySuccess: 'Copied to clipboard', + copyError: 'The current environment does not support this operation' }, countdown: { formats: { yyyy: 'Year', - MM: 'Moon', - dd: 'Day', - HH: 'Hour', - mm: 'Minute', + MM: 'moon', + dd: 'sky', + HH: 'hour', + mm: 'point', ss: 'Second' } }, plugins: { extendCellArea: { area: { - mergeErr: 'The operation cannot be performed on merged cells', - multiErr: 'The operation cannot be performed on multiple selection areas', - selectErr: 'Unable to operate the cells in the designated area.', - extendErr: 'If the extended area contains merged cells, all merged cells need to be the same size', - pasteMultiErr: 'Cannot paste, copied area and pasted area of the same size are required to perform this operation', - cpInvalidErr: 'This operation cannot be performed because there are prohibited columns in the area you selected ({0})' + mergeErr: 'This operation cannot be performed on merged cells', + multiErr: 'This operation cannot be performed on multiple selection areas', + selectErr: 'Unable to operate on cells in the specified range', + extendErr: 'If the extended range contains merged cells, all merged cells must be the same size', + pasteMultiErr: 'Unable to paste, the copied and pasted areas need to be of the same size to perform this operation', + cpInvalidErr: 'The operation cannot be performed. There are prohibited columns ({0}) in the range you selected.' }, fnr: { title: 'Find and replace', findLabel: 'Find', - replaceLabel: 'Replace', - findTitle: 'What to find:', + replaceLabel: 'replace', + findTitle: 'Find what:', replaceTitle: 'Replace with:', tabs: { find: 'Find', - replace: 'Replace' + replace: 'replace' }, filter: { - re: 'Regular Expression', - whole: 'Whole word', - sensitive: 'Case sensitive' + re: 'regular expression', + whole: 'whole word match', + sensitive: 'case sensitive' }, btns: { findNext: 'Find next', findAll: 'Find all', - replace: 'Replace', + replace: 'replace', replaceAll: 'Replace all', cancel: 'Cancel' }, header: { seq: '#', - cell: 'Cell', - value: 'Value' + cell: 'cell', + value: 'value' }, body: { - row: '行:{0}', - col: '列:{0}' + row: 'Row: {0}', + col: 'Column: {0}' }, - empty: '(Empty)', + empty: '(null value)', reError: 'Invalid regular expression', - recordCount: 'Found {0} cells', - notCell: 'No matching cells were found', + recordCount: '{0} cells found', + notCell: 'No matching cell found', replaceSuccess: 'Successfully replaced {0} cells' } }, filterComplexInput: { menus: { - fixedColumn: 'Freeze column', - fixedGroup: 'Freeze group', - cancelFixed: 'Clear freeze', - fixedLeft: 'Freeze the left', - fixedRight: 'Freeze the right' + fixedColumn: 'Freeze columns', + fixedGroup: 'freeze group', + cancelFixed: 'Unfreeze', + fixedLeft: 'freeze left', + fixedRight: 'freeze right' }, cases: { - equal: 'Equal', - gt: 'Greater than', - lt: 'Less than', - begin: 'Beginning is', - endin: 'End is', + equal: 'equal', + gt: 'greater than', + lt: 'less than', + begin: 'The beginning is', + endin: 'The end is', include: 'Include', - isSensitive: 'Case sensitive' + isSensitive: 'case sensitive' } }, filterCombination: { menus: { clearSort: 'Clear sort', sortAsc: 'Ascending order', - sortDesc: 'Descending order', - fixedColumn: 'Freeze column', - fixedGroup: 'Freeze group', - cancelFixed: 'Clear freeze', - fixedLeft: 'Freeze the left', - fixedRight: 'Freeze the right', - clearFilter: 'Clear filter', - textOption: 'Text filter', - numberOption: 'Number filter' + sortDesc: 'descending order', + fixedColumn: 'Freeze columns', + fixedGroup: 'freeze group', + cancelFixed: 'Unfreeze', + fixedLeft: 'freeze left', + fixedRight: 'freeze right', + clearFilter: 'Clear filters', + textOption: 'text filter', + numberOption: 'numerical filter' }, popup: { - title: 'Custom filtering', + title: 'How to customize filtering', currColumnTitle: 'Current column:', - and: 'And', - or: 'Or', - describeHtml: 'Use ? To represent a single character
use * to represent any number of characters' + and: 'and', + or: 'or', + describeHtml: 'Available ? represents a single character
Use * to represent any number of characters' }, cases: { - equal: 'Equal', - unequal: 'Not equal', - gt: 'Greater than', - ge: 'Greater than or equal', - lt: 'Less than', - le: 'Less than or equal', - begin: 'Beginning is', - notbegin: 'Beginning is not', - endin: 'End is', - notendin: 'End is not', + equal: 'equal', + unequal: 'not equal to', + gt: 'greater than', + ge: 'greater than or equal to', + lt: 'less than', + le: 'less than or equal to', + begin: 'The beginning is', + notbegin: 'Not at the beginning', + endin: 'The end is', + notendin: 'The ending is not', include: 'Include', - exclude: 'Exclusive', - between: 'Betweenness', + exclude: 'Not included', + between: 'between', custom: 'Custom filter', - insensitive: 'Case insensitive', - isSensitive: 'Case sensitive' + insensitive: 'Not case sensitive', + isSensitive: 'case sensitive' }, - empty: '(Empty)', - notData: 'No data' - } - }, - renderer: { - search: 'Search', - cases: { - equal: 'Equal', - unequal: 'Not equal', - gt: 'Greater than', - ge: 'Greater than or equal', - lt: 'Less than', - le: 'Less than or equal', - begin: 'Beginning is', - notbegin: 'Beginning is not', - endin: 'End is', - notendin: 'End is not', - include: 'Include', - exclude: 'Exclusive', - between: 'Betweenness', - custom: 'Custom filter', - insensitive: 'Case insensitive', - isSensitive: 'Case sensitive' - }, - combination: { - menus: { - clearSort: 'Clear sort', - sortAsc: 'Ascending order', - sortDesc: 'Descending order', - fixedColumn: 'Fixed column', - fixedGroup: 'Fixed group', - cancelFixed: 'Clear fixed', - fixedLeft: 'Fixed the left', - fixedRight: 'Fixed the right', - clearFilter: 'Clear filter', - textOption: 'Text filter', - numberOption: 'Number filter' - }, - popup: { - title: 'Custom filtering', - currColumnTitle: 'Current column:', - and: 'And', - or: 'Or', - describeHtml: 'Use ? To represent a single character
use * to represent any number of characters' - }, - empty: '(Empty)', - notData: 'No data' + empty: '(blank)', + notData: 'No match' } }, pro: { area: { - mergeErr: 'The operation cannot be performed on merged cells', - multiErr: 'The operation cannot be performed on multiple selection areas', - extendErr: 'If the extended area contains merged cells, all merged cells need to be the same size', - pasteMultiErr: 'Cannot paste, copied area and pasted area of the same size are required to perform this operation' + mergeErr: 'This operation cannot be performed on merged cells', + multiErr: 'This operation cannot be performed on multiple selection areas', + extendErr: 'If the extended range contains merged cells, all merged cells must be the same size', + pasteMultiErr: 'Unable to paste, the copied and pasted areas need to be of the same size to perform this operation' }, fnr: { title: 'Find and replace', findLabel: 'Find', - replaceLabel: 'Replace', - findTitle: 'What to find:', + replaceLabel: 'replace', + findTitle: 'Find what:', replaceTitle: 'Replace with:', tabs: { find: 'Find', - replace: 'Replace' + replace: 'replace' }, filter: { - re: 'Regular Expression', - whole: 'Whole word', - sensitive: 'Case sensitive' + re: 'regular expression', + whole: 'whole word match', + sensitive: 'case sensitive' }, btns: { findNext: 'Find next', findAll: 'Find all', - replace: 'Replace', + replace: 'replace', replaceAll: 'Replace all', cancel: 'Cancel' }, header: { seq: '#', - cell: 'Cell', - value: 'Value' + cell: 'cell', + value: 'value' }, - empty: '(Empty)', + empty: '(null value)', reError: 'Invalid regular expression', - recordCount: 'Found {0} cells', - notCell: 'No matching cells were found', + recordCount: '{0} cells found', + notCell: 'No matching cell found', replaceSuccess: 'Successfully replaced {0} cells' } + }, + renderer: { + search: 'search', + cases: { + equal: 'equal', + unequal: 'not equal to', + gt: 'greater than', + ge: 'greater than or equal to', + lt: 'less than', + le: 'less than or equal to', + begin: 'The beginning is', + notbegin: 'Not at the beginning', + endin: 'The end is', + notendin: 'The ending is not', + include: 'Include', + exclude: 'Not included', + between: 'between', + custom: 'Custom filter', + insensitive: 'Not case sensitive', + isSensitive: 'case sensitive' + }, + combination: { + menus: { + clearSort: 'Clear sort', + sortAsc: 'Ascending order', + sortDesc: 'descending order', + fixedColumn: 'Freeze columns', + fixedGroup: 'freeze group', + cancelFixed: 'Unfreeze', + fixedLeft: 'freeze to left', + fixedRight: 'freeze to right', + clearFilter: 'Clear filters', + textOption: 'text filter', + numberOption: 'numerical filter' + }, + popup: { + title: 'How to customize filtering', + currColumnTitle: 'Current column:', + and: 'and', + or: 'or', + describeHtml: 'Available ? represents a single character
Use * to represent any number of characters' + }, + empty: '(blank)', + notData: 'No match' + } } } } diff --git a/packages/locale/lang/it-IT.ts b/packages/locale/lang/it-IT.ts new file mode 100644 index 0000000000..683405340e --- /dev/null +++ b/packages/locale/lang/it-IT.ts @@ -0,0 +1,692 @@ +export default { + vxe: { + base: { + pleaseInput: 'Per favore entra', + pleaseSelect: 'Seleziona', + comma: ',', + fullStop: '。' + }, + loading: { + text: 'caricamento...' + }, + error: { + downErr: 'Download non riuscito', + groupFixed: 'Se si utilizzano intestazioni di gruppo, le colonne bloccate devono essere impostate per gruppo', + groupMouseRange: "L'intestazione del gruppo e \"{0}\" non possono essere utilizzate contemporaneamente, il che potrebbe causare un errore.", + groupTag: 'Le intestazioni delle colonne di raggruppamento devono utilizzare "{0}" anziché "{1}", il che potrebbe causare errori', + scrollErrProp: 'Il parametro "{0}" non è supportato quando è abilitato lo scorrimento virtuale', + errConflicts: 'I parametri "{0}" sono in conflitto con "{1}"', + unableInsert: 'Impossibile inserire nella posizione specificata, verificare se i parametri sono corretti', + useErr: "Si è verificato un errore durante l'installazione del modulo \"{0}\". L'ordine potrebbe essere errato. I moduli dipendenti devono essere installati prima della Tabella.", + barUnableLink: 'La barra degli strumenti non può essere associata alla tabella', + expandContent: 'Lo spazio per espandere la riga dovrebbe essere "contenuto", controlla se è corretto', + reqComp: 'Manca il componente "{0}", controlla se è installato correttamente. https://vxeui.com/#/start/useGlobal', + reqModule: 'Modulo "{0}" mancante', + reqProp: 'Manca il parametro "{0}" richiesto, il che potrebbe causare un errore', + emptyProp: 'Il parametro "{0}" non può essere vuoto', + errProp: 'Parametro non supportato "{0}", possibile "{1}"', + colRepet: 'colonna.{0}="{1}" viene ripetuta, il che potrebbe rendere inutilizzabili alcune funzioni', + notFunc: 'Il metodo "{0}" non esiste', + errFunc: 'Il parametro "{0}" non è un metodo', + notValidators: 'Il controllo globale "{0}" non esiste', + notFormats: 'Il formato globale "{0}" non esiste', + notCommands: 'La direttiva globale "{0}" non esiste', + notSlot: 'Lo slot "{0}" non esiste', + noTree: 'La struttura ad albero non supporta "{0}"', + notProp: 'Parametro non supportato "{0}"', + checkProp: 'Quando la quantità di dati è troppo grande, la casella di controllo potrebbe bloccarsi. Si consiglia di impostare il parametro "{0}" per migliorare la velocità di rendering.', + coverProp: 'Il parametro "{1}" di "{0}" è definito ripetutamente, il che potrebbe causare un errore.', + uniField: 'Il nome del campo "{0}" è definito ripetutamente, il che potrebbe causare un errore', + repeatKey: 'Chiave primaria duplicata {0}="{1}", ciò potrebbe causare un errore', + delFunc: 'Il metodo "{0}" è obsoleto, utilizza "{1}"', + delProp: 'Il parametro "{0}" è obsoleto, utilizza "{1}"', + delEvent: "L'evento \"{0}\" è obsoleto, utilizza \"{1}\"", + removeProp: 'Il parametro "{0}" è obsoleto, non è consigliato e potrebbe causare errori', + errFormat: 'Il contenuto di formattazione globale deve essere definito utilizzando "VXETable.formats". Il metodo di montaggio "formatter={0}" non è più consigliato.', + notType: 'Tipo di file non supportato "{0}"', + notExp: 'Questo browser non supporta la funzionalità di importazione/esportazione', + impFields: 'Importazione non riuscita, controlla se il nome del campo e il formato dei dati sono corretti', + treeNotImp: "Le tabelle dell'albero non supportano l'importazione", + treeCrossDrag: 'È possibile trascinare solo il primo livello', + treeDragChild: 'Un genitore non può essere trascinato nei propri figli', + reqPlugin: 'Estensione facoltativa "{1}" https://vxeui.com/other{0}/#/{1}/install' + }, + table: { + emptyText: 'Nessun dato ancora', + allTitle: 'Seleziona tutto/Annulla', + seqTitle: 'numero di serie', + actionTitle: 'operare', + confirmFilter: 'filtro', + resetFilter: 'reset', + allFilter: 'Tutto', + sortAsc: 'Ordine crescente: dal più basso al più alto', + sortDesc: 'Ordine decrescente: dal più alto al più basso', + filter: 'Abilita il filtraggio sulle colonne selezionate', + impSuccess: '{0} record importati correttamente', + expLoading: 'Esportazione', + expSuccess: 'Esportazione riuscita', + expError: 'Esportazione non riuscita', + expFilename: 'Esporta_{0}', + expOriginFilename: 'export_source_{0}', + customTitle: 'Impostazioni della colonna', + customAll: 'Tutto', + customConfirm: 'confermare', + customClose: 'chiusura', + customCancel: 'Cancellare', + customRestore: 'Ripristina impostazione predefinita', + maxFixedCol: 'Il numero massimo di colonne bloccate non può superare {0}', + dragTip: 'Sposta: {0}' + }, + grid: { + selectOneRecord: 'Seleziona almeno un record!', + deleteSelectRecord: 'Sei sicuro di voler eliminare i record selezionati?', + removeSelectRecord: 'Sei sicuro di voler rimuovere i record selezionati?', + dataUnchanged: 'I dati non sono stati modificati!', + delSuccess: 'Record selezionati eliminati con successo!', + saveSuccess: 'Salvato con successo!', + operError: "Si è verificato un errore e l'operazione non è riuscita!" + }, + select: { + search: 'ricerca', + loadingText: 'caricamento', + emptyText: 'Nessun dato ancora' + }, + pager: { + goto: 'Vai a', + gotoTitle: 'Numero di pagine', + pagesize: '{0} elementi/pagina', + total: 'Totale {0} record', + pageClassifier: 'Pagina', + homePage: 'prima pagina', + homePageTitle: 'prima pagina', + prevPage: 'Pagina precedente', + prevPageTitle: 'Pagina precedente', + nextPage: 'Pagina successiva', + nextPageTitle: 'Pagina successiva', + prevJump: 'Salta la pagina in alto', + prevJumpTitle: 'Salta la pagina in alto', + nextJump: 'Salta la pagina verso il basso', + nextJumpTitle: 'Salta la pagina verso il basso', + endPage: 'Ultima pagina', + endPageTitle: 'Ultima pagina' + }, + alert: { + title: 'Richiesta di sistema' + }, + button: { + confirm: 'confermare', + cancel: 'Cancellare' + }, + filter: { + search: 'ricerca' + }, + custom: { + cstmTitle: 'Impostazioni della colonna', + cstmRestore: 'Ripristina impostazione predefinita', + cstmCancel: 'Cancellare', + cstmConfirm: 'Sicuro', + cstmConfirmRestore: 'Confermare se ripristinare la configurazione predefinita della colonna?', + cstmDragTarget: 'Sposta: {0}', + setting: { + colSort: 'ordinare', + sortHelpTip: "Fare clic e trascinare l'icona per regolare l'ordine delle colonne", + colTitle: 'Intestazione di colonna', + colResizable: 'Larghezza colonna (pixel)', + colVisible: 'Se visualizzare', + colFixed: 'Blocca colonne', + colFixedMax: 'Blocca colonne (fino a {0} colonne)', + fixedLeft: 'lato sinistro', + fixedUnset: 'Non impostato', + fixedRight: 'lato destro' + } + }, + import: { + modes: { + covering: 'Metodo di sovrascrittura (sovrascrivi direttamente i dati della tabella)', + insert: 'Aggiungi in fondo (aggiungi nuovi dati in fondo alla tabella)', + insertTop: 'Aggiungi in alto (aggiungi nuovi dati nella parte superiore della tabella)', + insertBottom: 'Aggiungi in fondo (aggiungi nuovi dati in fondo alla tabella)' + }, + impTitle: 'Importa dati', + impFile: 'nome del file', + impSelect: 'Seleziona file', + impType: 'Tipo di file', + impOpts: 'Impostazioni dei parametri', + impMode: 'modalità di importazione', + impConfirm: 'importare', + impCancel: 'Cancellare' + }, + export: { + types: { + csv: 'CSV (separati da virgole)(*.csv)', + html: 'Pagina Web (*.html)', + xml: 'Dati XML (*.xml)', + txt: 'File di testo (delimitato da tabulazioni) (*.txt)', + xls: 'Cartella di lavoro di Excel 97-2003 (*.xls)', + xlsx: 'Cartella di lavoro di Excel (*.xlsx)', + pdf: 'PDF (*.pdf)' + }, + modes: { + current: 'Dati attuali (dati della pagina corrente)', + selected: 'Dati selezionati (dati selezionati nella pagina corrente)', + all: 'Dati completi (compresi tutti i dati impaginati)' + }, + printTitle: 'Stampa dati', + expTitle: 'Esporta dati', + expName: 'nome del file', + expNamePlaceholder: 'Inserisci un nome file', + expSheetName: 'titolo', + expSheetNamePlaceholder: 'Inserisci un titolo', + expType: 'salva tipo', + expMode: 'Seleziona i dati', + expCurrentColumn: 'Tutti i campi', + expColumn: 'Seleziona campo', + expOpts: 'Impostazioni dei parametri', + expOptHeader: 'Intestazione', + expHeaderTitle: "È necessaria un'intestazione?", + expOptFooter: 'fine del tavolo', + expFooterTitle: 'È necessario un piè di pagina della tabella?', + expOptColgroup: 'Intestazione del gruppo', + expColgroupTitle: 'Se presenti, sono supportate intestazioni con strutture di raggruppamento', + expOptMerge: 'unire', + expMergeTitle: 'Supporta celle con strutture di unione, se presenti', + expOptAllExpand: 'Espandi il livello', + expAllExpandTitle: "Se esiste, supporta l'espansione di tutti i dati con una struttura gerarchica.", + expOptUseStyle: 'stile', + expUseStyleTitle: 'Le celle con stile sono supportate se presenti', + expOptOriginal: 'dati di origine', + expOriginalTitle: "Se si tratta di dati di origine, supporta l'importazione nella tabella", + expPrint: 'Stampa', + expConfirm: 'Esportare', + expCancel: 'Cancellare' + }, + modal: { + errTitle: 'Messaggio di errore', + zoomMin: 'minimizzare', + zoomIn: 'massimizzare', + zoomOut: 'riduzione', + close: 'chiusura', + miniMaxSize: 'Il numero di finestre ridotte a icona non può superare {0}', + footPropErr: 'show-footer viene utilizzato solo per abilitare il piè di pagina della tabella e deve essere utilizzato con lo slot show-confirm-button |' + }, + drawer: { + close: 'chiusura' + }, + form: { + folding: 'vicino', + unfolding: 'Espandere' + }, + toolbar: { + import: 'importare', + export: 'Esportare', + print: 'Stampa', + refresh: 'aggiornare', + zoomIn: 'a schermo intero', + zoomOut: 'riduzione', + custom: 'Impostazioni della colonna', + customAll: 'Tutto', + customConfirm: 'confermare', + customRestore: 'reset', + fixedLeft: 'congelato a sinistra', + fixedRight: 'congelato a destra', + cancelFixed: 'Sblocca colonna' + }, + input: { + date: { + m1: 'Gennaio', + m2: 'Febbraio', + m3: 'Marzo', + m4: 'aprile', + m5: 'Maggio', + m6: '06 giugno', + m7: 'Luglio', + m8: 'agosto', + m9: 'settembre', + m10: 'ottobre', + m11: 'novembre', + m12: 'Dicembre', + quarterLabel: '{0} anni', + monthLabel: '{0} anni', + dayLabel: '{0} anno {1}', + labelFormat: { + date: 'yyyy-MM-dd', + time: 'HH:mm:ss', + datetime: 'yyyy-MM-dd HH:mm:ss', + week: 'Week WW of year yyyy', + month: 'yyyy-MM', + quarter: 'quarter q of year yyyy', + year: 'yyyy' + }, + weeks: { + w: 'settimana', + w0: 'Domenica', + w1: 'di lunedi', + w2: 'Martedì', + w3: 'Mercoledì', + w4: 'Giovedì', + w5: 'Venerdì', + w6: 'Sabato' + }, + months: { + m0: 'Gennaio', + m1: 'Febbraio', + m2: 'Marzo', + m3: 'aprile', + m4: 'Maggio', + m5: 'Giugno', + m6: 'Luglio', + m7: 'agosto', + m8: 'settembre', + m9: 'ottobre', + m10: 'novembre', + m11: 'Dicembre' + }, + quarters: { + q1: 'primo trimestre', + q2: 'secondo trimestre', + q3: 'terzo trimestre', + q4: 'quarto trimestre' + } + } + }, + numberInput: { + currencySymbol: '¥' + }, + imagePreview: { + popupTitle: 'Anteprima', + operBtn: { + zoomOut: 'rimpicciolire', + zoomIn: 'ingrandire', + pctFull: 'ridimensionamento proporzionale', + pct11: 'Mostra la dimensione originale', + rotateLeft: 'Ruota a sinistra', + rotateRight: 'Ruota a destra', + print: "Fare clic per stampare l'immagine", + download: "Fare clic per scaricare l'immagine" + } + }, + upload: { + fileBtnText: 'Fare clic o trascinare per caricare', + imgBtnText: 'Fare clic o trascinare per caricare', + dragPlaceholder: "Trascina e rilascia il file in quest'area per caricarlo", + imgSizeHint: 'Volantino {0}', + imgCountHint: 'Massimo {0} immagini', + fileTypeHint: 'Tipi di file {0} supportati', + fileSizeHint: 'La dimensione di un singolo file non supera {0}', + fileCountHint: 'È possibile caricare fino a {0} file', + uploadTypeErr: 'Tipo di file non corrispondente!', + overCountErr: 'È possibile selezionare solo {0} file!', + overCountExtraErr: 'Il numero massimo di {0} file è stato superato. I {1} file in eccesso verranno ignorati!', + overSizeErr: 'La dimensione massima del file non può superare {0}!', + reUpload: 'Ricarica', + uploadProgress: 'Caricamento {0}%', + uploadErr: 'Caricamento non riuscito', + uploadSuccess: 'Caricamento riuscito', + moreBtnText: 'Altro ({0})', + viewItemTitle: 'Fare clic per visualizzare', + morePopup: { + readTitle: 'Visualizza elenco', + imageTitle: 'Carica immagini', + fileTitle: 'Carica file' + } + }, + empty: { + defText: 'Nessun dato ancora' + }, + colorPicker: { + clear: 'Chiaro', + confirm: 'confermare', + copySuccess: 'Copiato negli appunti: {0}' + }, + formDesign: { + formName: 'nome del modulo', + defFormTitle: 'forma senza nome', + widgetPropTab: 'Proprietà di controllo', + widgetFormTab: 'proprietà del modulo', + error: { + wdFormUni: 'È consentito aggiungere al modulo un solo controllo di questo tipo', + wdSubUni: 'È consentito aggiungere un solo controllo di questo tipo alla sottotabella' + }, + styleSetting: { + btn: 'Impostazioni di stile', + title: 'Impostazioni dello stile del modulo', + layoutTitle: 'Disposizione di controllo', + verticalLayout: 'Disposizione superiore e inferiore', + horizontalLayout: 'Disposizione orizzontale', + styleTitle: 'Stile del titolo', + boldTitle: 'Titolo in grassetto', + fontBold: 'Grassetto', + fontNormal: 'convenzionale', + colonTitle: 'Mostra due punti', + colonVisible: 'spettacolo', + colonHidden: 'nascondere', + alignTitle: 'Allineamento', + widthTitle: 'larghezza del titolo', + alignLeft: 'Sulla sinistra', + alignRight: 'A destra', + unitPx: 'Pixel', + unitPct: 'percentuale' + }, + widget: { + group: { + base: 'Controlli di base', + layout: 'Controlli del layout', + system: 'Controlli di sistema', + module: 'controllo del modulo', + chart: 'controllo grafico', + advanced: 'Controlli avanzati' + }, + copyTitle: 'Copia_{0}', + component: { + input: 'Casella di immissione', + textarea: 'campo di testo', + select: 'selezione a discesa', + row: 'Una riga e più colonne', + title: 'titolo', + text: 'testo', + subtable: 'Sottotabella', + VxeSwitch: 'se', + VxeInput: 'Casella di immissione', + VxeNumberInput: 'numero', + VxeDatePicker: 'data', + VxeTextarea: 'campo di testo', + VxeSelect: 'selezione a discesa', + VxeTreeSelect: "selezione dell'albero", + VxeRadioGroup: 'pulsante di opzione', + VxeCheckboxGroup: 'casella di controllo', + VxeUploadFile: 'documento', + VxeUploadImage: 'immagine', + VxeRate: 'punto', + VxeSlider: 'cursore' + } + }, + widgetProp: { + name: 'Nome del controllo', + placeholder: 'richiesta', + required: 'Verifica richiesta', + multiple: 'Consenti selezioni multiple', + displaySetting: { + name: 'impostazioni di visualizzazione', + pc: 'computer', + mobile: 'Versione mobile', + visible: 'spettacolo', + hidden: 'nascondere' + }, + dataSource: { + name: 'fonte dati', + defValue: 'Opzione {0}', + addOption: 'Aggiungi opzioni', + batchEditOption: 'Modifica in batch', + batchEditTip: "Ogni riga corrisponde a un'opzione e supporta il copia e incolla direttamente da tabelle, Excel e WPS.", + batchEditSubTip: "Ogni riga corrisponde a un'opzione. Se si tratta di un gruppo, gli elementi secondari possono iniziare con uno spazio o un tasto tab. È supportata la copia e incolla diretta da tabelle.", + buildOption: 'Opzioni di creazione' + }, + rowProp: { + colSize: 'Numero di colonne', + col2: 'due colonne', + col3: 'tre colonne', + col4: 'quattro colonne', + col6: 'sei colonne', + layout: 'disposizione' + }, + textProp: { + name: 'contenuto', + alignTitle: 'Allineamento', + alignLeft: 'Sulla sinistra', + alignCenter: 'centro', + alignRight: 'A destra', + colorTitle: 'Colore del carattere', + sizeTitle: 'dimensione del carattere', + boldTitle: 'Carattere grassetto', + fontNormal: 'convenzionale', + fontBold: 'Grassetto' + }, + subtableProp: { + seqTitle: 'numero di serie', + showSeq: 'Visualizza il numero di serie', + showCheckbox: 'Consenti selezioni multiple', + errSubDrag: 'La sottotabella non supporta questo controllo, utilizza altri controlli', + colPlace: "Trascina il controllo verso l'interno" + }, + uploadProp: { + limitFileCount: 'Limite di quantità di file', + limitFileSize: 'Limite della dimensione del file', + multiFile: 'Consenti più caricamenti di file', + limitImgCount: 'Limite di quantità di immagini', + limitImgSize: 'Limite dimensione immagine', + multiImg: 'Consenti il ​​caricamento di più immagini' + } + } + }, + listDesign: { + fieldSettingTab: 'Impostazioni sul campo', + listSettingTab: 'Impostazioni dei parametri', + searchTitle: 'Condizioni di interrogazione', + listTitle: 'campo elenco', + searchField: 'Campo di interrogazione', + listField: 'campo elenco', + activeBtn: { + ActionButtonUpdate: 'modificare', + ActionButtonDelete: 'eliminare' + }, + search: { + addBtn: 'modificare', + emptyText: 'Nessuna condizione di query configurata', + editPopupTitle: 'Modifica i campi della query' + }, + searchPopup: { + colTitle: 'titolo', + saveBtn: 'salva' + } + }, + text: { + copySuccess: 'Copiato negli appunti', + copyError: "L'ambiente attuale non supporta questa operazione" + }, + countdown: { + formats: { + yyyy: 'Anno', + MM: 'luna', + dd: 'cielo', + HH: 'ora', + mm: 'punto', + ss: 'Secondo' + } + }, + plugins: { + extendCellArea: { + area: { + mergeErr: 'Questa operazione non può essere eseguita su celle unite', + multiErr: 'Questa operazione non può essere eseguita su più aree di selezione', + selectErr: "Impossibile operare sulle celle nell'intervallo specificato", + extendErr: "Se l'intervallo esteso contiene celle unite, tutte le celle unite devono avere la stessa dimensione", + pasteMultiErr: 'Impossibile incollare, le aree copiate e incollate devono avere le stesse dimensioni per eseguire questa operazione', + cpInvalidErr: "Impossibile eseguire l'operazione. Sono presenti colonne vietate ({0}) nell'intervallo selezionato." + }, + fnr: { + title: 'Trova e sostituisci', + findLabel: 'Trovare', + replaceLabel: 'sostituire', + findTitle: 'Trova cosa:', + replaceTitle: 'Sostituisci con:', + tabs: { + find: 'Trovare', + replace: 'sostituire' + }, + filter: { + re: 'espressione regolare', + whole: 'corrispondenza di parole intere', + sensitive: 'maiuscole e minuscole' + }, + btns: { + findNext: 'Trova successivo', + findAll: 'Trova tutto', + replace: 'sostituire', + replaceAll: 'Sostituisci tutto', + cancel: 'Cancellare' + }, + header: { + seq: '#', + cell: 'cella', + value: 'valore' + }, + body: { + row: 'Riga: {0}', + col: 'Colonna: {0}' + }, + empty: '(valore nullo)', + reError: 'Espressione regolare non valida', + recordCount: '{0} celle trovate', + notCell: 'Nessuna cella corrispondente trovata', + replaceSuccess: 'Sostituite {0} celle con successo' + } + }, + filterComplexInput: { + menus: { + fixedColumn: 'Blocca colonne', + fixedGroup: 'gruppo di congelamento', + cancelFixed: 'Scongelare', + fixedLeft: 'congelare a sinistra', + fixedRight: 'congelare bene' + }, + cases: { + equal: 'pari', + gt: 'maggiore di', + lt: 'meno di', + begin: "L'inizio è", + endin: 'La fine è', + include: 'Includi', + isSensitive: 'maiuscole e minuscole' + } + }, + filterCombination: { + menus: { + clearSort: 'Ordinamento chiaro', + sortAsc: 'Ordine crescente', + sortDesc: 'ordine decrescente', + fixedColumn: 'Blocca colonne', + fixedGroup: 'gruppo di congelamento', + cancelFixed: 'Scongelare', + fixedLeft: 'congelare a sinistra', + fixedRight: 'congelare bene', + clearFilter: 'Cancella filtri', + textOption: 'filtro testo', + numberOption: 'filtro numerico' + }, + popup: { + title: 'Come personalizzare il filtraggio', + currColumnTitle: 'Colonna corrente:', + and: 'E', + or: 'O', + describeHtml: 'Disponibile ? rappresenta un singolo carattere
Utilizzare * per rappresentare un numero qualsiasi di caratteri' + }, + cases: { + equal: 'pari', + unequal: 'non uguale a', + gt: 'maggiore di', + ge: 'maggiore o uguale a', + lt: 'meno di', + le: 'inferiore o uguale a', + begin: "L'inizio è", + notbegin: "Non all'inizio", + endin: 'La fine è', + notendin: 'Il finale no', + include: 'Includi', + exclude: 'Non incluso', + between: 'fra', + custom: 'Filtro personalizzato', + insensitive: 'Non fa distinzione tra maiuscole e minuscole', + isSensitive: 'maiuscole e minuscole' + }, + empty: '(vuoto)', + notData: 'Nessuna corrispondenza' + } + }, + pro: { + area: { + mergeErr: 'Questa operazione non può essere eseguita su celle unite', + multiErr: 'Questa operazione non può essere eseguita su più aree di selezione', + extendErr: "Se l'intervallo esteso contiene celle unite, tutte le celle unite devono avere la stessa dimensione", + pasteMultiErr: 'Impossibile incollare, le aree copiate e incollate devono avere le stesse dimensioni per eseguire questa operazione' + }, + fnr: { + title: 'Trova e sostituisci', + findLabel: 'Trovare', + replaceLabel: 'sostituire', + findTitle: 'Trova cosa:', + replaceTitle: 'Sostituisci con:', + tabs: { + find: 'Trovare', + replace: 'sostituire' + }, + filter: { + re: 'espressione regolare', + whole: 'corrispondenza di parole intere', + sensitive: 'maiuscole e minuscole' + }, + btns: { + findNext: 'Trova successivo', + findAll: 'Trova tutto', + replace: 'sostituire', + replaceAll: 'Sostituisci tutto', + cancel: 'Cancellare' + }, + header: { + seq: '#', + cell: 'cella', + value: 'valore' + }, + empty: '(valore nullo)', + reError: 'Espressione regolare non valida', + recordCount: '{0} celle trovate', + notCell: 'Nessuna cella corrispondente trovata', + replaceSuccess: 'Sostituite {0} celle con successo' + } + }, + renderer: { + search: 'ricerca', + cases: { + equal: 'pari', + unequal: 'non uguale a', + gt: 'maggiore di', + ge: 'maggiore o uguale a', + lt: 'meno di', + le: 'inferiore o uguale a', + begin: "L'inizio è", + notbegin: "Non all'inizio", + endin: 'La fine è', + notendin: 'Il finale no', + include: 'Includi', + exclude: 'Non incluso', + between: 'fra', + custom: 'Filtro personalizzato', + insensitive: 'Non fa distinzione tra maiuscole e minuscole', + isSensitive: 'maiuscole e minuscole' + }, + combination: { + menus: { + clearSort: 'Ordinamento chiaro', + sortAsc: 'Ordine crescente', + sortDesc: 'ordine decrescente', + fixedColumn: 'Blocca colonne', + fixedGroup: 'gruppo di congelamento', + cancelFixed: 'Scongelare', + fixedLeft: 'congelare a sinistra', + fixedRight: 'congelare a destra', + clearFilter: 'Cancella filtri', + textOption: 'filtro testo', + numberOption: 'filtro numerico' + }, + popup: { + title: 'Come personalizzare il filtraggio', + currColumnTitle: 'Colonna corrente:', + and: 'E', + or: 'O', + describeHtml: 'Disponibile ? rappresenta un singolo carattere
Utilizzare * per rappresentare un numero qualsiasi di caratteri' + }, + empty: '(vuoto)', + notData: 'Nessuna corrispondenza' + } + } + } +} diff --git a/packages/locale/lang/ru-RU.ts b/packages/locale/lang/ru-RU.ts index 8ac14c7396..ff4d94bcc0 100644 --- a/packages/locale/lang/ru-RU.ts +++ b/packages/locale/lang/ru-RU.ts @@ -13,11 +13,11 @@ export default { downErr: 'Загрузка не удалась', groupFixed: 'При использовании заголовков групп замороженные столбцы должны быть установлены по группам.', groupMouseRange: 'Заголовок группы и "{0}" нельзя использовать одновременно, что может привести к ошибке.', - groupTag: 'В заголовке столбца группировки следует использовать «{0}» вместо «{1}», что может привести к ошибкам.', + groupTag: 'При группировке заголовков столбцов следует использовать "{0}" вместо "{1}", что может привести к ошибкам.', scrollErrProp: 'Параметр "{0}" не поддерживается, если включена виртуальная прокрутка.', errConflicts: 'Параметры "{0}" конфликтуют с "{1}"', unableInsert: 'Невозможно вставить в указанную позицию, проверьте правильность параметров.', - useErr: 'Произошла ошибка при установке модуля "{0}". Порядок может быть неверным. Зависимые модули необходимо установить перед Табл.', + useErr: 'Произошла ошибка при установке модуля "{0}". Порядок может быть неправильным. Зависимые модули необходимо установить перед Табл.', barUnableLink: 'Панель инструментов не может быть связана с таблицей', expandContent: 'Слот для расширения строки должен быть «Содержимым», проверьте правильность этого значения.', reqComp: 'Компонент "{0}" отсутствует, проверьте, правильно ли он установлен. https://vxeui.com/#/start/useGlobal', @@ -37,7 +37,7 @@ export default { checkProp: 'Если объем данных слишком велик, это может привести к зависанию флажка. Рекомендуется установить параметр «{0}», чтобы улучшить скорость рендеринга.', coverProp: 'Параметр "{1}" из "{0}" определяется повторно, что может вызвать ошибку.', uniField: 'Имя поля "{0}" определяется повторно, что может вызвать ошибку.', - repeatKey: '主键重复 {0}="{1}",这可能会出现错误', + repeatKey: 'Дублирующийся первичный ключ {0}="{1}". Это может привести к ошибке.', delFunc: 'Метод "{0}" устарел, используйте "{1}"', delProp: 'Параметр "{0}" устарел, используйте "{1}"', delEvent: 'Событие "{0}" устарело, используйте "{1}"', @@ -47,9 +47,9 @@ export default { notExp: 'Этот браузер не поддерживает функцию импорта/экспорта.', impFields: 'Не удалось выполнить импорт. Проверьте правильность имени поля и формата данных.', treeNotImp: 'Древовидные таблицы не поддерживают импорт.', - treeCrossDrag: '只能拖拽第一层级', - treeDragChild: '父级不能拖拽到自己的子级中', - reqPlugin: '可选扩展插件 "{1}" https://vxeui.com/other{0}/#/{1}/install' + treeCrossDrag: 'Перетаскивать можно только первый уровень', + treeDragChild: 'Родителя нельзя перетащить в своих дочерних элементов', + reqPlugin: 'Дополнительное расширение "{1}" https://vxeui.com/other{0}/#/{1}/install.' }, table: { emptyText: 'Данных пока нет', @@ -65,7 +65,7 @@ export default { impSuccess: 'Успешно импортировано {0} записей.', expLoading: 'Экспорт', expSuccess: 'Экспорт выполнен успешно', - expError: 'Export failure', + expError: 'Экспорт не удался', expFilename: 'Экспорт_{0}', expOriginFilename: 'экспорт_источник_{0}', customTitle: 'Настройки столбца', @@ -75,7 +75,7 @@ export default { customCancel: 'Отмена', customRestore: 'Восстановить настройки по умолчанию', maxFixedCol: 'Максимальное количество замороженных столбцов не может превышать {0}.', - dragTip: '移动:{0}' + dragTip: 'Переместить: {0}' }, grid: { selectOneRecord: 'Пожалуйста, выберите хотя бы одну запись!', @@ -126,14 +126,14 @@ export default { cstmCancel: 'Отмена', cstmConfirm: 'Конечно', cstmConfirmRestore: 'Пожалуйста, подтвердите, нужно ли восстановить конфигурацию столбца по умолчанию?', - cstmDragTarget: '移动:{0}', + cstmDragTarget: 'Переместить: {0}', setting: { colSort: 'сортировать', sortHelpTip: 'Нажмите и перетащите значок, чтобы изменить порядок столбцов.', - colTitle: '列标题', + colTitle: 'Заголовок столбца', colResizable: 'Ширина столбца (пикселей)', colVisible: 'Отображать ли', - colFixed: 'заморозить столбец', + colFixed: 'Закрепить столбцы', colFixedMax: 'Закрепить столбцы (до {0} столбцов)', fixedLeft: 'левая сторона', fixedUnset: 'Не установлено', @@ -161,7 +161,7 @@ export default { csv: 'CSV (через запятую)(*.csv)', html: 'Веб-страница (*.html)', xml: 'XML-данные (*.xml)', - txt: 'Текстовый файл (с разделителями табуляцией) (*.txt)', + txt: 'Текстовый файл (разделён табуляцией) (*.txt)', xls: 'Книга Excel 97-2003 (*.xls)', xlsx: 'Книга Excel (*.xlsx)', pdf: 'PDF (*.pdf)' @@ -191,7 +191,7 @@ export default { expOptMerge: 'слить', expMergeTitle: 'Поддерживает ячейки со структурами слияния, если они присутствуют.', expOptAllExpand: 'Развернуть уровень', - expAllExpandTitle: 'Если он существует, он поддерживает расширение всех данных с иерархической структурой.', + expAllExpandTitle: 'Если он существует, он поддерживает расширение всех данных с помощью иерархической структуры.', expOptUseStyle: 'стиль', expUseStyleTitle: 'Стилизованные ячейки поддерживаются, если они есть.', expOptOriginal: 'исходные данные', @@ -207,7 +207,7 @@ export default { zoomOut: 'снижение', close: 'закрытие', miniMaxSize: 'Количество свернутых окон не может превышать {0}.', - footPropErr: 'show-footer 仅用于启用表尾,需配合 show-confirm-button | show-cancel-button | 插槽使用' + footPropErr: 'show-footer используется только для включения нижнего колонтитула таблицы и должен использоваться со слотом show-confirm-button |' }, drawer: { close: 'закрытие' @@ -228,7 +228,7 @@ export default { customConfirm: 'подтверждать', customRestore: 'перезагрузить', fixedLeft: 'заморожен слева', - fixedRight: 'застыл справа', + fixedRight: 'замер справа', cancelFixed: 'Разморозить столбец' }, input: { @@ -290,7 +290,7 @@ export default { } }, numberInput: { - currencySymbol: '$' + currencySymbol: '¥' }, imagePreview: { popupTitle: 'Предварительный просмотр', @@ -309,14 +309,14 @@ export default { fileBtnText: 'Нажмите или перетащите, чтобы загрузить', imgBtnText: 'Нажмите или перетащите, чтобы загрузить', dragPlaceholder: 'Пожалуйста, перетащите файл в эту область, чтобы загрузить его.', - imgSizeHint: 'Листовка{0}', + imgSizeHint: 'Листовка {0}', imgCountHint: 'Максимум {0} изображений', fileTypeHint: 'Поддерживаемые типы файлов: {0}', fileSizeHint: 'Размер одного файла не превышает {0}', fileCountHint: 'Можно загрузить до {0} файлов.', - uploadTypeErr: '文件类型不匹配!', + uploadTypeErr: 'Несоответствие типа файла!', overCountErr: 'Можно выбрать только {0} файлов!', - overCountExtraErr: 'Превышено максимальное количество файлов ({0}). Лишние файлы ({1}) будут проигнорированы!', + overCountExtraErr: 'Превышено максимальное количество файлов ({0}). Лишние файлы ({1}) будут игнорироваться!', overSizeErr: 'Максимальный размер файла не может превышать {0}!', reUpload: 'Перезагрузить', uploadProgress: 'Загрузка {0}%', @@ -325,18 +325,18 @@ export default { moreBtnText: 'Подробнее ({0})', viewItemTitle: 'Нажмите, чтобы просмотреть', morePopup: { - readTitle: 'просмотреть список', + readTitle: 'Посмотреть список', imageTitle: 'Загрузить фотографии', fileTitle: 'Загрузить файлы' } }, empty: { - defText: '暂无数据' + defText: 'Данных пока нет' }, colorPicker: { - clear: '清除', - confirm: '确认', - copySuccess: '已复制到剪贴板:{0}' + clear: 'Прозрачный', + confirm: 'подтверждать', + copySuccess: 'Скопировано в буфер обмена: {0}.' }, formDesign: { formName: 'имя формы', @@ -396,8 +396,8 @@ export default { VxeCheckboxGroup: 'флажок', VxeUploadFile: 'документ', VxeUploadImage: 'картина', - VxeRate: 'Rate', - VxeSlider: 'Slider' + VxeRate: 'счет', + VxeSlider: 'ползунок' } }, widgetProp: { @@ -498,7 +498,7 @@ export default { area: { mergeErr: 'Эту операцию нельзя выполнить с объединенными ячейками.', multiErr: 'Эту операцию нельзя выполнить с несколькими областями выделения.', - selectErr: '无法操作指定区域的单元格', + selectErr: 'Невозможно работать с ячейками в указанном диапазоне', extendErr: 'Если расширенный диапазон содержит объединенные ячейки, все объединенные ячейки должны быть одинакового размера.', pasteMultiErr: 'Невозможно вставить. Для выполнения этой операции скопированные и вставленные области должны быть одинакового размера.', cpInvalidErr: 'Невозможно выполнить операцию. В выбранном вами диапазоне есть запрещенные столбцы ({0}).' @@ -531,8 +531,8 @@ export default { value: 'ценить' }, body: { - row: '行:{0}', - col: '列:{0}' + row: 'Строка: {0}', + col: 'Столбец: {0}' }, empty: '(нулевое значение)', reError: 'Недопустимое регулярное выражение', @@ -543,7 +543,7 @@ export default { }, filterComplexInput: { menus: { - fixedColumn: 'заморозить столбец', + fixedColumn: 'Закрепить столбцы', fixedGroup: 'заморозить группу', cancelFixed: 'Разморозить', fixedLeft: 'заморозить слева', @@ -564,7 +564,7 @@ export default { clearSort: 'Очистить сортировку', sortAsc: 'По возрастанию', sortDesc: 'порядок убывания', - fixedColumn: 'заморозить столбец', + fixedColumn: 'Закрепить столбцы', fixedGroup: 'заморозить группу', cancelFixed: 'Разморозить', fixedLeft: 'заморозить слева', @@ -668,11 +668,11 @@ export default { clearSort: 'Очистить сортировку', sortAsc: 'По возрастанию', sortDesc: 'порядок убывания', - fixedColumn: 'Заблокировать столбец', - fixedGroup: 'Блокировать группу', - cancelFixed: 'Разблокировать', - fixedLeft: 'Блокировка слева', - fixedRight: 'Блокировка вправо', + fixedColumn: 'Закрепить столбцы', + fixedGroup: 'заморозить группу', + cancelFixed: 'Разморозить', + fixedLeft: 'замереть влево', + fixedRight: 'замереть вправо', clearFilter: 'Очистить фильтры', textOption: 'текстовый фильтр', numberOption: 'числовой фильтр' diff --git a/packages/locale/lang/th-TH.ts b/packages/locale/lang/th-TH.ts new file mode 100644 index 0000000000..258c2f3d02 --- /dev/null +++ b/packages/locale/lang/th-TH.ts @@ -0,0 +1,692 @@ +export default { + vxe: { + base: { + pleaseInput: 'กรุณาเข้า', + pleaseSelect: 'กรุณาเลือก', + comma: ',', + fullStop: '。' + }, + loading: { + text: 'กำลังโหลด...' + }, + error: { + downErr: 'การดาวน์โหลดล้มเหลว', + groupFixed: 'หากใช้ส่วนหัวของกลุ่ม คอลัมน์ที่ตรึงจะต้องตั้งค่าตามกลุ่ม', + groupMouseRange: 'ส่วนหัวของกลุ่มและ "{0}" ไม่สามารถนำมาใช้พร้อมกันได้ ซึ่งอาจทำให้เกิดข้อผิดพลาดได้', + groupTag: 'การจัดกลุ่มส่วนหัวคอลัมน์ควรใช้ "{0}" แทน "{1}" ซึ่งอาจทำให้เกิดข้อผิดพลาด', + scrollErrProp: 'ไม่สนับสนุนพารามิเตอร์ "{0}" เมื่อเปิดใช้งานการเลื่อนเสมือน', + errConflicts: 'พารามิเตอร์ "{0}" ขัดแย้งกับ "{1}"', + unableInsert: 'ไม่สามารถแทรกลงในตำแหน่งที่ระบุได้ โปรดตรวจสอบว่าพารามิเตอร์ถูกต้องหรือไม่', + useErr: 'เกิดข้อผิดพลาดขณะติดตั้งโมดูล "{0}" ลำดับอาจไม่ถูกต้อง จำเป็นต้องติดตั้งโมดูลที่ต้องพึ่งพาก่อนตาราง', + barUnableLink: 'แถบเครื่องมือไม่สามารถเชื่อมโยงกับตารางได้', + expandContent: 'ช่องที่จะขยายแถวควรเป็น "เนื้อหา" โปรดตรวจสอบว่าถูกต้องหรือไม่', + reqComp: 'ส่วนประกอบ "{0}" หายไป โปรดตรวจสอบว่ามีการติดตั้งอย่างถูกต้องหรือไม่ https://vxeui.com/#/start/useGlobal', + reqModule: 'โมดูล "{0}" หายไป', + reqProp: 'พารามิเตอร์ "{0}" ที่จำเป็นหายไป ซึ่งอาจส่งผลให้เกิดข้อผิดพลาด', + emptyProp: 'พารามิเตอร์ "{0}" ไม่ได้รับอนุญาตให้เว้นว่าง', + errProp: 'พารามิเตอร์ที่ไม่สนับสนุน "{0}" อาจเป็น "{1}"', + colRepet: 'column.{0}="{1}" ซ้ำกัน ซึ่งอาจทำให้บางฟังก์ชันใช้งานไม่ได้', + notFunc: 'ไม่มีวิธีการ "{0}"', + errFunc: 'พารามิเตอร์ "{0}" ไม่ใช่วิธีการ', + notValidators: 'ไม่มีเช็คสากล "{0}"', + notFormats: 'ไม่มีรูปแบบสากล "{0}"', + notCommands: 'ไม่มีคำสั่งสากล "{0}"', + notSlot: 'ไม่มีสล็อต "{0}"', + noTree: 'โครงสร้างแบบต้นไม้ไม่สนับสนุน "{0}"', + notProp: 'พารามิเตอร์ที่ไม่สนับสนุน "{0}"', + checkProp: 'เมื่อปริมาณข้อมูลมากเกินไป อาจทำให้ช่องทำเครื่องหมายค้าง ขอแนะนำให้ตั้งค่าพารามิเตอร์ "{0}" เพื่อปรับปรุงความเร็วในการเรนเดอร์', + coverProp: 'พารามิเตอร์ "{1}" ของ "{0}" ถูกกำหนดซ้ำๆ ซึ่งอาจทำให้เกิดข้อผิดพลาด', + uniField: 'ชื่อฟิลด์ "{0}" ถูกกำหนดซ้ำๆ ซึ่งอาจทำให้เกิดข้อผิดพลาดได้', + repeatKey: 'คีย์หลักซ้ำกัน {0}="{1}" ซึ่งอาจทำให้เกิดข้อผิดพลาดได้', + delFunc: 'วิธีการ "{0}" เลิกใช้แล้ว โปรดใช้ "{1}"', + delProp: 'พารามิเตอร์ "{0}" ล้าสมัย โปรดใช้ "{1}"', + delEvent: 'กิจกรรม "{0}" เลิกใช้แล้ว โปรดใช้ "{1}"', + removeProp: 'พารามิเตอร์ "{0}" เลิกใช้แล้วและไม่แนะนำและอาจส่งผลให้เกิดข้อผิดพลาด', + errFormat: 'เนื้อหาการจัดรูปแบบสากลควรถูกกำหนดโดยใช้ "VXETable.formats" ไม่แนะนำให้ใช้วิธีการเมานต์ "formatter={0}" อีกต่อไป', + notType: 'ประเภทไฟล์ที่ไม่สนับสนุน "{0}"', + notExp: 'เบราว์เซอร์นี้ไม่รองรับฟังก์ชันการนำเข้า/ส่งออก', + impFields: 'การนำเข้าล้มเหลว โปรดตรวจสอบว่าชื่อฟิลด์และรูปแบบข้อมูลถูกต้องหรือไม่', + treeNotImp: 'ตารางแผนผังไม่รองรับการนำเข้า', + treeCrossDrag: 'สามารถลากได้เฉพาะระดับแรกเท่านั้น', + treeDragChild: 'ผู้ปกครองไม่สามารถถูกลากเข้าไปในลูกของตัวเองได้', + reqPlugin: 'ส่วนขยายเพิ่มเติม "{1}" https://vxeui.com/other{0}/#/{1}/install' + }, + table: { + emptyText: 'ยังไม่มีข้อมูล', + allTitle: 'เลือกทั้งหมด/ยกเลิก', + seqTitle: 'หมายเลขซีเรียล', + actionTitle: 'ดำเนินงาน', + confirmFilter: 'กรอง', + resetFilter: 'รีเซ็ต', + allFilter: 'ทั้งหมด', + sortAsc: 'ลำดับจากน้อยไปมาก: ต่ำสุดไปสูงสุด', + sortDesc: 'ลำดับจากมากไปน้อย: จากมากไปน้อย', + filter: 'เปิดใช้งานการกรองในคอลัมน์ที่เลือก', + impSuccess: 'นำเข้าระเบียน {0} สำเร็จแล้ว', + expLoading: 'กำลังส่งออก', + expSuccess: 'ส่งออกสำเร็จ', + expError: 'การส่งออกล้มเหลว', + expFilename: 'ส่งออก_{0}', + expOriginFilename: 'ส่งออก_แหล่งที่มา_{0}', + customTitle: 'การตั้งค่าคอลัมน์', + customAll: 'ทั้งหมด', + customConfirm: 'ยืนยัน', + customClose: 'ปิด', + customCancel: 'ยกเลิก', + customRestore: 'คืนค่าเริ่มต้น', + maxFixedCol: 'จำนวนคอลัมน์ที่ตรึงไว้สูงสุดต้องไม่เกิน {0}', + dragTip: 'ย้าย: {0}' + }, + grid: { + selectOneRecord: 'โปรดเลือกอย่างน้อยหนึ่งรายการ!', + deleteSelectRecord: 'คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกที่เลือก', + removeSelectRecord: 'คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกที่เลือก', + dataUnchanged: 'ข้อมูลไม่มีการเปลี่ยนแปลง!', + delSuccess: 'ลบบันทึกที่เลือกเรียบร้อยแล้ว!', + saveSuccess: 'บันทึกเรียบร้อยแล้ว!', + operError: 'เกิดข้อผิดพลาดและการดำเนินการล้มเหลว!' + }, + select: { + search: 'ค้นหา', + loadingText: 'กำลังโหลด', + emptyText: 'ยังไม่มีข้อมูล' + }, + pager: { + goto: 'ไปที่', + gotoTitle: 'จำนวนหน้า', + pagesize: '{0} รายการ/หน้า', + total: 'รวม {0} บันทึก', + pageClassifier: 'หน้าหนังสือ', + homePage: 'หน้าแรก', + homePageTitle: 'หน้าแรก', + prevPage: 'หน้าก่อนหน้า', + prevPageTitle: 'หน้าก่อนหน้า', + nextPage: 'หน้าถัดไป', + nextPageTitle: 'หน้าถัดไป', + prevJump: 'กระโดดหน้าขึ้น', + prevJumpTitle: 'กระโดดหน้าขึ้น', + nextJump: 'ข้ามหน้าลง', + nextJumpTitle: 'ข้ามหน้าลง', + endPage: 'หน้าสุดท้าย', + endPageTitle: 'หน้าสุดท้าย' + }, + alert: { + title: 'พร้อมท์ระบบ' + }, + button: { + confirm: 'ยืนยัน', + cancel: 'ยกเลิก' + }, + filter: { + search: 'ค้นหา' + }, + custom: { + cstmTitle: 'การตั้งค่าคอลัมน์', + cstmRestore: 'คืนค่าเริ่มต้น', + cstmCancel: 'ยกเลิก', + cstmConfirm: 'แน่นอน', + cstmConfirmRestore: 'โปรดยืนยันว่าจะคืนค่าเป็นการกำหนดค่าคอลัมน์เริ่มต้นหรือไม่', + cstmDragTarget: 'ย้าย: {0}', + setting: { + colSort: 'เรียงลำดับ', + sortHelpTip: 'คลิกและลากไอคอนเพื่อปรับการเรียงลำดับคอลัมน์', + colTitle: 'ส่วนหัวของคอลัมน์', + colResizable: 'ความกว้างของคอลัมน์ (พิกเซล)', + colVisible: 'ไม่ว่าจะแสดง', + colFixed: 'ตรึงคอลัมน์', + colFixedMax: 'ตรึงคอลัมน์ (สูงสุด {0} คอลัมน์)', + fixedLeft: 'ด้านซ้าย', + fixedUnset: 'ไม่ได้ตั้งค่า', + fixedRight: 'ด้านขวา' + } + }, + import: { + modes: { + covering: 'วิธีการเขียนทับ (เขียนทับข้อมูลตารางโดยตรง)', + insert: 'ผนวกที่ด้านล่าง (ผนวกข้อมูลใหม่ที่ด้านล่างของตาราง)', + insertTop: 'ผนวกด้านบน (ผนวกข้อมูลใหม่ที่ด้านบนของตาราง)', + insertBottom: 'ผนวกที่ด้านล่าง (ผนวกข้อมูลใหม่ที่ด้านล่างของตาราง)' + }, + impTitle: 'นำเข้าข้อมูล', + impFile: 'ชื่อไฟล์', + impSelect: 'เลือกไฟล์', + impType: 'ประเภทไฟล์', + impOpts: 'การตั้งค่าพารามิเตอร์', + impMode: 'โหมดการนำเข้า', + impConfirm: 'นำเข้า', + impCancel: 'ยกเลิก' + }, + export: { + types: { + csv: 'CSV (คั่นด้วยเครื่องหมายจุลภาค)(*.csv)', + html: 'หน้าเว็บ (*.html)', + xml: 'ข้อมูล XML (*.xml)', + txt: 'ไฟล์ข้อความ (คั่นด้วยแท็บ) (*.txt)', + xls: 'สมุดงาน Excel 97-2003 (*.xls)', + xlsx: 'สมุดงาน Excel (*.xlsx)', + pdf: 'PDF (*.pdf)' + }, + modes: { + current: 'ข้อมูลปัจจุบัน (ข้อมูลของหน้าปัจจุบัน)', + selected: 'ข้อมูลที่เลือก (ข้อมูลที่เลือกในหน้าปัจจุบัน)', + all: 'ข้อมูลทั้งหมด (รวมถึงข้อมูลที่แบ่งหน้าทั้งหมด)' + }, + printTitle: 'พิมพ์ข้อมูล', + expTitle: 'ส่งออกข้อมูล', + expName: 'ชื่อไฟล์', + expNamePlaceholder: 'กรุณากรอกชื่อไฟล์', + expSheetName: 'ชื่อ', + expSheetNamePlaceholder: 'กรุณากรอกชื่อ', + expType: 'บันทึกประเภท', + expMode: 'เลือกข้อมูล', + expCurrentColumn: 'ทุกสาขา', + expColumn: 'เลือกฟิลด์', + expOpts: 'การตั้งค่าพารามิเตอร์', + expOptHeader: 'ส่วนหัว', + expHeaderTitle: 'จำเป็นต้องมีส่วนหัวหรือไม่?', + expOptFooter: 'ท้ายตาราง', + expFooterTitle: 'จำเป็นต้องมีส่วนท้ายของตารางหรือไม่?', + expOptColgroup: 'ส่วนหัวของกลุ่ม', + expColgroupTitle: 'หากมี รองรับส่วนหัวที่มีโครงสร้างการจัดกลุ่ม', + expOptMerge: 'ผสาน', + expMergeTitle: 'รองรับเซลล์ที่มีโครงสร้างผสาน หากมี', + expOptAllExpand: 'ขยายระดับ', + expAllExpandTitle: 'หากมีอยู่จะรองรับการขยายข้อมูลทั้งหมดด้วยโครงสร้างแบบลำดับชั้น', + expOptUseStyle: 'สไตล์', + expUseStyleTitle: 'เซลล์ที่มีสไตล์ได้รับการสนับสนุน หากมี', + expOptOriginal: 'แหล่งข้อมูล', + expOriginalTitle: 'หากเป็นแหล่งข้อมูลก็รองรับการนำเข้าลงในตาราง', + expPrint: 'พิมพ์', + expConfirm: 'ส่งออก', + expCancel: 'ยกเลิก' + }, + modal: { + errTitle: 'ข้อความแสดงข้อผิดพลาด', + zoomMin: 'ย่อเล็กสุด', + zoomIn: 'ขยายใหญ่สุด', + zoomOut: 'การลดน้อยลง', + close: 'ปิด', + miniMaxSize: 'จำนวนหน้าต่างที่ย่อเล็กสุดต้องไม่เกิน {0}', + footPropErr: 'show-footer ใช้เพื่อเปิดใช้งานส่วนท้ายของตารางเท่านั้นและจำเป็นต้องใช้กับ show-confirm-button |. show-cancel-button |' + }, + drawer: { + close: 'ปิด' + }, + form: { + folding: 'ปิด', + unfolding: 'ขยาย' + }, + toolbar: { + import: 'นำเข้า', + export: 'ส่งออก', + print: 'พิมพ์', + refresh: 'รีเฟรช', + zoomIn: 'เต็มจอ', + zoomOut: 'การลดน้อยลง', + custom: 'การตั้งค่าคอลัมน์', + customAll: 'ทั้งหมด', + customConfirm: 'ยืนยัน', + customRestore: 'รีเซ็ต', + fixedLeft: 'แช่แข็งทางซ้าย', + fixedRight: 'แช่แข็งทางด้านขวา', + cancelFixed: 'เลิกตรึงคอลัมน์' + }, + input: { + date: { + m1: 'มกราคม', + m2: 'กุมภาพันธ์', + m3: 'มีนาคม', + m4: 'เมษายน', + m5: 'อาจ', + m6: '06 มิถุนายน', + m7: 'กรกฎาคม', + m8: 'สิงหาคม', + m9: 'กันยายน', + m10: 'ตุลาคม', + m11: 'พฤศจิกายน', + m12: 'ธันวาคม', + quarterLabel: '{0} ปี', + monthLabel: '{0} ปี', + dayLabel: '{0} ปี {1}', + labelFormat: { + date: 'yyyy-MM-dd', + time: 'HH:mm:ss', + datetime: 'yyyy-MM-dd HH:mm:ss', + week: 'Week WW of year yyyy', + month: 'yyyy-MM', + quarter: 'quarter q of year yyyy', + year: 'yyyy' + }, + weeks: { + w: 'สัปดาห์', + w0: 'วันอาทิตย์', + w1: 'ในวันจันทร์', + w2: 'วันอังคาร', + w3: 'วันพุธ', + w4: 'วันพฤหัสบดี', + w5: 'วันศุกร์', + w6: 'วันเสาร์' + }, + months: { + m0: 'มกราคม', + m1: 'กุมภาพันธ์', + m2: 'มีนาคม', + m3: 'เมษายน', + m4: 'อาจ', + m5: 'มิถุนายน', + m6: 'กรกฎาคม', + m7: 'สิงหาคม', + m8: 'กันยายน', + m9: 'ตุลาคม', + m10: 'พฤศจิกายน', + m11: 'ธันวาคม' + }, + quarters: { + q1: 'ไตรมาสแรก', + q2: 'ไตรมาสที่สอง', + q3: 'ไตรมาสที่สาม', + q4: 'ไตรมาสที่สี่' + } + } + }, + numberInput: { + currencySymbol: '¥' + }, + imagePreview: { + popupTitle: 'ดูตัวอย่าง', + operBtn: { + zoomOut: 'ซูมออก', + zoomIn: 'ขยาย', + pctFull: 'การปรับขนาดตามสัดส่วน', + pct11: 'แสดงขนาดต้นฉบับ', + rotateLeft: 'หมุนไปทางซ้าย', + rotateRight: 'หมุนไปทางขวา', + print: 'คลิกเพื่อพิมพ์ภาพ', + download: 'คลิกเพื่อดาวน์โหลดภาพ' + } + }, + upload: { + fileBtnText: 'คลิกหรือลากเพื่ออัปโหลด', + imgBtnText: 'คลิกหรือลากเพื่ออัปโหลด', + dragPlaceholder: 'โปรดลากและวางไฟล์ลงในบริเวณนี้เพื่ออัปโหลด', + imgSizeHint: 'แผ่นพับ {0}', + imgCountHint: 'สูงสุด {0} รูปภาพ', + fileTypeHint: 'รองรับไฟล์ประเภท {0}', + fileSizeHint: 'ขนาดของไฟล์เดียวไม่เกิน {0}', + fileCountHint: 'สามารถอัปโหลดได้สูงสุด {0} ไฟล์', + uploadTypeErr: 'ประเภทไฟล์ไม่ตรงกัน!', + overCountErr: 'สามารถเลือกได้เพียง {0} ไฟล์เท่านั้น!', + overCountExtraErr: 'เกินจำนวนไฟล์สูงสุด {0} ไฟล์แล้ว ไฟล์ {1} ที่เกินมาจะถูกละเว้น!', + overSizeErr: 'ขนาดไฟล์สูงสุดต้องไม่เกิน {0}!', + reUpload: 'อัปโหลดอีกครั้ง', + uploadProgress: 'กำลังอัปโหลด {0}%', + uploadErr: 'การอัปโหลดล้มเหลว', + uploadSuccess: 'อัปโหลดสำเร็จ', + moreBtnText: 'เพิ่มเติม ({0})', + viewItemTitle: 'คลิกเพื่อดู', + morePopup: { + readTitle: 'ดูรายการ', + imageTitle: 'อัพโหลดรูปภาพ', + fileTitle: 'อัพโหลดไฟล์' + } + }, + empty: { + defText: 'ยังไม่มีข้อมูล' + }, + colorPicker: { + clear: 'ชัดเจน', + confirm: 'ยืนยัน', + copySuccess: 'คัดลอกไปยังคลิปบอร์ด: {0}' + }, + formDesign: { + formName: 'ชื่อแบบฟอร์ม', + defFormTitle: 'แบบฟอร์มที่ไม่มีชื่อ', + widgetPropTab: 'คุณสมบัติการควบคุม', + widgetFormTab: 'คุณสมบัติแบบฟอร์ม', + error: { + wdFormUni: 'อนุญาตให้เพิ่มตัวควบคุมประเภทนี้ลงในแบบฟอร์มได้เพียงรายการเดียวเท่านั้น', + wdSubUni: 'อนุญาตให้เพิ่มการควบคุมประเภทนี้ได้เพียงรายการเดียวในตารางย่อย' + }, + styleSetting: { + btn: 'การตั้งค่าสไตล์', + title: 'การตั้งค่ารูปแบบแบบฟอร์ม', + layoutTitle: 'รูปแบบการควบคุม', + verticalLayout: 'เค้าโครงด้านบนและด้านล่าง', + horizontalLayout: 'เค้าโครงแนวนอน', + styleTitle: 'สไตล์ชื่อเรื่อง', + boldTitle: 'ชื่อเรื่องเป็นตัวหนา', + fontBold: 'ตัวหนา', + fontNormal: 'ธรรมดา', + colonTitle: 'แสดงลำไส้ใหญ่', + colonVisible: 'แสดง', + colonHidden: 'ซ่อน', + alignTitle: 'การจัดตำแหน่ง', + widthTitle: 'ความกว้างของชื่อเรื่อง', + alignLeft: 'ด้านซ้าย', + alignRight: 'ทางด้านขวา', + unitPx: 'พิกเซล', + unitPct: 'เปอร์เซ็นต์' + }, + widget: { + group: { + base: 'การควบคุมขั้นพื้นฐาน', + layout: 'การควบคุมเค้าโครง', + system: 'การควบคุมระบบ', + module: 'การควบคุมโมดูล', + chart: 'การควบคุมแผนภูมิ', + advanced: 'การควบคุมขั้นสูง' + }, + copyTitle: 'คัดลอก_{0}', + component: { + input: 'กล่องขาเข้า', + textarea: 'ช่องข้อความ', + select: 'การเลือกแบบเลื่อนลง', + row: 'หนึ่งแถวและหลายคอลัมน์', + title: 'ชื่อ', + text: 'ข้อความ', + subtable: 'ตารางย่อย', + VxeSwitch: 'ไม่ว่า', + VxeInput: 'กล่องขาเข้า', + VxeNumberInput: 'ตัวเลข', + VxeDatePicker: 'วันที่', + VxeTextarea: 'ช่องข้อความ', + VxeSelect: 'การเลือกแบบเลื่อนลง', + VxeTreeSelect: 'การเลือกต้นไม้', + VxeRadioGroup: 'ปุ่มตัวเลือก', + VxeCheckboxGroup: 'ช่องทำเครื่องหมาย', + VxeUploadFile: 'เอกสาร', + VxeUploadImage: 'รูปภาพ', + VxeRate: 'คะแนน', + VxeSlider: 'แถบเลื่อน' + } + }, + widgetProp: { + name: 'ชื่อการควบคุม', + placeholder: 'พร้อมท์', + required: 'การตรวจสอบที่จำเป็น', + multiple: 'อนุญาตให้เลือกได้หลายรายการ', + displaySetting: { + name: 'การตั้งค่าการแสดงผล', + pc: 'พีซี', + mobile: 'รุ่นมือถือ', + visible: 'แสดง', + hidden: 'ซ่อน' + }, + dataSource: { + name: 'แหล่งข้อมูล', + defValue: 'ตัวเลือก {0}', + addOption: 'เพิ่มตัวเลือก', + batchEditOption: 'การแก้ไขเป็นกลุ่ม', + batchEditTip: 'แต่ละแถวสอดคล้องกับตัวเลือก และรองรับการคัดลอกและวางโดยตรงจากตาราง, Excel และ WPS', + batchEditSubTip: 'แต่ละแถวสอดคล้องกับตัวเลือก หากเป็นกลุ่ม รายการย่อยสามารถเริ่มต้นด้วยการเว้นวรรคหรือคีย์แท็บ', + buildOption: 'ตัวเลือกการสร้าง' + }, + rowProp: { + colSize: 'จำนวนคอลัมน์', + col2: 'สองคอลัมน์', + col3: 'สามคอลัมน์', + col4: 'สี่คอลัมน์', + col6: 'หกคอลัมน์', + layout: 'เค้าโครง' + }, + textProp: { + name: 'เนื้อหา', + alignTitle: 'การจัดตำแหน่ง', + alignLeft: 'ด้านซ้าย', + alignCenter: 'ศูนย์', + alignRight: 'ทางด้านขวา', + colorTitle: 'สีตัวอักษร', + sizeTitle: 'ขนาดตัวอักษร', + boldTitle: 'ตัวอักษรตัวหนา', + fontNormal: 'ธรรมดา', + fontBold: 'ตัวหนา' + }, + subtableProp: { + seqTitle: 'หมายเลขซีเรียล', + showSeq: 'แสดงหมายเลขซีเรียล', + showCheckbox: 'อนุญาตให้เลือกได้หลายรายการ', + errSubDrag: 'ตารางย่อยไม่รองรับการควบคุมนี้ โปรดใช้การควบคุมอื่น', + colPlace: 'ลากตัวควบคุมเข้าไป' + }, + uploadProp: { + limitFileCount: 'ขีดจำกัดปริมาณไฟล์', + limitFileSize: 'ขีดจำกัดขนาดไฟล์', + multiFile: 'อนุญาตให้อัปโหลดหลายไฟล์', + limitImgCount: 'ขีดจำกัดปริมาณรูปภาพ', + limitImgSize: 'ขีดจำกัดขนาดรูปภาพ', + multiImg: 'อนุญาตให้อัปโหลดหลายภาพ' + } + } + }, + listDesign: { + fieldSettingTab: 'การตั้งค่าภาคสนาม', + listSettingTab: 'การตั้งค่าพารามิเตอร์', + searchTitle: 'เงื่อนไขการสืบค้น', + listTitle: 'ฟิลด์รายการ', + searchField: 'ฟิลด์แบบสอบถาม', + listField: 'ฟิลด์รายการ', + activeBtn: { + ActionButtonUpdate: 'แก้ไข', + ActionButtonDelete: 'ลบ' + }, + search: { + addBtn: 'แก้ไข', + emptyText: 'ไม่มีการกำหนดค่าเงื่อนไขแบบสอบถาม', + editPopupTitle: 'แก้ไขฟิลด์แบบสอบถาม' + }, + searchPopup: { + colTitle: 'ชื่อ', + saveBtn: 'บันทึก' + } + }, + text: { + copySuccess: 'คัดลอกไปยังคลิปบอร์ดแล้ว', + copyError: 'สภาพแวดล้อมปัจจุบันไม่รองรับการดำเนินการนี้' + }, + countdown: { + formats: { + yyyy: 'ปี', + MM: 'ดวงจันทร์', + dd: 'ท้องฟ้า', + HH: 'ชั่วโมง', + mm: 'จุด', + ss: 'ที่สอง' + } + }, + plugins: { + extendCellArea: { + area: { + mergeErr: 'การดำเนินการนี้ไม่สามารถทำได้บนเซลล์ที่ผสานแล้ว', + multiErr: 'การดำเนินการนี้ไม่สามารถทำได้ในพื้นที่การเลือกหลายพื้นที่', + selectErr: 'ไม่สามารถดำเนินการกับเซลล์ในช่วงที่กำหนดได้', + extendErr: 'ถ้าช่วงขยายมีเซลล์ที่ผสาน เซลล์ที่ผสานทั้งหมดจะต้องมีขนาดเท่ากัน', + pasteMultiErr: 'ไม่สามารถวางได้ พื้นที่ที่คัดลอกและวางจะต้องมีขนาดเท่ากันจึงจะดำเนินการนี้ได้', + cpInvalidErr: 'ไม่สามารถดำเนินการได้ มีคอลัมน์ต้องห้าม ({0}) ในช่วงที่คุณเลือก' + }, + fnr: { + title: 'ค้นหาและแทนที่', + findLabel: 'หา', + replaceLabel: 'แทนที่', + findTitle: 'ค้นหาอะไร:', + replaceTitle: 'แทนที่ด้วย:', + tabs: { + find: 'หา', + replace: 'แทนที่' + }, + filter: { + re: 'การแสดงออกปกติ', + whole: 'การจับคู่คำทั้งหมด', + sensitive: 'คำนึงถึงขนาดตัวพิมพ์' + }, + btns: { + findNext: 'ค้นหาต่อไป', + findAll: 'ค้นหาทั้งหมด', + replace: 'แทนที่', + replaceAll: 'เปลี่ยนทั้งหมด', + cancel: 'ยกเลิก' + }, + header: { + seq: '#', + cell: 'เซลล์', + value: 'ค่า' + }, + body: { + row: 'แถว: {0}', + col: 'คอลัมน์: {0}' + }, + empty: '(ค่าว่าง)', + reError: 'นิพจน์ทั่วไปไม่ถูกต้อง', + recordCount: 'พบ {0} เซลล์', + notCell: 'ไม่พบเซลล์ที่ตรงกัน', + replaceSuccess: 'แทนที่เซลล์ {0} สำเร็จแล้ว' + } + }, + filterComplexInput: { + menus: { + fixedColumn: 'ตรึงคอลัมน์', + fixedGroup: 'กลุ่มแช่แข็ง', + cancelFixed: 'เลิกตรึง', + fixedLeft: 'แช่แข็งไปทางซ้าย', + fixedRight: 'แช่แข็งขวา' + }, + cases: { + equal: 'เท่ากัน', + gt: 'มากกว่า', + lt: 'น้อยกว่า', + begin: 'จุดเริ่มต้นก็คือ', + endin: 'จุดสิ้นสุดคือ', + include: 'รวม', + isSensitive: 'คำนึงถึงขนาดตัวพิมพ์' + } + }, + filterCombination: { + menus: { + clearSort: 'เรียงลำดับให้ชัดเจน', + sortAsc: 'ลำดับจากน้อยไปหามาก', + sortDesc: 'ลำดับจากมากไปน้อย', + fixedColumn: 'ตรึงคอลัมน์', + fixedGroup: 'กลุ่มแช่แข็ง', + cancelFixed: 'เลิกตรึง', + fixedLeft: 'แช่แข็งไปทางซ้าย', + fixedRight: 'แช่แข็งขวา', + clearFilter: 'ล้างตัวกรอง', + textOption: 'ตัวกรองข้อความ', + numberOption: 'ตัวกรองตัวเลข' + }, + popup: { + title: 'วิธีปรับแต่งการกรอง', + currColumnTitle: 'คอลัมน์ปัจจุบัน:', + and: 'และ', + or: 'หรือ', + describeHtml: 'Available ? แสดงถึงอักขระตัวเดียว
ใช้ * เพื่อแสดงอักขระจำนวนเท่าใดก็ได้' + }, + cases: { + equal: 'เท่ากัน', + unequal: 'ไม่เท่ากับ', + gt: 'มากกว่า', + ge: 'มากกว่าหรือเท่ากับ', + lt: 'น้อยกว่า', + le: 'น้อยกว่าหรือเท่ากับ', + begin: 'จุดเริ่มต้นก็คือ', + notbegin: 'ไม่ใช่ที่จุดเริ่มต้น', + endin: 'จุดสิ้นสุดคือ', + notendin: 'ตอนจบไม่ได้', + include: 'รวม', + exclude: 'ไม่รวม', + between: 'ระหว่าง', + custom: 'ตัวกรองแบบกำหนดเอง', + insensitive: 'ไม่คำนึงถึงขนาดตัวพิมพ์', + isSensitive: 'คำนึงถึงขนาดตัวพิมพ์' + }, + empty: '(ว่างเปล่า)', + notData: 'ไม่มีการแข่งขัน' + } + }, + pro: { + area: { + mergeErr: 'การดำเนินการนี้ไม่สามารถทำได้บนเซลล์ที่ผสานแล้ว', + multiErr: 'การดำเนินการนี้ไม่สามารถทำได้ในพื้นที่การเลือกหลายพื้นที่', + extendErr: 'ถ้าช่วงขยายมีเซลล์ที่ผสาน เซลล์ที่ผสานทั้งหมดจะต้องมีขนาดเท่ากัน', + pasteMultiErr: 'ไม่สามารถวางได้ พื้นที่ที่คัดลอกและวางจะต้องมีขนาดเท่ากันจึงจะดำเนินการนี้ได้' + }, + fnr: { + title: 'ค้นหาและแทนที่', + findLabel: 'หา', + replaceLabel: 'แทนที่', + findTitle: 'ค้นหาอะไร:', + replaceTitle: 'แทนที่ด้วย:', + tabs: { + find: 'หา', + replace: 'แทนที่' + }, + filter: { + re: 'การแสดงออกปกติ', + whole: 'การจับคู่คำทั้งหมด', + sensitive: 'คำนึงถึงขนาดตัวพิมพ์' + }, + btns: { + findNext: 'ค้นหาต่อไป', + findAll: 'ค้นหาทั้งหมด', + replace: 'แทนที่', + replaceAll: 'เปลี่ยนทั้งหมด', + cancel: 'ยกเลิก' + }, + header: { + seq: '#', + cell: 'เซลล์', + value: 'ค่า' + }, + empty: '(ค่าว่าง)', + reError: 'นิพจน์ทั่วไปไม่ถูกต้อง', + recordCount: 'พบ {0} เซลล์', + notCell: 'ไม่พบเซลล์ที่ตรงกัน', + replaceSuccess: 'แทนที่เซลล์ {0} สำเร็จแล้ว' + } + }, + renderer: { + search: 'ค้นหา', + cases: { + equal: 'เท่ากัน', + unequal: 'ไม่เท่ากับ', + gt: 'มากกว่า', + ge: 'มากกว่าหรือเท่ากับ', + lt: 'น้อยกว่า', + le: 'น้อยกว่าหรือเท่ากับ', + begin: 'จุดเริ่มต้นก็คือ', + notbegin: 'ไม่ใช่ที่จุดเริ่มต้น', + endin: 'จุดสิ้นสุดคือ', + notendin: 'ตอนจบไม่ได้', + include: 'รวม', + exclude: 'ไม่รวม', + between: 'ระหว่าง', + custom: 'ตัวกรองแบบกำหนดเอง', + insensitive: 'ไม่คำนึงถึงขนาดตัวพิมพ์', + isSensitive: 'คำนึงถึงขนาดตัวพิมพ์' + }, + combination: { + menus: { + clearSort: 'เรียงลำดับให้ชัดเจน', + sortAsc: 'ลำดับจากน้อยไปหามาก', + sortDesc: 'ลำดับจากมากไปน้อย', + fixedColumn: 'ตรึงคอลัมน์', + fixedGroup: 'กลุ่มแช่แข็ง', + cancelFixed: 'เลิกตรึง', + fixedLeft: 'แช่แข็งไปทางซ้าย', + fixedRight: 'แช่แข็งไปทางขวา', + clearFilter: 'ล้างตัวกรอง', + textOption: 'ตัวกรองข้อความ', + numberOption: 'ตัวกรองตัวเลข' + }, + popup: { + title: 'วิธีปรับแต่งการกรอง', + currColumnTitle: 'คอลัมน์ปัจจุบัน:', + and: 'และ', + or: 'หรือ', + describeHtml: 'Available ? แสดงถึงอักขระตัวเดียว
ใช้ * เพื่อแสดงอักขระจำนวนเท่าใดก็ได้' + }, + empty: '(ว่างเปล่า)', + notData: 'ไม่มีการแข่งขัน' + } + } + } +} diff --git a/packages/locale/lang/zh-CHT.ts b/packages/locale/lang/zh-CHT.ts index d7b2c3b241..3f51e36e55 100644 --- a/packages/locale/lang/zh-CHT.ts +++ b/packages/locale/lang/zh-CHT.ts @@ -11,7 +11,7 @@ export default { }, error: { downErr: '下載失敗', - groupFixed: '如果使用分組表頭,凍結列必須按組設置', + groupFixed: '如果使用分組表頭,凍結列必須按群組設定', groupMouseRange: '分組表頭與 "{0}" 不能同時使用,這可能會出現錯誤', groupTag: '分組列頭應該使用 "{0}" 而不是 "{1}",這可能會出現錯誤', scrollErrProp: '啟用虛擬滾動後不支援此參數 "{0}"', @@ -37,7 +37,7 @@ export default { checkProp: '當資料量過大時可能會導致複選框卡頓,建議設定參數 "{0}" 提升渲染速度', coverProp: '"{0}" 的參數 "{1}" 重複定義,這可能會出現錯誤', uniField: '欄位名稱 "{0}" 重複定義,這可能會出現錯誤', - repeatKey: '主键重复 {0}="{1}",这可能会出现错误', + repeatKey: '主鍵重複 {0}="{1}",這可能會出現錯誤', delFunc: '方法 "{0}" 已廢棄,請使用 "{1}"', delProp: '參數 "{0}" 已廢棄,請使用 "{1}"', delEvent: '事件 "{0}" 已廢棄,請使用 "{1}"', @@ -47,9 +47,9 @@ export default { notExp: '該瀏覽器不支援匯入/匯出功能', impFields: '匯入失敗,請檢查欄位名稱和資料格式是否正確', treeNotImp: '樹表格不支援導入', - treeCrossDrag: '只能拖拽第一层级', - treeDragChild: '父级不能拖拽到自己的子级中', - reqPlugin: '可選擴展插件 "{1}" https://vxeui.com/other{0}/#/{1}/install' + treeCrossDrag: '只能拖曳第一層級', + treeDragChild: '父級不能拖曳到自己的子級中', + reqPlugin: '選用擴充插件 "{1}" https://vxeui.com/other{0}/#/{1}/install' }, table: { emptyText: '暫無數據', @@ -65,7 +65,7 @@ export default { impSuccess: '成功導入 {0} 筆記錄', expLoading: '正在匯出中', expSuccess: '匯出成功', - expError: '导出失败', + expError: '匯出失敗', expFilename: '導出_{0}', expOriginFilename: '匯出_來源_{0}', customTitle: '列設定', @@ -207,7 +207,7 @@ export default { zoomOut: '還原', close: '關閉', miniMaxSize: '最小化視窗的數量不能超過 {0} 個', - footPropErr: 'show-footer 仅用于启用表尾,需配合 show-confirm-button | show-cancel-button | 插槽使用' + footPropErr: 'show-footer 僅用於啟用表尾,需搭配 show-confirm-button | show-cancel-button | 插槽使用' }, drawer: { close: '關閉' @@ -314,7 +314,7 @@ export default { fileTypeHint: '支援 {0} 文件類型', fileSizeHint: '單一檔案大小不超過{0}', fileCountHint: '最多可上傳{0}個文件', - uploadTypeErr: '文件类型不匹配!', + uploadTypeErr: '文件類型不符!', overCountErr: '最多只能選擇{0}個檔案!', overCountExtraErr: '已超出最大數量{0}個,超出的{1}個檔案將被忽略!', overSizeErr: '檔案大小最大不能超過{0}!', @@ -331,12 +331,12 @@ export default { } }, empty: { - defText: '暂无数据' + defText: '暫無數據' }, colorPicker: { clear: '清除', - confirm: '确认', - copySuccess: '已复制到剪贴板:{0}' + confirm: '確認', + copySuccess: '已複製到剪貼簿:{0}' }, formDesign: { formName: '表單名稱', @@ -396,8 +396,8 @@ export default { VxeCheckboxGroup: '複選框', VxeUploadFile: '文件', VxeUploadImage: '圖片', - VxeRate: '评分', - VxeSlider: '滑块' + VxeRate: '評分', + VxeSlider: '滑桿' } }, widgetProp: { @@ -498,7 +498,7 @@ export default { area: { mergeErr: '無法對合併儲存格進行該操作', multiErr: '無法對多重選擇區域進行此操作', - selectErr: '无法操作指定区域的单元格', + selectErr: '無法操作指定區域的儲存格', extendErr: '若延伸的區域包含被合併的儲存格,所有合併的儲存格需大小相同', pasteMultiErr: '無法貼上,需要相同大小的複製的區域和貼上的區域才能執行此操作', cpInvalidErr: '此操作無法進行,您選擇的區域中存在被禁止的列({0})' @@ -668,11 +668,11 @@ export default { clearSort: '清除排序', sortAsc: '升序', sortDesc: '降序', - fixedColumn: '冻结列', - fixedGroup: '冻结分组', - cancelFixed: '取消冻结', - fixedLeft: '冻结到左侧', - fixedRight: '冻结到右侧', + fixedColumn: '凍結列', + fixedGroup: '凍結分組', + cancelFixed: '取消凍結', + fixedLeft: '凍結到左側', + fixedRight: '凍結到右側', clearFilter: '清除篩選', textOption: '文字篩選', numberOption: '數值篩選' diff --git a/packages/table/module/custom/panel.ts b/packages/table/module/custom/panel.ts index 63e615c7cb..f5aa74f5cb 100644 --- a/packages/table/module/custom/panel.ts +++ b/packages/table/module/custom/panel.ts @@ -305,7 +305,7 @@ export default defineComponent({ } if (oldAllMaps[newColumn.id]) { isSelfToChildStatus = true - if (!isSelfToChildDrag) { + if (!(isCrossDrag && isSelfToChildDrag)) { if (VxeUI.modal) { VxeUI.modal.message({ status: 'error', @@ -329,7 +329,7 @@ export default defineComponent({ } if (oldAllMaps[newColumn.id]) { isSelfToChildStatus = true - if (!isSelfToChildDrag) { + if (!(isCrossDrag && isSelfToChildDrag)) { if (VxeUI.modal) { VxeUI.modal.message({ status: 'error', @@ -346,7 +346,7 @@ export default defineComponent({ const oldewMatchRest = XEUtils.findTree(collectColumn, item => item.id === oldColumn.id) // 改变层级 - if (isSelfToChildStatus && isSelfToChildDrag) { + if (isSelfToChildStatus && (isCrossDrag && isSelfToChildDrag)) { if (oldewMatchRest) { const { items: oCols, index: oIndex } = oldewMatchRest const childList = oldColumn.children || [] @@ -370,7 +370,7 @@ export default defineComponent({ if (newMatchRest) { const { items: nCols, index: nIndex, parent: nParent } = newMatchRest // 转子级 - if (isToChildDrag && prevDragToChild) { + if ((isCrossDrag && isToChildDrag) && prevDragToChild) { oldColumn.parentId = newColumn.id newColumn.children = (newColumn.children || []).concat([oldColumn]) } else { @@ -459,7 +459,7 @@ export default defineComponent({ showDropTip(evnt, optEl, false, dragPos) return } - prevDragToChild = !!(isToChildDrag && hasCtrlKey && immediate) + prevDragToChild = !!((isCrossDrag && isToChildDrag) && hasCtrlKey && immediate) prevDragCol = column prevDragPos = dragPos showDropTip(evnt, optEl, true, dragPos) diff --git a/packages/table/module/export/hook.ts b/packages/table/module/export/hook.ts index 71f9e5ed99..dc045699b2 100644 --- a/packages/table/module/export/hook.ts +++ b/packages/table/module/export/hook.ts @@ -6,7 +6,7 @@ import { parseFile, formatText, eqEmptyValue } from '../../../ui/src/utils' import { createHtmlPage, getExportBlobByContent } from './util' import { warnLog, errLog } from '../../../ui/src/log' -import type { VxeGridConstructor, VxeGridPrivateMethods, VxeTablePropTypes, TableExportMethods, VxeGridPropTypes, VxeTableDefines } from '../../../../types' +import type { VxeGridConstructor, VxeGridPrivateMethods, VxeTablePropTypes, VxeColumnPropTypes, TableExportMethods, VxeGridPropTypes, VxeTableDefines } from '../../../../types' const { getI18n, hooks, renderer } = VxeUI @@ -324,7 +324,7 @@ hooks.add('tableExportModule', { return eqEmptyValue(cellValue) ? '' : `${cellValue}` } - const getBodyLabelData = (opts: any, columns: any[], datas: any[]) => { + const getBodyLabelData = (opts: VxeTablePropTypes.ExportHandleOptions, columns: VxeTableDefines.ColumnInfo[], datas: any[]) => { const { isAllExpand, mode } = opts const { treeConfig } = props const radioOpts = computeRadioOpts.value @@ -353,7 +353,7 @@ hooks.add('tableExportModule', { columns.forEach((column, $columnIndex) => { let cellValue: string | number | boolean | null = '' const renderOpts = column.editRender || column.cellRender - let bodyExportMethod = column.exportMethod || columnOpts.exportMethod + let bodyExportMethod: VxeColumnPropTypes.ExportMethod | undefined = column.exportMethod || columnOpts.exportMethod if (!bodyExportMethod && renderOpts && renderOpts.name) { const compConf = renderer.get(renderOpts.name) if (compConf) { @@ -414,7 +414,7 @@ hooks.add('tableExportModule', { columns.forEach((column, $columnIndex) => { let cellValue: string | number | boolean | null = '' const renderOpts = column.editRender || column.cellRender - let bodyExportMethod = column.exportMethod || columnOpts.exportMethod + let bodyExportMethod: VxeColumnPropTypes.ExportMethod | undefined = column.exportMethod || columnOpts.exportMethod if (!bodyExportMethod && renderOpts && renderOpts.name) { const compConf = renderer.get(renderOpts.name) if (compConf) { @@ -946,7 +946,7 @@ hooks.add('tableExportModule', { const handleExportAndPrint = (options: VxeTablePropTypes.ExportOpts | VxeTablePropTypes.ExportConfig, isPrint?: boolean) => { const { treeConfig, showHeader, showFooter } = props - const { initStore, mergeList, isGroup, footerTableData, exportStore, exportParams } = reactData + const { initStore, mergeList, mergeFooterList, isGroup, footerTableData, exportStore, exportParams } = reactData const { collectColumn } = internalData const exportOpts = computeExportOpts.value const hasTree = treeConfig @@ -954,11 +954,14 @@ hooks.add('tableExportModule', { const selectRecords = $xeTable.getCheckboxRecords() const proxyOpts = $xeGrid ? $xeGrid.getComputeMaps().computeProxyOpts.value : {} as VxeGridPropTypes.ProxyOpts const hasFooter = !!footerTableData.length - const hasMerge = !hasTree && mergeList.length + const hasMerge = !!(mergeList.length || mergeFooterList.length) const defOpts = Object.assign({ message: true, isHeader: showHeader, isFooter: showFooter, + isColgroup: isGroup, + isMerge: hasMerge, + useStyle: true, current: 'current', modes: ['current', 'selected'].concat(proxyOpts.ajax && proxyOpts.ajax.queryAll ? ['all'] : []) }, options) @@ -1111,7 +1114,7 @@ hooks.add('tableExportModule', { const { filename, sheetName, type, mode, columns, original, columnFilterMethod, beforeExportMethod, includeFields, excludeFields } = opts let groups: any[] = [] const customCols = columns && columns.length ? columns : null - const handleOptions: VxeTablePropTypes.ExportHandleOptions = Object.assign({ }, opts, { filename: '', sheetName: '', colgroups: [], columns: [], data: [] }) + const handleOptions: VxeTablePropTypes.ExportHandleOptions = Object.assign({ } as { data: any[], colgroups: any[], columns: any[] }, opts, { filename: '', sheetName: '' }) // 如果设置源数据,则默认导出设置了字段的列 if (!customCols && !columnFilterMethod) { handleOptions.columnFilterMethod = ({ column }) => { diff --git a/packages/table/src/cell.ts b/packages/table/src/cell.ts index edf7522363..696cf07d2d 100644 --- a/packages/table/src/cell.ts +++ b/packages/table/src/cell.ts @@ -10,7 +10,7 @@ import type { VxeTableConstructor, VxeTableDefines, VxeColumnPropTypes, VxeTable const { getI18n, getIcon, renderer, formats, renderEmptyElement } = VxeUI -function renderTitlePrefixIcon (params: VxeTableDefines.CellRenderHeaderParams) { +function renderTitlePrefixIcon (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params const titlePrefix = column.titlePrefix || column.titleHelp if (titlePrefix) { @@ -27,7 +27,7 @@ function renderTitlePrefixIcon (params: VxeTableDefines.CellRenderHeaderParams) return renderEmptyElement($table) } -function renderTitleSuffixIcon (params: VxeTableDefines.CellRenderHeaderParams) { +function renderTitleSuffixIcon (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params const titleSuffix = column.titleSuffix if (titleSuffix) { @@ -44,7 +44,7 @@ function renderTitleSuffixIcon (params: VxeTableDefines.CellRenderHeaderParams) return renderEmptyElement($table) } -function renderCellDragIcon (params: VxeTableDefines.CellRenderBodyParams) { +function renderCellDragIcon (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table } = params const tableProps = $table.props const { dragConfig } = tableProps @@ -75,7 +75,7 @@ function renderCellDragIcon (params: VxeTableDefines.CellRenderBodyParams) { ]) } -function renderCellBaseVNs (params: VxeTableDefines.CellRenderBodyParams, content: VxeComponentSlotType | VxeComponentSlotType[]) { +function renderCellBaseVNs (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }, content: VxeComponentSlotType | VxeComponentSlotType[]) { const { $table, column, level } = params const { dragSort } = column const tableProps = $table.props @@ -83,12 +83,12 @@ function renderCellBaseVNs (params: VxeTableDefines.CellRenderBodyParams, conten const { computeRowOpts, computeRowDragOpts } = $table.getComputeMaps() const rowOpts = computeRowOpts.value const rowDragOpts = computeRowDragOpts.value - const { showIcon, isCrossDrag, visibleMethod } = rowDragOpts + const { showIcon, isPeerDrag, isCrossDrag, visibleMethod } = rowDragOpts const rVisibleMethod = visibleMethod || (dragConfig ? dragConfig.rowVisibleMethod : null) const vns: VxeComponentSlotType[] = XEUtils.isArray(content) ? content : [content] if (dragSort && rowOpts.drag && ((showIcon || (dragConfig ? dragConfig.showRowIcon : false)) && (!rVisibleMethod || rVisibleMethod(params)))) { if (treeConfig) { - if (isCrossDrag || !level) { + if (isPeerDrag || isCrossDrag || !level) { vns.unshift( renderCellDragIcon(params) ) @@ -102,14 +102,14 @@ function renderCellBaseVNs (params: VxeTableDefines.CellRenderBodyParams, conten return vns } -function renderHeaderCellDragIcon (params: VxeTableDefines.CellRenderHeaderParams) { +function renderHeaderCellDragIcon (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params const { computeColumnOpts, computeColumnDragOpts } = $table.getComputeMaps() const columnOpts = computeColumnOpts.value const columnDragOpts = computeColumnDragOpts.value - const { showIcon, icon, trigger, isCrossDrag, visibleMethod, disabledMethod } = columnDragOpts + const { showIcon, icon, trigger, isPeerDrag, isCrossDrag, visibleMethod, disabledMethod } = columnDragOpts if (columnOpts.drag && showIcon && (!visibleMethod || visibleMethod(params))) { - if (!column.fixed && (isCrossDrag || !column.parentId)) { + if (!column.fixed && (isPeerDrag || isCrossDrag || !column.parentId)) { const isDisabled = disabledMethod && disabledMethod(params) const ons: Record = {} if (trigger !== 'cell') { @@ -136,7 +136,7 @@ function renderHeaderCellDragIcon (params: VxeTableDefines.CellRenderHeaderParam return renderEmptyElement($table) } -function renderHeaderCellBaseVNs (params: VxeTableDefines.CellRenderHeaderParams, content: VNode | VNode[]) { +function renderHeaderCellBaseVNs (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }, content: VNode | VNode[]) { const vns = [ renderTitlePrefixIcon(params), renderHeaderCellDragIcon(params), @@ -146,21 +146,22 @@ function renderHeaderCellBaseVNs (params: VxeTableDefines.CellRenderHeaderParams return vns } -function renderTitleContent (params: VxeTableDefines.CellRenderHeaderParams, content: VxeComponentSlotType | VxeComponentSlotType[]) { +function renderTitleContent (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }, content: VxeComponentSlotType | VxeComponentSlotType[]) { const { $table, column } = params - const { props, reactData } = $table + const tableProps = $table.props + const tableReactData = $table.reactData const { computeTooltipOpts } = $table.getComputeMaps() - const { showHeaderOverflow: allColumnHeaderOverflow } = props + const { showHeaderOverflow: allColumnHeaderOverflow } = tableProps const { type, showHeaderOverflow } = column const tooltipOpts = computeTooltipOpts.value const showAllTip = tooltipOpts.showAll const headOverflow = XEUtils.isUndefined(showHeaderOverflow) || XEUtils.isNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow const showTitle = headOverflow === 'title' const showTooltip = headOverflow === true || headOverflow === 'tooltip' - const ons: any = {} + const ons: Record = {} if (showTitle || showTooltip || showAllTip) { ons.onMouseenter = (evnt: MouseEvent) => { - if (reactData._isResize) { + if (tableReactData._isResize) { return } if (showTitle) { @@ -172,7 +173,7 @@ function renderTitleContent (params: VxeTableDefines.CellRenderHeaderParams, con } if (showTooltip || showAllTip) { ons.onMouseleave = (evnt: MouseEvent) => { - if (reactData._isResize) { + if (tableReactData._isResize) { return } if (showTooltip || showAllTip) { @@ -202,18 +203,18 @@ function formatFooterLabel (footerFormatter: VxeColumnPropTypes.FooterFormatter, _columnIndex: number }) { if (XEUtils.isFunction(footerFormatter)) { - return footerFormatter(params) + return `${footerFormatter(params)}` } const isArr = XEUtils.isArray(footerFormatter) const gFormatOpts = isArr ? formats.get(footerFormatter[0]) : formats.get(footerFormatter) const footerFormatMethod = gFormatOpts ? gFormatOpts.tableFooterCellFormatMethod : null if (footerFormatMethod) { - return isArr ? footerFormatMethod(params, ...footerFormatter.slice(1)) : footerFormatMethod(params) + return `${isArr ? footerFormatMethod(params, ...footerFormatter.slice(1)) : footerFormatMethod(params)}` } return '' } -function getFooterContent (params: VxeTableDefines.CellRenderFooterParams) { +function getFooterContent (params: VxeTableDefines.CellRenderFooterParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column, _columnIndex, items, row } = params const { slots, editRender, cellRender, footerFormatter } = column const renderOpts = editRender || cellRender @@ -322,7 +323,7 @@ export const Cell = { /** * 列头标题 */ - renderHeaderTitle (params: VxeTableDefines.CellRenderHeaderParams) { + renderHeaderTitle (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params const { slots, editRender, cellRender } = column const renderOpts = editRender || cellRender @@ -341,10 +342,10 @@ export const Cell = { } return renderTitleContent(params, formatText(column.getTitle(), 1)) }, - renderDefaultHeader (params: VxeTableDefines.CellRenderHeaderParams) { + renderDefaultHeader (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return renderHeaderCellBaseVNs(params, Cell.renderHeaderTitle(params)) }, - renderDefaultCell (params: VxeTableDefines.CellRenderBodyParams) { + renderDefaultCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, row, column } = params const { slots, editRender, cellRender } = column const renderOpts = editRender || cellRender @@ -379,10 +380,10 @@ export const Cell = { ) ]) }, - renderTreeCell (params: VxeTableDefines.CellRenderBodyParams) { + renderTreeCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return Cell.renderTreeIcon(params, Cell.renderDefaultCell(params) as VNode[]) }, - renderDefaultFooter (params: VxeTableDefines.CellRenderFooterParams) { + renderDefaultFooter (params: VxeTableDefines.CellRenderFooterParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return [ h('span', { class: 'vxe-cell--item' @@ -393,12 +394,13 @@ export const Cell = { /** * 树节点 */ - renderTreeIcon (params: VxeTableDefines.CellRenderBodyParams, cellVNodes: VxeComponentSlotType[]) { + renderTreeIcon (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }, cellVNodes: VxeComponentSlotType[]) { const { $table, isHidden } = params - const { reactData, internalData } = $table + const tableReactData = $table.reactData + const tableInternalData = $table.internalData const { computeTreeOpts } = $table.getComputeMaps() - const { treeExpandedMaps, treeExpandLazyLoadedMaps } = reactData - const { fullAllDataRowIdData } = internalData + const { treeExpandedMaps, treeExpandLazyLoadedMaps } = tableReactData + const { fullAllDataRowIdData } = tableInternalData const treeOpts = computeTreeOpts.value const { row, column, level } = params const { slots } = column @@ -409,16 +411,16 @@ export const Cell = { const hasChild = rowChilds && rowChilds.length const iconSlot = slots ? slots.icon : null let hasLazyChilds = false - let isAceived = false + let isActive = false let isLazyLoading = false let isLazyLoaded = false - const ons: any = {} + const ons: Record = {} if (iconSlot) { return $table.callSlot(iconSlot, params) } if (!isHidden) { const rowid = getRowid($table, row) - isAceived = !!treeExpandedMaps[rowid] + isActive = !!treeExpandedMaps[rowid] if (lazy) { const rest = fullAllDataRowIdData[rowid] isLazyLoading = !!treeExpandLazyLoadedMaps[rowid] @@ -427,14 +429,14 @@ export const Cell = { } } if (!trigger || trigger === 'default') { - ons.onClick = (evnt: Event) => { + ons.onClick = (evnt: MouseEvent) => { $table.triggerTreeExpandEvent(evnt, params) } } return [ h('div', { class: ['vxe-cell--tree-node', { - 'is--active': isAceived + 'is--active': isActive }], style: { paddingLeft: `${level * indent}px` @@ -447,7 +449,7 @@ export const Cell = { ...ons }, [ h('i', { - class: ['vxe-tree--node-btn', isLazyLoading ? (iconLoaded || getIcon().TABLE_TREE_LOADED) : (isAceived ? (iconOpen || getIcon().TABLE_TREE_OPEN) : (iconClose || getIcon().TABLE_TREE_CLOSE))] + class: ['vxe-tree--node-btn', isLazyLoading ? (iconLoaded || getIcon().TABLE_TREE_LOADED) : (isActive ? (iconOpen || getIcon().TABLE_TREE_OPEN) : (iconClose || getIcon().TABLE_TREE_CLOSE))] }) ]) ] @@ -462,16 +464,16 @@ export const Cell = { /** * 序号 */ - renderSeqHeader (params: VxeTableDefines.CellRenderHeaderParams) { + renderSeqHeader (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params const { slots } = column const headerSlot = slots ? slots.header : null return renderHeaderCellBaseVNs(params, renderTitleContent(params, headerSlot ? $table.callSlot(headerSlot, params) : formatText(column.getTitle(), 1))) }, - renderSeqCell (params: VxeTableDefines.CellRenderBodyParams) { + renderSeqCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params - const { props } = $table - const { treeConfig } = props + const tableProps = $table.props + const { treeConfig } = tableProps const { computeSeqOpts } = $table.getComputeMaps() const seqOpts = computeSeqOpts.value const { slots } = column @@ -485,14 +487,14 @@ export const Cell = { h('span', `${formatText(seqMethod ? seqMethod(params) : treeConfig ? seq : (seqOpts.startIndex || 0) + (seq as number), 1)}`) ]) }, - renderTreeIndexCell (params: VxeTableDefines.CellRenderBodyParams) { + renderTreeIndexCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return Cell.renderTreeIcon(params, Cell.renderSeqCell(params) as VNode[]) }, /** * 单选 */ - renderRadioHeader (params: VxeTableDefines.CellRenderHeaderParams) { + renderRadioHeader (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params const { slots } = column const headerSlot = slots ? slots.header : null @@ -507,11 +509,11 @@ export const Cell = { ]) ) }, - renderRadioCell (params: VxeTableDefines.CellRenderBodyParams) { + renderRadioCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column, isHidden } = params - const { reactData } = $table + const tableReactData = $table.reactData const { computeRadioOpts } = $table.getComputeMaps() - const { selectRadioRow } = reactData + const { selectRadioRow } = tableReactData const radioOpts = computeRadioOpts.value const { slots } = column const { labelField, checkMethod, visibleMethod } = radioOpts @@ -563,31 +565,29 @@ export const Cell = { }, radioVNs) ]) }, - renderTreeRadioCell (params: VxeTableDefines.CellRenderBodyParams) { + renderTreeRadioCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return Cell.renderTreeIcon(params, Cell.renderRadioCell(params)) }, /** * 多选 */ - renderCheckboxHeader (params: VxeTableDefines.CellRenderHeaderParams) { + renderCheckboxHeader (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column, isHidden } = params - const { reactData } = $table + const tableReactData = $table.reactData const { computeIsAllCheckboxDisabled, computeCheckboxOpts } = $table.getComputeMaps() - const { isAllSelected: isAllCheckboxSelected, isIndeterminate: isAllCheckboxIndeterminate } = reactData + const { isAllSelected: isAllCheckboxSelected, isIndeterminate: isAllCheckboxIndeterminate } = tableReactData const isAllCheckboxDisabled = computeIsAllCheckboxDisabled.value const { slots } = column const headerSlot = slots ? slots.header : null const titleSlot = slots ? slots.title : null const checkboxOpts = computeCheckboxOpts.value const headerTitle = column.getTitle() - let ons + const ons: Record = {} if (!isHidden) { - ons = { - onClick (evnt: MouseEvent) { - if (!isAllCheckboxDisabled) { - $table.triggerCheckAllEvent(evnt, !isAllCheckboxSelected) - } + ons.onClick = (evnt: MouseEvent) => { + if (!isAllCheckboxDisabled) { + $table.triggerCheckAllEvent(evnt, !isAllCheckboxSelected) } } } @@ -626,11 +626,12 @@ export const Cell = { ]) ) }, - renderCheckboxCell (params: VxeTableDefines.CellRenderBodyParams) { + renderCheckboxCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, row, column, isHidden } = params - const { props, reactData } = $table - const { treeConfig } = props - const { selectCheckboxMaps, treeIndeterminateMaps } = reactData + const tableProps = $table.props + const tableReactData = $table.reactData + const { treeConfig } = tableProps + const { selectCheckboxMaps, treeIndeterminateMaps } = tableReactData const { computeCheckboxOpts } = $table.getComputeMaps() const checkboxOpts = computeCheckboxOpts.value const { labelField, checkMethod, visibleMethod } = checkboxOpts @@ -641,15 +642,13 @@ export const Cell = { let isChecked = false const isVisible = !visibleMethod || visibleMethod({ row }) let isDisabled = !!checkMethod - let ons + const ons: Record = {} if (!isHidden) { const rowid = getRowid($table, row) isChecked = !!selectCheckboxMaps[rowid] - ons = { - onClick (evnt: MouseEvent) { - if (!isDisabled && isVisible) { - $table.triggerCheckRowEvent(evnt, params, !isChecked) - } + ons.onClick = (evnt: MouseEvent) => { + if (!isDisabled && isVisible) { + $table.triggerCheckRowEvent(evnt, params, !isChecked) } } if (checkMethod) { @@ -690,14 +689,15 @@ export const Cell = { }, checkVNs) ]) }, - renderTreeSelectionCell (params: VxeTableDefines.CellRenderBodyParams) { + renderTreeSelectionCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return Cell.renderTreeIcon(params, Cell.renderCheckboxCell(params)) }, - renderCheckboxCellByProp (params: VxeTableDefines.CellRenderBodyParams) { + renderCheckboxCellByProp (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, row, column, isHidden } = params - const { props, reactData } = $table - const { treeConfig } = props - const { treeIndeterminateMaps } = reactData + const tableProps = $table.props + const tableReactData = $table.reactData + const { treeConfig } = tableProps + const { treeIndeterminateMaps } = tableReactData const { computeCheckboxOpts } = $table.getComputeMaps() const checkboxOpts = computeCheckboxOpts.value const { labelField, checkField, checkMethod, visibleMethod } = checkboxOpts @@ -709,15 +709,13 @@ export const Cell = { let isChecked = false const isVisible = !visibleMethod || visibleMethod({ row }) let isDisabled = !!checkMethod - let ons + const ons: Record = {} if (!isHidden) { const rowid = getRowid($table, row) isChecked = XEUtils.get(row, checkField as string) - ons = { - onClick (evnt: MouseEvent) { - if (!isDisabled && isVisible) { - $table.triggerCheckRowEvent(evnt, params, !isChecked) - } + ons.onClick = (evnt: MouseEvent) => { + if (!isDisabled && isVisible) { + $table.triggerCheckRowEvent(evnt, params, !isChecked) } } if (checkMethod) { @@ -758,31 +756,31 @@ export const Cell = { }, checkVNs) ]) }, - renderTreeSelectionCellByProp (params: VxeTableDefines.CellRenderBodyParams) { + renderTreeSelectionCellByProp (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return Cell.renderTreeIcon(params, Cell.renderCheckboxCellByProp(params)) }, /** * 展开行 */ - renderExpandCell (params: VxeTableDefines.CellRenderBodyParams) { + renderExpandCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, isHidden, row, column } = params - const { reactData } = $table - const { rowExpandedMaps, rowExpandLazyLoadedMaps } = reactData + const tableReactData = $table.reactData + const { rowExpandedMaps, rowExpandLazyLoadedMaps } = tableReactData const { computeExpandOpts } = $table.getComputeMaps() const expandOpts = computeExpandOpts.value const { lazy, labelField, iconLoaded, showIcon, iconOpen, iconClose, visibleMethod } = expandOpts const { slots } = column const defaultSlot = slots ? slots.default : null const iconSlot = slots ? slots.icon : null - let isAceived = false + let isActive = false let isLazyLoading = false if (iconSlot) { return renderCellBaseVNs(params, $table.callSlot(iconSlot, params)) } if (!isHidden) { const rowid = getRowid($table, row) - isAceived = !!rowExpandedMaps[rowid] + isActive = !!rowExpandedMaps[rowid] if (lazy) { isLazyLoading = !!rowExpandLazyLoadedMaps[rowid] } @@ -791,14 +789,14 @@ export const Cell = { showIcon && (!visibleMethod || visibleMethod(params)) ? h('span', { class: ['vxe-table--expanded', { - 'is--active': isAceived + 'is--active': isActive }], onClick (evnt: MouseEvent) { $table.triggerRowExpandEvent(evnt, params) } }, [ h('i', { - class: ['vxe-table--expand-btn', isLazyLoading ? (iconLoaded || getIcon().TABLE_EXPAND_LOADED) : (isAceived ? (iconOpen || getIcon().TABLE_EXPAND_OPEN) : (iconClose || getIcon().TABLE_EXPAND_CLOSE))] + class: ['vxe-table--expand-btn', isLazyLoading ? (iconLoaded || getIcon().TABLE_EXPAND_LOADED) : (isActive ? (iconOpen || getIcon().TABLE_EXPAND_OPEN) : (iconClose || getIcon().TABLE_EXPAND_CLOSE))] }) ]) : renderEmptyElement($table), @@ -809,7 +807,7 @@ export const Cell = { : renderEmptyElement($table) ]) }, - renderExpandData (params: VxeTableDefines.CellRenderDataParams) { + renderExpandData (params: VxeTableDefines.CellRenderDataParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params const { slots, contentRender } = column const contentSlot = slots ? slots.content : null @@ -831,7 +829,7 @@ export const Cell = { /** * HTML 标签 */ - renderHTMLCell (params: VxeTableDefines.CellRenderBodyParams) { + renderHTMLCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params const { slots } = column const defaultSlot = slots ? slots.default : null @@ -845,14 +843,14 @@ export const Cell = { }) ]) }, - renderTreeHTMLCell (params: VxeTableDefines.CellRenderBodyParams) { + renderTreeHTMLCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return Cell.renderTreeIcon(params, Cell.renderHTMLCell(params)) }, /** * 排序和筛选 */ - renderSortAndFilterHeader (params: VxeTableDefines.CellRenderHeaderParams) { + renderSortAndFilterHeader (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return renderHeaderCellBaseVNs( params, Cell.renderHeaderTitle(params).concat(Cell.renderSortIcon(params).concat(Cell.renderFilterIcon(params))) @@ -862,13 +860,13 @@ export const Cell = { /** * 排序 */ - renderSortHeader (params: VxeTableDefines.CellRenderHeaderParams) { + renderSortHeader (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return renderHeaderCellBaseVNs( params, Cell.renderHeaderTitle(params).concat(Cell.renderSortIcon(params)) ) }, - renderSortIcon (params: VxeTableDefines.CellRenderHeaderParams | VxeTableDefines.CellRenderHeaderParams) { + renderSortIcon (params: (VxeTableDefines.CellRenderHeaderParams | VxeTableDefines.CellRenderHeaderParams) & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params const { computeSortOpts } = $table.getComputeMaps() const sortOpts = computeSortOpts.value @@ -908,13 +906,13 @@ export const Cell = { /** * 筛选 */ - renderFilterHeader (params: VxeTableDefines.CellRenderHeaderParams) { + renderFilterHeader (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return renderHeaderCellBaseVNs(params, Cell.renderHeaderTitle(params).concat(Cell.renderFilterIcon(params))) }, - renderFilterIcon (params: VxeTableDefines.CellRenderHeaderParams) { + renderFilterIcon (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column, hasFilter } = params - const { reactData } = $table - const { filterStore } = reactData + const tableReactData = $table.reactData + const { filterStore } = tableReactData const { computeFilterOpts } = $table.getComputeMaps() const filterOpts = computeFilterOpts.value const { showIcon, iconNone, iconMatch } = filterOpts @@ -928,7 +926,7 @@ export const Cell = { h('i', { class: ['vxe-filter--btn', hasFilter ? (iconMatch || getIcon().TABLE_FILTER_MATCH) : (iconNone || getIcon().TABLE_FILTER_NONE)], title: getI18n('vxe.table.filter'), - onClick (evnt: Event) { + onClick (evnt) { if ($table.triggerFilterEvent) { $table.triggerFilterEvent(evnt, params.column, params) } @@ -942,11 +940,11 @@ export const Cell = { /** * 可编辑 */ - renderEditHeader (params: VxeTableDefines.CellRenderHeaderParams) { + renderEditHeader (params: VxeTableDefines.CellRenderHeaderParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params - const { props } = $table + const tableProps = $table.props const { computeEditOpts } = $table.getComputeMaps() - const { editConfig, editRules } = props + const { editConfig, editRules } = tableProps const editOpts = computeEditOpts.value const { sortable, filters, editRender } = column let isRequired = false @@ -978,30 +976,30 @@ export const Cell = { ) }, // 行格编辑模式 - renderRowEdit (params: VxeTableDefines.CellRenderBodyParams) { + renderRowEdit (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params - const { reactData } = $table - const { editStore } = reactData + const tableReactData = $table.reactData + const { editStore } = tableReactData const { actived } = editStore const { editRender } = column return Cell.runRenderer(params, isEnableConf(editRender) && actived && actived.row === params.row) }, - renderTreeRowEdit (params: VxeTableDefines.CellRenderBodyParams) { + renderTreeRowEdit (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return Cell.renderTreeIcon(params, Cell.renderRowEdit(params) as VNode[]) }, // 单元格编辑模式 - renderCellEdit (params: VxeTableDefines.CellRenderBodyParams) { + renderCellEdit (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { const { $table, column } = params - const { reactData } = $table - const { editStore } = reactData + const tableReactData = $table.reactData + const { editStore } = tableReactData const { actived } = editStore const { editRender } = column return Cell.runRenderer(params, isEnableConf(editRender) && actived && actived.row === params.row && actived.column === params.column) }, - renderTreeCellEdit (params: VxeTableDefines.CellRenderBodyParams) { + renderTreeCellEdit (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) { return Cell.renderTreeIcon(params, Cell.renderCellEdit(params) as VNode[]) }, - runRenderer (params: VxeTableDefines.CellRenderBodyParams, isEdit: boolean) { + runRenderer (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }, isEdit: boolean) { const { $table, column } = params const { slots, editRender, formatter } = column const defaultSlot = slots ? slots.default : null diff --git a/packages/table/src/table.ts b/packages/table/src/table.ts index 4fd608c42e..4e7e7d74e1 100644 --- a/packages/table/src/table.ts +++ b/packages/table/src/table.ts @@ -848,30 +848,28 @@ export default defineComponent({ } const computeRowHeight = () => { - const { showOverflow } = props const tableHeader = refTableHeader.value const tableBody = refTableBody.value const tableBodyElem = tableBody ? tableBody.$el as HTMLDivElement : null const vSize = computeSize.value const rowHeightMaps = computeRowHeightMaps.value - let rowHeight = 24 - if (showOverflow) { - if (tableBodyElem) { - const tableHeaderElem = tableHeader ? tableHeader.$el as HTMLDivElement : null - let firstTrElem - firstTrElem = tableBodyElem.querySelector('tr') - if (!firstTrElem && tableHeaderElem) { - firstTrElem = tableHeaderElem.querySelector('tr') - } - if (firstTrElem) { - rowHeight = firstTrElem.clientHeight - } - if (!rowHeight) { - rowHeight = rowHeightMaps[vSize || 'default'] - } + let rowHeight = 0 + if (tableBodyElem) { + const tableHeaderElem = tableHeader ? tableHeader.$el as HTMLDivElement : null + let firstTrElem + firstTrElem = tableBodyElem.querySelector('tr') + if (!firstTrElem && tableHeaderElem) { + firstTrElem = tableHeaderElem.querySelector('tr') + } + if (firstTrElem) { + rowHeight = firstTrElem.clientHeight } } - return rowHeight + if (!rowHeight) { + rowHeight = rowHeightMaps[vSize || 'default'] + } + // 最低支持 18px 行高 + return Math.max(18, rowHeight) } const handleVirtualYVisible = () => { @@ -1038,10 +1036,10 @@ export default defineComponent({ let hasCustomSort = false // 处理还原 if (resizableData || sortData || visibleData || fixedData) { - XEUtils.eachTree(collectColumn, (column, index, items, path, parent) => { + XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => { const colKey = column.getKey() // 支持一级 - if (!parent) { + if (!parentColumn) { if (fixedData && fixedData[colKey] !== undefined) { column.fixed = fixedData[colKey] } @@ -1125,9 +1123,9 @@ export default defineComponent({ let radioColumn: VxeTableDefines.ColumnInfo | undefined let htmlColumn: VxeTableDefines.ColumnInfo | undefined let hasFixed: VxeColumnPropTypes.Fixed | undefined - const handleFunc = (column: VxeTableDefines.ColumnInfo, index: number, items: VxeTableDefines.ColumnInfo[], path?: string[], parent?: VxeTableDefines.ColumnInfo) => { + const handleFunc = (column: VxeTableDefines.ColumnInfo, index: number, items: VxeTableDefines.ColumnInfo[], path?: string[], parentColumn?: VxeTableDefines.ColumnInfo) => { const { id: colid, field, fixed, type, treeNode } = column - const rest = { $index: -1, _index: -1, column, colid, index, items, parent: parent || null, width: 0 } + const rest = { $index: -1, _index: -1, column, colid, index, items, parent: parentColumn || null, width: 0 } if (field) { if (fullColumnFieldData[field]) { errLog('vxe.error.colRepet', ['field', field]) @@ -1189,9 +1187,9 @@ export default defineComponent({ fullColumnIdData[colid] = rest } if (isGroup) { - XEUtils.eachTree(collectColumn, (column, index, items, path, parent, nodes) => { + XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn, nodes) => { column.level = nodes.length - handleFunc(column, index, items, path, parent) + handleFunc(column, index, items, path, parentColumn) }) } else { tableFullColumn.forEach(handleFunc) @@ -1556,10 +1554,10 @@ export default defineComponent({ const expandMaps: { [key: string]: number } = {} - XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parent) => { + XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => { const rowid = getRowid($xeTable, row) - const parentRowid = getRowid($xeTable, parent) - if (!parent || (expandMaps[parentRowid] && treeExpandedMaps[parentRowid])) { + const parentRowid = getRowid($xeTable, parentRow) + if (!parentRow || (expandMaps[parentRowid] && treeExpandedMaps[parentRowid])) { const rowRest = fullAllDataRowIdData[rowid] if (rowRest) { rowRest._index = fullData.length @@ -2748,13 +2746,13 @@ export default defineComponent({ const leftGroupList: VxeTableDefines.ColumnInfo[] = [] const centerGroupList: VxeTableDefines.ColumnInfo[] = [] const rightGroupList: VxeTableDefines.ColumnInfo[] = [] - XEUtils.eachTree(collectColumn, (column, index, items, path, parent) => { + XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => { const isColGroup = hasChildrenList(column) // 如果是分组,必须按组设置固定列,不允许给子列设置固定 - if (parent && parent.fixed) { - column.fixed = parent.fixed + if (parentColumn && parentColumn.fixed) { + column.fixed = parentColumn.fixed } - if (parent && column.fixed !== parent.fixed) { + if (parentColumn && column.fixed !== parentColumn.fixed) { errLog('vxe.error.groupFixed') } if (isColGroup) { @@ -3374,9 +3372,9 @@ export default defineComponent({ sourceDataRowIdData[rowid] = XEUtils.clone(childRow, true) }) } - XEUtils.eachTree(rows, (childRow, index, items, path, parent, nodes) => { + XEUtils.eachTree(rows, (childRow, index, items, path, parentItem, nodes) => { const rowid = getRowid($xeTable, childRow) - const parentRow = parent || parentRest.row + const parentRow = parentItem || parentRest.row const rest = { row: childRow, rowid, seq: -1, index, _index: -1, $index: -1, items, parent: parentRow, level: parentLevel + nodes.length, height: 0 } fullDataRowIdData[rowid] = rest fullAllDataRowIdData[rowid] = rest @@ -5385,9 +5383,9 @@ export default defineComponent({ let hasSort = 0 let hasFixedt = 0 let hasVisible = 0 - XEUtils.eachTree(collectColumn, (column, index, items, path, parent) => { + XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => { // 只支持一级 - if (!parent) { + if (!parentColumn) { collectColumn.forEach((column) => { const colKey = column.getKey() if (colKey) { @@ -6372,7 +6370,7 @@ export default defineComponent({ const isLazy = treeConfig && treeOpts.lazy const fullAllDataRowIdMaps: Record = {} const fullDataRowIdMaps: Record = {} - const handleRow = (row: any, index: any, items: any, path?: any[], parent?: any, nodes?: any[]) => { + const handleRow = (row: any, index: any, items: any, path?: any[], parentRow?: any, nodes?: any[]) => { let rowid = getRowid($xeTable, row) const seq = treeConfig && path ? toTreePathSeq(path) : index + 1 const level = nodes ? nodes.length - 1 : 0 @@ -6385,13 +6383,13 @@ export default defineComponent({ } let cacheItem = fullAllDataRowIdData[rowid] if (!cacheItem) { - cacheItem = { row, rowid, seq, index: -1, _index: -1, $index: -1, items, parent, level, height: 0 } + cacheItem = { row, rowid, seq, index: -1, _index: -1, $index: -1, items, parent: parentRow, level, height: 0 } } cacheItem.row = row cacheItem.items = items - cacheItem.parent = parent + cacheItem.parent = parentRow cacheItem.level = level - cacheItem.index = treeConfig && parent ? -1 : index + cacheItem.index = treeConfig && parentRow ? -1 : index if (isSource) { fullDataRowIdMaps[rowid] = cacheItem } @@ -7313,7 +7311,7 @@ export default defineComponent({ const { treeConfig, dragConfig } = props const rowDragOpts = computeRowDragOpts.value const { fullAllDataRowIdData, prevDragToChild } = internalData - const { isCrossDrag, isSelfToChildDrag, dragEndMethod } = rowDragOpts + const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod } = rowDragOpts const treeOpts = computeTreeOpts.value const { transform, rowField, mapChildrenField, parentField } = treeOpts const childrenField = treeOpts.children || treeOpts.childrenField @@ -7362,20 +7360,27 @@ export default defineComponent({ if (oldLevel && newLevel) { // 子到子 - if (!isCrossDrag) { - return - } - if (oldAllMaps[newRowid]) { - isSelfToChildStatus = true - if (!isSelfToChildDrag) { - if (VxeUI.modal) { - VxeUI.modal.message({ - status: 'error', - content: getI18n('vxe.error.treeDragChild') - }) - } + if (isPeerDrag) { + if (oldRest.row[parentField] !== newRest.row[parentField]) { + // 非同级 + return + } + } else { + if (!isCrossDrag) { return } + if (oldAllMaps[newRowid]) { + isSelfToChildStatus = true + if (!(isCrossDrag && isSelfToChildDrag)) { + if (VxeUI.modal) { + VxeUI.modal.message({ + status: 'error', + content: getI18n('vxe.error.treeDragChild') + }) + } + return + } + } } } else if (oldLevel) { // 子到根 @@ -7391,7 +7396,7 @@ export default defineComponent({ } if (oldAllMaps[newRowid]) { isSelfToChildStatus = true - if (!isSelfToChildDrag) { + if (!(isCrossDrag && isSelfToChildDrag)) { if (VxeUI.modal) { VxeUI.modal.message({ status: 'error', @@ -7417,7 +7422,7 @@ export default defineComponent({ fullList.splice(ntfIndex, 0, dragRow) // 改变层级 - if (isSelfToChildStatus && isSelfToChildDrag) { + if (isSelfToChildStatus && (isCrossDrag && isSelfToChildDrag)) { XEUtils.each(dragRow[childrenField], childRow => { childRow[parentField] = dragRow[parentField] }) @@ -7491,9 +7496,9 @@ export default defineComponent({ const { fullAllDataRowIdData } = internalData const { dragRow } = reactData const treeOpts = computeTreeOpts.value - const { transform } = treeOpts + const { transform, parentField } = treeOpts const rowDragOpts = computeRowDragOpts.value - const { isCrossDrag, isToChildDrag } = rowDragOpts + const { isPeerDrag, isCrossDrag, isToChildDrag } = rowDragOpts if (!dragRow) { evnt.preventDefault() return @@ -7508,11 +7513,13 @@ export default defineComponent({ const { dragRow } = reactData const offsetY = evnt.clientY - trEl.getBoundingClientRect().y const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom' - if ($xeTable.eqRow(dragRow, row) || (!isCrossDrag && treeConfig && rest.level)) { + if ($xeTable.eqRow(dragRow, row) || + (!isCrossDrag && treeConfig && transform && (isPeerDrag ? dragRow[parentField] !== row[parentField] : rest.level)) + ) { showDropTip(evnt, trEl, null, false, dragPos) return } - internalData.prevDragToChild = !!(treeConfig && transform && isToChildDrag && hasCtrlKey) + internalData.prevDragToChild = !!(treeConfig && transform && (isCrossDrag && isToChildDrag) && hasCtrlKey) internalData.prevDragRow = row internalData.prevDragPos = dragPos showDropTip(evnt, trEl, null, true, dragPos) @@ -7569,7 +7576,7 @@ export default defineComponent({ handleColDragSwapEvent (evnt, isSyncColumn, dragCol, prevDragCol, prevDragPos, prevDragToChild) { const { mouseConfig } = props const columnDragOpts = computeColumnDragOpts.value - const { isCrossDrag, isSelfToChildDrag, isToChildDrag, dragEndMethod } = columnDragOpts + const { isPeerDrag, isCrossDrag, isSelfToChildDrag, isToChildDrag, dragEndMethod } = columnDragOpts const { collectColumn } = internalData const dragOffsetIndex = prevDragPos === 'right' ? 1 : 0 if (prevDragCol && dragCol) { @@ -7604,20 +7611,28 @@ export default defineComponent({ if (oldColumn.parentId && newColumn.parentId) { // 子到子 - if (!isCrossDrag) { - return - } - if (oldAllMaps[newColumn.id]) { - isSelfToChildStatus = true - if (!isSelfToChildDrag) { - if (VxeUI.modal) { - VxeUI.modal.message({ - status: 'error', - content: getI18n('vxe.error.treeDragChild') - }) - } + if (isPeerDrag) { + if (oldColumn.parentId !== newColumn.parentId) { + // 非同级 return } + } else { + if (!isCrossDrag) { + return + } + + if (oldAllMaps[newColumn.id]) { + isSelfToChildStatus = true + if (!(isCrossDrag && isSelfToChildDrag)) { + if (VxeUI.modal) { + VxeUI.modal.message({ + status: 'error', + content: getI18n('vxe.error.treeDragChild') + }) + } + return + } + } } } else if (oldColumn.parentId) { // 子到根 @@ -7633,7 +7648,7 @@ export default defineComponent({ } if (oldAllMaps[newColumn.id]) { isSelfToChildStatus = true - if (!isSelfToChildDrag) { + if (!(isCrossDrag && isSelfToChildDrag)) { if (VxeUI.modal) { VxeUI.modal.message({ status: 'error', @@ -7650,7 +7665,7 @@ export default defineComponent({ const oldewMatchRest = XEUtils.findTree(collectColumn, item => item.id === oldColumn.id) // 改变层级 - if (isSelfToChildStatus && isSelfToChildDrag) { + if (isSelfToChildStatus && (isCrossDrag && isSelfToChildDrag)) { if (oldewMatchRest) { const { items: oCols, index: oIndex } = oldewMatchRest const childList = oldColumn.children || [] @@ -7674,7 +7689,7 @@ export default defineComponent({ if (newMatchRest) { const { items: nCols, index: nIndex, parent: nParent } = newMatchRest // 转子级 - if (isToChildDrag && prevDragToChild) { + if ((isCrossDrag && isToChildDrag) && prevDragToChild) { oldColumn.parentId = newColumn.id newColumn.children = (newColumn.children || []).concat([oldColumn]) } else { @@ -7686,8 +7701,8 @@ export default defineComponent({ } } - XEUtils.eachTree(collectColumn, (column, index, items, path, parent) => { - if (!parent) { + XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => { + if (!parentColumn) { const sortIndex = index + 1 column.renderSortNumber = sortIndex } @@ -7743,7 +7758,7 @@ export default defineComponent({ handleHeaderCellDragDragoverEvent (evnt) { const { dragCol } = reactData const columnDragOpts = computeColumnDragOpts.value - const { isToChildDrag, isCrossDrag } = columnDragOpts + const { isToChildDrag, isPeerDrag, isCrossDrag } = columnDragOpts if (!dragCol) { evnt.preventDefault() return @@ -7757,11 +7772,14 @@ export default defineComponent({ const { clientX } = evnt const offsetX = clientX - thEl.getBoundingClientRect().x const dragPos = offsetX < thEl.clientWidth / 2 ? 'left' : 'right' - if (column.fixed || (dragCol && dragCol.id === column.id) || (!isCrossDrag && column.parentId)) { + if (column.fixed || + (dragCol && dragCol.id === column.id) || + (!isCrossDrag && (isPeerDrag ? dragCol.parentId !== column.parentId : column.parentId)) + ) { showDropTip(evnt, null, thEl, false, dragPos) return } - internalData.prevDragToChild = !!(isToChildDrag && hasCtrlKey) + internalData.prevDragToChild = !!((isCrossDrag && isToChildDrag) && hasCtrlKey) internalData.prevDragCol = column internalData.prevDragPos = dragPos showDropTip(evnt, null, thEl, true, dragPos) diff --git a/packages/toolbar/src/toolbar.ts b/packages/toolbar/src/toolbar.ts index 17986acf14..3ad10d7c6d 100644 --- a/packages/toolbar/src/toolbar.ts +++ b/packages/toolbar/src/toolbar.ts @@ -5,7 +5,7 @@ import { getSlotVNs } from '../../ui/src/vn' import { warnLog, errLog } from '../../ui/src/log' import type { ValueOf, VxeButtonComponent, VxeButtonEvents, VxeComponentSlotType } from 'vxe-pc-ui' -import type { VxeGridConstructor, GridPrivateMethods, ToolbarMethods, ToolbarInternalData, VxeToolbarConstructor, VxeToolbarEmits, VxeToolbarPropTypes, ToolbarPrivateRef, ToolbarReactData } from '../../../types' +import type { VxeGridConstructor, GridPrivateMethods, ToolbarMethods, ToolbarInternalData, VxeToolbarConstructor, VxeToolbarEmits, VxeToolbarPropTypes, ToolbarPrivateRef, ToolbarReactData, VxeTableConstructor, VxeTablePrivateMethods } from '../../../types' const { getConfig, getIcon, getI18n, renderer, commands, createEvent, useFns } = VxeUI @@ -282,7 +282,7 @@ export default defineComponent({ toolbarMethods = { dispatchEvent, syncUpdate (params) { - internalData.connectTable = params.$table + internalData.connectTable = params.$table as (VxeTableConstructor & VxeTablePrivateMethods) reactData.columns = params.collectColumn reactData.connectFlag++ } diff --git a/tsconfig.json b/tsconfig.json index 9989e3fdc9..b034182231 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,7 @@ "jsxImportSource": "vue", "importHelpers": true, "moduleResolution": "node", - "skipLibCheck": true, + "skipLibCheck": false, "esModuleInterop": true, "resolveJsonModule": true, "allowSyntheticDefaultImports": true,