diff --git a/frontend/src/components/ConnectionModal.i18n.test.tsx b/frontend/src/components/ConnectionModal.i18n.test.tsx index 9ada8cb..e816171 100644 --- a/frontend/src/components/ConnectionModal.i18n.test.tsx +++ b/frontend/src/components/ConnectionModal.i18n.test.tsx @@ -77,6 +77,19 @@ const flushConnectionTestTick = async () => { }; const source = readFileSync(new URL("./ConnectionModal.tsx", import.meta.url), "utf8"); +const step2Source = readFileSync(new URL("./connectionModal/ConnectionModalStep2.tsx", import.meta.url), "utf8"); +const networkSecuritySource = readFileSync( + new URL("./connectionModal/ConnectionModalNetworkSecuritySection.tsx", import.meta.url), + "utf8", +); +const uriSource = readFileSync(new URL("./connectionModal/connectionModalUri.ts", import.meta.url), "utf8"); +const typeCatalogSource = readFileSync(new URL("../utils/connectionTypeCatalog.ts", import.meta.url), "utf8"); +const combinedConnectionModalSource = [ + source, + step2Source, + networkSecuritySource, + uriSource, +].join("\n"); const initialConnection = (type: string, config: Record = {}) => ({ @@ -856,12 +869,12 @@ describe("ConnectionModal i18n", () => { }); it("localizes the Redis URI example separator while preserving URI examples as raw text", () => { - expect(source).not.toContain(`topology=cluster ${"\u6216"} redis://`); - expect(source).toContain('t("connection.modal.example.or"'); - expect(source).toContain( + expect(uriSource).not.toContain(`topology=cluster ${"\u6216"} redis://`); + expect(uriSource).toContain('t("connection.modal.example.or"'); + expect(uriSource).toContain( '"redis://:pass@127.0.0.1:6379,127.0.0.2:6379/0?topology=cluster"', ); - expect(source).toContain( + expect(uriSource).toContain( '"redis://:pass@10.0.0.1:26379,10.0.0.2:26379/0?topology=sentinel&master=mymaster"', ); }); @@ -884,11 +897,11 @@ describe("ConnectionModal i18n", () => { 'label: "NoSQL"', 'name: "Custom (自定义)"', ].forEach((snippet) => { - expect(source).not.toContain(snippet); + expect(combinedConnectionModalSource).not.toContain(snippet); }); - expect(source).not.toContain('res?.message !== "已取消"'); - expect(source.match(/isBackendCancelledResult\(res\)/g) ?? []).toHaveLength(3); - expect(source).toContain('name: "Dameng (达梦)"'); + expect(combinedConnectionModalSource).not.toContain('res?.message !== "已取消"'); + expect(combinedConnectionModalSource.match(/isBackendCancelledResult\(res\)/g) ?? []).toHaveLength(3); + expect(typeCatalogSource).toContain("name: 'Dameng (达梦)'"); }); it("renders English URI feedback and file picker error shell while preserving raw detail", async () => { diff --git a/frontend/src/components/DataExportFlow.i18n.test.ts b/frontend/src/components/DataExportFlow.i18n.test.ts index 85cf627..7fb5be6 100644 --- a/frontend/src/components/DataExportFlow.i18n.test.ts +++ b/frontend/src/components/DataExportFlow.i18n.test.ts @@ -5,6 +5,8 @@ const componentFiles = [ './DataExportDialog.tsx', './ExportProgressModal.tsx', './TableExportWorkbench.tsx', + './useExportProgressRunner.ts', + '../utils/tableExportTab.ts', ] as const; const localeFiles = [ @@ -36,6 +38,12 @@ describe('data export i18n', () => { expect(sources[0]).toContain("t('data_export.dialog.field.format')"); expect(sources[1]).toContain("t('data_export.progress.title.error')"); expect(sources[2]).toContain("t('data_export.workbench.title')"); + expect(sources[3]).toContain("t('data_export.progress.title.done')"); + expect(sources[3]).toContain("t('data_export.progress.title.error')"); + expect(sources[4]).toContain("t('data_export.workbench.scope.all.label')"); + expect(sources[4]).toContain("t('data_export.workbench.scope.all.description')"); + expect(sources[4]).toContain("t('data_export.progress.value.target_fallback')"); + expect(sources[4]).toContain("t('data_export.workbench.task.export_target'"); expect(combinedSource).not.toMatch(/\p{Script=Han}/u); }); diff --git a/frontend/src/components/DataGrid.layout.test.tsx b/frontend/src/components/DataGrid.layout.test.tsx index 352d3c1..d48fb76 100644 --- a/frontend/src/components/DataGrid.layout.test.tsx +++ b/frontend/src/components/DataGrid.layout.test.tsx @@ -2214,9 +2214,45 @@ describe('DataGrid layout', () => { expect(source).toContain("type DataGridExportScope = 'selected' | 'page' | 'all' | 'filteredAll';"); expect(source).toContain('const handleOpenExportDialog = useCallback(async () => {'); expect(source).toContain('await runExportWithProgress({'); - expect(source).toContain("title: '导出查询结果'"); - expect(source).toContain("label: '筛选结果(全部)'"); - expect(source).toContain("label: '全表数据'"); + expect(source).toContain("translateDataGrid('file.backend.dialog.export_query_result')"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.selected_rows')"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.selected_rows_count'"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.selected_rows_description')"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.current_page'"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.current_page_description')"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.all_results_requery')"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.all_results_cached'"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.all_results_requery_description')"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.all_results_cached_description')"); + expect(source).not.toContain("title: '导出查询结果'"); + expect(source).not.toContain("title: `导出 ${defaultName || '查询结果'}`"); + expect(source).not.toContain("? '全部结果(重新查询)'"); + expect(source).not.toContain(": `全部结果(当前缓存 ${mergedDisplayData.length} 条)`"); + expect(source).not.toContain("label: selectedCount > 0 ? `选中行 (${selectedCount} 条)` : '选中行'"); + expect(source).not.toContain("description: '仅导出当前结果集中已勾选的行。'"); + expect(source).not.toContain("label: `当前页 (${queryResultCurrentPageRows.length} 条)`"); + expect(source).not.toContain("description: '直接按当前结果页缓存导出。'"); + expect(source).not.toContain("? '后台会重新执行 SQL,避免只导出当前页或当前缓存。'"); + expect(source).not.toContain(": '当前查询缺少可重放 SQL 时,将导出当前缓存的全部结果。'"); + expect(source).toContain("translateDataGrid('file.backend.dialog.export_table'"); + expect(source).toContain("translateDataGrid('file.backend.dialog.export_data')"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.current_page'"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.current_page_requery_description')"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.current_page_unavailable_description')"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.filtered_results_all')"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.filtered_results_all_requery_description')"); + expect(source).toContain("translateDataGrid('data_grid.export.scope.filtered_results_all_unavailable_description')"); + expect(source).toContain("translateDataGrid('data_export.workbench.scope.all.label')"); + expect(source).toContain("translateDataGrid('data_export.workbench.scope.all.description')"); + expect(source).not.toContain("title: `导出 ${tableName || '数据'}`"); + expect(source).not.toContain("label: `当前页 (${displayData.length} 条)`"); + expect(source).not.toContain("? '后台按当前分页条件重新查询后导出当前页。'"); + expect(source).not.toContain(": '当前页依赖前端临时状态,建议直接使用快捷导出。'"); + expect(source).not.toContain("label: '筛选结果(全部)'"); + expect(source).not.toContain("? '按当前筛选条件重新查询数据库并导出全部筛选结果。'"); + expect(source).not.toContain(": '当前数据源或当前状态暂不支持在工作台重放筛选导出。'"); + expect(source).not.toContain("label: '全表数据'"); + expect(source).not.toContain("description: '后台重新查询整张表并导出全部数据。'"); expect(source).toContain("const fallbackAllSql = String(resultSql || '').trim();"); expect(source).toContain("const backendExportSql = exportAllSql || fallbackAllSql;"); expect(source).toContain("if (backendExportSql && connectionId) {"); diff --git a/frontend/src/components/DataGrid.tsx b/frontend/src/components/DataGrid.tsx index 4f881d4..ec739c9 100644 --- a/frontend/src/components/DataGrid.tsx +++ b/frontend/src/components/DataGrid.tsx @@ -913,8 +913,11 @@ const DataGrid: React.FC = ({ // Helper to export specific data const exportData = async (rows: any[], options: DataExportFileOptions) => { const cleanRows = pickDataGridOutputRows(rows, displayOutputColumnNames); + const exportTitle = String(tableName || '').trim() + ? translateDataGrid('file.backend.dialog.export_table', { table: tableName }) + : translateDataGrid('file.backend.dialog.export_data'); await runExportWithProgress({ - title: `导出 ${tableName || '数据'}`, + title: exportTitle, targetName: tableName || 'export', format: options.format, totalRows: cleanRows.length, diff --git a/frontend/src/components/ExportTitles.i18n.test.ts b/frontend/src/components/ExportTitles.i18n.test.ts new file mode 100644 index 0000000..218349b --- /dev/null +++ b/frontend/src/components/ExportTitles.i18n.test.ts @@ -0,0 +1,24 @@ +import { readFileSync } from 'node:fs'; +import { describe, expect, it } from 'vitest'; + +const dataGridSource = readFileSync(new URL('./DataGrid.tsx', import.meta.url), 'utf8'); +const tableOverviewSource = readFileSync(new URL('./TableOverview.tsx', import.meta.url), 'utf8'); +const sidebarObjectActionsSource = readFileSync(new URL('./sidebar/useSidebarObjectActions.tsx', import.meta.url), 'utf8'); + +describe('export title i18n guards', () => { + it('keeps export progress and export tab titles on translation keys instead of inline Chinese copy', () => { + [ + "`导出 ${tableName || '数据'}`", + "`导出 ${tableName}`", + ].forEach((rawSnippet) => { + expect(dataGridSource).not.toContain(rawSnippet); + expect(tableOverviewSource).not.toContain(rawSnippet); + expect(sidebarObjectActionsSource).not.toContain(rawSnippet); + }); + + expect(dataGridSource).toContain("translateDataGrid('file.backend.dialog.export_data')"); + expect(dataGridSource).toContain("translateDataGrid('file.backend.dialog.export_table'"); + expect(tableOverviewSource).toContain("t('file.backend.dialog.export_table'"); + expect(sidebarObjectActionsSource).toContain("t('file.backend.dialog.export_table'"); + }); +}); diff --git a/frontend/src/components/QueryEditor.results-and-drop.test.tsx b/frontend/src/components/QueryEditor.results-and-drop.test.tsx index 2faa8da..a12ef1d 100644 --- a/frontend/src/components/QueryEditor.results-and-drop.test.tsx +++ b/frontend/src/components/QueryEditor.results-and-drop.test.tsx @@ -373,6 +373,7 @@ vi.mock('@ant-design/icons', () => { return { BugOutlined: Icon, ClearOutlined: Icon, + CopyOutlined: Icon, PlayCircleOutlined: Icon, SaveOutlined: Icon, FormatPainterOutlined: Icon, @@ -479,6 +480,24 @@ const textContent = (node: any): string => { return textContent(node.children || []); }; +const queryResultMessageText = (renderer: ReactTestRenderer): string => { + const values: string[] = []; + const walk = (node: any) => { + if (!node) return; + if (Array.isArray(node)) { + node.forEach(walk); + return; + } + if (typeof node !== 'object') return; + if (typeof node.props?.['data-query-result-message-textarea'] === 'string') { + values.push(String(node.props.value || '')); + } + walk(node.children || []); + }; + walk(renderer.toJSON()); + return values.join('\n'); +}; + const findButton = (renderer: ReactTestRenderer, text: string) => renderer.root.findAll((node) => node.type === 'button' && textContent(node).includes(text))[0]; @@ -789,8 +808,9 @@ describe('QueryEditor external SQL save', () => { await Promise.resolve(); }); - expect(textContent(renderer!.toJSON())).toContain('消息 1'); - expect(textContent(renderer!.toJSON())).toContain("Table 'users'. Scan count 1, logical reads 3."); + const rendered = `${textContent(renderer!.toJSON())}\n${queryResultMessageText(renderer!)}`; + expect(rendered).toContain('消息 1'); + expect(rendered).toContain("Table 'users'. Scan count 1, logical reads 3."); expect(dataGridState.latestProps?.columnNames).not.toEqual([]); }); @@ -945,9 +965,10 @@ describe('QueryEditor external SQL save', () => { await Promise.resolve(); }); - expect(textContent(renderer!.toJSON())).toContain('消息 2'); - expect(textContent(renderer!.toJSON())).toContain("insert into c_dyscript(projectid,name) values (1,'demo')"); - expect(textContent(renderer!.toJSON())).not.toContain('影响行数:0'); + const rendered = `${textContent(renderer!.toJSON())}\n${queryResultMessageText(renderer!)}`; + expect(rendered).toContain('消息 2'); + expect(rendered).toContain("insert into c_dyscript(projectid,name) values (1,'demo')"); + expect(rendered).not.toContain('影响行数:0'); expect(dataGridState.latestProps).toBeNull(); }); @@ -983,7 +1004,7 @@ describe('QueryEditor external SQL save', () => { await Promise.resolve(); }); - const rendered = textContent(renderer!.toJSON()); + const rendered = `${textContent(renderer!.toJSON())}\n${queryResultMessageText(renderer!)}`; expect(rendered).toContain('消息 1'); expect(rendered).toContain("select c.queryno,'' ,left(dbo.f_vendor_class"); expect(rendered).toContain("'char','',''),'自动生成'"); @@ -1017,9 +1038,10 @@ describe('QueryEditor external SQL save', () => { await Promise.resolve(); }); - expect(textContent(renderer!.toJSON())).toContain('消息 2'); - expect(textContent(renderer!.toJSON())).toContain("insert into c_dyscript(projectid,name) values (1,'demo')"); - expect(textContent(renderer!.toJSON())).not.toContain('影响行数:0'); + const rendered = `${textContent(renderer!.toJSON())}\n${queryResultMessageText(renderer!)}`; + expect(rendered).toContain('消息 2'); + expect(rendered).toContain("insert into c_dyscript(projectid,name) values (1,'demo')"); + expect(rendered).not.toContain('影响行数:0'); expect(dataGridState.latestProps).toBeNull(); }); diff --git a/frontend/src/components/QueryEditor.sql-analysis-workbench.i18n.test.ts b/frontend/src/components/QueryEditor.sql-analysis-workbench.i18n.test.ts new file mode 100644 index 0000000..85caf98 --- /dev/null +++ b/frontend/src/components/QueryEditor.sql-analysis-workbench.i18n.test.ts @@ -0,0 +1,366 @@ +import { readFileSync } from 'node:fs' +import { describe, expect, it } from 'vitest' + +const locales = ['zh-CN', 'zh-TW', 'en-US', 'ja-JP', 'de-DE', 'ru-RU'] as const +const catalogs = Object.fromEntries(locales.map((locale) => [ + locale, + JSON.parse(readFileSync(new URL(`../../../shared/i18n/${locale}.json`, import.meta.url), 'utf8')) as Record, +])) as Record> + +const sqlAnalysisWorkbenchSource = readFileSync(new URL('./explain/SqlAnalysisWorkbench.tsx', import.meta.url), 'utf8') +const explainWorkbenchSource = readFileSync(new URL('./explain/ExplainWorkbench.tsx', import.meta.url), 'utf8') +const slowQueryPanelSource = readFileSync(new URL('./explain/SlowQueryPanel.tsx', import.meta.url), 'utf8') +const explainGraphSource = readFileSync(new URL('./explain/ExplainGraph.tsx', import.meta.url), 'utf8') +const explainSidebarSource = readFileSync(new URL('./explain/ExplainSidebar.tsx', import.meta.url), 'utf8') +const slowQueryRailButtonSource = readFileSync(new URL('./sidebar/SlowQueryRailButton.tsx', import.meta.url), 'utf8') +const queryEditorSource = readFileSync(new URL('./QueryEditor.tsx', import.meta.url), 'utf8') + +const stripLineComments = (source: string): string => ( + source.replace(/^\s*\/\/.*$/gm, '') +) + +const sqlAnalysisWorkbenchRuntimeSource = stripLineComments(sqlAnalysisWorkbenchSource) +const explainWorkbenchRuntimeSource = stripLineComments(explainWorkbenchSource) +const slowQueryPanelRuntimeSource = stripLineComments(slowQueryPanelSource) +const explainGraphRuntimeSource = stripLineComments(explainGraphSource) +const explainSidebarRuntimeSource = stripLineComments(explainSidebarSource) +const slowQueryRailButtonRuntimeSource = stripLineComments(slowQueryRailButtonSource) + +const placeholdersOf = (value: string): string[] => ( + Array.from(value.matchAll(/\{\{\s*([\w.]+)\s*\}\}/g), (match) => match[1]).sort() +) + +const requiredKeys = [ + 'sql_analysis.workbench.validation.sql_required', + 'sql_analysis.workbench.alert.connection_missing_title', + 'sql_analysis.workbench.alert.connection_missing_description', + 'sql_analysis.workbench.title', + 'sql_analysis.workbench.view.slow_query', + 'sql_analysis.workbench.view.diagnose', + 'sql_analysis.workbench.editor.placeholder', + 'sql_analysis.workbench.editor.hint', + 'sql_analysis.workbench.action.run', + 'sql_analysis.explain.error.query_required', + 'sql_analysis.explain.error.run_failed', + 'sql_analysis.explain.loading', + 'sql_analysis.explain.error.title', + 'sql_analysis.explain.empty', + 'sql_analysis.explain.view.plan', + 'sql_analysis.explain.view.raw', + 'sql_analysis.explain.meta.node_count', + 'sql_analysis.explain.raw.empty', + 'sql_analysis.explain_graph.label.table', + 'sql_analysis.explain_graph.label.index', + 'sql_analysis.explain_graph.metric.est_rows', + 'sql_analysis.explain_graph.metric.actual_rows', + 'sql_analysis.explain_graph.metric.cost', + 'sql_analysis.explain_graph.flag.full_scan', + 'sql_analysis.explain_graph.flag.filesort', + 'sql_analysis.explain_graph.flag.temp_table', + 'sql_analysis.sidebar.stats.title', + 'sql_analysis.sidebar.stats.total_cost', + 'sql_analysis.sidebar.stats.total_duration', + 'sql_analysis.sidebar.stats.rows_read', + 'sql_analysis.sidebar.stats.buffer_hit', + 'sql_analysis.sidebar.stats.max_est_rows', + 'sql_analysis.sidebar.warning.full_scan', + 'sql_analysis.sidebar.warning.filesort', + 'sql_analysis.sidebar.warning.temp_table', + 'sql_analysis.sidebar.node.title', + 'sql_analysis.sidebar.node.op_type', + 'sql_analysis.sidebar.node.op_detail', + 'sql_analysis.sidebar.node.table', + 'sql_analysis.sidebar.node.index', + 'sql_analysis.sidebar.node.est_rows', + 'sql_analysis.sidebar.node.actual_rows', + 'sql_analysis.sidebar.node.loops', + 'sql_analysis.sidebar.node.cost', + 'sql_analysis.sidebar.node.duration', + 'sql_analysis.sidebar.node.buffer_hit', + 'sql_analysis.sidebar.node.flags', + 'sql_analysis.sidebar.node.extra', + 'sql_analysis.sidebar.suggestions.title', + 'sql_analysis.sidebar.suggestions.empty', + 'sql_analysis.sidebar.suggestions.rows', + 'sql_analysis.sidebar.suggestions.table', + 'sql_analysis.slow_query.error.load_failed', + 'sql_analysis.slow_query.message.cleared', + 'sql_analysis.slow_query.error.clear_failed', + 'sql_analysis.slow_query.sort.duration', + 'sql_analysis.slow_query.sort.rows_read', + 'sql_analysis.slow_query.sort.recent', + 'sql_analysis.slow_query.tooltip.clear_current', + 'sql_analysis.slow_query.loading', + 'sql_analysis.slow_query.error.title', + 'sql_analysis.slow_query.empty', + 'sql_analysis.slow_query.title', + 'sql_analysis.slow_query.current_connection', + 'sql_analysis.slow_query.metric.rows_read', + 'sql_analysis.slow_query.metric.rows_returned', + 'sql_analysis.slow_query.preview.empty', + 'sql_analysis.slow_query.relative.just_now', + 'sql_analysis.slow_query.relative.minutes_ago', + 'sql_analysis.slow_query.relative.hours_ago', + 'sql_analysis.slow_query.relative.days_ago', + 'sql_analysis.slow_query.rail.tooltip.no_connection', + 'sql_analysis.slow_query.rail.tooltip.open', + 'sql_analysis.slow_query.rail.aria_label', +] as const + +describe('SQL analysis workbench i18n', () => { + it('localizes the sql analysis workbench shell copy', () => { + ;[ + '请输入要诊断的 SQL', + '当前工作台对应的连接已不可用', + '请重新选择一个有效连接后再打开 SQL 分析工作台。', + 'SQL 分析工作台', + '慢 SQL', + 'SQL 诊断', + '输入要诊断的 SQL,或从慢 SQL 列表点击条目带入', + '支持从慢 SQL 列表点击条目直接带入', + '运行诊断', + ].forEach((text) => { + expect(sqlAnalysisWorkbenchRuntimeSource).not.toContain(text) + }) + + ;[ + 'useI18n(', + "t('sql_analysis.workbench.validation.sql_required')", + "t('sql_analysis.workbench.alert.connection_missing_title')", + "t('sql_analysis.workbench.alert.connection_missing_description')", + "t('sql_analysis.workbench.title')", + "t('sql_analysis.workbench.view.slow_query')", + "t('sql_analysis.workbench.view.diagnose')", + "t('sql_analysis.workbench.editor.placeholder')", + "t('sql_analysis.workbench.editor.hint')", + "t('sql_analysis.workbench.action.run')", + ].forEach((text) => { + expect(sqlAnalysisWorkbenchSource).toContain(text) + }) + }) + + it('localizes explain report copy while keeping raw payload output untouched', () => { + ;[ + '查询语句为空', + '诊断失败', + '正在执行 EXPLAIN 并解析计划...', + '输入 SQL 后运行诊断', + '执行计划', + '原文', + '节点', + '(无原文)', + 'SQL 诊断工作台', + ].forEach((text) => { + expect(explainWorkbenchRuntimeSource).not.toContain(text) + }) + + ;[ + 'useI18n(', + "t('sql_analysis.explain.error.query_required')", + "t('sql_analysis.explain.error.run_failed')", + "t('sql_analysis.explain.loading')", + "t('sql_analysis.explain.error.title')", + "t('sql_analysis.explain.empty')", + "t('sql_analysis.explain.view.plan')", + "t('sql_analysis.explain.view.raw')", + "t('sql_analysis.explain.meta.node_count'", + "t('sql_analysis.explain.raw.empty')", + "t('sql_analysis.workbench.title')", + ].forEach((text) => { + expect(explainWorkbenchSource).toContain(text) + }) + + expect(explainWorkbenchSource).toContain('report.plan.rawPayload') + }) + + it('localizes slow query panel copy while keeping sql preview and db type raw', () => { + ;[ + '加载失败', + '已清空慢查询历史', + '清空失败', + '按耗时', + '按扫描行数', + '按时间', + '刷新', + '清空当前连接的历史', + '加载慢查询历史...', + '暂无慢查询记录(阈值 500ms)', + '慢 SQL 历史', + '(当前连接)', + '扫描', + '返回', + '(无 SQL 预览)', + '刚刚', + '分钟前', + '小时前', + '天前', + ].forEach((text) => { + expect(slowQueryPanelRuntimeSource).not.toContain(text) + }) + + ;[ + 'useI18n(', + "t('common.refresh')", + "t('sql_analysis.slow_query.error.load_failed')", + "t('sql_analysis.slow_query.message.cleared')", + "t('sql_analysis.slow_query.error.clear_failed')", + "t('sql_analysis.slow_query.sort.duration')", + "t('sql_analysis.slow_query.sort.rows_read')", + "t('sql_analysis.slow_query.sort.recent')", + "t('sql_analysis.slow_query.tooltip.clear_current')", + "t('sql_analysis.slow_query.loading')", + "t('sql_analysis.slow_query.error.title')", + "t('sql_analysis.slow_query.empty'", + "t('sql_analysis.slow_query.title')", + "t('sql_analysis.slow_query.current_connection')", + "t('sql_analysis.slow_query.metric.rows_read')", + "t('sql_analysis.slow_query.metric.rows_returned')", + "t('sql_analysis.slow_query.preview.empty')", + "t('sql_analysis.slow_query.relative.just_now')", + "t('sql_analysis.slow_query.relative.minutes_ago'", + "t('sql_analysis.slow_query.relative.hours_ago'", + "t('sql_analysis.slow_query.relative.days_ago'", + ].forEach((text) => { + expect(slowQueryPanelSource).toContain(text) + }) + + expect(slowQueryPanelSource).toContain('record.sqlPreview') + expect(slowQueryPanelSource).toContain('record.dbType') + }) + + it('localizes explain graph, explain sidebar and slow-query rail labels', () => { + ;[ + '表:', + '索引:', + '估算', + '实际', + '成本', + '全表扫描', + '额外排序', + '临时表', + ].forEach((text) => { + expect(explainGraphRuntimeSource).not.toContain(text) + }) + + ;[ + 'useI18n(', + "t('sql_analysis.explain_graph.label.table')", + "t('sql_analysis.explain_graph.label.index')", + "t('sql_analysis.explain_graph.metric.est_rows')", + "t('sql_analysis.explain_graph.metric.actual_rows')", + "t('sql_analysis.explain_graph.metric.cost')", + "t('sql_analysis.explain_graph.flag.full_scan')", + "t('sql_analysis.explain_graph.flag.filesort')", + "t('sql_analysis.explain_graph.flag.temp_table')", + ].forEach((text) => { + expect(explainGraphSource).toContain(text) + }) + + ;[ + '执行统计', + '总成本', + '总耗时', + '扫描行数', + '缓冲命中', + '最大单节点行数', + '存在全表扫描', + '存在额外排序', + '使用临时表', + '操作类型', + '操作详情', + '表', + '索引', + '估算行数', + '实际行数', + '循环次数', + '标志', + '节点详情', + 'Extra 字段', + '索引建议', + '未发现明显性能问题', + '行', + '表:', + ].forEach((text) => { + expect(explainSidebarRuntimeSource).not.toContain(text) + }) + + ;[ + 'useI18n(', + "t('sql_analysis.sidebar.stats.title')", + "t('sql_analysis.sidebar.stats.total_cost')", + "t('sql_analysis.sidebar.stats.total_duration')", + "t('sql_analysis.sidebar.stats.rows_read')", + "t('sql_analysis.sidebar.stats.buffer_hit')", + "t('sql_analysis.sidebar.stats.max_est_rows')", + "t('sql_analysis.sidebar.warning.full_scan')", + "t('sql_analysis.sidebar.warning.filesort')", + "t('sql_analysis.sidebar.warning.temp_table')", + "t('sql_analysis.sidebar.node.title')", + "t('sql_analysis.sidebar.node.op_type')", + "t('sql_analysis.sidebar.node.op_detail')", + "t('sql_analysis.sidebar.node.table')", + "t('sql_analysis.sidebar.node.index')", + "t('sql_analysis.sidebar.node.est_rows')", + "t('sql_analysis.sidebar.node.actual_rows')", + "t('sql_analysis.sidebar.node.loops')", + "t('sql_analysis.sidebar.node.cost')", + "t('sql_analysis.sidebar.node.duration')", + "t('sql_analysis.sidebar.node.buffer_hit')", + "t('sql_analysis.sidebar.node.flags')", + "t('sql_analysis.sidebar.node.extra'", + "t('sql_analysis.sidebar.suggestions.title'", + "t('sql_analysis.sidebar.suggestions.empty')", + "t('sql_analysis.sidebar.suggestions.rows'", + "t('sql_analysis.sidebar.suggestions.table'", + ].forEach((text) => { + expect(explainSidebarSource).toContain(text) + }) + + ;[ + '请先打开一个数据库连接的标签页', + '打开当前连接的 SQL 分析工作台', + '慢 SQL 工作台', + ].forEach((text) => { + expect(slowQueryRailButtonRuntimeSource).not.toContain(text) + }) + + ;[ + 'useI18n(', + "t('sql_analysis.slow_query.rail.tooltip.no_connection')", + "t('sql_analysis.slow_query.rail.tooltip.open')", + "t('sql_analysis.slow_query.rail.aria_label')", + 'buildSqlAnalysisWorkbenchTab', + "view: 'slow-query'", + ].forEach((text) => { + expect(slowQueryRailButtonSource).toContain(text) + }) + }) + + it('uses shortcut translation keys without Chinese fallback labels in query editor menus', () => { + ;[ + "{translate('app.shortcuts.action.diagnoseQuery.label' as any) || 'SQL 诊断'}", + "{translate('app.shortcuts.action.showSlowQueries.label' as any) || '慢 SQL 历史'}", + ].forEach((text) => { + expect(queryEditorSource).not.toContain(text) + }) + + ;[ + "translate('app.shortcuts.action.diagnoseQuery.label' as any)", + "translate('app.shortcuts.action.showSlowQueries.label' as any)", + ].forEach((text) => { + expect(queryEditorSource).toContain(text) + }) + }) + + it('keeps sql analysis catalog keys in all supported languages with matching placeholders', () => { + const zhCnCatalog = catalogs['zh-CN'] + requiredKeys.forEach((key) => { + expect(zhCnCatalog, `zh-CN:${key}`).toHaveProperty(key) + const expectedPlaceholders = placeholdersOf(zhCnCatalog[key]) + locales.forEach((locale) => { + expect(catalogs[locale], `${locale}:${key}`).toHaveProperty(key) + expect(placeholdersOf(catalogs[locale][key]), `${locale}:${key}`).toEqual(expectedPlaceholders) + }) + }) + }) +}) diff --git a/frontend/src/components/QueryEditor.tsx b/frontend/src/components/QueryEditor.tsx index 23c58a5..ed032af 100644 --- a/frontend/src/components/QueryEditor.tsx +++ b/frontend/src/components/QueryEditor.tsx @@ -4073,7 +4073,7 @@ const QueryEditor: React.FC<{ tab: TabData; isActive?: boolean }> = ({ tab, isAc key: 'diagnose-query', label: ( - {translate('app.shortcuts.action.diagnoseQuery.label' as any) || 'SQL 诊断'} + {translate('app.shortcuts.action.diagnoseQuery.label' as any)} {diagnoseQueryShortcutBinding?.enabled && diagnoseQueryShortcutBinding.combo && ( {getShortcutDisplayLabel(diagnoseQueryShortcutBinding.combo, activeShortcutPlatform)} @@ -4087,7 +4087,7 @@ const QueryEditor: React.FC<{ tab: TabData; isActive?: boolean }> = ({ tab, isAc key: 'show-slow-queries', label: ( - {translate('app.shortcuts.action.showSlowQueries.label' as any) || '慢 SQL 历史'} + {translate('app.shortcuts.action.showSlowQueries.label' as any)} {showSlowQueriesShortcutBinding?.enabled && showSlowQueriesShortcutBinding.combo && ( {getShortcutDisplayLabel(showSlowQueriesShortcutBinding.combo, activeShortcutPlatform)} diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index 37ff847..921148b 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -2949,8 +2949,16 @@ const Sidebar: React.FC<{ modalScrollSectionStyle={modalScrollSectionStyle} modalHintTextStyle={modalHintTextStyle} darkMode={darkMode} - tableModalTitle={renderSidebarModalTitle(, "批量操作表", "按对象批量导出结构、数据或完整备份。")} - databaseModalTitle={renderSidebarModalTitle(, "批量操作库", "按数据库批量导出结构,或生成结构加数据的备份。")} + tableModalTitle={renderSidebarModalTitle( + , + t('sidebar.modal.batch_tables.title'), + t('sidebar.modal.batch_tables.description'), + )} + databaseModalTitle={renderSidebarModalTitle( + , + t('sidebar.modal.batch_databases.title'), + t('sidebar.modal.batch_databases.description'), + )} isBatchModalOpen={isBatchModalOpen} setIsBatchModalOpen={setIsBatchModalOpen} selectedConnection={selectedConnection} diff --git a/frontend/src/components/SidebarAIPrompt.i18n.test.ts b/frontend/src/components/SidebarAIPrompt.i18n.test.ts index 90cdf57..55d391c 100644 --- a/frontend/src/components/SidebarAIPrompt.i18n.test.ts +++ b/frontend/src/components/SidebarAIPrompt.i18n.test.ts @@ -2,6 +2,8 @@ import { readFileSync } from 'node:fs'; import { describe, expect, it } from 'vitest'; const source = readFileSync(new URL('./Sidebar.tsx', import.meta.url), 'utf8'); +const objectActionsSource = readFileSync(new URL('./sidebar/useSidebarObjectActions.tsx', import.meta.url), 'utf8'); +const searchModelSource = readFileSync(new URL('./sidebar/useSidebarSearchModel.tsx', import.meta.url), 'utf8'); const locales = ['zh-CN', 'zh-TW', 'en-US', 'ja-JP', 'de-DE', 'ru-RU'] as const; const requiredKeys = [ 'sidebar.message.ai_table_context_missing', @@ -9,7 +11,6 @@ const requiredKeys = [ 'sidebar.ai_prompt.explain.detail', 'sidebar.ai_prompt.query.intro', 'sidebar.ai_prompt.query.detail', - 'sidebar.command_search.action.ask_ai.title', ]; describe('Sidebar AI prompt i18n', () => { @@ -23,18 +24,21 @@ describe('Sidebar AI prompt i18n', () => { "title: '让 AI 回答'", ].forEach((legacyCopy) => { expect(source).not.toContain(legacyCopy); + expect(objectActionsSource).not.toContain(legacyCopy); + expect(searchModelSource).not.toContain(legacyCopy); }); requiredKeys.forEach((key) => { - expect(source).toContain(`t('${key}'`); + expect(objectActionsSource).toContain(`t('${key}'`); }); - expect(source).toContain('DBShowCreateTable'); - expect(source).toContain('conn.dbName'); - expect(source).toContain('tableName'); - expect(source).toContain('ddl ? `\\n\\`\\`\\`sql'); - expect(source).toContain('${ddl}'); - expect(source).toContain('v2CommandSearchQuery.aiPrompt'); + expect(objectActionsSource).toContain('DBShowCreateTable'); + expect(objectActionsSource).toContain('conn.dbName'); + expect(objectActionsSource).toContain('tableName'); + expect(objectActionsSource).toContain('ddl ? `\\n\\`\\`\\`sql'); + expect(objectActionsSource).toContain('${ddl}'); + expect(searchModelSource).toContain("t('sidebar.command_search.action.ask_ai.title')"); + expect(searchModelSource).toContain('v2CommandSearchQuery.aiPrompt'); }); it('keeps AI prompt keys available in every locale', () => { diff --git a/frontend/src/components/SidebarBatchActions.i18n.test.ts b/frontend/src/components/SidebarBatchActions.i18n.test.ts index 0883e97..d54d052 100644 --- a/frontend/src/components/SidebarBatchActions.i18n.test.ts +++ b/frontend/src/components/SidebarBatchActions.i18n.test.ts @@ -2,6 +2,9 @@ import { readFileSync } from 'node:fs'; import { describe, expect, it } from 'vitest'; const sidebarSource = readFileSync(new URL('./Sidebar.tsx', import.meta.url), 'utf8'); +const batchModalSource = readFileSync(new URL('./sidebar/SidebarBatchExportModals.tsx', import.meta.url), 'utf8'); +const batchHookSource = readFileSync(new URL('./sidebar/useSidebarBatchExport.ts', import.meta.url), 'utf8'); +const batchTabSource = readFileSync(new URL('../utils/tableExportTab.ts', import.meta.url), 'utf8'); const locales = ['zh-CN', 'zh-TW', 'en-US', 'ja-JP', 'de-DE', 'ru-RU'] as const; const requiredKeys = [ @@ -38,8 +41,15 @@ const requiredKeys = [ 'sidebar.batch.group.tables', 'sidebar.batch.group.views', 'sidebar.batch.no_matching_objects', + 'sidebar.tab.batch_export_objects', + 'sidebar.tab.batch_export_objects_database', + 'sidebar.tab.batch_export_databases', ] as const; +const placeholders = (value: string): string[] => [...value.matchAll(/\{\{(\w+)\}\}/g)] + .map((match) => match[1]) + .sort(); + describe('Sidebar batch actions i18n', () => { it('localizes batch table and database action copy', () => { [ @@ -47,10 +57,16 @@ describe('Sidebar batch actions i18n', () => { '批量操作库', '按对象批量导出结构、数据或完整备份。', '按数据库批量导出结构,或生成结构加数据的备份。', + ].forEach((rawSnippet) => { + expect(sidebarSource).not.toContain(rawSnippet); + }); + + [ '清空表', '导出结构', '仅数据(INSERT)', '备份(结构+数据)', + '取消', '选择连接:', '选择数据库:', '请选择连接', @@ -71,12 +87,81 @@ describe('Sidebar batch actions i18n', () => { '连接选定后会加载当前连接下可批量导出的数据库列表。', '个库', ].forEach((rawSnippet) => { - expect(sidebarSource).not.toContain(rawSnippet); + expect(batchModalSource).not.toContain(rawSnippet); }); - requiredKeys.forEach((key) => { + [ + '`批量导出 ${dbName} 对象`', + "'批量导出对象'", + "title: '批量导出库'", + ].forEach((rawSnippet) => { + expect(batchHookSource).not.toContain(rawSnippet); + }); + + [ + "title: String(input.title || '批量导出对象').trim() || '批量导出对象'", + "title: String(input.title || '批量导出库').trim() || '批量导出库'", + ].forEach((rawSnippet) => { + expect(batchTabSource).not.toContain(rawSnippet); + }); + + [ + 'sidebar.action.batch_tables', + 'sidebar.action.batch_databases', + 'sidebar.modal.batch_tables.title', + 'sidebar.modal.batch_tables.description', + 'sidebar.modal.batch_databases.title', + 'sidebar.modal.batch_databases.description', + ].forEach((key) => { expect(sidebarSource, key).toContain(`t('${key}'`); }); + + [ + 'sidebar.action.clear_tables', + 'sidebar.action.export_schema', + 'sidebar.action.export_data_only', + 'sidebar.action.backup_schema_data', + 'sidebar.action.select_all', + 'sidebar.action.clear_selection', + 'sidebar.action.invert_selection', + 'sidebar.action.export_database_schema_count', + 'sidebar.action.backup_database_count', + 'sidebar.field.select_connection', + 'sidebar.field.select_database', + 'sidebar.placeholder.select_connection', + 'sidebar.placeholder.select_connection_first', + 'sidebar.placeholder.filter_table_view', + 'sidebar.filter.all_objects', + 'sidebar.filter.tables_only', + 'sidebar.filter.views_only', + 'sidebar.filter.scope_filtered', + 'sidebar.filter.scope_all', + 'sidebar.modal.batch_tables.selection_hint', + 'sidebar.modal.batch_databases.selection_hint', + 'sidebar.batch.filtered_count', + 'sidebar.batch.selected_objects', + 'sidebar.batch.selected_databases', + 'sidebar.batch.group.tables', + 'sidebar.batch.group.views', + 'sidebar.batch.no_matching_objects', + ].forEach((key) => { + expect(batchModalSource, key).toContain(`t('${key}'`); + }); + + [ + 'sidebar.tab.batch_export_objects', + 'sidebar.tab.batch_export_objects_database', + 'sidebar.tab.batch_export_databases', + ].forEach((key) => { + expect(batchHookSource, key).toContain(`t('${key}'`); + }); + + [ + 'sidebar.tab.batch_export_objects', + 'sidebar.tab.batch_export_databases', + ].forEach((key) => { + expect(batchTabSource, key).toContain(`t('${key}'`); + }); }); it('keeps batch action catalog entries available in every locale', () => { @@ -85,6 +170,9 @@ describe('Sidebar batch actions i18n', () => { requiredKeys.forEach((key) => { expect(catalog[key], `${locale}:${key}`).toBeTruthy(); }); + expect(placeholders(catalog['sidebar.tab.batch_export_objects'])).toEqual([]); + expect(placeholders(catalog['sidebar.tab.batch_export_objects_database'])).toEqual(['database']); + expect(placeholders(catalog['sidebar.tab.batch_export_databases'])).toEqual([]); }); }); }); diff --git a/frontend/src/components/SidebarObjectActions.i18n.test.ts b/frontend/src/components/SidebarObjectActions.i18n.test.ts index 3d11012..a8eb067 100644 --- a/frontend/src/components/SidebarObjectActions.i18n.test.ts +++ b/frontend/src/components/SidebarObjectActions.i18n.test.ts @@ -1,7 +1,8 @@ import { readFileSync } from 'node:fs'; import { describe, expect, it } from 'vitest'; -const sidebarSource = readFileSync(new URL('./Sidebar.tsx', import.meta.url), 'utf8'); +const objectActionsSource = readFileSync(new URL('./sidebar/useSidebarObjectActions.tsx', import.meta.url), 'utf8'); +const legacyMenuSource = readFileSync(new URL('./sidebar/sidebarLegacyNodeMenu.tsx', import.meta.url), 'utf8'); const tableDataDangerActionsSource = readFileSync(new URL('./tableDataDangerActions.ts', import.meta.url), 'utf8'); const locales = ['zh-CN', 'zh-TW', 'en-US', 'ja-JP', 'de-DE', 'ru-RU'] as const; @@ -12,6 +13,7 @@ const requiredKeys = [ 'sidebar.message.schema_renamed', 'sidebar.message.schema_target_delete_missing', 'sidebar.message.schema_deleted', + 'sidebar.message.table_export_target_missing', 'sidebar.modal.confirm_delete_schema.title', 'sidebar.modal.confirm_delete_schema.content', 'sidebar.menu.edit_schema', @@ -20,6 +22,7 @@ const requiredKeys = [ 'sidebar.menu.delete_schema', 'sidebar.menu.copy_object_name', 'sidebar.menu.table_structure', + 'sidebar.menu.design_table', 'sidebar.menu.copy_table_name', 'sidebar.menu.copy_table_structure', 'sidebar.menu.backup_table_sql', @@ -28,24 +31,26 @@ const requiredKeys = [ 'sidebar.menu.clear_table', 'sidebar.menu.delete_table', 'sidebar.menu.export_table_data', - 'sidebar.menu.export_csv', - 'sidebar.menu.export_xlsx', - 'sidebar.menu.export_json', - 'sidebar.menu.export_markdown', - 'sidebar.menu.export_html', + 'sidebar.v2_table_menu.new_rollup', 'sidebar.message.table_name_required', 'sidebar.message.table_name_unchanged', 'sidebar.message.table_renamed', 'sidebar.message.table_deleted', + 'sidebar.modal.confirm_delete_table.title', + 'sidebar.modal.confirm_delete_table.content', 'sidebar.message.view_name_required', 'sidebar.message.view_name_unchanged', 'sidebar.message.view_renamed', 'sidebar.message.view_deleted', + 'sidebar.modal.confirm_delete_view.title', + 'sidebar.modal.confirm_delete_view.content', 'sidebar.message.rename_failed', 'sidebar.message.delete_failed', 'sidebar.message.table_data_action_loading', 'sidebar.message.table_data_action_success', 'sidebar.message.table_data_action_failed', + 'sidebar.modal.confirm_table_data_action.title', + 'sidebar.modal.confirm_table_data_action.content', 'sidebar.table_action.truncate.label', 'sidebar.table_action.truncate.progress', 'sidebar.table_action.clear.label', @@ -65,7 +70,10 @@ describe('Sidebar object actions i18n', () => { '确定删除模式', '模式删除成功', '删除失败: ', + '未识别到表名,无法导出', + '新增 Rollup', '表名不能为空', + '新旧表名相同,无需修改', '表重命名成功', '确认删除表', '确定删除表', @@ -76,10 +84,16 @@ describe('Sidebar object actions i18n', () => { '${progressLabel}成功', '${progressLabel}失败', '视图名称不能为空', + '新旧视图名相同,无需修改', '视图重命名成功', '确认删除视图', '确定删除视图', '视图删除成功', + ].forEach((rawSnippet) => { + expect(objectActionsSource).not.toContain(rawSnippet); + }); + + [ "label: '编辑模式'", "label: '导出当前模式表结构 (SQL)'", "label: '备份当前模式全部表 (结构+数据 SQL)'", @@ -96,9 +110,8 @@ describe('Sidebar object actions i18n', () => { "label: '清空表'", "label: '删除表'", "label: '导出表数据'", - "label: '导出 CSV'", ].forEach((rawSnippet) => { - expect(sidebarSource).not.toContain(rawSnippet); + expect(legacyMenuSource).not.toContain(rawSnippet); }); [ @@ -107,9 +120,35 @@ describe('Sidebar object actions i18n', () => { "t('sidebar.message.schema_name_unchanged')", "t('sidebar.message.schema_renamed')", "t('sidebar.message.schema_target_delete_missing')", + "t('sidebar.message.table_export_target_missing')", "t('sidebar.message.schema_deleted')", + "t('sidebar.v2_table_menu.new_rollup'", "t('sidebar.modal.confirm_delete_schema.title')", "t('sidebar.modal.confirm_delete_schema.content'", + "t('sidebar.message.table_name_required')", + "t('sidebar.message.table_name_unchanged')", + "t('sidebar.message.table_renamed')", + "t('sidebar.message.table_deleted')", + "t('sidebar.modal.confirm_delete_table.title')", + "t('sidebar.modal.confirm_delete_table.content'", + "t('sidebar.message.view_name_required')", + "t('sidebar.message.view_name_unchanged')", + "t('sidebar.message.view_renamed')", + "t('sidebar.message.view_deleted')", + "t('sidebar.modal.confirm_delete_view.title')", + "t('sidebar.modal.confirm_delete_view.content'", + "t('sidebar.message.rename_failed'", + "t('sidebar.message.delete_failed'", + "t('sidebar.message.table_data_action_loading'", + "t('sidebar.message.table_data_action_success'", + "t('sidebar.message.table_data_action_failed'", + "t('sidebar.modal.confirm_table_data_action.title'", + "t('sidebar.modal.confirm_table_data_action.content'", + ].forEach((lookup) => { + expect(objectActionsSource).toContain(lookup); + }); + + [ "t('sidebar.menu.edit_schema')", "t('sidebar.menu.export_current_schema_sql')", "t('sidebar.menu.backup_current_schema_sql')", @@ -117,6 +156,7 @@ describe('Sidebar object actions i18n', () => { "t('sidebar.menu.copy_object_name')", "t('message_publish_modal.title')", "t('sidebar.menu.table_structure')", + "t('sidebar.menu.design_table')", "t('sidebar.menu.copy_table_name')", "t('sidebar.menu.copy_table_structure')", "t('sidebar.menu.backup_table_sql')", @@ -125,26 +165,8 @@ describe('Sidebar object actions i18n', () => { "t('sidebar.menu.clear_table')", "t('sidebar.menu.delete_table')", "t('sidebar.menu.export_table_data')", - "t('sidebar.menu.export_csv')", - "t('sidebar.menu.export_xlsx')", - "t('sidebar.menu.export_json')", - "t('sidebar.menu.export_markdown')", - "t('sidebar.menu.export_html')", - "t('sidebar.message.table_name_required')", - "t('sidebar.message.table_name_unchanged')", - "t('sidebar.message.table_renamed')", - "t('sidebar.message.table_deleted')", - "t('sidebar.message.view_name_required')", - "t('sidebar.message.view_name_unchanged')", - "t('sidebar.message.view_renamed')", - "t('sidebar.message.view_deleted')", - "t('sidebar.message.rename_failed'", - "t('sidebar.message.delete_failed'", - "t('sidebar.message.table_data_action_loading'", - "t('sidebar.message.table_data_action_success'", - "t('sidebar.message.table_data_action_failed'", ].forEach((lookup) => { - expect(sidebarSource).toContain(lookup); + expect(legacyMenuSource).toContain(lookup); }); }); diff --git a/frontend/src/components/SidebarResidualActions.i18n.test.ts b/frontend/src/components/SidebarResidualActions.i18n.test.ts index 72b3ae3..b4ec7fa 100644 --- a/frontend/src/components/SidebarResidualActions.i18n.test.ts +++ b/frontend/src/components/SidebarResidualActions.i18n.test.ts @@ -1,7 +1,9 @@ import { readFileSync } from 'node:fs'; import { describe, expect, it } from 'vitest'; -const source = readFileSync(new URL('./Sidebar.tsx', import.meta.url), 'utf8'); +const objectActionsSource = readFileSync(new URL('./sidebar/useSidebarObjectActions.tsx', import.meta.url), 'utf8'); +const legacyMenuSource = readFileSync(new URL('./sidebar/sidebarLegacyNodeMenu.tsx', import.meta.url), 'utf8'); +const v2ActionHandlersSource = readFileSync(new URL('./sidebar/useSidebarV2ActionHandlers.tsx', import.meta.url), 'utf8'); const locales = ['zh-CN', 'zh-TW', 'en-US', 'ja-JP', 'de-DE', 'ru-RU'] as const; const requiredKeys = [ @@ -31,12 +33,24 @@ describe('Sidebar residual actions i18n', () => { '重命名查询失败: ', '查询已绑定到 ', '绑定查询失败: ', + '数据库创建成功', + '创建失败: ', '当前对象不支持测试发送消息', '(已提交 ', '测试消息已发送到 ', "destination || '目标'", + ].forEach((legacyCopy) => { + expect(objectActionsSource).not.toContain(legacyCopy); + }); + + [ "'释放连接失败'", '连接已从侧边栏断开,但后端连接释放失败', + ].forEach((legacyCopy) => { + expect(v2ActionHandlersSource).not.toContain(legacyCopy); + }); + + [ "label: '刷新'", "label: '新建表'", "label: '按名称排序'", @@ -49,19 +63,44 @@ describe('Sidebar residual actions i18n', () => { '确定要删除标签', "label: '绑定到连接'", '删除查询失败: ', - '数据库创建成功', - '创建失败: ', - 'aria-label={`切换到连接 ${conn.name}`}', ].forEach((legacyCopy) => { - expect(source).not.toContain(legacyCopy); + expect(legacyMenuSource).not.toContain(legacyCopy); }); - requiredKeys.forEach((key) => { - expect(source).toContain(`t('${key}'`); + [ + 'sidebar.message.saved_query_rename_failed', + 'sidebar.message.saved_query_rebind_success', + 'sidebar.message.saved_query_rebind_failed', + 'sidebar.message.database_created', + 'sidebar.message.operation_create_failed', + 'sidebar.message.message_publish_unsupported', + 'sidebar.message.message_publish_success', + 'sidebar.message.message_publish_success_with_count', + 'sidebar.message.message_publish_target_fallback', + ].forEach((key) => { + expect(objectActionsSource).toContain(`t('${key}'`); }); - expect(source).toContain("label: conn.name || conn.id"); - expect(source).toContain('node.title'); + [ + 'sidebar.message.connection_release_failed_from_sidebar', + 'sidebar.menu.new_table', + 'sidebar.menu.create_event', + 'sidebar.tab.new_event', + 'sidebar.modal.confirm_delete_tag.content', + 'sidebar.menu.bind_to_connection', + 'sidebar.message.saved_query_delete_failed', + ].forEach((key) => { + expect(`${legacyMenuSource}\n${v2ActionHandlersSource}`).toContain(`t('${key}'`); + }); + + [ + 'sidebar.message.connection_release_failed_from_sidebar', + ].forEach((key) => { + expect(v2ActionHandlersSource).toContain(`t('${key}'`); + }); + + expect(legacyMenuSource).toContain("label: conn.name || conn.id"); + expect(legacyMenuSource).toContain('node.title'); }); it('keeps residual Sidebar keys available in every locale', () => { diff --git a/frontend/src/components/TableOverview.tsx b/frontend/src/components/TableOverview.tsx index 874e49e..19adeca 100644 --- a/frontend/src/components/TableOverview.tsx +++ b/frontend/src/components/TableOverview.tsx @@ -579,7 +579,7 @@ const TableOverview: React.FC = ({ tab }) => { connectionId: tab.connectionId, dbName: tab.dbName, tableName, - title: `导出 ${tableName}`, + title: t('file.backend.dialog.export_table', { table: tableName }), objectType: 'table', rowCountByScope: Number.isFinite(Number(totalRows)) && Number(totalRows) > 0 ? { all: Math.trunc(Number(totalRows)) } diff --git a/frontend/src/components/connectionModal/connectionModalUri.ts b/frontend/src/components/connectionModal/connectionModalUri.ts index 86640d6..0819092 100644 --- a/frontend/src/components/connectionModal/connectionModalUri.ts +++ b/frontend/src/components/connectionModal/connectionModalUri.ts @@ -1164,9 +1164,14 @@ export const getUriPlaceholder = (dbType: string) => { if (dbType === "rabbitmq") { return "rabbitmq://guest:guest@127.0.0.1:15672/%2F?defaultQueue=orders.queue&exchange=events.topic&timeout=30"; } - if (dbType === "redis") { - return "redis://:pass@127.0.0.1:6379,127.0.0.2:6379/0?topology=cluster 或 redis://:pass@10.0.0.1:26379,10.0.0.2:26379/0?topology=sentinel&master=mymaster"; - } + if (dbType === "redis") { + return t("connection.modal.example.or", { + first: + "redis://:pass@127.0.0.1:6379,127.0.0.2:6379/0?topology=cluster", + second: + "redis://:pass@10.0.0.1:26379,10.0.0.2:26379/0?topology=sentinel&master=mymaster", + }); + } if (dbType === "oracle") { return "oracle://user:pass@127.0.0.1:1521/ORCLPDB1"; } diff --git a/frontend/src/components/explain/ExplainGraph.tsx b/frontend/src/components/explain/ExplainGraph.tsx index 2ff2f5c..982b468 100644 --- a/frontend/src/components/explain/ExplainGraph.tsx +++ b/frontend/src/components/explain/ExplainGraph.tsx @@ -19,6 +19,7 @@ import { opTypeColor, formatNumber, } from '../../utils/explainTypes' +import { useI18n } from '../../i18n/provider' // 执行计划图主组件。 // 使用 react-flow 渲染扁平节点数组,dagre 自动计算树形布局。 @@ -144,6 +145,7 @@ const ExplainGraphNodeRenderer = memo(function ExplainGraphNodeRenderer({ }: { data: ExplainGraphNodeData }) { + const { t } = useI18n() const { node, isSelected } = data const color = opTypeColor(node.opType) const hasFullScan = node.flags?.includes('FULL_SCAN') @@ -168,38 +170,38 @@ const ExplainGraphNodeRenderer = memo(function ExplainGraphNodeRenderer({
{node.opDetail || node.opType}
{node.table && (
- 表: + {t('sql_analysis.explain_graph.label.table')} {node.table}
)} {node.index && (
- 索引: + {t('sql_analysis.explain_graph.label.index')} {node.index}
)}
{node.estRows !== undefined && node.estRows > 0 && ( - 估算 {formatNumber(node.estRows)} + {t('sql_analysis.explain_graph.metric.est_rows')} {formatNumber(node.estRows)} )} {node.actualRows !== undefined && node.actualRows > 0 && ( - 实际 {formatNumber(node.actualRows)} + {t('sql_analysis.explain_graph.metric.actual_rows')} {formatNumber(node.actualRows)} )} {node.cost !== undefined && node.cost > 0 && ( - 成本 {node.cost.toFixed(1)} + {t('sql_analysis.explain_graph.metric.cost')} {node.cost.toFixed(1)} )}
{(hasFullScan || hasFilesort || hasTempTable) && (
- {hasFullScan && } - {hasFilesort && } - {hasTempTable && } + {hasFullScan && } + {hasFilesort && } + {hasTempTable && }
)} diff --git a/frontend/src/components/explain/ExplainSidebar.tsx b/frontend/src/components/explain/ExplainSidebar.tsx index 712d660..7991b63 100644 --- a/frontend/src/components/explain/ExplainSidebar.tsx +++ b/frontend/src/components/explain/ExplainSidebar.tsx @@ -9,6 +9,7 @@ import { formatPercent, formatMs, } from '../../utils/explainTypes' +import { useI18n } from '../../i18n/provider' // 诊断侧栏:节点详情 + 统计条 + 索引建议列表的合集组件。 // 拆分为一个文件减少模块碎片化(plan 原拆 3 个文件)。 @@ -50,12 +51,13 @@ function ExplainStatsBar({ stats: ExplainStats warnings?: string[] }) { + const { t } = useI18n() const statsList = [ - { label: '总成本', value: stats.totalCost ? stats.totalCost.toFixed(1) : '-' }, - { label: '总耗时', value: formatMs(stats.totalDurationMs) }, - { label: '扫描行数', value: formatNumber(stats.rowsRead) }, - { label: '缓冲命中', value: formatPercent(stats.bufferHitRate) }, - { label: '最大单节点行数', value: formatNumber(stats.maxEstRows) }, + { label: t('sql_analysis.sidebar.stats.total_cost'), value: stats.totalCost ? stats.totalCost.toFixed(1) : '-' }, + { label: t('sql_analysis.sidebar.stats.total_duration'), value: formatMs(stats.totalDurationMs) }, + { label: t('sql_analysis.sidebar.stats.rows_read'), value: formatNumber(stats.rowsRead) }, + { label: t('sql_analysis.sidebar.stats.buffer_hit'), value: formatPercent(stats.bufferHitRate) }, + { label: t('sql_analysis.sidebar.stats.max_est_rows'), value: formatNumber(stats.maxEstRows) }, ] return (
-
执行统计
+
{t('sql_analysis.sidebar.stats.title')}
{statsList.map((s) => (
@@ -75,9 +77,9 @@ function ExplainStatsBar({
))}
- {stats.hasFullScan && } - {stats.hasFilesort && } - {stats.hasTempTable && } + {stats.hasFullScan && } + {stats.hasFilesort && } + {stats.hasTempTable && } {warnings && warnings.length > 0 && (
{warnings.map((w, i) => ( @@ -99,19 +101,20 @@ function WarningRow({ color, text }: { color: string; text: string }) { } function ExplainNodeDetail({ node }: { node: ExplainNode }) { + const { t } = useI18n() const rows: Array<[string, string]> = [] - rows.push(['操作类型', node.opType]) - if (node.opDetail) rows.push(['操作详情', node.opDetail]) - if (node.table) rows.push(['表', node.table]) - if (node.index) rows.push(['索引', node.index]) - if (node.estRows) rows.push(['估算行数', formatNumber(node.estRows)]) - if (node.actualRows) rows.push(['实际行数', formatNumber(node.actualRows)]) - if (node.loops) rows.push(['循环次数', formatNumber(node.loops)]) - if (node.cost) rows.push(['成本', node.cost.toFixed(2)]) - if (node.durationMs) rows.push(['耗时', formatMs(node.durationMs)]) + rows.push([t('sql_analysis.sidebar.node.op_type'), node.opType]) + if (node.opDetail) rows.push([t('sql_analysis.sidebar.node.op_detail'), node.opDetail]) + if (node.table) rows.push([t('sql_analysis.sidebar.node.table'), node.table]) + if (node.index) rows.push([t('sql_analysis.sidebar.node.index'), node.index]) + if (node.estRows) rows.push([t('sql_analysis.sidebar.node.est_rows'), formatNumber(node.estRows)]) + if (node.actualRows) rows.push([t('sql_analysis.sidebar.node.actual_rows'), formatNumber(node.actualRows)]) + if (node.loops) rows.push([t('sql_analysis.sidebar.node.loops'), formatNumber(node.loops)]) + if (node.cost) rows.push([t('sql_analysis.sidebar.node.cost'), node.cost.toFixed(2)]) + if (node.durationMs) rows.push([t('sql_analysis.sidebar.node.duration'), formatMs(node.durationMs)]) if (node.bufferHit !== undefined && node.bufferHit > 0) - rows.push(['缓冲命中', formatPercent(node.bufferHit)]) - if (node.flags && node.flags.length > 0) rows.push(['标志', node.flags.join(', ')]) + rows.push([t('sql_analysis.sidebar.node.buffer_hit'), formatPercent(node.bufferHit)]) + if (node.flags && node.flags.length > 0) rows.push([t('sql_analysis.sidebar.node.flags'), node.flags.join(', ')]) return (
-
节点详情
+
{t('sql_analysis.sidebar.node.title')}
{rows.map(([label, value]) => (
@@ -134,7 +137,7 @@ function ExplainNodeDetail({ node }: { node: ExplainNode }) { {node.extra && Object.keys(node.extra).length > 0 && (
- Extra 字段({Object.keys(node.extra).length}) + {t('sql_analysis.sidebar.node.extra', { count: Object.keys(node.extra).length })}
             {JSON.stringify(node.extra, null, 2)}
@@ -152,6 +155,7 @@ function IndexSuggestionList({
   suggestions: IndexSuggestion[]
   onSelect?: (s: IndexSuggestion) => void
 }) {
+  const { t } = useI18n()
   return (
     
- 索引建议({suggestions.length}) + {t('sql_analysis.sidebar.suggestions.title', { count: suggestions.length })}
{suggestions.length === 0 ? (
- 未发现明显性能问题 + {t('sql_analysis.sidebar.suggestions.empty')}
) : (
@@ -188,6 +192,7 @@ function SuggestionCard({ suggestion: IndexSuggestion onSelect?: (s: IndexSuggestion) => void }) { + const { t } = useI18n() const color = severityColor(suggestion.severity) return (
{suggestion.estRows !== undefined && suggestion.estRows > 0 && ( - {formatNumber(suggestion.estRows)} 行 + {t('sql_analysis.sidebar.suggestions.rows', { count: formatNumber(suggestion.estRows) })} )}
@@ -226,7 +231,8 @@ function SuggestionCard({ )} {suggestion.affectedTable && (
- 表:{suggestion.affectedTable} + {t('sql_analysis.sidebar.suggestions.table', { table: suggestion.affectedTable }).replace(suggestion.affectedTable, '')} + {suggestion.affectedTable}
)}
diff --git a/frontend/src/components/explain/ExplainWorkbench.tsx b/frontend/src/components/explain/ExplainWorkbench.tsx index 21a47b5..d37b063 100644 --- a/frontend/src/components/explain/ExplainWorkbench.tsx +++ b/frontend/src/components/explain/ExplainWorkbench.tsx @@ -3,6 +3,7 @@ import { ApartmentOutlined, CodeOutlined } from '@ant-design/icons' import { Empty, Modal, Segmented, Spin, Typography } from 'antd' import { DiagnoseQuery } from '../../../wailsjs/go/app/App' import { buildRpcConnectionConfig } from '../../utils/connectionRpcConfig' +import { useI18n } from '../../i18n/provider' import type { ConnectionConfig } from '../../types' import type { DiagnoseReport, ExplainNode, IndexSuggestion } from '../../utils/explainTypes' import ExplainGraph from './ExplainGraph' @@ -40,6 +41,7 @@ interface ExplainReportViewProps { } export function ExplainReportView({ config, dbName, sql, runKey }: ExplainReportViewProps) { + const { t } = useI18n() const [loading, setLoading] = useState(false) const [report, setReport] = useState(null) const [error, setError] = useState(null) @@ -49,7 +51,7 @@ export function ExplainReportView({ config, dbName, sql, runKey }: ExplainReport const runDiagnose = useCallback(async () => { if (!sql.trim()) { - setError('查询语句为空') + setError(t('sql_analysis.explain.error.query_required')) return } setLoading(true) @@ -59,7 +61,7 @@ export function ExplainReportView({ config, dbName, sql, runKey }: ExplainReport try { const result = await DiagnoseQuery(buildRpcConnectionConfig(config), dbName, sql) if (!result.success) { - setError(result.message || '诊断失败') + setError(result.message || t('sql_analysis.explain.error.run_failed')) } else { const data = result.data as DiagnoseReport setReport(data) @@ -69,7 +71,7 @@ export function ExplainReportView({ config, dbName, sql, runKey }: ExplainReport } finally { setLoading(false) } - }, [config, dbName, sql]) + }, [config, dbName, sql, t]) useEffect(() => { if (!hasRequestedRun) { @@ -100,17 +102,17 @@ export function ExplainReportView({ config, dbName, sql, runKey }: ExplainReport {loading && (
- +
)} {error && ( - 诊断失败: + {t('sql_analysis.explain.error.title')} {error} )} {!loading && !error && !report && !hasRequestedRun && ( - + )} {!loading && !error && report && (
@@ -125,7 +127,7 @@ export function ExplainReportView({ config, dbName, sql, runKey }: ExplainReport label: ( - 执行计划 + {t('sql_analysis.explain.view.plan')} ), }, @@ -134,14 +136,14 @@ export function ExplainReportView({ config, dbName, sql, runKey }: ExplainReport label: ( - 原文 + {t('sql_analysis.explain.view.raw')} ), }, ]} /> - {report.plan.nodes.length} 节点 + {t('sql_analysis.explain.meta.node_count', { count: report.plan.nodes.length })} / {report.plan.rawFormat} @@ -184,7 +186,7 @@ export function ExplainReportView({ config, dbName, sql, runKey }: ExplainReport boxSizing: 'border-box', }} > - {report.plan.rawPayload || '(无原文)'} + {report.plan.rawPayload || t('sql_analysis.explain.raw.empty')}
)}
@@ -195,6 +197,7 @@ export function ExplainReportView({ config, dbName, sql, runKey }: ExplainReport } export default function ExplainWorkbench({ open, onClose, config, dbName, sql }: ExplainWorkbenchProps) { + const { t } = useI18n() return ( SQL 诊断工作台} + title={{t('sql_analysis.workbench.title')}} destroyOnClose >
diff --git a/frontend/src/components/explain/SlowQueryPanel.tsx b/frontend/src/components/explain/SlowQueryPanel.tsx index 046cc64..b8ec7b1 100644 --- a/frontend/src/components/explain/SlowQueryPanel.tsx +++ b/frontend/src/components/explain/SlowQueryPanel.tsx @@ -3,6 +3,7 @@ import { Button, Empty, Modal, Segmented, Spin, Tooltip, Typography, message } f import { ReloadOutlined, DeleteOutlined, ThunderboltOutlined } from '@ant-design/icons' import { ClearSlowQueries, GetSlowQueries } from '../../../wailsjs/go/app/App' import { buildRpcConnectionConfig } from '../../utils/connectionRpcConfig' +import { useI18n } from '../../i18n/provider' import type { ConnectionConfig } from '../../types' import { formatMs, formatNumber } from '../../utils/explainTypes' @@ -53,6 +54,7 @@ export function SlowQueryPanelContent({ onPickQuery, activeToken, }: SlowQueryPanelContentProps) { + const { t } = useI18n() const [loading, setLoading] = useState(false) const [records, setRecords] = useState([]) const [error, setError] = useState(null) @@ -64,7 +66,7 @@ export function SlowQueryPanelContent({ try { const result = await GetSlowQueries(buildRpcConnectionConfig(config), dbName, sortBy, 100) if (!result.success) { - setError(result.message || '加载失败') + setError(result.message || t('sql_analysis.slow_query.error.load_failed')) setRecords([]) } else { setRecords((result.data as SlowQueryRecord[]) ?? []) @@ -74,7 +76,7 @@ export function SlowQueryPanelContent({ } finally { setLoading(false) } - }, [config, dbName, sortBy]) + }, [config, dbName, sortBy, t]) useEffect(() => { if (activeToken === null || activeToken === undefined || activeToken === '') { @@ -86,12 +88,12 @@ export function SlowQueryPanelContent({ const handleClear = useCallback(async () => { const result = await ClearSlowQueries(buildRpcConnectionConfig(config), dbName) if (result.success) { - message.success('已清空慢查询历史') + message.success(t('sql_analysis.slow_query.message.cleared')) setRecords([]) } else { - message.error(result.message || '清空失败') + message.error(result.message || t('sql_analysis.slow_query.error.clear_failed')) } - }, [config, dbName]) + }, [config, dbName, t]) const handlePick = useCallback( (record: SlowQueryRecord) => { @@ -111,16 +113,16 @@ export function SlowQueryPanelContent({ value={sortBy} onChange={(v) => setSortBy(v as SortBy)} options={[ - { label: '按耗时', value: 'duration' }, - { label: '按扫描行数', value: 'rowsRead' }, - { label: '按时间', value: 'recent' }, + { label: t('sql_analysis.slow_query.sort.duration'), value: 'duration' }, + { label: t('sql_analysis.slow_query.sort.rows_read'), value: 'rowsRead' }, + { label: t('sql_analysis.slow_query.sort.recent'), value: 'recent' }, ]} />
- +
@@ -128,19 +130,19 @@ export function SlowQueryPanelContent({ {loading && (
- +
)} {error && ( - 加载失败: + {t('sql_analysis.slow_query.error.title')} {error} )} {!loading && !error && sorted.length === 0 && ( - + )} {!loading && !error && sorted.length > 0 && ( @@ -155,6 +157,7 @@ export function SlowQueryPanelContent({ } export default function SlowQueryPanel({ open, onClose, config, dbName, onPickQuery }: SlowQueryPanelProps) { + const { t } = useI18n() return ( - 慢 SQL 历史 + {t('sql_analysis.slow_query.title')} - {dbName || '(当前连接)'} + {dbName || t('sql_analysis.slow_query.current_connection')}
} @@ -189,6 +192,7 @@ export default function SlowQueryPanel({ open, onClose, config, dbName, onPickQu } function SlowQueryCard({ record, onPick }: { record: SlowQueryRecord; onPick: () => void }) { + const { t } = useI18n() const duration = record.durationMs ?? 0 const durationColor = duration >= 5000 ? '#fa5252' : duration >= 1000 ? '#f08c00' : '#495057' @@ -209,18 +213,18 @@ function SlowQueryCard({ record, onPick }: { record: SlowQueryRecord; onPick: () {formatMs(duration)} {record.rowsRead !== undefined && record.rowsRead > 0 && ( - 扫描 {formatNumber(record.rowsRead)} + {t('sql_analysis.slow_query.metric.rows_read')} {formatNumber(record.rowsRead)} )} {record.rowsReturned !== undefined && record.rowsReturned > 0 && ( - 返回 {formatNumber(record.rowsReturned)} + {t('sql_analysis.slow_query.metric.rows_returned')} {formatNumber(record.rowsReturned)} )}
{record.dbType && {record.dbType}} - {record.executedAt && formatRelativeTime(record.executedAt)} + {record.executedAt && formatRelativeTime(record.executedAt, t)}
-        {record.sqlPreview || '(无 SQL 预览)'}
+        {record.sqlPreview || t('sql_analysis.slow_query.preview.empty')}
       
) } // formatRelativeTime 把 ISO 时间字符串格式化为相对时间("3分钟前")。 -function formatRelativeTime(isoTime: string): string { +function formatRelativeTime( + isoTime: string, + t: ReturnType['t'], +): string { const ts = Date.parse(isoTime) if (isNaN(ts)) return '' const diffMs = Date.now() - ts - if (diffMs < 60_000) return '刚刚' - if (diffMs < 3600_000) return `${Math.floor(diffMs / 60_000)} 分钟前` - if (diffMs < 86400_000) return `${Math.floor(diffMs / 3600_000)} 小时前` - return `${Math.floor(diffMs / 86400_000)} 天前` + if (diffMs < 60_000) return t('sql_analysis.slow_query.relative.just_now') + if (diffMs < 3600_000) { + return t('sql_analysis.slow_query.relative.minutes_ago', { count: Math.floor(diffMs / 60_000) }) + } + if (diffMs < 86400_000) { + return t('sql_analysis.slow_query.relative.hours_ago', { count: Math.floor(diffMs / 3600_000) }) + } + return t('sql_analysis.slow_query.relative.days_ago', { count: Math.floor(diffMs / 86400_000) }) } diff --git a/frontend/src/components/explain/SqlAnalysisWorkbench.tsx b/frontend/src/components/explain/SqlAnalysisWorkbench.tsx index c59ce43..f1f8cb2 100644 --- a/frontend/src/components/explain/SqlAnalysisWorkbench.tsx +++ b/frontend/src/components/explain/SqlAnalysisWorkbench.tsx @@ -3,6 +3,7 @@ import { Alert, Button, Input, Segmented, Typography, message } from 'antd' import { HistoryOutlined, SearchOutlined } from '@ant-design/icons' import { useStore } from '../../store' import type { ConnectionConfig, TabData } from '../../types' +import { useI18n } from '../../i18n/provider' import { ExplainReportView } from './ExplainWorkbench' import { SlowQueryPanelContent } from './SlowQueryPanel' @@ -23,6 +24,7 @@ const normalizeConnectionConfig = (connection: any): ConnectionConfig => ({ }) export default function SqlAnalysisWorkbench({ tab }: { tab: TabData }) { + const { t } = useI18n() const connections = useStore((state) => state.connections) const connection = useMemo( () => connections.find((item) => item.id === tab.connectionId) || null, @@ -51,12 +53,12 @@ export default function SqlAnalysisWorkbench({ tab }: { tab: TabData }) { const triggerDiagnose = useCallback(() => { if (!sqlDraft.trim()) { - message.warning('请输入要诊断的 SQL') + message.warning(t('sql_analysis.workbench.validation.sql_required')) return } setActiveView('diagnose') setDiagnoseRunKey((previous) => previous + 1) - }, [sqlDraft]) + }, [sqlDraft, t]) const handlePickSlowQuery = useCallback((sql: string) => { const nextSql = String(sql || '') @@ -83,8 +85,8 @@ export default function SqlAnalysisWorkbench({ tab }: { tab: TabData }) {
) @@ -96,7 +98,7 @@ export default function SqlAnalysisWorkbench({ tab }: { tab: TabData }) {
- SQL 分析工作台 + {t('sql_analysis.workbench.title')} {connection?.name || tab.connectionId} @@ -113,7 +115,7 @@ export default function SqlAnalysisWorkbench({ tab }: { tab: TabData }) { label: ( - 慢 SQL + {t('sql_analysis.workbench.view.slow_query')} ), }, @@ -122,7 +124,7 @@ export default function SqlAnalysisWorkbench({ tab }: { tab: TabData }) { label: ( - SQL 诊断 + {t('sql_analysis.workbench.view.diagnose')} ), }, @@ -146,13 +148,13 @@ export default function SqlAnalysisWorkbench({ tab }: { tab: TabData }) { setSqlDraft(event.target.value)} - placeholder="输入要诊断的 SQL,或从慢 SQL 列表点击条目带入" + placeholder={t('sql_analysis.workbench.editor.placeholder')} autoSize={{ minRows: 5, maxRows: 10 }} />
- 支持从慢 SQL 列表点击条目直接带入 + {t('sql_analysis.workbench.editor.hint')}
diff --git a/frontend/src/components/sidebar/SidebarBatchExportModals.tsx b/frontend/src/components/sidebar/SidebarBatchExportModals.tsx index 0c4561f..d57a470 100644 --- a/frontend/src/components/sidebar/SidebarBatchExportModals.tsx +++ b/frontend/src/components/sidebar/SidebarBatchExportModals.tsx @@ -11,6 +11,7 @@ import { } from '@ant-design/icons'; import Modal from '../common/ResizableDraggableModal'; import type { SavedConnection } from '../../types'; +import { t } from '../../i18n'; import type { BatchObjectFilterType, BatchSelectionScope, @@ -126,7 +127,7 @@ export const SidebarBatchExportModals: React.FC = footer={
@@ -169,12 +170,14 @@ export const SidebarBatchExportModals: React.FC = >
- +
- +
-
先选择连接与数据库,再决定导出范围和目标对象。
+
{t('sidebar.modal.batch_tables.selection_hint')}
{batchTables.length > 0 && ( @@ -209,7 +214,7 @@ export const SidebarBatchExportModals: React.FC = allowClear value={batchFilterKeyword} onChange={(e) => setBatchFilterKeyword(e.target.value)} - placeholder="筛选表/视图名称" + placeholder={t('sidebar.placeholder.filter_table_view')} prefix={} style={{ width: 260 }} /> @@ -218,9 +223,9 @@ export const SidebarBatchExportModals: React.FC = onChange={(value) => setBatchFilterType(value as BatchObjectFilterType)} style={{ width: 140 }} options={[ - { label: '全部对象', value: 'all' }, - { label: '仅表', value: 'table' }, - { label: '仅视图', value: 'view' }, + { label: t('sidebar.filter.all_objects'), value: 'all' }, + { label: t('sidebar.filter.tables_only'), value: 'table' }, + { label: t('sidebar.filter.views_only'), value: 'view' }, ]} /> {nonRedisConnections(connections).map(conn => ( @@ -362,7 +375,9 @@ export const SidebarBatchExportModals: React.FC = ))} -
连接选定后会加载当前连接下可批量导出的数据库列表。
+
+ {t('sidebar.modal.batch_databases.selection_hint')} +
{batchDatabases.length > 0 && ( @@ -373,22 +388,25 @@ export const SidebarBatchExportModals: React.FC = size="small" onClick={() => handleCheckAllDb(true)} > - 全选 + {t('sidebar.action.select_all')} - 已选择 {checkedDbKeys.length} / {batchDatabases.length} 个库 + {t('sidebar.batch.selected_databases', { + selected: checkedDbKeys.length, + total: batchDatabases.length, + })} diff --git a/frontend/src/components/sidebar/SlowQueryRailButton.tsx b/frontend/src/components/sidebar/SlowQueryRailButton.tsx index 876a152..f0d7af8 100644 --- a/frontend/src/components/sidebar/SlowQueryRailButton.tsx +++ b/frontend/src/components/sidebar/SlowQueryRailButton.tsx @@ -2,6 +2,7 @@ import { useMemo } from 'react' import { Tooltip } from 'antd' import { HistoryOutlined } from '@ant-design/icons' import { useStore } from '../../store' +import { useI18n } from '../../i18n/provider' import { buildSqlAnalysisWorkbenchTab } from '../../utils/sqlAnalysisTab' // Sidebar 底部的慢 SQL 工作台入口。 @@ -40,6 +41,7 @@ export default function SlowQueryRailButton({ style, tooltipPlacement = 'right', }: SlowQueryRailButtonProps) { + const { t } = useI18n() const tabs = useStore(s => s.tabs) const activeTabId = useStore(s => s.activeTabId) const connections = useStore(s => s.connections) @@ -60,8 +62,8 @@ export default function SlowQueryRailButton({ const buttonDisabled = !hasActiveConnection const tooltipText = buttonDisabled - ? '请先打开一个数据库连接的标签页' - : '打开当前连接的 SQL 分析工作台' + ? t('sql_analysis.slow_query.rail.tooltip.no_connection') + : t('sql_analysis.slow_query.rail.tooltip.open') return ( @@ -95,7 +97,7 @@ export default function SlowQueryRailButton({ transition: 'opacity 0.15s, color 0.15s', ...style, }} - aria-label="慢 SQL 工作台" + aria-label={t('sql_analysis.slow_query.rail.aria_label')} > diff --git a/frontend/src/components/sidebar/useSidebarBatchExport.ts b/frontend/src/components/sidebar/useSidebarBatchExport.ts index dcab1ec..f233585 100644 --- a/frontend/src/components/sidebar/useSidebarBatchExport.ts +++ b/frontend/src/components/sidebar/useSidebarBatchExport.ts @@ -251,7 +251,9 @@ export const useSidebarBatchExport = ({ addTab(buildBatchTableExportWorkbenchTab({ connectionId: connId, dbName: dbName || undefined, - title: dbName ? `批量导出 ${dbName} 对象` : '批量导出对象', + title: dbName + ? t('sidebar.tab.batch_export_objects_database', { database: dbName }) + : t('sidebar.tab.batch_export_objects'), })); }; @@ -592,7 +594,7 @@ export const useSidebarBatchExport = ({ addTab(buildBatchDatabaseExportWorkbenchTab({ connectionId: connId, - title: '批量导出库', + title: t('sidebar.tab.batch_export_databases'), })); }; diff --git a/frontend/src/components/sidebar/useSidebarObjectActions.tsx b/frontend/src/components/sidebar/useSidebarObjectActions.tsx index 1fc67db..68f9614 100644 --- a/frontend/src/components/sidebar/useSidebarObjectActions.tsx +++ b/frontend/src/components/sidebar/useSidebarObjectActions.tsx @@ -198,7 +198,7 @@ export const useSidebarObjectActions = ({ const rowCount = Number(node?.dataRef?.rowCount); const totalRowsKnown = Number.isFinite(rowCount) && rowCount > 0; await runExportWithProgress({ - title: `导出 ${tableName}`, + title: t('file.backend.dialog.export_table', { table: tableName }), targetName: tableName, format: options.format, totalRows: totalRowsKnown ? rowCount : undefined, @@ -219,7 +219,7 @@ export const useSidebarObjectActions = ({ const openExportDialog = async (node: any) => { const tableName = String(node?.dataRef?.tableName || node?.title || '').trim(); if (!tableName) { - message.warning('未识别到表名,无法导出'); + message.warning(t('sidebar.message.table_export_target_missing')); return; } const connectionId = resolveSidebarNodeConnectionId(node, connectionIds) || String(node?.dataRef?.id || '').trim(); @@ -228,7 +228,7 @@ export const useSidebarObjectActions = ({ connectionId, dbName, tableName, - title: `导出 ${tableName}`, + title: t('file.backend.dialog.export_table', { table: tableName }), objectType: node?.type === 'view' ? 'view' : (node?.type === 'materialized-view' ? 'materialized-view' : 'table'), schemaName: typeof node?.dataRef?.schemaName === 'string' ? node.dataRef.schemaName : undefined, sidebarLocateKey: typeof node?.key === 'string' ? node.key : undefined, @@ -264,9 +264,10 @@ export const useSidebarObjectActions = ({ const conn = node.dataRef; const tableName = String(conn?.tableName || node?.title || '').trim(); if (!conn?.id || !conn?.dbName || !tableName) { - message.warning('当前表缺少连接上下文,无法发送给 AI'); + message.warning(t('sidebar.message.ai_table_context_missing')); return; } + const tableRef = `${conn.dbName}.${tableName}`; let ddl = ''; try { @@ -281,13 +282,13 @@ export const useSidebarObjectActions = ({ const prompt = promptKind === 'explain' ? [ - `请解释数据表 ${conn.dbName}.${tableName} 的结构和业务含义。`, - '重点说明字段含义、主键/索引、潜在关联关系、典型查询场景和风险点。', + t('sidebar.ai_prompt.explain.intro', { table: tableRef }), + t('sidebar.ai_prompt.explain.detail'), ddl ? `\n\`\`\`sql\n${ddl}\n\`\`\`` : '', ].filter(Boolean).join('\n') : [ - `请基于数据表 ${conn.dbName}.${tableName} 生成 3 条常用查询 SQL。`, - '要求包含:数据预览查询、按关键字段过滤查询、一个聚合或统计查询。', + t('sidebar.ai_prompt.query.intro', { table: tableRef }), + t('sidebar.ai_prompt.query.detail'), ddl ? `\n\`\`\`sql\n${ddl}\n\`\`\`` : '', ].filter(Boolean).join('\n'); @@ -313,12 +314,12 @@ export const useSidebarObjectActions = ({ const res = await CreateDatabase(buildRpcConnectionConfig(config) as any, values.name); if (res.success) { - message.success('数据库创建成功'); + message.success(t('sidebar.message.database_created')); setIsCreateDbModalOpen(false); createDbForm.resetFields(); loadDatabases(targetConnection); } else { - message.error('创建失败: ' + res.message); + message.error(t('sidebar.message.operation_create_failed', { error: res.message })); } } catch (e) { // Validate failed @@ -366,7 +367,7 @@ export const useSidebarObjectActions = ({ const dialect = getMetadataDialect(node?.dataRef as SavedConnection); const schemaName = String(node?.dataRef?.schemaName || '').trim(); if (!isPostgresSchemaDialect(dialect) || !schemaName) { - message.warning('当前节点不支持通过此入口编辑模式'); + message.warning(t('sidebar.message.schema_edit_unsupported')); return; } setRenameSchemaTarget(node); @@ -383,11 +384,11 @@ export const useSidebarObjectActions = ({ const oldSchemaName = String(conn?.schemaName || '').trim(); const newSchemaName = String(values?.newName || '').trim(); if (!conn || !dbName || !oldSchemaName || !newSchemaName) { - message.error('未找到目标模式,无法编辑'); + message.error(t('sidebar.message.schema_target_edit_missing')); return; } if (oldSchemaName === newSchemaName) { - message.warning('新旧模式名称相同,无需修改'); + message.warning(t('sidebar.message.schema_name_unchanged')); return; } @@ -398,7 +399,7 @@ export const useSidebarObjectActions = ({ newSchemaName, ); if (res.success) { - message.success('模式重命名成功'); + message.success(t('sidebar.message.schema_renamed')); const schemaKeyPrefix = `${conn.id}-${dbName}-schema-${oldSchemaName || 'default'}`; setExpandedKeys(prev => prev.filter(k => !k.toString().startsWith(schemaKeyPrefix))); setLoadedKeys(prev => prev.filter(k => !k.toString().startsWith(schemaKeyPrefix))); @@ -407,7 +408,7 @@ export const useSidebarObjectActions = ({ setRenameSchemaTarget(null); renameSchemaForm.resetFields(); } else { - message.error('编辑失败: ' + res.message); + message.error(t('sidebar.message.rename_failed', { error: res.message })); } } catch (e) { // Validate failed @@ -419,12 +420,12 @@ export const useSidebarObjectActions = ({ const dbName = String(conn?.dbName || '').trim(); const schemaName = String(conn?.schemaName || '').trim(); if (!conn || !dbName || !schemaName) { - message.error('未找到目标模式,无法删除'); + message.error(t('sidebar.message.schema_target_delete_missing')); return; } Modal.confirm({ - title: '确认删除模式', - content: `确定删除模式 "${schemaName}" 吗?这将删除该模式及其中所有对象,操作不可恢复。`, + title: t('sidebar.modal.confirm_delete_schema.title'), + content: t('sidebar.modal.confirm_delete_schema.content', { name: schemaName }), okButtonProps: { danger: true }, onOk: async () => { const res = await (window as any).go.app.App.DropSchema( @@ -433,13 +434,13 @@ export const useSidebarObjectActions = ({ schemaName, ); if (res.success) { - message.success('模式删除成功'); + message.success(t('sidebar.message.schema_deleted')); const schemaKeyPrefix = `${conn.id}-${dbName}-schema-${schemaName || 'default'}`; setExpandedKeys(prev => prev.filter(k => !k.toString().startsWith(schemaKeyPrefix))); setLoadedKeys(prev => prev.filter(k => !k.toString().startsWith(schemaKeyPrefix))); await loadTables(getDatabaseNodeRef(conn, dbName)); } else { - message.error('删除失败: ' + res.message); + message.error(t('sidebar.message.delete_failed', { error: res.message })); } }, }); @@ -511,23 +512,23 @@ export const useSidebarObjectActions = ({ const oldTableName = String(conn.tableName || '').trim(); const newTableName = String(values.newName || '').trim(); if (!oldTableName || !newTableName) { - message.error('表名不能为空'); + message.error(t('sidebar.message.table_name_required')); return; } if (extractObjectName(oldTableName) === newTableName || oldTableName === newTableName) { - message.warning('新旧表名相同,无需修改'); + message.warning(t('sidebar.message.table_name_unchanged')); return; } const config = buildRuntimeConfig(conn, conn.dbName); const res = await RenameTable(buildRpcConnectionConfig(config) as any, conn.dbName, oldTableName, newTableName); if (res.success) { - message.success('表重命名成功'); + message.success(t('sidebar.message.table_renamed')); await loadTables(getDatabaseNodeRef(conn, conn.dbName)); setIsRenameTableModalOpen(false); setRenameTableTarget(null); renameTableForm.resetFields(); } else { - message.error('重命名失败: ' + res.message); + message.error(t('sidebar.message.rename_failed', { error: res.message })); } } catch (e) { // Validate failed @@ -539,17 +540,17 @@ export const useSidebarObjectActions = ({ const tableName = String(conn.tableName || '').trim(); if (!tableName) return; Modal.confirm({ - title: '确认删除表', - content: `确定删除表 "${tableName}" 吗?该操作不可恢复。`, + title: t('sidebar.modal.confirm_delete_table.title'), + content: t('sidebar.modal.confirm_delete_table.content', { name: tableName }), okButtonProps: { danger: true }, onOk: async () => { const config = buildRuntimeConfig(conn, conn.dbName); const res = await DropTable(buildRpcConnectionConfig(config) as any, conn.dbName, tableName); if (res.success) { - message.success('表删除成功'); + message.success(t('sidebar.message.table_deleted')); await loadTables(getDatabaseNodeRef(conn, conn.dbName)); } else { - message.error('删除失败: ' + res.message); + message.error(t('sidebar.message.delete_failed', { error: res.message })); } }, }); @@ -563,10 +564,10 @@ export const useSidebarObjectActions = ({ const { label, progressLabel } = getTableDataDangerActionMeta(action); const confirmed = await new Promise((resolve) => { Modal.confirm({ - title: `确认${label}`, - content: `${label}会永久删除表 "${tableName}" 中的所有数据,操作不可逆,是否继续?`, - okText: '继续', - cancelText: '取消', + title: t('sidebar.modal.confirm_table_data_action.title', { action: label }), + content: t('sidebar.modal.confirm_table_data_action.content', { action: label, table: tableName }), + okText: t('sidebar.action.continue'), + cancelText: t('common.cancel'), okButtonProps: { danger: true }, onOk: () => resolve(true), onCancel: () => resolve(false), @@ -577,7 +578,10 @@ export const useSidebarObjectActions = ({ const config = buildRuntimeConfig(conn, conn.dbName); const app = (window as any).go.app.App; const methodName = action === 'truncate' ? 'TruncateTables' : 'ClearTables'; - const hide = message.loading(`正在${progressLabel} ${tableName}...`, 0); + const hide = message.loading(t('sidebar.message.table_data_action_loading', { + action: progressLabel, + table: tableName, + }), 0); const startTime = Date.now(); try { const res = await app[methodName](buildRpcConnectionConfig(config) as any, conn.dbName, [tableName]); @@ -589,7 +593,7 @@ export const useSidebarObjectActions = ({ : `/* ${label} ${tableName} */`; if (res.success) { - message.success(`${progressLabel}成功`); + message.success(t('sidebar.message.table_data_action_success', { action: progressLabel })); addSqlLog({ id: Date.now().toString(), timestamp: Date.now(), @@ -614,7 +618,10 @@ export const useSidebarObjectActions = ({ dbName: conn.dbName, }); if (res.message !== '已取消') { - message.error(`${progressLabel}失败: ${res.message}`); + message.error(t('sidebar.message.table_data_action_failed', { + action: progressLabel, + error: res.message, + })); } } catch (e: any) { const duration = Date.now() - startTime; @@ -629,7 +636,10 @@ export const useSidebarObjectActions = ({ message: errMsg, dbName: conn.dbName, }); - message.error(`${progressLabel}失败: ${errMsg}`); + message.error(t('sidebar.message.table_data_action_failed', { + action: progressLabel, + error: errMsg, + })); } }; @@ -799,7 +809,7 @@ export const useSidebarObjectActions = ({ : (safeTableParts.length > 0 ? safeTableParts : [safeTable]).map(part => `\`${part.replace(/`/g, '``')}\``).join('.'); addTab({ id: `query-create-starrocks-rollup-${Date.now()}`, - title: '新增 Rollup', + title: t('sidebar.v2_table_menu.new_rollup', { keyword: 'Rollup' }), type: 'query', connectionId: id, dbName, @@ -812,17 +822,17 @@ export const useSidebarObjectActions = ({ const viewName = String(conn.viewName || '').trim(); if (!viewName) return; Modal.confirm({ - title: '确认删除视图', - content: `确定删除视图 "${viewName}" 吗?该操作不可恢复。`, + title: t('sidebar.modal.confirm_delete_view.title'), + content: t('sidebar.modal.confirm_delete_view.content', { name: viewName }), okButtonProps: { danger: true }, onOk: async () => { const config = buildRuntimeConfig(conn, conn.dbName); const res = await DropView(buildRpcConnectionConfig(config) as any, conn.dbName, viewName); if (res.success) { - message.success('视图删除成功'); + message.success(t('sidebar.message.view_deleted')); await loadTables(getDatabaseNodeRef(conn, conn.dbName)); } else { - message.error('删除失败: ' + res.message); + message.error(t('sidebar.message.delete_failed', { error: res.message })); } }, }); @@ -836,23 +846,23 @@ export const useSidebarObjectActions = ({ const oldViewName = String(conn.viewName || '').trim(); const newViewName = String(values.newName || '').trim(); if (!oldViewName || !newViewName) { - message.error('视图名称不能为空'); + message.error(t('sidebar.message.view_name_required')); return; } if (extractObjectName(oldViewName) === newViewName || oldViewName === newViewName) { - message.warning('新旧视图名相同,无需修改'); + message.warning(t('sidebar.message.view_name_unchanged')); return; } const config = buildRuntimeConfig(conn, conn.dbName); const res = await RenameView(buildRpcConnectionConfig(config) as any, conn.dbName, oldViewName, newViewName); if (res.success) { - message.success('视图重命名成功'); + message.success(t('sidebar.message.view_renamed')); await loadTables(getDatabaseNodeRef(conn, conn.dbName)); setIsRenameViewModalOpen(false); setRenameViewTarget(null); renameViewForm.resetFields(); } else { - message.error('重命名失败: ' + res.message); + message.error(t('sidebar.message.rename_failed', { error: res.message })); } } catch (e) { // Validate failed @@ -905,9 +915,9 @@ export const useSidebarObjectActions = ({ setRenameSavedQueryTarget(null); renameSavedQueryForm.resetFields(); } catch (e) { - if (e instanceof Error) { - message.error('重命名查询失败: ' + e.message); - } + message.error(t('sidebar.message.saved_query_rename_failed', { + error: e instanceof Error ? e.message : String(e), + })); } }; @@ -931,7 +941,9 @@ export const useSidebarObjectActions = ({ bindingStatus: 'active', }); } - message.success(`查询已绑定到 ${target.name || target.id}`); + message.success(t('sidebar.message.saved_query_rebind_success', { + name: target.name || target.id, + })); tabs .filter(tab => tab.type === 'query' && (tab.savedQueryId === query.id || tab.id === query.id)) .forEach(tab => updateQueryTabDraft(tab.id, { @@ -940,7 +952,9 @@ export const useSidebarObjectActions = ({ dbName: persisted.dbName, })); } catch (error) { - message.error('绑定查询失败: ' + (error instanceof Error ? error.message : String(error))); + message.error(t('sidebar.message.saved_query_rebind_failed', { + error: error instanceof Error ? error.message : String(error), + })); } }, [saveQuery, tabs, updateQueryTabDraft]); @@ -1153,16 +1167,22 @@ export const useSidebarObjectActions = ({ const openMessagePublishModal = (node: any) => { const target = resolveMessagePublishTarget(node); if (!target) { - message.warning('当前对象不支持测试发送消息'); + message.warning(t('sidebar.message.message_publish_unsupported')); return; } setMessagePublishTarget(target); }; const handleMessagePublishSuccess = (result: { destination: string; affectedRows: number }) => { - const destination = String(result.destination || '').trim(); - const suffix = result.affectedRows > 0 ? `(已提交 ${result.affectedRows} 条)` : ''; - message.success(`测试消息已发送到 ${destination || '目标'}${suffix}`); + const destination = String(result.destination || '').trim() || t('sidebar.message.message_publish_target_fallback'); + if (result.affectedRows > 0) { + message.success(t('sidebar.message.message_publish_success_with_count', { + destination, + count: result.affectedRows, + })); + } else { + message.success(t('sidebar.message.message_publish_success', { destination })); + } setMessagePublishTarget(null); }; diff --git a/frontend/src/components/sidebar/useSidebarV2ActionHandlers.tsx b/frontend/src/components/sidebar/useSidebarV2ActionHandlers.tsx index b16ff94..044d8ae 100644 --- a/frontend/src/components/sidebar/useSidebarV2ActionHandlers.tsx +++ b/frontend/src/components/sidebar/useSidebarV2ActionHandlers.tsx @@ -363,7 +363,7 @@ export const useSidebarV2ActionHandlers = ({ if (!conn?.config) return; const res = await DBReleaseConnection(buildRpcConnectionConfig(conn.config, { id: conn.id }) as any); if (res && res.success === false) { - throw new Error(res.message || '释放连接失败'); + throw new Error(String(res.message || '').trim()); } }; @@ -392,7 +392,7 @@ export const useSidebarV2ActionHandlers = ({ try { await releaseConnectionResources(conn); } catch (error: any) { - message.warning(error?.message || '连接已从侧边栏断开,但后端连接释放失败'); + message.warning(String(error?.message || '').trim() || t('sidebar.message.connection_release_failed_from_sidebar')); } message.success(t('connection.sidebar.disconnect.success')); }; diff --git a/frontend/src/components/useDataGridV2Actions.ts b/frontend/src/components/useDataGridV2Actions.ts index bb8d7f9..a88facc 100644 --- a/frontend/src/components/useDataGridV2Actions.ts +++ b/frontend/src/components/useDataGridV2Actions.ts @@ -486,20 +486,32 @@ const handleV2ColumnHeaderContextMenuAction = useCallback((action: V2ColumnHeade }; }, [connections, connectionId]); + const resolveExportTitle = useCallback((defaultName: string) => { + const normalizedDefaultName = String(defaultName || '').trim(); + if (normalizedDefaultName === 'query_result') { + return translateDataGrid('file.backend.dialog.export_query_result'); + } + if (normalizedDefaultName && normalizedDefaultName !== 'export') { + return translateDataGrid('file.backend.dialog.export_table', { table: normalizedDefaultName }); + } + return translateDataGrid('file.backend.dialog.export_data'); + }, [translateDataGrid]); + const exportByQuery = useCallback(async (sql: string, defaultName: string, options: DataExportFileOptions, totalRows?: number) => { const config = buildConnConfig(); if (!config) return; + const normalizedDefaultName = String(defaultName || '').trim(); const totalRowsKnown = Number.isFinite(totalRows) && Number(totalRows) >= 0; await runExportWithProgress({ - title: `导出 ${defaultName || '查询结果'}`, - targetName: defaultName || 'export', + title: resolveExportTitle(normalizedDefaultName), + targetName: normalizedDefaultName || 'export', format: options.format, totalRows: totalRowsKnown ? Number(totalRows) : undefined, run: (jobId: string) => ExportQueryWithOptions( buildRpcConnectionConfig(config) as any, dbName || '', sql, - defaultName || 'export', + normalizedDefaultName || 'export', { ...options, jobId, @@ -508,7 +520,7 @@ const handleV2ColumnHeaderContextMenuAction = useCallback((action: V2ColumnHeade } as any, ), }); - }, [buildConnConfig, dbName, runExportWithProgress]); + }, [buildConnConfig, dbName, resolveExportTitle, runExportWithProgress]); const buildPkWhereSql = useCallback((rows: any[], dbType: string) => { if (!tableName || pkColumns.length === 0) return ''; @@ -788,8 +800,8 @@ const handleV2ColumnHeaderContextMenuAction = useCallback((action: V2ColumnHeade const handleOpenExportDialog = useCallback(async () => { const selectedCount = selectedRowKeys.length; const allRowsLabel = (resultExportAllSql || resultSql) - ? '全部结果(重新查询)' - : `全部结果(当前缓存 ${mergedDisplayData.length} 条)`; + ? translateDataGrid('data_grid.export.scope.all_results_requery') + : translateDataGrid('data_grid.export.scope.all_results_cached', { count: mergedDisplayData.length }); const commonInitialValues: Partial = { format: DEFAULT_DATA_EXPORT_FORMAT, xlsxMaxRowsPerSheet: DEFAULT_XLSX_ROWS_PER_SHEET, @@ -799,25 +811,29 @@ const handleV2ColumnHeaderContextMenuAction = useCallback((action: V2ColumnHeade const scopeOptions: DataExportScopeOption[] = [ { value: 'selected', - label: selectedCount > 0 ? `选中行 (${selectedCount} 条)` : '选中行', - description: '仅导出当前结果集中已勾选的行。', + label: selectedCount > 0 + ? translateDataGrid('data_grid.export.scope.selected_rows_count', { count: selectedCount }) + : translateDataGrid('data_grid.export.scope.selected_rows'), + description: translateDataGrid('data_grid.export.scope.selected_rows_description'), disabled: selectedCount <= 0, }, { value: 'page', - label: `当前页 (${queryResultCurrentPageRows.length} 条)`, - description: '直接按当前结果页缓存导出。', + label: translateDataGrid('data_grid.export.scope.current_page', { + count: queryResultCurrentPageRows.length, + }), + description: translateDataGrid('data_grid.export.scope.current_page_description'), }, { value: 'all', label: allRowsLabel, description: (resultExportAllSql || resultSql) - ? '后台会重新执行 SQL,避免只导出当前页或当前缓存。' - : '当前查询缺少可重放 SQL 时,将导出当前缓存的全部结果。', + ? translateDataGrid('data_grid.export.scope.all_results_requery_description') + : translateDataGrid('data_grid.export.scope.all_results_cached_description'), }, ]; const values = await showDataExportDialog(modal, { - title: '导出查询结果', + title: translateDataGrid('file.backend.dialog.export_query_result'), scopeOptions, initialValues: { ...commonInitialValues, @@ -842,29 +858,31 @@ const handleV2ColumnHeaderContextMenuAction = useCallback((action: V2ColumnHeade connectionId, dbName, tableName: tableName || 'export', - title: `导出 ${tableName || '数据'}`, + title: resolveExportTitle(tableName || 'export'), objectType, scopeOptions: [ { value: 'page', - label: `当前页 (${displayData.length} 条)`, + label: translateDataGrid('data_grid.export.scope.current_page', { + count: displayData.length, + }), description: currentPageSql - ? '后台按当前分页条件重新查询后导出当前页。' - : '当前页依赖前端临时状态,建议直接使用快捷导出。', + ? translateDataGrid('data_grid.export.scope.current_page_requery_description') + : translateDataGrid('data_grid.export.scope.current_page_unavailable_description'), disabled: !currentPageSql, }, ...(hasFilteredExportSql ? [{ value: 'filteredAll' as const, - label: '筛选结果(全部)', + label: translateDataGrid('data_grid.export.scope.filtered_results_all'), description: filteredAllSql - ? '按当前筛选条件重新查询数据库并导出全部筛选结果。' - : '当前数据源或当前状态暂不支持在工作台重放筛选导出。', + ? translateDataGrid('data_grid.export.scope.filtered_results_all_requery_description') + : translateDataGrid('data_grid.export.scope.filtered_results_all_unavailable_description'), disabled: !filteredAllSql, }] : []), { value: 'all', - label: '全表数据', - description: '后台重新查询整张表并导出全部数据。', + label: translateDataGrid('data_export.workbench.scope.all.label'), + description: translateDataGrid('data_export.workbench.scope.all.description'), }, ], initialScope: hasFilteredExportSql && filteredAllSql ? 'filteredAll' : 'all', @@ -902,6 +920,7 @@ const handleV2ColumnHeaderContextMenuAction = useCallback((action: V2ColumnHeade supportsSqlQueryExport, tableName, hasChanges, + translateDataGrid, ]); return { diff --git a/frontend/src/components/useExportProgressRunner.test.tsx b/frontend/src/components/useExportProgressRunner.test.tsx index 02ea5c3..7f0cba1 100644 --- a/frontend/src/components/useExportProgressRunner.test.tsx +++ b/frontend/src/components/useExportProgressRunner.test.tsx @@ -2,6 +2,7 @@ import React from 'react'; import { act, create, type ReactTestRenderer } from 'react-test-renderer'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { setCurrentLanguage } from '../i18n'; import { useExportProgressRunner } from './useExportProgressRunner'; const runtimeApi = vi.hoisted(() => { @@ -58,6 +59,7 @@ describe('useExportProgressRunner', () => { runner = null; renderer = null; now = 1_000; + setCurrentLanguage('zh-CN'); runtimeApi.reset(); runtimeApi.EventsOn.mockClear(); messageApi.warning.mockReset(); @@ -70,6 +72,7 @@ describe('useExportProgressRunner', () => { act(() => { renderer?.unmount(); }); + setCurrentLanguage('en-US'); vi.restoreAllMocks(); }); diff --git a/frontend/src/components/useExportProgressRunner.ts b/frontend/src/components/useExportProgressRunner.ts index 1c6865c..07d92e2 100644 --- a/frontend/src/components/useExportProgressRunner.ts +++ b/frontend/src/components/useExportProgressRunner.ts @@ -1,6 +1,7 @@ import { useCallback, useEffect, useRef, useState } from 'react'; import { message } from 'antd'; import { EventsOn } from '../../wailsjs/runtime/runtime'; +import { t } from '../i18n'; import type { ExportProgressStatus } from '../utils/exportProgress'; export type ExportProgressEvent = { @@ -83,6 +84,7 @@ const hasUsableTotalRows = (known: boolean, total: unknown): boolean => { }; const buildExportJobId = (): string => `export-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`; +const EXPORT_CANCELED_MESSAGE = '\u5df2\u53d6\u6d88'; const isActiveExportStatus = (status: ExportProgressStatus): boolean => status === 'start' || status === 'running' || status === 'finalizing' || status === 'done' || status === 'error'; @@ -145,7 +147,7 @@ export function useExportProgressRunner(options?: UseExportProgressRunnerOptions ): Promise => { if (state.open && (state.status === 'start' || state.status === 'running' || state.status === 'finalizing')) { if (showToast) { - void message.warning('当前已有导出任务正在执行,请等待完成后再发起新的导出'); + void message.warning(t('data_export.message.already_running')); } return null; } @@ -166,7 +168,7 @@ export function useExportProgressRunner(options?: UseExportProgressRunnerOptions startedAt: 0, finishedAt: 0, status: 'start', - stage: '等待选择导出文件', + stage: t('data_export.progress.stage.waiting_file_selection'), current: 0, total: totalRowsKnown ? requestedTotal : 0, totalRowsKnown, @@ -186,15 +188,15 @@ export function useExportProgressRunner(options?: UseExportProgressRunnerOptions open: true, status: 'done', finishedAt: prev.finishedAt || Date.now(), - stage: prev.stage || '导出完成', + stage: prev.stage || t('data_export.progress.title.done'), current: prev.totalRowsKnown ? Math.max(prev.current, prev.total) : prev.current, message: '', }; }); if (showToast) { - void message.success('导出成功'); + void message.success(t('data_export.message.export_success')); } - } else if (result.message !== '已取消') { + } else if (result.message !== EXPORT_CANCELED_MESSAGE) { setState((prev) => { if (prev.jobId !== jobId) { return prev; @@ -204,12 +206,12 @@ export function useExportProgressRunner(options?: UseExportProgressRunnerOptions open: true, status: 'error', finishedAt: prev.finishedAt || Date.now(), - stage: prev.stage || '导出失败', + stage: prev.stage || t('data_export.progress.title.error'), message: result.message, }; }); if (showToast) { - void message.error(`导出失败: ${result.message}`); + void message.error(t('data_export.message.export_failed', { error: result.message })); } } else { reset(); @@ -226,12 +228,12 @@ export function useExportProgressRunner(options?: UseExportProgressRunnerOptions open: true, status: 'error', finishedAt: prev.finishedAt || Date.now(), - stage: prev.stage || '导出失败', + stage: prev.stage || t('data_export.progress.title.error'), message: errorMessage, }; }); if (showToast) { - void message.error(`导出失败: ${errorMessage}`); + void message.error(t('data_export.message.export_failed', { error: errorMessage })); } throw error; } diff --git a/frontend/src/utils/tableExportTab.test.ts b/frontend/src/utils/tableExportTab.test.ts index 08543cb..aaa45d4 100644 --- a/frontend/src/utils/tableExportTab.test.ts +++ b/frontend/src/utils/tableExportTab.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest'; +import { afterEach, describe, expect, it } from 'vitest'; import { buildBatchDatabaseExportWorkbenchTab, @@ -8,8 +8,13 @@ import { buildTableExportTab, DEFAULT_TABLE_EXPORT_SCOPE_OPTION, } from './tableExportTab'; +import { setCurrentLanguage } from '../i18n'; describe('tableExportTab', () => { + afterEach(() => { + setCurrentLanguage('en-US'); + }); + it('builds a stable history key for persisted export records', () => { expect(buildTableExportHistoryKey(' conn-1 ', ' app ', ' public.orders ')).toBe('conn-1::app::public.orders'); }); @@ -29,6 +34,7 @@ describe('tableExportTab', () => { }); it('builds a stable table export tab with normalized defaults', () => { + setCurrentLanguage('zh-CN'); const tab = buildTableExportTab({ connectionId: 'conn-1', dbName: 'app', @@ -39,7 +45,7 @@ describe('tableExportTab', () => { expect(tab.type).toBe('table-export'); expect(tab.title).toBe('导出 public.orders'); expect(tab.exportWorkbenchMode).toBe('single'); - expect(tab.tableExportScopeOptions).toEqual([DEFAULT_TABLE_EXPORT_SCOPE_OPTION]); + expect(tab.tableExportScopeOptions).toEqual([{ ...DEFAULT_TABLE_EXPORT_SCOPE_OPTION }]); expect(tab.tableExportInitialScope).toBe('all'); expect(tab.tableExportQueryByScope).toBeUndefined(); expect(tab.tableExportRowCountByScope).toBeUndefined(); @@ -80,6 +86,7 @@ describe('tableExportTab', () => { }); it('builds batch table export workbench tabs with stable ids', () => { + setCurrentLanguage('zh-CN'); const tab = buildBatchTableExportWorkbenchTab({ connectionId: 'conn-1', dbName: 'SYS', @@ -93,6 +100,7 @@ describe('tableExportTab', () => { }); it('builds batch database export workbench tabs with stable ids', () => { + setCurrentLanguage('zh-CN'); const tab = buildBatchDatabaseExportWorkbenchTab({ connectionId: 'conn-1', }); @@ -102,4 +110,15 @@ describe('tableExportTab', () => { expect(tab.title).toBe('批量导出库'); expect(tab.exportWorkbenchMode).toBe('batch-databases'); }); + + it('uses the current language for batch workbench fallback titles', () => { + setCurrentLanguage('en-US'); + + expect(buildBatchTableExportWorkbenchTab({ + connectionId: 'conn-1', + }).title).toBe('Batch export objects'); + expect(buildBatchDatabaseExportWorkbenchTab({ + connectionId: 'conn-1', + }).title).toBe('Batch export databases'); + }); }); diff --git a/frontend/src/utils/tableExportTab.ts b/frontend/src/utils/tableExportTab.ts index 592e5ec..51fe1a6 100644 --- a/frontend/src/utils/tableExportTab.ts +++ b/frontend/src/utils/tableExportTab.ts @@ -1,9 +1,14 @@ import type { TabData, TableExportScope, TableExportScopeOption } from '../types'; +import { t } from '../i18n'; export const DEFAULT_TABLE_EXPORT_SCOPE_OPTION: TableExportScopeOption = { value: 'all', - label: '全表数据', - description: '后台重新查询整张表并导出全部数据。', + get label() { + return t('data_export.workbench.scope.all.label'); + }, + get description() { + return t('data_export.workbench.scope.all.description'); + }, }; export const buildTableExportHistoryKey = ( @@ -129,10 +134,11 @@ export const buildTableExportTab = (input: BuildTableExportTabInput): TabData => const tableName = String(input.tableName || '').trim(); const scopeOptions = normalizeScopeOptions(input.scopeOptions); const initialScope = resolveInitialScope(scopeOptions, input.initialScope); - const objectLabel = tableName || '未命名对象'; + const objectLabel = tableName || t('data_export.progress.value.target_fallback'); return { id: `table-export-${connectionId}-${dbName}-${tableName}`, - title: String(input.title || `导出 ${objectLabel}`).trim() || `导出 ${objectLabel}`, + title: String(input.title || t('data_export.workbench.task.export_target', { name: objectLabel })).trim() + || t('data_export.workbench.task.export_target', { name: objectLabel }), type: 'table-export', exportWorkbenchMode: 'single', connectionId, @@ -157,7 +163,7 @@ export const buildBatchTableExportWorkbenchTab = ( const scopeSuffix = dbName || 'all'; return { id: `table-export-batch-tables-${connectionId || 'none'}-${scopeSuffix}`, - title: String(input.title || '批量导出对象').trim() || '批量导出对象', + title: String(input.title || t('sidebar.tab.batch_export_objects')).trim() || t('sidebar.tab.batch_export_objects'), type: 'table-export', exportWorkbenchMode: 'batch-tables', connectionId, @@ -172,7 +178,7 @@ export const buildBatchDatabaseExportWorkbenchTab = ( const connectionId = String(input.connectionId || '').trim(); return { id: `table-export-batch-databases-${connectionId || 'none'}`, - title: String(input.title || '批量导出库').trim() || '批量导出库', + title: String(input.title || t('sidebar.tab.batch_export_databases')).trim() || t('sidebar.tab.batch_export_databases'), type: 'table-export', exportWorkbenchMode: 'batch-databases', connectionId, diff --git a/internal/app/connection_readonly.go b/internal/app/connection_readonly.go index 89e73dc..3818b43 100644 --- a/internal/app/connection_readonly.go +++ b/internal/app/connection_readonly.go @@ -3,7 +3,6 @@ package app import ( "encoding/json" "errors" - "fmt" "strings" "GoNavi-Wails/internal/connection" @@ -88,6 +87,43 @@ var mongoMetaCommandKeys = map[string]struct{}{ "writeconcern": {}, } +var readOnlyConnectionActionTextKeys = map[string]string{ + "创建数据库": "connection.backend.action.create_database", + "connection.backend.action.create_database": "connection.backend.action.create_database", + "创建模式": "connection.backend.action.create_schema", + "connection.backend.action.create_schema": "connection.backend.action.create_schema", + "重命名模式": "connection.backend.action.rename_schema", + "connection.backend.action.rename_schema": "connection.backend.action.rename_schema", + "删除模式": "connection.backend.action.drop_schema", + "connection.backend.action.drop_schema": "connection.backend.action.drop_schema", + "重命名数据库": "connection.backend.action.rename_database", + "connection.backend.action.rename_database": "connection.backend.action.rename_database", + "删除数据库": "connection.backend.action.drop_database", + "connection.backend.action.drop_database": "connection.backend.action.drop_database", + "重命名表": "connection.backend.action.rename_table", + "connection.backend.action.rename_table": "connection.backend.action.rename_table", + "删除表": "connection.backend.action.drop_table", + "connection.backend.action.drop_table": "connection.backend.action.drop_table", + "删除视图": "connection.backend.action.drop_view", + "connection.backend.action.drop_view": "connection.backend.action.drop_view", + "删除函数或存储过程": "connection.backend.action.drop_function_or_procedure", + "connection.backend.action.drop_function_or_procedure": "connection.backend.action.drop_function_or_procedure", + "重命名视图": "connection.backend.action.rename_view", + "connection.backend.action.rename_view": "connection.backend.action.rename_view", + "导入数据": "connection.backend.action.import_data", + "connection.backend.action.import_data": "connection.backend.action.import_data", + "提交结果修改": "connection.backend.action.apply_result_changes", + "connection.backend.action.apply_result_changes": "connection.backend.action.apply_result_changes", + "预览结果修改": "connection.backend.action.preview_result_changes", + "connection.backend.action.preview_result_changes": "connection.backend.action.preview_result_changes", + "clear_table": "connection.backend.action.clear_table", + "connection.backend.action.clear_table": "connection.backend.action.clear_table", + "truncate_table": "connection.backend.action.truncate_table", + "connection.backend.action.truncate_table": "connection.backend.action.truncate_table", + "数据同步写入": "connection.backend.action.data_sync_write", + "connection.backend.action.data_sync_write": "connection.backend.action.data_sync_write", +} + func supportsConnectionReadOnlyMode(config connection.ConnectionConfig) bool { _, ok := connectionReadOnlySupportedTypes[resolveDDLDBType(config)] return ok @@ -97,35 +133,74 @@ func isConnectionForcedReadOnly(config connection.ConnectionConfig) bool { return config.ReadOnly && supportsConnectionReadOnlyMode(config) } +func normalizeReadOnlyConnectionText(text func(string, map[string]any) string) func(string, map[string]any) string { + if text != nil { + return text + } + return defaultAppText +} + +func readOnlyConnectionQueryBlockedMessageWithText(text func(string, map[string]any) string) string { + text = normalizeReadOnlyConnectionText(text) + return text("query_editor.message.connection_readonly_blocked", nil) +} + +func resolveReadOnlyConnectionActionLabel(action string, text func(string, map[string]any) string) string { + label := strings.TrimSpace(action) + if label == "" { + return "" + } + text = normalizeReadOnlyConnectionText(text) + if key, ok := readOnlyConnectionActionTextKeys[label]; ok { + return text(key, nil) + } + return label +} + func readOnlyConnectionQueryBlockedMessage() string { - return "当前连接已启用生产保护,仅允许执行查询操作" + return readOnlyConnectionQueryBlockedMessageWithText(defaultAppText) +} + +func readOnlyConnectionActionBlockedMessageWithText(action string, text func(string, map[string]any) string) string { + label := resolveReadOnlyConnectionActionLabel(action, text) + if label == "" { + return readOnlyConnectionQueryBlockedMessageWithText(text) + } + text = normalizeReadOnlyConnectionText(text) + return text("connection.backend.error.readonly_action_blocked", map[string]any{"action": label}) } func readOnlyConnectionActionBlockedMessage(action string) string { - label := strings.TrimSpace(action) - if label == "" { - return readOnlyConnectionQueryBlockedMessage() - } - return fmt.Sprintf("当前连接已启用生产保护,禁止执行%s", label) + return readOnlyConnectionActionBlockedMessageWithText(action, defaultAppText) } -func ensureReadOnlyConnectionAllowsQuery(config connection.ConnectionConfig, query string) error { +func ensureReadOnlyConnectionAllowsQueryWithText(config connection.ConnectionConfig, query string, text func(string, map[string]any) string) error { + text = normalizeReadOnlyConnectionText(text) if !isConnectionForcedReadOnly(config) { return nil } for _, statement := range splitSQLStatements(query) { if trimmed := strings.TrimSpace(statement); trimmed != "" && !isReadOnlySQLQuery(resolveDDLDBType(config), trimmed) { - return errors.New(readOnlyConnectionQueryBlockedMessage()) + return errors.New(readOnlyConnectionQueryBlockedMessageWithText(text)) } } return nil } -func ensureReadOnlyConnectionAllowsAction(config connection.ConnectionConfig, action string) error { +func ensureReadOnlyConnectionAllowsQuery(config connection.ConnectionConfig, query string) error { + return ensureReadOnlyConnectionAllowsQueryWithText(config, query, defaultAppText) +} + +func ensureReadOnlyConnectionAllowsActionWithText(config connection.ConnectionConfig, action string, text func(string, map[string]any) string) error { + text = normalizeReadOnlyConnectionText(text) if !isConnectionForcedReadOnly(config) { return nil } - return errors.New(readOnlyConnectionActionBlockedMessage(action)) + return errors.New(readOnlyConnectionActionBlockedMessageWithText(action, text)) +} + +func ensureReadOnlyConnectionAllowsAction(config connection.ConnectionConfig, action string) error { + return ensureReadOnlyConnectionAllowsActionWithText(config, action, defaultAppText) } func isReadOnlyMongoCommand(query string) bool { diff --git a/internal/app/connection_readonly_i18n_test.go b/internal/app/connection_readonly_i18n_test.go new file mode 100644 index 0000000..053b94f --- /dev/null +++ b/internal/app/connection_readonly_i18n_test.go @@ -0,0 +1,129 @@ +package app + +import ( + "os" + "strings" + "testing" + + "GoNavi-Wails/internal/connection" + syncjob "GoNavi-Wails/internal/sync" + "GoNavi-Wails/shared/i18n" +) + +func TestConnectionReadOnlyMessagesUseLocalizedText(t *testing.T) { + sourceBytes, err := os.ReadFile("connection_readonly.go") + if err != nil { + t.Fatalf("read connection_readonly.go: %v", err) + } + source := string(sourceBytes) + + rawMessages := []string{ + `return "当前连接已启用生产保护,仅允许执行查询操作"`, + `return fmt.Sprintf("当前连接已启用生产保护,禁止执行%s", label)`, + } + for _, raw := range rawMessages { + if strings.Contains(source, raw) { + t.Fatalf("connection_readonly.go still contains raw user-visible text %q", raw) + } + } + + keys := []string{ + "query_editor.message.connection_readonly_blocked", + "connection.backend.error.readonly_action_blocked", + "connection.backend.action.create_database", + "connection.backend.action.import_data", + "connection.backend.action.data_sync_write", + "connection.backend.action.clear_table", + "connection.backend.action.truncate_table", + } + for _, key := range keys { + if !strings.Contains(source, key) { + t.Fatalf("connection_readonly.go should reference localized key %q", key) + } + } +} + +func TestConnectionReadOnlyCatalogKeysExist(t *testing.T) { + catalogs, err := i18n.LoadCatalogs() + if err != nil { + t.Fatalf("LoadCatalogs() error = %v", err) + } + + keys := []string{ + "connection.backend.error.readonly_action_blocked", + "connection.backend.action.create_database", + "connection.backend.action.create_schema", + "connection.backend.action.rename_schema", + "connection.backend.action.drop_schema", + "connection.backend.action.rename_database", + "connection.backend.action.drop_database", + "connection.backend.action.rename_table", + "connection.backend.action.drop_table", + "connection.backend.action.drop_view", + "connection.backend.action.drop_function_or_procedure", + "connection.backend.action.rename_view", + "connection.backend.action.import_data", + "connection.backend.action.apply_result_changes", + "connection.backend.action.preview_result_changes", + "connection.backend.action.clear_table", + "connection.backend.action.truncate_table", + "connection.backend.action.data_sync_write", + } + + for _, language := range i18n.SupportedLanguages() { + catalog := catalogs[language] + for _, key := range keys { + if strings.TrimSpace(catalog[key]) == "" { + t.Fatalf("%s catalog missing connection read-only key %q", language, key) + } + } + } +} + +func TestConnectionReadOnlyUsesCurrentLanguageForBlockedMessages(t *testing.T) { + app := NewApp() + app.SetLanguage(string(i18n.LanguageEnUS)) + t.Cleanup(func() { + app.SetLanguage(string(i18n.LanguageEnUS)) + }) + + readonlyConfig := connection.ConnectionConfig{Type: "postgres", ReadOnly: true} + + createDatabase := app.CreateDatabase(readonlyConfig, "demo") + expectedCreateDatabase := app.appText("connection.backend.error.readonly_action_blocked", map[string]any{ + "action": app.appText("connection.backend.action.create_database", nil), + }) + if createDatabase.Message != expectedCreateDatabase { + t.Fatalf("expected localized create-database message %q, got %q", expectedCreateDatabase, createDatabase.Message) + } + + dataSync := app.DataSync(syncjob.SyncConfig{ + TargetConfig: readonlyConfig, + }) + expectedDataSync := app.appText("connection.backend.error.readonly_action_blocked", map[string]any{ + "action": app.appText("connection.backend.action.data_sync_write", nil), + }) + if dataSync.Message != expectedDataSync { + t.Fatalf("expected localized data-sync message %q, got %q", expectedDataSync, dataSync.Message) + } + + clearTable := app.runTableDataClear(readonlyConfig, "demo", []string{"users"}, tableDataClearModeDeleteAll) + expectedClearTable := app.appText("connection.backend.error.readonly_action_blocked", map[string]any{ + "action": app.appText("connection.backend.action.clear_table", nil), + }) + if clearTable.Message != expectedClearTable { + t.Fatalf("expected localized clear-table message %q, got %q", expectedClearTable, clearTable.Message) + } + if strings.Contains(clearTable.Message, "clear_table") { + t.Fatalf("expected no raw clear_table sentinel in blocked message, got %q", clearTable.Message) + } + + blockedQuery := app.DBQueryMultiTransactional(readonlyConfig, "", "update users set active = 1", "q-readonly") + expectedBlockedQuery := app.appText("query_editor.message.connection_readonly_blocked", nil) + if blockedQuery.Message != expectedBlockedQuery { + t.Fatalf("expected localized read-only query message %q, got %q", expectedBlockedQuery, blockedQuery.Message) + } + if strings.Contains(blockedQuery.Message, "当前连接已启用生产保护") { + t.Fatalf("expected no raw Chinese query-blocked message, got %q", blockedQuery.Message) + } +} diff --git a/internal/app/connection_readonly_test.go b/internal/app/connection_readonly_test.go index 5e65549..05e3671 100644 --- a/internal/app/connection_readonly_test.go +++ b/internal/app/connection_readonly_test.go @@ -5,6 +5,7 @@ import ( "testing" "GoNavi-Wails/internal/connection" + "GoNavi-Wails/shared/i18n" ) func TestSupportsConnectionReadOnlyMode(t *testing.T) { @@ -38,12 +39,17 @@ func TestEnsureReadOnlyConnectionAllowsQuery(t *testing.T) { } func TestEnsureReadOnlyConnectionAllowsAction(t *testing.T) { + setDefaultAppLanguage(i18n.LanguageEnUS) + t.Cleanup(func() { + setDefaultAppLanguage(i18n.LanguageEnUS) + }) + config := connection.ConnectionConfig{Type: "postgres", ReadOnly: true} - err := ensureReadOnlyConnectionAllowsAction(config, "删除数据库") + err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.drop_database") if err == nil { t.Fatal("read-only connection should block mutating actions") } - if !strings.Contains(err.Error(), "删除数据库") { + if !strings.Contains(err.Error(), defaultAppText("connection.backend.action.drop_database", nil)) { t.Fatalf("blocked action message should include action label, got %q", err.Error()) } } diff --git a/internal/app/methods_db.go b/internal/app/methods_db.go index 5f42c94..a26ca0e 100644 --- a/internal/app/methods_db.go +++ b/internal/app/methods_db.go @@ -195,7 +195,7 @@ func (a *App) CreateDatabase(config connection.ConnectionConfig, dbName string) if dbName == "" { return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.database_name_required", nil)} } - if err := ensureReadOnlyConnectionAllowsAction(config, "创建数据库"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.create_database"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } @@ -368,7 +368,7 @@ func resolveSchemaDDLTargetDatabaseWithText(config connection.ConnectionConfig, } func (a *App) CreateSchema(config connection.ConnectionConfig, dbName string, schemaName string) connection.QueryResult { - if err := ensureReadOnlyConnectionAllowsAction(config, "创建模式"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.create_schema"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } dbType := resolveDDLDBType(config) @@ -396,7 +396,7 @@ func (a *App) CreateSchema(config connection.ConnectionConfig, dbName string, sc } func (a *App) RenameSchema(config connection.ConnectionConfig, dbName string, oldSchemaName string, newSchemaName string) connection.QueryResult { - if err := ensureReadOnlyConnectionAllowsAction(config, "重命名模式"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.rename_schema"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } dbType := resolveDDLDBType(config) @@ -422,7 +422,7 @@ func (a *App) RenameSchema(config connection.ConnectionConfig, dbName string, ol } func (a *App) DropSchema(config connection.ConnectionConfig, dbName string, schemaName string) connection.QueryResult { - if err := ensureReadOnlyConnectionAllowsAction(config, "删除模式"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.drop_schema"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } dbType := resolveDDLDBType(config) @@ -680,7 +680,7 @@ func (a *App) RenameDatabase(config connection.ConnectionConfig, oldName string, if oldName == "" || newName == "" { return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.database_name_required", nil)} } - if err := ensureReadOnlyConnectionAllowsAction(config, "重命名数据库"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.rename_database"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } if strings.EqualFold(oldName, newName) { @@ -726,7 +726,7 @@ func (a *App) DropDatabase(config connection.ConnectionConfig, dbName string) co if dbName == "" { return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.database_name_required", nil)} } - if err := ensureReadOnlyConnectionAllowsAction(config, "删除数据库"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.drop_database"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } @@ -763,7 +763,7 @@ func (a *App) RenameTable(config connection.ConnectionConfig, dbName string, old if oldTableName == "" || newTableName == "" { return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.table_name_required", nil)} } - if err := ensureReadOnlyConnectionAllowsAction(config, "重命名表"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.rename_table"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } if strings.EqualFold(oldTableName, newTableName) { @@ -818,7 +818,7 @@ func (a *App) DropTable(config connection.ConnectionConfig, dbName string, table if tableName == "" { return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.table_name_required", nil)} } - if err := ensureReadOnlyConnectionAllowsAction(config, "删除表"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.drop_table"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } @@ -2311,7 +2311,7 @@ func (a *App) DropView(config connection.ConnectionConfig, dbName string, viewNa if viewName == "" { return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.view_name_required", nil)} } - if err := ensureReadOnlyConnectionAllowsAction(config, "删除视图"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.drop_view"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } @@ -2346,7 +2346,7 @@ func (a *App) DropFunction(config connection.ConnectionConfig, dbName string, ro if routineName == "" { return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.routine_name_required", nil)} } - if err := ensureReadOnlyConnectionAllowsAction(config, "删除函数或存储过程"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.drop_function_or_procedure"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } if routineType != "FUNCTION" && routineType != "PROCEDURE" { @@ -2391,7 +2391,7 @@ func (a *App) RenameView(config connection.ConnectionConfig, dbName string, oldN if oldName == "" || newName == "" { return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.view_name_required", nil)} } - if err := ensureReadOnlyConnectionAllowsAction(config, "重命名视图"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.rename_view"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } if strings.EqualFold(oldName, newName) { diff --git a/internal/app/methods_explain.go b/internal/app/methods_explain.go index 76022c4..d335e8b 100644 --- a/internal/app/methods_explain.go +++ b/internal/app/methods_explain.go @@ -59,10 +59,10 @@ const explainStatementTimeoutFloor = 5 * time.Minute func (a *App) DiagnoseQuery(config connection.ConnectionConfig, dbName, query string) connection.QueryResult { query = strings.TrimSpace(query) if query == "" { - return connection.QueryResult{Success: false, Message: "查询语句不能为空"} + return connection.QueryResult{Success: false, Message: a.appText("sql_analysis.backend.error.query_required", nil)} } if !looksLikeSelectOrWith(query) { - return connection.QueryResult{Success: false, Message: "诊断仅支持 SELECT / WITH 查询;写操作请使用 EXPLAIN PLAN 模式(PR2 支持)"} + return connection.QueryResult{Success: false, Message: a.appText("sql_analysis.backend.error.select_only", nil)} } runConfig := normalizeRunConfig(config, dbName) @@ -70,7 +70,7 @@ func (a *App) DiagnoseQuery(config connection.ConnectionConfig, dbName, query st if !explainSupportedDBTypes[dbType] { return connection.QueryResult{ Success: false, - Message: fmt.Sprintf("当前数据源(%s)暂不支持 SQL 诊断;一期支持 MySQL/PostgreSQL/SQLite/ClickHouse/Oracle/SQLServer/OceanBase", dbType), + Message: a.appText("sql_analysis.backend.error.unsupported_db_type", map[string]any{"dbType": dbType}), } } @@ -88,7 +88,7 @@ func (a *App) DiagnoseQuery(config connection.ConnectionConfig, dbName, query st suggestions := runExplainRules(plan) report := connection.DiagnoseReport{Plan: plan, Suggestions: suggestions} logger.Infof("DiagnoseQuery 完成:type=%s nodes=%d suggestions=%d", dbType, len(plan.Nodes), len(suggestions)) - return connection.QueryResult{Success: true, Message: "诊断完成", Data: report} + return connection.QueryResult{Success: true, Message: a.appText("sql_analysis.backend.message.completed", nil), Data: report} } // executeExplain 决定走哪条 EXPLAIN 执行路径: diff --git a/internal/app/methods_explain_i18n_test.go b/internal/app/methods_explain_i18n_test.go new file mode 100644 index 0000000..ad9fc52 --- /dev/null +++ b/internal/app/methods_explain_i18n_test.go @@ -0,0 +1,264 @@ +package app + +import ( + "context" + "os" + "strings" + "testing" + + "GoNavi-Wails/internal/connection" + "GoNavi-Wails/internal/db" + "GoNavi-Wails/shared/i18n" +) + +func methodsExplainFunctionSource(t *testing.T, source string, signature string) string { + t.Helper() + start := strings.Index(source, signature) + if start < 0 { + t.Fatalf("methods source missing function signature %q", signature) + } + rest := source[start+len(signature):] + end := strings.Index(rest, "\nfunc ") + if end < 0 { + return source[start:] + } + return source[start : start+len(signature)+end] +} + +type fakeExplainDatabase struct { + explainRaw string + explainFormat connection.ExplainFormat +} + +func (db *fakeExplainDatabase) Connect(config connection.ConnectionConfig) error { return nil } +func (db *fakeExplainDatabase) Close() error { return nil } +func (db *fakeExplainDatabase) Ping() error { return nil } +func (db *fakeExplainDatabase) Query(query string) ([]map[string]interface{}, []string, error) { + return nil, nil, nil +} +func (db *fakeExplainDatabase) Exec(query string) (int64, error) { return 0, nil } +func (db *fakeExplainDatabase) GetDatabases() ([]string, error) { return nil, nil } +func (db *fakeExplainDatabase) GetTables(dbName string) ([]string, error) { + return nil, nil +} +func (db *fakeExplainDatabase) GetCreateStatement(dbName, tableName string) (string, error) { + return "", nil +} +func (db *fakeExplainDatabase) GetColumns(dbName, tableName string) ([]connection.ColumnDefinition, error) { + return nil, nil +} +func (db *fakeExplainDatabase) GetAllColumns(dbName string) ([]connection.ColumnDefinitionWithTable, error) { + return nil, nil +} +func (db *fakeExplainDatabase) GetIndexes(dbName, tableName string) ([]connection.IndexDefinition, error) { + return nil, nil +} +func (db *fakeExplainDatabase) GetForeignKeys(dbName, tableName string) ([]connection.ForeignKeyDefinition, error) { + return nil, nil +} +func (db *fakeExplainDatabase) GetTriggers(dbName, tableName string) ([]connection.TriggerDefinition, error) { + return nil, nil +} +func (db *fakeExplainDatabase) Explain(ctx context.Context, query string) (string, connection.ExplainFormat, error) { + return db.explainRaw, db.explainFormat, nil +} + +func TestMethodsExplainAndQueryHistoryMessagesUseLocalizedText(t *testing.T) { + explainSourceBytes, err := os.ReadFile("methods_explain.go") + if err != nil { + t.Fatalf("read methods_explain.go: %v", err) + } + queryHistorySourceBytes, err := os.ReadFile("methods_query_history.go") + if err != nil { + t.Fatalf("read methods_query_history.go: %v", err) + } + + explainSource := string(explainSourceBytes) + queryHistorySource := string(queryHistorySourceBytes) + + checks := map[string]struct { + source string + signature string + rawMessages []string + keys []string + }{ + "DiagnoseQuery": { + source: explainSource, + signature: "func (a *App) DiagnoseQuery", + rawMessages: []string{ + `Message: "查询语句不能为空"`, + `Message: "诊断仅支持 SELECT / WITH 查询;写操作请使用 EXPLAIN PLAN 模式(PR2 支持)"`, + `fmt.Sprintf("当前数据源(%s)暂不支持 SQL 诊断;一期支持 MySQL/PostgreSQL/SQLite/ClickHouse/Oracle/SQLServer/OceanBase", dbType)`, + `Message: "诊断完成"`, + }, + keys: []string{ + "sql_analysis.backend.error.query_required", + "sql_analysis.backend.error.select_only", + "sql_analysis.backend.error.unsupported_db_type", + "sql_analysis.backend.message.completed", + }, + }, + "GetSlowQueries": { + source: queryHistorySource, + signature: "func (a *App) GetSlowQueries", + rawMessages: []string{ + `Message: "无法解析连接指纹"`, + `Message: "加载完成"`, + }, + keys: []string{ + "query_history.backend.error.connection_fingerprint_invalid", + "query_history.backend.message.loaded", + }, + }, + "ClearSlowQueries": { + source: queryHistorySource, + signature: "func (a *App) ClearSlowQueries", + rawMessages: []string{ + `Message: "无法解析连接指纹"`, + `Message: "已清空慢查询历史"`, + }, + keys: []string{ + "query_history.backend.error.connection_fingerprint_invalid", + "query_history.backend.message.cleared", + }, + }, + } + + for name, check := range checks { + body := methodsExplainFunctionSource(t, check.source, check.signature) + for _, raw := range check.rawMessages { + if strings.Contains(body, raw) { + t.Fatalf("%s still contains raw user-visible text %q", name, raw) + } + } + for _, key := range check.keys { + if !strings.Contains(body, key) { + t.Fatalf("%s should reference localized key %q", name, key) + } + } + } +} + +func TestMethodsExplainAndQueryHistoryCatalogKeysExist(t *testing.T) { + catalogs, err := i18n.LoadCatalogs() + if err != nil { + t.Fatalf("LoadCatalogs() error = %v", err) + } + + keys := []string{ + "sql_analysis.backend.error.query_required", + "sql_analysis.backend.error.select_only", + "sql_analysis.backend.error.unsupported_db_type", + "sql_analysis.backend.message.completed", + "query_history.backend.error.connection_fingerprint_invalid", + "query_history.backend.message.loaded", + "query_history.backend.message.cleared", + } + + for _, language := range i18n.SupportedLanguages() { + catalog := catalogs[language] + for _, key := range keys { + if strings.TrimSpace(catalog[key]) == "" { + t.Fatalf("%s catalog missing explain/query-history key %q", language, key) + } + } + } +} + +func TestDiagnoseQueryUsesCurrentLanguageForValidationAndSuccessMessages(t *testing.T) { + originalNewDatabaseFunc := newDatabaseFunc + originalResolveDialConfigWithProxyFunc := resolveDialConfigWithProxyFunc + originalDriverRuntimeSupportStatusFunc := driverRuntimeSupportStatusFunc + originalVerifyDriverAgentRevisionFunc := verifyDriverAgentRevisionFunc + defer func() { + newDatabaseFunc = originalNewDatabaseFunc + resolveDialConfigWithProxyFunc = originalResolveDialConfigWithProxyFunc + driverRuntimeSupportStatusFunc = originalDriverRuntimeSupportStatusFunc + verifyDriverAgentRevisionFunc = originalVerifyDriverAgentRevisionFunc + }() + + newDatabaseFunc = func(dbType string) (db.Database, error) { + return &fakeExplainDatabase{ + explainRaw: "id\tparent\tnotused\tdetail\n2\t0\t0\tSCAN TABLE users\n", + explainFormat: connection.ExplainFormatTable, + }, nil + } + resolveDialConfigWithProxyFunc = func(raw connection.ConnectionConfig) (connection.ConnectionConfig, error) { + return raw, nil + } + driverRuntimeSupportStatusFunc = func(string) (bool, string) { + return true, "" + } + verifyDriverAgentRevisionFunc = func(connection.ConnectionConfig) error { + return nil + } + + app := NewApp() + app.SetLanguage(string(i18n.LanguageEnUS)) + app.configDir = t.TempDir() + t.Cleanup(func() { + app.SetLanguage(string(i18n.LanguageEnUS)) + }) + + empty := app.DiagnoseQuery(connection.ConnectionConfig{}, "", " ") + if expected := app.appText("sql_analysis.backend.error.query_required", nil); empty.Message != expected { + t.Fatalf("expected localized empty-query message %q, got %q", expected, empty.Message) + } + if strings.Contains(empty.Message, "查询语句不能为空") { + t.Fatalf("expected no raw Chinese empty-query message, got %q", empty.Message) + } + + nonSelect := app.DiagnoseQuery(connection.ConnectionConfig{}, "", "update users set active = 1") + if expected := app.appText("sql_analysis.backend.error.select_only", nil); nonSelect.Message != expected { + t.Fatalf("expected localized non-select message %q, got %q", expected, nonSelect.Message) + } + + unsupported := app.DiagnoseQuery(connection.ConnectionConfig{Type: "redis", Host: "127.0.0.1"}, "", "select 1") + if expected := app.appText("sql_analysis.backend.error.unsupported_db_type", map[string]any{"dbType": "redis"}); unsupported.Message != expected { + t.Fatalf("expected localized unsupported-db message %q, got %q", expected, unsupported.Message) + } + + success := app.DiagnoseQuery(connection.ConnectionConfig{Type: "sqlite", Database: ":memory:"}, "", "select 1") + if !success.Success { + t.Fatalf("expected DiagnoseQuery success, got %+v", success) + } + if expected := app.appText("sql_analysis.backend.message.completed", nil); success.Message != expected { + t.Fatalf("expected localized diagnose success message %q, got %q", expected, success.Message) + } +} + +func TestQueryHistoryUsesCurrentLanguageForMessages(t *testing.T) { + app := NewApp() + app.SetLanguage(string(i18n.LanguageEnUS)) + app.configDir = t.TempDir() + t.Cleanup(func() { + app.SetLanguage(string(i18n.LanguageEnUS)) + }) + + invalid := connection.ConnectionConfig{} + loadedInvalid := app.GetSlowQueries(invalid, "", "recent", 20) + if expected := app.appText("query_history.backend.error.connection_fingerprint_invalid", nil); loadedInvalid.Message != expected { + t.Fatalf("expected localized invalid-fingerprint load message %q, got %q", expected, loadedInvalid.Message) + } + clearedInvalid := app.ClearSlowQueries(invalid, "") + if expected := app.appText("query_history.backend.error.connection_fingerprint_invalid", nil); clearedInvalid.Message != expected { + t.Fatalf("expected localized invalid-fingerprint clear message %q, got %q", expected, clearedInvalid.Message) + } + + valid := connection.ConnectionConfig{Type: "postgres", Host: "127.0.0.1", Port: 5432, User: "app"} + loaded := app.GetSlowQueries(valid, "analytics", "recent", 20) + if !loaded.Success { + t.Fatalf("expected GetSlowQueries success, got %+v", loaded) + } + if expected := app.appText("query_history.backend.message.loaded", nil); loaded.Message != expected { + t.Fatalf("expected localized load message %q, got %q", expected, loaded.Message) + } + + cleared := app.ClearSlowQueries(valid, "analytics") + if !cleared.Success { + t.Fatalf("expected ClearSlowQueries success, got %+v", cleared) + } + if expected := app.appText("query_history.backend.message.cleared", nil); cleared.Message != expected { + t.Fatalf("expected localized clear message %q, got %q", expected, cleared.Message) + } +} diff --git a/internal/app/methods_file.go b/internal/app/methods_file.go index 267627d..b8cdbbd 100644 --- a/internal/app/methods_file.go +++ b/internal/app/methods_file.go @@ -1921,7 +1921,7 @@ func (a *App) PreviewImportFile(filePath string) connection.QueryResult { } func (a *App) ImportData(config connection.ConnectionConfig, dbName, tableName string) connection.QueryResult { - if err := ensureReadOnlyConnectionAllowsAction(config, "导入数据"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.import_data"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } selection, err := runtime.OpenFileDialog(a.ctx, runtime.OpenDialogOptions{ @@ -2267,7 +2267,7 @@ func formatImportSQLValue(dbType, columnType string, value interface{}) string { // ImportDataWithProgress 执行导入并发送进度事件 func (a *App) ImportDataWithProgress(config connection.ConnectionConfig, dbName, tableName, filePath string) connection.QueryResult { - if err := ensureReadOnlyConnectionAllowsAction(config, "导入数据"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.import_data"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } runConfig := normalizeRunConfig(config, dbName) @@ -2321,7 +2321,7 @@ func (a *App) ImportDataWithProgress(config connection.ConnectionConfig, dbName, } func (a *App) ApplyChanges(config connection.ConnectionConfig, dbName, tableName string, changes connection.ChangeSet) connection.QueryResult { - if err := ensureReadOnlyConnectionAllowsAction(config, "提交结果修改"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.apply_result_changes"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } runConfig := normalizeRunConfig(config, dbName) @@ -2350,7 +2350,7 @@ type ChangePreview struct { } func (a *App) PreviewChanges(config connection.ConnectionConfig, dbName, tableName string, changes connection.ChangeSet) connection.QueryResult { - if err := ensureReadOnlyConnectionAllowsAction(config, "预览结果修改"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config, "connection.backend.action.preview_result_changes"); err != nil { return connection.QueryResult{Success: false, Message: err.Error()} } runConfig := normalizeRunConfig(config, dbName) diff --git a/internal/app/methods_query_history.go b/internal/app/methods_query_history.go index 8952271..4c8905a 100644 --- a/internal/app/methods_query_history.go +++ b/internal/app/methods_query_history.go @@ -21,7 +21,7 @@ func (a *App) GetSlowQueries(config connection.ConnectionConfig, dbName, sortBy runConfig := normalizeRunConfig(config, dbName) connFP, ok := buildConnectionFingerprint(runConfig) if !ok || connFP == "" { - return connection.QueryResult{Success: false, Message: "无法解析连接指纹"} + return connection.QueryResult{Success: false, Message: a.appText("query_history.backend.error.connection_fingerprint_invalid", nil)} } if limit <= 0 { @@ -33,7 +33,7 @@ func (a *App) GetSlowQueries(config connection.ConnectionConfig, dbName, sortBy logger.Warnf("GetSlowQueries 加载失败:connFp=%s err=%v", connFP, err) return connection.QueryResult{Success: false, Message: err.Error()} } - return connection.QueryResult{Success: true, Message: "加载完成", Data: records} + return connection.QueryResult{Success: true, Message: a.appText("query_history.backend.message.loaded", nil), Data: records} } // ClearSlowQueries 清空当前连接的慢 SQL 历史。 @@ -42,14 +42,14 @@ func (a *App) ClearSlowQueries(config connection.ConnectionConfig, dbName string runConfig := normalizeRunConfig(config, dbName) connFP, ok := buildConnectionFingerprint(runConfig) if !ok || connFP == "" { - return connection.QueryResult{Success: false, Message: "无法解析连接指纹"} + return connection.QueryResult{Success: false, Message: a.appText("query_history.backend.error.connection_fingerprint_invalid", nil)} } store := newQueryHistoryStore(a.configDir, connFP) if err := store.Clear(); err != nil { logger.Warnf("ClearSlowQueries 失败:connFp=%s err=%v", connFP, err) return connection.QueryResult{Success: false, Message: err.Error()} } - return connection.QueryResult{Success: true, Message: "已清空慢查询历史"} + return connection.QueryResult{Success: true, Message: a.appText("query_history.backend.message.cleared", nil)} } // recordQueryExecutionAsync 异步追加一条慢查询记录,不阻塞主查询返回。 diff --git a/internal/app/methods_sync.go b/internal/app/methods_sync.go index b16c937..6814fa1 100644 --- a/internal/app/methods_sync.go +++ b/internal/app/methods_sync.go @@ -60,7 +60,7 @@ func (a *App) resolveDataSyncEndpointConfig(raw connection.ConnectionConfig, sel // DataSync executes a data synchronization task func (a *App) DataSync(config sync.SyncConfig) sync.SyncResult { - if err := ensureReadOnlyConnectionAllowsAction(config.TargetConfig, "数据同步写入"); err != nil { + if err := ensureReadOnlyConnectionAllowsAction(config.TargetConfig, "connection.backend.action.data_sync_write"); err != nil { return sync.SyncResult{ Success: false, Message: err.Error(), diff --git a/shared/i18n/de-DE.json b/shared/i18n/de-DE.json index 0218663..30de33a 100644 --- a/shared/i18n/de-DE.json +++ b/shared/i18n/de-DE.json @@ -1,4863 +1,4 @@ { - "common.cancel": "Abbrechen", - "redis.db_alias.menu.set": "Alias festlegen", - "redis.db_alias.modal.title": "Alias für {{db}}", - "redis.db_alias.modal.placeholder": "z. B. cache, sessions (leer lassen zum Entfernen)", - "common.back_to_previous": "Zurück", - "common.close": "Schließen", - "common.confirm": "Bestätigen", - "common.continue": "Fortfahren", - "common.delete": "Löschen", - "common.edit": "Bearbeiten", - "common.error": "Fehler", - "common.loading": "Wird geladen", - "common.named_item": "{{name}}", - "common.ok": "OK", - "common.refresh": "Aktualisieren", - "common.save": "Speichern", - "common.search": "Suchen", - "common.success": "Erfolg", - "common.unknown": "Unbekannt", - "common.warning": "Warnung", - "connection.sidebar.group.untitled": "Unbenannte Gruppe", - "connection.sidebar.group.meta": "{{count}} Verbindungen · Verbindungsgruppe", - "connection.sidebar.group.badge": "Gruppe", - "connection.sidebar.group.edit": "Gruppe bearbeiten", - "connection.sidebar.group.delete": "Gruppe löschen", - "connection.sidebar.group.deleteConfirmTitle": "Löschen bestätigen", - "connection.sidebar.group.deleteConfirmContent": "Gruppe \"{{name}}\" löschen? Die enthaltenen Verbindungen bleiben erhalten.", - "connection.sidebar.group.expandAria": "Verbindungsgruppe {{name}} erweitern", - "connection.sidebar.group.collapseAria": "Verbindungsgruppe {{name}} einklappen", - "connection.sidebar.menu.section": "Verbindung", - "connection.sidebar.menu.groupSection": "Verbindungsgruppen", - "connection.sidebar.menu.copy": "Verbindung kopieren", - "connection.sidebar.menu.disconnect": "Verbindung trennen", - "connection.sidebar.menu.delete": "Verbindung löschen", - "connection.sidebar.menu.hostFallback": "Adresse nicht konfiguriert", - "connection.sidebar.menu.hostBadge": "HOST", - "connection.sidebar.menu.moveToTag": "Zu Tag verschieben", - "connection.sidebar.menu.moveOutTag": "Aus Tag entfernen", - "connection.sidebar.menu.moveToUngrouped": "Aus Gruppe entfernen", - "connection.sidebar.menu.createDatabase": "Neue Datenbank", - "connection.sidebar.menu.refresh": "Verbindung aktualisieren", - "connection.sidebar.menu.current": "Aktuell", - "connection.sidebar.duplicate.backendUnavailable": "Kopieren der Verbindung fehlgeschlagen: Backend-Schnittstelle nicht verfügbar", - "connection.sidebar.duplicate.noResult": "Kopieren der Verbindung fehlgeschlagen: Backend hat kein Ergebnis zurückgegeben", - "connection.sidebar.duplicate.success": "Verbindung kopiert: {{name}}", - "connection.sidebar.duplicate.failureFallback": "Kopieren der Verbindung fehlgeschlagen", - "connection.sidebar.disconnect.success": "Verbindung getrennt", - "connection.sidebar.delete.confirmTitle": "Löschen bestätigen", - "connection.sidebar.delete.confirmContent": "Verbindung \"{{name}}\" wirklich löschen?", - "connection.sidebar.delete.backendUnavailable": "Löschen der Verbindung fehlgeschlagen: Backend-Schnittstelle nicht verfügbar", - "connection.sidebar.delete.success": "Verbindung gelöscht", - "connection.sidebar.delete.failureFallback": "Löschen der Verbindung fehlgeschlagen", - "find_in_database.title": "In Datenbank suchen - {{dbName}}", - "find_in_database.placeholder.keyword": "Zu suchende Zeichenfolge eingeben...", - "find_in_database.match.contains": "Enthält", - "find_in_database.match.exact": "Exakte Übereinstimmung", - "find_in_database.message.keyword_required": "Suchbegriff eingeben", - "find_in_database.message.connection_config_not_found": "Verbindungskonfiguration nicht gefunden", - "find_in_database.message.get_tables_failed": "Tabellenliste konnte nicht abgerufen werden: {{detail}}", - "find_in_database.message.no_tables": "Die aktuelle Datenbank enthält keine Tabellen", - "find_in_database.message.no_matches": "Keine passenden Daten gefunden", - "find_in_database.message.search_failed": "Suche fehlgeschlagen: {{detail}}", - "find_in_database.column.table_name": "Tabelle", - "find_in_database.column.matched_columns": "Treffer-Spalten", - "find_in_database.column.match_count": "Trefferzeilen", - "find_in_database.column.action": "Aktionen", - "find_in_database.tooltip.collapse_details": "Details ausblenden", - "find_in_database.tooltip.view_details": "Details anzeigen", - "find_in_database.progress.searching_table": "{{table}} wird durchsucht... ({{current}}/{{total}})", - "find_in_database.summary.found_tables": "Passende Tabellen: {{count}}", - "find_in_database.summary.searching": " (Suche läuft...)", - "find_in_database.detail.title": "{{table}} - Details zu Trefferzeilen", - "find_in_database.detail.row_count": "Zeilen: {{count}}", - "import_preview.title": "Datenimport-Vorschau", - "import_preview.action.start": "Import starten", - "import_preview.status.loading_preview": "Vorschaudaten werden geladen...", - "import_preview.status.importing": "Daten werden importiert...", - "import_preview.progress.processed_rows": "{{current}} / {{total}} Zeilen verarbeitet", - "import_preview.progress.success_count": "Erfolgreich {{count}}", - "import_preview.progress.error_count": "Fehlgeschlagen {{count}}", - "import_preview.preview.summary": "{{rows}} Zeilen und {{columns}} Felder", - "import_preview.preview.description": "Die ersten 5 Zeilen werden unten angezeigt. Starten Sie den Import nach der Prüfung der Daten.", - "import_preview.preview.field_list": "Feldliste:", - "import_preview.preview.table_title": "Datenvorschau (erste 5 Zeilen):", - "import_preview.error.preview_failed": "Vorschau fehlgeschlagen", - "import_preview.error.preview_failed_detail": "Vorschau fehlgeschlagen: {{detail}}", - "import_preview.error.connection_config_not_found": "Verbindungskonfiguration nicht gefunden", - "import_preview.error.import_failed": "Import fehlgeschlagen", - "import_preview.error.import_failed_detail": "Import fehlgeschlagen: {{detail}}", - "import_preview.result.completed": "Import abgeschlossen", - "import_preview.result.success_rows": "{{count}} Zeilen erfolgreich importiert", - "import_preview.result.failed_rows": "{{count}} Zeilen fehlgeschlagen", - "import_preview.result.error_logs": "Fehlerprotokolle:", - "log_panel.title": "SQL-Ausfuehrungslog", - "log_panel.short_title": "Logs", - "log_panel.description": "Zeichnet Ausfuehrungsstatus, Dauer und Fehler fuer schnelle Nachverfolgung auf.", - "log_panel.action.clear": "Logs leeren", - "log_panel.action.close": "Panel schliessen", - "log_panel.empty": "Keine SQL-Ausfuehrungslogs", - "log_panel.column.time": "Zeit", - "log_panel.column.status": "Zustand", - "log_panel.column.duration": "Dauer", - "log_panel.column.sql_message": "SQL / Meldung", - "log_panel.affected_rows": "Betroffene Zeilen: {{count}}", - "table_overview.status.loading_tables": "Tabelleninformationen werden geladen...", - "table_overview.message.load_tables_failed": "Tabelleninformationen konnten nicht geladen werden: {{detail}}", - "table_overview.message.pinned": "Tabelle angeheftet", - "table_overview.message.unpinned": "Anheften der Tabelle aufgehoben", - "table_overview.message.copy_structure_success": "Tabellenstruktur in die Zwischenablage kopiert", - "table_overview.message.copy_structure_failed": "Tabellenstruktur konnte nicht kopiert werden: {{detail}}", - "table_overview.message.exporting_table_format": "{{table}} wird als {{format}} exportiert...", - "table_overview.message.export_success": "Export erfolgreich", - "table_overview.message.export_failed": "Export fehlgeschlagen: {{detail}}", - "table_overview.message.delete_table_success": "Tabelle gelöscht", - "table_overview.message.delete_table_failed": "Tabelle konnte nicht gelöscht werden: {{detail}}", - "table_overview.table_data_action.truncate.label": "Tabelle leeren", - "table_overview.table_data_action.clear.label": "Tabellendaten leeren", - "table_overview.modal.table_data_action.title": "{{action}} bestätigen", - "table_overview.modal.table_data_action.content": "{{action}} löscht dauerhaft alle Daten in Tabelle \"{{table}}\". Diese Aktion kann nicht rückgängig gemacht werden. Fortfahren?", - "table_overview.message.table_data_action_loading": "{{action}} für {{table}} wird ausgeführt...", - "table_overview.message.table_data_action_success": "{{action}} erfolgreich", - "table_overview.message.table_data_action_failed": "{{action}} fehlgeschlagen: {{detail}}", - "table_overview.message.rename_table_success": "Tabelle umbenannt", - "table_overview.message.rename_table_failed": "Tabelle konnte nicht umbenannt werden: {{detail}}", - "table_overview.message.unknown_error": "Unbekannter Fehler", - "table_overview.modal.delete_table.title": "Tabelle löschen", - "table_overview.modal.delete_table.content": "Tabelle \"{{table}}\" löschen? Diese Aktion kann nicht rückgängig gemacht werden.", - "table_overview.modal.rename_table.title": "Tabelle umbenennen", - "table_overview.modal.rename_table.placeholder": "Neuen Tabellennamen eingeben", - "table_overview.validation.table_name_required": "Tabellenname ist erforderlich", - "table_overview.validation.table_name_unchanged": "Der neue Tabellenname entspricht dem aktuellen Namen", - "table_overview.toolbar.summary": "{{count}} Tabellen · {{rows}} Zeilen · {{size}}", - "table_overview.placeholder.search": "Tabellennamen oder Kommentare suchen...", - "table_overview.tooltip.sort": "Sortieren", - "table_overview.tooltip.card_view": "Kartenansicht", - "table_overview.tooltip.list_view": "Listenansicht", - "table_overview.tooltip.refresh": "Aktualisieren", - "table_overview.sort.name": "Name", - "table_overview.sort.rows": "Zeilen", - "table_overview.sort.size": "Groesse", - "table_overview.metric.data_size": "Datengröße", - "table_overview.metric.index_size": "Indexgröße", - "table_overview.metric.relative_size": "Relative Größe", - "table_overview.metric.engine": "Engine", - "table_overview.section.all": "Alle", - "table_overview.section.pinned": "Angeheftet", - "table_overview.row.engine_table": "{{engine}}-Tabelle", - "table_overview.row.open_hint": "Doppelklicken, um Daten zu öffnen; Rechtsklick für weitere Aktionen", - "table_overview.status.updating_filter": "Gefilterte Ergebnisse werden aktualisiert...", - "table_overview.status.matching_rendered": "{{matched}} Tabellen gefunden, {{rendered}} werden angezeigt", - "table_overview.status.hidden_count_hint": "{{count}} weitere sind nicht gerendert. Mehr laden oder die Suche eingrenzen.", - "table_overview.empty.no_matches": "Keine Treffer", - "table_overview.empty.no_tables": "Keine Tabellen", - "table_overview.action.show_more": "Mehr Tabellen anzeigen ({{count}} verbleibend)", - "table_overview.menu.new_query": "Neue Abfrage", - "table_overview.menu.design_table": "Tabelle entwerfen", - "table_overview.menu.copy_structure": "Tabellenstruktur kopieren", - "table_overview.menu.backup_table_sql": "Tabelle sichern (SQL)", - "table_overview.menu.rename_table": "Tabelle umbenennen", - "table_overview.menu.danger_operations": "Gefährliche Aktionen", - "table_overview.menu.truncate_table": "Tabelle truncaten", - "table_overview.menu.clear_table": "Tabelle leeren", - "table_overview.menu.delete_table": "Tabelle löschen", - "table_overview.menu.export_table_data": "Tabellendaten exportieren", - "table_overview.menu.export_csv": "CSV exportieren", - "table_overview.menu.export_xlsx": "XLSX exportieren", - "table_overview.menu.export_json": "JSON exportieren", - "table_overview.menu.export_markdown": "Markdown exportieren", - "table_overview.menu.export_html": "HTML exportieren", - "settings.language.description": "Wählen Sie die Anzeigesprache für GoNavi.", - "settings.language.english": "English", - "settings.language.follow_system": "Systemsprache verwenden", - "settings.language.german": "Deutsch", - "settings.language.japanese": "日本語", - "settings.language.restart_hint": "Einige Editoren und systemnahe Menüs müssen eventuell erneut geöffnet werden, damit die Änderung vollständig wirksam wird.", - "settings.language.russian": "Русский", - "settings.language.simplified_chinese": "简体中文", - "settings.language.title": "Sprache", - "settings.language.traditional_chinese": "繁體中文", - "settings.title": "Einstellungen", - "app.about.action.check_updates": "Nach Updates suchen", - "app.about.action.download_progress": "Downloadfortschritt", - "app.about.action.download_update": "Update herunterladen", - "app.about.action.mute_this_version": "Diesmal nicht erinnern", - "app.about.community.ai_book": "AI全书", - "app.about.description": "Versionsinformationen, Repository-Links, Updatestatus und Downloadzugänge anzeigen.", - "app.about.field.author": "Autor", - "app.about.field.community": "Community", - "app.about.field.update_status": "Updatestatus", - "app.about.field.version": "Version", - "app.about.message.load_failed": "App-Informationen konnten nicht geladen werden: {{error}}", - "app.about.project_links": "Projektlinks", - "app.about.title": "Über GoNavi", - "app.ai_panel.action.close": "Panel schließen", - "app.ai_panel.action.reload": "Neu laden", - "app.ai_panel.aria.close": "AI-Panel schließen", - "app.ai_panel.error.description": "Dies wird meist durch ungültig gewordene Lazy-Load-Ressourcen nach Hot Reloads in der Entwicklungsumgebung verursacht. Ein kompletter White-Screen wurde verhindert; Sie können es direkt erneut versuchen.", - "app.ai_panel.error.title": "AI-Panel konnte nicht geladen werden", - "app.data_root.action.migrate_and_switch": "Vorhandene Daten migrieren und wechseln", - "app.data_root.action.open_current": "Aktuelles Verzeichnis öffnen", - "app.data_root.action.restore_default_directory": "Standardverzeichnis wiederherstellen", - "app.data_root.action.select": "Verzeichnis auswählen", - "app.data_root.action.switch_only": "Nur zum ausgewählten Verzeichnis wechseln", - "app.data_root.apply_method": "Anwendungsmethode", - "app.data_root.current_directory": "Aktuelles Verzeichnis", - "app.data_root.default_directory": "Standardverzeichnis", - "app.data_root.description": "Verwaltet das Stammverzeichnis für dateibasierte Daten wie Verbindungen, Proxy, AI-Einstellungen und Treiber.", - "app.data_root.driver_directory": "Treiberverzeichnis", - "app.data_root.backend.dialog.select_directory": "GoNavi-Datenverzeichnis auswählen", - "app.data_root.backend.error.create_target_failed": "Ziel-Datenverzeichnis konnte nicht erstellt werden: {{detail}}", - "app.data_root.backend.error.create_bootstrap_directory_failed": "Standard-Bootstrap-Verzeichnis konnte nicht erstellt werden: {{detail}}", - "app.data_root.backend.error.create_data_directory_failed": "Datenverzeichnis konnte nicht erstellt werden: {{detail}}", - "app.data_root.backend.error.directory_empty": "Datenverzeichnis darf nicht leer sein", - "app.data_root.backend.error.directory_unavailable": "Datenverzeichnis existiert nicht oder ist nicht zugänglich", - "app.data_root.backend.error.migrate_directory_failed": "Verzeichnis konnte nicht migriert werden ({{entry}}): {{detail}}", - "app.data_root.backend.error.migrate_file_failed": "Datei konnte nicht migriert werden ({{entry}}): {{detail}}", - "app.data_root.backend.error.open_directory_failed": "Datenverzeichnis konnte nicht geöffnet werden: {{detail}}", - "app.data_root.backend.error.open_directory_unsupported": "Das Öffnen von Verzeichnissen wird auf dieser Plattform nicht unterstützt: {{platform}}", - "app.data_root.backend.error.read_source_failed": "Quelldaten konnten nicht gelesen werden ({{entry}}): {{detail}}", - "app.data_root.backend.message.migrated_restart": "Daten wurden migriert und auf das neue Verzeichnis umgestellt. Starten Sie die App neu, um alle Module vollständig umzustellen.", - "app.data_root.backend.message.opened": "Datenverzeichnis wurde geöffnet", - "app.data_root.backend.message.unchanged": "Datenverzeichnis ist unverändert", - "app.data_root.backend.message.updated_restart": "Datenverzeichnis wurde aktualisiert. Starten Sie die App neu, damit AI und andere laufende Module vollständig auf das neue Verzeichnis wechseln.", - "app.data_root.message.apply_failed": "Datenverzeichnis konnte nicht angewendet werden", - "app.data_root.message.apply_failed_with_error": "Datenverzeichnis konnte nicht angewendet werden: {{error}}", - "app.data_root.message.load_failed": "Datenverzeichnisinformationen konnten nicht geladen werden", - "app.data_root.message.load_failed_with_error": "Datenverzeichnisinformationen konnten nicht geladen werden: {{error}}", - "app.data_root.message.open_failed": "Datenverzeichnis konnte nicht geöffnet werden", - "app.data_root.message.open_failed_with_error": "Datenverzeichnis konnte nicht geöffnet werden: {{error}}", - "app.data_root.message.select_failed": "Datenverzeichnis konnte nicht ausgewählt werden", - "app.data_root.message.select_failed_with_error": "Datenverzeichnis konnte nicht ausgewählt werden: {{error}}", - "app.data_root.message.select_valid_first": "Wählen Sie zuerst ein gültiges Datenverzeichnis aus", - "app.data_root.message.updated": "Datenverzeichnis wurde aktualisiert", - "app.data_root.placeholder.select_new_directory": "Neues Datenverzeichnis auswählen", - "app.data_root.restart_hint": "Nach dem Wechsel wird ein Neustart der App empfohlen, damit AI und andere langlebige Module vollständig in das neue Verzeichnis wechseln. Sensible Passwörter bleiben im secret store des Systems und werden nicht mit Dateiverzeichnissen migriert.", - "app.data_root.switch_target": "Wechselziel", - "app.data_root.title": "Datenspeicherort", - "app.proxy.description": "Konfiguriert Updateprüfungen, Treiberverwaltung und den Netzwerkzugang für Verbindungen ohne separaten Proxy.", - "app.proxy.enable": "Globalen Proxy aktivieren", - "app.proxy.host": "Proxy-Host", - "app.proxy.host_placeholder": "Beispiel: 127.0.0.1", - "app.proxy.message.invalid_enabled": "Der globale Proxy ist aktiviert, aber Host oder Port sind ungültig. Er wird derzeit als deaktiviert behandelt.", - "app.proxy.message.save_failed": "Globale Proxy-Konfiguration fehlgeschlagen: {{error}}", - "app.proxy.password_optional": "Passwort (optional)", - "app.proxy.port": "Port", - "app.proxy.scope_hint": "* Gilt für Updateprüfungen, Netzwerkanfragen der Treiberverwaltung und Datenbankverbindungen ohne separat konfigurierten Proxy", - "app.proxy.section_title": "Globaler Proxy", - "app.proxy.title": "Globale Proxy-Einstellungen", - "app.proxy.type": "Proxy-Typ", - "app.proxy.username_optional": "Benutzername (optional)", - "proxy.backend.error.unsupported_type": "Nicht unterstützter Proxy-Typ: {{type}}", - "proxy.backend.error.host_empty": "Proxy-Host ist leer", - "proxy.backend.error.port_invalid": "Ungültiger Proxy-Port: {{port}}", - "proxy.backend.error.remote_addr_invalid": "Ungültige Remote-Adresse: {{address}}", - "proxy.backend.error.listen_failed": "Lokaler Proxy-Listener konnte nicht erstellt werden: {{detail}}", - "proxy.backend.error.socks5_dialer_failed": "SOCKS5-Proxy-Dialer konnte nicht erstellt werden: {{detail}}", - "proxy.backend.error.socks5_connect_failed": "SOCKS5-Proxy-Verbindung fehlgeschlagen: {{detail}}", - "proxy.backend.error.http_connect_failed": "Verbindung zum HTTP-Proxy fehlgeschlagen: {{detail}}", - "proxy.backend.error.http_connect_write_failed": "Senden der HTTP CONNECT-Anfrage fehlgeschlagen: {{detail}}", - "proxy.backend.error.http_connect_read_failed": "Lesen der HTTP CONNECT-Antwort fehlgeschlagen: {{detail}}", - "proxy.backend.error.http_connect_status_failed": "HTTP-Proxy CONNECT fehlgeschlagen: {{status}}", - "app.startup_readiness.loading_local_config": "Lokale Konfiguration wird geladen...", - "app.startup_readiness.loading_security_config": "Sicherheitskonfiguration wird geladen...", - "app.security_update.error.capability_unavailable": "Sicherheitsupdate-Funktion ist nicht verfügbar", - "app.security_update.message.completed": "Gespeicherte Konfigurationen haben das Sicherheitsupdate abgeschlossen", - "app.security_update.message.needs_attention": "Das Update ist noch nicht abgeschlossen. Einige Konfigurationen erfordern Aufmerksamkeit.", - "app.security_update.message.not_finished_retry_later": "Das Sicherheitsupdate ist nicht abgeschlossen. Versuchen Sie es später erneut.", - "app.security_update.message.postpone_failed": "Dieses Sicherheitsupdate kann derzeit nicht verschoben werden", - "app.security_update.message.rolled_back": "Dieses Update wurde nicht abgeschlossen. Das System hat die aktuell nutzbare Konfiguration beibehalten.", - "app.security_update.stage.checking_saved_config": "Gespeicherte Konfigurationen werden geprüft", - "app.security_update.stage.updating_secure_storage": "Sicherer Speicher wird aktualisiert", - "app.security_update.stage.verifying_result": "Updateergebnis wird geprüft", - "security_update.banner.title": "Gespeicherte Konfigurationen können sicher aktualisiert werden", - "security_update.banner.action.start_now": "Jetzt aktualisieren", - "security_update.banner.action.view_details": "Details anzeigen", - "security_update.banner.action.restart_update": "Update neu starten", - "security_update.banner.action.retry_check": "Erneut prüfen", - "security_update.backend.issue.ai_provider.migration_required": "Die AI-Anbieterkonfiguration ist noch in der aktuellen App-Konfiguration gespeichert. Nach Abschluss des Sicherheitsupdates wird sie in den neuen sicheren Speicher verschoben.", - "security_update.backend.issue.ai_provider.missing_or_resave": "Die AI-Anbieterkonfiguration ist nicht mehr vorhanden oder muss erneut gespeichert werden, bevor das Sicherheitsupdate abgeschlossen werden kann.", - "security_update.backend.issue.ai_provider.secret_missing": "Die AI-Anbieterkonfiguration benötigt weitere Angaben, bevor das Sicherheitsupdate abgeschlossen werden kann.", - "security_update.backend.issue.connection.incomplete": "Die Verbindungskonfiguration benötigt weitere Angaben, bevor das Sicherheitsupdate abgeschlossen werden kann.", - "security_update.backend.issue.connection.missing_or_resave": "Die Verbindungskonfiguration ist nicht mehr vorhanden oder muss erneut gespeichert werden, bevor das Sicherheitsupdate abgeschlossen werden kann.", - "security_update.backend.issue.connection.password_missing": "Das Verbindungspasswort fehlt. Speichern Sie es erneut, bevor Sie fortfahren.", - "security_update.backend.issue.global_proxy.missing_or_resave": "Die globalen Proxy-Einstellungen sind nicht mehr vorhanden oder müssen erneut gespeichert werden, bevor das Sicherheitsupdate abgeschlossen werden kann.", - "security_update.backend.issue.global_proxy.password_incomplete": "Das globale Proxy-Passwort benötigt weitere Angaben, bevor das Sicherheitsupdate abgeschlossen werden kann.", - "security_update.backend.issue.global_proxy.password_missing": "Das globale Proxy-Passwort fehlt. Speichern Sie es erneut, bevor Sie fortfahren.", - "security_update.backend.issue.global_proxy.title": "Globaler Proxy", - "security_update.backend.issue.system.message": "Die aktuelle Umgebung konnte dieses Sicherheitsupdate nicht abschließen. Versuchen Sie es später erneut.", - "security_update.backend.issue.system.title": "Sicherheitsupdate wurde nicht abgeschlossen", - "security_update.intro.title": "Sicherheitsupdate für gespeicherte Konfigurationen", - "security_update.intro.subtitle": "Vor der neuen sicheren Speicherung ist ein lokales Konfigurationsupdate erforderlich.", - "security_update.intro.description": "Damit gespeicherte Verbindungen, Proxy-Einstellungen und zugehörige Dienstkonfigurationen die neue sichere Speicherung verwenden, muss dieses Update einmal lokal ausgeführt werden. Vor dem Update wird automatisch eine lokale Sicherung erstellt. Wenn es nicht abgeschlossen wird, behält das System die aktuell nutzbare Konfiguration bei, und Sie können später fortfahren.", - "security_update.intro.action.details": "Details anzeigen", - "security_update.intro.action.later": "Später erinnern", - "security_update.intro.action.start_now": "Jetzt aktualisieren", - "security_update.progress.default_detail": "Die aktuell nutzbare Konfiguration bleibt während des Updates erhalten. Bitte warten.", - "security_update.settings.title": "Sicherheitsupdate", - "security_update.settings.subtitle": "Status des Sicherheitsupdates und offene Punkte für gespeicherte Konfigurationen verwalten.", - "security_update.settings.action.retry_check": "Erneut prüfen", - "security_update.settings.action.restart_update": "Update neu starten", - "security_update.settings.action.start": "Update starten", - "security_update.settings.action.close": "Schließen", - "security_update.settings.current_status": "Aktueller Status: {{status}}", - "security_update.settings.scope_title": "Betroffener Bereich", - "security_update.settings.summary.total": "Gesamt", - "security_update.settings.summary.updated": "Aktualisiert", - "security_update.settings.summary.pending": "Offen", - "security_update.settings.summary.skipped": "Übersprungen", - "security_update.settings.summary.failed": "Fehlgeschlagen", - "security_update.settings.pending_list": "Offene Punkte", - "security_update.settings.empty_pending": "Keine offenen Punkte", - "security_update.settings.item_status": "Zustand: {{status}}", - "security_update.settings.item_severity": "Schweregrad: {{severity}}", - "security_update.settings.item_default_message": "Dieser Punkt erfordert weitere Bearbeitung, bevor das Sicherheitsupdate abgeschlossen werden kann.", - "security_update.settings.recent_result": "Letztes Ergebnis", - "security_update.settings.backup_path": "Sicherungsort: ", - "security_update.settings.last_error": "Letzter Fehler: ", - "security_update.status.pending.label": "Ausstehend", - "security_update.status.pending.description": "Ein Sicherheitsupdate ist verfügbar. Sie können jetzt starten oder später fortfahren.", - "security_update.status.postponed.label": "Ausstehend", - "security_update.status.postponed.description": "Dieses Sicherheitsupdate wurde verschoben. Die aktuell nutzbare Konfiguration bleibt erhalten.", - "security_update.status.in_progress.label": "Aktualisierung läuft", - "security_update.status.in_progress.description": "Sichere Speicherung gespeicherter Konfigurationen wird geprüft und aktualisiert.", - "security_update.status.needs_attention.label": "Bearbeitung erforderlich", - "security_update.status.needs_attention.description": "Das Update ist noch nicht abgeschlossen. Einige Konfigurationen erfordern Aufmerksamkeit.", - "security_update.status.completed.label": "Abgeschlossen", - "security_update.status.completed.description": "Gespeicherte Konfigurationen haben das Sicherheitsupdate abgeschlossen.", - "security_update.status.rolled_back.label": "Zurückgesetzt", - "security_update.status.rolled_back.description": "Dieses Update wurde nicht abgeschlossen. Das System hat die aktuell nutzbare Konfiguration beibehalten.", - "security_update.status.not_detected.label": "Nicht erkannt", - "security_update.status.not_detected.description": "Derzeit erfordert kein Sicherheitsupdate Ihre Aufmerksamkeit.", - "security_update.action.open_connection": "Verbindung öffnen", - "security_update.action.open_proxy_settings": "Proxy-Einstellungen", - "security_update.action.open_ai_settings": "AI-Einstellungen", - "security_update.action.retry_update": "Erneut prüfen", - "security_update.action.view_details": "Details anzeigen", - "security_update.item_status.pending": "Ausstehend", - "security_update.item_status.updated": "Aktualisiert", - "security_update.item_status.needs_attention": "Bearbeitung erforderlich", - "security_update.item_status.skipped": "Übersprungen", - "security_update.item_status.failed": "Fehlgeschlagen", - "security_update.severity.high": "Hohes Risiko", - "security_update.severity.medium": "Mittleres Risiko", - "security_update.severity.low": "Niedriges Risiko", - "security_update.repair.warning.connection_not_found": "Die zugehörige Verbindung wurde nicht gefunden. Prüfen Sie zuerst den aktuellen Status erneut.", - "security_update.bootstrap.legacy.connection.message": "Diese Verbindung ist noch in der lokalen Konfiguration der aktuellen App gespeichert. Nach Abschluss des Sicherheitsupdates wird sie in die neue sichere Speicherung verschoben.", - "security_update.bootstrap.legacy.global_proxy.title": "Globaler Proxy", - "security_update.bootstrap.legacy.global_proxy.message": "Globale Proxy-Einstellungen sind noch in der lokalen Konfiguration der aktuellen App gespeichert. Nach Abschluss des Sicherheitsupdates werden sie in die neue sichere Speicherung verschoben.", - "security_update.error.capability_unavailable": "Sicherheitsupdate-Funktion ist nicht verfügbar", - "app.settings.description": "Verwaltet allgemeine Einstellungen wie Sprache, Proxy, Theme, AI und Informationen.", - "app.settings.entry.about.description": "Versionsinformationen, Repository-Links und Updatestatus anzeigen.", - "app.settings.entry.about.title": "Über GoNavi", - "app.settings.entry.ai.description": "Modellanbieter, Schlüssel und Standardverhalten verwalten.", - "app.settings.entry.ai.title": "AI-Einstellungen", - "app.settings.entry.proxy.description": "Updateprüfungen, Treiberverwaltung und gemeinsamen Netzwerkzugang konfigurieren.", - "app.settings.entry.proxy.title": "Globaler Proxy", - "app.settings.entry.theme.description": "Helles oder dunkles Theme wechseln und die Oberfläche anpassen.", - "app.settings.entry.theme.title": "Theme und Darstellung", - "app.settings.title": "Einstellungscenter", - "app.shortcuts.action.focusSidebarSearch.description": "Fokussiert das Suchfeld der linken Verbindungsstruktur", - "app.shortcuts.action.focusSidebarSearch.label": "Sidebar-Suche fokussieren", - "app.shortcuts.action.newConnection.description": "Neue Datenbank-, Runtime- oder andere Datenquellenverbindung erstellen", - "app.shortcuts.action.newConnection.label": "Neue Datenquelle", - "app.shortcuts.action.newQueryTab.description": "Erstellt einen neuen SQL-Abfrage-Tab", - "app.shortcuts.action.newQueryTab.label": "Neuer Abfrage-Tab", - "app.shortcuts.action.openShortcutManager.description": "Öffnet das Panel für Tastenkürzel-Einstellungen", - "app.shortcuts.action.openShortcutManager.label": "Tastenkürzelverwaltung öffnen", - "app.shortcuts.action.record": "Aufzeichnen", - "app.shortcuts.action.resetWindowZoom.description": "Manuell auslösen, wenn die Schrift nach dem Wiederherstellen aus der Windows-Taskleiste ungewöhnlich groß wird; wechselt einmal den maximierten Zustand, damit WebView2 die Schriftmetriken neu berechnet", - "app.shortcuts.action.resetWindowZoom.label": "Fensterzoom zurücksetzen", - "app.shortcuts.action.restore_defaults": "Standardwerte wiederherstellen", - "app.shortcuts.action.runQuery.description": "SQL auf der aktuellen Abfrageseite ausführen", - "app.shortcuts.action.runQuery.label": "SQL ausführen", - "app.shortcuts.action.saveQuery.description": "Aktuellen Abfrage-Tab speichern; unbenannte Abfragen öffnen den Speicherdialog", - "app.shortcuts.action.saveQuery.label": "Abfrage speichern", - "app.shortcuts.action.selectCurrentStatement.description": "SQL-Anweisung an der Cursorposition im Abfrageeditor auswählen", - "app.shortcuts.action.selectCurrentStatement.label": "Aktuelle Anweisung auswählen", - "app.shortcuts.action.sendAIChatMessage.description": "Aktuelle Nachricht im AI-Eingabefeld senden; Shift+Enter fügt immer einen Zeilenumbruch ein", - "app.shortcuts.action.sendAIChatMessage.label": "AI-Chat senden", - "app.shortcuts.action.switchToNextTab.description": "In geöffneten Tabs nach rechts wechseln", - "app.shortcuts.action.switchToNextTab.label": "Zum nächsten Tab wechseln", - "app.shortcuts.action.switchToPreviousTab.description": "In geöffneten Tabs nach links wechseln", - "app.shortcuts.action.switchToPreviousTab.label": "Zum vorherigen Tab wechseln", - "app.shortcuts.action.toggleAIPanel.description": "Rechtes Panel für AI-Dateneinblicke öffnen", - "app.shortcuts.action.toggleAIPanel.label": "AI-Dateneinblicke öffnen", - "app.shortcuts.action.toggleLogPanel.description": "SQL-Ausführungslog öffnen oder schließen", - "app.shortcuts.action.toggleLogPanel.label": "Logbereich umschalten", - "app.shortcuts.action.toggleMacFullscreen.description": "Nativer Vollbildwechsel im macOS-Modus für native Fenstersteuerung", - "app.shortcuts.action.toggleMacFullscreen.label": "Nativen Vollbildmodus umschalten", - "app.shortcuts.action.toggleTheme.description": "Zwischen hellem und dunklem Theme wechseln", - "app.shortcuts.action.toggleTheme.label": "Theme umschalten", - "app.shortcuts.action.diagnoseQuery.description": "EXPLAIN für die aktuelle SQL ausführen und Ausführungsplan mit Indexvorschlägen anzeigen", - "app.shortcuts.action.diagnoseQuery.label": "SQL-Diagnose", - "app.shortcuts.action.showSlowQueries.description": "Verlauf langsamer SQL-Abfragen für die aktuelle Verbindung anzeigen (Standard-Schwellwert 500ms)", - "app.shortcuts.action.showSlowQueries.label": "Langsame SQL-Historie", - "app.shortcuts.capture_hint": "Drücken Sie das Tastenkürzel, nachdem Sie auf \"Aufzeichnen\" geklickt haben. Mit Esc brechen Sie die Aufzeichnung ab. Globale Tastenkürzel sollten eine Modifikatortaste enthalten; AI-Chat-Senden unterstützt nur Enter-Kombinationen, Shift+Enter bleibt ein Zeilenumbruch.", - "app.shortcuts.capture_waiting": "Tastenkürzel drücken...", - "app.shortcuts.context.datagrid": "Datentabelle", - "app.shortcuts.context.global": "Browser", - "app.shortcuts.context.monaco": "Editor", - "app.shortcuts.description": "Häufige globale Tastenkürzel an einem Ort anzeigen, aufzeichnen und aktivieren.", - "app.shortcuts.message.ai_send_limit": "Das Tastenkürzel zum Senden im AI-Chat unterstützt nur Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter; Shift+Enter bleibt ein Zeilenumbruch", - "app.shortcuts.message.conflict": "Konflikt mit \"{{action}}\". Wählen Sie ein anderes Tastenkürzel.", - "app.shortcuts.message.modifier_required": "Das Tastenkürzel muss mindestens eine der Tasten Ctrl / Alt / Shift / Meta enthalten", - "app.shortcuts.message.reserved_conflict_info": "Überschreibt das Standard-Tastenkürzel des Editors \"{{labels}}\"", - "app.shortcuts.message.reserved_conflict_warning": "Konflikt mit {{contexts}} \"{{labels}}\"; funktioniert möglicherweise nicht", - "app.shortcuts.message.restored_defaults": "Standard-Tastenkürzel wurden wiederhergestellt", - "app.shortcuts.reserved.browser_close_tab": "Browser Tab schließen", - "app.shortcuts.reserved.browser_new_incognito_window": "Browser neues Inkognito-Fenster", - "app.shortcuts.reserved.browser_new_tab": "Browser neuer Tab", - "app.shortcuts.reserved.browser_new_window": "Browser neues Fenster", - "app.shortcuts.reserved.browser_print": "Browser Drucken", - "app.shortcuts.reserved.browser_save": "Browser Speichern", - "app.shortcuts.reserved.datagrid_copy": "Datentabelle kopieren", - "app.shortcuts.reserved.editor_add_selection": "Editor Auswahl hinzufügen", - "app.shortcuts.reserved.editor_delete_line": "Editor Zeile löschen", - "app.shortcuts.reserved.editor_find": "Editor Suchen", - "app.shortcuts.reserved.editor_find_global": "Editor globale Suche", - "app.shortcuts.reserved.editor_goto_line": "Editor Gehe zu Zeile", - "app.shortcuts.reserved.editor_insert_line_after": "Editor Zeile darunter einfügen", - "app.shortcuts.reserved.editor_insert_line_before": "Editor Zeile darüber einfügen", - "app.shortcuts.reserved.editor_quick_open": "Editor Schnell öffnen", - "app.shortcuts.reserved.editor_rename_symbol": "Editor Symbol umbenennen", - "app.shortcuts.reserved.editor_replace": "Editor Ersetzen", - "app.shortcuts.title": "Tastenkürzelverwaltung", - "app.sidebar.ai_assistant": "AI-Assistent", - "app.sidebar.resize_width": "Ziehen, um die Breite zu ändern", - "app.sidebar.settings": "Einstellungen", - "app.sidebar.sql_execution_log": "SQL-Ausführungslog", - "app.sidebar.tools": "Tools", - "app.tools.entry.snippets.description": "SQL-Code-Snippets und Präfixvervollständigung verwalten.", - "app.tools.entry.snippets.title": "Code-Snippet-Verwaltung", - "app.theme.action.restore_defaults": "Standardwerte wiederherstellen", - "app.theme.appearance.blur_hint": "* Steuert nur die Unschärfe von Overlay-Ebenen innerhalb der App", - "app.theme.appearance.blur_title": "Gaußsche Weichzeichnung (Blur)", - "app.theme.appearance.enable_transparency_blur": "Transparenz und Weichzeichnung aktivieren", - "app.theme.appearance.enable_transparency_blur_hint": "Bei Deaktivierung bleiben die aktuellen Schwellenwerte erhalten und werden beim erneuten Aktivieren direkt wiederhergestellt.", - "app.theme.appearance.font_size_title": "Basisschriftgröße (Font Size)", - "app.theme.appearance.opacity_title": "Hintergrunddeckkraft (Opacity)", - "app.theme.appearance.transparency_blur_title": "Transparenz- und Weichzeichnungseffekte", - "app.theme.appearance.ui_scale_hint": "* Für kleine Bildschirme werden 85%-95% empfohlen", - "app.theme.appearance.ui_scale_title": "UI-Skalierung (UI Scale)", - "app.theme.appearance.windows_acrylic_hint": "Windows verwendet den systemeigenen Acrylic-Effekt. Die Unschärfestärke wird vom System gesteuert.", - "app.theme.appearance_settings_description": "Skalierung, Schriftgröße, Transparenz und Weichzeichnung zentral anpassen.", - "app.theme.appearance_settings_title": "Darstellungseinstellungen", - "app.theme.data_table.column_width_hint": "Der Standardmodus nutzt 200px, der kompakte Modus 140px als Standardspaltenbreite. Manuell angepasste Spaltenbreiten bleiben vorrangig erhalten.", - "app.theme.data_table.column_width_mode": "Spaltenbreitenmodus der Datentabelle", - "app.theme.data_table.column_width_mode.compact": "Kompakt 140px", - "app.theme.data_table.column_width_mode.standard": "Standard 200px", - "app.theme.data_table.title": "Datentabellenanzeige", - "app.theme.data_table.vertical_borders": "Vertikale Trennlinien der Datentabelle anzeigen", - "app.theme.data_table.vertical_borders_hint": "Wirkt nur auf DataGrid auf Datentabellenseiten und nicht auf andere Tabellenkomponenten.", - "app.theme.mac_window.restart_hint": "* Benutzerdefinierte Schaltflächen oben rechts werden ausgeblendet. Falls der Systemfensterstil nicht sofort aktualisiert wird, starten Sie die App neu.", - "app.theme.mac_window.title": "macOS-Fenstersteuerung", - "app.theme.mac_window.use_native_controls": "Native macOS-Fenstersteuerung verwenden", - "app.theme.mac_window.use_native_controls_hint": "Zeigt die roten/gelben/grünen Schaltflächen oben links und priorisiert natives macOS-Vollbildverhalten.", - "app.theme.mode.dark.description": "Geeignet für dunkle Umgebungen mit ruhigerer visueller Wirkung.", - "app.theme.mode.dark.label": "Dunkles Theme", - "app.theme.mode.light.description": "Geeignet für helle Umgebungen mit leichterer visueller Hierarchie.", - "app.theme.mode.light.label": "Helles Theme", - "app.theme.mode_title": "Theme-Modus", - "app.theme.nav.appearance.description": "Skalierung, Schrift und Transparenz", - "app.theme.nav.appearance.title": "Darstellungsparameter", - "app.theme.nav.theme.description": "Wechsel zwischen hell und dunkel", - "app.theme.nav.theme.title": "Theme-Modus", - "app.theme.navigation_title": "Einstellungsnavigation", - "app.theme.startup_window.fullscreen": "Beim Start im Vollbild öffnen", - "app.theme.startup_window.fullscreen_windows": "Beim Start im Vollbild öffnen (Windows behandelt dies als Maximieren)", - "app.theme.startup_window.hint": "* Wird beim nächsten Start wirksam", - "app.theme.startup_window.title": "Startfenster", - "app.theme.startup_window.windows_hint": "* Unter Windows wird diese Option als \"beim Start maximieren\" behandelt und beim nächsten Start wirksam", - "app.theme.theme_settings_description": "Helle und dunkle Themes wechseln und einen einheitlichen visuellen Stil beibehalten.", - "app.theme.theme_settings_title": "Theme-Einstellungen", - "app.theme.ui_version.badge.new": "NEW", - "app.theme.ui_version.beta_warning": "Die neue UI ist noch in Beta. Einige Bildschirmstile können von der alten UI abweichen; bei Problemen können Sie jederzeit zurückwechseln.", - "app.theme.ui_version.description": "Wechseln Sie das gesamte Erscheinungsbild, während alle Funktionen erhalten bleiben. Die neue Version nutzt eine kompaktere Informationshierarchie und eine modernere visuelle Sprache.", - "app.theme.ui_version.legacy.badge": "Standard", - "app.theme.ui_version.legacy.description": "Die aktuelle stabile Oberfläche, in der alle Funktionen vollständig verfügbar sind.", - "app.theme.ui_version.legacy.label": "Alte UI", - "app.theme.ui_version.platform_hint": "Windows, macOS und Linux können alle wechseln. Änderungen werden sofort wirksam; einige Modals verwenden den neuen Stil beim nächsten Öffnen.", - "app.theme.ui_version.sidebar_search.command": "Neue Befehlssuche", - "app.theme.ui_version.sidebar_search.filter": "Alter Seitenleistenfilter", - "app.theme.ui_version.sidebar_search.hint": "Die neue Befehlssuche eignet sich zum Wechseln zu Verbindungen, Tabellen und Aktionen. Aktivieren Sie die Synchronisierung im Panel, um den linken Baum fortlaufend zu filtern; der alte Seitenleistenfilter zeigt das Eingabefeld direkt an und behält den Filtertext bei.", - "app.theme.ui_version.sidebar_search.title": "Neuer Suchmodus der linken Seitenleiste", - "app.theme.tab_display.title": "Tab-Beschriftung", - "app.theme.tab_display.description": "Passe die Anzeigereihenfolge von Verbindungsname, Objekttyp, Objektname, Datenbank, Schema und Host/IP an. Im zweizeiligen Modus kann Kontext in die Nebenzeile gelegt werden.", - "app.theme.tab_display.layout.single": "Einzeilig", - "app.theme.tab_display.layout.double": "Zweizeilig", - "app.theme.tab_display.badge.current": "Aktuell", - "app.theme.tab_display.row.primary": "Hauptzeile", - "app.theme.tab_display.row.secondary": "Nebenzeile", - "app.theme.tab_display.action.move_up": "Nach oben", - "app.theme.tab_display.action.move_down": "Nach unten", - "app.theme.tab_display.preview.prefix": "Aktuelle Vorschau: ", - "app.theme.tab_display.preview.default_label": "Standardbeschriftung", - "app.theme.tab_display.preview.secondary": ", Nebenzeile {{labels}}", - "app.theme.tab_display.preview.focused": "; aktuell ausgewählt {{label}}", - "app.theme.tab_display.element.connection.label": "Verbindung", - "app.theme.tab_display.element.connection.description": "Verbindungsalias oder Umgebungsname, zum Beispiel DEV", - "app.theme.tab_display.element.kind.label": "Objekttyp", - "app.theme.tab_display.element.kind.description": "Typkennzeichen wie SQL / TABLE / VIEW", - "app.theme.tab_display.element.object.label": "Objektname", - "app.theme.tab_display.element.object.description": "Kernnamen wie Tabellen-, Abfrage- oder Ressourcennamen", - "app.theme.tab_display.element.database.label": "Datenbank", - "app.theme.tab_display.element.database.description": "Aktueller DB- / catalog-Name", - "app.theme.tab_display.element.schema.label": "Schema", - "app.theme.tab_display.element.schema.description": "schema / owner-Präfix", - "app.theme.tab_display.element.host.label": "Host/IP", - "app.theme.tab_display.element.host.description": "Zusammenfassung der Zieladresse der Verbindung", - "app.theme.ui_version.title": "Oberflächenversion", - "app.theme.ui_version.v2.badge": "Beta", - "app.theme.ui_version.v2.description": "Eine neu gestaltete kompakte Oberfläche mit stärkerem AI-Einstieg und Tabellenübersicht.", - "app.theme.ui_version.v2.label": "Neue UI", - "app.tools.description": "Verbindungskonfiguration, Synchronisierung, Treiber und Tastenkürzel zentral verwalten.", - "app.tools.group.config.description": "Import/Export, Datenverzeichnis und Pflege gespeicherter Konfigurationen.", - "app.tools.group.config.title": "Verbindungen und Konfiguration", - "app.tools.group.workflow.description": "Struktur vergleichen, Unterschiede prüfen und Synchronisierung starten.", - "app.tools.group.workflow.title": "Daten-Workflows", - "app.tools.group.workspace.description": "Treiber, Code-Snippets und globale Tastenkürzel.", - "app.tools.group.workspace.title": "Editor und Treiber", - "app.tools.entry.data_root.description": "Lokalen Datenspeicherort anzeigen, wechseln oder migrieren.", - "app.tools.entry.data_root.title": "Datenverzeichnis", - "app.tools.entry.drivers.description": "Datenbanktreiber installieren, aktualisieren oder entfernen.", - "app.tools.entry.drivers.title": "Treiberverwaltung", - "app.tools.entry.export.description": "Aktuelle Verbindungen und sichtbare Konfigurationsfelder exportieren.", - "app.tools.entry.export.title": "Verbindungskonfiguration exportieren", - "app.tools.entry.import.description": "Verbindungsliste aus einer lokalen Datei wiederherstellen.", - "app.tools.entry.import.title": "Verbindungskonfiguration importieren", - "app.tools.entry.security_update.description": "Sicherheitsupdate-Status gespeicherter Konfigurationen anzeigen.", - "app.tools.entry.security_update.status_description": "Aktueller Status: {{status}}", - "app.tools.entry.security_update.title": "Sicherheitsupdate", - "app.window_zoom.message.fullscreen_exit_first": "Der Zoom kann im Vollbildmodus nicht zurückgesetzt werden. Beenden Sie zuerst den Vollbildmodus.", - "app.window_zoom.message.reset_failed": "Fensterzoom konnte nicht zurückgesetzt werden", - "app.window_zoom.message.reset_success": "Fensterzoom wurde zurückgesetzt", - "app.window_zoom.message.reset_success_fallback": "Fensterzoom wurde zurückgesetzt (Fallback)", - "app.window_zoom.message.windows_only": "Diese Funktion ist nur unter Windows verfügbar", - "app.tools.entry.shortcuts.description": "Globale Tastenkürzelbindungen anzeigen und anpassen.", - "app.tools.entry.shortcuts.title": "Tastenkürzelverwaltung", - "app.tools.entry.schema_compare.description": "Vergleicht Strukturunterschiede zwischen Quell- und Zieltabellen, nur als Vorschau ohne Ausführung.", - "app.tools.entry.schema_compare.title": "Schemavergleich", - "app.tools.entry.data_compare.description": "Analysiert eingefügte, aktualisierte, gelöschte und unveränderte Zeilen anhand des Primärschlüssels.", - "app.tools.entry.data_compare.title": "Datenvergleich", - "app.tools.entry.sync.description": "Workflow für quellenübergreifende Synchronisierung öffnen.", - "app.tools.entry.sync.title": "Datensynchronisierung", - "app.tools.title": "Toolcenter", - "app.connection_package.action.start_export": "Export starten", - "app.connection_package.action.start_import": "Import starten", - "app.connection_package.dialog.export_title": "Verbindungen exportieren", - "app.connection_package.dialog.file_password_placeholder": "Dateischutzpasswort eingeben (optional)", - "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "Passwörter sind verschlüsselt. Für die Übertragung über öffentliche Netzwerke sollten Sie ein Dateischutzpasswort festlegen.", - "app.connection_package.dialog.help.exclude_passwords": "Es werden nur Verbindungseinstellungen exportiert. Passwörter sind nicht enthalten.", - "app.connection_package.dialog.help.share_file_password_separately": "Teilen Sie das Passwort über einen separaten Kanal mit. Senden Sie es nicht zusammen mit der Datei.", - "app.connection_package.dialog.import_password_title": "Importpasswort eingeben", - "app.connection_package.dialog.option.include_passwords": "Verbindungspasswörter exportieren", - "app.connection_package.dialog.option.use_file_password": "Dateischutzpasswort festlegen", - "app.connection_package.dialog.restore_password_placeholder": "Passwort des Wiederherstellungspakets eingeben", - "app.connection_package.error.export_capability_unavailable": "Export fehlgeschlagen: Das aktuelle Backend stellt die neue Exportfunktion nicht bereit", - "app.connection_package.error.file_password_required": "Das Dateischutzpasswort darf nicht leer sein", - "app.connection_package.error.import_capability_unavailable": "Import fehlgeschlagen: Das aktuelle Backend stellt die neue Importfunktion nicht bereit", - "app.connection_package.error.import_no_connections": "Import fehlgeschlagen: Das Backend hat keine Verbindungsliste zurückgegeben", - "app.connection_package.error.missing_import_payload": "Import fehlgeschlagen: Der zu importierende Inhalt des Wiederherstellungspakets wurde nicht gefunden", - "app.connection_package.error.refresh_failed_no_connections": "Import erfolgreich, aber Aktualisieren der Verbindungsliste fehlgeschlagen: Das Backend hat keine Verbindungsliste zurückgegeben", - "app.connection_package.error.restore_password_required": "Das Passwort des Wiederherstellungspakets darf nicht leer sein", - "app.connection_package.message.export_failed": "Export fehlgeschlagen", - "app.connection_package.message.export_succeeded": "Export erfolgreich", - "app.connection_package.message.import_failed": "Import fehlgeschlagen", - "app.connection_package.message.import_failed_with_error": "Import fehlgeschlagen: {{error}}", - "app.connection_package.message.imported_connections": "{{count}} Verbindungen importiert", - "app.connection_package.message.imported_with_missing_passwords": "{{count}} Verbindungen importiert. Einige Verbindungen enthalten keine Passwörter. Bearbeiten Sie diese Verbindungen und geben Sie vor dem Speichern die Passwörter ein.", - "app.connection.message.editable_load_failed": "Die Details der gespeicherten Verbindung konnten nicht geladen werden. Stattdessen wird die maskierte Konfiguration geöffnet.", - "app.connection.message.editable_load_failed_with_detail": "Die Details der gespeicherten Verbindung konnten nicht geladen werden: {{detail}}. Stattdessen wird die maskierte Konfiguration geöffnet.", - "app.connection_package.message.no_connections_to_export": "Keine Verbindungen zum Exportieren", - "app.connection_package.message.unsupported_file_format": "Dateiformatfehler: Unterstützt werden nur GoNavi-Wiederherstellungspakete, historische JSON-Verbindungsarrays oder MySQL Workbench XML", - "app.browser_mock.export_sql_unsupported": "Browser-Mock unterstützt den Export von SQL-Dateien nicht", - "app.browser_mock.import_connection_package_unsupported": "Browser-Mock unterstützt den Import von Wiederherstellungspaketen nicht; nur historische JSON-Verbindungsarrays werden unterstützt", - "app.browser_mock.export_connection_package_unsupported": "Browser-Mock unterstützt den Export von Wiederherstellungspaketen nicht", - "app.browser_mock.mcp_http.not_running": "Der GoNavi MCP HTTP-Dienst läuft nicht", - "app.browser_mock.mcp_http.started": "Der GoNavi MCP HTTP-Dienst wurde gestartet", - "app.browser_mock.mcp_http.stopped": "Der GoNavi MCP HTTP-Dienst wurde gestoppt", - "app.browser_mock.mcp_server.command_required": "MCP-Befehl darf nicht leer sein", - "app.browser_mock.mcp_server.test_success": "MCP-mock-Test erfolgreich", - "app.browser_mock.mcp_tool.unavailable": "Browser-Mock ist nicht mit einem echten MCP-Dienst verbunden", - "app.browser_mock.mcp_client.claude_code.installed": "Die MCP-Konfiguration auf Benutzerebene für Claude Code wurde geschrieben. Starten Sie Claude CLI neu; GoNavi erscheint dann unter User MCPs in /mcp.", - "app.browser_mock.mcp_client.claude_code.not_detected": "Keine GoNavi MCP-Konfiguration auf Benutzerebene für Claude Code erkannt", - "app.browser_mock.mcp_client.codex.installed": "Die MCP-Konfiguration auf Benutzerebene für Codex wurde geschrieben. Starten Sie Codex CLI oder die Desktop-App neu, um GoNavi zu sehen.", - "app.browser_mock.mcp_client.codex.path_mismatch": "In Codex wurde ein GoNavi MCP-Eintrag erkannt, der nicht zum aktuellen GoNavi-Installationspfad passt. Eine Aktualisierung wird empfohlen.", - "app.browser_mock.provider.test_failed_detail": "Verbindungstest fehlgeschlagen: {{detail}}", - "app.browser_mock.provider.test_success": "Endpunkt-Verbindungstest erfolgreich", - "app.update.action.hide_to_background": "In den Hintergrund ausblenden", - "app.update.action.install_update": "Update installieren", - "app.update.action.open_install_directory": "Installationsverzeichnis öffnen", - "app.update.backend.error.check_failed": "Updateprüfung fehlgeschlagen: {{detail}}", - "app.update.backend.error.check_http_status": "Updateprüfung fehlgeschlagen: HTTP {{status}}", - "app.update.backend.error.download_failed": "Updatedownload fehlgeschlagen: {{detail}}", - "app.update.backend.error.install_unsupported": "Updateinstallation wird auf dieser Plattform nicht unterstützt: {{platform}}", - "app.update.backend.error.latest_version_unparseable": "Neueste Versionsnummer konnte nicht gelesen werden", - "app.update.backend.error.online_update_unsupported": "Online-Update wird auf dieser Plattform nicht unterstützt: {{platform}}", - "app.update.backend.error.package_download_http_failed": "Updatepaket konnte nicht heruntergeladen werden: HTTP {{status}}", - "app.update.backend.error.package_file_busy": "Updatedownload fehlgeschlagen, weil die Datei belegt ist: {{detail}}", - "app.update.backend.error.release_version_unparseable": "Release-Version konnte nicht gelesen werden", - "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS enthält kein Updatepaket für die aktuelle Plattform", - "app.update.backend.error.sha256sums_download_failed": "SHA256SUMS konnte nicht heruntergeladen werden: HTTP {{status}}", - "app.update.backend.error.sha256sums_missing": "Release stellt keine SHA256SUMS bereit", - "app.update.backend.error.update_package_not_found": "Updatepaket nicht gefunden: {{name}}", - "app.update.backend.message.app_directory_unavailable": "Auf das App-Verzeichnis kann nicht zugegriffen werden: {{path}}", - "app.update.backend.message.app_directory_unresolved_download": "Das aktuelle App-Verzeichnis kann nicht bestimmt werden, daher kann das Update nicht heruntergeladen werden", - "app.update.backend.message.check_first": "Prüfen Sie zuerst auf Updates", - "app.update.backend.message.checksum_failed": "Prüfsumme des Updatepakets ist fehlgeschlagen. Versuchen Sie es erneut.", - "app.update.backend.message.checksum_missing": "Prüfsumme des Updatepakets fehlt (SHA256SUMS)", - "app.update.backend.message.create_workspace_failed": "Update-Arbeitsverzeichnis konnte im App-Verzeichnis nicht erstellt werden: {{path}}", - "app.update.backend.message.download_in_progress": "Updatepaket wird heruntergeladen. Versuchen Sie es später erneut.", - "app.update.backend.message.install_launch_failed": "Update-Installer konnte nicht gestartet werden: {{detail}}", - "app.update.backend.message.install_launch_failed_with_log": "Update-Installer konnte nicht gestartet werden: {{detail}} (Updateprotokoll: {{path}})", - "app.update.backend.message.install_started": "Updateinstallation wurde gestartet", - "app.update.backend.message.install_started_with_log": "Updateinstallation wurde gestartet. Protokollpfad: {{path}}", - "app.update.backend.message.latest": "Bereits auf der neuesten Version", - "app.update.backend.message.no_downloaded_package": "Kein heruntergeladenes Updatepaket gefunden", - "app.update.backend.message.no_update_package": "Kein Updatepaket verfügbar", - "app.update.backend.message.open_directory_failed": "Updateverzeichnis konnte nicht geöffnet werden: {{detail}}", - "app.update.backend.message.open_directory_unsupported": "Öffnen von Verzeichnissen wird auf dieser Plattform nicht unterstützt: {{platform}}", - "app.update.backend.message.opened_install_directory": "Installationsverzeichnis geöffnet: {{path}}", - "app.update.backend.message.package_already_downloaded": "Updatepaket wurde bereits heruntergeladen", - "app.update.backend.message.package_directory_unavailable": "Updateverzeichnis ist nicht vorhanden oder nicht zugänglich", - "app.update.backend.message.package_directory_unresolved": "Updateverzeichnis konnte nicht aufgelöst werden", - "app.update.backend.message.package_downloaded": "Updatepaket heruntergeladen", - "app.update.backend.message.package_path_empty": "Pfad des Updatepakets ist leer", - "app.update.backend.message.update_found": "Neue Version gefunden: {{version}}", - "app.update.download_title": "Update herunterladen", - "app.update.download_title_with_version": "Update herunterladen {{version}}", - "app.update.message.check_failed": "Updateprüfung fehlgeschlagen: {{error}}", - "app.update.message.download_completed": "Updatedownload abgeschlossen", - "app.update.message.download_completed_with_path": "Updatedownload abgeschlossen. Paketpfad: {{path}}", - "app.update.message.download_failed": "Updatedownload fehlgeschlagen: {{error}}", - "app.update.message.install_failed": "Updateinstallation fehlgeschlagen: {{error}}", - "app.update.message.open_install_directory_failed": "Installationsverzeichnis konnte nicht geöffnet werden: {{error}}", - "app.update.message.opened_install_directory": "Installationsverzeichnis wurde geöffnet. Bitte schließen Sie den Austausch manuell ab.", - "app.update.message.package_ready": "Updatepaket ist bereit ({{version}})", - "app.update.message.package_ready_with_path": "Updatepaket ist bereit ({{version}}), Pfad: {{path}}", - "app.update.message.update_found": "Neue Version gefunden: {{version}}", - "app.update.status.available_downloaded": "Neue Version {{version}} gefunden (heruntergeladen; klicken Sie zum Installieren auf \"Downloadfortschritt\")", - "app.update.status.available_not_downloaded": "Neue Version {{version}} gefunden (nicht heruntergeladen)", - "app.update.status.check_failed": "Updateprüfung fehlgeschlagen: {{error}}", - "app.update.status.checking": "Suche nach Updates...", - "app.update.status.latest": "Bereits auf der neuesten Version ({{version}})", - "app.update.status.not_checked": "Nicht geprüft", - "connection.delete": "Verbindung löschen", - "connection.edit": "Verbindung bearbeiten", - "connection.new": "Neue Verbindung", - "connection.test": "Verbindung testen", - "connection.unnamed": "Unbenannte Verbindung", - "database.unnamed": "Unbenannte Datenbank", - "database.label": "Datenbank", - "connection.copy_suffix": " - Kopie", - "query.format": "SQL formatieren", - "query.new": "Neue Abfrage", - "query.run": "Ausführen", - "query.save": "Abfrage speichern", - "saved_query.default_name": "Abfrage {{index}}", - "query.stop": "Stoppen", - "message_publish_modal.title": "Nachricht testweise senden", - "message_publish_modal.title_with_connection": "Nachricht testweise senden · {{connectionName}}", - "message_publish_modal.action.send": "Senden", - "message_publish_modal.error.build_command_failed": "Sende-Befehl konnte nicht erstellt werden", - "message_publish_modal.error.send_failed_detail": "Senden fehlgeschlagen: {{detail}}", - "message_publish_modal.error.unknown_error": "Unbekannter Fehler", - "message_publish_modal.field.exchange.label": "Exchange (optional)", - "message_publish_modal.field.exchange.extra": "Leer lassen, um den Standard-Exchange zu verwenden. Wenn Sie einen eigenen Exchange eingeben, stellen Sie sicher, dass die Ziel-Queue ein binding hat.", - "message_publish_modal.field.exchange.placeholder": "Beispiel: events.topic", - "message_publish_modal.field.routing_key.label": "Routing Key (optional)", - "message_publish_modal.field.routing_key.extra": "Leer lassen, um standardmäßig den aktuellen Queue-Namen zu verwenden.", - "message_publish_modal.field.routing_key.placeholder": "Beispiel: orders.queue", - "message_publish_modal.field.qos.extra": "0 ist at most once, 1 ist at least once und 2 ist exactly once.", - "message_publish_modal.field.retain.label": "Retain-Nachricht", - "message_publish_modal.field.tag.label": "Tag (optional)", - "message_publish_modal.field.tag.extra": "Leer lassen, um nicht nach Tag zu filtern oder keinen Tag zu schreiben.", - "message_publish_modal.field.delay_level.label": "Delay Level (optional)", - "message_publish_modal.field.delay_level.extra": "RocketMQ verwendet feste Verzögerungsstufen. 0 sendet sofort.", - "message_publish_modal.field.body_mode.label": "Nachrichtentext-Typ", - "message_publish_modal.field.body.label": "Nachrichtentext", - "message_publish_modal.field.body.required": "Nachrichtentext eingeben", - "message_publish_modal.field.body.extra": "Im JSON-Modus ist gültiges JSON erforderlich. Der Textmodus sendet den Inhalt unverändert.", - "message_publish_modal.field.body.placeholder": "Nachrichtentext eingeben", - "message_publish_modal.field.headers.label": "Headers (optional)", - "message_publish_modal.field.headers.extra": "Muss ein JSON-Objekt sein, zum Beispiel {{example}}.", - "message_publish_modal.field.properties.label": "Properties (optional)", - "message_publish_modal.field.properties.extra": "Muss ein JSON-Objekt sein, zum Beispiel {{example}}.", - "message_publish_modal.option.no_delay": "Keine Verzögerung", - "message_publish_modal.option.text": "Text", - "message_publish_modal.footer.success_prefix": "Nach erfolgreichem Senden wird", - "message_publish_modal.footer.success_suffix": " zurückgegeben, um zu bestätigen, ob diese Testnachricht übermittelt wurde.", - "message_publish.field.body": "Nachrichtentext", - "message_publish.field.message_key": "Nachrichten-Key", - "message_publish.error.destination_required": "Ziel-Topic / Queue eingeben", - "message_publish.error.required_field": "{{field}} ist erforderlich", - "message_publish.error.invalid_json_detail": "{{field}} ist kein gültiges JSON: {{detail}}", - "message_publish.error.json_object_required": "{{field}} muss ein JSON-Objekt sein", - "message_publish.error.mqtt_wildcard_topic": "MQTT publish Topic darf keine Platzhalter + oder # enthalten", - "message_publish.error.unsupported_type": "Die aktuelle Datenquelle unterstützt das Testen des Nachrichtenversands nicht: {{type}}", - "message_publish.presentation.rabbitmq.destination_placeholder": "Beispiel: orders.queue", - "message_publish.presentation.rabbitmq.destination_required": "Queue eingeben", - "message_publish.presentation.rabbitmq.alert": "Dieses Formular erstellt automatisch einen RabbitMQ publish JSON-Befehl und sendet eine Testnachricht über die Management API.", - "message_publish.presentation.rabbitmq.success_hint": "Wenn Exchange leer ist, wird der Standard-Exchange verwendet und der Queue-Name als routing key genutzt.", - "message_publish.presentation.rocketmq.destination_placeholder": "Beispiel: orders.events", - "message_publish.presentation.topic_required": "Topic eingeben", - "message_publish.presentation.rocketmq.alert": "Dieses Formular erstellt automatisch einen RocketMQ publish JSON-Befehl und sendet eine Testnachricht über NameServer/Broker.", - "message_publish.presentation.rocketmq.success_hint": "Tag, Keys, Delay Level und Properties werden in die RocketMQ-Nachrichtenattribute geschrieben.", - "message_publish.presentation.keys_label": "Nachrichten-Keys (optional)", - "message_publish.presentation.rocketmq.key_placeholder": "Mehrere Key-Werte durch Kommas getrennt eingeben", - "message_publish.presentation.rocketmq.tag_placeholder": "Beispiel: TagA", - "message_publish.presentation.mqtt.destination_placeholder": "Beispiel: devices/device-001/telemetry", - "message_publish.presentation.mqtt.alert": "Dieses Formular erstellt automatisch einen MQTT publish JSON-Befehl und sendet eine Testnachricht direkt über den broker.", - "message_publish.presentation.mqtt.success_hint": "QoS und retain können separat angegeben werden. Leere Felder verwenden die Standardwerte der aktuellen Verbindung.", - "message_publish.presentation.kafka.destination_placeholder": "Beispiel: orders.events", - "message_publish.presentation.kafka.alert": "Dieses Formular erstellt automatisch einen Kafka publish JSON-Befehl und ruft das Backend für eine Testsendung auf.", - "message_publish.presentation.kafka.success_hint": "Headers werden als Kafka Record Headers mitgesendet.", - "message_publish.presentation.key_label": "Nachrichten-Key (optional)", - "message_publish.presentation.kafka.key_placeholder": "Optional. Im JSON-Modus eine gültige JSON-Zeile eingeben.", - "connection_modal.action.browse": "Durchsuchen...", - "connection_modal.action.disable": "Deaktivieren", - "connection_modal.action.discover_members": "Mitglieder erkennen", - "connection_modal.action.enable_and_prefer": "Aktivieren und bevorzugen", - "connection_modal.badge.current_editing": "In Bearbeitung", - "connection_modal.badge.preferred": "Bevorzugt", - "connection_modal.field.additional_hosts": "Weitere Hosts", - "connection_modal.field.additional_srv_hosts_optional": "Weitere SRV-Hosts (optional)", - "connection_modal.field.auth_source": "Authentifizierungsdatenbank (authSource)", - "connection_modal.field.cluster_additional_hosts": "Weitere Cluster-Hosts", - "connection_modal.field.connection_timeout_seconds": "Verbindungs-Timeout (Sekunden)", - "connection_modal.field.connection_timeout_seconds_ascii": "Verbindungs-Timeout (Sekunden)", - "connection_modal.field.default_database_optional": "Standarddatenbank (optional)", - "connection_modal.field.display_databases_optional": "Anzuzeigende Datenbanken (optional)", - "connection_modal.field.file_path_absolute": "Dateipfad (absoluter Pfad)", - "connection_modal.field.host_address": "Hostadresse", - "connection_modal.field.password_optional": "Passwort (optional)", - "connection_modal.field.port": "Port", - "connection_modal.field.port_plain": "Port", - "connection_modal.field.private_key_path_optional": "Pfad zum privaten Schlüssel (optional)", - "connection_modal.field.proxy_host": "Proxy-Host", - "connection_modal.field.proxy_password_optional": "Proxy-Passwort (optional)", - "connection_modal.field.proxy_type": "Proxy-Typ", - "connection_modal.field.proxy_username_optional": "Proxy-Benutzername (optional)", - "connection_modal.field.replica_hosts": "Replica-Hostliste", - "connection_modal.field.replica_password_optional": "Replica-Passwort (optional)", - "connection_modal.field.replica_set_optional": "Replica Set (optional)", - "connection_modal.field.replica_set_password_optional": "Replica-Set-Passwort (optional)", - "connection_modal.field.replica_set_username_optional": "Replica-Set-Benutzername (optional)", - "connection_modal.field.replica_username_optional": "Replica-Benutzername (optional)", - "connection_modal.field.save_password": "Passwort speichern", - "connection_modal.field.service_name": "Servicename", - "connection_modal.field.defaultDatabase.placeholder": "Zum Beispiel: appdb", - "connection_modal.field.serviceName.placeholder": "Zum Beispiel: ORCLPDB1", - "connection_modal.field.clickHouseProtocol.auto": "Automatisch", - "connection_modal.field.oceanBaseProtocol.label": "OceanBase-Protokoll", - "connection_modal.field.oceanBaseProtocol.help.primary": "Wählen Sie für MySQL-Mandanten MySQL und für Oracle-Mandanten Oracle. GoNavi wählt anhand des Ports automatisch: Für den OB MySQL wire-Port wird die OBClient-Capability-Injektion verwendet (derselbe Pfad wie in Navicat), für den OBProxy Oracle listener-Port Standard-TNS.", - "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "Wenn bei einer Oracle-Mandantenverbindung \"Error 1235\" oder ein OBClient-Handshake-Fehler auftritt, können Sie im Feld \"Verbindungsparameter\" mit {{attributes}} die standardmäßig von GoNavi injizierte OBClient-Capability überschreiben.", - "connection_modal.field.ssh_host": "SSH-Host", - "connection_modal.field.ssh_password": "SSH-Passwort", - "connection_modal.field.ssh_user": "SSH-Benutzer", - "connection_modal.field.ssl_cert_path": "SSL-Zertifikatspfad", - "connection_modal.field.ssl_key_path": "SSL-Schlüsselpfad", - "connection_modal.field.tunnel_host": "HTTP Tunnel-Host", - "connection_modal.field.tunnel_password_optional": "HTTP Tunnel-Passwort (optional)", - "connection_modal.field.tunnel_username_optional": "HTTP Tunnel-Benutzername (optional)", - "connection_modal.field.username": "Benutzername", - "connection_modal.field.username.optional_placeholder": "Leer lassen, wenn keine Authentifizierung aktiviert ist", - "connection_modal.help.additional_hosts": "Optionale MongoDB-Mitglieder, getrennt durch Komma, Semikolon oder Leerzeichen.", - "connection_modal.help.additional_srv_hosts": "Optionale zusätzliche SRV-Hosts für die MongoDB-Erkennung.", - "connection_modal.help.connection_timeout": "Gilt für Verbindungstests und das Laden von Metadaten. Bereich: 1-300 Sekunden.", - "connection_modal.help.custom_driver": "Unterstützt: mysql, postgres, sqlite, oracle, dm, kingbase. Aliase: postgresql/pgx, dm8, kingbase8/kingbasees/kingbasev8. Das Erweitern von Treibern über JDBC Jar wird derzeit nicht unterstützt.", - "connection_modal.help.default_database": "Leer lassen, um die Standarddatenbank des Servers zu verwenden.", - "connection_modal.help.oracle_service_name": "Oracle-Servicename, zum Beispiel ORCLPDB1.", - "connection_modal.help.private_key_path": "Privaten Schlüssel für die SSH-Authentifizierung verwenden. Passwort leer lassen, wenn der Schlüssel nicht verschlüsselt ist.", - "connection_modal.help.redis_cluster_hosts": "Weitere Redis-Cluster-Knoten, getrennt durch Komma, Semikolon oder Leerzeichen.", - "connection_modal.help.replica_hosts": "Replica-Hosts im Format host:port, getrennt durch Komma, Semikolon oder Leerzeichen.", - "connection_modal.help.select_after_test": "Führen Sie zuerst einen Verbindungstest aus, um auswählbare Datenbanken zu laden.", - "connection_modal.jvm.access_mode_description": "Wählen Sie, welche JVM-Zugriffsmodi diese Verbindung verwenden kann und welcher bevorzugt wird.", - "connection_modal.jvm.access_mode_title": "Zugriffsmodi", - "connection_modal.jvm.agent_api_key_optional": "Agent-API-Schlüssel (optional)", - "connection_modal.jvm.agent_description": "Verbindung über einen GoNavi Agent, wenn direkter Netzwerkzugriff eingeschränkt ist.", - "connection_modal.jvm.agent_help": "Basis-URL des GoNavi Agent-Dienstes.", - "connection_modal.jvm.agent_url": "Agent-URL", - "connection_modal.jvm.diagnostic.agent_bridge_description": "Den Diagnose-Endpoint der GoNavi Agent Bridge verwenden.", - "connection_modal.jvm.diagnostic.arthas_tunnel_description": "Arthas Tunnel verwenden, um die Ziel-JVM zu erreichen.", - "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Basis-URL des Arthas Tunnel-Servers.", - "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", - "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", - "connection_modal.jvm.diagnostic.arthas_tunnel_url": "Arthas Tunnel-URL", - "connection_modal.jvm.diagnostic.bridge_help": "Basis-URL der GoNavi-Diagnosebrücke.", - "connection_modal.jvm.diagnostic.bridge_url": "Diagnosebrücken-URL", - "connection_modal.jvm.diagnostic.mutating_commands": "Verändernde Befehle", - "connection_modal.jvm.diagnostic.mutating_commands_description": "Befehle erlauben, die den Laufzeitzustand ändern können. Nur in kontrollierten Umgebungen verwenden.", - "connection_modal.jvm.diagnostic.observe_commands": "Beobachtungsbefehle", - "connection_modal.jvm.diagnostic.observe_commands_description": "Nur-Lese-Befehle wie dashboard, thread und JVM-Informationen erlauben.", - "connection_modal.jvm.diagnostic.target_agent_id": "Ziel-Agent-ID", - "connection_modal.jvm.diagnostic.target_agent_id_help": "In Arthas Tunnel registrierte Agent-ID.", - "connection_modal.jvm.diagnostic.target_id": "Ziel-ID", - "connection_modal.jvm.diagnostic.target_id_help": "Zielkennung, die die Diagnosebrücke versteht. Leer lassen, wenn die Brücke das Standardziel wählt.", - "connection_modal.jvm.diagnostic.trace_commands": "Tracing-Befehle", - "connection_modal.jvm.diagnostic.trace_commands_description": "Tracing- und Watch-Befehle erlauben, die Laufzeitaufwand verursachen.", - "connection_modal.jvm.diagnostic_api_key_optional": "Diagnose-API-Schlüssel (optional)", - "connection_modal.jvm.diagnostic_description": "Optionale Diagnosebefehle für die JVM-Fehlersuche aktivieren.", - "connection_modal.jvm.diagnostic_disabled_hint": "Diagnoseerweiterung ist deaktiviert. Nur bei Bedarf zur Laufzeit-Fehlersuche aktivieren.", - "connection_modal.jvm.diagnostic_timeout_seconds": "Diagnose-Timeout (Sekunden)", - "connection_modal.jvm.diagnostic_title": "Diagnoseerweiterung", - "connection_modal.jvm.diagnostic_transport": "Diagnosetransport", - "connection_modal.jvm.endpoint_api_key_optional": "Endpoint-API-Schlüssel (optional)", - "connection_modal.jvm.endpoint_description": "Mit einem vom Dienst bereitgestellten Endpoint statt direkt mit JMX verbinden.", - "connection_modal.jvm.endpoint_help": "Basis-URL des JVM-Verwaltungs-Endpoint.", - "connection_modal.jvm.endpoint_url": "Endpoint-URL", - "connection_modal.jvm.environment": "Umgebung", - "connection_modal.jvm.environment.dev": "Entwicklung", - "connection_modal.jvm.environment.dev_description": "Testumgebung mit geringerem Risiko.", - "connection_modal.jvm.environment.prod": "Produktion", - "connection_modal.jvm.environment.prod_description": "Produktionsumgebung; Nur-Lese-Betrieb wird empfohlen.", - "connection_modal.jvm.environment.uat": "UAT", - "connection_modal.jvm.environment.uat_description": "Validierungsumgebung vor der Produktion.", - "connection_modal.jvm.jmx_description": "Über JMX mit Host, Port und optionalen Zugangsdaten verbinden.", - "connection_modal.jvm.jmx_host_override_optional": "JMX-Host überschreiben (optional)", - "connection_modal.jvm.jmx_password_optional": "JMX-Passwort (optional)", - "connection_modal.jvm.jmx_port": "JMX-Port", - "connection_modal.jvm.jmx_username_optional": "JMX-Benutzername (optional)", - "connection_modal.jvm.mode.agent_description": "Für Umgebungen hinter Firewalls oder NAT über GoNavi Agent gehen.", - "connection_modal.jvm.mode.endpoint_description": "Einen vom Zieldienst bereitgestellten HTTP Endpoint verwenden.", - "connection_modal.jvm.mode.jmx_description": "Standardmäßigen JMX-Remotezugriff verwenden.", - "connection_modal.jvm.preferred_mode_hint": "Aktuell bevorzugter Modus: {{mode}}", - "connection_modal.jvm.read_only_first": "Nur-Lese-Operationen bevorzugen", - "connection_modal.jvm.security_policy": "Sicherheitsrichtlinie", - "connection_modal.message.srv_with_ssh_dns_warning": "SRV mit SSH Tunnel kann von lokaler DNS-Auflösung abhängen. Wenn die Auflösung fehlschlägt, verwenden Sie Standard-Hosts.", - "connection_modal.messageQueue.kafka.defaultTopic.label": "Standard-Topic (optional)", - "connection_modal.messageQueue.kafka.defaultTopic.help": "Wenn leer, muss das Topic in SQL explizit angegeben werden. Danach können SHOW, CONSUME oder SELECT direkt eine Vorschau liefern.", - "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "Beispiel: orders.events", - "connection_modal.messageQueue.rocketmq.defaultTopic.label": "Standard-Topic (optional)", - "connection_modal.messageQueue.rocketmq.defaultTopic.help": "Wenn leer, muss das Topic in SQL explizit angegeben werden. Verbindungsparameter können weiterhin groupId, namespace, tag, pullBatchSize und startOffset ergänzen.", - "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "Beispiel: orders.events", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "Standard-Topic / Filter (optional)", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "Wenn leer, muss das Topic in SQL explizit angegeben werden. Danach können SHOW, CONSUME oder SELECT direkt eine Vorschau liefern. /, + und # werden unterstützt.", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "Beispiel: devices/+/telemetry", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "Standard-Virtual Host (optional)", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "Wenn leer, wird standardmäßig / verwendet. Danach nutzt der Query-Editor den aktuellen vhost als Kontext für Queue-Browsing und Testversand.", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "Beispiel: / oder orders-vhost", - "connection_modal.messageQueue.topology.cluster.label": "Clustermodus", - "connection_modal.messageQueue.kafka.topology.single.label": "Einzelner Broker", - "connection_modal.messageQueue.kafka.topology.single.description": "Konfiguriert einen bootstrap broker für lokale oder einfache Umgebungen.", - "connection_modal.messageQueue.kafka.topology.cluster.description": "Konfiguriert mehrere bootstrap broker, um Discovery und Failover-Erfolg zu verbessern.", - "connection_modal.messageQueue.rocketmq.topology.single.label": "Einzelner NameServer", - "connection_modal.messageQueue.rocketmq.topology.single.description": "Konfiguriert einen NameServer für lokale oder einfache Umgebungen.", - "connection_modal.messageQueue.rocketmq.topology.cluster.description": "Konfiguriert mehrere NameServer, um Routenerkennung und Failover-Erfolg zu verbessern.", - "connection_modal.messageQueue.mqtt.topology.single.label": "Einzelner Broker", - "connection_modal.messageQueue.mqtt.topology.single.description": "Konfiguriert einen broker für lokale oder einfache Umgebungen.", - "connection_modal.messageQueue.mqtt.topology.cluster.description": "Konfiguriert mehrere broker, um Verbindungserkennung und Failover-Erfolg zu verbessern.", - "connection_modal.messageQueue.kafka.extraBrokers.label": "Zusätzliche Broker-Adressen", - "connection_modal.messageQueue.kafka.extraBrokers.help": "Mehrere broker-Adressen im Format host:port eingeben und mit Enter bestätigen.", - "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "Beispiel: 10.10.0.12:9092, 10.10.0.13:9092", - "connection_modal.messageQueue.rocketmq.extraNameServers.label": "Zusätzliche NameServer-Adressen", - "connection_modal.messageQueue.rocketmq.extraNameServers.help": "Mehrere NameServer-Adressen im Format host:port eingeben und mit Enter bestätigen.", - "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "Beispiel: 10.10.0.12:9876, 10.10.0.13:9876", - "connection_modal.messageQueue.mqtt.extraBrokers.label": "Zusätzliche Broker-Adressen", - "connection_modal.messageQueue.mqtt.extraBrokers.help": "Mehrere broker-Adressen im Format host:port eingeben und mit Enter bestätigen.", - "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "Beispiel: 10.10.0.12:1883, 10.10.0.13:1883", - "connection_modal.redis.topology.single.label": "Standalone-Modus", - "connection_modal.redis.topology.single.description": "Verbindet sich mit einem Redis-Knoten.", - "connection_modal.redis.topology.cluster.label": "Clustermodus", - "connection_modal.redis.topology.cluster.description": "Redis Cluster mit mehreren Seed-Knoten.", - "connection_modal.redis.topology.sentinel.label": "Sentinel-Modus", - "connection_modal.redis.topology.sentinel.description": "Ermittelt den primären Knoten über Sentinel für Primär-Replikat-Hochverfügbarkeit.", - "connection_modal.redis.hosts.sentinel.label": "Zusätzliche Sentinel-Knotenadressen", - "connection_modal.redis.hosts.sentinel.help": "Der obige Host wird als erster Sentinel verwendet. Weitere Sentinel-Knoten hier im Format host:port eingeben.", - "connection_modal.redis.hosts.sentinel.placeholder": "Beispiel: 10.10.0.12:26379, 10.10.0.13:26379", - "connection_modal.redis.hosts.cluster.label": "Zusätzliche Cluster-Knotenadressen", - "connection_modal.redis.hosts.cluster.help": "Der obige Host wird als primärer Knoten verwendet. Weitere Seed-Knoten hier im Format host:port eingeben.", - "connection_modal.redis.hosts.cluster.placeholder": "Beispiel: 10.10.0.12:6379, 10.10.0.13:6379", - "connection_modal.redis.sentinel.master.label": "Sentinel master-Name", - "connection_modal.redis.sentinel.master.help": "Den monitor-Namen aus der Sentinel-Konfiguration eingeben, zum Beispiel mymaster.", - "connection_modal.redis.sentinel.master.required": "Sentinel master-Name eingeben", - "connection_modal.redis.sentinel.master.placeholder": "Beispiel: mymaster", - "connection_modal.redis.credentials.primary.label": "Passwort (optional)", - "connection_modal.redis.credentials.primary.placeholder.empty": "Redis-Passwort, wenn requirepass gesetzt ist", - "connection_modal.redis.credentials.primary.placeholder.retained": "Gespeichertes Redis-Passwort", - "connection_modal.redis.credentials.sentinelUser.label": "Sentinel-Benutzername (optional)", - "connection_modal.redis.credentials.sentinelUser.placeholder": "Leer lassen, wenn Sentinel keinen ACL-Benutzernamen verwendet", - "connection_modal.redis.credentials.sentinelPassword.label": "Sentinel-Passwort (optional)", - "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Authentifizierungspasswort für Sentinel selbst. Leer lassen, um keines zu senden.", - "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "Gespeichertes Sentinel-Passwort", - "connection_modal.redis.credentials.sentinelPassword.clear": "Gespeichertes Sentinel-Passwort löschen", - "connection_modal.redis.credentials.sentinelPassword.description": "Ein Sentinel-Passwort ist derzeit gespeichert. Leer lassen, um es weiterzuverwenden, oder einen neuen Wert zum Ersetzen eingeben.", - "connection_modal.redis.databaseScope.label": "Anzuzeigende Datenbanken (leer zeigt alle)", - "connection_modal.redis.databaseScope.help": "Nach erfolgreichem Verbindungstest auswählbar", - "connection_modal.redis.databaseScope.placeholder": "Anzuzeigende Datenbanken auswählen", - "connection_modal.mongodb.auth.auto": "Automatisch", - "connection_modal.mongodb.auth.auto_description": "Der Treiber wählt den Authentifizierungsmechanismus.", - "connection_modal.mongodb.auth.aws_iam_description": "AWS IAM-Authentifizierung verwenden. AWS IAM-Zugangsdaten in der Laufzeitumgebung bereitstellen.", - "connection_modal.mongodb.auth.none": "Keine Authentifizierung", - "connection_modal.mongodb.auth.none_description": "Ohne MongoDB-Authentifizierung verbinden.", - "connection_modal.mongodb.auth.scram_sha1_description": "SCRAM-SHA-1-Authentifizierung verwenden.", - "connection_modal.mongodb.auth.scram_sha256_description": "SCRAM-SHA-256-Authentifizierung verwenden.", - "connection_modal.mongodb.auth_mechanism": "Authentifizierungsmechanismus", - "connection_modal.mongodb.topology.single.label": "Standalone-Modus", - "connection_modal.mongodb.topology.replica.label": "Replikatset / mehrere Knoten", - "connection_modal.mongodb.discovery.standard.label": "Standardadresse", - "connection_modal.mongodb.discovery.standard.description": "Direkt mit host:port verbinden oder eine Replikatset-Knotenliste verwenden.", - "connection_modal.mongodb.discovery.srv.label": "SRV-Adresse", - "connection_modal.mongodb.discovery.srv.description": "mongodb+srv verwenden und Zielknoten per DNS erkennen lassen.", - "connection_modal.mongodb.discovery.current": "Aktuell", - "connection_modal.mongodb.discovery.srv_ssh_warning": "Wenn SRV und SSH-Tunnel gleichzeitig aktiv sind, kann lokale DNS-Auflösung erforderlich sein.", - "connection_modal.mongodb.replica.hosts.srv.label": "Zusätzliche SRV-Hosts (optional)", - "connection_modal.mongodb.replica.hosts.srv.help": "Mehrere Kandidaten-Hostnamen im Format host eingeben. Leer lassen, um nur den obigen Host zu verwenden.", - "connection_modal.mongodb.replica.hosts.srv.placeholder": "Beispiel: cluster-a.example.com, cluster-b.example.com", - "connection_modal.mongodb.replica.hosts.standard.label": "Zusätzliche Knotenadressen", - "connection_modal.mongodb.replica.hosts.standard.help": "Mehrere Knotenadressen im Format host:port eingeben und mit Enter bestätigen.", - "connection_modal.mongodb.replica.hosts.standard.placeholder": "Beispiel: 10.10.0.12:27017, 10.10.0.13:27017", - "connection_modal.mongodb.replica.set.label": "Replikatset-Name (optional)", - "connection_modal.mongodb.replica.set.placeholder": "Beispiel: rs0", - "connection_modal.mongodb.replica.user.label": "Replikatset-Benutzername (optional)", - "connection_modal.mongodb.replica.user.placeholder": "Leer lassen, um den primären Benutzernamen zu verwenden", - "connection_modal.mongodb.replica.password.label": "Replikatset-Passwort (optional)", - "connection_modal.mongodb.replica.password.placeholder.empty": "Leer lassen, um das primäre Passwort zu verwenden", - "connection_modal.mongodb.replica.password.placeholder.retained": "Gespeichertes Replikatset-Passwort", - "connection_modal.mongodb.replica.password.clear": "Gespeichertes Replikatset-Passwort löschen", - "connection_modal.mongodb.replica.password.description": "Ein Replikatset-Passwort ist derzeit gespeichert. Leer lassen, um es weiterzuverwenden, oder einen neuen Wert zum Ersetzen eingeben.", - "connection_modal.mongodb.members.role": "Rolle", - "connection_modal.mongodb.members.health": "Zustand", - "connection_modal.mongodb.members.health.ok": "Normal", - "connection_modal.mongodb.members.health.error": "Fehlerhaft", - "connection_modal.mongodb.policy.auth_source.label": "Authentifizierungsdatenbank (authSource)", - "connection_modal.mongodb.policy.auth_source.placeholder": "Standardmäßig database oder admin", - "connection_modal.mongodb.read_preference": "readPreference", - "connection_modal.mongodb.read_preference.nearest": "Lesezugriffe zum nächsten Mitglied leiten.", - "connection_modal.mongodb.read_preference.primary": "Nur vom primary lesen.", - "connection_modal.mongodb.read_preference.primary_preferred": "primary bevorzugen, bei Bedarf auf secondaries zurückfallen.", - "connection_modal.mongodb.read_preference.secondary": "Nur von secondaries lesen.", - "connection_modal.mongodb.read_preference.secondary_preferred": "secondaries bevorzugen, bei Bedarf auf primary zurückfallen.", - "connection_modal.mongodb.srv_address": "SRV-Adresse", - "connection_modal.mongodb.srv_address_description": "Einen MongoDB SRV-Eintrag zur Host-Erkennung verwenden.", - "connection_modal.mongodb.standard_address": "Standardadresse", - "connection_modal.mongodb.standard_address_description": "Host und Port plus optionale Mitgliederliste verwenden.", - "connection_modal.network.http_tunnel": "HTTP Tunnel", - "connection_modal.network.http_tunnel_description": "Datenbankverkehr über einen HTTP Tunnel weiterleiten.", - "connection_modal.network.http_tunnel_disabled_hint": "HTTP Tunnel aktivieren, um Tunnel-Host, Port und Zugangsdaten zu konfigurieren.", - "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel kann nicht zusammen mit SSH Tunnel oder Proxy verwendet werden.", - "connection_modal.network.http_tunnel_panel_description": "Ein HTTP Tunnel-Gateway für diese Verbindung konfigurieren.", - "connection_modal.network.proxy": "Proxy", - "connection_modal.network.proxy_disabled_hint": "Proxy aktivieren, um diese Verbindung über SOCKS5 oder HTTP CONNECT zu leiten.", - "connection_modal.network.proxy_panel_description": "Proxy-Einstellungen für diese Verbindung konfigurieren.", - "connection_modal.network.proxy_type.http_description": "HTTP CONNECT-Proxying verwenden.", - "connection_modal.network.proxy_type.socks5_description": "SOCKS5-Proxying verwenden.", - "connection_modal.network.ssh_disabled_hint": "SSH Tunnel aktivieren, um über einen Bastion-Host zu verbinden.", - "connection_modal.network.ssh_panel_description": "SSH Tunnel-Host, Zugangsdaten und optionalen privaten Schlüssel konfigurieren.", - "connection_modal.network.ssh_tunnel": "SSH Tunnel", - "connection_modal.network.ssh_tunnel_description": "Vor dem Datenbankzugriff über einen SSH Tunnel verbinden.", - "connection_modal.network.ssl_description": "Datenbankverbindung mit SSL/TLS verschlüsseln.", - "connection_modal.network.ssl_tls": "SSL/TLS", - "connection_modal.network.ssl_disabled_hint": "SSL/TLS aktivieren, um die Zertifikatsrichtlinie zu konfigurieren.", - "connection_modal.network.ssl_mode": "SSL-Modus", - "connection_modal.network.ssl_mode.preferred_description": "Zuerst SSL versuchen und zurückfallen, wenn der Server es nicht verlangt.", - "connection_modal.network.ssl_mode.required_description": "SSL erzwingen und fehlschlagen, wenn keine verschlüsselte Verbindung möglich ist.", - "connection_modal.network.ssl_mode.skip_verify_description": "SSL verwenden, aber Zertifikatsprüfung überspringen. Nur für Tests oder selbstsignierte Zertifikate verwenden.", - "connection_modal.network.ssl_panel_description": "SSL/TLS-Richtlinie für diese Verbindung konfigurieren.", - "connection_modal.placeholder.absolute_path": "/absoluter/pfad/zur/datei", - "connection_modal.placeholder.agent_api_key": "Optionaler Agent-API-Schlüssel", - "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", - "connection_modal.placeholder.custom_dsn_example": "Beispiel: treiberspezifischer DSN", - "connection_modal.placeholder.default_database_or_admin": "Standarddatenbank oder admin", - "connection_modal.placeholder.diagnostic_api_key": "Optionaler Diagnose-API-Schlüssel", - "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", - "connection_modal.placeholder.diagnostic_target_id": "Ziel-ID", - "connection_modal.placeholder.empty_without_auth": "Ohne Authentifizierung leer lassen", - "connection_modal.placeholder.endpoint_api_key": "Optionaler Endpoint-API-Schlüssel", - "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", - "connection_modal.placeholder.example_appdb": "appdb", - "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", - "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", - "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", - "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", - "connection_modal.placeholder.example_rs0": "rs0", - "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", - "connection_modal.placeholder.no_auth": "Keine Authentifizierung", - "connection_modal.placeholder.proxy_host": "127.0.0.1", - "connection_modal.placeholder.redis_password": "Redis-Passwort", - "connection_modal.placeholder.select_databases": "Anzuzeigende Datenbanken auswählen", - "connection_modal.placeholder.select_redis_databases": "Anzuzeigende Redis-Datenbanken auswählen", - "connection_modal.placeholder.ssh_host": "bastion.example.com", - "connection_modal.placeholder.ssl_cert_path": "/absoluter/pfad/client.crt", - "connection_modal.placeholder.ssl_key_path": "/absoluter/pfad/client.key", - "connection_modal.placeholder.tunnel_host": "tunnel.example.com", - "connection_modal.placeholder.use_primary_host": "Primären Host verwenden", - "connection_modal.placeholder.use_primary_password": "Primäres Passwort verwenden", - "connection_modal.placeholder.use_primary_password_short": "Primäres Passwort verwenden", - "connection_modal.placeholder.use_primary_port": "Primären Port verwenden", - "connection_modal.placeholder.use_primary_username": "Primären Benutzernamen verwenden", - "connection_modal.placeholder.use_primary_username_short": "Primären Benutzernamen verwenden", - "connection_modal.secret.clear_saved_mongo_replica_password": "Gespeichertes MongoDB-Replica-Passwort löschen", - "connection_modal.secret.clear_saved_password": "Gespeichertes Passwort löschen", - "connection_modal.secret.clear_saved_proxy_password": "Gespeichertes Proxy-Passwort löschen", - "connection_modal.secret.clear_saved_replica_password": "Gespeichertes Replica-Passwort löschen", - "connection_modal.secret.clear_saved_ssh_password": "Gespeichertes SSH-Passwort löschen", - "connection_modal.secret.clear_saved_tunnel_password": "Gespeichertes HTTP Tunnel-Passwort löschen", - "connection_modal.secret.error.saved_connection_missing": "Das gespeicherte Secret für die aktuelle Verbindung wurde nicht gefunden. Geben Sie das Passwort erneut ein, speichern Sie und versuchen Sie es noch einmal.", - "connection_modal.secret.error.store_unavailable": "Der sichere Secret-Speicher ist derzeit nicht verfügbar. Prüfen Sie den System-Schlüsselbund oder die Anmeldeinformationsverwaltung und versuchen Sie es erneut.", - "connection_modal.secret.saved_mongo_replica_password": "Gespeichertes MongoDB-Replica-Passwort", - "connection_modal.secret.saved_mongo_replica_password_description": "Ein MongoDB-Replica-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", - "connection_modal.secret.saved_password": "Gespeichertes Passwort", - "connection_modal.secret.saved_placeholder": "•••••• (leer lassen, um {{label}} weiter zu verwenden)", - "connection_modal.secret.saved_primary_password_description": "Ein Passwort für die primäre Verbindung ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", - "connection_modal.secret.saved_proxy_password": "Gespeichertes Proxy-Passwort", - "connection_modal.secret.saved_proxy_password_description": "Ein Proxy-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", - "connection_modal.secret.saved_redis_password": "Gespeichertes Redis-Passwort", - "connection_modal.secret.saved_redis_password_description": "Ein Redis-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", - "connection_modal.secret.saved_replica_password": "Gespeichertes Replica-Passwort", - "connection_modal.secret.saved_replica_password_description": "Ein Replica-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", - "connection_modal.secret.saved_ssh_password": "Gespeichertes SSH-Passwort", - "connection_modal.secret.saved_ssh_password_description": "Ein SSH-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", - "connection_modal.secret.saved_tunnel_password": "Gespeichertes HTTP Tunnel-Passwort", - "connection_modal.secret.saved_tunnel_password_description": "Ein HTTP Tunnel-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", - "connection_modal.section.advanced_connection": "Erweiterte Verbindung", - "connection_modal.section.config_sections": "Konfigurationsbereiche", - "connection_modal.status.disabled": "Deaktiviert", - "connection_modal.status.enabled": "Aktiviert", - "connection_modal.status.healthy": "Fehlerfrei", - "connection_modal.status.unhealthy": "Fehlerhaft", - "connection_modal.switch.off": "Aus", - "connection_modal.switch.on": "Ein", - "connection_modal.table.health": "Zustand", - "connection_modal.table.role": "Rolle", - "connection_modal.topology.cluster": "Cluster", - "connection_modal.topology.mongodb_replica": "Replica Set", - "connection_modal.topology.mongodb_replica_description": "Mit einem MongoDB Replica Set verbinden und optional Mitglieder erkennen.", - "connection_modal.topology.mongodb_single_description": "Mit einem einzelnen MongoDB-Host verbinden.", - "connection_modal.topology.mysql_replica_description": "Primäre Verbindung plus optionale Replica-Hosts verwenden.", - "connection_modal.topology.mysql_single_description": "Mit einem einzelnen MySQL-kompatiblen Knoten verbinden.", - "connection_modal.topology.primary_replica": "Primary/Replica", - "connection_modal.topology.redis_cluster_description": "Mit einem Redis Cluster verbinden und weitere Knoten angeben.", - "connection_modal.topology.redis_single_description": "Mit einem einzelnen Redis-Knoten verbinden.", - "connection_modal.topology.single": "Einzelknoten", - "connection_modal.validation.address_or_path_required": "Hostadresse oder Dateipfad eingeben", - "connection_modal.validation.agent_url_required": "Agent-URL eingeben", - "connection_modal.validation.arthas_tunnel_url_required": "Arthas Tunnel-URL eingeben", - "connection_modal.validation.dameng_ssl_cert_path_required": "Dameng SSL-Zertifikatspfad eingeben", - "connection_modal.validation.dameng_ssl_key_path_required": "Dameng SSL-Schlüsselpfad eingeben", - "connection_modal.validation.diagnostic_bridge_url_required": "Diagnosebrücken-URL eingeben", - "connection_modal.validation.diagnostic_target_required": "Diagnoseziel eingeben", - "connection_modal.validation.diagnostic_timeout_range_1_300": "Diagnose-Timeout muss zwischen 1 und 300 Sekunden liegen", - "connection_modal.validation.endpoint_url_required": "Endpoint-URL eingeben", - "connection_modal.validation.jvm_access_mode_required": "Mindestens einen JVM-Zugriffsmodus auswählen", - "connection_modal.validation.jvm_preferred_mode_required": "Bevorzugten JVM-Zugriffsmodus auswählen", - "connection_modal.validation.oracle_service_required": "Oracle-Servicename eingeben", - "connection_modal.validation.port_required": "Port eingeben", - "connection_modal.validation.proxy_host_required": "Proxy-Host eingeben", - "connection_modal.validation.proxy_port_required": "Proxy-Port eingeben", - "connection_modal.validation.ssh_host_required": "SSH-Host eingeben", - "connection_modal.validation.ssh_port_required": "SSH-Port eingeben", - "connection_modal.validation.ssh_user_required": "SSH-Benutzer eingeben", - "connection_modal.validation.timeout_range_1_300": "Timeout muss zwischen 1 und 300 Sekunden liegen", - "connection_modal.validation.tunnel_host_required": "HTTP Tunnel-Host eingeben", - "connection_modal.validation.tunnel_port_required": "HTTP Tunnel-Port eingeben", - "connection_modal.validation.username_required": "Benutzernamen eingeben", - "sidebar.batch_databases": "Datenbanken stapelweise bearbeiten", - "sidebar.batch_tables": "Tabellen stapelweise bearbeiten", - "connection_modal.ssl_hint.mysql_like": "Aktivieren Sie SSL, wenn MySQL/MariaDB/Doris/Sphinx sichere Übertragung verlangt. Bei selbstsignierten Zertifikaten zuerst Preferred oder Skip Verify prüfen.", - "connection_modal.ssl_hint.dameng": "Dameng SSL benötigt Pfade für Clientzertifikat und privaten Schlüssel (sslCertPath / sslKeyPath).", - "connection_modal.ssl_hint.sqlserver": "Für SQL Server in Produktion Required verwenden und TrustServerCertificate deaktivieren.", - "connection_modal.ssl_hint.mongodb": "MongoDB-Verbindungen können mit TLS geschützt werden. Wenn die Zertifikatsprüfung Tests blockiert, zunächst Skip Verify verwenden.", - "connection_modal.ssl_hint.default": "Bevorzugen Sie Required. Verwenden Sie Skip Verify nur für Tests oder selbstsignierte Zertifikate.", - "connection_modal.secret.new_value_replaces_saved": "Der neu eingegebene Wert ersetzt beim Speichern den aktuell gesicherten Wert.", - "connection_modal.badge.current": "Aktuell", - "connection_modal.message.driver_not_enabled_with_name": "Der Treiber {{name}} ist nicht installiert oder nicht aktiviert. Installieren oder aktivieren Sie ihn zuerst in der Treiberverwaltung.", - "connection_modal.driver.current": "Aktuell", - "connection_modal.message.driver_unavailable_title": "Treiber {{name}} nicht verfügbar", - "connection_modal.action.open_driver_manager": "Treiberverwaltung öffnen", - "connection_modal.action.cancel": "Abbrechen", - "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", - "connection_modal.message.uri_generated": "URI erzeugt", - "connection_modal.message.uri_generate_failed": "URI konnte nicht erstellt werden", - "connection_modal.message.uri_required": "Geben Sie zuerst eine URI ein", - "connection_modal.message.uri_type_mismatch": "Der URI-Typ passt nicht zur ausgewählten Datenquelle", - "connection_modal.message.uri_parsed": "URI wurde in das Formular übernommen", - "connection_modal.message.uri_parse_failed": "Vorgang fehlgeschlagen", - "connection_modal.message.uri_empty_copy": "URI ist leer und kann nicht kopiert werden", - "connection_modal.message.uri_copied": "URI kopiert", - "connection_modal.message.copy_failed": "Kopieren fehlgeschlagen", - "connection_modal.message.select_ssh_key_failed": "SSH-Privatschlüssel konnte nicht ausgewählt werden: {{error}}", - "connection_modal.error.unknown": "Unbekannter Fehler", - "connection_modal.message.select_database_file_failed": "Datenbankdatei konnte nicht ausgewählt werden: {{error}}", - "connection_modal.message.save_backend_unavailable": "Vorgang fehlgeschlagen", - "connection_modal.message.save_updated_disconnected": "Konfiguration gespeichert (nicht verbunden)", - "connection_modal.message.save_created_disconnected": "Konfiguration gespeichert (nicht verbunden).", - "connection_modal.message.save_security_refresh_failed": "Vorgang fehlgeschlagen", - "connection_modal.message.save_failed": "Vorgang fehlgeschlagen", - "connection_modal.message.test_requires_new_password": "Geben Sie vor dem Test das neue Verbindungspasswort ein.", - "connection_modal.secret.blocking.redis_sentinel": "Geben Sie vor dem Test ein neues Sentinel-Passwort ein oder brechen Sie das Löschen des gespeicherten Sentinel-Passworts ab", - "connection_modal.test.redis_database_list_timeout": "Verbunden, aber das Laden der Redis-Datenbankliste ist abgelaufen (>{{seconds}} Sekunden)", - "connection_modal.test.redis_database_list_failure": "Verbunden, aber die Redis-Datenbankliste konnte nicht geladen werden: {{detail}}", - "connection_modal.message.test_requires_new_ssh_password": "Geben Sie vor dem Test das neue SSH-Passwort ein.", - "connection_modal.message.test_requires_new_proxy_password": "Geben Sie vor dem Test das neue Proxy-Passwort ein.", - "connection_modal.message.test_requires_new_tunnel_password": "Geben Sie vor dem Test das neue HTTP Tunnel-Passwort ein.", - "connection_modal.message.test_requires_new_replica_password": "Geben Sie vor dem Test das neue Replikatpasswort ein.", - "connection_modal.message.test_requires_new_mongo_replica_password": "Geben Sie vor dem Test das neue MongoDB Replica Set-Passwort ein.", - "connection_modal.message.test_requires_new_mongodb_password": "Geben Sie vor dem Test das neue MongoDB-Passwort ein.", - "connection_modal.message.driver_not_enabled": "Der Treiber ist nicht installiert oder nicht aktiviert.", - "connection_modal.message.connection_params_incomplete": "Die Verbindungsparameter sind unvollständig.", - "connection_modal.message.test_timeout": "Vorgang nach {{seconds}} Sekunden abgelaufen", - "connection_modal.message.database_list_timeout": "Vorgang nach {{seconds}} Sekunden abgelaufen", - "connection_modal.message.no_visible_schema": "Es wurden keine sichtbaren Schemas zurückgegeben.", - "connection_modal.message.no_visible_databases": "Keine sichtbaren Datenbanken gefunden.", - "connection_modal.message.database_list_failed": "Datenbankliste konnte nicht geladen werden: {{error}}", - "connection_modal.message.connection_rejected": "Verbindung abgelehnt", - "connection_modal.message.required_fields_before_test": "Füllen Sie die Pflichtfelder aus, bevor Sie die Verbindung testen.", - "connection_modal.message.test_failed_detail": "Test fehlgeschlagen: {{detail}}", - "connection_modal.error.unknown_exception": "Unbekannter Fehler", - "connection_modal.message.member_discovery_failed": "Vorgang fehlgeschlagen", - "connection_modal.message.member_discovery_success": "{{count}} Mitglieder gefunden", - "connection_modal.message.unsupported_jvm_modes": "Der ausgewählte JVM-Zugriffsmodus wird nicht unterstützt", - "connection_modal.message.unsupported_jvm_diagnostic_transport": "Der ausgewählte JVM-Diagnosetransport wird nicht unterstützt", - "connection_modal.message.dameng_ssl_cert_required": "Dieses Feld ist erforderlich", - "connection_modal.message.http_tunnel_host_required": "Dieses Feld ist erforderlich", - "connection_modal.message.http_tunnel_port_invalid": "Der HTTP Tunnel-Port ist ungültig", - "connection_modal.message.unsupported_jvm_modes_current": "Diese Verbindung enthält nicht unterstützte JVM-Zugriffsmodi", - "connection_modal.group.relational": "Relationale Datenbanken", - "connection_modal.group.chinese_databases": "Chinesische Datenbanken", - "connection_modal.step1.group.nosql": "NoSQL-Datenbanken", - "connection_modal.step1.group.relational": "Relationale Datenbanken", - "connection_modal.step1.group.domestic": "Inländische Datenbanken", - "connection_modal.step1.group.timeseries": "Zeitreihendatenbanken", - "connection_modal.step1.group.other": "Andere", - "connection_modal.group.time_series": "Zeitreihendatenbanken", - "connection_modal.group.other": "Andere", - "connection_modal.db_type.custom": "Benutzerdefiniert", - "connection_modal.layout.mysql_compatible": "MySQL-kompatible Verbindung", - "connection_modal.layout.mongodb": "MongoDB-Verbindung", - "connection_modal.layout.redis": "Redis-Verbindung", - "connection_modal.layout.postgres_compatible": "PostgreSQL-kompatible Verbindung", - "connection_modal.layout.oracle": "Oracle-Verbindung", - "connection_modal.layout.file": "Dateidatenbank-Verbindung", - "connection_modal.layout.custom": "Benutzerdefinierte Treiberverbindung", - "connection_modal.layout.jvm": "JVM-Laufzeitverbindung", - "connection_modal.layout.generic_sql": "Generische SQL-Verbindung", - "connection_modal.db_type_hint.custom": "Mit einem benutzerdefinierten Treiber und DSN verbinden.", - "connection_modal.db_type_hint.redis": "Mit Redis Standalone oder Redis Cluster verbinden.", - "connection_modal.db_type_hint.mongodb": "Mit MongoDB Standalone, Replica Set oder SRV-Adressen verbinden.", - "connection_modal.db_type_hint.file": "Eine lokale SQLite- oder DuckDB-Datenbankdatei auswählen.", - "connection_modal.db_type_hint.standard": "Host, Port, Authentifizierung und optional eine Datenbank eingeben.", - "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", - "connection_modal.step1.hint.custom": "Benutzerdefinierter Treiber und DSN", - "connection_modal.step1.hint.redis": "Einzelknoten / Cluster", - "connection_modal.step1.hint.mongodb": "Einzelknoten / Replikatset", - "connection_modal.step1.hint.oceanBase": "MySQL / Oracle-Mandant", - "connection_modal.step1.hint.file": "Lokale Dateiverbindung", - "connection_modal.step1.hint.standard": "Standard-Verbindungskonfiguration", - "connection_modal.step.select_source": "Datenquelle auswählen", - "connection_modal.step.select_source_description": "Wählen Sie den zu erstellenden Verbindungstyp.", - "connection_modal.message.driver_not_enabled_with_name_short": "Der Treiber {{name}} ist nicht installiert oder nicht aktiviert. Öffnen Sie zuerst die Treiberverwaltung.", - "connection_modal.section.basic.title": "Basisinformationen", - "connection_modal.section.basic.description": "Benennen Sie die Verbindung und geben Sie Ziel, Treiber und Authentifizierung ein.", - "connection_modal.field.connection_name": "Verbindungsname", - "connection_modal.placeholder.jvm_name": "jvm Name", - "connection_modal.placeholder.connection_name": "Verbindung Name", - "connection_modal.field.uri": "URI", - "connection_modal.help.uri": "Verbindungs-URI einfügen oder erzeugen.", - "connection_modal.action.generate_uri": "URI erzeugen", - "connection_modal.action.parse_uri": "URI einlesen", - "connection_modal.action.copy_uri": "URI kopieren", - "connection_modal.secret.clear_saved_uri": "Gespeicherte URI löschen", - "connection_modal.secret.saved_uri_description": "Eine Verbindungs-URI ist bereits sicher gespeichert. Lassen Sie das Feld leer, um sie weiter zu verwenden.", - "connection_modal.field.driver_name": "Treibername", - "connection_modal.field.driver.placeholder": "Zum Beispiel: mysql, postgres", - "connection_modal.validation.driver_name_required": "Geben Sie den Treibernamen ein.", - "connection_modal.placeholder.driver_name": "Treiber Name", - "connection_modal.field.dsn": "DSN", - "connection_modal.field.dsn.placeholder": "Beispiel: user:pass@tcp(localhost:3306)/dbname?charset=utf8", - "connection_modal.validation.custom_dsn_required": "Geben Sie die Verbindungszeichenfolge ein.", - "connection_modal.validation.custom_dsn_required_when_clearing_saved": "Geben Sie eine neue Verbindungszeichenfolge ein oder brechen Sie das Löschen der gespeicherten DSN ab.", - "connection_modal.secret.clear_saved_dsn": "Gespeicherte DSN löschen", - "connection_modal.secret.saved_dsn_description": "Eine DSN ist bereits sicher gespeichert. Lassen Sie das Feld leer, um sie weiter zu verwenden.", - "connection_modal.message.unsupported_jvm_modes_detected": "Nicht unterstützte JVM-Zugriffsmodi erkannt", - "connection_modal.jvm.target_title": "JVM-Ziel", - "connection_modal.jvm.target_description": "Host, Port und Zugriffsmethode für den JVM-Verwaltungs-Endpoint konfigurieren.", - "connection_modal.field.host": "Host", - "connection_modal.validation.jvm_host_required": "Geben Sie den JVM-Host ein.", - "connection_modal.field.primary_port": "Primärer Port", - "connection_modal.validation.jvm_port_required": "Geben Sie den JVM-Port ein.", - "connection_modal.section.network.title": "Netzwerk und Sicherheit", - "connection_modal.section.network.description": "SSL/TLS, SSH Tunnel, Proxy und HTTP Tunnel konfigurieren.", - "connection_modal.message.current_driver_not_enabled": "Der aktuelle Treiber ist nicht installiert oder nicht aktiviert.", - "connection_modal.section.basic.jvm_description": "JVM-Ziel, Zugriffsmodi und Anmeldedaten konfigurieren.", - "connection_modal.section.basic.sql_description": "Ziel, Treiber, Anmeldedaten und Datenbankbereich konfigurieren.", - "connection_modal.section.network.nav_description": "Netzwerk- und Sicherheitsoptionen für diese Verbindung konfigurieren.", - "connection_modal.section.appearance.title": "Darstellung", - "connection_modal.section.appearance.description": "Icon und Farbe für diese Verbindung in der Seitenleiste festlegen.", - "connection_modal.appearance.icon": "Symbol", - "connection_modal.appearance.current_icon": "Aktuelles Symbol: {{icon}}", - "connection_modal.db_icon_label.custom": "Benutzerdefiniert", - "connection_modal.appearance.color": "Farbe", - "connection_modal.appearance.custom_color": "Benutzerdefinierte Farbe", - "connection_modal.appearance.preview": "Vorschau", - "connection_modal.placeholder.connection_name_fallback": "Verbindungsname", - "connection_modal.action.reset_default": "Auf Standard zurücksetzen", - "connection_modal.message.connection_failed": "Verbindung fehlgeschlagen", - "connection_modal.action.previous_step": "Zurück", - "connection_modal.message.connection_success": "Verbindung erfolgreich", - "connection_modal.action.view_reason": "Grund anzeigen", - "connection_modal.action.test": "Verbindung testen", - "connection_modal.action.save": "Speichern", - "connection_modal.title.select_type": "Datenquellentyp auswählen", - "connection_modal.title.select_type_description": "Wählen Sie einen unterstützten Datenquellentyp aus.", - "connection_modal.title.edit": "Verbindung bearbeiten", - "connection_modal.title.edit_description": "Konfiguration der {{type}}-Verbindung bearbeiten.", - "connection_modal.title.create": "Neue {{type}}-Verbindung", - "connection_modal.title.create_description": "Verbindungskonfiguration eingeben und speichern.", - "connection_modal.test_error.title": "Details zum fehlgeschlagenen Verbindungstest", - "connection_modal.test_error.description": "Vollständige vom Backend zurückgegebene Fehlermeldung anzeigen.", - "connection_modal.action.close": "Schließen", - "connection_modal.test_error.empty": "Keine Fehlerdetails", - "sidebar.message.duplicate_backend_unavailable": "Das Duplizieren von Verbindungen ist in diesem Build nicht verfügbar.", - "sidebar.message.duplicate_empty_result": "Die duplizierte Verbindung wurde nicht zurückgegeben.", - "sidebar.message.duplicated_connection": "Verbindung {{name}} dupliziert.", - "sidebar.message.duplicate_failed": "Verbindung konnte nicht dupliziert werden.", - "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "JVM-Provider-Prüfung fehlgeschlagen: {{error}}. Der Einstieg für die Diagnoseerweiterung bleibt verfügbar.", - "sidebar.message.jvm_provider_probe_failed": "JVM-Anbieter konnten nicht geprüft werden: {{error}}", - "sidebar.error.unknown": "Unbekannter Fehler", - "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "Bei der JVM-Provider-Prüfung ist eine Ausnahme aufgetreten: {{error}}. Der Einstieg für die Diagnoseerweiterung bleibt verfügbar.", - "sidebar.message.jvm_provider_probe_exception": "Prüfung der JVM-Anbieter fehlgeschlagen: {{error}}", - "sidebar.message.connection_failed": "Verbindung fehlgeschlagen: {{error}}", - "sidebar.message.load_jvm_resources_failed": "JVM-Ressourcen konnten nicht geladen werden: {{error}}", - "sidebar.message.load_tables_failed": "Objekte konnten nicht geladen werden: {{error}}", - "sidebar.message.table_pinned": "Tabelle angeheftet", - "sidebar.message.table_unpinned": "Tabellenfixierung aufgehoben", - "sidebar.message.table_structure_copied": "Tabellenstruktur kopiert.", - "sidebar.message.exporting_table_format": "{{table}} wird als {{format}} exportiert...", - "sidebar.message.export_success": "Export erfolgreich.", - "sidebar.message.export_failed": "Export fehlgeschlagen: {{error}}", - "sidebar.message.backing_up_database": "Datenbank {{database}} wird gesichert...", - "sidebar.message.exporting_database_schema": "Datenbankstruktur {{database}} wird exportiert...", - "sidebar.message.exporting_database_backup": "{{database}} wird gesichert (Struktur und Daten)...", - "sidebar.message.schema_export_target_missing": "Das Ziel-Schema wurde nicht gefunden. Der Export kann nicht fortgesetzt werden.", - "sidebar.message.exporting_schema_structure": "Struktur von Schema {{schema}} wird exportiert...", - "sidebar.message.exporting_schema_backup": "Schema {{schema}} wird gesichert (Struktur und Daten)...", - "sidebar.message.export_tables_same_database_required": "Wählen Sie Tabellen aus derselben Datenbank aus.", - "sidebar.message.backing_up_selected_tables": "Ausgewählte Tabellen werden gesichert: {{count}}...", - "sidebar.message.exporting_selected_table_schema": "Struktur der ausgewählten Tabellen wird exportiert: {{count}}...", - "sidebar.message.load_database_list_failed": "Datenbanken konnten nicht geladen werden: {{error}}", - "sidebar.message.load_table_list_failed": "Tabellen konnten nicht geladen werden: {{error}}", - "sidebar.message.locate_external_sql_file_not_found": "SQL-Datei wurde in den externen SQL-Verzeichnissen nicht gefunden: {{path}}", - "sidebar.message.locate_connection_not_found_for_object": "Die Verbindung für das aktuelle Objekt wurde nicht gefunden", - "sidebar.message.locate_connection_not_in_tree": "Die aktuelle Verbindung wurde im linken Baum nicht gefunden", - "sidebar.message.locate_database_loading": "Der Datenbankknoten wird noch geladen: {{database}}. Bitte später erneut versuchen", - "sidebar.message.locate_database_not_found": "Die Datenbank wurde im linken Baum nicht gefunden: {{database}}", - "sidebar.message.locate_object_loading": "Die Datenbankobjekte für {{object}} in {{database}} werden noch geladen. Bitte später erneut versuchen", - "sidebar.message.locate_object_not_found": "{{object}} wurde im linken Baum nicht gefunden: {{name}}. Bitte den Datenbankknoten aktualisieren und erneut versuchen", - "sidebar.message.select_object_required": "Wählen Sie mindestens ein Objekt aus.", - "sidebar.message.backing_up_selected_objects": "Ausgewählte Objekte werden gesichert: {{count}}...", - "sidebar.message.exporting_selected_object_data": "{{format}}-Daten von {{count}} ausgewählten Objekten werden exportiert...", - "sidebar.message.exporting_selected_object_schema": "Struktur der ausgewählten Objekte wird exportiert: {{count}}...", - "sidebar.message.export_success_skipped_views": "Export abgeschlossen. {{count}} Ansichten wurden beim Datenexport übersprungen.", - "sidebar.modal.confirm_clear_selected_tables.title": "Ausgewählte Tabellen leeren", - "sidebar.modal.confirm_clear_selected_tables.content": "Daten der ausgewählten Objekte unter {{connection}} / {{database}} leeren? Dies kann nicht rückgängig gemacht werden.", - "sidebar.action.continue": "Fortfahren", - "sidebar.action.cancel": "Abbrechen", - "sidebar.action.delete": "Löschen", - "sidebar.message.clearing_selected_tables": "{{count}} ausgewählte Tabellen werden geleert...", - "sidebar.message.clear_success": "Leeren erfolgreich.", - "sidebar.message.clear_failed": "Leeren fehlgeschlagen: {{error}}", - "sidebar.message.select_database_required": "Wählen Sie mindestens eine Datenbank aus.", - "sidebar.message.database_export_success": "{{database}} wurde exportiert.", - "sidebar.message.database_export_failed": "{{database}} konnte nicht exportiert werden: {{error}}", - "sidebar.message.connection_config_not_found": "Verbindungskonfiguration wurde nicht gefunden.", - "sidebar.sql_file_exec.title": "Externe SQL-Datei ausführen", - "sidebar.message.read_file_failed": "Datei konnte nicht gelesen werden: {{error}}", - "sidebar.message.select_connection_or_database_first": "Wählen Sie zuerst eine Verbindung oder Datenbank aus.", - "sidebar.message.schema_create_unsupported": "Diese Datenbank unterstützt das Erstellen von schema nicht.", - "sidebar.message.schema_target_missing": "Wählen Sie eine Datenbank für das Erstellen von schema aus.", - "sidebar.message.schema_created": "schema wurde erstellt.", - "sidebar.message.operation_create_failed": "Erstellen fehlgeschlagen: {{error}}", - "sidebar.sql_file.default_name": "SQL-Datei", - "sidebar.message.sql_file_context_incomplete": "SQL-Dateikontext unvollständig.", - "sidebar.message.sql_file_path_incomplete": "Der Pfad der SQL-Datei ist unvollständig und kann nicht geöffnet werden.", - "sidebar.message.select_host_before_large_sql_file": "Wählen Sie einen Host aus, bevor Sie eine große SQL-Datei ausführen.", - "sidebar.message.read_sql_file_failed": "SQL-Datei konnte nicht gelesen werden: {{error}}", - "sidebar.message.external_sql_file_parent_missing": "Das Verzeichnis zum Erstellen der SQL-Datei wurde nicht gefunden.", - "sidebar.message.external_sql_file_rename_target_missing": "Die umzubenennende SQL-Datei wurde nicht gefunden.", - "sidebar.message.external_sql_file_delete_target_missing": "Die zu löschende SQL-Datei wurde nicht gefunden.", - "sidebar.message.external_sql_directory_parent_missing": "Der Speicherort zum Erstellen des Verzeichnisses wurde nicht gefunden.", - "sidebar.message.external_sql_directory_rename_target_missing": "Das umzubenennende Verzeichnis wurde nicht gefunden.", - "sidebar.message.external_sql_directory_delete_target_missing": "Das zu löschende SQL-Verzeichnis wurde nicht gefunden.", - "sidebar.message.sql_file_name_required": "Der SQL-Dateiname ist erforderlich.", - "sidebar.message.sql_directory_name_required": "Der Verzeichnisname ist erforderlich.", - "sidebar.message.create_sql_file_failed": "SQL-Datei konnte nicht erstellt werden: {{error}}", - "sidebar.message.sql_file_created": "SQL-Datei erstellt.", - "sidebar.message.rename_sql_file_failed": "SQL-Datei konnte nicht umbenannt werden: {{error}}", - "sidebar.message.sql_file_renamed": "SQL-Datei umbenannt.", - "sidebar.message.delete_sql_file_failed": "SQL-Datei konnte nicht gelöscht werden: {{error}}", - "sidebar.message.sql_file_deleted": "SQL-Datei gelöscht.", - "sidebar.message.create_sql_directory_failed": "Verzeichnis konnte nicht erstellt werden: {{error}}", - "sidebar.message.sql_directory_created": "Verzeichnis erstellt.", - "sidebar.message.rename_sql_directory_failed": "Verzeichnis konnte nicht umbenannt werden: {{error}}", - "sidebar.message.external_sql_directory_rename_sync_failed": "Das Verzeichnis wurde umbenannt, aber die externe SQL-Verzeichnisliste konnte nicht synchronisiert werden. Fügen Sie das Verzeichnis erneut hinzu.", - "sidebar.message.sql_directory_renamed": "Verzeichnis umbenannt.", - "sidebar.message.delete_sql_directory_failed": "SQL-Verzeichnis konnte nicht gelöscht werden: {{error}}", - "sidebar.message.sql_directory_deleted": "SQL-Verzeichnis gelöscht.", - "sidebar.message.add_sql_directory_database_required": "Wählen Sie eine Datenbank aus, bevor Sie ein SQL-Verzeichnis hinzufügen.", - "sidebar.message.select_sql_directory_failed": "SQL-Verzeichnis konnte nicht ausgewählt werden: {{error}}", - "sidebar.message.sql_directory_path_invalid": "Pfad des SQL-Verzeichnisses ist ungültig.", - "sidebar.sql_directory.default_name": "SQL-Verzeichnis", - "sidebar.message.external_sql_directory_added": "SQL-Verzeichnis hinzugefügt.", - "sidebar.message.external_sql_directory_not_found": "SQL-Verzeichnis wurde nicht gefunden.", - "sidebar.message.external_sql_directory_removed": "SQL-Verzeichnis entfernt.", - "sidebar.message.external_sql_directory_context_missing": "Kontext des SQL-Verzeichnisses fehlt.", - "sidebar.message.external_sql_directory_refreshed": "SQL-Verzeichnis aktualisiert.", - "sidebar.message.database_created": "Datenbank erstellt.", - "sidebar.message.create_failed": "Erstellen fehlgeschlagen: {{error}}", - "sidebar.modal.confirm_delete_database.title": "Datenbank löschen", - "sidebar.modal.confirm_delete_database.content": "{{name}} löschen? Dies kann nicht rückgängig gemacht werden.", - "sidebar.modal.confirm_delete_sql_file.title": "SQL-Datei löschen", - "sidebar.modal.confirm_delete_sql_file.content": "\"{{name}}\" löschen? Dadurch wird die lokale Datei vom Datenträger gelöscht und kann nicht wiederhergestellt werden.", - "sidebar.modal.confirm_delete_sql_directory.title": "SQL-Verzeichnis löschen", - "sidebar.modal.confirm_delete_sql_directory.content": "\"{{name}}\" löschen? Dadurch wird das lokale Verzeichnis vom Datenträger gelöscht; es können nur leere Verzeichnisse gelöscht werden.", - "sidebar.modal.confirm_delete_table.title": "Tabelle löschen", - "sidebar.modal.confirm_delete_table.content": "{{name}} löschen? Dies kann nicht rückgängig gemacht werden.", - "sidebar.modal.confirm_table_data_action.title": "{{action}} bestätigen", - "sidebar.modal.confirm_table_data_action.content": "{{action}} für {{table}} ausführen? Dies kann nicht rückgängig gemacht werden.", - "sidebar.modal.confirm_delete_view.title": "Ansicht löschen", - "sidebar.modal.confirm_delete_view.content": "{{name}} löschen? Dies kann nicht rückgängig gemacht werden.", - "sidebar.modal.confirm_delete_routine.title": "{{type}} löschen", - "sidebar.modal.confirm_delete_routine.content": "{{type}} {{name}} löschen? Dies kann nicht rückgängig gemacht werden.", - "sidebar.search.scope.smart": "Intelligent", - "sidebar.search.scope_title": "Suchbereich", - "sidebar.search.scope_description": "Wählen Sie, wo die Suche in der Seitenleiste Treffer finden soll.", - "sidebar.badge.recommended": "Empfohlen", - "sidebar.search.scope.smart_description": "Grenzt die Suche anhand des ausgewählten Knotens automatisch ein.", - "sidebar.search.manual_scope": "Manueller Bereich", - "sidebar.search.multi_select_supported": "Mehrere Bereiche unterstützt", - "sidebar.search.scope_hint": "Im intelligenten Modus werden je nach Kontext Namen, Hosts, Datenbanken und Objekte durchsucht.", - "sidebar.modal.confirm_delete.title": "Löschen bestätigen", - "sidebar.modal.confirm_delete_tag.content": "Gruppe \"{{name}}\" löschen? Die enthaltenen Verbindungen werden nicht gelöscht.", - "sidebar.menu.edit_connection": "Verbindung bearbeiten", - "sidebar.menu.delete_connection": "Verbindung löschen", - "sidebar.modal.confirm_delete_connection.content": "{{name}} löschen?", - "sidebar.message.delete_connection_backend_unavailable": "Verbindungen können in diesem Build nicht gelöscht werden.", - "sidebar.message.connection_deleted": "Verbindung gelöscht.", - "sidebar.message.delete_connection_failed": "Verbindung konnte nicht gelöscht werden.", - "sidebar.modal.confirm_delete_saved_query.content": "Gespeicherte Abfrage \"{{name}}\" löschen? Diese Aktion kann nicht rückgängig gemacht werden.", - "sidebar.search.placeholder": "Suchen...", - "sidebar.punctuation.list_separator": ", ", - "sidebar.command_search.label": "Tabellen, Verbindungen, Aktionen suchen", - "sidebar.command_search.placeholder": "Tabellen, Verbindungen, Aktionen suchen... oder KI fragen", - "sidebar.command_search.sync_to_filter_tooltip": "Eingabe mit dem linken Filter synchronisieren", - "sidebar.command_search.sync_to_filter_aria": "Mit linkem Filter synchronisieren", - "sidebar.command_search.reset_filter": "Seitenleistenfilter zurücksetzen", - "sidebar.command_search.no_synced_filter": "Kein synchronisierter Seitenleistenfilter", - "sidebar.command_search.no_filter_content": "Kein Filtertext", - "sidebar.command_search.object_kind.all": "Alle", - "sidebar.command_search.object_kind.tables": "Tabellen", - "sidebar.command_search.object_kind.views": "Sichten", - "sidebar.command_search.object_kind.routines": "Routinen", - "sidebar.command_search.object_kind.events": "Ereignisse", - "sidebar.command_search.object_kind.filter_aria": "Objektfilter", - "sidebar.command_search.scope.smart": "Smart", - "sidebar.command_search.scope.object": "Tabellenobjekte", - "sidebar.command_search.scope.database": "Datenbank", - "sidebar.command_search.scope.host": "Host", - "sidebar.command_search.scope.tag": "Tags", - "sidebar.command_search.scope.summary_smart": "Smart", - "sidebar.command_search.scope.title": "Suchbereich", - "sidebar.command_search.scope.description": "\"Smart\" wählt automatisch die wahrscheinlichsten Treffer; im manuellen Modus lassen sich Filterdimensionen kombinieren.", - "sidebar.command_search.scope.recommended": "Empfohlen", - "sidebar.command_search.scope.smart_help": "Geeignet für die tägliche Suche; deckt automatisch häufige Dimensionen wie Namen, Datenbanken, Host und Tags ab.", - "sidebar.command_search.scope.manual_title": "Manueller Bereich", - "sidebar.command_search.scope.multi_select": "Mehrfachauswahl unterstützt", - "sidebar.command_search.scope.manual_help": "Smart schließt andere Optionen aus. Wenn klar ist, ob nach Objekten, Datenbanken, Host oder Tags gesucht werden soll, reduziert der manuelle Bereich störende Treffer.", - "sidebar.command_search.scope.tooltip": "Suchbereich: {{scope}}", - "sidebar.command_search.scope.compact_smart": "Smart", - "sidebar.search.scope_tooltip": "Aktueller Suchbereich: {{scope}}", - "sidebar.search.scope.smart_short": "Intelligent", - "sidebar.rail.object_actions": "Schnellaktionen im Objektbereich", - "sidebar.rail.system_actions": "Systemaktionen", - "sidebar.action.new_group": "Neue Gruppe", - "sidebar.action.batch_tables": "Tabellen stapelweise bearbeiten", - "sidebar.action.batch_databases": "Datenbanken stapelweise bearbeiten", - "sidebar.action.locate_current_table": "Aktuell geöffnete Tabelle lokalisieren", - "sidebar.action.pin_table": "Tabelle anheften", - "sidebar.action.unpin_table": "Anheften aufheben", - "sidebar.status.pinned": "Angeheftet", - "sidebar.v2_table_menu.meta.rows_empty": "— Zeilen", - "sidebar.v2_table_menu.meta.rows": "{{count}} Zeilen", - "sidebar.v2_table_menu.meta.idle": "Zum Laden der Statistiken auf Aktualisieren klicken", - "sidebar.v2_table_menu.meta.loading": "Tabellenstatistiken werden geladen...", - "sidebar.v2_table_menu.meta.unavailable": "Tabellenstatistiken nicht verfügbar", - "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} Daten · {{indexes}} Indizes", - "sidebar.v2_table_menu.open_data": "Daten anzeigen", - "sidebar.v2_table_menu.design_table_detail": "Spalten / Indizes / Fremdschlüssel", - "sidebar.v2_table_menu.open_in_new_tab": "In neuem Tab öffnen", - "sidebar.v2_table_menu.metadata_section": "Metadaten", - "sidebar.v2_table_menu.view_in_er": "Im ER-Diagramm anzeigen", - "sidebar.v2_table_menu.copy_section": "Kopieren", - "sidebar.v2_table_menu.copy_table_name": "Tabellennamen kopieren", - "sidebar.copy_object_name.label.table": "Tabellenname", - "sidebar.copy_object_name.label.view": "Ansichtsname", - "sidebar.copy_object_name.label.materialized_view": "Name der materialisierten Ansicht", - "sidebar.copy_object_name.label.event": "Ereignisname", - "sidebar.copy_object_name.empty": "{{label}} ist leer und kann nicht kopiert werden", - "sidebar.copy_object_name.copied": "{{label}} wurde in die Zwischenablage kopiert", - "sidebar.copy_object_name.failed": "{{label}} konnte nicht kopiert werden: {{error}}", - "sidebar.v2_table_menu.copy_table_as_insert": "Gesamte Tabelle als {{keyword}} kopieren", - "sidebar.v2_table_menu.maintenance_section": "Wartung", - "sidebar.v2_table_menu.rename_compact": "Umbenennen...", - "sidebar.v2_table_menu.new_rollup": "Neues {{keyword}}", - "sidebar.v2_table_menu.backup_sql_dump": "Backup · {{keyword}}", - "sidebar.v2_table_menu.refresh_stats": "Statistiken aktualisieren", - "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", - "sidebar.v2_table_menu.open_export_workbench": "Export-Workbench öffnen...", - "sidebar.v2_table_menu.truncate_table": "Tabelle abschneiden", - "sidebar.v2_table_menu.ai_explain_table": "Mit AI diese Tabelle erklären", - "sidebar.v2_table_menu.ai_generate_query": "Mit AI eine Abfrage erzeugen", - "sidebar.v2_table_group_menu.title": "Tabellen", - "sidebar.v2_table_group_menu.current_database": "Aktuelle Datenbank", - "sidebar.v2_table_group_menu.sort_name": "Name", - "sidebar.v2_table_group_menu.sort_frequency": "Nutzungshäufigkeit", - "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} Tabellen · nach {{sort}} sortiert", - "sidebar.message.locate_current_table_unavailable": "Im aktuellen Tab gibt es keine lokalisierbare Tabelle", - "sidebar.locate.object.table": "Tabelle", - "sidebar.locate.object.view": "Ansicht", - "sidebar.locate.object.materialized_view": "Materialisierte Ansicht", - "sidebar.locate.object.routine": "Funktion/Prozedur", - "sidebar.locate.object.trigger": "Trigger", - "sidebar.active_connection.current_host_database": "Aktueller Host und Datenbank", - "sidebar.active_connection.no_database_selected": "Keine Datenbank ausgewählt", - "sidebar.active_connection.no_host_selected": "Kein Host ausgewählt", - "sidebar.active_connection.actions": "Verbindungsaktionen", - "sidebar.modal.tag.edit_title": "Gruppe bearbeiten", - "sidebar.modal.tag.create_title": "Gruppe erstellen", - "sidebar.modal.tag.edit_description": "Gruppenname und enthaltene Verbindungen aktualisieren.", - "sidebar.modal.tag.create_description": "Eine Gruppe zum Organisieren von Verbindungen erstellen.", - "sidebar.field.tag_name": "Gruppenname", - "sidebar.validation.tag_name_required": "Geben Sie einen Gruppennamen ein.", - "sidebar.placeholder.tag_name": "Gruppenname", - "sidebar.field.select_connections": "Verbindungen auswählen", - "sidebar.modal.create_database.title": "Datenbank erstellen", - "sidebar.field.database_name": "Datenbankname", - "sidebar.validation.name_required": "Geben Sie einen Namen ein.", - "sidebar.modal.rename_database.title": "Datenbank umbenennen: {{name}}", - "sidebar.field.new_database_name": "Neuer Datenbankname", - "sidebar.validation.new_database_name_required": "Geben Sie den neuen Datenbanknamen ein.", - "sidebar.field.schema_name": "schema-Name", - "sidebar.validation.schema_name_required": "Geben Sie den schema-Namen ein.", - "sidebar.modal.rename_table.title": "Tabelle umbenennen: {{name}}", - "sidebar.field.new_table_name": "Neuer Tabellenname", - "sidebar.validation.new_table_name_required": "Geben Sie den neuen Tabellennamen ein.", - "sidebar.modal.rename_view.title": "Ansicht umbenennen: {{name}}", - "sidebar.field.new_view_name": "Neuer Ansichtsname", - "sidebar.validation.new_view_name_required": "Geben Sie den neuen Ansichtsnamen ein.", - "sidebar.modal.batch_tables.title": "Tabellen stapelweise bearbeiten", - "sidebar.modal.batch_tables.description": "Tabellen und Ansichten auswählen und in einem Schritt exportieren oder leeren.", - "sidebar.action.clear_tables": "Tabellen leeren", - "sidebar.action.export_schema": "Struktur exportieren", - "sidebar.action.export_data_only": "Nur Daten exportieren", - "sidebar.action.backup_schema_data": "Struktur und Daten sichern", - "sidebar.field.select_connection": "Verbindung auswählen", - "sidebar.placeholder.select_connection": "Verbindung auswählen", - "sidebar.field.select_database": "Datenbank auswählen", - "sidebar.placeholder.select_connection_first": "Zuerst eine Verbindung auswählen", - "sidebar.modal.batch_tables.selection_hint": "Wählen Sie die Tabellen oder Ansichten für diesen Batch aus.", - "sidebar.placeholder.filter_table_view": "Tabellen und Ansichten filtern", - "sidebar.filter.all_objects": "Alle Objekte", - "sidebar.filter.tables_only": "Nur Tabellen", - "sidebar.filter.views_only": "Nur Ansichten", - "sidebar.filter.scope_filtered": "Gefilterte Ergebnisse", - "sidebar.filter.scope_all": "Alle Ergebnisse", - "sidebar.batch.filtered_count": "{{filtered}} / {{total}} Objekte angezeigt", - "sidebar.action.select_all": "Alle auswählen", - "sidebar.action.clear_selection": "Auswahl aufheben", - "sidebar.action.invert_selection": "Auswahl umkehren", - "sidebar.batch.selected_objects": "{{selected}} / {{total}} Objekte ausgewählt", - "sidebar.modal.batch_databases.title": "Datenbanken stapelweise bearbeiten", - "sidebar.modal.batch_databases.description": "Datenbanken auswählen und Schemas oder vollständige Backups exportieren.", - "sidebar.action.export_database_schema_count": "Datenbankstruktur exportieren ({{count}})", - "sidebar.action.backup_database_count": "Datenbanken sichern ({{count}})", - "sidebar.modal.batch_databases.selection_hint": "Wählen Sie Datenbanken aus der ausgewählten Verbindung aus.", - "sidebar.batch.selected_databases": "{{selected}} / {{total}} Datenbanken ausgewählt", - "sidebar.sql_file_exec.cancel": "Ausführung abbrechen", - "sidebar.action.close": "Schließen", - "sidebar.sql_file_exec.file_size": "Dateigröße: ", - "sidebar.sql_file_exec.status_label": "Status: ", - "sidebar.sql_file_exec.status.running": "Wird ausgeführt", - "sidebar.sql_file_exec.status.done": "Abgeschlossen", - "sidebar.sql_file_exec.status.cancelled": "Abgebrochen", - "sidebar.sql_file_exec.status.error": "Fehler", - "sidebar.sql_file_exec.executed_label": "Ausgeführt: ", - "sidebar.sql_file_exec.rows_separator": " Zeilen | Fehlgeschlagen: ", - "sidebar.sql_file_exec.rows_suffix": " Zeilen", - "connection_modal.config_section.identity.title": "Identität", - "connection_modal.config_section.identity.description": "Identität konfigurieren.", - "connection_modal.config_section.uri.title": "Verbindungs-URI", - "connection_modal.config_section.uri.description": "Verbindungs-URI eingeben, erzeugen oder einlesen.", - "connection_modal.config_section.target.title": "Zieladresse", - "connection_modal.config_section.target.description": "Zieladresse konfigurieren.", - "connection_modal.config_section.fileTarget.title": "Dateidatenbank", - "connection_modal.config_section.fileTarget.description": "Dateidatenbank konfigurieren.", - "connection_modal.config_section.connectionMode.title": "Verbindungsmodus", - "connection_modal.config_section.connectionMode.description": "Verbindungsmodus konfigurieren.", - "connection_modal.config_section.mongoDiscovery.title": "MongoDB-Erkennung", - "connection_modal.config_section.mongoDiscovery.description": "MongoDB-Erkennung konfigurieren.", - "connection_modal.config_section.replica.title": "Replikatknoten", - "connection_modal.config_section.replica.description": "Replikatknoten konfigurieren.", - "connection_modal.config_section.service.title": "Dienst und Datenbank", - "connection_modal.config_section.service.description": "Dienst und Datenbank konfigurieren.", - "connection_modal.config_section.mongoPolicy.title": "MongoDB-Richtlinie", - "connection_modal.config_section.mongoPolicy.description": "MongoDB-Richtlinie konfigurieren.", - "connection_modal.config_section.credentials.title": "Anmeldedaten", - "connection_modal.config_section.credentials.description": "Anmeldedaten konfigurieren.", - "connection_modal.config_section.databaseScope.title": "Datenbankbereich", - "connection_modal.config_section.databaseScope.description": "Datenbankbereich konfigurieren.", - "connection_modal.config_section.customDriver.title": "Benutzerdefinierter Treiber", - "connection_modal.config_section.customDriver.description": "Benutzerdefinierter Treiber konfigurieren.", - "connection_modal.config_section.customDsn.title": "Benutzerdefinierter DSN", - "connection_modal.config_section.customDsn.description": "Benutzerdefinierter DSN konfigurieren.", - "connection_modal.config_section.jvmRuntime.title": "JVM-Laufzeit", - "connection_modal.config_section.jvmRuntime.description": "JVM-Laufzeit konfigurieren.", - "connection_modal.field.password": "Passwort", - "sidebar.menu.refresh": "Aktualisieren", - "sidebar.search.scope.object": "Objekt", - "sidebar.search.scope.database": "Datenbank", - "sidebar.search.scope.host": "Rechner", - "sidebar.search.scope.tag": "Markierung", - "sidebar.tree.saved_queries": "Gespeicherte Abfragen", - "sidebar.tree.untitled_query": "Unbenannte Abfrage", - "sidebar.tree.default_database": "Standarddatenbank", - "sidebar.tree.unknown_connection": "Unbekannte Verbindung", - "sidebar.tree.unmatched_saved_queries": "Nicht zugeordnet", - "sidebar.tree.all_saved_queries": "Alle gespeicherten Abfragen", - "sidebar.tree.default_schema": "Standardschema", - "sidebar.object_group.tables": "Tabellen", - "sidebar.object_group.views": "Ansichten", - "sidebar.object_group.routines": "Funktionen und Prozeduren", - "sidebar.object_group.triggers": "Trigger", - "sidebar.object_group.events": "Ereignisse", - "sidebar.object_group.materialized_views": "Materialisierte Ansichten", - "sidebar.table_folder.columns": "Spalten", - "sidebar.table_folder.indexes": "Indizes", - "sidebar.table_folder.foreign_keys": "Fremdschlüssel", - "sidebar.table_folder.triggers": "Trigger", - "sidebar.object.view": "Ansicht", - "sidebar.object.function": "Funktion", - "sidebar.object.procedure": "Prozedur", - "sidebar.table_action.truncate.label": "Tabelle leeren", - "sidebar.table_action.truncate.progress": "Wird geleert", - "sidebar.table_action.clear.label": "Tabellendaten löschen", - "sidebar.table_action.clear.progress": "Wird gelöscht", - "sidebar.tab.table_structure": "Tabellenstruktur ({{table}})", - "sidebar.tab.design_table": "Tabelle entwerfen ({{table}})", - "sidebar.tab.new_table": "Neue Tabelle - {{database}}", - "sidebar.tab.table_overview": "Tabellenübersicht - {{database}}{{schema}}", - "sidebar.tab.trigger": "Trigger: {{name}}", - "sidebar.tab.event": "Ereignis: {{name}}", - "sidebar.tab.edit_event": "Ereignis bearbeiten: {{name}}", - "sidebar.tab.materialized_view_definition": "Materialisierte Ansicht: {{name}}", - "sidebar.tab.view_definition": "Ansicht: {{name}}", - "sidebar.tab.edit_view": "Ansicht bearbeiten: {{name}}", - "sidebar.tab.create_view": "Neue Ansicht", - "sidebar.tab.routine_definition": "{{type}}: {{name}}", - "sidebar.tab.edit_routine": "{{type}} bearbeiten: {{name}}", - "sidebar.tab.create_function": "Neue Funktion", - "sidebar.tab.create_procedure": "Neue Prozedur", - "sidebar.tab.new_query": "Neue Abfrage", - "sidebar.tab.new_query_database": "Neue Abfrage ({{database}})", - "sidebar.tab.redis_command": "Befehl - {{database}}", - "sidebar.tab.redis_monitor": "Monitoring - {{database}}", - "tab_manager.menu.close_all": "Alle Tabs schließen", - "tab_manager.menu.close_left": "Tabs links schließen", - "tab_manager.menu.close_other": "Andere Tabs schließen", - "tab_manager.menu.close_right": "Tabs rechts schließen", - "tab_manager.close_aria": "{{title}} schließen", - "tab_manager.kind_badge.query": "SQL", - "tab_manager.kind_badge.table": "Tabelle", - "tab_manager.kind_badge.design": "Design", - "tab_manager.kind_badge.table_overview": "DB", - "tab_manager.kind_badge.redis": "Redis", - "tab_manager.kind_badge.jvm": "JVM", - "tab_manager.kind_badge.trigger": "Trigger", - "tab_manager.kind_badge.materialized_view": "MV", - "tab_manager.kind_badge.view": "Ansicht", - "tab_manager.kind_badge.event": "Ereignis", - "tab_manager.kind_badge.routine": "Funktion", - "tab_manager.kind_badge.table_export": "Export", - "tab_manager.kind_badge.sql_analysis": "Analyse", - "tab_manager.kind_badge.fallback": "Tab", - "tab_manager.empty.action.open_ai": "AI öffnen", - "tab_manager.empty.aria.start_workbench": "GoNavi-Startarbeitsbereich", - "tab_manager.empty.eyebrow.connections": "{{count}} Verbindungen", - "tab_manager.empty.eyebrow.workbench": "ARBEITSBEREICH", - "tab_manager.empty.hero.description": "Wählen Sie eine Datenquelle, öffnen Sie den Abfrageeditor oder arbeiten Sie mit Kontext im AI-Panel weiter.", - "tab_manager.empty.hero.title": "Verbindungen, Abfragen und Analysen beginnen in einem Arbeitsbereich.", - "tab_manager.empty.quick.ai_assist.description": "SQL erklären, Abfragen generieren und Ergebnisse prüfen", - "tab_manager.empty.quick.ai_assist.title": "AI-Unterstützung öffnen", - "tab_manager.empty.quick.aria": "Schneller Workflow", - "tab_manager.empty.quick.configure_source.description": "URI, SSH, Proxy und Treiber zentral festlegen", - "tab_manager.empty.quick.configure_source.title": "Datenquelle konfigurieren", - "tab_manager.empty.quick.heading": "Schneller Workflow", - "tab_manager.empty.quick.sql_workspace.description": "Abfrageeditor mit aktuellem Kontext öffnen", - "tab_manager.empty.quick.sql_workspace.title": "SQL-Arbeitsbereich starten", - "tab_manager.hover.fallback.database_not_specified": "Nicht angegeben", - "tab_manager.hover.fallback.host_not_configured": "Nicht konfiguriert", - "tab_manager.hover.fallback.unbound_connection": "Nicht gebundene Verbindung", - "tab_manager.hover.kind.design": "Tabellendesign", - "tab_manager.hover.kind.event": "Ereignis", - "tab_manager.hover.kind.fallback": "Tab", - "tab_manager.hover.kind.jvm_audit": "JVM-Audit", - "tab_manager.hover.kind.jvm_diagnostic": "JVM-Diagnose", - "tab_manager.hover.kind.jvm_monitoring": "JVM-Monitoring", - "tab_manager.hover.kind.jvm_overview": "JVM-Übersicht", - "tab_manager.hover.kind.jvm_resource": "JVM-Ressource", - "tab_manager.hover.kind.materialized_view": "Materialisierte Ansicht", - "tab_manager.hover.kind.query": "SQL-Abfrage", - "tab_manager.hover.kind.redis_command": "Redis-Befehl", - "tab_manager.hover.kind.redis_keys": "Redis Key", - "tab_manager.hover.kind.redis_monitor": "Redis-Monitor", - "tab_manager.hover.kind.routine": "Funktion / Prozedur", - "tab_manager.hover.kind.table": "Tabellendaten", - "tab_manager.hover.kind.table_export": "Export-Workbench", - "tab_manager.hover.kind.sql_analysis": "SQL-Analyse-Workbench", - "tab_manager.hover.kind.table_overview": "Tabellenübersicht", - "tab_manager.hover.kind.trigger": "Trigger", - "tab_manager.hover.kind.view": "Ansicht", - "tab_manager.hover.label.connection": "Verbindung", - "tab_manager.hover.label.database": "Datenbank", - "tab_manager.hover.label.object": "Objekt", - "tab_manager.hover.label.type": "Typ", - "sidebar.message.no_visible_databases": "Es wurden keine sichtbaren Datenbanken oder Schemas zurückgegeben. Prüfen Sie die Berechtigungen oder aktualisieren Sie über das Kontextmenü.", - "sidebar.message.visual_new_table_unsupported": "Diese Datenquelle unterstützt das visuelle Erstellen von Tabellen noch nicht.", - "sidebar.message.jvm_resources_backend_unavailable": "JVM-Ressourcen können in diesem Build nicht durchsucht werden.", - "sidebar.message.external_sql_directory_read_failed": "SQL-Verzeichnis {{name}} konnte nicht gelesen werden: {{error}}", - "sidebar.message.sphinx_unsupported_objects": "Diese Sphinx-Instanz stellt diese Objektfunktionen nicht bereit: {{objects}}. Der Kompatibilitätsmodus wurde angewendet.", - "sidebar.message.sidebar_filter_sync_enabled": "Synchronisierung des linken Filters aktiviert.", - "sidebar.message.sidebar_filter_sync_disabled": "Synchronisierung des linken Filters deaktiviert.", - "sidebar.message.sidebar_filter_reset": "Seitenleistenfilter zurückgesetzt.", - "sidebar.message.database_name_required": "Datenbankname ist erforderlich.", - "sidebar.message.database_name_unchanged": "Datenbankname ist unverändert.", - "sidebar.message.database_renamed": "Datenbank umbenannt.", - "sidebar.message.database_deleted": "Datenbank gelöscht.", - "sidebar.message.table_name_required": "Tabellenname ist erforderlich.", - "sidebar.message.table_name_unchanged": "Tabellenname ist unverändert.", - "sidebar.message.table_renamed": "Tabelle umbenannt.", - "sidebar.message.table_deleted": "Tabelle gelöscht.", - "sidebar.message.view_name_required": "Ansichtsname ist erforderlich.", - "sidebar.message.view_name_unchanged": "Ansichtsname ist unverändert.", - "sidebar.message.view_deleted": "Ansicht gelöscht.", - "sidebar.message.view_renamed": "Ansicht umbenannt.", - "sidebar.message.routine_deleted": "{{type}} gelöscht.", - "sidebar.message.rename_failed": "Umbenennen fehlgeschlagen: {{error}}", - "sidebar.message.delete_failed": "Löschen fehlgeschlagen: {{error}}", - "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", - "sidebar.message.table_data_action_success": "{{action}} abgeschlossen.", - "sidebar.message.table_data_action_failed": "{{action}} fehlgeschlagen: {{error}}", - "sidebar.message.disconnected": "Getrennt.", - "sidebar.message.database_closed": "Datenbank geschlossen.", - "sidebar.message.saved_query_deleted": "Abfrage gelöscht.", - "sidebar.message.saved_query_name_unchanged": "Der Abfragename ist unverändert.", - "sidebar.message.saved_query_renamed": "Abfrage umbenannt.", - "sidebar.menu.sort_by_name": "Sortieren nach Name", - "sidebar.menu.sort_by_frequency": "Sortieren nach Häufigkeit", - "sidebar.menu.create_view": "Neue Ansicht", - "sidebar.menu.create_function": "Neue Funktion", - "sidebar.menu.create_procedure": "Neue Prozedur", - "sidebar.menu.edit_tag": "Gruppe bearbeiten", - "sidebar.menu.delete_tag": "Gruppe löschen", - "sidebar.menu.new_command_window": "Neues Befehlsfenster", - "sidebar.menu.redis_monitor": "Redis Überwachung", - "sidebar.menu.duplicate_connection": "Verbindung duplizieren", - "sidebar.menu.disconnect": "Trennen", - "sidebar.menu.move_out_of_tag": "Aus Gruppe entfernen", - "sidebar.menu.create_database": "Neue Datenbank", - "sidebar.menu.new_query": "Neue Abfrage", - "sidebar.menu.move_to_tag": "In Gruppe verschieben", - "sidebar.menu.browse_keys": "Schlüssel durchsuchen", - "sidebar.menu.create_table": "Neue Tabelle", - "sidebar.menu.rename_database": "Datenbank umbenennen", - "sidebar.menu.danger_operations": "Gefährliche Operationen", - "sidebar.menu.delete_database": "Datenbank löschen", - "sidebar.menu.export_all_table_schema_sql": "Schemas aller Tabellen als SQL exportieren", - "sidebar.menu.backup_all_tables_sql": "Alle Tabellen sichern (Schema + Daten-SQL)", - "sidebar.menu.close_database": "Datenbank schließen", - "sidebar.menu.browse_view_data": "Ansichtsdaten durchsuchen", - "sidebar.menu.view_definition": "Ansichtsdefinition", - "sidebar.menu.browse_materialized_view_data": "Daten der materialisierten Ansicht durchsuchen", - "sidebar.menu.materialized_view_definition": "Definition der materialisierten Ansicht", - "sidebar.menu.view_object_definition": "Definition anzeigen", - "sidebar.menu.edit_view": "Ansicht bearbeiten", - "sidebar.menu.rename_view": "Ansicht umbenennen", - "sidebar.menu.delete_view": "Ansicht löschen", - "sidebar.menu.view_routine_definition": "Definition anzeigen", - "sidebar.menu.edit_definition": "Definition bearbeiten", - "sidebar.menu.delete_routine": "{{type}} löschen", - "sidebar.menu.design_table": "Tabelle entwerfen", - "sidebar.menu.copy_table_structure": "Tabellenstruktur kopieren", - "sidebar.menu.backup_table_sql": "Tabelle sichern (SQL)", - "sidebar.menu.rename_table": "Tabelle umbenennen", - "sidebar.menu.truncate_table": "Tabelle abschneiden", - "sidebar.menu.clear_table": "Tabelle leeren", - "sidebar.menu.delete_table": "Tabelle löschen", - "sidebar.menu.export_table_data": "Tabellendaten exportieren", - "sidebar.menu.export_csv": "Als CSV exportieren", - "sidebar.menu.export_xlsx": "Als XLSX exportieren", - "sidebar.menu.export_json": "Als JSON exportieren", - "sidebar.menu.export_markdown": "Als Markdown exportieren", - "sidebar.menu.export_html": "Als HTML exportieren", - "sidebar.menu.open_query": "Abfrage öffnen", - "sidebar.menu.rename_query": "Abfrage umbenennen", - "sidebar.menu.delete_query": "Abfrage löschen", - "sidebar.menu.add_sql_directory": "SQL-Verzeichnis hinzufügen", - "sidebar.menu.refresh_directory": "Verzeichnis aktualisieren", - "sidebar.menu.remove_directory": "Verzeichnis entfernen", - "sidebar.menu.open_sql_file": "SQL-Datei öffnen", - "sidebar.menu.new_sql_file": "Neue SQL-Datei", - "sidebar.menu.new_sql_directory": "Neues Verzeichnis", - "sidebar.menu.rename_sql_directory": "Verzeichnis umbenennen", - "sidebar.menu.delete_local_directory": "Lokales Verzeichnis löschen", - "sidebar.menu.delete_sql_directory": "Verzeichnis löschen", - "sidebar.menu.rename_sql_file": "SQL-Datei umbenennen", - "sidebar.menu.new_sql_file_in_directory": "Neue SQL-Datei in diesem Verzeichnis", - "sidebar.menu.new_sql_directory_in_directory": "Neues Verzeichnis in diesem Verzeichnis", - "sidebar.menu.delete_sql_file": "SQL-Datei löschen", - "sidebar.batch.group.tables": "Tabellen", - "sidebar.batch.group.views": "Ansichten", - "sidebar.batch.no_matching_objects": "Keine passenden Objekte", - "sidebar.sql_template.edit_view": "Ansicht {{name}} bearbeiten", - "sidebar.sql_template.modify_then_execute": "Ändern und ausführen", - "sidebar.sql_template.edit_routine": "{{type}} {{name}} bearbeiten", - "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB unterstützt gespeicherte Prozeduren noch nicht", - "sidebar.sql_template.duckdb_macro_hint": "Verwenden Sie SQL Macro für funktionsähnliches Verhalten", - "connection_modal.network.ssl_mode.preferred": "Bevorzugt", - "connection_modal.network.ssl_mode.required": "Erforderlich", - "connection_modal.network.ssl_mode.skip_verify": "Prüfung überspringen", - "sidebar.external_sql.root": "Externe SQL-Dateien", - "sidebar.external_sql.directory_fallback": "SQL-Verzeichnis", - "sidebar.external_sql_modal.title.create_file": "Neue SQL-Datei", - "sidebar.external_sql_modal.title.rename_file": "SQL-Datei umbenennen", - "sidebar.external_sql_modal.title.create_directory": "Neues Verzeichnis", - "sidebar.external_sql_modal.title.rename_directory": "Verzeichnis umbenennen", - "sidebar.external_sql_modal.action.create": "Erstellen", - "sidebar.external_sql_modal.action.rename": "Umbenennen", - "sidebar.external_sql_modal.field.directory_name": "Verzeichnisname", - "sidebar.external_sql_modal.field.sql_file_name": "SQL-Dateiname", - "sidebar.external_sql_modal.validation.directory_name_required": "Verzeichnisnamen eingeben", - "sidebar.external_sql_modal.validation.sql_file_name_required": "SQL-Dateinamen eingeben", - "sidebar.external_sql_modal.validation.directory_name_no_separator": "Der Verzeichnisname darf keine Pfadtrennzeichen enthalten", - "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "Der Dateiname darf keine Pfadtrennzeichen enthalten", - "sidebar.external_sql_modal.help.directory": "Das Verzeichnis wird nur im externen SQL-Verzeichnisbaum angezeigt; Nicht-SQL-Dateien bleiben ausgeblendet", - "sidebar.external_sql_modal.help.sql_file": "Wenn die Endung .sql fehlt, wird sie automatisch ergänzt", - "sidebar.external_sql_modal.placeholder.directory_name": "z. B. reports", - "sidebar.external_sql_modal.placeholder.sql_file_name": "z. B. report.sql", - "sidebar.jvm.action.monitoring": "Kontinuierliche Überwachung", - "sidebar.jvm.action.diagnostic": "Diagnoseerweiterung", - "sidebar.jvm.tab.overview": "JVM-Überblick", - "sidebar.jvm.tab.resource": "JVM-Ressourcen", - "sidebar.jvm.tab.audit": "JVM-Audit", - "sidebar.jvm.tab.diagnostic": "JVM-Diagnose", - "sidebar.jvm.tab.monitoring": "JVM-Überwachung", - "jvm.backend.message.connect_success": "JVM-Verbindung erfolgreich", - "jvm.backend.error.preview_confirmation_missing": "Bestätigungstoken der Vorschau fehlt. Vorschau vor dem Senden erneut ausführen.", - "jvm.backend.error.confirmation_token_missing": "Bestätigungstoken fehlt. Schließe zuerst die Vorschau-Bestätigung ab.", - "jvm.backend.error.confirmation_token_invalid": "Bestätigungstoken ist ungültig. Vorschau erneut ausführen und bestätigen.", - "jvm.backend.error.confirmation_token_expired": "Bestätigungstoken ist abgelaufen. Vorschau erneut ausführen und bestätigen.", - "jvm.backend.error.preview_context_hash_failed": "JVM-Vorschaukontext konnte nicht erzeugt werden: {{detail}}", - "jvm.backend.error.preview_payload_hash_failed": "JVM-Vorschau-Payload-Digest konnte nicht erzeugt werden: {{detail}}", - "jvm.backend.error.change_blocked_by_guard": "Die aktuelle Änderung wurde von Guard blockiert", - "jvm.backend.error.change_blocked_read_only": "Die aktuelle Verbindung ist schreibgeschützt, daher werden Schreibvorgänge blockiert", - "jvm.backend.error.change_resource_id_required": "JVM-Ressourcen-ID ist erforderlich", - "jvm.backend.error.change_action_required": "JVM-Änderungsaktion ist erforderlich", - "jvm.backend.error.change_reason_required": "JVM-Änderungsgrund ist erforderlich", - "jvm.backend.error.change_confirmation_token_failed": "JVM-Änderungsbestätigungstoken konnte nicht erzeugt werden: {{detail}}", - "jvm.backend.error.disallowed_mode": "Die aktuelle Verbindung erlaubt den Modus {{mode}} nicht", - "jvm.backend.error.resource_path_invalid": "Ungültiger JVM-Ressourcenpfad: {{detail}}", - "jvm.backend.error.audit_write_blocked": "Auditdatensatz konnte nicht geschrieben werden; JVM-Änderung wurde blockiert: {{detail}}", - "jvm.backend.warning.failed_audit_write_failed": "Fehler-Auditdatensatz konnte nicht geschrieben werden: {{detail}}", - "jvm.backend.warning.terminal_audit_write_failed": "Abschluss-Auditdatensatz konnte nicht geschrieben werden: {{detail}}", - "jvm.backend.separator.message_warning": "; ", - "jvm.backend.capability.reason.read_only": "Aktuelle Verbindung ist schreibgeschützt", - "jvm.backend.monitoring.error.snapshot_unsupported": "{{provider}} Überwachungssnapshot wird noch nicht unterstützt", - "jvm.backend.monitoring.error.session_not_found": "JVM-Überwachungssitzung für {{connectionId}} {{providerMode}} nicht gefunden", - "jvm.backend.monitoring.warning.sample_auto_stopped": "Die Monitoring-Abfrage ist {{count}} Mal in Folge fehlgeschlagen; diese Sitzung wurde automatisch beendet", - "jvm.backend.connection_error.suggestion": "Vorschlag: {{detail}}", - "jvm.backend.connection_error.technical_detail": "Technisches Detail: {{detail}}", - "jvm.backend.connection_error.generic": "JVM-Verbindung fehlgeschlagen", - "jvm.backend.connection_error.endpoint.base_url_required": "Endpoint-Verbindung fehlgeschlagen: Endpoint Base URL fehlt.", - "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Endpoint-Verbindung fehlgeschlagen: Endpoint Base URL ist ungültig.", - "jvm.backend.connection_error.endpoint.base_url_invalid.help": "Gib eine vollständige http://- oder https://-URL ein, die auf den Management-API-Stammpfad mit GoNavi JVM HTTP contract zeigt, z. B. http://127.0.0.1:19090/manage/jvm.", - "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Endpoint-Verbindung fehlgeschlagen: nur HTTP oder HTTPS wird unterstützt.", - "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "Ändere Endpoint Base URL auf eine Adresse, die mit http:// oder https:// beginnt.", - "jvm.backend.connection_error.endpoint.not_found.summary": "Endpoint-Verbindung fehlgeschlagen: Das Ziel hat geantwortet, aber die GoNavi JVM-Management-API wurde nicht gefunden.", - "jvm.backend.connection_error.endpoint.not_found.help": "Prüfe, dass Base URL auf den Stamm der JVM-Management-API zeigt und nicht auf Business-Endpoint, Healthcheck oder Gateway-Startseite.", - "jvm.backend.connection_error.endpoint.connection_refused.summary": "Endpoint-Verbindung fehlgeschlagen: Die Ziel-Management-API lauscht nicht oder die Adresse ist nicht erreichbar.", - "jvm.backend.connection_error.endpoint.connection_refused.help": "Prüfe, dass Base URL auf die Management-API mit GoNavi JVM HTTP contract zeigt, und prüfe Dienst-Listener, Port-Mapping und Firewall.", - "jvm.backend.connection_error.endpoint.unauthorized.summary": "Endpoint-Verbindung fehlgeschlagen: Die Ziel-Management-API hat geantwortet, aber der API Key fehlt oder ist ungültig.", - "jvm.backend.connection_error.endpoint.unauthorized.help": "Prüfe, ob der Endpoint API Key in der Verbindung zur Zielservice-Konfiguration passt.", - "jvm.backend.connection_error.endpoint.forbidden.summary": "Endpoint-Verbindung fehlgeschlagen: Die Ziel-Management-API hat diese Anfrage abgelehnt.", - "jvm.backend.connection_error.endpoint.forbidden.help": "Prüfe, ob Client-Quelle, Authentifizierung und Zugriffsrichtlinie GoNavi den Zugriff auf diese Management-API erlauben.", - "jvm.backend.connection_error.endpoint.timeout.summary": "Endpoint-Verbindung fehlgeschlagen: Zugriff auf die Ziel-Management-API ist abgelaufen.", - "jvm.backend.connection_error.endpoint.timeout.help": "Prüfe, ob Base URL erreichbar ist, der Zielservice gestartet ist, und erhöhe bei Bedarf das Verbindungstimeout.", - "jvm.backend.connection_error.agent.base_url_required": "Agent-Verbindung fehlgeschlagen: Agent Base URL fehlt.", - "jvm.backend.connection_error.agent.base_url_invalid.summary": "Agent-Verbindung fehlgeschlagen: Agent Base URL ist ungültig.", - "jvm.backend.connection_error.agent.base_url_invalid.help": "Gib eine vollständige http://- oder https://-URL ein, z. B. http://127.0.0.1:19090/gonavi/agent/jvm.", - "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Agent-Verbindung fehlgeschlagen: nur HTTP oder HTTPS wird unterstützt.", - "jvm.backend.connection_error.agent.scheme_unsupported.help": "Ändere Agent Base URL auf eine Adresse, die mit http:// oder https:// beginnt.", - "jvm.backend.connection_error.agent.connection_refused.summary": "Agent-Verbindung fehlgeschlagen: Der Ziel-Agent-Management-Port lauscht nicht oder die Adresse ist nicht erreichbar.", - "jvm.backend.connection_error.agent.connection_refused.help": "Prüfe, ob der Java-Dienst den GoNavi Agent mit `-javaagent` gestartet hat, und prüfe Base URL, Port-Mapping und Firewall.", - "jvm.backend.connection_error.agent.unauthorized.summary": "Agent-Verbindung fehlgeschlagen: Agent hat geantwortet, aber der API Key fehlt oder ist ungültig.", - "jvm.backend.connection_error.agent.unauthorized.help": "Prüfe, ob der Agent API Key in der Verbindung zu den Startparametern des Zielservices passt.", - "jvm.backend.connection_error.agent.forbidden.summary": "Agent-Verbindung fehlgeschlagen: Agent hat diese Anfrage abgelehnt.", - "jvm.backend.connection_error.agent.forbidden.help": "Prüfe, ob Client-Quelle, Authentifizierung und Agent-Zugriffsrichtlinie GoNavi den Zugriff erlauben.", - "jvm.backend.connection_error.agent.timeout.summary": "Agent-Verbindung fehlgeschlagen: Zugriff auf den Agent-Management-Port ist abgelaufen.", - "jvm.backend.connection_error.agent.timeout.help": "Prüfe, ob die Zieladresse erreichbar ist, der Agent gestartet ist, und erhöhe bei Bedarf das Verbindungstimeout.", - "jvm.backend.connection_error.jmx.host_required": "JMX-Verbindung fehlgeschlagen: Host fehlt.", - "jvm.backend.connection_error.jmx.port_invalid": "JMX-Verbindung fehlgeschlagen: Port ist ungültig. Gib einen gültigen Port von 1 bis 65535 ein.", - "jvm.backend.connection_error.jmx.java_missing.summary": "JMX-Verbindung fehlgeschlagen: Auf diesem Rechner wurde keine `java` runtime gefunden, daher kann GoNavi den JMX helper nicht starten.", - "jvm.backend.connection_error.jmx.java_missing.help": "Installiere zuerst JRE/JDK oder setze die Umgebungsvariable GONAVI_JMX_JAVA_BIN auf die richtige `java`-Datei.", - "jvm.backend.connection_error.jmx.non_jrmp.summary": "JMX-Verbindung fehlgeschlagen: {{target}} ist kein Standardport für JMX remote management; er sieht eher wie ein Business- oder HTTP-Port aus.", - "jvm.backend.connection_error.jmx.non_jrmp.help": "Verwende den tatsächlich von der Anwendung exponierten JMX-Port, nicht den Business-`server.port`. Wenn der Dienst nur `-Dcom.sun.management.jmxremote` aktiviert, aber keinen `jmxremote.port` setzt, ist keine direkte Remote-Verbindung möglich.", - "jvm.backend.connection_error.jmx.no_such_object.summary": "JMX-Verbindung fehlgeschlagen: Auf {{target}} läuft ein RMI-Dienst, aber kein verwendbarer JMX RMIServer-Port.", - "jvm.backend.connection_error.jmx.no_such_object.help": "Das bedeutet meist, dass ein RMI-Registry-Port, Debug-Port oder anderer Java-Service-Port verwendet wurde. Prüfe `jmxremote.port` und `jmxremote.rmi.port`.", - "jvm.backend.connection_error.jmx.connection_reset.summary": "JMX-Verbindung fehlgeschlagen: Der Dienst auf {{target}} hat die Verbindung geschlossen; der Port ist kein kompatibler Standard-JMX-RMI-Port.", - "jvm.backend.connection_error.jmx.connection_reset.help": "Prüfe, ob der konfigurierte Port der exponierte JMX-Port der JVM ist und nicht Business-Port, Debug-Port oder Proxy-Weiterleitung.", - "jvm.backend.connection_error.jmx.connection_refused.summary": "JMX-Verbindung fehlgeschlagen: Verbindung zu {{target}} nicht möglich, weil der Port nicht lauscht oder das Netzwerk nicht erreichbar ist.", - "jvm.backend.connection_error.jmx.connection_refused.help": "Prüfe, ob Remote-JMX auf der Ziel-JVM aktiviert ist, und prüfe Host, Firewall, Port-Mapping, SSH und Proxy.", - "jvm.backend.connection_error.jmx.auth.summary": "JMX-Verbindung fehlgeschlagen: {{target}} erfordert Authentifizierung oder die aktuellen Zugangsdaten sind ungültig.", - "jvm.backend.connection_error.jmx.auth.help": "Prüfe, ob Ziel-JMX Authentifizierung deaktiviert. Falls Authentifizierung erforderlich ist, gib Benutzername und Passwort vor dem Verbinden an.", - "jvm.backend.connection_error.jmx.timeout.summary": "JMX-Verbindung fehlgeschlagen: Verbindung zu {{target}} ist abgelaufen.", - "jvm.backend.connection_error.jmx.timeout.help": "Prüfe, ob der Port erreichbar ist, das Netzwerk nicht blockiert wird, und erhöhe bei Bedarf das Verbindungstimeout.", - "jvm.backend.diagnostic.error.disabled": "JVM-Diagnoseerweiterung ist für diese Verbindung nicht aktiviert", - "jvm.backend.diagnostic.error.session_id_required": "Diagnosesitzungs-ID ist erforderlich. Erstelle zuerst eine Sitzung.", - "jvm.backend.diagnostic.error.command_required": "Diagnosebefehl darf nicht leer sein", - "jvm.backend.diagnostic.error.cancel_identifiers_required": "Abbruchbefehl benötigt sessionId und commandId", - "jvm.backend.diagnostic.error.audit_write_blocked": "Diagnose-Auditdatensatz konnte nicht geschrieben werden; Befehlsausführung wurde blockiert: {{detail}}", - "jvm.backend.diagnostic.error.execute_canceled": "Diagnose-Ausführungsanfrage wurde abgebrochen: {{detail}}", - "jvm.backend.diagnostic.error.transport_unsupported": "Nicht unterstützter JVM-Diagnosetransport: {{transport}}", - "jvm.backend.diagnostic.warning.audit_write_failed": "Auditdatensatz konnte nicht geschrieben werden: {{detail}}", - "jvm.backend.diagnostic.message.command_completed": "Diagnosebefehl abgeschlossen", - "jvm.backend.diagnostic.message.cancel_requested": "Abbruchanfrage gesendet; warte, bis die Diagnose-Bridge den Befehl beendet", - "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas-Befehl abgeschlossen", - "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas-Befehl abgebrochen", - "jvm.backend.diagnostic.policy.observe_not_allowed": "Observe-Diagnosebefehle sind für diese Verbindung nicht aktiviert: {{command}}", - "jvm.backend.diagnostic.policy.trace_not_allowed": "Trace-Diagnosebefehle sind für diese Verbindung nicht aktiviert: {{command}}", - "jvm.backend.diagnostic.policy.mutating_not_allowed": "Hochriskante Diagnosebefehle sind für diese Verbindung nicht aktiviert: {{command}}", - "jvm.backend.diagnostic.policy.read_only_observe_only": "Die aktuelle Verbindung ist schreibgeschützt. Nur Observe-Diagnosebefehle sind erlaubt", - "jvm.backend.diagnostic.policy.multiline_not_supported": "Diagnosebefehl unterstützt keine Zeilenumbrüche oder mehrere Befehle", - "jvm.backend.diagnostic.arthas.base_url_required": "Arthas Tunnel-Adresse ist erforderlich", - "jvm.backend.diagnostic.arthas.base_url_invalid": "Arthas Tunnel-Adresse ist ungültig: {{detail}}", - "jvm.backend.diagnostic.arthas.target_id_required": "Arthas Tunnel target ID ist erforderlich (targetId / agentId)", - "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel unterstützt nur http/https/ws/wss-Adressen: {{scheme}}", - "jvm.backend.diagnostic.arthas.session_missing": "Diagnosesitzung existiert nicht. Erstelle die Arthas Tunnel-Sitzung erneut.", - "jvm.backend.diagnostic.arthas.session_config_changed": "Arthas Tunnel-Sitzungskonfiguration hat sich geändert. Erstelle die Diagnosesitzung erneut.", - "jvm.backend.diagnostic.arthas.command_already_running": "In dieser Arthas Tunnel-Sitzung läuft bereits ein Befehl. Warte auf den Abschluss oder brich ihn zuerst ab.", - "jvm.backend.diagnostic.arthas.no_running_command": "In dieser Arthas Tunnel-Sitzung läuft kein Befehl.", - "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "Der aktive Befehl in dieser Arthas Tunnel-Sitzung stimmt nicht mit dem abzubrechenden Befehl überein.", - "jvm.backend.diagnostic.arthas.connection_not_ready": "Arthas Tunnel-Verbindung ist noch nicht bereit. Versuche es später erneut.", - "jvm.backend.diagnostic.arthas.http_failed": "Arthas Tunnel-Verbindung fehlgeschlagen: HTTP {{status}}", - "jvm.backend.diagnostic.arthas.connect_timeout": "Arthas Tunnel WebSocket-Verbindung hat nach {{timeout}} ohne Antwort eine Zeitüberschreitung erreicht", - "jvm.backend.diagnostic.arthas.connect_canceled": "Arthas Tunnel WebSocket-Verbindung wurde abgebrochen", - "jvm.backend.diagnostic.arthas.connect_failed": "Arthas Tunnel WebSocket-Verbindung fehlgeschlagen: {{detail}}", - "jvm.backend.diagnostic.arthas.request_encode_failed": "Arthas Tunnel-Anfrage konnte nicht codiert werden: {{detail}}", - "jvm.backend.diagnostic.arthas.write_deadline_failed": "Arthas Tunnel-Schreibfrist konnte nicht gesetzt werden: {{detail}}", - "jvm.backend.diagnostic.arthas.send_timeout": "Senden des Arthas Tunnel-Terminalbefehls hat nach {{timeout}} ohne Antwort eine Zeitüberschreitung erreicht", - "jvm.backend.diagnostic.arthas.send_canceled": "Senden des Arthas Tunnel-Terminalbefehls wurde abgebrochen", - "jvm.backend.diagnostic.arthas.send_failed": "Arthas Tunnel-Terminalbefehl konnte nicht gesendet werden: {{detail}}", - "jvm.backend.diagnostic.arthas.read_deadline_failed": "Arthas Tunnel-Lesefrist konnte nicht gesetzt werden: {{detail}}", - "jvm.backend.diagnostic.arthas.read_timeout": "Lesen der Arthas Tunnel-Ausgabe hat nach {{timeout}} ohne Antwort eine Zeitüberschreitung erreicht", - "jvm.backend.diagnostic.arthas.read_canceled": "Lesen der Arthas Tunnel-Ausgabe wurde abgebrochen", - "jvm.backend.diagnostic.arthas.read_failed": "Arthas Tunnel-Ausgabe konnte nicht gelesen werden: {{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed": "Arthas Tunnel-Verbindung wurde geschlossen: {{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed_code": "Arthas Tunnel-Verbindung wurde geschlossen: code={{code}}", - "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel-Befehl hat nach {{timeout}} eine Zeitüberschreitung erreicht", - "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel-Befehl wurde abgebrochen", - "jvm.backend.diagnostic.arthas.target_not_found": "Zielinstanz wurde nicht gefunden. Prüfe targetId / agentId und ob der tunnel client online ist.", - "jvm.backend.diagnostic.arthas.target_not_found_with_id": "Zielinstanz {{target}} wurde nicht gefunden. Prüfe targetId / agentId und ob der tunnel client online ist.", - "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Arthas Tunnel-Terminalbefehl konnte nicht codiert werden: {{detail}}", - "jvm_resource.error.connection_missing": "Die Verbindung existiert nicht oder wurde gelöscht.", - "jvm_resource.error.resource_path_empty": "Der Ressourcenpfad ist leer.", - "jvm_resource.error.get_value_unavailable": "Das Lesen von JVM-Werten ist in diesem Build nicht verfügbar.", - "jvm_resource.error.read_failed": "JVM-Ressource konnte nicht gelesen werden.", - "jvm_resource.error.ai_plan_missing_context": "Dem AI-Plan fehlt der Quellkontext. Erzeuge ihn auf der Zielseite der JVM-Ressource erneut, bevor du ihn anwendest.", - "jvm_resource.error.ai_plan_context_mismatch": "Der aktuelle JVM-Tab passt nicht zum Quellkontext des AI-Plans. Die automatische Anwendung wurde abgelehnt.", - "jvm_resource.error.ai_plan_to_draft_failed": "Der AI-Plan kann derzeit nicht in einen JVM-Vorschauentwurf umgewandelt werden.", - "jvm_resource.message.ai_plan_draft_filled": "Der Entwurf wurde aus dem AI-Plan für {{resourceId}} befüllt. Zeige die Änderung vor der Bestätigung der Schreiboperation in der Vorschau an.", - "jvm_ai_plan.error.resource_locator_missing": "Dem AI-Plan fehlen nutzbare Informationen zur Ressourcenlokalisierung.", - "jvm_ai_plan.error.reason_missing": "Dem AI-Plan fehlt ein Änderungsgrund.", - "jvm_ai_plan.error.action_missing": "Dem AI-Plan fehlt eine ausführbare action.", - "jvm_ai_plan.error.payload_json_object_required": "Die aktuelle JVM-Vorschau erfordert, dass payload weiterhin ein JSON-Objekt ist.", - "jvm_ai_plan.snapshot.unavailable": "Der aktuelle Ressourcen-Snapshot wurde noch nicht erfolgreich geladen.", - "jvm_ai_plan.actions.none": "Die aktuelle Ressource deklariert keine unterstützten Aktionen. Wenn du einen Plan erzeugst, gib action nur an, wenn sie aus dem Snapshot eindeutig ableitbar ist, und lasse payload als JSON-Objekt.", - "jvm_ai_plan.actions.label": " ({{label}})", - "jvm_ai_plan.actions.description": ": {{description}}", - "jvm_ai_plan.actions.payload_fields": "; payload-Felder: {{fields}}", - "jvm_ai_plan.actions.field_separator": ", ", - "jvm_ai_plan.actions.required_suffix": "(required)", - "jvm_ai_plan.prompt.resource_path_missing": "(Ressourcenpfad nicht angegeben)", - "jvm_ai_plan.prompt.environment_unknown": "unknown", - "jvm_ai_plan.prompt.intro": "Analysiere die folgende JVM-Ressource und erstelle einen strukturierten Änderungsplan für GoNavi \"Änderungsvorschau\".", - "jvm_ai_plan.prompt.connection_name": "Verbindungsname: {{connectionName}}", - "jvm_ai_plan.prompt.target_host": "Zielhost: {{host}}", - "jvm_ai_plan.prompt.provider_mode": "Provider-Modus: {{providerMode}}", - "jvm_ai_plan.prompt.environment": "Umgebung: {{environmentLabel}}", - "jvm_ai_plan.prompt.connection_policy.read_only": "Schreibgeschützte Verbindung. Du darfst nur einen Plan und eine Risikoanalyse erzeugen und nicht annehmen, dass die Ausführung bereits erfolgt ist.", - "jvm_ai_plan.prompt.connection_policy.writable": "Schreibbare Verbindung, aber die Änderung muss trotzdem zuerst in der Vorschau geprüft und manuell bestätigt werden.", - "jvm_ai_plan.prompt.connection_policy": "Verbindungsrichtlinie: {{policy}}", - "jvm_ai_plan.prompt.resource_path": "Aktueller Ressourcenpfad: {{resourcePath}}", - "jvm_ai_plan.prompt.snapshot_title": "Aktueller Ressourcen-Snapshot:", - "jvm_ai_plan.prompt.supported_actions_title": "Unterstützte Aktionen für die aktuelle Ressource:", - "jvm_ai_plan.prompt.output_requirements_title": "Ausgabeanforderungen:", - "jvm_ai_plan.prompt.requirement.single_json_block": "1. Du darfst zuerst eine kurze Analyse einfügen, aber die Antwort muss genau einen ```json-Codeblock enthalten.", - "jvm_ai_plan.prompt.requirement.fields": "2. Die JSON-Felder im Codeblock müssen exakt lauten: targetType, selector, action, payload, reason.", - "jvm_ai_plan.prompt.requirement.resource_path": "3. Bevorzuge selector.resourcePath mit dem aktuellen Ressourcenpfad {{resourcePath}}. Erfinde keinen anderen Pfad.", - "jvm_ai_plan.prompt.requirement.action": "4. Wähle action bevorzugt aus \"Unterstützte Aktionen für die aktuelle Ressource\"; leite sie nur aus dem Snapshot ab, wenn keine unterstützten Aktionen deklariert sind.", - "jvm_ai_plan.prompt.requirement.payload": "5. payload muss als JSON-Objekt verpackt werden. Gib keine Skripte, Befehle oder Rohbinärdaten aus. Wenn ein reiner Textwert nötig ist, verpacke ihn als {\"format\":\"text\",\"value\":\"...\"}.", - "jvm_ai_plan.prompt.requirement.no_execute": "6. Behaupte nicht, dass die Änderung bereits ausgeführt wurde, und gib keine Skripte oder Befehle aus.", - "jvm_ai_plan.prompt.example_title": "JSON-Beispiel:", - "jvm_ai_plan.prompt.example_reason": "Dirty Cache-Wert korrigieren", - "jvm_resource.error.reason_required": "Gib einen Änderungsgrund ein.", - "jvm_resource.error.payload_object_required": "Payload muss ein JSON-Objekt sein.", - "jvm_resource.error.resource_id_empty": "Die Ressourcen-ID ist leer, daher kann kein Änderungsentwurf erstellt werden.", - "jvm_resource.error.preview_unavailable": "Die JVM-Änderungsvorschau ist in diesem Build nicht verfügbar.", - "jvm_resource.error.draft_invalid": "Der Änderungsentwurf ist ungültig.", - "jvm_resource.error.preview_failed": "JVM-Änderung konnte nicht in der Vorschau angezeigt werden.", - "jvm_resource.error.preview_result_invalid": "Das Vorschauergebnis hat ein ungültiges Format.", - "jvm_resource.error.apply_unavailable": "Die Ausführung von JVM-Änderungen ist in diesem Build nicht verfügbar.", - "jvm_resource.error.preview_required": "Zeige die Änderung in der Vorschau an, bevor du die Ausführung bestätigst.", - "jvm_resource.error.context_changed": "Der Ressourcenkontext hat sich geändert. Zeige vor der Ausführung erneut eine Vorschau an.", - "jvm_resource.error.confirmation_missing": "Das Bestätigungstoken fehlt. Zeige vor der Ausführung erneut eine Vorschau an.", - "jvm_resource.presentation.action.set.label": "Eigenschaft setzen", - "jvm_resource.presentation.action.set.description": "Aktualisiert einen beschreibbaren Eigenschaftswert, den die aktuelle Ressource bereitstellt.", - "jvm_resource.presentation.action.invoke.label": "Operation aufrufen", - "jvm_resource.presentation.action.invoke.description": "Ruft eine Verwaltungsoperation auf, die die aktuelle Ressource bereitstellt.", - "jvm_resource.presentation.action.put.label": "Ressource schreiben", - "jvm_resource.presentation.action.put.description": "Schreibt den payload-Inhalt in die aktuelle JVM-Ressource.", - "jvm_resource.presentation.action.clear.label": "Ressource leeren", - "jvm_resource.presentation.action.clear.description": "Leert Daten oder Status in der aktuellen JVM-Ressource.", - "jvm_resource.presentation.action.evict.label": "Cache verdrängen", - "jvm_resource.presentation.action.evict.description": "Verdrängt den Ziel-Cache-Eintrag aus der aktuellen JVM-Laufzeit.", - "jvm_resource.presentation.action.remove.label": "Eintrag entfernen", - "jvm_resource.presentation.action.remove.description": "Entfernt den angegebenen Eintrag aus der aktuellen Ressource.", - "jvm_resource.presentation.action.delete.label": "Ressource löschen", - "jvm_resource.presentation.action.delete.description": "Löscht die aktuelle Ressource oder hebt ihre Registrierung auf.", - "jvm_resource.presentation.action.refresh.label": "Ressource aktualisieren", - "jvm_resource.presentation.action.refresh.description": "Aktualisiert den Laufzeitstatus der aktuellen Ressource.", - "jvm_resource.presentation.action.reload.label": "Neu laden", - "jvm_resource.presentation.action.reload.description": "Lädt die aktuelle Ressource oder ihre Konfiguration neu.", - "jvm_resource.presentation.action.reset.label": "Status zurücksetzen", - "jvm_resource.presentation.action.reset.description": "Setzt die aktuelle Ressource auf ihren initialen oder Standardstatus zurück.", - "jvm_resource.presentation.unnamed_action": "Unbenannte Aktion", - "jvm_resource.presentation.risk.low": "Niedrig", - "jvm_resource.presentation.risk.medium": "Mittel", - "jvm_resource.presentation.risk.high": "Hoch", - "jvm_resource.presentation.risk.unknown": "Unbekannt", - "jvm_resource.presentation.audit_result.unknown": "Unbekannt", - "jvm_resource.presentation.audit_result.applied": "Ausgeführt", - "jvm_resource.presentation.audit_result.success": "Erfolgreich", - "jvm_resource.presentation.audit_result.warning": "Warnung", - "jvm_resource.presentation.audit_result.blocked": "Blockiert", - "jvm_resource.presentation.audit_result.failed": "Fehlgeschlagen", - "jvm_resource.error.apply_failed": "JVM-Änderung konnte nicht ausgeführt werden.", - "jvm_resource.message.apply_success": "JVM-Änderung wurde ausgeführt.", - "jvm_resource.title": "JVM-Ressourcenarbeitsbereich", - "jvm_resource.badge.read_only": "Schreibgeschützte Verbindung", - "jvm_resource.badge.writable": "Beschreibbare Verbindung", - "jvm_resource.action.audit": "Auditprotokoll", - "jvm_resource.action.generate_ai_plan": "AI-Plan erzeugen", - "jvm_resource.action.ask_ai_plan": "AI um einen Plan bitten", - "jvm_resource.card.snapshot": "Ressourcen-Snapshot", - "jvm_resource.field.resource_id": "Ressourcen-ID", - "jvm_resource.field.resource_type": "Ressourcentyp", - "jvm_resource.field.format": "Format", - "jvm_resource.field.version": "Version", - "jvm_resource.field.available_actions": "Verfügbare Aktionen", - "jvm_resource.section.resource_value": "Ressourcenwert", - "jvm_resource.section.metadata": "Metadaten", - "jvm_resource.empty.no_resource_data": "Keine Ressourcendaten", - "jvm_resource.card.change_draft": "Änderungsentwurf", - "jvm_resource.field.resource_path": "Ressourcenpfad", - "jvm_resource.field.target_resource": "Zielressource", - "jvm_resource.field.resource_version": "Ressourcenversion", - "jvm_resource.field.draft_source": "Entwurfsquelle", - "jvm_resource.draft_source.ai_plan": "AI-unterstützter Entwurf", - "jvm_resource.draft_source.manual": "Manuelle Bearbeitung", - "jvm_resource.section.supported_actions": "Unterstützte Ressourcenaktionen", - "jvm_resource.field.payload_fields": "Payload-Felder: ", - "jvm_resource.marker.required_suffix": " (erforderlich)", - "jvm_resource.list_separator": ", ", - "jvm_resource.field.action": "Aktion", - "jvm_resource.placeholder.action_jmx": "Zum Beispiel set oder invoke", - "jvm_resource.placeholder.action_default": "Zum Beispiel put / clear / evict", - "jvm_resource.message.current_action": "Aktuelle Aktion: ", - "jvm_resource.field.reason": "Änderungsgrund", - "jvm_resource.placeholder.reason": "Grund für diese JVM-Ressourcenänderung eingeben", - "jvm_resource.field.payload": "Payload (JSON)", - "jvm_resource.message.payload_hint": "Die Vorschau verwendet den aktuellen Entwurf. Die Bestätigung verwendet die letzte erfolgreiche Vorschau-Anfrage. Zeigen Sie nach Änderungen am Entwurf erneut eine Vorschau an.", - "jvm_resource.message.payload_template_applied": "Für die aktuelle Aktion wurde eine empfohlene Vorlage eingefügt.", - "jvm_resource.action.preview_change": "Änderung vorschauen", - "jvm_overview.connection_missing.message": "Verbindung existiert nicht oder wurde gelöscht", - "jvm_overview.error.capability_load_failed": "JVM-Modusfunktionen konnten nicht gelesen werden", - "jvm_overview.eyebrow": "JVM-Laufzeit", - "jvm_overview.title": "JVM-Laufzeitübersicht", - "jvm_overview.badge.read_only": "Schreibgeschützte Verbindung", - "jvm_overview.badge.writable": "Schreibbare Verbindung", - "jvm_overview.card.connection_summary": "Verbindungsübersicht", - "jvm_overview.card.mode_capability": "Modusfunktionen", - "jvm_overview.field.current_mode": "Aktueller Modus", - "jvm_overview.field.allowed_modes": "Erlaubte Modi", - "jvm_overview.field.jmx_address": "JMX-Adresse", - "jvm_overview.field.endpoint": "Endpoint", - "jvm_overview.field.agent": "Agent", - "jvm_overview.field.resource_browse": "Ressourcenbrowser", - "jvm_overview.value.enabled": "Aktiviert", - "jvm_overview.value.not_configured": "Nicht konfiguriert", - "jvm_overview.value.resource_browse_lazy_load": "Wird nach dem Erweitern eines Modusknotens in der Seitenleiste lazy geladen", - "jvm_overview.empty.capabilities": "Keine Modusfunktionsdaten", - "jvm_overview.capability.can_browse": "Durchsuchbar", - "jvm_overview.capability.cannot_browse": "Nicht durchsuchbar", - "jvm_overview.capability.writable": "Schreibbar", - "jvm_overview.capability.read_only": "Schreibgeschützt", - "jvm_overview.capability.preview_supported": "Vorschau unterstützt", - "jvm_overview.capability.preview_unsupported": "Vorschau nicht unterstützt", - "jvm_monitoring_dashboard.connection_missing.message": "Verbindung existiert nicht oder wurde gelöscht", - "jvm_monitoring_dashboard.error.history_unavailable": "JVMGetMonitoringHistory-Backend-Methode ist nicht verfügbar", - "jvm_monitoring_dashboard.error.history_load_failed": "Überwachungsverlauf konnte nicht geladen werden", - "jvm_monitoring_dashboard.error.start_unavailable": "JVMStartMonitoring-Backend-Methode ist nicht verfügbar", - "jvm_monitoring_dashboard.error.start_failed": "Überwachung konnte nicht gestartet werden", - "jvm_monitoring_dashboard.error.stop_unavailable": "JVMStopMonitoring-Backend-Methode ist nicht verfügbar", - "jvm_monitoring_dashboard.error.stop_failed": "Überwachung konnte nicht gestoppt werden", - "jvm_monitoring_dashboard.title": "Kontinuierliche JVM-Überwachung", - "jvm_monitoring_dashboard.status.sampling": "Sampling läuft", - "jvm_monitoring_dashboard.status.stopped": "Nicht ausgeführt", - "jvm_monitoring_dashboard.action.refresh": "Aktualisieren", - "jvm_monitoring_dashboard.action.start": "Überwachung starten", - "jvm_monitoring_dashboard.action.stop": "Überwachung stoppen", - "jvm_monitoring_dashboard.degraded.message": "Überwachungsfunktion ist eingeschränkt", - "jvm_monitoring_dashboard.empty.title": "Kontinuierliche Überwachung wurde noch nicht gestartet", - "jvm_monitoring_dashboard.empty.description": "Nachdem Sie auf \"Überwachung starten\" geklickt haben, behält GoNavi die Sampling-Ergebnisse für diese Verbindung in der aktuellen Sitzung; ein Tabwechsel stoppt das Sampling nicht.", - "jvm_diagnostic.workbench.eyebrow": "JVM-Diagnose", - "jvm_diagnostic.workbench.title": "JVM-Diagnosearbeitsbereich", - "jvm_diagnostic.workbench.status.session_established": "Sitzung hergestellt", - "jvm_diagnostic.workbench.status.no_session": "Keine Sitzung", - "jvm_diagnostic.workbench.status.command_running": "Befehl läuft", - "jvm_diagnostic.workbench.action.probe": "Funktionen prüfen", - "jvm_diagnostic.workbench.action.restart_session": "Sitzung neu erstellen", - "jvm_diagnostic.workbench.action.start_session": "Sitzung erstellen", - "jvm_diagnostic.workbench.action.execute_command": "Befehl ausführen", - "jvm_diagnostic.workbench.action.cancel_command": "Befehl abbrechen", - "jvm_diagnostic.connection_missing.message": "Verbindung existiert nicht oder wurde gelöscht", - "jvm_diagnostic.error.probe_unavailable": "JVMProbeDiagnosticCapabilities-Backendmethode ist nicht verfügbar", - "jvm_diagnostic.error.probe_failed": "Diagnosefunktionen konnten nicht geprüft werden", - "jvm_diagnostic.error.start_unavailable": "JVMStartDiagnosticSession-Backend-Methode ist nicht verfügbar", - "jvm_diagnostic.error.start_failed": "Diagnosesitzung konnte nicht erstellt werden", - "jvm_diagnostic.error.history_load_failed": "Diagnoseverlauf konnte nicht geladen werden", - "jvm_diagnostic.error.execute_unavailable": "JVMExecuteDiagnosticCommand-Backend-Methode ist nicht verfügbar", - "jvm_diagnostic.error.execute_session_required": "Erstellen Sie vor dem Ausführen eines Befehls eine Diagnosesitzung", - "jvm_diagnostic.error.execute_command_required": "Diagnosebefehl darf nicht leer sein", - "jvm_diagnostic.error.execute_failed": "Diagnosebefehl konnte nicht ausgeführt werden", - "jvm_diagnostic.error.cancel_unavailable": "JVMCancelDiagnosticCommand-Backend-Methode ist nicht verfügbar", - "jvm_diagnostic.error.cancel_failed": "Diagnosebefehl konnte nicht abgebrochen werden", - "jvm_diagnostic.message.cancel_sent": "Abbruchanforderung gesendet", - "jvm_diagnostic.session.default_title": "JVM-Diagnosekonsole", - "jvm_diagnostic.session.default_reason": "Sitzung aus der Konsole gestartet", - "jvm_diagnostic.ai_plan.error.transport_mismatch": "Der Diagnose-transport des AI-Plans ist {{planTransport}} und stimmt nicht mit der aktuellen Konsole {{currentTransport}} überein. Erstellen Sie den Plan vor dem Anwenden erneut.", - "jvm_diagnostic.ai_plan.message.filled": "AI-Diagnoseplan wurde in die Konsole übernommen", - "jvm_diagnostic.session_capability.title": "Sitzung und Funktionen", - "jvm_diagnostic.session_capability.description": "Aktueller Kanal, Berechtigungen und Schnellwartung", - "jvm_diagnostic.session_capability.status.session_established": "Sitzung hergestellt", - "jvm_diagnostic.session_capability.status.no_session": "Keine Sitzung", - "jvm_diagnostic.session_capability.status.command_running": "Befehl läuft", - "jvm_diagnostic.session_capability.status.idle": "Leerlauf", - "jvm_diagnostic.session_capability.session_id_hint": "Die Sitzungs-ID wird nach dem Erstellen einer Sitzung hier angezeigt.", - "jvm_diagnostic.session_capability.note": "Funktionsprüfungen führen keine Befehle aus; vor dem Ausführen eines Befehls muss eine Sitzung erstellt werden. Der Audit-Verlauf zeigt die neuesten Befehlsdatensätze und kann auch ohne aktuelle Sitzung Datensätze aus früheren Sitzungen enthalten.", - "jvm_diagnostic.session_capability.action.clear_output": "Ausgabe löschen", - "jvm_diagnostic.session_capability.action.refresh_history": "Verlauf aktualisieren", - "jvm_diagnostic.workflow.probe.title": "Funktionen prüfen", - "jvm_diagnostic.workflow.probe.description": "Liest nur Diagnosekanal, Streaming-Ausgabe und Befehlsberechtigungen, ohne eine Sitzung zu erstellen.", - "jvm_diagnostic.workflow.session.title": "Sitzung erstellen", - "jvm_diagnostic.workflow.session.description": "Erstellt einen Diagnosekontext, damit nachfolgende Befehle an diese Sitzung gebunden sind.", - "jvm_diagnostic.workflow.command.title": "Befehl ausführen", - "jvm_diagnostic.workflow.command.description": "Nach dem Erstellen der Sitzung werden Befehlseditor, Begründung und Vorlagen angezeigt.", - "jvm_diagnostic.capability.empty.title": "Funktionen noch nicht geprüft", - "jvm_diagnostic.capability.empty.description": "Die Funktionsprüfung liest nur Kanalberechtigungen und Befehlsrichtlinien. Sie erstellt keine Sitzung und führt keine Befehle aus.", - "jvm_diagnostic.capability_result.title": "Ergebnis der Funktionsprüfung", - "jvm_diagnostic.capability_result.session_allowed": "Sitzungen möglich", - "jvm_diagnostic.capability_result.session_denied": "Sitzungen nicht möglich", - "jvm_diagnostic.capability_result.streaming_supported": "Streaming-Ausgabe", - "jvm_diagnostic.capability_result.streaming_unsupported": "Streaming nicht unterstützt", - "jvm_diagnostic.capability_result.observe_allowed": "Observe-Befehle", - "jvm_diagnostic.capability_result.observe_denied": "Observe gesperrt", - "jvm_diagnostic.capability_result.trace_allowed": "Trace-Befehle", - "jvm_diagnostic.capability_result.mutating_allowed": "Hochrisikobefehle", - "jvm_diagnostic.no_session.title": "Diagnosesitzung starten", - "jvm_diagnostic.no_session.description": "Erstellen Sie zuerst eine Sitzung, dann werden Befehlseditor und Vorlagen angezeigt", - "jvm_diagnostic.no_session.alert.title": "Die Befehlseingabe erscheint nach dem Erstellen einer Sitzung", - "jvm_diagnostic.no_session.alert.description": "So wird vermieden, dass Befehle vor dem Binden einer Sitzung als ausführbar erscheinen; außerdem bleiben Audit-Einträge, Ausgabestreams und Abbruch an dieselbe Sitzung gebunden.", - "jvm_diagnostic.no_session.action.start": "Diagnosesitzung erstellen", - "jvm_diagnostic.no_session.action.probe": "Zuerst Funktionen prüfen", - "jvm_diagnostic.command_input.title": "Befehlseingabe", - "jvm_diagnostic.command_input.description": "Unterstützt Autovervollständigung. Mit Ctrl/Cmd + Enter ausführen.", - "jvm_diagnostic.command_input.command_label": "Diagnosebefehl", - "jvm_diagnostic.command_input.command_description": "Geben Sie einen Arthas-/Diagnosebefehl ein, zum Beispiel thread -n 5, dashboard oder jvm; die Vorlagen unten können ihn mit einem Klick einfügen.", - "jvm_diagnostic.command_input.reason_label": "Begründung (optional)", - "jvm_diagnostic.command_input.reason_placeholder": "Zum Beispiel: hohe CPU-Last untersuchen, blockierte Threads bestätigen oder eine langsame Methode finden", - "jvm_diagnostic.command_input.reason_help": "Wird für Audit-Einträge und AI-Kontext verwendet. Wird nicht als Arthas-Befehl an die Ziel-JVM gesendet.", - "jvm_diagnostic.command_templates.title": "Befehlsvorlagen", - "jvm_diagnostic.output.title": "Live-Ausgabe", - "jvm_diagnostic.output.description": "Aus Backend-Ereignisstream angehängt", - "jvm_diagnostic.output.empty.description": "Noch keine Live-Ausgabe. Nach dem Ausführen eines Befehls wird die Backend-Ausgabe hier chronologisch angezeigt.", - "jvm_diagnostic.output.local_pending": "Diagnosebefehl übermittelt; warte auf Backend-Ausgabe: {{command}}", - "jvm_diagnostic.output.frontend_completed_fallback": "Der Diagnosebefehlsaufruf wurde zurückgegeben, aber es wurde kein terminales Backend-Ereignis empfangen. Das Frontend hat den Wartezustand als Fallback beendet.", - "jvm_diagnostic.presentation.category.observe": "Beobachtungsbefehle", - "jvm_diagnostic.presentation.category.trace": "Trace-Befehle", - "jvm_diagnostic.presentation.category.mutating": "Hochrisikobefehle", - "jvm_diagnostic.presentation.phase.running": "Läuft", - "jvm_diagnostic.presentation.phase.completed": "Abgeschlossen", - "jvm_diagnostic.presentation.phase.failed": "Fehlgeschlagen", - "jvm_diagnostic.presentation.phase.canceling": "Wird abgebrochen", - "jvm_diagnostic.presentation.phase.diagnostic": "Diagnoseereignis", - "jvm_diagnostic.presentation.event.diagnostic": "Diagnoseausgabe", - "jvm_diagnostic.presentation.event.chunk": "Ausgabeabschnitt", - "jvm_diagnostic.presentation.event.done": "Ausführung beendet", - "jvm_diagnostic.presentation.chunk.empty_event": "Leeres Ereignis", - "jvm_diagnostic.history.title": "Audit-Verlauf", - "jvm_diagnostic.history.description": "Letzte Befehle und Ausführungsstatus", - "jvm_diagnostic.history.current_session": "Aktuelle Sitzung", - "jvm_diagnostic.history.no_session": "Noch keine Diagnosesitzung", - "jvm_diagnostic.history.recent_records": "Letzte Einträge", - "jvm_diagnostic.history.reason_missing": "Kein Diagnosegrund angegeben", - "jvm_diagnostic.history.no_records": "Kein Diagnoseverlauf", - "jvm_audit.eyebrow": "JVM-Audit", - "jvm_audit.title": "JVM-Änderungsaudit", - "jvm_audit.card.records": "Audit-Einträge", - "jvm_audit.description.current_range": "Aktueller Bereich: letzte {{limit}} Einträge", - "jvm_audit.option.last_records": "Letzte {{limit}} Einträge", - "jvm_audit.action.refresh": "Aktualisieren", - "jvm_audit.column.time": "Zeit", - "jvm_audit.column.mode": "Modus", - "jvm_audit.column.action": "Aktion", - "jvm_audit.column.resource": "Ressource", - "jvm_audit.column.reason": "Grund", - "jvm_audit.column.source": "Quelle", - "jvm_audit.column.result": "Ergebnis", - "jvm_audit.source.ai_plan": "AI-unterstützt", - "jvm_audit.source.manual": "Manuell", - "jvm_audit.error.connection_missing": "Die Verbindung existiert nicht oder wurde gelöscht.", - "jvm_audit.error.backend_unavailable": "Die Backend-Methode JVMListAuditRecords ist nicht verfügbar.", - "jvm_audit.error.load_failed": "JVM-Audit-Einträge konnten nicht geladen werden{{separator}}{{detail}}", - "jvm_audit.empty.load_failed": "Audit-Einträge sind derzeit nicht verfügbar", - "jvm_audit.empty.no_records": "Keine Audit-Einträge", - "query_editor.placeholder.connection": "Verbindung auswählen", - "query_editor.placeholder.database": "Datenbank auswählen", - "query_editor.max_rows.tooltip": "Maximale Anzahl zurückgegebener Zeilen. SELECT erhält automatisch ein LIMIT, damit sehr große Ergebnismengen die Oberfläche nicht blockieren.", - "query_editor.max_rows.option_500": "Max. Zeilen: 500", - "query_editor.max_rows.option_1000": "Max. Zeilen: 1000", - "query_editor.max_rows.option_5000": "Max. Zeilen: 5000", - "query_editor.max_rows.option_20000": "Max. Zeilen: 20000", - "query_editor.max_rows.option_unlimited": "Max. Zeilen: unbegrenzt", - "query_editor.action.run": "Ausführen", - "query_editor.action.run_with_shortcut": "Ausführen ({{shortcut}})", - "query_editor.action.stop": "Stoppen", - "query_editor.action.save": "Speichern", - "query_editor.action.save_with_shortcut": "Speichern ({{shortcut}})", - "query_editor.completion.documentation.comment": "Kommentar: {{comment}}", - "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + klicken, um zu dieser Datenbank zu wechseln", - "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + klicken, um diese Tabelle zu öffnen", - "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + klicken, um diese Ansicht zu öffnen", - "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + klicken, um diese materialisierte Ansicht zu öffnen", - "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + klicken, um diesen Trigger zu öffnen", - "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + klicken, um diese gespeicherte Prozedur zu öffnen", - "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + klicken, um diese Funktion zu öffnen", - "query_editor.object_info.database": "Datenbank", - "query_editor.object_info.table": "Tabelle", - "query_editor.object_info.column": "Spalte", - "query_editor.object_info.materialized_view": "Materialisierte Ansicht", - "query_editor.object_info.label.database": "Datenbank", - "query_editor.object_info.label.table": "Tabelle", - "query_editor.object_info.label.type": "Typ", - "query_editor.object_info.label.schema": "Schema", - "query_editor.object_info.label.separator": ": ", - "query_editor.action.more": "Mehr", - "query_editor.action.format": "Formatieren", - "query_editor.action.format_sql": "SQL formatieren", - "query_editor.action.resize_editor": "Höhe durch Ziehen ändern", - "query_editor.action.ai_generate_sql": "SQL mit AI erzeugen", - "query_editor.action.ai_explain_sql": "SQL mit AI erklären", - "query_editor.action.ai_optimize_sql": "SQL mit AI optimieren", - "query_editor.action.ai_generate_sql_menu": "SQL erzeugen", - "query_editor.action.ai_explain_sql_menu": "SQL erklären", - "query_editor.action.ai_optimize_sql_menu": "SQL optimieren", - "query_editor.action.ai_schema_analysis": "Schema-Analyse", - "query_editor.action.show_results_panel": "Ergebnisbereich anzeigen", - "query_editor.action.hide_results_panel": "Ergebnisbereich ausblenden", - "query_editor.action.show_results_panel_with_shortcut": "Ergebnisbereich anzeigen ({{shortcut}})", - "query_editor.action.hide_results_panel_with_shortcut": "Ergebnisbereich ausblenden ({{shortcut}})", - "query_editor.action.results": "Ergebnisse", - "query_editor.transaction.delay.immediate": "Sofort", - "query_editor.transaction.mode.tooltip": "Wie in DBeaver: Wenn der SQL-Editor DML wie INSERT/UPDATE/DELETE/MERGE/REPLACE ausführt, öffnet GoNavi zuerst eine verwaltete Transaktion. Im manuellen Modus müssen Sie commit/rollback ausführen; im automatischen Modus wird nach erfolgreicher Ausführung automatisch COMMIT ausgeführt.", - "query_editor.transaction.mode.manual": "Manuell", - "query_editor.transaction.mode.auto": "Automatisch", - "query_editor.transaction.status.auto_commit_countdown": "Automatischer Commit in {{seconds}}s", - "query_editor.transaction.status.auto_committing": "Automatischer Commit läuft", - "query_editor.transaction.action.commit": "Commit", - "query_editor.transaction.action.commit_with_count": "Commit ({{count}})", - "query_editor.transaction.action.rollback": "Rollback", - "query_editor.transaction.message.pending_managed_transaction": "Im SQL-Editor ist bereits eine nicht festgeschriebene Transaktion offen. Führen Sie zuerst Commit oder Rollback aus, bevor Sie eine weitere DML-Anweisung starten.", - "query_editor.action.show_object_info": "Objektinformationen anzeigen", - "query_editor.action.rename_query": "Abfrage umbenennen", - "query_editor.action.export_sql_file": "SQL-Datei exportieren", - "query_editor.format.keyword_upper": "Schlüsselwörter großschreiben", - "query_editor.format.keyword_lower": "Schlüsselwörter kleinschreiben", - "query_editor.format.restore_last_format": "Letzte Formatierung zurücknehmen", - "query_editor.format.snippet_settings": "Snippet-Einstellungen...", - "query_editor.format.shortcut_settings": "Tastenkürzel-Einstellungen...", - "query_editor.message.format_failed": "Formatierung fehlgeschlagen: Die SQL-Syntax ist möglicherweise ungültig.", - "query_editor.message.no_format_restore_snapshot": "Es ist kein SQL-Stand vor der Formatierung zum Wiederherstellen verfügbar.", - "query_editor.message.format_restore_success": "Der SQL-Stand vor der Formatierung wurde wiederhergestellt.", - "query_editor.message.page_query_failed": "Seitenabfrage fehlgeschlagen: {{error}}", - "query_editor.message.page_query_empty": "Die Seitenabfrage hat keine Ergebnismenge zurückgegeben.", - "query_editor.message.refresh_failed": "Aktualisierung fehlgeschlagen: {{error}}", - "query_editor.message.select_database_first": "Wählen Sie zuerst eine Datenbank aus.", - "query_editor.message.connection_not_found": "Verbindung nicht gefunden.", - "query_editor.message.unsupported_source": "Diese Datenquelle unterstützt den SQL-Abfrageeditor nicht. Verwenden Sie stattdessen die zugehörige Seite.", - "query_editor.message.no_executable_sql": "Kein ausführbares SQL.", - "query_editor.message.no_selectable_sql": "Keine auswählbare SQL-Anweisung.", - "query_editor.message.statement_failed_prefix": "Anweisung {{index}} fehlgeschlagen: ", - "query_editor.message.execution_success": "Ausführung erfolgreich.", - "query_editor.message.execution_multi_success": "{{statements}} Anweisungen ausgeführt und {{results}} Ergebnismengen erzeugt.", - "query_editor.message.execution_result_sets_success": "Ausführung abgeschlossen und {{results}} Ergebnismengen erzeugt.", - "query_editor.message.execution_failed_with_error": "Abfrageausführung fehlgeschlagen: {{error}}", - "query_editor.message.cancel_no_running": "Keine laufende Abfrage zum Abbrechen.", - "query_editor.message.cancel_success": "Abfrage abgebrochen.", - "query_editor.message.cancel_failed": "Abfrage konnte nicht abgebrochen werden: {{error}}", - "query_editor.message.read_only_no_safe_locator": "Es wurde weder ein Primärschlüssel noch ein verwendbarer eindeutiger Index erkannt, daher können Änderungen nicht sicher gespeichert werden.", - "query_editor.message.read_only_index_metadata_unavailable": "Die Metadaten des eindeutigen Indexes konnten nicht geladen werden, daher können Änderungen nicht sicher gespeichert werden.", - "query_editor.message.read_only_table_locator_metadata_unavailable": "Die Metadaten des Primärschlüssels/eindeutigen Indexes für {{table}} konnten nicht geladen werden, daher können Änderungen nicht sicher gespeichert werden.", - "query_editor.message.read_only_system_metadata": "Abfrageergebnisse aus Systemmetadaten bleiben schreibgeschützt.", - "query_editor.message.read_only_oracle_rowid_injection_unavailable": "Die Oracle-Abfrage verwendet *, daher konnte die ROWID-Lokatorspalte nicht automatisch eingefügt werden. Das Ergebnis bleibt schreibgeschützt.", - "query_editor.message.read_only_warning_with_detail": "Abfrageergebnisse bleiben schreibgeschützt: {{detail}}", - "query_editor.message.object_info_target_not_found": "Der Cursor befindet sich auf keiner erkannten Tabelle oder Spalte.", - "query_editor.message.insert_success": "Code an der aktuellen Cursorposition eingefügt.", - "query_editor.message.append_success": "Code angehängt.", - "query_editor.message.saved": "Abfrage gespeichert.", - "query_editor.message.sql_file_saved": "SQL-Datei gespeichert.", - "query_editor.message.save_sql_file_failed": "SQL-Datei konnte nicht gespeichert werden: {{error}}", - "query_editor.message.save_query_failed": "Abfrage konnte nicht gespeichert werden: {{error}}", - "query_editor.message.export_sql_file_success": "SQL-Datei exportiert.", - "query_editor.message.export_sql_file_failed": "SQL-Datei konnte nicht exportiert werden: {{error}}", - "query_editor.message.save_first_before_rename": "Speichern Sie die Abfrage, bevor Sie sie umbenennen.", - "query_editor.message.renamed": "Abfrage umbenannt.", - "query_editor.empty_state.title": "Warten auf SQL-Ausfuehrung", - "query_editor.empty_state.description": "Fuehren Sie eine Abfrage aus, damit die Ergebnisse unten im neuen Datengitter angezeigt werden.", - "query_editor.result.tab_title": "Ergebnis {{index}} ({{count}})", - "query_editor.result.tab_title_success": "Ergebnis {{index}} ✓", - "query_editor.result.close": "Ergebnis schließen", - "query_editor.result.execution_success": "Ausführung erfolgreich", - "query_editor.result.affected_rows": "Betroffene Zeilen: {{count}}", - "query_editor.result.execution_failed": "Ausführung fehlgeschlagen", - "query_editor.result.ai_diagnose": "AI-Diagnose", - "query_editor.results_panel.tooltip.hide": "Ergebnisbereich ausblenden", - "query_editor.results_panel.tooltip.hide_with_shortcut": "Ergebnisbereich ausblenden ({{shortcut}})", - "query_editor.results_panel.menu.close_other": "Andere Tabs schließen", - "query_editor.results_panel.menu.close_left": "Tabs links schließen", - "query_editor.results_panel.menu.close_right": "Tabs rechts schließen", - "query_editor.results_panel.menu.close_all": "Alle Tabs schließen", - "query_editor.results_panel.action.hide": "Ausblenden", - "query_editor.results_panel.aria.hide": "Ergebnisbereich ausblenden", - "query_editor.results_panel.tab.message": "Meldung {{index}}", - "query_editor.results_panel.tab.result": "Ergebnis {{index}}", - "query_editor.results_panel.message.title": "Ausführungsmeldungen", - "query_editor.results_panel.panel.title": "Ergebnisbereich", - "query_editor.save_modal.title": "Abfrage speichern", - "query_editor.save_modal.rename_title": "Abfrage umbenennen", - "query_editor.save_modal.rename_ok": "Umbenennen", - "query_editor.save_modal.name_label": "Abfragename", - "query_editor.save_modal.name_required": "Geben Sie einen Abfragenamen ein.", - "query_editor.save_modal.name_placeholder": "Beispiel: alle Benutzer abfragen", - "query_editor.save_modal.unnamed": "Unbenannte Abfrage", - "query_editor.ai_prompt.default_source": "Datenbank", - "query_editor.ai_prompt.default_database": "Standard", - "query_editor.ai_prompt.context": "Kontext: {{type}} {{name}}, ausgewählte Datenbank {{database}}.\n", - "query_editor.ai_prompt.generate": "Erzeuge eine Abfrage anhand des aktuellen Datenbankschemas.", - "query_editor.ai_prompt.explain": "Erkläre die Ausführungslogik dieser SQL-Anweisung:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.optimize": "Analysiere diese SQL-Anweisung auf Leistungsprobleme und schlage Optimierungen vor:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.schema": "Analysiere das aktuelle Datenbankschema und schlage Verbesserungen für Leistung und Design vor.", - "query_editor.ai_prompt.diagnose": "Beim Ausführen dieses SQL ist ein Fehler aufgetreten:\n```sql\n{{sql}}\n```\n\nDie Datenbank meldete diesen Fehler:\n```text\n{{error}}\n```\n\nAnalysiere die Ursache und schlage eine Korrektur vor.", - "query_editor.slash_command.query.label": "Abfrage in natürlicher Sprache", - "query_editor.slash_command.query.description": "Beschreiben, was abgefragt werden soll", - "query_editor.slash_command.query.prompt": "Schreibe eine SQL-Abfrage für diese Anfrage:", - "query_editor.slash_command.sql.label": "SQL erzeugen", - "query_editor.slash_command.sql.description": "Anforderung beschreiben und Anweisung erzeugen", - "query_editor.slash_command.sql.prompt": "Erzeuge SQL für diese Anforderung:", - "query_editor.slash_command.explain.label": "SQL erklären", - "query_editor.slash_command.explain.description": "Logik des ausgewählten SQL erklären", - "query_editor.slash_command.explain.prompt": "Erkläre die Ausführungslogik dieser SQL-Anweisung:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.optimize.label": "Optimierungsanalyse", - "query_editor.slash_command.optimize.description": "SQL-Leistungsengpässe analysieren", - "query_editor.slash_command.optimize.prompt": "Analysiere diese SQL-Anweisung auf Leistungsprobleme und schlage Optimierungen vor:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.schema.label": "Tabellendesign prüfen", - "query_editor.slash_command.schema.description": "Qualität der Tabellenstruktur prüfen", - "query_editor.slash_command.schema.prompt": "Prüfe das zugehörige Tabellendesign einschließlich Feldtypen, Normalisierung, Indizes und Verbesserungsvorschlägen.", - "query_editor.slash_command.index.label": "Indexempfehlung", - "query_editor.slash_command.index.description": "Indexstrategie empfehlen", - "query_editor.slash_command.index.prompt": "Empfiehl anhand der aktuellen Tabellenstruktur und üblicher Abfragemuster eine Indexstrategie und füge bei Bedarf SQL hinzu.", - "query_editor.slash_command.diff.label": "Tabellenvergleich", - "query_editor.slash_command.diff.description": "Tabellenunterschiede vergleichen und Änderungen erzeugen", - "query_editor.slash_command.diff.prompt": "Vergleiche diese zwei Tabellenstrukturen und erzeuge ALTER-Anweisungen für die Migration von der alten zur neuen Version.", - "query_editor.slash_command.mock.label": "Testdaten", - "query_editor.slash_command.mock.description": "INSERT-Testdaten erzeugen", - "query_editor.slash_command.mock.prompt": "Erzeuge 10 fachlich sinnvolle INSERT-Testzeilen für die zugehörige Tabelle.", - "query_editor.completion.detail.aggregate": "Aggregatfunktion", - "query_editor.completion.detail.string": "Zeichenkettenfunktion", - "query_editor.completion.detail.math": "Mathematische Funktion", - "query_editor.completion.detail.date_time": "Datums- und Zeitfunktion", - "query_editor.completion.detail.conditional": "Bedingungsfunktion", - "query_editor.completion.detail.conversion": "Typumwandlungsfunktion", - "query_editor.completion.detail.json": "JSON-Funktion", - "query_editor.completion.detail.utility": "Hilfsfunktion", - "query_editor.completion.detail.info": "Informationsfunktion", - "query_editor.completion.detail.window": "Fensterfunktion", - "query_editor.completion.detail.sql_function": "SQL-Funktion", - "query_editor.completion.detail.aggregate_count": "Aggregat - zählen", - "query_editor.completion.detail.string_concat": "Zeichenkette - verketten", - "query_editor.completion.detail.math_abs": "Mathematik - Absolutwert", - "query_editor.completion.detail.date_now": "Datum - aktuelles Datum und Uhrzeit", - "query_editor.completion.detail.conditional_if": "Bedingung - IF", - "query_editor.completion.detail.conversion_cast": "Umwandlung - Typumwandlung", - "query_editor.completion.detail.json_extract": "JSON - Wert extrahieren", - "query_editor.completion.detail.crypto_md5": "Hashwert - MD5", - "query_editor.completion.detail.info_database": "Info - aktuelle Datenbank", - "query_editor.completion.detail.window_row_number": "Fenster - Zeilennummer", - "query_editor.completion.detail.modifier_distinct": "Modifikator - eindeutig", - "query_editor.completion.action.absolute_value": "Absolutwert", - "query_editor.completion.action.approximate_distinct": "ungefähr eindeutige Werte", - "query_editor.completion.action.approximate_distinct_count": "ungefähre Anzahl eindeutiger Werte", - "query_editor.completion.action.approximate_percentile": "ungefähres Perzentil", - "query_editor.completion.action.approximate_quantile": "ungefähres Quantil", - "query_editor.completion.action.array_aggregation": "Array-Aggregation", - "query_editor.completion.action.array_length": "Array-Länge", - "query_editor.completion.action.average": "Durchschnitt", - "query_editor.completion.action.bitmap_aggregation": "Bitmap-Aggregation", - "query_editor.completion.action.bitmap_construction": "Bitmap erstellen", - "query_editor.completion.action.bitmap_count": "Bitmap-Anzahl", - "query_editor.completion.action.boolean_and_aggregation": "Boolesche UND-Aggregation", - "query_editor.completion.action.boolean_or_aggregation": "Boolesche ODER-Aggregation", - "query_editor.completion.action.character_length": "Zeichenlänge", - "query_editor.completion.action.concat_with_separator": "mit Trennzeichen verketten", - "query_editor.completion.action.concatenation": "verketten", - "query_editor.completion.action.condition_mapping": "Bedingungszuordnung", - "query_editor.completion.action.conditional_check": "Bedingungsprüfung", - "query_editor.completion.action.count": "Anzahl", - "query_editor.completion.action.current_database": "aktuelle Datenbank", - "query_editor.completion.action.current_date": "aktuelles Datum", - "query_editor.completion.action.current_date_time": "aktuelles Datum und Uhrzeit", - "query_editor.completion.action.current_time": "aktuelle Uhrzeit", - "query_editor.completion.action.current_timestamp": "aktueller Zeitstempel", - "query_editor.completion.action.current_user": "aktueller Benutzer", - "query_editor.completion.action.database_current_time": "aktuelle Datenbankzeit", - "query_editor.completion.action.date_addition": "Datumsaddition", - "query_editor.completion.action.date_conversion": "in Datum umwandeln", - "query_editor.completion.action.date_difference": "Datumsdifferenz", - "query_editor.completion.action.date_field_extraction": "Datumsfeld extrahieren", - "query_editor.completion.action.date_formatting": "Datumsformatierung", - "query_editor.completion.action.date_subtraction": "Datumssubtraktion", - "query_editor.completion.action.date_truncation": "Datum kürzen", - "query_editor.completion.action.date_value": "Datum", - "query_editor.completion.action.datetime_conversion": "in Datum und Uhrzeit umwandeln", - "query_editor.completion.action.datetime_value": "Datum und Uhrzeit", - "query_editor.completion.action.decimal_truncation": "Dezimalstellen kürzen", - "query_editor.completion.action.dense_rank": "dichter Rang", - "query_editor.completion.action.distinct_array_aggregation": "eindeutige Array-Aggregation", - "query_editor.completion.action.e_power": "e-Potenz", - "query_editor.completion.action.elapsed_time": "verstrichene Zeit", - "query_editor.completion.action.epoch_seconds": "Epoch-Sekunden", - "query_editor.completion.action.exact_distinct": "exakt eindeutige Werte", - "query_editor.completion.action.first_non_null": "ersten Nicht-NULL-Wert zurückgeben", - "query_editor.completion.action.first_value": "erster Wert", - "query_editor.completion.action.format_as_text": "als Text formatieren", - "query_editor.completion.action.group_concatenation": "Gruppenverkettung", - "query_editor.completion.action.guid_generation": "GUID erzeugen", - "query_editor.completion.action.hexadecimal": "hexadezimal", - "query_editor.completion.action.high_precision_current_time": "aktuelle Zeit mit hoher Genauigkeit", - "query_editor.completion.action.hll_aggregation": "HLL-Aggregation", - "query_editor.completion.action.hll_hash": "HLL-Hash", - "query_editor.completion.action.instant_rate_of_change": "momentane Änderungsrate", - "query_editor.completion.action.int64_conversion": "in Int64 umwandeln", - "query_editor.completion.action.interpolation": "Interpolation", - "query_editor.completion.action.json_string_extraction": "JSON-Zeichenkette extrahieren", - "query_editor.completion.action.json_unquote": "JSON-Anführungszeichen entfernen", - "query_editor.completion.action.json_value_extraction": "JSON-Wert extrahieren", - "query_editor.completion.action.json_value_set": "JSON-Wert setzen", - "query_editor.completion.action.jsonb_path_extraction": "JSONB-Pfad extrahieren", - "query_editor.completion.action.julian_day": "julianischer Tag", - "query_editor.completion.action.last_insert_id": "letzte Insert-ID", - "query_editor.completion.action.last_row": "letzte Zeile", - "query_editor.completion.action.last_value": "letzter Wert", - "query_editor.completion.action.least_squares": "kleinste Quadrate", - "query_editor.completion.action.left_padding": "links auffüllen", - "query_editor.completion.action.left_space_trimming": "linke Leerzeichen entfernen", - "query_editor.completion.action.left_substring": "von links extrahieren", - "query_editor.completion.action.length": "Länge", - "query_editor.completion.action.list_aggregation": "Listenaggregation", - "query_editor.completion.action.list_unnest": "Liste entpacken", - "query_editor.completion.action.log_base_10": "Logarithmus zur Basis 10", - "query_editor.completion.action.log_base_2": "Logarithmus zur Basis 2", - "query_editor.completion.action.logarithm": "Logarithmus", - "query_editor.completion.action.lowercase": "in Kleinbuchstaben umwandeln", - "query_editor.completion.action.maximum": "Maximum", - "query_editor.completion.action.md5_hash": "MD5-Hash", - "query_editor.completion.action.minimum": "Minimum", - "query_editor.completion.action.modulo": "Modulo", - "query_editor.completion.action.month_addition": "Monate addieren", - "query_editor.completion.action.month_difference": "Monatsdifferenz", - "query_editor.completion.action.month_end_date": "Monatsende", - "query_editor.completion.action.next_row": "nächste Zeile", - "query_editor.completion.action.null_branch": "NULL-Zweig", - "query_editor.completion.action.null_if_equal": "NULL zurückgeben, wenn gleich", - "query_editor.completion.action.null_replacement": "NULL-Ersetzung", - "query_editor.completion.action.number_conversion": "in Zahl umwandeln", - "query_editor.completion.action.number_formatting": "Zahlenformatierung", - "query_editor.completion.action.position_lookup": "Position suchen", - "query_editor.completion.action.power_operation": "Potenzoperation", - "query_editor.completion.action.previous_row": "vorherige Zeile", - "query_editor.completion.action.quantile": "Quantil", - "query_editor.completion.action.random_number": "Zufallszahl", - "query_editor.completion.action.rank": "Rang", - "query_editor.completion.action.rate_of_change": "Änderungsrate", - "query_editor.completion.action.regex_match": "Regex-Übereinstimmung", - "query_editor.completion.action.regex_replace": "Regex-Ersetzung", - "query_editor.completion.action.replacement": "Ersetzung", - "query_editor.completion.action.right_padding": "rechts auffüllen", - "query_editor.completion.action.right_space_trimming": "rechte Leerzeichen entfernen", - "query_editor.completion.action.right_substring": "von rechts extrahieren", - "query_editor.completion.action.round_down": "abrunden", - "query_editor.completion.action.round_up": "aufrunden", - "query_editor.completion.action.rounding": "runden", - "query_editor.completion.action.row_number": "Zeilennummer", - "query_editor.completion.action.set_lookup": "Mengensuche", - "query_editor.completion.action.sha1_hash": "SHA1-Hash", - "query_editor.completion.action.sha2_hash": "SHA2-Hash", - "query_editor.completion.action.space_trimming": "Leerzeichen entfernen", - "query_editor.completion.action.spread": "Streuung", - "query_editor.completion.action.sql_literal": "SQL-Literal", - "query_editor.completion.action.square_root": "Quadratwurzel", - "query_editor.completion.action.string_aggregation": "Zeichenkettenaggregation", - "query_editor.completion.action.string_conversion": "in Zeichenkette umwandeln", - "query_editor.completion.action.string_repetition": "Zeichenkette wiederholen", - "query_editor.completion.action.string_reversal": "Zeichenkette umkehren", - "query_editor.completion.action.string_to_date": "Zeichenkette in Datum umwandeln", - "query_editor.completion.action.string_to_timestamp": "Zeichenkette in Zeitstempel umwandeln", - "query_editor.completion.action.struct_construction": "Struktur erstellen", - "query_editor.completion.action.substring_extraction": "Teilzeichenkette extrahieren", - "query_editor.completion.action.sum": "Summe", - "query_editor.completion.action.time_difference": "Zeitdifferenz", - "query_editor.completion.action.time_value": "Zeit", - "query_editor.completion.action.time_weighted_average": "zeitgewichteter Durchschnitt", - "query_editor.completion.action.timestamp_difference": "Zeitstempeldifferenz", - "query_editor.completion.action.truncate_date_or_number": "Datum oder Zahl kürzen", - "query_editor.completion.action.try_conversion": "Umwandlung versuchen", - "query_editor.completion.action.type_conversion": "Typumwandlung", - "query_editor.completion.action.unix_time_to_datetime": "Unix-Zeit in Datum und Uhrzeit umwandeln", - "query_editor.completion.action.unix_timestamp": "Unix-Zeitstempel", - "query_editor.completion.action.uppercase": "in Großbuchstaben umwandeln", - "query_editor.completion.action.uuid_generation": "UUID erzeugen", - "query_editor.completion.action.value_formatting": "Wert formatieren", - "query_editor.completion.action.version": "Version", - "data_grid.action.apply": "Anwenden", - "data_grid.ai_prompt.analyze_page": "Analysiere bitte die folgenden Abfrageergebnisse (die ersten {{count}} Beispielzeilen):\n```json\n{{json}}\n```\n\nAnalysiere Datenmerkmale, erkenne Muster oder liefere geschäftliche Erkenntnisse.", - "data_grid.batch_fill.set_null": "Auf NULL setzen", - "data_grid.batch_fill.title": "Stapelfüllung ({{count}} Zellen)", - "data_grid.batch_fill.value_placeholder": "Einzufüllenden Wert eingeben", - "data_grid.cell_editor.now": "Jetzt", - "data_grid.cell_editor.title": "Zelle bearbeiten", - "data_grid.cell_editor.title_with_column": "Zelle bearbeiten: {{column}}", - "data_grid.column.comment_tooltip": "Kommentar: {{comment}}", - "data_grid.column.drag_tooltip": "Ziehen, um Spalten neu anzuordnen", - "data_grid.column.foreign_key_jump_title": "Zur Fremdschlüssel-Tabelle springen: {{tableName}}", - "data_grid.column.foreign_key_tooltip": "Fremdschlüssel: {{target}}", - "data_grid.column.resize_tooltip": "Ziehen, um die Spaltenbreite zu ändern; Doppelklick für automatische Anpassung", - "data_grid.column.type_tooltip": "Typ: {{type}}", - "data_grid.column_quick_find.placeholder": "Zur Spalte springen...", - "data_grid.column_quick_find.tooltip": "Spaltennamen eingeben, dann Enter drücken oder die Suchschaltfläche nutzen, um zur Spalte zu springen", - "data_grid.ai_insight.prompt": "Analysiere bitte die folgenden Abfrageergebnisse (die ersten {{count}} Beispieldatensätze):\n```json\n{{json}}\n```\n\nAnalysiere Datenmerkmale, erkenne Muster oder liefere geschäftliche Erkenntnisse.", - "data_grid.datetime_picker.now": "Jetzt", - "data_grid.column_settings.column_visibility": "Spaltensichtbarkeit", - "data_grid.column_settings.display_settings": "Anzeigeeinstellungen", - "data_grid.column_settings.field_info": "Feldinformationen", - "data_grid.column_settings.hide_all": "Alle ausblenden", - "data_grid.column_settings.remember_column_order": "Eigene Spaltenreihenfolge merken", - "data_grid.column_settings.remember_hidden_columns": "Ausgeblendete Spalten merken", - "data_grid.column_settings.reset_hidden": "Ausblendungen zurücksetzen", - "data_grid.column_settings.reset_hidden_success": "Alle Spalten werden wieder angezeigt", - "data_grid.column_settings.reset_order": "Reihenfolge zurücksetzen", - "data_grid.column_settings.reset_order_success": "Standard-Spaltenreihenfolge wiederhergestellt", - "data_grid.column_settings.search_columns_placeholder": "Spaltennamen suchen...", - "data_grid.column_settings.show_all": "Alle anzeigen", - "data_grid.column_settings.show_comments": "Spaltenkommentare in der Kopfzeile anzeigen", - "data_grid.column_settings.show_types": "Spaltentypen in der Kopfzeile anzeigen", - "data_grid.context_menu.auto_fit_column": "Spaltenbreite an Inhalt anpassen", - "data_grid.context_menu.clear_column_sort": "Sortierung für dieses Feld aufheben", - "data_grid.context_menu.column_display_section": "Feldanzeige", - "data_grid.context_menu.column_no_comment": "Kein Kommentar", - "data_grid.context_menu.column_unknown_type": "Unbekannter Typ", - "data_grid.context_menu.column_unnamed_field": "Unbenanntes Feld", - "data_grid.context_menu.copy_as_csv": "Als CSV kopieren", - "data_grid.context_menu.copy_as_delete": "Als DELETE kopieren", - "data_grid.context_menu.copy_as_insert": "Als INSERT kopieren", - "data_grid.context_menu.copy_as_json": "Als JSON kopieren", - "data_grid.context_menu.copy_as_markdown": "Als Markdown kopieren", - "data_grid.context_menu.copy_as_update": "Als UPDATE kopieren", - "data_grid.context_menu.copy_column_data": "Spaltendaten kopieren", - "data_grid.context_menu.copy_field_name": "Feldnamen kopieren", - "data_grid.context_menu.copy_row_data": "Zeilendaten kopieren", - "data_grid.context_menu.current_marker": "Aktuell", - "data_grid.context_menu.current_row": "Aktuelle Zeile", - "data_grid.context_menu.current_cell": "Aktuelle Zelle", - "data_grid.context_menu.edit_section": "Bearbeiten", - "data_grid.context_menu.edit_row": "Diese Zeile bearbeiten", - "data_grid.context_menu.copy_row_as_new": "Diese Zeile als neue Zeile kopieren", - "data_grid.context_menu.undo_cell_change": "Änderung dieser Zelle zurücknehmen", - "data_grid.context_menu.export_as_csv": "Als CSV exportieren", - "data_grid.context_menu.export_as_excel": "Als Excel exportieren", - "data_grid.context_menu.export_as_html": "Als HTML exportieren", - "data_grid.context_menu.export_as_json": "Als JSON exportieren", - "data_grid.context_menu.export_selected": "Ausgewählte Daten exportieren", - "data_grid.context_menu.fill_to_selected_rows": "In ausgewählte Zeilen füllen ({{count}})", - "data_grid.context_menu.hide_column": "Dieses Feld ausblenden", - "data_grid.context_menu.hide_column_comment": "Feldkommentar ausblenden", - "data_grid.context_menu.hide_column_type": "Feldtyp ausblenden", - "data_grid.context_menu.paste_copied_columns": "Kopierte Spalten einfügen (gleiche Namen)", - "data_grid.context_menu.paste_row_as_new": "Als neue Zeile einfügen", - "data_grid.context_menu.paste_row_as_new_count": "Als neue Zeile einfügen ({{count}})", - "data_grid.context_menu.show_column_comment": "Feldkommentar anzeigen", - "data_grid.context_menu.show_column_type": "Feldtyp anzeigen", - "data_grid.context_menu.sort_ascending": "Aufsteigend sortieren", - "data_grid.context_menu.sort_descending": "Absteigend sortieren", - "data_grid.context_menu.sort_section": "Sortierung", - "data_grid.copy_sql.error.missing_safe_where": "Das aktuelle Resultset hat keinen Primärschlüssel oder eindeutigen Schlüssel, mit dem die Zeile sicher identifiziert werden kann, und deckt nicht alle Tabellenspalten ab. Daher kann keine WHERE-Bedingung erzeugt werden.", - "data_grid.copy_sql.error.missing_table_name": "Das aktuelle Resultset ist keinem eindeutigen Tabellennamen zugeordnet. Daher kann kein {{mode}} SQL erzeugt werden.", - "data_grid.copy_sql.error.no_copyable_fields": "Das aktuelle Resultset enthält keine kopierbaren Felder. Daher kann kein SQL erzeugt werden.", - "data_grid.data_panel.click_cell_description": "Klicke auf eine Tabellenzelle, um die vollständigen Daten als Vorschau zu sehen", - "data_grid.data_panel.click_cell_title": "Zelle anklicken, um Daten anzuzeigen", - "data_grid.data_panel.title": "Datenvorschau", - "data_grid.ddl.copy": "DDL kopieren", - "data_grid.ddl.layout_bottom": "Unten", - "data_grid.ddl.layout_side": "Seitenleiste", - "data_grid.ddl.loading": "DDL wird geladen...", - "data_grid.ddl.reload": "Neu laden", - "data_grid.ddl.sidebar_aria": "Tabellen-DDL-Seitenleiste", - "data_grid.ddl.view": "DDL anzeigen", - "data_grid.error_boundary.description": "Beim Rendern des Datenrasters ist ein Fehler aufgetreten. Das Datenformat ist möglicherweise ungültig.", - "data_grid.error_boundary.retry": "Erneut versuchen", - "data_grid.error_boundary.title": "Renderfehler", - "data_grid.export.all_data": "Alle Daten exportieren", - "data_grid.export.all_rows": "Alle Zeilen exportieren ({{count}} Zeilen)", - "data_grid.export.all_rows_requery": "Alles exportieren (Abfrage erneut ausführen)", - "data_grid.export.current_page": "Aktuelle Seite exportieren ({{count}} Zeilen)", - "data_grid.export.current_page_rows": "Aktuelle Seite exportieren ({{count}} Zeilen)", - "data_grid.export.group_filtered_results": "Gefilterte Ergebnisse", - "data_grid.export.group_full_table": "Gesamte Tabelle", - "data_grid.export.no_selection_prompt": "Es sind keine Zeilen ausgewählt. Wähle einen Exportbereich:", - "data_grid.export.options_title": "Exportoptionen", - "data_grid.export.query_result_title": "Abfrageergebnisse exportieren", - "data_grid.export.scope_prompt": "Exportbereich auswählen:", - "data_grid.export.selected_rows": "Ausgewählte Zeilen exportieren ({{count}} Zeilen)", - "data_grid.table_fallback.query_result": "Abfrageergebnis", - "data_grid.metadata_view.fields_badge": "Felder", - "data_grid.metadata_view.er_table_badge": "Tabelle", - "data_grid.metadata_view.er_field_badge": "Feld", - "data_grid.metadata_view.er_current_badge": "Aktuelle Tabelle", - "data_grid.metadata_view.er_reference_badge": "Referenziert", - "data_grid.metadata_view.er_referenced_by_badge": "Referenziert von", - "data_grid.metadata_view.er_related_table_count": "{{count}} verknuepfte Tabellen", - "data_grid.metadata_view.er_relation_count": "{{count}} Beziehungen", - "data_grid.metadata_view.er_hidden_columns": "{{count}} weitere Felder", - "data_grid.metadata_view.er_expand_hidden_columns": "{{count}} weitere Felder anzeigen", - "data_grid.metadata_view.er_expand_fields": "Alle Felder erweitern", - "data_grid.metadata_view.er_collapse_fields": "Feldzusammenfassung einklappen", - "data_grid.metadata_view.er_relation_depth": "Ebene {{count}}", - "data_grid.metadata_view.er_expand_relations": "Naechste Ebene erweitern", - "data_grid.metadata_view.er_reset_relations": "Auf eine Ebene zuruecksetzen", - "data_grid.metadata_view.er_empty": "Fuer diese Tabelle wurden keine Fremdschluesselbeziehungen gefunden", - "data_grid.metadata_view.er_partial_warning": "Ein Teil der Beziehungen konnte nicht geladen werden. Das Diagramm ist moeglicherweise unvollstaendig.", - "data_grid.metadata_view.er_open_table": "Tabelle oeffnen", - "data_grid.metadata_view.field_count": "{{count}} Felder", - "data_grid.metadata_view.column_name": "Name", - "data_grid.metadata_view.column_type": "Typ", - "data_grid.metadata_view.default_value": "Standardwert", - "data_grid.metadata_view.comment": "Kommentar", - "data_grid.filter.add_condition": "Bedingung hinzufügen", - "data_grid.filter.add_sort": "Sortierung hinzufügen", - "data_grid.filter.apply": "Anwenden", - "data_grid.filter.apply_where": "WHERE anwenden", - "data_grid.filter.clear": "Leeren", - "data_grid.filter.custom_where_placeholder": "Benutzerdefinierten WHERE-Ausdruck eingeben (ohne WHERE), z. B.: status IN ('A','B')", - "data_grid.filter.disable_all": "Alle deaktivieren", - "data_grid.filter.enable_all": "Alle aktivieren", - "data_grid.filter.enabled": "Aktiviert", - "data_grid.filter.end_value_placeholder": "Endwert", - "data_grid.filter.first_condition": "Erste", - "data_grid.filter.invalid_quick_where": "WHERE-Bedingungen dürfen keine Semikolons oder SQL-Kommentare enthalten", - "data_grid.filter.list_values_placeholder": "Mehrere Werte durch Kommas oder Zeilenumbrüche trennen", - "data_grid.filter.logic.and": "Und (AND)", - "data_grid.filter.logic.or": "Oder (OR)", - "data_grid.filter.mongodb_query_placeholder": "MongoDB-JSON-Abfrageobjekt eingeben, z. B. {\"status\":\"A\"}", - "data_grid.filter.no_value_placeholder": "Kein Wert erforderlich", - "data_grid.filter.op.between": "Zwischen", - "data_grid.filter.op.contains": "Enthält", - "data_grid.filter.op.custom": "[Benutzerdefiniert]", - "data_grid.filter.op.ends_with": "Endet mit", - "data_grid.filter.op.in_list": "In Liste", - "data_grid.filter.op.is_empty": "Ist leer", - "data_grid.filter.op.is_not_empty": "Ist nicht leer", - "data_grid.filter.op.is_not_null": "Ist nicht NULL", - "data_grid.filter.op.is_null": "Ist NULL", - "data_grid.filter.op.not_between": "Nicht zwischen", - "data_grid.filter.op.not_contains": "Enthält nicht", - "data_grid.filter.op.not_ends_with": "Endet nicht mit", - "data_grid.filter.op.not_in_list": "Nicht in Liste", - "data_grid.filter.op.not_starts_with": "Beginnt nicht mit", - "data_grid.filter.op.starts_with": "Beginnt mit", - "data_grid.filter.quick_where_placeholder": "Bedingung nach WHERE eingeben, z. B. status = 1 AND name LIKE 'A%'", - "data_grid.filter.search_field_placeholder": "Feldnamen suchen", - "data_grid.filter.select_sort_field_placeholder": "Sortierfeld auswählen", - "data_grid.filter.sort_asc": "Aufsteigend", - "data_grid.filter.sort_desc": "Absteigend", - "data_grid.filter.sort_label": "Sortierung", - "data_grid.filter.start_value_placeholder": "Startwert", - "data_grid.filter.suggestion.column": "Spalte", - "data_grid.filter.suggestion.keyword": "Schlüsselwort", - "data_grid.filter.suggestion.operator": "Operator", - "data_grid.filter.then_label": "Dann", - "data_grid.json_editor.apply_changes": "Änderungen anwenden", - "data_grid.json_editor.description": "In der aktuellen Ergebnisreihenfolge bearbeiten. Im JSON-Modus können keine Datensätze hinzugefügt oder gelöscht werden. Verwende dafür den Tabellenmodus.", - "data_grid.json_editor.format": "JSON formatieren", - "data_grid.json_editor.invalid_format": "Ungültiges JSON-Format: {{error}}", - "data_grid.json_editor.title": "JSON-Ergebnismenge bearbeiten", - "data_grid.message.cell_edit_mode_entered": "Zellbearbeitung aktiviert. Zum Auswählen mehrerer Zellen ziehen.", - "data_grid.message.cell_edit_mode_exited": "Zellbearbeitung deaktiviert.", - "data_grid.message.change_set_build_failed": "Änderungssatz konnte nicht erstellt werden", - "data_grid.message.change_set_build_failed_detail": "Änderungssatz konnte nicht erstellt werden: {{detail}}", - "data_grid.message.column_order_reset": "Standard-Spaltenreihenfolge wiederhergestellt", - "data_grid.message.column_quick_find_not_found": "Feldspalte nicht gefunden: {{query}}", - "data_grid.message.column_quick_find_not_rendered": "Die Feldspalte \"{{column}}\" wird derzeit nicht gerendert und kann daher nicht gefunden werden.", - "data_grid.message.column_visibility_reset": "Alle Spalten wiederhergestellt", - "data_grid.message.auto_commit_failed": "Automatische Übernahme fehlgeschlagen: {{detail}}", - "data_grid.message.auto_commit_success": "Automatisch übernommen", - "data_grid.message.commit_failed": "Übernahme fehlgeschlagen: {{detail}}", - "data_grid.message.undo_added_row_hint": "Neue Zeilen lassen sich über „Auswahl löschen“ oder einen Rollback der ganzen Tabelle zurücknehmen.", - "data_grid.message.undo_cell_original_missing": "Die ursprünglichen Daten dieser Zelle wurden nicht gefunden, daher kann die Änderung nicht zurückgenommen werden.", - "data_grid.message.undo_cell_success": "Zelländerung zurückgenommen", - "data_grid.message.copied_columns": "{{count}} Spalten kopiert. Du kannst sie in Zielzeilen einfügen.", - "data_grid.message.copied_rows": "{{count}} Zeilen kopiert. Du kannst sie als neue Zeilen einfügen.", - "data_grid.message.copied_to_clipboard": "In die Zwischenablage kopiert", - "data_grid.message.copy_columns_first": "Zuerst Spaltenwerte kopieren", - "data_grid.message.copy_columns_same_row_only": "Beim Kopieren von Spaltenwerten nur Zellen aus einer Zeile auswählen", - "data_grid.message.copy_rows_first": "Zuerst Zeilen kopieren", - "data_grid.message.copy_sql_not_supported": "Diese Datenquelle unterstützt das Kopieren von SQL nicht. Verwende stattdessen JSON/CSV/Markdown.", - "data_grid.message.current_record_not_editable": "Der aktuelle Datensatz kann nicht bearbeitet werden", - "data_grid.message.current_row_no_copyable_content": "Die aktuelle Zeile enthält keine kopierbaren Inhalte", - "data_grid.message.ddl_copied": "DDL in die Zwischenablage kopiert", - "data_grid.message.ddl_copy_failed": "DDL konnte nicht kopiert werden", - "data_grid.message.ddl_load_failed": "DDL konnte nicht geladen werden", - "data_grid.message.ddl_missing_context": "Für die aktuelle Tabelle fehlen Verbindung oder Tabellenname, daher kann die DDL nicht angezeigt werden", - "data_grid.message.drag_select_cells_to_copy": "Zuerst die zu kopierenden Zellen durch Ziehen auswählen", - "data_grid.message.export_failed": "Export fehlgeschlagen: {{detail}}", - "data_grid.message.export_success": "Export abgeschlossen", - "data_grid.message.export_with_uncommitted_changes": "Es gibt nicht übernommene Änderungen. Der Export verwendet die sichtbaren Rasterdaten. Übernimm die Änderungen zuerst, wenn du vollständige Daten langer Felder benötigst.", - "data_grid.message.exporting": "Export läuft...", - "data_grid.message.exporting_all": "Alle Daten werden exportiert...", - "data_grid.message.exporting_rows": "{{count}} Zeilen werden exportiert...", - "data_grid.message.filled_cells": "{{count}} Zellen gefüllt", - "data_grid.message.filled_rows": "{{count}} Zeilen gefüllt", - "data_grid.message.current_field_not_editable": "Das aktuelle Feld ist nicht bearbeitbar", - "data_grid.message.filtered_export_not_supported": "Diese Datenquelle unterstützt den Export gefilterter Ergebnisse nicht", - "data_grid.message.filtered_export_uses_committed_data": "Es gibt nicht übernommene Änderungen. Der Export gefilterter Ergebnisse verwendet bereits übernommene Datenbankdaten.", - "data_grid.message.import_done": "Import abgeschlossen", - "data_grid.message.json_applied": "JSON-Änderungen wurden auf die aktuelle Ergebnismenge angewendet. Du kannst mit dem Übernehmen der Transaktion fortfahren.", - "data_grid.message.json_invalid": "Ungültiges JSON: {{detail}}", - "data_grid.message.json_parse_failed": "JSON konnte nicht geparst werden: {{detail}}", - "data_grid.message.json_record_count_mismatch": "Datensatzanzahl stimmt nicht überein: aktuell {{current}} Zeilen, JSON enthält {{json}} Zeilen. In diesem Modus keine Datensätze hinzufügen oder löschen.", - "data_grid.message.json_record_missing_row_key": "Datensatz {{index}} enthält keine Zeilenkennung und kann nicht angewendet werden", - "data_grid.message.json_record_not_object": "Datensatz {{index}} ist kein Objekt und kann nicht angewendet werden", - "data_grid.message.json_view_must_be_array": "Die JSON-Ansicht muss ein Array sein, dessen Elemente jeweils einem Datensatz entsprechen", - "data_grid.message.keep_one_visible_column": "Mindestens eine sichtbare Spalte beibehalten", - "data_grid.message.locate_record_to_edit": "Zuerst den zu bearbeitenden Datensatz suchen", - "data_grid.message.locator_column_value_empty": "Die Locator-Spalte {{column}} ist leer, deshalb können Änderungen nicht sicher gesendet werden.", - "data_grid.message.no_changes_to_commit": "Keine Änderungen zum Übernehmen", - "data_grid.message.no_copyable_cells": "Keine kopierbaren Zellen erkannt", - "data_grid.message.no_copyable_columns": "Keine kopierbaren Spalten erkannt", - "data_grid.message.no_copyable_rows": "Keine kopierbaren Zeilen erkannt", - "data_grid.message.no_data_changes": "Keine Daten geändert", - "data_grid.message.no_ddl_to_copy": "Keine DDL zum Kopieren", - "data_grid.message.no_field_name": "Feldname wurde nicht erkannt", - "data_grid.message.no_safe_locator": "Für dieses Resultset ist kein sicherer Zeilen-Locator verfügbar.", - "data_grid.message.no_filter_applied": "Derzeit ist keine Filterbedingung angewendet", - "data_grid.message.no_rows_selected": "Es sind keine Zeilen ausgewählt", - "data_grid.message.no_other_rows_to_fill": "Es gibt keine weiteren ausgewählten Zeilen zum Füllen", - "data_grid.message.no_pasteable_editable_fields": "Keine einfügbaren bearbeitbaren Felder verfügbar", - "data_grid.message.no_pasteable_rows": "Keine Zeilen zum Einfügen verfügbar", - "data_grid.message.pasted_columns_to_rows": "In {{rows}} Zeilen eingefügt, insgesamt {{cells}} Zellen", - "data_grid.message.pasted_rows_as_new": "{{count}} Zeilen als neue Zeilen eingefügt. Vor dem Übernehmen prüfen.", - "data_grid.message.preview_sql_failed": "SQL-Vorschau konnte nicht erzeugt werden", - "data_grid.message.preview_sql_failed_detail": "SQL-Vorschau konnte nicht erzeugt werden: {{detail}}", - "data_grid.preview_sql.copied": "Kopiert", - "data_grid.preview_sql.no_changes": "Keine Änderungen", - "data_grid.preview_sql.summary": "{{deletes}} DELETE, {{updates}} UPDATE, {{inserts}} INSERT", - "data_grid.preview_sql.title": "Änderungsvorschau", - "data_grid.message.result_set_no_copyable_content": "Die aktuelle Ergebnismenge enthält keine kopierbaren Inhalte", - "data_grid.message.saved": "Gespeichert", - "data_grid.message.select_cells_to_fill": "Zuerst zu füllende Zellen auswählen", - "data_grid.message.select_file_failed": "Datei konnte nicht ausgewählt werden: {{detail}}", - "data_grid.message.select_rows_to_copy": "Zuerst zu kopierende Zeilen auswählen", - "data_grid.message.select_rows_to_fill": "Zuerst zu füllende Zeilen auswählen", - "data_grid.message.select_same_row_cells_to_copy": "Zuerst Zellen derselben Zeile zum Kopieren auswählen", - "data_grid.message.select_target_rows": "Zuerst Zielzeilen auswählen", - "data_grid.message.selected_cells_no_update": "Ausgewählte Zellen müssen nicht aktualisiert werden", - "data_grid.message.selection_no_copyable_content": "Die aktuelle Auswahl enthält keine kopierbaren Inhalte", - "data_grid.message.target_row_not_found": "Zielzeile nicht gefunden. Aktualisieren und erneut versuchen.", - "data_grid.message.target_rows_cannot_only_source": "Die Zielzeilen dürfen nicht nur aus der Quellzeile bestehen. Wähle eine andere Zeile aus.", - "data_grid.message.target_rows_no_update": "Zielzeilen müssen nicht aktualisiert werden", - "data_grid.message.transaction_committed": "Transaktion übernommen", - "data_viewer.message.result_not_ready": "Die aktuelle Ergebnismenge ist noch nicht bereit. Laden Sie zuerst einmal Daten.", - "data_viewer.message.query_failed": "Abfrage fehlgeschlagen", - "data_viewer.message.query_timeout": "Die Abfrage hat das Verbindungstimeout überschritten und wurde unterbrochen. Erhöhen Sie das Verbindungstimeout oder verkleinern Sie den Abfragebereich und versuchen Sie es erneut.", - "data_viewer.message.duckdb_query_timeout": "Die DuckDB-Abfrage hat das Verbindungstimeout überschritten und wurde unterbrochen. Erhöhen Sie das Verbindungstimeout oder verkleinern Sie den Sortier-/Filterbereich und versuchen Sie es erneut.", - "data_viewer.message.connection_not_found": "Verbindung nicht gefunden", - "data_viewer.message.fetch_data_failed_detail": "Fehler beim Abrufen der Daten: {{detail}}", - "data_viewer.message.total_count_failed": "Gesamtanzahl konnte nicht ermittelt werden", - "data_viewer.message.total_count_failed_detail": "Gesamtanzahl konnte nicht ermittelt werden: {{detail}}", - "data_viewer.message.total_count_parse_failed": "Gesamtanzahl-Ergebnis konnte nicht ausgewertet werden", - "data_viewer.message.mongo_filter_invalid_detail": "MongoDB-Filterbedingung ist ungültig: {{detail}}", - "data_viewer.message.mongo_filter_parse_failed": "Analyse fehlgeschlagen", - "data_viewer.message.sort_buffer_retry_succeeded": "Der Sortierpuffer wurde automatisch erhöht und die Abfrage erfolgreich erneut ausgeführt.", - "data_viewer.read_only.reason.mongo_id_missing": "Im MongoDB-Ergebnis fehlt _id, deshalb können Änderungen nicht sicher gesendet werden.", - "data_viewer.read_only.reason.metadata_unavailable": "Metadaten zu Primärschlüssel oder eindeutigem Index konnten nicht geladen werden, deshalb können Änderungen nicht sicher gesendet werden.", - "data_viewer.read_only.reason.index_metadata_unavailable": "Metadaten zum eindeutigen Index konnten nicht geladen werden, deshalb können Änderungen nicht sicher gesendet werden.", - "data_viewer.read_only.reason.no_safe_locator": "Es wurde kein Primärschlüssel oder nutzbarer eindeutiger Index gefunden, deshalb können Änderungen nicht sicher gesendet werden.", - "data_viewer.read_only.reason.oracle_rowid_missing": "Es wurde kein Primärschlüssel oder nutzbarer eindeutiger Index gefunden, und Oracle ROWID fehlt im Ergebnis, deshalb können Änderungen nicht sicher gesendet werden.", - "data_viewer.read_only.reason.primary_key_column_missing": "Im Ergebnis fehlt die Primärschlüsselspalte {{columns}}, deshalb können Änderungen nicht sicher gesendet werden.", - "data_viewer.read_only.warning.table": "Tabelle {{target}} bleibt schreibgeschützt: {{reason}}", - "data_viewer.read_only.warning.collection": "Collection {{target}} bleibt schreibgeschützt: {{reason}}", - "data_viewer.sql_log.phase.main_query": "Hauptabfrage", - "data_viewer.sql_log.phase.complex_type_fallback_retry": "Fallback-Wiederholung für komplexe Typen", - "data_viewer.sql_log.phase.sort_buffer_retry": "Wiederholung ({{size}} sort_buffer)", - "definition_viewer.object.view": "Ansicht", - "definition_viewer.object.materialized_view": "Materialisierte Ansicht", - "definition_viewer.object.routine": "Funktion/Prozedur", - "definition_viewer.object.event": "Ereignis", - "definition_viewer.loading.view_definition": "Ansichtsdefinition wird geladen...", - "definition_viewer.loading.routine_definition": "Funktions-/Prozedurdefinition wird geladen...", - "definition_viewer.loading.event_definition": "Ereignisdefinition wird geladen...", - "definition_viewer.error.load_failed": "Laden fehlgeschlagen", - "definition_viewer.error.connection_not_found": "Datenbankverbindung nicht gefunden", - "definition_viewer.error.view_name_empty": "Ansichtsname ist leer", - "definition_viewer.error.event_name_empty": "Ereignisname ist leer", - "definition_viewer.error.routine_name_empty": "Funktions-/Prozedurname ist leer", - "definition_viewer.error.query_failed": "Definitionsabfrage fehlgeschlagen", - "definition_viewer.error.query_failed_detail": "Definitionsabfrage fehlgeschlagen: {{detail}}", - "definition_viewer.field.database": "Datenbank", - "definition_viewer.field.type": "Typ", - "definition_viewer.editor.unsupported_view_definition": "Dieser Datenbanktyp unterstützt das Anzeigen von Ansichtsdefinitionen nicht", - "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite unterstützt keine Verwaltung von Funktions-/Prozedurdefinitionen", - "definition_viewer.editor.unsupported_routine_definition": "Dieser Datenbanktyp unterstützt das Anzeigen von Funktions-/Prozedurdefinitionen nicht", - "definition_viewer.editor.unsupported_event_definition": "Dieser Datenbanktyp unterstützt das Anzeigen von Ereignisdefinitionen nicht", - "definition_viewer.editor.unsupported_object_definition": "Diese Objektdefinition wird nicht unterstützt", - "definition_viewer.editor.view_definition_not_found": "Ansichtsdefinition nicht gefunden", - "definition_viewer.editor.routine_definition_not_found": "Funktions-/Prozedurdefinition nicht gefunden", - "definition_viewer.editor.event_definition_not_found": "Ereignisdefinition nicht gefunden", - "definition_viewer.editor.object_definition_not_found": "{{object}}definition nicht gefunden", - "definition_viewer.editor.metadata_fallback.header": "Die aktuelle Datenquelle hat keinen ausführbaren Definitionstext zurückgegeben; Metadaten wurden zurückgegeben", - "definition_viewer.editor.metadata_fallback.name_label": "Name", - "definition_viewer.editor.metadata_fallback.type_label": "Typ", - "definition_viewer.editor.event_fragment_fallback.header": "Die aktuelle Datenquelle hat keine vollständige CREATE EVENT-Anweisung zurückgegeben; ein Ereignisdefinitionsfragment wurde zurückgegeben", - "definition_viewer.editor.sphinx.empty_result": "Die aktuelle Sphinx-Instanz{{version}} hat keine {{object}}definition zurückgegeben.", - "definition_viewer.editor.sphinx.compat_queries_hint": "Mehrere Kompatibilitätsabfragen wurden ausgeführt. Ursache können Versionsbeschränkungen oder ein nicht unterstützter Objekttyp sein.", - "definition_viewer.editor.sphinx.unsupported_query": "Die aktuelle Sphinx-Instanz{{version}} unterstützt das Abfragen von {{object}}definitionen nicht.", - "definition_viewer.editor.sphinx.failed_message_label": "Zurückgegebene Fehlermeldung", - "definition_viewer.editor.sphinx.failed_message_unknown": "Zurückgegebene Fehlermeldung: Unbekannter Fehler", - "definition_viewer.editor.sphinx.version_suffix": " (Version: {{version}})", - "trigger_viewer.loading.definition": "Triggerdefinition wird geladen...", - "trigger_viewer.error.load_failed": "Laden fehlgeschlagen", - "trigger_viewer.error.connection_not_found": "Datenbankverbindung nicht gefunden", - "trigger_viewer.error.trigger_name_empty": "Triggername ist leer", - "trigger_viewer.error.query_failed": "Triggerdefinitionsabfrage fehlgeschlagen", - "trigger_viewer.error.query_failed_detail": "Triggerdefinitionsabfrage fehlgeschlagen: {{detail}}", - "trigger_viewer.field.trigger": "Trigger", - "trigger_viewer.field.database": "Datenbank", - "trigger_viewer.editor.unsupported.duckdb": "DuckDB unterstützt keine Trigger", - "trigger_viewer.editor.unsupported.tdengine": "TDengine unterstützt keine Trigger", - "trigger_viewer.editor.unsupported.mongodb": "MongoDB unterstützt keine Trigger", - "trigger_viewer.editor.unsupported.generic": "Dieser Datenbanktyp unterstützt das Anzeigen von Triggerdefinitionen nicht", - "trigger_viewer.editor.definition_not_found": "Triggerdefinition nicht gefunden", - "trigger_viewer.editor.sphinx.version_suffix": " (Version: {{version}})", - "trigger_viewer.editor.sphinx.empty_result": "Die aktuelle Sphinx-Instanz{{version}} hat keine Triggerdefinition zurückgegeben.", - "trigger_viewer.editor.sphinx.compat_queries_hint": "Mehrere Kompatibilitätsabfragen wurden ausgeführt. Ursache können Versionsbeschränkungen oder ein nicht unterstützter Objekttyp sein.", - "trigger_viewer.editor.sphinx.unsupported_query": "Die aktuelle Sphinx-Instanz{{version}} unterstützt das Abfragen von Triggerdefinitionen nicht.", - "trigger_viewer.editor.sphinx.failed_message_label": "Zurückgegebene Fehlermeldung", - "trigger_viewer.editor.sphinx.failed_message_unknown": "Zurückgegebene Fehlermeldung: Unbekannter Fehler", - "data_grid.modal.export_options.all_data": "Alle Daten exportieren", - "data_grid.modal.export_options.current_page": "Aktuelle Seite exportieren ({{count}} Zeilen)", - "data_grid.modal.export_options.filtered_results": "Gefilterte Ergebnisse", - "data_grid.modal.export_options.no_rows_selected": "Es sind keine Zeilen ausgewählt. Wähle einen Exportbereich:", - "data_grid.modal.export_options.title": "Exportoptionen", - "data_grid.modal.export_options.whole_table": "Ganze Tabelle", - "data_grid.page_find.next": "Weiter", - "data_grid.page_find.placeholder": "Auf aktueller Seite suchen...", - "data_grid.page_find.previous": "Zurück", - "data_grid.page_find.summary": "{{occurrences}} Treffer / {{cells}} Zellen", - "data_grid.page_find.tooltip": "Sucht nur in den auf der aktuellen Seite geladenen Zeilen. WHERE-Bedingungen bleiben unverändert.", - "data_grid.preview_panel.no_cell_description": "Tabellenzelle anklicken, um die vollständigen Daten anzuzeigen", - "data_grid.preview_panel.no_cell_title": "Zelle anklicken, um Daten anzuzeigen", - "data_grid.record_view.edit_current": "Aktuellen Datensatz bearbeiten", - "data_grid.record_view.edit_json": "JSON bearbeiten", - "data_grid.record_view.empty": "Keine Daten in der aktuellen Ergebnismenge", - "data_grid.record_view.json_record_count": "Aktuelle Ergebnismenge: {{count}} Datensätze", - "data_grid.record_view.next": "Weiter", - "data_grid.record_view.previous": "Zurück", - "data_grid.record_view.record_position": "Datensatz {{current}} / {{total}}", - "data_grid.pagination.jump_action": "Los", - "data_grid.pagination.jump_aria": "Zur Seite springen", - "data_grid.pagination.jump_label": "Springen", - "data_grid.pagination.page.current": "Seite {{current}}", - "data_grid.pagination.page.known": "Seite {{current}} / {{totalPages}}", - "data_grid.pagination.page_size_aria": "Zeilen pro Seite", - "data_grid.pagination.page_size_option": "{{count}} Zeilen / Seite", - "data_grid.pagination.result_set": "Ergebnismenge", - "data_grid.pagination.summary.approximate": "Aktuell {{current}} Zeilen / etwa {{total}} Zeilen", - "data_grid.pagination.summary.cancelled": "Aktuell {{current}} Zeilen / Zählung abgebrochen", - "data_grid.pagination.summary.counting": "Aktuell {{current}} Zeilen / Gesamtzahl wird gezählt...", - "data_grid.pagination.summary.counting_exact": "Aktuell {{current}} Zeilen / exakte Gesamtzahl wird gezählt...", - "data_grid.pagination.summary.empty": "Aktuell 0 Zeilen / insgesamt 0 Zeilen", - "data_grid.pagination.summary.known": "Aktuell {{current}} Zeilen / insgesamt {{total}} Zeilen", - "data_grid.pagination.summary.not_counted": "Aktuell {{current}} Zeilen / Gesamtzahl nicht gezählt", - "data_grid.secondary.column_display": "Spaltenanzeige", - "data_grid.secondary.data_preview": "Datenvorschau", - "data_grid.secondary.er_diagram": "ER-Diagramm", - "data_grid.secondary.jump_column": "Zur Spalte springen", - "data_grid.secondary.live": "live", - "data_grid.secondary.object_design": "Objektdesign", - "data_grid.embedded_designer.title": "Tabelle entwerfen ({{tableName}})", - "data_grid.secondary.pending_changes": "{{count}} ausstehend", - "data_grid.secondary.row_count": "{{count}} Zeilen", - "data_grid.secondary.view_ddl": "DDL anzeigen", - "data_grid.row_editor.popup_edit": "Im Popup bearbeiten", - "data_grid.row_editor.title": "Zeile bearbeiten", - "data_grid.toolbar.add_row": "Zeile hinzufügen", - "data_grid.toolbar.ai_insight": "AI-Datenanalyse", - "data_grid.toolbar.ai_insight_short": "AI-Analyse", - "data_grid.toolbar.ai_insight_tooltip": "AI bitten, die Daten der aktuellen Abfrageseite zu analysieren", - "data_grid.toolbar.batch_fill": "Stapelfüllung ({{count}})", - "data_grid.toolbar.cancel_count": "Zählung abbrechen", - "data_grid.toolbar.cancel_count_tooltip": "Diese exakte Gesamtzählung abbrechen. Das aktuelle Browsen bleibt unbeeinflusst.", - "data_grid.toolbar.cell_editor": "Zelleditor", - "data_grid.toolbar.commit": "Transaktion übernehmen ({{count}})", - "data_grid.toolbar.commit_label": "Transaktion übernehmen", - "data_grid.toolbar.commit_delay.seconds": "{{seconds}}s", - "data_grid.toolbar.commit_mode.auto": "Automatisch übernehmen", - "data_grid.toolbar.commit_mode.auto_countdown": "Übernahme in {{seconds}}s", - "data_grid.toolbar.commit_mode.manual": "Manuell übernehmen", - "data_grid.toolbar.commit_mode.tooltip": "Steuert, wie Änderungen an Tabellendaten übernommen werden. Manuelles Übernehmen ist sicherer; automatisches Übernehmen startet nach der gewählten Verzögerung seit der letzten Änderung.", - "data_grid.toolbar.copied_columns_count": "{{count}} kopierte Spalten", - "data_grid.toolbar.copy": "Kopieren", - "data_grid.toolbar.copy_row": "Zeile kopieren", - "data_grid.toolbar.copy_selection": "Auswahl kopieren ({{count}})", - "data_grid.toolbar.copy_selection_columns": "Spaltenwerte der Auswahl kopieren ({{count}})", - "data_grid.toolbar.count_total": "Gesamtzahl zählen", - "data_grid.toolbar.count_total_tooltip": "Exakte Gesamtzahl mit dem aktuellen Filter zählen", - "data_grid.toolbar.delete_selected": "Auswahl löschen", - "data_grid.toolbar.export": "Exportieren", - "data_grid.toolbar.filter": "Filtern", - "data_grid.toolbar.import": "Importieren", - "data_grid.toolbar.paste_row": "Zeile einfügen", - "data_grid.toolbar.paste_row_count": "Zeile einfügen ({{count}})", - "data_grid.toolbar.paste_to_selected_rows": "In ausgewählte Zeilen einfügen ({{count}})", - "data_grid.toolbar.preview_sql": "SQL-Vorschau", - "data_grid.toolbar.preview_sql_generate": "SQL-Vorschau generieren", - "data_grid.toolbar.refresh": "Aktualisieren", - "data_grid.toolbar.rollback": "Zurückrollen", - "data_grid.toolbar.selected_count": "{{count}} ausgewählt", - "data_grid.toolbar.undo_delete": "Löschen rückgängig", - "data_grid.view.edit_current_record": "Aktuellen Datensatz bearbeiten", - "data_grid.view.edit_json": "JSON bearbeiten", - "data_grid.view.empty_result": "Die aktuelle Ergebnismenge enthält keine Daten", - "data_grid.view.next_record": "Nächster Datensatz", - "data_grid.view.previous_record": "Vorheriger Datensatz", - "data_grid.view.record_count": "Aktuelle Ergebnismenge: {{count}} Datensätze", - "data_grid.view.record_position": "Datensatz {{current}} / {{total}}", - "data_grid.view.result_view": "Ergebnisansicht", - "data_grid.view.table": "Tabelle", - "data_grid.view.text": "Text", - "table_designer.action.add": "Hinzufügen", - "table_designer.action.add_after_selected": "Nach ausgewählter Spalte hinzufügen", - "table_designer.action.add_column": "Spalte hinzufügen", - "table_designer.action.apply": "Anwenden", - "table_designer.action.cancel": "Abbrechen", - "table_designer.action.copy_selected_to_new_table": "Auswahl in neue Tabelle kopieren", - "table_designer.action.create": "Erstellen", - "table_designer.action.create_table": "Neue Tabelle erstellen", - "table_designer.action.delete": "Löschen", - "table_designer.action.edit": "Bearbeiten", - "table_designer.action.execute": "Ausführen", - "table_designer.action.refresh": "Aktualisieren", - "table_designer.action.refresh_anyway": "Trotzdem aktualisieren", - "table_designer.action.save": "Speichern", - "table_designer.action.table_comment": "Tabellenkommentar", - "table_designer.action.view_statement": "Anweisung anzeigen", - "table_designer.column.actions": "Aktionen", - "table_designer.column.auto_increment": "Auto-Inkrement", - "table_designer.column.comment": "Kommentar", - "table_designer.column.default": "Standardwert", - "table_designer.column.name": "Name", - "table_designer.column.not_null": "NOT NULL", - "table_designer.column.primary_key": "Primärschlüssel", - "table_designer.column.type": "Typ", - "table_designer.empty.triggers": "Diese Tabelle hat keine Trigger", - "table_designer.fallback.empty": "(leer)", - "table_designer.fallback.unknown_error": "Unbekannter Fehler", - "table_designer.fallback.unnamed_foreign_key": "(unbenannter Fremdschlüssel)", - "table_designer.fallback.unnamed_index": "(unbenannter Index)", - "table_designer.foreign_key.column.constraint_name": "Constraint-Name", - "table_designer.foreign_key.column.fields": "Spalten", - "table_designer.foreign_key.column.ref_fields": "Referenzspalten", - "table_designer.foreign_key.column.ref_table": "Referenztabelle", - "table_designer.index.column.fields": "Spalten", - "table_designer.index.column.name": "Indexname", - "table_designer.index.column.type": "Indextyp", - "table_designer.index.column.uniqueness": "Eindeutigkeit", - "table_designer.index.kind.fulltext": "Volltextindex", - "table_designer.index.kind.normal": "Normaler Index", - "table_designer.index.kind.normal_nonclustered": "Normaler Index (nicht geclustert)", - "table_designer.index.kind.primary_clustered": "Primärschlüsselindex (geclustert)", - "table_designer.index.kind.spatial": "Räumlicher Index", - "table_designer.index.kind.unique": "Eindeutiger Index", - "table_designer.index.uniqueness.normal": "Normal", - "table_designer.index.uniqueness.unique": "Eindeutig", - "table_designer.label.create_statement": "CREATE-Anweisung für {{name}}", - "table_designer.label.create_statement_plain": "CREATE-Anweisung", - "table_designer.message.add_at_least_one_column": "Fügen Sie mindestens eine Spalte hinzu", - "table_designer.message.columns_copied_to_new_table": "{{count}} Spalten wurden in die neue Tabelle {{table}} kopiert", - "table_designer.message.connection_not_found": "Verbindung nicht gefunden", - "table_designer.message.delete_failed": "Löschen fehlgeschlagen: {{detail}}", - "table_designer.message.drop_old_trigger_failed": "Alter Trigger konnte nicht gelöscht werden: {{detail}}", - "table_designer.message.execution_failed": "Ausführung fehlgeschlagen: {{detail}}", - "table_designer.message.execution_failed_plain": "Ausführung fehlgeschlagen", - "table_designer.message.execution_failed_prefix": "Ausführung fehlgeschlagen: ", - "table_designer.message.foreign_key_column_count_mismatch": "Die Anzahl der lokalen Spalten muss mit der Anzahl der Referenzspalten übereinstimmen", - "table_designer.message.foreign_key_created": "Fremdschlüssel erstellt", - "table_designer.message.foreign_key_delete_unsupported": "Diese Datenbank unterstützt das Löschen dieses Fremdschlüssels hier nicht", - "table_designer.message.foreign_key_deleted": "Fremdschlüssel gelöscht", - "table_designer.message.foreign_key_maintenance_unsupported": "Diese Datenbank unterstützt die Fremdschlüsselpflege hier nicht", - "table_designer.message.foreign_key_name_exists": "Fremdschlüssel-Constraint existiert bereits: {{name}}", - "table_designer.message.foreign_key_name_required": "Geben Sie einen Namen für den Fremdschlüssel-Constraint ein", - "table_designer.message.foreign_key_updated": "Fremdschlüssel aktualisiert", - "table_designer.message.index_created": "Index erstellt", - "table_designer.message.index_create_sql_unavailable": "SQL zum Erstellen des Index kann nicht generiert werden", - "table_designer.message.index_create_sql_placeholder": "SQL zum Erstellen des Index ist nicht verfügbar", - "table_designer.message.index_delete_named_unsupported": "Diese Datenbank unterstützt das Löschen des Index \"{{name}}\" nicht", - "table_designer.message.index_delete_unsupported": "Diese Datenbank unterstützt das Löschen dieses Index nicht", - "table_designer.message.index_deleted": "Index gelöscht", - "table_designer.message.index_kind_unsupported": "Diese Datenbank unterstützt diesen Indextyp nicht", - "table_designer.message.index_maintenance_unsupported": "Diese Datenbank unterstützt die Indexpflege hier nicht", - "table_designer.message.index_name_exists": "Indexname existiert bereits: {{name}}", - "table_designer.message.index_name_required": "Geben Sie einen Indexnamen ein", - "table_designer.message.index_restore_failed": "{{detail}}; Wiederherstellung des ursprünglichen Index fehlgeschlagen: {{restoreDetail}}", - "table_designer.message.index_restore_unavailable": "{{detail}}; der ursprüngliche Index konnte nicht automatisch wiederhergestellt werden. Bitte prüfen Sie ihn zeitnah.", - "table_designer.message.index_restored_after_failure": "{{detail}}; der ursprüngliche Index wurde automatisch wiederhergestellt.", - "table_designer.message.index_updated": "Index aktualisiert", - "table_designer.message.indexes_deleted": "{{count}} Indizes gelöscht", - "table_designer.message.load_columns_failed": "Spalten konnten nicht geladen werden: {{detail}}", - "table_designer.message.no_changes_detected": "Keine Änderungen erkannt", - "table_designer.message.no_copyable_columns": "Keine kopierbaren Spalten ausgewählt", - "table_designer.message.no_index_changes": "Keine Indexänderungen erkannt", - "table_designer.message.only_normal_unique_index_supported": "Diese Datenbank unterstützt nur die Pflege normaler und eindeutiger Indizes", - "table_designer.message.ref_columns_required": "Geben Sie mindestens eine Referenzspalte ein", - "table_designer.message.ref_table_required": "Geben Sie eine Referenztabelle ein", - "table_designer.message.relational_index_unsupported": "Diese Datenquelle unterstützt keine relationalen Indizes", - "table_designer.message.schema_saved_alter": "Tabellenstruktur aktualisiert.", - "table_designer.message.schema_saved_create": "Tabelle erstellt.", - "table_designer.message.select_at_least_one_column": "Wählen Sie mindestens eine Spalte aus", - "table_designer.message.select_column_before_insert": "Wählen Sie vor dem Einfügen eine Spalte aus.", - "table_designer.message.select_columns_to_copy": "Wählen Sie zuerst die zu kopierenden Spalten aus", - "table_designer.message.select_index_to_delete": "Wählen Sie zuerst einen zu löschenden Index aus", - "table_designer.message.select_local_columns": "Wählen Sie mindestens eine lokale Spalte aus", - "table_designer.message.select_one_foreign_key": "Wählen Sie zuerst einen Fremdschlüssel aus", - "table_designer.message.select_one_index": "Wählen Sie zuerst einen Index aus", - "table_designer.message.statement_execution_failed_prefix": "Anweisung {{current}}/{{total}} fehlgeschlagen: ", - "table_designer.message.switch_index_kind": "Stellen Sie die Indexkategorie auf {{kind}}-Index um", - "table_designer.message.table_comment_unsupported": "Diese Datenbank unterstützt das Bearbeiten von Tabellenkommentaren hier nicht", - "table_designer.message.table_comment_updated": "Tabellenkommentar aktualisiert", - "table_designer.message.table_name_required": "Geben Sie einen Tabellennamen ein", - "table_designer.message.target_table_required": "Geben Sie den Namen der Zieltabelle ein", - "table_designer.message.trigger_created": "Trigger erstellt", - "table_designer.message.trigger_deleted": "Trigger gelöscht", - "table_designer.message.trigger_updated": "Trigger aktualisiert", - "table_designer.modal.column_comment_title": "Spaltenkommentar", - "table_designer.modal.column_comment_title_named": "Spaltenkommentar - {{name}}", - "table_designer.modal.confirm_sql_title": "SQL-Änderungen bestätigen", - "table_designer.modal.copy_columns_title": "Ausgewählte Spalten in neue Tabelle kopieren", - "table_designer.modal.delete_foreign_key_content": "Fremdschlüssel-Constraint \"{{name}}\" löschen?", - "table_designer.modal.delete_foreign_key_title": "Fremdschlüssel löschen", - "table_designer.modal.delete_index_many": "Diese {{count}} Indizes löschen?\n{{names}}", - "table_designer.modal.delete_index_one": "Index {{names}} löschen?", - "table_designer.modal.delete_index_title": "Index löschen", - "table_designer.modal.delete_trigger_content": "Trigger \"{{name}}\" löschen? Dies kann nicht rückgängig gemacht werden.", - "table_designer.modal.delete_trigger_title": "Trigger löschen", - "table_designer.modal.foreign_key_create_title": "Fremdschlüssel hinzufügen", - "table_designer.modal.foreign_key_edit_title": "Fremdschlüssel bearbeiten", - "table_designer.modal.index_create_title": "Index hinzufügen", - "table_designer.modal.index_edit_title": "Index bearbeiten", - "table_designer.modal.table_comment_title": "Tabellenkommentar bearbeiten", - "table_designer.modal.trigger_create_title": "Trigger hinzufügen", - "table_designer.modal.trigger_detail_title": "Triggerdetails", - "table_designer.modal.trigger_detail_title_named": "Trigger: {{name}}", - "table_designer.modal.trigger_edit_title": "Trigger bearbeiten", - "table_designer.modal.unsaved_changes_content": "Beim Aktualisieren gehen die ungespeicherten Spaltenänderungen im aktuellen Entwurf verloren. Trotzdem aktualisieren und den Entwurf überschreiben?", - "table_designer.modal.unsaved_changes_title": "Ungespeicherte Spaltenänderungen", - "table_designer.notice.foreign_key_readonly": "Diese Datenbank unterstützt das Bearbeiten von Fremdschlüsseln hier nicht. Nur Ansicht.", - "table_designer.notice.foreign_key_replace_hint": "Beim Bearbeiten eines Fremdschlüssels wird zuerst der alte Fremdschlüssel gelöscht und danach der neue erstellt.", - "table_designer.notice.index_readonly": "Diese Datenbank unterstützt das Bearbeiten von Indizes hier nicht. Nur Ansicht.", - "table_designer.notice.index_restore_hint": "Wenn beim Bearbeiten eines Index das Erstellen des neuen Index fehlschlägt, versucht das System den ursprünglichen Index wiederherzustellen.", - "table_designer.notice.sql_irreversible": "Prüfen Sie das SQL sorgfältig. Die Ausführung kann nicht rückgängig gemacht werden.", - "table_designer.notice.sql_statement_irreversible": "Prüfen Sie die SQL-Anweisung sorgfältig. Die Ausführung kann nicht rückgängig gemacht werden.", - "table_designer.notice.trigger_replace_hint": "Beim Bearbeiten eines Triggers wird zuerst der ursprüngliche Trigger gelöscht und danach ein neuer erstellt.", - "table_designer.option.default": "Standard", - "table_designer.option.recommended_suffix": "(Empfohlen)", - "table_designer.placeholder.column_comment": "Spaltenkommentar eingeben", - "table_designer.placeholder.foreign_key_name": "Name des Fremdschlüssel-Constraints, z. B. fk_order_user", - "table_designer.placeholder.index_columns": "Indexspalten auswählen; die Auswahlreihenfolge wird verwendet", - "table_designer.placeholder.index_name": "Indexname, z. B. idx_user_name", - "table_designer.placeholder.local_columns": "Lokale Spalten auswählen; die Reihenfolge muss zu den Referenzspalten passen", - "table_designer.placeholder.primary_index_name": "Primärschlüsselindex verwendet festen Namen: PRIMARY", - "table_designer.placeholder.ref_columns": "Referenzspalten eingeben; mehrere Werte möglich", - "table_designer.placeholder.ref_table": "Referenztabelle; db.table wird unterstützt", - "table_designer.placeholder.table_comment": "Tabellenkommentar eingeben", - "table_designer.placeholder.table_name": "Tabellennamen eingeben", - "table_designer.placeholder.target_table_name": "Namen der Zieltabelle eingeben", - "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB kann Spaltenkommentare nicht über COMMENT ON COLUMN dauerhaft speichern. Der Kommentar für Spalte {{column}} bleibt nur in der Designer-Vorschau erhalten.", - "table_designer.schema_sql.limited_column_hint": "-- Die Syntax für Spalten-Constraints, Standardwerte und Kommentare in {{dialect}} unterscheidet sich von MySQL. MySQL-spezifische Klauseln wurden ausgelassen; ergänzen Sie vor der Ausführung dialektspezifisches SQL.", - "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite kann Spalteneigenschaften nicht direkt ändern. Erstellen Sie für Spalte {{column}} eine neue Tabelle, migrieren Sie die Daten und ersetzen Sie die alte Tabelle.", - "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server benötigt zum Löschen des alten Primärschlüssels den ursprünglichen Constraint-Namen. Prüfen Sie ihn vor dem Löschen im Indextab.", - "table_designer.schema_sql.tdengine.timestamp_hint": "-- Normale TDengine-Tabellen benötigen in der Regel eine TIMESTAMP-Zeitspalte. Prüfen Sie vor der Ausführung das Tabellenmodell.", - "table_designer.starrocks.table_kind.olap": "OLAP-Tabelle", - "table_designer.starrocks.table_kind.external": "Externe Tabelle", - "table_designer.starrocks.key_model.duplicate": "Duplikatschlüssel", - "table_designer.starrocks.key_model.unique": "Eindeutiger Schlüssel", - "table_designer.starrocks.key_model.aggregate": "Aggregatschlüssel", - "table_designer.starrocks.placeholder.key_columns": "Schlüsselspalten, z. B. id, date", - "table_designer.starrocks.placeholder.partition_clause": "Partitionsklausel, z. B. PARTITION BY RANGE(date_col)(...)", - "table_designer.starrocks.distribution.hash": "Hash-Verteilung", - "table_designer.starrocks.distribution.random": "Zufällige Verteilung", - "table_designer.starrocks.distribution.none": "Keine Verteilung", - "table_designer.starrocks.placeholder.distribution_columns": "Verteilungsspalten, z. B. user_id", - "table_designer.starrocks.bucket_mode.auto": "Eimeranzahl automatisch", - "table_designer.starrocks.bucket_mode.number": "Feste Eimeranzahl", - "table_designer.starrocks.placeholder.bucket_count": "Eimeranzahl", - "table_designer.selection.columns_selected": "{{count}} Spalten ausgewählt", - "table_designer.selection.foreign_key_selected": "Ausgewählt: {{name}}", - "table_designer.selection.indexes_selected": "{{count}} Indizes ausgewählt", - "table_designer.selection.trigger_prompt": "Klicken Sie, um einen Trigger auszuwählen", - "table_designer.selection.trigger_selected": "Ausgewählt: {{name}}", - "table_designer.sql_preview.change.add": "Hinzufügung", - "table_designer.sql_preview.change.comment": "Kommentaränderung", - "table_designer.sql_preview.change.constraint": "Constraint-Änderung", - "table_designer.sql_preview.change.create": "Neue Tabellenstruktur", - "table_designer.sql_preview.change.drop": "Entfernung", - "table_designer.sql_preview.change.modify": "Spalteneigenschaft geändert", - "table_designer.sql_preview.change.rename": "Umbenennung", - "table_designer.summary.indexes": "Indizes: {{count}}, Indexspalten: {{fields}}", - "table_designer.summary.columns": "{{count}} Spalten", - "table_designer.status.read_only": "Schreibgeschützt", - "table_designer.title.untitled_table": "Unbenannte Tabelle", - "table_designer.title.default_database": "Standarddatenbank", - "table_designer.title.schema_designer": "Schema-Designer", - "table_designer.tab.columns": "Spalten", - "table_designer.tab.foreign_keys": "Fremdschlüssel", - "table_designer.tab.indexes": "Indizes", - "table_designer.tab.triggers": "Trigger", - "table_designer.table_comment.current": "Aktueller Kommentar: {{comment}}", - "table_designer.tooltip.edit_comment_popup": "Kommentar im Dialog bearbeiten", - "table_designer.trigger.column.event": "Ereignis", - "table_designer.trigger.column.name": "Name", - "table_designer.trigger.column.timing": "Zeitpunkt", - "table_designer.trigger.definition_unavailable": "Vollständige Triggerdefinition konnte nicht abgerufen werden", - "table_designer.trigger.field.event": "Ereignis", - "table_designer.trigger.field.timing": "Zeitpunkt", - "table_designer.trigger.template.body_comment": "Triggerlogik", - "table_designer.trigger.template.enter_create": "Geben Sie eine CREATE TRIGGER-Anweisung ein", - "redis_command.action.clear_console": "Konsole leeren", - "redis_command.action.execute": "Ausführen (Cmd+Enter)", - "redis_command.completion.detail": "Redis-Befehl", - "redis_command.message.command_required": "Geben Sie einen auszuführenden Befehl ein", - "redis_command.output.empty_hint": "Führen Sie Befehle in dieser Konsole aus; Ergebnisse werden wie zurückgegeben angezeigt.", - "redis_command.output.selection_tip": "Tipp: Wählen Sie Zeilen aus und drücken Sie Ctrl + Enter, um nur diese Auswahl auszuführen.", - "redis_command.output.title": "Ausgabe", - "redis_command.state.connection_not_found": "Verbindung nicht gefunden", - "redis_command.title.console": "Redis-Konsole", - "redis.backend.message.connect_success": "Verbindung erfolgreich", - "redis.backend.message.set_success": "Setzen erfolgreich", - "redis.backend.message.select_db_success": "Datenbank gewechselt", - "redis.backend.message.rename_success": "Umbenennen erfolgreich", - "redis.backend.message.delete_success": "Löschen erfolgreich", - "redis.backend.message.add_success": "Hinzufügen erfolgreich", - "redis.backend.message.flush_success": "Leeren erfolgreich", - "redis.backend.error.command_required": "Command darf nicht leer sein", - "redis.backend.error.argument_required": "{{name}} ist erforderlich", - "redis.backend.error.argument_invalid_type": "{{name}} hat einen ungültigen Typ", - "redis.backend.error.address_required": "Redis-Verbindungsadresse darf nicht leer sein", - "redis.backend.error.node_address_required": "Redis-Knotenadresse darf nicht leer sein", - "redis.backend.error.invalid_node_address": "Ungültige Redis-Knotenadresse: {{address}}", - "redis.backend.error.invalid_port": "Ungültiger Redis-Port: {{address}}", - "redis_monitor.action.pause_refresh": "Aktualisierung pausieren", - "redis_monitor.action.refresh_now": "Jetzt aktualisieren", - "redis_monitor.action.resume_refresh": "Aktualisierung fortsetzen", - "redis_monitor.chart.clients_keys": "Verbindungsinformationen (Clients und Keys)", - "redis_monitor.chart.cpu_usage": "CPU-Auslastung", - "redis_monitor.chart.memory": "Speicherverbrauch", - "redis_monitor.chart.qps": "Anfragedurchsatz (QPS)", - "redis_monitor.message.fetch_failed": "Redis-Informationen konnten nicht abgerufen werden: {{detail}}", - "redis_monitor.metric.blocked_clients": "Blockiert: {{value}}", - "redis_monitor.metric.clients": "Client-Verbindungen", - "redis_monitor.metric.days": "Tage: {{value}}", - "redis_monitor.metric.memory_peak": "Spitze: {{value}}", - "redis_monitor.metric.memory_used": "Verwendeter Speicher", - "redis_monitor.metric.ops": "Durchsatz (OPS)", - "redis_monitor.metric.uptime": "Laufzeit", - "redis_monitor.series.clients": "Client-Verbindungen", - "redis_monitor.series.rss_memory": "RSS-Speicher", - "redis_monitor.series.system": "Systemlast", - "redis_monitor.series.total_keys": "Keys gesamt", - "redis_monitor.series.used_memory": "Verwendeter Speicher", - "redis_monitor.series.user": "Benutzer", - "redis_monitor.server_details.title": "Detaillierte Serverparameter", - "redis_monitor.state.connection_not_found": "Verbindung nicht gefunden", - "redis_monitor.title.instance": "Redis-Instanzmonitor", - "redis_viewer.action.add_field": "Feld hinzufügen", - "redis_viewer.action.add_list_head": "An den Anfang schieben", - "redis_viewer.action.add_list_tail": "An das Ende schieben", - "redis_viewer.action.add_member": "Mitglied hinzufügen", - "redis_viewer.action.add_stream_entry": "Eintrag hinzufügen", - "redis_viewer.action.clear_group_selection": "Auswahl aufheben", - "redis_viewer.action.clear_selection": "Auswahl aufheben", - "redis_viewer.action.copy": "Kopieren", - "redis_viewer.action.copy_key_name": "Key-Namen kopieren", - "redis_viewer.action.copy_value": "Wert kopieren", - "redis_viewer.action.delete_key": "Key löschen", - "redis_viewer.action.delete_selected": "Auswahl löschen ({{count}})", - "redis_viewer.action.edit": "Bearbeiten", - "redis_viewer.action.load_more": "Mehr laden", - "redis_viewer.action.new_key": "Neu", - "redis_viewer.action.refresh": "Aktualisieren", - "redis_viewer.action.rename_key": "Key umbenennen", - "redis_viewer.action.select_all_loaded": "Alle geladenen auswählen", - "redis_viewer.action.select_group": "Auswählen", - "redis_viewer.action.set_ttl": "TTL setzen", - "redis_viewer.aria.collapse_group": "Gruppe einklappen", - "redis_viewer.aria.expand_group": "Gruppe ausklappen", - "redis_viewer.confirm.delete_field": "Dieses Feld löschen?", - "redis_viewer.confirm.delete_key": "Key \"{{key}}\" löschen?", - "redis_viewer.confirm.delete_member": "Dieses Mitglied löschen?", - "redis_viewer.confirm.delete_selected": "Die ausgewählten {{count}} Keys löschen?", - "redis_viewer.confirm.delete_stream_entry": "Diesen Stream-Eintrag löschen?", - "redis_viewer.field.field_name": "Feldname", - "redis_viewer.field.fields_json": "Felder-JSON:", - "redis_viewer.field.key": "Key", - "redis_viewer.field.member": "Mitglied:", - "redis_viewer.field.new_key_name": "Neuer Key-Name", - "redis_viewer.field.new_score": "Neuer Score:", - "redis_viewer.field.score": "Punktzahl:", - "redis_viewer.field.stream_id": "ID (optional, Standard *):", - "redis_viewer.field.ttl_seconds": "TTL (Sekunden)", - "redis_viewer.field.value": "Wert", - "redis_viewer.help.ttl_forever": "-1 bedeutet keine Ablaufzeit", - "redis_viewer.hint.binary_readonly": "Binärdaten können nicht bearbeitet werden", - "redis_viewer.hint.switch_auto_to_edit": "Zum Bearbeiten in den Auto-Modus wechseln", - "redis_viewer.label.encoding": "Kodierung: {{encoding}}", - "redis_viewer.label.keys_count": "{{count}} Schlüssel", - "redis_viewer.label.node_count": "{{count}} Knoten", - "redis_viewer.label.length": "Länge: {{count}}", - "redis_viewer.label.original_key": "Ursprünglicher Key: {{key}}", - "redis_viewer.message.add_failed": "Hinzufügen fehlgeschlagen: {{detail}}", - "redis_viewer.message.add_success": "Hinzugefügt", - "redis_viewer.message.add_success_with_id": "Hinzugefügt {{id}}", - "redis_viewer.message.copied": "Kopiert", - "redis_viewer.message.copy_failed": "Kopieren fehlgeschlagen", - "redis_viewer.message.create_failed": "Erstellen fehlgeschlagen: {{detail}}", - "redis_viewer.message.create_success": "Erstellt", - "redis_viewer.message.delete_failed": "Löschen fehlgeschlagen: {{detail}}", - "redis_viewer.message.delete_success": "Gelöscht", - "redis_viewer.message.deleted_keys": "{{count}} Keys gelöscht", - "redis_viewer.message.fields_json_invalid": "Felder-JSON ist ungültig", - "redis_viewer.message.fields_must_be_json_object": "Felder müssen ein JSON-Objekt sein", - "redis_viewer.message.fields_required": "Geben Sie mindestens ein Feld an", - "redis_viewer.message.key_check_failed": "Ziel-Key konnte nicht geprüft werden: {{detail}}", - "redis_viewer.message.key_missing_removed": "Der Key existiert nicht mehr oder ist abgelaufen und wurde aus der Liste entfernt", - "redis_viewer.message.key_name_copied": "Key-Name kopiert", - "redis_viewer.message.load_keys_failed": "Keys konnten nicht geladen werden: {{detail}}", - "redis_viewer.message.new_key_name_required": "Geben Sie den neuen Key-Namen ein", - "redis_viewer.message.rename_failed": "Umbenennen fehlgeschlagen: {{detail}}", - "redis_viewer.message.rename_same_key": "Der neue Key-Name muss sich vom ursprünglichen unterscheiden", - "redis_viewer.message.rename_success": "Key umbenannt", - "redis_viewer.message.save_failed": "Speichern fehlgeschlagen: {{detail}}", - "redis_viewer.message.save_success": "Gespeichert", - "redis_viewer.message.set_failed": "Setzen fehlgeschlagen: {{detail}}", - "redis_viewer.message.stream_entry_not_deleted": "Kein Stream-Eintrag wurde gelöscht; er existiert möglicherweise nicht mehr", - "redis_viewer.message.target_key_exists": "Ziel-Key existiert bereits: {{key}}", - "redis_viewer.message.ttl_set_success": "TTL aktualisiert", - "redis_viewer.message.update_failed": "Aktualisierung fehlgeschlagen: {{detail}}", - "redis_viewer.message.update_success": "Aktualisiert", - "redis_viewer.message.value_load_failed": "Wert konnte nicht abgerufen werden: {{detail}}", - "redis_viewer.modal.add_element": "Element hinzufügen", - "redis_viewer.modal.add_element_head": "Element am Anfang hinzufügen", - "redis_viewer.modal.add_field": "Feld hinzufügen", - "redis_viewer.modal.add_member": "Mitglied hinzufügen", - "redis_viewer.modal.add_stream_entry": "Stream-Eintrag hinzufügen", - "redis_viewer.modal.edit_field": "Feld bearbeiten: {{field}}", - "redis_viewer.modal.edit_index": "Index {{index}} bearbeiten", - "redis_viewer.modal.edit_value": "Wert bearbeiten", - "redis_viewer.modal.new_key": "Neuer Key", - "redis_viewer.modal.rename_key": "Key umbenennen", - "redis_viewer.modal.set_ttl": "TTL setzen", - "redis_viewer.modal.update_score": "Score aktualisieren", - "redis_viewer.notice.large_keyspace_mode": "Leistungsmodus für große Keyspaces ist aktiviert. Die Knotendarstellung ist vereinfacht, und bis zu {{count}} ausgeklappte Gruppen bleiben erhalten.", - "redis_viewer.placeholder.key_name": "Key-Name", - "redis_viewer.placeholder.member_value": "Mitgliedswert eingeben", - "redis_viewer.placeholder.new_element_value": "Neuen Elementwert eingeben", - "redis_viewer.placeholder.new_key_name": "new:key:name", - "redis_viewer.placeholder.new_member_value": "Neuen Mitgliedswert eingeben", - "redis_viewer.placeholder.search_exact": "Vollständigen Key oder Namespace für exakte Suche eingeben", - "redis_viewer.placeholder.search_fuzzy": "Keys suchen (unscharfe Suche)", - "redis_viewer.placeholder.stream_id": "Zum Beispiel: * oder 1723110000000-0", - "redis_viewer.placeholder.value": "Wert", - "redis_viewer.search.exact": "Exakt", - "redis_viewer.search.fuzzy": "Unscharf", - "redis_viewer.topology.cluster": "Cluster", - "redis_viewer.topology.sentinel": "Sentinel", - "redis_viewer.topology.single": "Einzelinstanz", - "redis_viewer.state.connection_not_found": "Verbindung nicht gefunden", - "redis_viewer.state.empty_selection": "Wählen Sie einen Key aus, um Details anzuzeigen", - "redis_viewer.table.action": "Aktionen", - "redis_viewer.table.field": "Feld", - "redis_viewer.table.fields": "Felder", - "redis_viewer.table.index": "Position", - "redis_viewer.table.member": "Mitglied", - "redis_viewer.table.score": "Punktzahl", - "redis_viewer.table.value": "Wert", - "redis_viewer.title.active_key": "Aktiver Key", - "redis_viewer.title.key_explorer": "Key-Explorer", - "redis_viewer.title.namespace_key": "Namensraum / Key", - "redis_viewer.title.type_ttl": "Typ / TTL", - "redis_viewer.tooltip.copy_fields_json": "Felder-JSON kopieren", - "redis_viewer.tooltip.copy_id": "ID kopieren", - "redis_viewer.tooltip.copy_key_name": "Key-Namen kopieren", - "redis_viewer.tooltip.copy_value": "Wert kopieren", - "redis_viewer.tooltip.resize_panels": "Zum Ändern der Größe ziehen", - "redis_viewer.ttl.days_hours": "{{days}} T {{hours}} Std.", - "redis_viewer.ttl.expired": "Abgelaufen", - "redis_viewer.ttl.forever": "Dauerhaft", - "redis_viewer.ttl.hours_minutes": "{{hours}} Std. {{minutes}} Min.", - "redis_viewer.ttl.minutes_seconds": "{{minutes}} Min. {{seconds}} Sek.", - "redis_viewer.ttl.seconds": "{{seconds}} Sek.", - "redis_viewer.validation.key_required": "Geben Sie einen Key ein", - "redis_viewer.validation.new_key_name_required": "Geben Sie den neuen Key-Namen ein", - "redis_viewer.validation.value_required": "Geben Sie einen Wert ein", - "redis_viewer.view.auto": "Auto", - "redis_viewer.view.hex": "Hex", - "redis_viewer.view.text": "Rohtext", - "redis_viewer.view.title": "Ansichtsmodus", - "ai_chat.header.default_session_title": "Neuer Chat", - "ai_chat.header.export_time": "Exportiert am:", - "ai_chat.header.export_user": "Sie", - "ai_chat.header.tooltip.close": "Panel schließen", - "ai_chat.header.tooltip.export_markdown": "Als Markdown exportieren", - "ai_chat.header.tooltip.history": "Chatverlauf", - "ai_chat.header.tooltip.new_chat": "Neuer Chat", - "ai_chat.header.tooltip.new_chat_clear": "Neuer Chat (aktuellen Inhalt leeren)", - "ai_chat.header.tooltip.settings": "AI-Einstellungen", - "ai_chat.header.session.connected": "{{title}} · Verbunden", - "ai_chat.header.mode_tabs.aria_label": "AI-Arbeitsmodus", - "ai_chat.header.mode.chat": "Chat", - "ai_chat.header.mode.insights": "Auto-Insights", - "ai_chat.header.mode.history": "Verlauf", - "ai_chat.header.action.export": "Exportieren", - "ai_chat.history.action.new_chat": "Neuen Chat starten", - "ai_chat.history.default_session_title": "Neuer Chat", - "ai_chat.history.empty.no_matches": "Keine passenden Chats", - "ai_chat.history.search.placeholder": "Verlauf suchen...", - "ai_chat.history.title": "Chatverlauf", - "ai_chat.history.tooltip.collapse": "Einklappen", - "ai_chat.history.tooltip.delete": "Löschen", - "ai_chat.welcome.description.default": "Ich bin Ihr Datenbankassistent. Ich kann SQL-Abfragen erzeugen, Schemas analysieren, Ausführungslogik erklären und die Datenbankleistung optimieren.", - "ai_chat.welcome.description.with_context": "{{count}} Tabellenstrukturen sind verknüpft. Nutzen Sie die Schnellaktionen unten, um mit der Analyse zu beginnen.", - "ai_chat.welcome.title": "Hallo, ich bin GoNavi AI", - "ai_chat.quick_action.explain_schema": "🔍 Schema erklären", - "ai_chat.quick_action.explain_schema.hint.with_context": "Felder und Einschränkungen erklären", - "ai_chat.quick_action.explain_schema.prompt.with_context": "Erkläre die Designabsicht und die Bedeutung der Felder dieser Tabellen ausführlich: {{tables}}", - "ai_chat.quick_action.explain_schema.title": "Schema erklären", - "ai_chat.quick_action.explain_sql": "🔍 SQL erklären", - "ai_chat.quick_action.explain_sql.hint.default": "Ausführungslogik erklären", - "ai_chat.quick_action.explain_sql.prompt.default": "Erkläre die Ausführungslogik dieser SQL-Anweisung:\n```sql\n\n```", - "ai_chat.quick_action.explain_sql.title": "SQL erklären", - "ai_chat.quick_action.generate_sql": "📝 SQL erzeugen", - "ai_chat.quick_action.generate_sql.hint.default": "Abfrage aus natürlicher Sprache erzeugen", - "ai_chat.quick_action.generate_sql.hint.with_context": "Abfrage aus natürlicher Sprache erzeugen", - "ai_chat.quick_action.generate_sql.prompt.default": "Erzeuge eine Abfrage aus der aktuellen Datenbanktabellenstruktur:", - "ai_chat.quick_action.generate_sql.prompt.with_context": "Erzeuge eine häufig verwendete Abfrage für diese Tabellenstrukturen: {{tables}}", - "ai_chat.quick_action.generate_sql.title": "SQL erzeugen", - "ai_chat.quick_action.optimize": "⚡ Optimierungstipps", - "ai_chat.quick_action.optimize.hint.default": "Performance- und Indexempfehlungen", - "ai_chat.quick_action.optimize.hint.with_context": "Indizes, Normalisierung und Risiken", - "ai_chat.quick_action.optimize.prompt.default": "Analysiere die Performance dieser SQL-Anweisung und schlage Optimierungen vor:\n```sql\n\n```", - "ai_chat.quick_action.optimize.prompt.with_context": "Analysiere das Strukturdesign dieser Tabellen und schlage Optimierungen für Indizes und Abfrageperformance vor: {{tables}}", - "ai_chat.quick_action.optimize.title": "Optimierungstipps", - "ai_chat.quick_action.schema_analysis": "🏗️ Schema-Analyse", - "ai_chat.quick_action.schema_analysis.hint.default": "Strukturqualität analysieren", - "ai_chat.quick_action.schema_analysis.hint.with_context": "Tabellenbeziehungen und Abhängigkeitsdiagramm", - "ai_chat.quick_action.schema_analysis.prompt.default": "Analysiere die aktuelle Datenbanktabellenstruktur und schlage Optimierungen vor.", - "ai_chat.quick_action.schema_analysis.prompt.with_context": "Führe eine vollständige Schema-Analyse für diese Tabellen aus, einschließlich Datentypauswahl, Normalisierungsprüfung und Verbesserungsvorschlägen: {{tables}}", - "ai_chat.quick_action.schema_analysis.title": "Schema-Analyse", - "ai_chat.quick_action.table_separator": ", ", - "ai_chat.welcome.suggestion.channel_distribution.default": "Bestellkanalverteilung der letzten 7 Tage", - "ai_chat.welcome.suggestion.channel_distribution.with_context": "Verteilung der wichtigsten Kanäle in den letzten 7 Tagen", - "ai_chat.welcome.suggestion.cleanup.default": "Schreibe SQL zum Bereinigen auffälliger Daten", - "ai_chat.welcome.suggestion.cleanup.with_context": "Schreibe SQL zum Deaktivieren auffälliger Kanäle", - "ai_chat.welcome.suggestion.divider": "Oder direkt fragen", - "ai_chat.welcome.suggestion.low_rows.default": "Warum enthält das aktuelle Ergebnis nur wenige Zeilen?", - "ai_chat.welcome.suggestion.low_rows.with_context": "Warum hat {{table}} nur wenige Zeilen?", - "ai_chat.input.action.send": "Senden", - "ai_chat.input.action.stop": "Generierung stoppen", - "ai_chat.input.context.connection_tooltip": "Aktueller Datenabfragekontext", - "ai_chat.input.context.memory_tooltip": "Aktuelle Speichernutzung der Sitzung. Bei Erreichen der Grenze von {{limit}} startet die automatische Komprimierung.", - "ai_chat.input.context.tag_label": "Verknüpfter Kontext ({{count}})", - "ai_chat.input.message.context_added": "{{count}} Tabellenstrukturen zum Kontext hinzugefügt", - "ai_chat.input.message.context_load_failed": "Tabellenkontext konnte nicht geladen werden: {{detail}}", - "ai_chat.input.message.context_removed": "{{count}} Tabellenstrukturen aus dem Kontext entfernt", - "ai_chat.input.message.context_synced": "Kontext synchronisiert: hinzugefügt {{added}}, entfernt {{removed}}", - "ai_chat.input.message.fetch_table_schema_failed": "Struktur für {{table}} konnte nicht geladen werden: {{detail}}", - "ai_chat.input.message.fetch_tables_failed": "Tabellen konnten nicht geladen werden: {{detail}}", - "ai_chat.input.message.select_database_context_first": "Wählen Sie links eine Datenbank aus, bevor Sie Chatkontext anhängen", - "ai_chat.input.message.selection_unchanged": "Die ausgewählten Tabellen wurden nicht geändert", - "ai_chat.input.modal.empty_tables": "Keine Tabellen passen zu \"{{query}}\"", - "ai_chat.input.modal.invert_matching": "Passende Ergebnisse umkehren", - "ai_chat.input.modal.ok": "Ausgewählte Tabellen mit Kontext synchronisieren", - "ai_chat.input.modal.search_table.placeholder": "Tabellen in der aktuellen Datenbank suchen...", - "ai_chat.input.modal.select_all_matching": "Alle passenden Tabellen auswählen ({{count}})", - "ai_chat.input.modal.switch_database.placeholder": "Datenbank wechseln", - "ai_chat.input.modal.title": "Datenbanktabellen-Schemakontext anhängen", - "ai_chat.input.model.placeholder": "Modell auswählen", - "ai_chat.input.placeholder": "Nachricht eingeben... ({{shortcut}}, Shift+Enter für Zeilenumbruch, / für Befehle)", - "ai_chat.input.slash.diff.desc": "Zwei Tabellen vergleichen und Änderungen erzeugen", - "ai_chat.input.slash.diff.label": "🔄 Tabellenvergleich", - "ai_chat.input.slash.diff.prompt": "Vergleiche die Strukturunterschiede zwischen diesen zwei Tabellen und erzeuge ALTER-Anweisungen für die Migration von der alten zur neuen Version:", - "ai_chat.input.slash.explain.desc": "Logik des ausgewählten SQL erklären", - "ai_chat.input.slash.explain.label": "💡 SQL erklären", - "ai_chat.input.slash.explain.prompt": "Erkläre die Ausführungslogik dieses SQL und die Aufgabe jedes Schritts:\n```sql\n\n```", - "ai_chat.input.slash.index.desc": "Beste Indexstrategie empfehlen", - "ai_chat.input.slash.index.label": "📊 Indexvorschläge", - "ai_chat.input.slash.index.prompt": "Empfiehl anhand der aktuellen Tabellenstruktur und typischer Abfrageszenarien die beste Indexstrategie und gib die DDL an:", - "ai_chat.input.slash.mock.desc": "INSERT-Testdaten erzeugen", - "ai_chat.input.slash.mock.label": "🎲 Testdaten erzeugen", - "ai_chat.input.slash.mock.prompt": "Erzeuge 10 fachlich realistische INSERT-Testdatenanweisungen für die aktuell verknüpften Tabellen:", - "ai_chat.input.slash.optimize.desc": "SQL-Leistungsengpässe analysieren", - "ai_chat.input.slash.optimize.label": "⚡ Optimierungsanalyse", - "ai_chat.input.slash.optimize.prompt": "Analysiere dieses SQL auf Performanceprobleme und liefere eine optimierte Version:\n```sql\n\n```", - "ai_chat.input.slash.query.desc": "Beschreiben Sie, was Sie abfragen möchten", - "ai_chat.input.slash.query.label": "🔍 Abfrage in natürlicher Sprache", - "ai_chat.input.slash.query.prompt": "Schreibe eine SQL-Abfrage:", - "ai_chat.input.slash.schema.desc": "Qualität des Tabellendesigns prüfen", - "ai_chat.input.slash.schema.label": "🏗️ Tabellendesign prüfen", - "ai_chat.input.slash.schema.prompt": "Prüfe das aktuell verknüpfte Tabellendesign, einschließlich Feldtypen, Normalisierung, Indexstrategie und Verbesserungsvorschlägen:", - "ai_chat.input.slash.sql.desc": "Anforderungen beschreiben und Anweisungen erzeugen", - "ai_chat.input.slash.sql.label": "📝 SQL erzeugen", - "ai_chat.input.slash.sql.prompt": "Erzeuge SQL aus den folgenden Anforderungen:", - "ai_chat.input.tooltip.attach_table_context": "Datenbanktabellenkontext anhängen", - "ai_chat.input.tooltip.upload_image": "Bild oder Screenshot hochladen", - "ai_chat.tools.mcp_fallback_description": "MCP-Tool {{toolName}} von {{serverName}}", - "ai_chat.composer_notice.missing_model.description": "Öffnen Sie unten die Modellauswahl und wählen Sie ein Modell. Wenn die Liste leer ist, prüfen Sie Anbieter-Endpunkt und API Key.", - "ai_chat.composer_notice.missing_model.title": "Zuerst ein Modell auswählen", - "ai_chat.composer_notice.missing_provider.description": "Fügen Sie zuerst in den AI-Einstellungen einen Modellanbieter hinzu und aktivieren Sie ihn.", - "ai_chat.composer_notice.missing_provider.title": "Kein Anbieter verfügbar", - "ai_chat.composer_notice.model_fetch_failed.default_description": "Prüfen Sie Anbieter-Endpunkt, API Key oder Kontoberechtigungen und öffnen Sie danach die Modellauswahl erneut.", - "ai_chat.composer_notice.model_fetch_failed.detail_description": "Anbieterdetail: {{detail}}", - "ai_chat.composer_notice.model_fetch_failed.title": "Modellliste konnte nicht geladen werden", - "ai_chat.message.action.copy_full": "Volltext kopieren", - "ai_chat.message.action.copied": "Kopiert", - "ai_chat.message.action.delete": "Nachricht löschen", - "ai_chat.message.action.edit": "Diese Nachricht bearbeiten, spätere Einträge entfernen und erneut senden", - "ai_chat.message.action.retry": "Aus der vorherigen Benutzernachricht neu generieren", - "ai_chat.message.action.copy_error_raw": "Originalfehler kopieren", - "ai_chat.message.action.copied_error_raw": "Originalfehler kopiert", - "ai_chat.message.role.user": "Sie", - "ai_chat.message.image_alt": "Angehängtes Bild {{index}}", - "ai_chat.message.code.copy": "Code kopieren", - "ai_chat.message.code.copied": "Kopiert", - "ai_chat.message.code.insert": "Einfügen", - "ai_chat.message.code.insert_tooltip": "Dieses SQL in den Abfragearbeitsbereich einfügen, um es schnell zu bearbeiten oder auszuführen", - "ai_chat.message.code.execute": "Ausführen", - "ai_chat.message.code.execute_tooltip": "Jetzt ausführen, gesteuert durch die AI-Sicherheitsrichtlinie", - "ai_chat.message.code.executing": "Wird ausgeführt...", - "ai_chat.message.code.preview": "Vorschau", - "ai_chat.message.code.preview_tooltip": "Abfrageergebnisse im Chat anzeigen, maximal 20 Zeilen", - "ai_chat.message.code.expand_all": "Gesamten Code aufklappen", - "ai_chat.message.code.collapse": "Code einklappen", - "ai_chat.message.code.preview_result": "Vorschauergebnis ({{rows}} Zeilen x {{columns}} Spalten)", - "ai_chat.message.code.preview_collapse": "Einklappen", - "ai_chat.message.code.view_result": "Ergebnis anzeigen ({{rows}} Zeilen)", - "ai_chat.message.code.query_no_result": "Die Abfrage lieferte keine Ergebnisse", - "ai_chat.message.code.execute_failed": "Ausführung fehlgeschlagen", - "ai_chat.message.security.blocked": "🔒 Sicherheitsrichtlinie blockiert: Die aktuelle Sicherheitsstufe erlaubt keine {{operationType}}-SQL-Operationen. Passen Sie die Sicherheitsstufe in den AI-Einstellungen an.", - "ai_chat.message.security.confirm_title": "⚠️ Sicherheitsbestätigung", - "ai_chat.message.security.default_warning": "Dieses SQL ist eine {{operationType}}-Operation. Ausführen?", - "ai_chat.message.security.confirm_execute": "Ausführen", - "ai_chat.message.thinking.title": "Denkprozess", - "ai_chat.message.thinking.active": "Denkt...", - "ai_chat.message.thinking.count": "({{count}} Zeichen)", - "ai_chat.message.tool_result.title": "Prüfergebnis ({{name}})", - "ai_chat.message.tool_result.char_count": "{{count}} Zeichen", - "ai_chat.message.tool_result.no_data": "Keine Daten", - "ai_chat.message.tool_call.get_connections": "Verfügbare Verbindungsinformationen laden", - "ai_chat.message.tool_call.get_databases": "Datenbankliste scannen", - "ai_chat.message.tool_call.get_tables": "Tabellenstrukturinformationen analysieren", - "ai_chat.message.tool_call.get_columns": "Echte Spaltendefinitionen prüfen", - "ai_chat.message.tool_call.get_table_ddl": "CREATE TABLE-Anweisung extrahieren", - "ai_chat.message.tool_call.execute_sql": "Schreibgeschützte SQL-Prüfung ausführen", - "ai_chat.message.tool_call.running": "Datenprüfungen werden ausgeführt...", - "ai_chat.message.tool_call.done": "Datenprüfungen abgeschlossen ({{count}} Elemente)", - "ai_chat.message.wait.connecting": "Verbindung wird hergestellt", - "ai_chat.message.jvm.apply_preview": "Auf JVM-Vorschau anwenden", - "ai_chat.message.jvm.apply_diagnostic": "Auf Diagnosekonsole anwenden", - "ai_chat.message.jvm.missing_plan_context": "Diesem JVM-Plan fehlt der Kontext des Ursprungstabs. Generieren Sie ihn auf der Ziel-JVM-Ressourcenseite erneut.", - "ai_chat.message.jvm.plan_target_not_found": "Kein Ressourcentab passt zu diesem JVM-Plan. Öffnen Sie die ursprüngliche Zielressource, bevor Sie ihn anwenden.", - "ai_chat.message.jvm.missing_diagnostic_context": "Diesem Diagnoseplan fehlt der Kontext des Ursprungstabs. Generieren Sie ihn in der Ziel-Diagnosekonsole erneut.", - "ai_chat.message.jvm.diagnostic_target_not_found": "Kein Diagnosekonsolen-Tab passt zu diesem Plan. Öffnen Sie die ursprüngliche Zielkonsole, bevor Sie ihn anwenden.", - "ai_chat.message.mermaid.parse_failed": "Mermaid-Analyse fehlgeschlagen: {{detail}}", - "ai_chat.message.mermaid.render_failed": "Mermaid-Rendering fehlgeschlagen: {{detail}}", - "ai_chat.panel.history.empty": "Noch kein Chatverlauf", - "ai_chat.panel.insight.context.linked_title": "{{count}} Tabellen verknüpft", - "ai_chat.panel.insight.context.empty_title": "Noch keine Tabellenstruktur verknüpft", - "ai_chat.panel.insight.context.linked_body": "Diese Unterhaltung enthält Strukturkontext für {{tables}}.", - "ai_chat.panel.insight.context.empty_body": "Wenn AI auf einer Tabellenseite geöffnet wird, wird die aktuelle Tabelle automatisch verknüpft. Kontext kann auch manuell oberhalb des Eingabefelds hinzugefügt werden.", - "ai_chat.panel.insight.context.table_separator": ", ", - "ai_chat.panel.insight.context.more_tables_suffix": " und weitere Tabellen", - "ai_chat.panel.insight.query.slowest_title": "Langsamste aktuelle Abfrage {{duration}}ms", - "ai_chat.panel.insight.query.empty_title": "Noch keine Laufzeitdaten für Abfragen", - "ai_chat.panel.insight.query.empty_body": "Nach dem Ausführen einer Abfrage erscheinen hier SQL-Hinweise für die Optimierungsanalyse.", - "ai_chat.panel.insight.status.failed_title": "{{count}} aktuelle Abfragefehler", - "ai_chat.panel.insight.status.ok_title": "Aktueller Abfragestatus normal", - "ai_chat.panel.insight.status.recent_body": "{{count}} aktuelle SQL-Einträge wurden erfasst. AI kann sie direkt erklären oder optimieren.", - "ai_chat.panel.insight.status.empty_body": "Noch keine SQL-Protokolle.", - "ai_chat.panel.insight.write.detected_title": "{{count}} Schreiboperationen erkannt", - "ai_chat.panel.insight.write.readonly_title": "Der Schwerpunkt liegt aktuell auf Nur-Lese-Analyse", - "ai_chat.panel.insight.write.detected_body": "Für SQL mit Schreibzugriff sollten vor dem Commit eine Vorschau und Rollback-Anweisungen erzeugt werden.", - "ai_chat.panel.insight.write.readonly_body": "AI priorisiert standardmäßig Erklärungen, SELECT-Generierung, Schema-Analyse und Indexoptimierung.", - "ai_chat.panel.render_error.title": "Diese AI-Nachricht konnte nicht gerendert werden und wurde isoliert", - "ai_chat.panel.render_error.description": "Die übrige Unterhaltung bleibt nutzbar. Sie können diese fehlerhafte Nachricht löschen und danach fortfahren.", - "ai_chat.panel.render_error.unknown": "Unbekannter Renderfehler", - "ai_chat.panel.render_error.retry": "Rendering erneut versuchen", - "ai_chat.panel.render_error.delete": "Diese Nachricht löschen", - "ai_chat.panel.status.memory_compressing": "⚙️ Die Unterhaltung ist überlastet. Speicherkomprimierung wird gestartet...", - "ai_chat.panel.status.memory_compress_failed": "❌ Speicherkomprimierung fehlgeschlagen. Der ursprüngliche Kontext wird weiterverwendet...", - "ai_chat.panel.status.memory_summary": "[Automatische Speicherumformung] Der lange Verlauf wurde zu einer Zusammenfassung komprimiert:\n\n{{summary}}", - "ai_chat.panel.status.memory_probe_summary": "[Automatische Speicherumformung] Lange Prüfverlaufsdaten und Chat wurden zu einer Zusammenfassung komprimiert:\n\n{{summary}}", - "ai_chat.panel.prompt.memory_summary": "Dies ist der Verlauf einer überlangen Unterhaltung. Um Kontextplatz freizugeben und zugleich den Kern der Erinnerung zu bewahren, lies ihn sorgfältig und erstelle eine stark verdichtete strukturierte Zusammenfassung auf Basis technischer Fakten, des erkundeten Datenstrukturzustands, des zentralen Nutzeranliegens und des aktuellen Fortschritts.\nHinweise:\n1. Sei objektiv und genau; lasse keine wichtige Geschäftslogik und keine erkundeten Tabellennamen/Felder aus.\n2. Entferne unwirksame Ausführungsschritte, Höflichkeitsfloskeln und die JSON-Rückgabewerte selbst.\n3. Halte den Umfang bei etwa 1000-2000 Wörtern und gib ausschließlich kompaktes Markdown aus.\n4. Beginne direkt mit der Zusammenfassung; keine Begrüßung.", - "ai_chat.panel.prompt.jvm_diagnostic": "Du bist der JVM-Diagnoseassistent von GoNavi. Der aktuelle Tab ist eine Arthas-kompatible Diagnose-Workbench, und das Ziel ist ein strukturierter Diagnoseplan, der zurück in die Diagnosekonsole eingefügt werden kann.\n\nAktuelle Verbindung: {{connectionName}}\nZielhost: {{host}}\nDiagnose-transport: {{transport}}\nUmgebung: {{environment}}\nVerbindungsrichtlinie: {{readOnlyPolicy}}\nBefehlsberechtigungen: observe={{observePolicy}}, trace={{tracePolicy}}, mutating={{mutatingPolicy}}\n\nAntwortregeln:\n1. Du darfst mit einer kurzen Analyse beginnen, aber die Antwort muss genau einen ```json Codeblock enthalten.\n2. JSON-Felder sind strikt auf intent, transport, command, riskLevel, reason, expectedSignals beschränkt.\n3. Das Feld transport muss dem oben gezeigten Diagnose-transport entsprechen; erfinde keinen anderen transport.\n4. command muss ein einzelner Diagnosebefehl sein, ohne shell-Prompt, Zeilenumbruch-Verkettung, mehrere Befehle oder Code-Fence.\n5. riskLevel darf nur low, medium oder high sein.\n6. expectedSignals muss ein String-Array sein, das die nach der Ausführung zu beobachtenden Signale beschreibt.\n7. Wenn Berechtigungen eine Operationskategorie verbieten, gib keine Befehle dieser Kategorie aus; erkläre die Einschränkung direkt, wenn die Anfrage nicht erfüllbar ist.", - "ai_chat.panel.jvm_diagnostic.policy.read_only": "Antworte standardmäßig als Nur-Lese-Diagnose; generiere nur observe-, trace- und Troubleshooting-Befehle und nimm nicht an, dass bereits etwas ausgeführt wurde.", - "ai_chat.panel.jvm_diagnostic.policy.plan_first": "Diagnosebefehle dürfen generiert werden, aber liefere immer zuerst den Plan und lasse den Nutzer entscheiden, ob er ausgeführt wird.", - "ai_chat.panel.jvm_diagnostic.permission.allowed": "erlaubt", - "ai_chat.panel.jvm_diagnostic.permission.forbidden": "verboten", - "ai_chat.panel.prompt.jvm_runtime": "Du bist der JVM-Laufzeitanalyseassistent von GoNavi. Der aktuelle Kontext ist nicht SQL, sondern die JVM-Ressourcen-Workbench.\n\nAktuelle Verbindung: {{connectionName}}\nZielhost: {{host}}\nProvider-Modus: {{providerMode}}\nUmgebung: {{environment}}\nVerbindungsrichtlinie: {{connectionPolicy}}\nStatus des resourcePath: {{resourcePathStatus}}\n\nAntwortregeln:\n1. Du darfst Ressourcenstruktur, Risiken, Änderungsvorschläge und Rollback-Vorschläge erklären.\n2. Wenn der Nutzer einen JVM-Änderungsplan verlangt, gib genau einen ```json Codeblock aus und beschränke JSON-Felder strikt auf targetType, selector, action, payload, reason.\n3. Bevorzuge für action Werte, die im aktuellen Ressourcen-Snapshot oder in Metadaten bereits als supportedActions deklariert sind; wenn die aktuelle Ressource nichts deklariert, leite sie nur vorsichtig aus dem Snapshot-Inhalt ab.\n4. Bevorzuge den aktuellen resourcePath für selector.resourcePath; wenn der aktuelle Pfad unbekannt ist, sage klar, dass keine genaue Zielauswahl möglich ist, und erfinde keinen Pfad.\n5. payload darf nur {\"format\":\"json\",\"value\":{...}} oder {\"format\":\"text\",\"value\":\"...\"} verwenden; gib keine Skripte, Befehle oder nackten Werte aus.\n6. Gib keine Skripte, Befehle oder Aussagen wie bereits erfolgreich ausgeführt aus.", - "ai_chat.panel.jvm_runtime.policy.read_only": "Nur-Lese-Verbindung; analysiere nur und generiere Änderungspläne, und nimm niemals an, dass Schreibvorgänge bereits ausgeführt wurden.", - "ai_chat.panel.jvm_runtime.policy.preview_required": "Schreibbare Verbindung, aber jede Änderung muss zuerst eine Vorschau erzeugen und auf menschliche Bestätigung warten.", - "ai_chat.panel.jvm_runtime.resource_path.current": "Aktueller resourcePath: {{resourcePath}}", - "ai_chat.panel.jvm_runtime.resource_path.missing": "Aktuell ist kein konkreter resourcePath ausgewählt.", - "ai_chat.panel.prompt.sql.context_tables": "Du bist ein professioneller Datenbankassistent. Der aktuelle Datenbanktyp ist {{dbDisplayType}}. Erzeuge SQL in diesem Dialekt. Die folgende verknüpfte Tabellenstruktur-DDL wurde vom Benutzer bereitgestellt; berücksichtige sie vorrangig bei der Antwort:\n\n{{ddlChunks}}", - "ai_chat.panel.prompt.sql.current_database": "Du bist ein professioneller Datenbankassistent. Der aktuelle Datenbanktyp ist {{dbDisplayType}}, und der aktuelle Datenbankname ist {{targetDbName}}. Wenn der Benutzer Informationen zu einer bestimmten Tabelle oder zur aktuellen Datenbank benötigt, kannst du das bereitgestellte get_tables-Tool aktiv aufrufen, um Tabelleninformationen abzurufen.", - "ai_chat.panel.prompt.sql.no_context": "Du bist ein professioneller Datenbankassistent. Der Benutzer hat in der Oberfläche aktuell keine konkrete Datenbank oder Tabelle als Kontext ausgewählt.\n\nWichtige Regeln:\n1. Wenn du dem Benutzer helfen musst, eine Zieltabelle zu finden, rate niemals Tabellennamen. Du musst Tools aufrufen, um echte Daten abzurufen.\n2. Vollständiger Ablauf: get_connections → get_databases → get_tables → get_columns → SQL erzeugen. Kein Schritt darf übersprungen werden.\n3. [Verbindungspriorität - kritisch] Nach dem Abrufen der Verbindungsliste musst du in dieser Reihenfolge suchen:\n - Erste Priorität: Verbindungen, deren host localhost oder 127.0.0.1 ist oder lokale Maschine bedeutet\n - Zweite Priorität: Verbindungen, deren name oder host dev oder local enthält, oder deren host eine interne IP wie 10.x, 192.168.x oder 172.16-31.x ist\n - Dritte Priorität: andere Verbindungen wie test oder production\n Wenn du die Zieltabelle in einer Verbindung mit höherer Priorität findest, verwende diese Verbindung direkt und suche nicht weiter in Verbindungen mit niedrigerer Priorität.\n4. Wenn die Zieltabelle in der aktuellen Datenbank nicht gefunden wird, musst du weitere Datenbanken prüfen; gib nicht auf.\n5. Stoppe nur, wenn alle möglichen Datenbanken geprüft wurden oder die Zieltabelle eindeutig gefunden wurde.\n6. Bei allgemeinen Fragen ohne Datenbankabfrage antworte normal.\n\nSQL-Erzeugungsregeln (kritisch, strikt befolgen):\n7. [Feldgenauigkeit - absolute Regel] Bevor du SQL erzeugst, musst du get_columns aufrufen, um die echte Feldliste der Zieltabelle abzurufen. Jeder Feldname im SQL muss exakt dem von get_columns zurückgegebenen field-Wert entsprechen, einschließlich Groß-/Kleinschreibung. Erfinde, kürze oder erschließe keine Feldnamen. Wenn das Feld zum Beispiel channel heißt, schreibe channel und nicht pay_channel.\n8. Verwende beim Erzeugen von SQL kein qualifiziertes Präfix im Format \"database.table\"; schreibe nur den Tabellennamen selbst.\n9. Beim Berichten von Ergebnissen müssen Verbindungsname/ID und Datenbankname strikt aus den tatsächlichen Parametern desselben get_tables-Aufrufs stammen. Mische keine connectionId einer Verbindung mit dem dbName einer anderen.\n10. Wenn mehrere Datenbanken ähnliche Namen haben, sage dem Benutzer klar, in welcher Datenbank sich die Zieltabelle befindet.\n11. [Pflicht] Die erste Zeile jedes SQL-Codeblocks muss einen Kontext-Kommentar exakt in diesem Format enthalten: -- @context connectionId= dbName=. connectionId und dbName müssen aus demselben erfolgreichen get_tables-Aufruf stammen, also aus den tatsächlichen Parameterwerten, die du in diesem Aufruf übergeben hast. Beispiel:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\nAktuell verfügbare Verbindungen: [{{connList}}]", - "ai_chat.panel.prompt.sql.no_connections": "Du bist ein professioneller Datenbankassistent. In der App sind aktuell keine Datenbankverbindungen verfügbar.\n\nWenn die Frage des Benutzers Datenbankstruktur oder SQL benötigt, erkläre zuerst, dass get_connections, get_databases, get_tables und get_columns ohne vorhandene Verbindung keine echten Datenbankinformationen abrufen können, und bitte den Benutzer, eine Verbindung zu erstellen und es erneut zu versuchen. Rate keine connectionId, keinen dbName, keine Tabellennamen und keine Feldnamen.\n\nBei allgemeinen Fragen ohne Datenbankabfrage antworte normal.", - "ai_chat.panel.model_control.force_tool_call": "Verwende direkt einen function call, um das Tool aufzurufen und die Aktion auszuführen; beschreibe den Plan nicht nur als Text.", - "ai_chat.panel.model_control.continue_after_summary": "Setze anhand des neuesten Status und der Explorationsergebnisse oben deine noch nicht abgeschlossene Analyse fort oder führe den nächsten Schritt aus.", - "ai_chat.panel.local_tool.get_connections.description": "Wenn eine Datenbank abgefragt oder bearbeitet werden soll, aber kein Verbindungskontext ausgewählt ist, werden alle in der App verfügbaren Datenbankverbindungen abgerufen. Die zurückgegebenen Daten enthalten Verbindungs-ID (id) und Name (name).", - "ai_chat.panel.local_tool.get_databases.description": "Ruft alle Datenbanknamen (Database/Schema) unter der angegebenen Verbindung (connectionId) ab.", - "ai_chat.panel.local_tool.get_tables.description": "Nachdem Zielverbindung und dbName feststehen, rufe dieses Tool auf, wenn der Benutzer eine Tabelle erwähnt oder danach fragt, du aber den exakten tableName nicht kennst. Es liefert alle Tabellennamen dieser Datenbank (nur Tabellennamen), damit du die Zieltabelle ableiten kannst.", - "ai_chat.panel.local_tool.get_columns.description": "Ruft die field-Liste der angegebenen Tabelle ab, einschließlich field-Namen, Typen, NULL-Zulässigkeit, Standardwerten, Kommentaren und weiteren Metadaten. Vor dem Generieren von SQL muss dieses Tool aufgerufen werden, um echte field-Namen zu bestätigen; field-Namen dürfen nicht geraten werden.", - "ai_chat.panel.local_tool.get_table_ddl.description": "Ruft das vollständige CREATE TABLE DDL der angegebenen Tabelle ab, einschließlich fields, Indizes, Constraints und vollständiger Strukturinformationen.", - "ai_chat.panel.local_tool.execute_sql.description": "Führt eine SQL-Abfrage auf der angegebenen Verbindung und Datenbank aus und gibt das Ergebnis zurück. Durch die Sicherheitsstufe gesteuert: Im Nur-Lese-Modus sind nur SELECT/SHOW/DESCRIBE und ähnliche Abfrageoperationen zulässig. Es werden höchstens 50 Zeilen zurückgegeben.", - "ai_chat.panel.local_tool.param.connection_id": "connectionId (Verbindungs-ID)", - "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId (aus get_connections)", - "ai_chat.panel.local_tool.param.db_name": "dbName (Datenbankname)", - "ai_chat.panel.local_tool.param.table_name": "tableName (Tabellenname)", - "ai_chat.panel.local_tool.param.sql": "Auszuführende SQL-Anweisung", - "ai_chat.panel.tool_error.connection_not_found": "Verbindung nicht gefunden", - "ai_chat.panel.tool_error.unknown_function": "Unbekannte Funktion: {{functionName}}", - "ai_chat.panel.tool_error.fetch_databases_failed": "Datenbankliste konnte nicht abgerufen werden: {{detail}}", - "ai_chat.panel.tool_error.fetch_tables_failed": "Tabellenliste konnte nicht abgerufen werden: {{detail}}", - "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ Dies ist die exakte Feldliste der Tabelle {{tableName}}. Verwende beim Erzeugen von SQL nur diese field-Werte als Spaltennamen, exakt wie angegeben. Nicht ändern, abkürzen oder eigene Feldnamen bilden.\nVerfügbare Felder: {{fieldNames}}\nDetails: {{detailJson}}", - "ai_chat.panel.tool_error.fetch_columns_failed": "Spaltenliste konnte nicht abgerufen werden: {{detail}}", - "ai_chat.panel.tool_error.fetch_table_ddl_failed": "CREATE TABLE-Anweisung konnte nicht abgerufen werden: {{detail}}", - "ai_chat.panel.tool_error.sql_blocked": "Die Sicherheitsrichtlinie hat diese Anfrage blockiert: Die aktuelle Sicherheitsstufe erlaubt kein {{operationType}} SQL. Zeigen Sie dem Benutzer das SQL und bitten Sie ihn, es manuell auszuführen.", - "ai_chat.panel.tool_error.sql_execute_failed": "SQL-Ausführung fehlgeschlagen", - "ai_chat.panel.tool_error.sql_execute_exception": "SQL-Ausnahme bei der Ausführung: {{detail}}", - "ai_chat.panel.error.unknown": "Unbekannter Fehler", - "ai_chat.panel.error.http_server": "HTTP {{code}} Serverfehler", - "ai_chat.panel.error.html_response": "Der Server hat eine ungewöhnliche HTML-Antwort zurückgegeben, möglicherweise wegen Gateway-Timeout oder nicht verfügbarem Dienst", - "ai_chat.panel.error.truncated_suffix": "...(gekürzt)", - "ai_chat.panel.notice.fetch_models_failed": "Modellliste konnte nicht abgerufen werden: {{detail}}", - "ai_chat.panel.message.error": "❌ Fehler: {{detail}}", - "ai_chat.panel.message.empty_response": "❌ Das Modell hat keinen Inhalt zurückgegeben. Möglicherweise greift ein Ratenlimit, der Kontext ist überlastet oder die Anfrage wurde abgelehnt.", - "ai_chat.panel.message.request_interrupted": "❌ Anfrage unterbrochen: Es wurde keine konkrete Antwort empfangen.", - "ai_chat.panel.message.service_not_ready": "❌ AI Service ist nicht bereit", - "ai_chat.panel.message.send_failed": "❌ Senden fehlgeschlagen: {{detail}}", - "ai_chat.panel.probe.max_rounds": "⚠️ Werkzeugaufrufe haben das Limit von {{count}} Runden erreicht und wurden beendet. Senden Sie eine neue Nachricht, um weiter zu erkunden.", - "ai_chat.panel.probe.consecutive_failed": "⚠️ Prüfungen sind 3 Runden in Folge fehlgeschlagen und wurden beendet. Prüfen Sie den Verbindungsstatus und versuchen Sie es erneut.", - "ai_chat.panel.status.summarizing_probe": "Prüfergebnisse werden zusammengefasst", - "ai_chat.panel.status.returning_runtime_data": "Laufzeitdaten werden an das Modell zurückgegeben", - "ai_chat.panel.status.deep_reasoning": "Das Modell führt eine tiefe Schlussfolgerung aus", - "ai_chat.panel.status.waiting_instruction": "Warten auf Operationsanweisung", - "ai_chat.panel.status.analyzing_chain": "Kette und Logik werden tiefgehend analysiert", - "ai_chat.panel.status.model_connecting": "Verbindung zum Modell wird hergestellt", - "ai_chat.panel.status.waking_engine": "Schlussfolgerungs-Engine wird geweckt", - "ai_chat.panel.status.waiting_response": "Warten auf Modellantwort", - "ai_chat.panel.session.default_title": "Neuer Chat", - "ai_settings.title": "AI-Einstellungen", - "ai_settings.subtitle": "AI-Modelle, Sicherheitsstufe und Kontextoptionen konfigurieren", - "ai_settings.nav.title": "Einstellungsnavigation", - "ai_settings.nav.providers.title": "Modellanbieter", - "ai_settings.nav.providers.description": "Modellendpunkte und Secrets konfigurieren", - "ai_settings.nav.safety.title": "Sicherheitssteuerung", - "ai_settings.nav.safety.description": "Risikostufe von AI-Operationen begrenzen", - "ai_settings.nav.context.title": "Kontext", - "ai_settings.nav.context.description": "Datenbankschema-Kontext konfigurieren", - "ai_settings.nav.tools.title": "Integrierte Tools", - "ai_settings.nav.tools.description": "Von AI nutzbare Datenproben anzeigen", - "ai_settings.nav.prompts.title": "Integrierte Prompts", - "ai_settings.nav.prompts.description": "Vordefinierte Systemanforderungen anzeigen", - "ai_settings.provider.empty.title": "Noch kein Modellanbieter konfiguriert", - "ai_settings.provider.empty.description": "Fügen Sie einen Anbieter hinzu, um den AI-Assistenten zu verwenden", - "ai_settings.provider.no_model": "Kein Modell ausgewählt", - "ai_settings.provider.next_provider": "nächster Anbieter", - "ai_settings.provider.action.add": "Modellanbieter hinzufügen", - "ai_settings.provider.action.edit": "Bearbeiten", - "ai_settings.provider.action.delete": "Löschen", - "ai_settings.provider.confirm_delete": "Diesen Anbieter löschen?", - "ai_settings.provider.editor.add_title": "Modellanbieter hinzufügen", - "ai_settings.provider.editor.edit_title": "Modellanbieter bearbeiten", - "ai_settings.provider_preset.openai.label": "OpenAI", - "ai_settings.provider_preset.openai.desc": "GPT-5.4 / 5.3-Reihe", - "ai_settings.provider_preset.deepseek.label": "DeepSeek", - "ai_settings.provider_preset.deepseek.desc": "DeepSeek-V4 / R1 Modelle", - "ai_settings.provider_preset.qwen_bailian.label": "Qwen (Bailian Allgemein)", - "ai_settings.provider_preset.qwen_bailian.desc": "Bailian Anthropic-kompatibler Endpunkt / entfernte Modellliste", - "ai_settings.provider_preset.qwen_coding_plan.label": "Qwen (Coding Plan)", - "ai_settings.provider_preset.qwen_coding_plan.desc": "Claude Code CLI Proxy-Kette / offiziell unterstützte Modellliste", - "ai_settings.provider_preset.zhipu.label": "Zhipu GLM", - "ai_settings.provider_preset.zhipu.desc": "GLM-5 / GLM-5-Turbo Modelle", - "ai_settings.provider_preset.moonshot.label": "Kimi", - "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5 (Anthropic-kompatibel)", - "ai_settings.provider_preset.anthropic.label": "Claude", - "ai_settings.provider_preset.anthropic.desc": "Claude Opus/Sonnet Modelle", - "ai_settings.provider_preset.gemini.label": "Gemini", - "ai_settings.provider_preset.gemini.desc": "Gemini 3.1 / 2.5-Reihe", - "ai_settings.provider_preset.volcengine_ark.label": "Volcengine Ark", - "ai_settings.provider_preset.volcengine_ark.desc": "Ark allgemeine Inferenz / Doubao-Modelle", - "ai_settings.provider_preset.volcengine_coding.label": "Volcengine Coding Plan", - "ai_settings.provider_preset.volcengine_coding.desc": "Ark Code / Coding Plan Ausführung", - "ai_settings.provider_preset.minimax.label": "MiniMax", - "ai_settings.provider_preset.minimax.desc": "M3 / M2.7-Reihe (Anthropic-kompatibel)", - "ai_settings.provider_preset.ollama.label": "Ollama", - "ai_settings.provider_preset.ollama.desc": "Lokal bereitgestellte Open-Source-Modelle", - "ai_settings.provider_preset.custom.label": "Benutzerdefiniert", - "ai_settings.provider_preset.custom.desc": "Benutzerdefinierter API-Endpunkt", - "ai_settings.form.section.service_type": "Diensttyp", - "ai_settings.form.section.basic": "Basisinformationen", - "ai_settings.form.section.auth_connection": "Authentifizierung und Verbindung", - "ai_settings.form.provider_name": "Anbietername", - "ai_settings.form.provider_name_required": "Bitte einen Namen eingeben", - "ai_settings.form.provider_name_placeholder": "Beispiel: eigener OpenAI-kompatibler Endpunkt / privates Modell", - "ai_settings.form.api_format": "API-Format", - "ai_settings.form.model_list": "Verfügbare Modellliste (optional)", - "ai_settings.form.model_list_placeholder": "Modell-IDs konfigurieren; leer lassen, um sie vom Server abzurufen", - "ai_settings.form.api_key": "API Key", - "ai_settings.form.api_key_required": "Bitte API Key eingeben", - "ai_settings.form.api_key_keep_placeholder": "Leer lassen, um das gespeicherte Secret weiterzuverwenden", - "ai_settings.form.api_key_placeholder": "sk-... / Ihr API Key", - "ai_settings.form.api_key_saved_hint": "Ein API Key ist bereits gespeichert. Leer lassen, um ihn weiterzuverwenden, oder einen neuen Wert zum Ersetzen eingeben.", - "ai_settings.form.clear_saved_api_key": "Gespeicherten API Key löschen", - "ai_settings.form.api_endpoint": "API Endpoint (URL)", - "ai_settings.form.api_endpoint_required": "Bitte eine gültige Endpunkt-URL eingeben", - "ai_settings.action.back": "Zurück", - "ai_settings.action.save": "Speichern", - "ai_settings.action.test": "Verbindung testen", - "ai_settings.action.retest": "Erneut testen", - "ai_settings.action.connection_ok": "Verbindung OK", - "ai_settings.message.deleted": "Gelöscht", - "ai_settings.message.deleted_and_switched": "Gelöscht und automatisch zu „{{name}}“ gewechselt", - "ai_settings.message.delete_failed": "Löschen fehlgeschlagen", - "ai_settings.message.delete_failed_detail": "Löschen fehlgeschlagen: {{detail}}", - "ai_settings.message.saved": "Gespeichert", - "ai_settings.message.save_failed": "Speichern fehlgeschlagen", - "ai_settings.message.save_failed_detail": "Speichern fehlgeschlagen: {{detail}}", - "ai_settings.message.switched": "Gewechselt", - "ai_settings.message.switch_failed": "Wechsel fehlgeschlagen", - "ai_settings.message.switch_failed_detail": "Wechsel fehlgeschlagen: {{detail}}", - "ai_settings.message.test_requires_new_api_key": "Geben Sie vor dem Verbindungstest einen neuen API Key ein oder brechen Sie das Löschen des gespeicherten Secrets ab", - "ai_settings.message.test_success": "Verbindung erfolgreich", - "ai_settings.message.test_failed": "Test fehlgeschlagen", - "ai_settings.message.test_failed_detail": "Test fehlgeschlagen: {{detail}}", - "ai_settings.message.unknown_error": "Unbekannter Fehler", - "ai_settings.safety.description": "Steuert, welche SQL-Operationstypen AI ausführen darf, um Daten zu schützen", - "ai_settings.safety.readonly.label": "Nur-Lesen-Modus", - "ai_settings.safety.readonly.desc": "AI darf nur SELECT und ähnliche Abfragen ausführen. Dies ist der sicherste Modus.", - "ai_settings.safety.readwrite.label": "Lese-/Schreibmodus", - "ai_settings.safety.readwrite.desc": "AI darf INSERT/UPDATE/DELETE ausführen. Riskante Operationen erfordern eine Bestätigung.", - "ai_settings.safety.full.label": "Vollmodus", - "ai_settings.safety.full.desc": "AI darf alle Operationen ausführen, einschließlich DDL. Bei Hochrisiko-Operationen werden Warnungen automatisch angezeigt.", - "ai_settings.context.description": "Steuert, wie viel Datenbankkontext an AI gesendet wird", - "ai_settings.context.schema_only.label": "Nur Schema", - "ai_settings.context.schema_only.desc": "Nur Tabellen- und Spaltenstruktur wird an AI gesendet", - "ai_settings.context.with_samples.label": "Mit Beispieldaten", - "ai_settings.context.with_samples.desc": "Enthält wenige Beispieldaten, damit AI Datenmuster besser versteht", - "ai_settings.context.with_results.label": "Mit Abfrageergebnissen", - "ai_settings.context.with_results.desc": "Sendet aktuelle Abfrageergebnisse als Kontext", - "ai_settings.prompts.description": "Dies sind die schreibgeschützten Systemprompts der aktuellen GoNavi-Version. Sie werden je nach Szenario dynamisch in den Anfragekontext eingefügt.", - "ai_settings.prompts.message.saved": "Benutzerdefinierte Prompts gespeichert", - "ai_settings.prompts.message.save_failed": "Benutzerdefinierte Prompts konnten nicht gespeichert werden", - "ai_settings.mcp_server.message.saved": "MCP-Dienst gespeichert", - "ai_settings.mcp_server.message.save_failed": "MCP-Dienst konnte nicht gespeichert werden", - "ai_settings.mcp_server.message.deleted": "MCP-Dienst gelöscht", - "ai_settings.mcp_server.message.delete_failed": "MCP-Dienst konnte nicht gelöscht werden", - "ai_settings.mcp_server.message.test_success": "MCP-Dienstverbindung erfolgreich", - "ai_settings.mcp_server.message.test_failed": "MCP-Diensttest fehlgeschlagen", - "ai_settings.mcp_server.message.test_request_failed": "MCP-Dienst konnte nicht getestet werden", - "ai_settings.clipboard.error.unsupported": "Kopieren in die Zwischenablage wird in dieser Umgebung nicht unterstützt", - "ai_settings.mcp_http.error.control_unsupported_runtime": "Die aktuelle Laufzeit unterstützt keine Steuerung des MCP HTTP-Dienstes", - "ai_settings.mcp_http.error.start_unsupported_version": "Diese Version unterstützt das Starten des MCP HTTP-Dienstes nicht", - "ai_settings.mcp_http.error.stop_unsupported_version": "Diese Version unterstützt das Stoppen des MCP HTTP-Dienstes nicht", - "ai_settings.mcp_http.message.started": "GoNavi MCP HTTP-Dienst gestartet", - "ai_settings.mcp_http.message.stopped": "GoNavi MCP HTTP-Dienst gestoppt", - "ai_settings.mcp_http.message.toggle_failed": "GoNavi MCP HTTP-Dienst konnte nicht umgeschaltet werden", - "ai_settings.mcp_http.message.url_unavailable": "Keine MCP HTTP-URL zum Kopieren verfügbar", - "ai_settings.mcp_http.message.url_copied": "MCP HTTP-URL kopiert", - "ai_settings.mcp_http.message.authorization_header_required": "Starten Sie zuerst den MCP HTTP-Dienst, um den Authorization Header zu erzeugen", - "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header kopiert", - "ai_settings.mcp_http.status.not_running": "GoNavi MCP HTTP-Dienst läuft nicht", - "ai_settings.skill.message.saved": "Skill gespeichert", - "ai_settings.skill.message.save_failed": "Skill konnte nicht gespeichert werden", - "ai_settings.skill.message.deleted": "Skill gelöscht", - "ai_settings.skill.message.delete_failed": "Skill konnte nicht gelöscht werden", - "ai_settings.tools.description": "Bei Datenbankfragen kann der AI-Assistent diese integrierten Tools automatisch aufrufen, um echte Daten ohne manuelle Eingriffe abzurufen.", - "ai_settings.tools.workflow": "💡 Ablauf: get_connections → get_databases → get_tables → get_columns → SQL erzeugen", - "ai_settings.tools.params_label": "Parameter:", - "ai_settings.tools.builtin_tool_label": "Integriertes Tool", - "ai_settings.tools.search.aria_label": "Integrierte Tools suchen", - "ai_settings.tools.search.placeholder": "Tools, Abläufe oder Parameter suchen, z. B. mcp / lineLimit / allowMutating / transaction", - "ai_settings.tools.search.clear": "Löschen", - "ai_settings.tools.summary": "{{flowVisible}}/{{flowTotal}} empfohlene Abläufe und {{toolVisible}}/{{toolTotal}} integrierte Tools werden angezeigt.", - "ai_settings.tools.empty.no_matches": "Keine passenden integrierten Tools. Versuchen Sie allgemeinere Stichwörter wie mcp, logs, connection, transaction, shortcuts oder schema.", - "ai_settings.tools.parameters.hint_title": "Parameterhinweise", - "ai_settings.tools.parameters.type_label": "Typ: {{type}}", - "ai_settings.tools.parameters.required": "Pflichtfeld", - "ai_settings.tools.parameters.optional": "Optional", - "ai_settings.tools.parameters.enum_values": "Zulässige Werte: {{values}}", - "ai_settings.tools.parameters.default_value": "Standard: {{value}}", - "ai_settings.tools.parameters.example": "Beispiel:", - "ai_settings.tools.params.none": "Keine Parameter", - "ai_settings.tools.get_connections.desc": "Alle verfügbaren Datenbankverbindungen abrufen", - "ai_settings.tools.get_connections.detail": "Gibt Verbindungs-ID, Name, Typ (MySQL/PostgreSQL usw.) und Host-Adresse zurück. AI entscheidet anhand dieser Informationen, welche Verbindung zuerst untersucht wird.", - "ai_settings.tools.get_databases.desc": "Alle Datenbanken unter einer Verbindung abrufen", - "ai_settings.tools.get_databases.detail": "Übergibt connectionId und gibt die Datenbank- oder Schema-Namen unter dieser Verbindung zurück.", - "ai_settings.tools.get_tables.desc": "Alle Tabellennamen unter einer Datenbank abrufen", - "ai_settings.tools.get_tables.detail": "Übergibt connectionId und dbName und gibt Tabellennamen zurück. AI nutzt dies, um die vom Benutzer erwähnte Zieltabelle zu finden.", - "ai_settings.tools.get_columns.desc": "Spaltenstruktur einer Tabelle abrufen", - "ai_settings.tools.get_columns.detail": "Übergibt connectionId, dbName und tableName und gibt Name, Typ, NULL-Zulässigkeit, Standardwert und Kommentar jeder Spalte zurück. AI muss dieses Tool vor der SQL-Erzeugung aufrufen, um echte Spaltennamen zu bestätigen.", - "ai_settings.tools.get_table_ddl.desc": "DDL einer Tabelle abrufen", - "ai_settings.tools.get_table_ddl.detail": "Übergibt connectionId, dbName und tableName und gibt die vollständige CREATE TABLE-Anweisung einschließlich Spaltendefinitionen, Indizes, Constraints und Metadaten zurück.", - "ai_settings.tools.execute_sql.desc": "SQL-Abfrage ausführen und Ergebnisse zurückgeben", - "ai_settings.tools.execute_sql.detail": "Übergibt connectionId, dbName und sql, führt SQL auf der Zieldatenbank aus und gibt bis zu 50 Ergebniszeilen zurück. Die Sicherheitsstufe gilt; im Nur-Lesen-Modus sind nur SELECT/SHOW/DESCRIBE erlaubt.", - "driver_manager.title": "Treiberverwaltung", - "driver_manager.action.refresh": "Aktualisieren", - "driver_manager.action.network_check": "Netzwerk prüfen", - "driver_manager.action.close": "Schließen", - "driver_manager.action.open_global_proxy_settings": "Globale Proxy-Einstellungen öffnen", - "driver_manager.action.open_directory": "Treiberordner öffnen", - "driver_manager.action.import_directory": "Treiberordner importieren", - "driver_manager.action.import_package": "Treiberpaket importieren", - "driver_manager.action.install_enable": "Installieren und aktivieren", - "driver_manager.action.remove": "Entfernen", - "driver_manager.action.logs": "Protokoll", - "driver_manager.column.data_source": "Datenquelle", - "driver_manager.column.package_size": "Paketgröße", - "driver_manager.column.status": "Zustand", - "driver_manager.column.progress": "Installationsfortschritt", - "driver_manager.column.version": "Treiberversion", - "driver_manager.column.actions": "Aktionen", - "driver_manager.description.install_required": "Außer MySQL / Redis / Oracle / PostgreSQL müssen Datenquellen vor dem Verbinden installiert und aktiviert werden.", - "driver_manager.directory_info.title": "Treiberordner und Wiederverwendung", - "driver_manager.directory_info.details_label": "Treiberordner und Wiederverwendung anzeigen", - "driver_manager.directory_info.reuse_help": "Automatisch heruntergeladene und manuell importierte Treiber werden in diesem Ordner gespeichert. Heruntergeladene Treiber können bei späteren Versionsupdates wiederverwendet werden.", - "driver_manager.directory_info.root_dir": "Treiber-Stammordner: {{path}}", - "driver_manager.directory_info.log_file": "Laufzeitprotokoll: {{path}}", - "driver_manager.empty.default": "Keine Treiberdaten", - "driver_manager.empty.search": "Kein Treiber passt zu \"{{keyword}}\"", - "driver_manager.filter_summary.match": "{{filtered}} / {{total}} Treffer", - "driver_manager.filter_summary.total": "{{total}} Treiber", - "driver_manager.import.directory_help": "Wenn der Download in der App fehlschlägt, lade das Treiberpaket zuerst manuell in diesen Ordner herunter und nutze dann \"Treiberpaket importieren\" oder \"Treiberordner importieren\", um die Installation abzuschließen.", - "driver_manager.import.single_file_help": "\"Treiberpaket importieren\" in der Zeile ist nur für eine einzelne Treiberdatei oder ein Bündel wie `mariadb-driver-agent`, `mariadb-driver-agent.exe` oder `GoNavi-DriverAgents.zip` vorgesehen. Ein JDBC Jar wird nicht direkt importiert; für Stapelimporte nutze oben \"Treiberordner importieren\".", - "driver.guidance.customConnectionDriverHelp": "Unterstützt: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase; Aliasse: postgresql/pgx, open_gauss/open-gauss, dm8, kingbase8/kingbasees/kingbasev8. Geben Sie einen bereits von GoNavi registrierten Go database/sql-Treibernamen ein. Geben Sie keinen System-ODBC/JDBC-Treibernamen direkt ein und importieren Sie kein JDBC Jar.", - "driver_manager.local_source.file": "Datei", - "driver_manager.local_source.directory": "Ordner", - "driver_manager.log.start_auto_install": "Automatische Installation gestartet", - "driver_manager.log.done_auto_install": "Automatische Installation abgeschlossen{{version}}", - "driver_manager.log.start_local_import": "Lokaler Import gestartet{{version}} ({{source}}): {{path}}", - "driver_manager.log.done_local_import": "Lokale Importinstallation abgeschlossen{{version}}", - "driver_manager.log.skip_installed_dedupe": "Treiber ist bereits installiert; beim Ordnerimport wegen Dublettenprüfung übersprungen", - "driver_manager.log.force_overwrite_reinstall": "Modus zum Überschreiben installierter Treiber ist aktiv; Neuimport wird ausgeführt", - "driver_manager.log.skip_slim_build": "Das aktuelle Release-Paket ist ein Slim-Build; Ordnerimport wurde übersprungen", - "driver_manager.log.start_remove": "Treiberentfernung gestartet", - "driver_manager.log.done_remove": "Treiberentfernung abgeschlossen", - "driver_manager.log.progress_line": "{{status}}: {{message}} ({{percent}} %)", - "driver_manager.log_modal.title": "Treiberprotokoll - {{name}}", - "driver_manager.log_modal.install_dir": "Installationsordner: {{path}}", - "driver_manager.log_modal.executable_path": "Treiberprogramm: {{path}}", - "driver_manager.log_modal.empty": "Für diesen Treiber gibt es noch keine Vorgangsprotokolle.", - "driver_manager.message.load_status_failed": "Treiberstatus konnte nicht geladen werden", - "driver_manager.message.load_status_failed_detail": "Treiberstatus konnte nicht geladen werden: {{detail}}", - "driver_manager.message.network_check_failed": "Treiber-Netzwerkprüfung fehlgeschlagen", - "driver_manager.message.network_check_failed_detail": "Treiber-Netzwerkprüfung fehlgeschlagen: {{detail}}", - "driver_manager.message.network_check_completed": "Treiber-Netzwerkprüfung abgeschlossen", - "driver_manager.message.load_version_failed": "Versionsliste für {{name}} konnte nicht geladen werden", - "driver_manager.message.load_version_failed_detail": "Versionsliste für {{name}} konnte nicht geladen werden: {{detail}}", - "driver_manager.message.install_start": "Installation gestartet", - "driver_manager.message.install_failed": "{{name}} konnte nicht installiert werden", - "driver_manager.message.install_failed_detail": "{{name}} konnte nicht installiert werden: {{detail}}", - "driver_manager.message.install_success": "{{name}}{{version}} installiert und aktiviert", - "driver_manager.message.local_path_required": "Wähle eine gültige lokale Importquelle: {{source}}", - "driver_manager.message.local_import_start": "Import des lokalen Treiberpakets gestartet", - "driver_manager.message.local_import_failed": "Lokales Treiberpaket für {{name}} konnte nicht importiert werden", - "driver_manager.message.local_import_failed_detail": "Lokales Treiberpaket für {{name}} konnte nicht importiert werden: {{detail}}", - "driver_manager.message.local_import_success": "Lokales Treiberpaket für {{name}}{{version}} installiert und aktiviert", - "driver_manager.message.select_local_file_failed": "Lokale Treiberpaketdatei konnte nicht ausgewählt werden", - "driver_manager.message.select_local_file_failed_detail": "Lokale Treiberpaketdatei konnte nicht ausgewählt werden: {{detail}}", - "driver_manager.message.local_file_required": "Wähle eine gültige Treiberpaketdatei", - "driver_manager.message.select_local_directory_failed": "Lokaler Treiberpaketordner konnte nicht ausgewählt werden", - "driver_manager.message.select_local_directory_failed_detail": "Lokaler Treiberpaketordner konnte nicht ausgewählt werden: {{detail}}", - "driver_manager.message.local_directory_required": "Wähle einen gültigen Treiberpaketordner", - "driver_manager.message.no_external_drivers_to_import": "Es gibt keine externen Treiber zum Importieren", - "driver_manager.message.skip.dedupe": "{{count}} wegen Dubletten übersprungen", - "driver_manager.message.skip.slim": "{{count}} wegen Slim-Build übersprungen", - "driver_manager.message.skip_suffix": ", {{items}}", - "driver_manager.message.overwrite_suffix": " (installierte überschreiben)", - "driver_manager.message.directory_import_completed": "Ordnerimport abgeschlossen{{mode}}: {{success}} erfolgreich{{skip}}", - "driver_manager.message.directory_import_completed_with_failure": "Ordnerimport abgeschlossen{{mode}}: {{success}} erfolgreich, {{failed}} fehlgeschlagen{{skip}}", - "driver_manager.message.directory_import_failed": "Ordnerimport fehlgeschlagen{{mode}}: {{failed}} fehlgeschlagen{{skip}}", - "driver_manager.message.open_directory_failed": "Treiberordner konnte nicht geöffnet werden", - "driver_manager.message.open_directory_failed_detail": "Treiberordner konnte nicht geöffnet werden: {{detail}}", - "driver_manager.message.remove_failed": "{{name}} konnte nicht entfernt werden", - "driver_manager.message.remove_failed_detail": "{{name}} konnte nicht entfernt werden: {{detail}}", - "driver_manager.message.remove_success": "{{name}} entfernt", - "driver_manager.network.alert.download_chain_unreachable": "Wichtig: Domains der Treiber-Downloadroute sind nicht erreichbar", - "driver_manager.network.alert.download_network_unreachable": "Wichtig: Treiber-Downloadnetzwerk ist nicht erreichbar", - "driver_manager.network.summary.download_chain_unreachable": "Die GitHub API ist erreichbar, aber die Asset-Domains für Treiberdownloads sind nicht erreichbar.", - "driver_manager.network.summary.unreachable_proxy_configured": "Einige Treiber-Downloadziele sind nicht erreichbar. Prüfe, ob der konfigurierte Proxy funktioniert, und versuche es erneut.", - "driver_manager.network.summary.proxy_recommended": "Einige Treiber-Downloadziele sind nicht erreichbar. Konfiguriere vor der Installation einen HTTP/HTTPS/SOCKS5-Proxy.", - "driver_manager.network.summary.unreachable": "Einige Treiber-Downloadziele sind nicht erreichbar. Prüfe das Netzwerk und versuche es erneut.", - "driver_manager.network.summary.reachable_with_proxy": "Das Treiber-Downloadnetzwerk ist über den konfigurierten Proxy erreichbar.", - "driver_manager.network.summary.reachable": "Das Treiber-Downloadnetzwerk ist erreichbar. Treiber können direkt installiert werden.", - "driver_manager.network.chain_alert.description": "GitHub-Seiten sind eventuell erreichbar, aber Treiberpakete werden beim Download auf Asset-Domains umgeleitet. Aktiviere zuerst den globalen Proxy im oberen GoNavi-Eintrag \"Proxy\" und trage lokale Adresse und Port der Proxy-App ein.", - "driver_manager.network.chain_alert.allow_hosts": "Wenn es weiter fehlschlägt, erlaube diese Hosts in den Proxy-Regeln: {{hosts}}. Wenn die Regeln nicht angepasst werden können, erwäge den TUN-Modus.", - "driver_manager.network.proxy_env_detected": "Proxy-Umgebungsvariablen erkannt: {{keys}}", - "driver_manager.network.details_label": "Details der Netzwerkprüfung anzeigen", - "driver_manager.network.github_latency": "Latenz der Proxy-Verbindung zu GitHub: {{status}}{{latency}}{{detail}}", - "driver_manager.network.reachable": "erreichbar", - "driver_manager.network.unreachable": "nicht erreichbar", - "driver_manager.network.no_result": "kein Ergebnis", - "driver_manager.network.latency_value": ", {{latency}}ms", - "driver_manager.network.error_value": ", {{detail}}", - "driver_manager.network.no_proxy_env": "Keine System-Proxy-Umgebungsvariablen erkannt.", - "driver_manager.network.checking": "Treiber-Downloadnetzwerk wird geprüft...", - "driver_manager.network.not_checked": "Netzwerkprüfung noch nicht abgeschlossen", - "driver_manager.progress.local_package_start": "Installation des lokalen Treiberpakets gestartet", - "driver_manager.progress.metadata_write": "Treibermetadaten werden geschrieben", - "driver_manager.progress.local_package_done": "Lokaler Treiberpaketimport abgeschlossen", - "driver_manager.progress.install_start": "Installation gestartet", - "driver_manager.progress.pure_go_enabled": "Installation abgeschlossen; reiner Go-Treiber aktiviert", - "driver_manager.progress.agent_install_start": "Installation des {{name}}-Treiberagenten gestartet", - "driver_manager.progress.agent_install_done": "Installation des {{name}}-Treiberagenten abgeschlossen", - "driver_manager.progress.download_prebuilt_agent": "Vorkompilierten {{name}}-Treiberagenten herunterladen", - "driver_manager.progress.download_bundle": "{{name}}-Treiberbundle herunterladen", - "driver_manager.progress.extract_agent_from_bundle": "{{name}}-Agent aus Treiberbundle extrahieren", - "driver_manager.progress.unzip_agent": "{{name}}-Treiberagent extrahieren", - "driver_manager.progress.source_build_preferred": "Lokalen Quellbuild zuerst für {{name}}-Treiberagent verwenden", - "driver_manager.progress.dev_build_fallback": "Kein vorkompiliertes Paket gefunden; lokaler Entwicklungsbuild wird versucht", - "driver_manager.progress.plan.source_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); diese Version erlaubt nur lokale Quellbuilds", - "driver_manager.progress.plan.source_first": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); zuerst lokaler Quellbuild, danach Download-Fallback", - "driver_manager.progress.plan.direct_then_bundle": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); {{direct}} vorkompilierte Direktlinks, danach {{bundle}} Treiberbundle-Quellen", - "driver_manager.progress.plan.explicit_direct": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); nur explizite Versionsassets, {{direct}} vorkompilierte Direktlinks", - "driver_manager.progress.plan.direct_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); {{direct}} vorkompilierte Direktlinks werden versucht", - "driver_manager.progress.plan.bundle_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); keine vorkompilierten Direktlinks, {{bundle}} Treiberbundle-Quellen werden versucht", - "driver_manager.progress.plan.source_fallback": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); bei nicht passenden Release-Assets wird auf lokalen Quellbuild zurückgegriffen", - "driver_manager.progress.fallback.direct_to_bundle": "Vorkompilierte Direktlinks passten nicht; Wechsel zum Treiberbundle-Fallback ({{name}}, {{bundle}} Bundle-Quellen verbleiben)", - "driver_manager.progress.fallback.explicit_skip_bundle": "Vorkompilierte Direktlinks passten nicht; nur explizite Assets erlaubt, Treiberbundle wird übersprungen ({{name}})", - "driver_manager.progress.fallback.bundle_available": "Direktlink nicht verfügbar; Wechsel zum Treiberbundle-Fallback ({{name}}, {{bundle}} Bundle-Quellen verbleiben)", - "driver_manager.progress.fallback.source_build": "Release-Assets passten nicht; lokaler Quellbuild-Fallback wird vorbereitet ({{name}})", - "driver_manager.progress.backend_empty": "Kein Fortschrittsdetail vom Backend", - "driver_manager.progress.backend_detail": "Backend-Detail: {{detail}}", - "driver_manager.progress.status.start": "BEGINN", - "driver_manager.progress.status.downloading": "DOWNLOAD", - "driver_manager.progress.status.done": "FERTIG", - "driver_manager.progress.status.error": "FEHLER", - "driver_manager.progress.status.unknown": "UNBEKANNT", - "driver_manager.option.force_overwrite_installed": "Installierte überschreiben", - "driver_manager.punctuation.list_separator": ", ", - "driver_manager.search.placeholder": "Treibername/-typ suchen, z. B. DuckDB oder clickhouse", - "driver_manager.search.built_in": "integriert", - "driver_manager.search.external": "extern", - "driver_manager.status.calculating": "Wird berechnet...", - "driver_manager.status.built_in_available": "Integriert verfügbar", - "driver_manager.status.installing_percent": "Installation {{percent}}%", - "driver_manager.status.enabled": "Aktiviert", - "driver_manager.status.installed": "Installiert", - "driver_manager.status.disabled": "Nicht aktiviert", - "driver_manager.status.full_required": "Full-Version erforderlich", - "driver_manager.version.default": "Standardversion", - "driver_manager.version.inline_suffix": " (Version {{version}})", - "driver_manager.version.group.year": "Jahr {{year}}", - "driver_manager.version.group.other": "Weitere", - "driver_manager.version.placeholder.select": "Treiberversion auswählen", - "driver_manager.version.placeholder.load_on_expand": "Aufklappen, um Versionen zu laden", - "driver_manager.version.installed_locked_with_version": "{{version}} (installiert; zum Ändern entfernen)", - "driver_manager.version.installed_locked": "Installiert (zum Ändern entfernen)", - "driver_manager.version.mongodb_hint": "Derzeit werden nur MongoDB 1.17.x und 2.x unterstützt. Ältere 1.x-Versionen stehen nicht zur Installation bereit.", - "driver_manager.backend.dialog.select_download_directory": "Treiber-Downloadordner auswählen", - "driver_manager.backend.dialog.select_package_file": "Treiberpaketdatei auswählen (kein JDBC Jar)", - "driver_manager.backend.dialog.select_package_directory": "Treiberpaketordner auswählen", - "driver_manager.backend.driver_fallback_name": "Treiber", - "driver_manager.backend.package_size.built_in": "Integriert", - "driver_manager.backend.package_size.to_be_published": "Noch zu veröffentlichen", - "driver_manager.backend.version.unlabeled": "Unbenannte Version", - "driver_manager.backend.version.latest_suffix": " (neueste)", - "driver_manager.backend.version.recommended_suffix": " (empfohlen)", - "driver_manager.backend.message.unsupported_builtin_manifest_url": "Nicht unterstützte integrierte Treiber-Manifest-URL: {{url}}", - "driver_manager.backend.message.jdbc_jar_unsupported": "JDBC Jar-Dateien können nicht direkt importiert werden. GoNavi verwendet Go-Treiber und optionale driver-agent-Pakete; nutze stattdessen ein Treiberpaket oder einen Treiberordner. Für Verbindungen zu Kingbase verwende bevorzugt den Verbindungstyp Kingbase oder trage kingbase / kingbase8 in einer benutzerdefinierten Verbindung ein.", - "driver_manager.backend.message.runtime_directory_configured": "Treiber-Laufzeitordner ist konfiguriert", - "driver_manager.backend.message.opened_directory": "Treiberordner geöffnet: {{path}}", - "driver_manager.backend.message.log_hint": " (Detailprotokoll: {{path}})", - "driver_manager.backend.message.local_import_failed_detail": "Lokales Treiberpaket konnte nicht importiert werden: {{detail}}", - "driver_manager.backend.message.metadata_write_failed_detail": "Treibermetadaten konnten nicht geschrieben werden: {{detail}}", - "driver_manager.backend.message.driver_install_success": "Treiber erfolgreich installiert", - "driver_manager.backend.message.download_failed_detail": "Treiber konnte nicht heruntergeladen und installiert werden: {{detail}}", - "driver_manager.backend.message.package_removed": "Treiberpaket entfernt", - "driver_manager.backend.error.unknown": "Unbekannter Fehler", - "driver_manager.backend.error.unsupported_driver_type": "Nicht unterstützter Treibertyp", - "driver_manager.backend.error.builtin_download_not_required": "Integrierte Treiber benötigen keine Downloads von Erweiterungspaketen", - "driver_manager.backend.error.builtin_install_not_required": "Integrierte Treiber benötigen keine Installation von Erweiterungspaketen", - "driver_manager.backend.error.builtin_version_not_required": "Integrierte Treiber benötigen keine Versionsauswahl", - "driver_manager.backend.error.builtin_package_not_required": "Integrierte Treiber haben keine Installationspakete", - "driver_manager.backend.error.builtin_remove_not_allowed": "Integrierte Treiber können nicht entfernt werden", - "driver_manager.backend.error.optional_go_only": "Hier können nur optionale Go-Treiber installiert und aktiviert werden", - "driver_manager.backend.error.package_size_unsupported": "Dieser Treiber unterstützt keine Abfragen zur Installationspaketgröße", - "driver_manager.backend.error.version_empty": "Version ist leer", - "driver_manager.backend.error.asset_name_empty": "Treiber-Assetname ist leer", - "driver_manager.backend.error.mongo_version_unsupported": "MongoDB-Version {{version}} wird nicht unterstützt; unterstützt werden nur 1.17.x und 2.x", - "driver_manager.backend.error.open_directory_unsupported": "Ordner können auf dieser Plattform nicht geöffnet werden: {{platform}}", - "driver_manager.backend.error.open_directory_failed": "Treiberordner konnte nicht geöffnet werden: {{detail}}", - "driver_manager.backend.error.create_directory_failed": "Treiberordner konnte nicht erstellt werden: {{detail}}", - "driver_manager.backend.error.remove_package_failed": "Treiberpaket konnte nicht entfernt werden: {{detail}}", - "driver_manager.backend.error.manifest_scheme_unsupported": "Nicht unterstütztes Treiber-Manifest-URL-Schema: {{scheme}}", - "driver_manager.backend.error.manifest_fetch_failed": "Treiber-Manifest konnte nicht abgerufen werden: {{detail}}", - "driver_manager.backend.error.manifest_parse_failed": "Treiber-Manifest konnte nicht gelesen werden: {{detail}}", - "driver_manager.backend.error.manifest_url_empty": "Treiber-Manifest-URL ist leer", - "driver_manager.backend.error.manifest_too_large": "Treiber-Manifest überschreitet die Größenbegrenzung", - "driver_manager.backend.error.local_manifest_url_invalid": "Ungültige lokale Treiber-Manifest-URL", - "driver_manager.backend.error.file_manifest_url_invalid": "Ungültige Datei-Treiber-Manifest-URL", - "driver_manager.backend.error.driver_type_empty": "Treibertyp ist leer", - "driver_manager.backend.error.no_driver_versions": "Keine verfügbaren Treiberversionen gefunden", - "driver_manager.backend.error.module_path_empty": "Modulpfad ist leer", - "driver_manager.backend.error.module_version_list_empty": "Modulversionsliste ist leer", - "driver_manager.backend.error.module_version_list_fetch_failed": "Modulversionsliste konnte nicht abgerufen werden: {{detail}}", - "driver_manager.backend.error.module_version_list_read_failed": "Modulversionsliste konnte nicht gelesen werden: {{detail}}", - "driver_manager.backend.error.driver_version_list_fetch_failed": "Treiberversionsliste konnte nicht abgerufen werden: {{detail}}", - "driver_manager.backend.error.driver_version_list_parse_failed": "Treiberversionsliste konnte nicht gelesen werden: {{detail}}", - "driver_manager.backend.error.cache_key_empty": "Cache key ist leer", - "driver_manager.backend.error.release_empty": "Release ist leer", - "driver_manager.backend.error.bundle_index_asset_missing": "Treiberbundle-Index-Asset wurde nicht gefunden", - "driver_manager.backend.error.bundle_index_empty": "Treiberbundle-Index ist leer", - "driver_manager.backend.error.bundle_index_fetch_failed": "Treiberbundle-Index konnte nicht abgerufen werden: {{detail}}", - "driver_manager.backend.error.bundle_index_parse_failed": "Treiberbundle-Index konnte nicht gelesen werden: {{detail}}", - "driver_manager.backend.error.tag_empty": "Tag ist leer", - "driver_manager.backend.error.api_url_empty": "API URL ist leer", - "driver_manager.backend.error.release_info_fetch_failed": "Release-Informationen konnten nicht abgerufen werden: {{detail}}", - "driver_manager.backend.error.local_package_path_empty": "Lokaler Treiberpaketpfad ist leer", - "driver_manager.backend.error.local_directory_path_empty": "Lokaler Treiberordnerpfad ist leer", - "driver_manager.backend.error.file_path_empty": "Dateipfad ist leer", - "driver_manager.backend.error.download_url_empty": "Download-URL ist leer", - "driver_manager.backend.error.bundle_url_empty": "Download-URL des Treiberbundles ist leer", - "driver_manager.backend.error.read_local_package_failed": "Lokales Treiberpaket konnte nicht gelesen werden: {{detail}}", - "driver_manager.backend.error.read_local_directory_failed": "Lokaler Treiberordner konnte nicht gelesen werden: {{detail}}", - "driver_manager.backend.error.scan_local_directory_failed": "Lokaler Treiberordner konnte nicht gescannt werden: {{detail}}", - "driver_manager.backend.error.open_local_package_failed": "Lokales Treiberpaket konnte nicht geöffnet werden: {{detail}}", - "driver_manager.backend.error.read_local_package_entry_failed": "Eintrag im lokalen Treiberpaket konnte nicht gelesen werden: {{detail}}", - "driver_manager.backend.error.download_failed": "Download fehlgeschlagen: {{detail}}", - "driver_manager.backend.error.bundle_download_failed": "Treiberbundle konnte nicht heruntergeladen werden: {{detail}}", - "driver_manager.backend.error.open_bundle_failed": "Treiberbundle konnte nicht geöffnet werden: {{detail}}", - "driver_manager.backend.error.read_bundle_entry_failed": "Eintrag im Treiberbundle konnte nicht gelesen werden: {{detail}}", - "driver_manager.backend.error.source_build_failed": "Lokaler Quellbuild fehlgeschlagen: {{detail}}", - "driver_manager.backend.error.prebuilt_downloads_failed": "Vorkompiliertes Paket konnte nicht heruntergeladen werden: {{detail}}", - "driver_manager.backend.status.built_in_available": "Integrierter Treiber ist verbindungsbereit", - "driver_manager.backend.status.optional_enabled": "Go-Treiber ist aktiviert und verbindungsbereit", - "driver_manager.backend.status.installed_pending_with_version": "Treiber ist installiert (Version: {{version}}) und wartet auf Aktivierung", - "driver_manager.backend.status.installed_pending": "Treiber ist installiert und wartet auf Aktivierung", - "driver_manager.backend.status.optional_disabled_with_version": "Nicht aktiviert (Version: {{version}})", - "driver_manager.backend.status.optional_disabled_generic": "Nicht aktiviert", - "driver_manager.backend.status.needs_update": "Neuinstallation erforderlich, um Treiberaktualisierungen anzuwenden.", - "driver_manager.backend.status.installed_revision": "installierte Revision {{revision}}.", - "driver_manager.backend.status.expected_revision": "erwartete Revision {{revision}}.", - "driver_manager.backend.status.affected_connections": "Betrifft {{count}} gespeicherte Verbindungen", - "driver_manager.backend.status.unrecognized_driver_type": "Nicht erkannter Datenquellentyp", - "driver_manager.backend.status.slim_build_required": "{{name}} ist im aktuellen slim build nicht enthalten. Installiere die Full-Version, um diesen Treiber zu verwenden.", - "driver_manager.backend.status.agent_path_failed": "Pfad des {{name}}-Treiberagenten konnte nicht aufgelöst werden. Installiere und aktiviere ihn im Driver Manager erneut.", - "driver_manager.backend.status.agent_missing": "{{name}}-Treiberagent fehlt. Installiere und aktiviere ihn im Driver Manager erneut.", - "driver_manager.backend.status.optional_disabled": "{{name}} Go-Treiber ist nicht aktiviert. Installiere und aktiviere ihn im Driver Manager.", - "driver_manager.backend.status.agent_unavailable_reinstall": "{{name}}-Treiberagent ist nicht verfügbar: {{detail}}. Installiere und aktiviere ihn im Driver Manager erneut.", - "driver_manager.backend.status.agent_arch_incompatible_detail": "Die Architektur des {{name}}-Treiberagenten ist inkompatibel: Datei={{file}}, aktueller Prozess={{process}}. Installiere und aktiviere ihn im Driver Manager erneut.", - "driver_manager.backend.network.probe.github_driver_release": "GitHub-Treiber-Releases", - "driver_manager.backend.network.probe.github_release_asset_domain": "GitHub Release-Asset-Domain", - "driver_manager.backend.network.probe.go_module_proxy": "Go-Modulproxy", - "driver_manager.backend.network.error.probe_url_empty": "Prüf-URL ist leer", - "driver_manager.backend.network.error.probe_host_missing": "Prüf-URL enthält keinen Host", - "driver_manager.backend.network.summary.download_chain_unreachable": "Die GitHub API ist erreichbar, aber die Treiber-Downloadkette ist nicht erreichbar. Aktiviere zuerst den globalen GoNavi-Proxy, erlaube github.com, api.github.com, release-assets.githubusercontent.com, objects.githubusercontent.com und raw.githubusercontent.com in den Proxyregeln, und erwäge danach TUN-Modus, falls es weiterhin fehlschlägt.", - "driver_manager.backend.progress.plan.source_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); diese Version erlaubt nur lokale Quellbuilds", - "driver_manager.backend.progress.plan.source_first": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); zuerst lokaler Quellbuild, danach Download-Fallback", - "driver_manager.backend.progress.plan.direct_then_bundle": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); {{direct}} vorkompilierte Direktlinks, danach {{bundle}} Treiberbundle-Quellen", - "driver_manager.backend.progress.plan.explicit_direct": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); nur explizite Versionsassets, {{direct}} vorkompilierte Direktlinks", - "driver_manager.backend.progress.plan.direct_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); {{direct}} vorkompilierte Direktlinks werden versucht", - "driver_manager.backend.progress.plan.bundle_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); keine vorkompilierten Direktlinks, {{bundle}} Treiberbundle-Quellen werden versucht", - "driver_manager.backend.progress.plan.source_fallback": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); bei nicht passenden Release-Assets wird auf lokalen Quellbuild zurückgegriffen", - "driver_manager.backend.progress.fallback.direct_to_bundle": "Vorkompilierte Direktlinks passten nicht; Wechsel zum Treiberbundle-Fallback ({{name}}, {{bundle}} Bundle-Quellen verbleiben)", - "driver_manager.backend.progress.fallback.explicit_skip_bundle": "Vorkompilierte Direktlinks passten nicht; nur explizite Assets erlaubt, Treiberbundle wird übersprungen ({{name}})", - "driver_manager.backend.progress.fallback.bundle_available": "Direktlink nicht verfügbar; Wechsel zum Treiberbundle-Fallback ({{name}}, {{bundle}} Bundle-Quellen verbleiben)", - "driver_manager.backend.progress.fallback.source_build": "Release-Assets passten nicht; lokaler Quellbuild-Fallback wird vorbereitet ({{name}})", - "data_sync.action.analyze_diff": "Unterschiede analysieren", - "data_sync.action.cancel": "Abbrechen", - "data_sync.action.close": "Schließen", - "data_sync.action.continue_sync": "Synchronisierung fortsetzen", - "data_sync.action.next": "Weiter", - "data_sync.action.previous": "Zurück", - "data_sync.action.start_sync": "Synchronisierung starten", - "data_sync.action.view": "Ansehen", - "data_sync.compare_entry.action.return_to_compare": "Zurück zum Vergleich", - "data_sync.compare_entry.alert.data": "Dies ist der Datenvergleich. Er analysiert nur zeilenweise Unterschiede nach Primärschlüssel und schreibt keine Daten.", - "data_sync.compare_entry.alert.schema": "Dies ist der Strukturvergleich. Er analysiert nur Strukturunterschiede und erzeugt prüfbares SQL, ohne Änderungen auszuführen.", - "data_sync.compare_entry.option.auto_add_columns": "Kompatibles Änderungs-SQL für fehlende Zielspalten erzeugen (nur Vorschau, keine Ausführung)", - "data_sync.compare_entry.option.source_dataset.query": "Nach SQL-Ergebnismenge vergleichen", - "data_sync.compare_entry.option.source_dataset.table": "Nach Tabelle vergleichen", - "data_sync.compare_entry.preview.selection_hint": "Die Zeilenauswahl wirkt sich nur auf den SQL-Vorschaubereich aus und schreibt keine Daten.", - "data_sync.compare_entry.preview.sql.data_help": "Die SQL-Vorschau wird aus den ausgewählten Einfüge-, Aktualisierungs-, Lösch- und Zeilenbereichen erzeugt und dient nur der Differenzprüfung.", - "data_sync.compare_entry.preview.sql.schema_help": "Die SQL-Vorschau zeigt empfohlene Anweisungen für Strukturunterschiede und dient nur der Prüfung.", - "data_sync.compare_entry.result.completed": "Vergleich abgeschlossen", - "data_sync.compare_entry.result.failed": "Vergleich fehlgeschlagen", - "data_sync.compare_entry.result.running": "Vergleich läuft", - "data_sync.compare_entry.result.running_description": "Aktuelle Phase: {{stage}}{{table}}", - "data_sync.compare_entry.result.stage_fallback": "Wird ausgeführt", - "data_sync.compare_entry.result.success_summary": "{{tables}} Tabellen erfolgreich verglichen.", - "data_sync.compare_entry.result.table_suffix": ", Tabelle: {{table}}", - "data_sync.compare_entry.title.analysis_log": "Analyseprotokoll", - "data_sync.compare_entry.workflow_help": "Dieser Einstieg analysiert nur Unterschiede und zeigt Vorschauen. Er synchronisiert nicht, erstellt keine Tabellen, ergänzt keine Spalten und löscht keine Daten.", - "data_sync.entry_mode.compare.action.start": "Vergleich starten", - "data_sync.entry_mode.compare.option_title": "Vergleichsoptionen", - "data_sync.entry_mode.compare.result_title": "Vergleichsergebnis", - "data_sync.entry_mode.data_compare.badge": "Datenvergleich", - "data_sync.entry_mode.data_compare.description": "Vergleicht Datenunterschiede zwischen Quell- und Zieltabelle nach Primärschlüssel und zeigt Einfügungen, Aktualisierungen und Löschungen.", - "data_sync.entry_mode.data_compare.hero_description": "Geeignet zum Prüfen der Datenkonsistenz. Es werden nur Unterschiede analysiert und Zeilen angezeigt, ohne Daten zu schreiben.", - "data_sync.entry_mode.data_compare.table_select_label": "Tabellen für den Datenvergleich auswählen:", - "data_sync.entry_mode.data_compare.title": "Datenvergleich", - "data_sync.entry_mode.schema_compare.badge": "Strukturvergleich", - "data_sync.entry_mode.schema_compare.description": "Erzeugt Strukturunterschiede, Kompatibilitätsrisiken und prüfbares SQL zwischen Quell- und Zieltabelle.", - "data_sync.entry_mode.schema_compare.hero_description": "Geeignet vor Releases, um Strukturunterschiede zu prüfen. Es wird nur analysiert und angezeigt, ohne Strukturänderungen auszuführen.", - "data_sync.entry_mode.schema_compare.table_select_label": "Tabellen für den Strukturvergleich auswählen:", - "data_sync.entry_mode.schema_compare.title": "Tabellenstrukturvergleich", - "data_sync.entry_mode.sync.hero_description": "Geeignet, wenn Zieltabellen bereits vorhanden sind. Zuerst Unterschiede analysieren, dann ausgewählte Einfügungen, Aktualisierungen oder Löschungen ausführen.", - "data_sync.alert.auto_create_scope": "Automatisches Erstellen von Tabellen unterstützt derzeit nur MySQL nach Kingbase. Spalten, Primärschlüssel, normale Indizes, eindeutige Indizes und zusammengesetzte Indizes werden migriert; Volltext-, räumliche, Präfix- und Funktionsindizes werden ausdrücklich übersprungen.", - "data_sync.alert.auto_create_planner_scope": "Automatisches Erstellen von Tabellen unterstützt derzeit nur MySQL nach Kingbase. Spalten, Primärschlüssel, normale Indizes, eindeutige Indizes und zusammengesetzte Indizes werden migriert; Volltext-, räumliche, Präfix- und Funktionsindizes werden ausdrücklich übersprungen.", - "data_sync.alert.existing_target_only": "Die Datensynchronisierung arbeitet standardmäßig mit vorhandenen Zieltabellen. Wechseln Sie zur datenbankübergreifenden Migration, wenn Tabellen erstellt und Daten importiert werden sollen.", - "data_sync.alert.full_overwrite": "Vollständiges Überschreiben löscht Daten in den Zieltabellen. Verwenden Sie diese Option vorsichtig.", - "data_sync.alert.migration_mode": "Die datenbankübergreifende Migration ist aktiv. Nutzen Sie sie, um Tabellen in eine andere Datenquelle zu übertragen, automatisch zu erstellen und zu importieren.", - "data_sync.alert.query_mode": "Die Synchronisierung von SQL-Ergebnismengen unterstützt derzeit benutzerdefiniertes Quell-SQL zu genau einer vorhandenen Zieltabelle. Das Abfrageergebnis muss die Primärschlüsselspalte der Zieltabelle enthalten.", - "data_sync.alert.sync_mode": "Die Datensynchronisierung ist aktiv. Nutzen Sie sie für inkrementelle Synchronisierung oder Import mit Überschreiben, wenn Zieltabellen bereits vorhanden sind.", - "data_sync.badge.migration_mode": "Migrationsmodus", - "data_sync.badge.source_pending": "Quelle ausstehend", - "data_sync.badge.source_selected": "Quelle gewählt", - "data_sync.badge.sync_mode": "Synchronisierungsmodus", - "data_sync.badge.table_count": "{{count}} Tabellen", - "data_sync.backend.error.restore_source_secret_failed": "Verbindungsgeheimnis der Quelldatenbank konnte nicht wiederhergestellt werden: {{detail}}", - "data_sync.backend.error.restore_target_secret_failed": "Verbindungsgeheimnis der Zieldatenbank konnte nicht wiederhergestellt werden: {{detail}}", - "data_sync.backend.error.connect_source_failed": "Verbindung zur Quelldatenbank fehlgeschlagen: {{detail}}", - "data_sync.backend.error.connect_target_failed": "Verbindung zur Zieldatenbank fehlgeschlagen: {{detail}}", - "data_sync.backend.error.init_source_driver_failed": "Quelldatenbanktreiber konnte nicht initialisiert werden: {{detail}}", - "data_sync.backend.error.init_target_driver_failed": "Zieldatenbanktreiber konnte nicht initialisiert werden: {{detail}}", - "data_sync.backend.error.preview_composite_pk_unsupported": "Zusammengesetzter Primärschlüssel ({{columns}}) wird für die Datenvorschau nicht unterstützt", - "data_sync.backend.error.preview_pk_required": "Kein Primärschlüssel vorhanden; Datenvorschau wird nicht unterstützt", - "data_sync.backend.error.target_pk_required_for_query_diff": "Die Zieltabelle hat keinen Primärschlüssel; SQL-Ergebnismengen-Differenzanalyse wird nicht unterstützt", - "data_sync.backend.result.analyzed_tables": "Differenzanalyse für {{count}} Tabelle(n) abgeschlossen", - "data_sync.backend.result.analyzed_target_tables": "Differenzanalyse für {{count}} Zieltabelle(n) abgeschlossen", - "data_sync.backend.summary.diff_completed": "Differenzanalyse abgeschlossen", - "data_sync.backend.summary.source_query_diff_completed": "SQL-Ergebnismengen-Differenzanalyse abgeschlossen", - "data_sync.backend.validation.query_mode_data_only": "SQL-Ergebnismengen-Sync unterstützt derzeit nur reine Datensynchronisierung", - "data_sync.backend.validation.single_target_table_required": "SQL-Ergebnismengen-Sync erfordert genau eine Zieltabelle", - "data_sync.backend.validation.source_query_required": "Quellabfrage-SQL ist erforderlich", - "data_sync.backend.validation.target_table_required": "Zieltabelle ist erforderlich", - "data_sync.backend.warning.index_columns_missing": "Index {{name}} hat keine Spaltendefinition und wurde übersprungen", - "data_sync.backend.warning.index_prefix_length_unsupported": "Index {{name}} verwendet eine Präfixlänge und kann derzeit nicht automatisch migriert werden", - "data_sync.backend.warning.index_type_unsupported": "Index {{name}} Typ={{type}} kann derzeit nicht automatisch migriert werden", - "data_sync.confirm.full_overwrite.content": "Vollständiges Überschreiben löscht zuerst die Daten der Zieltabelle und fügt danach Zeilen ein. Bestätigen Sie, dass die Zieldatenbank gesichert wurde.", - "data_sync.confirm.full_overwrite.ok": "Fortfahren", - "data_sync.confirm.full_overwrite.title": "Vollständiges Überschreiben bestätigen", - "data_sync.modal.full_overwrite_title": "Vollständiges Überschreiben bestätigen", - "data_sync.modal.full_overwrite_content": "Vollständiges Überschreiben löscht zuerst die Daten der Zieltabelle und fügt danach Zeilen ein. Bestätigen Sie, dass die Zieldatenbank gesichert wurde.", - "data_sync.modal.full_overwrite_ok": "Fortfahren", - "data_sync.diff.column.delete": "Löschen", - "data_sync.diff.column.insert": "Einfügen", - "data_sync.diff.column.plan": "Ablaufplan", - "data_sync.diff.column.preview": "Vorschau", - "data_sync.diff.column.risk": "Risiko", - "data_sync.diff.column.same": "Gleich", - "data_sync.diff.column.table": "Tabelle", - "data_sync.diff.column.target_table": "Zieltabelle", - "data_sync.diff.column.update": "Aktualisieren", - "data_sync.diff.more_warnings": "{{count}} weitere nicht angezeigt", - "data_sync.diff.target_exists": "Vorhanden", - "data_sync.diff.target_missing": "Fehlt", - "data_sync.diff.title": "Vergleichsergebnis", - "data_sync.diff.warning_title": "Die Vorprüfung hat Risiken oder eingeschränkte Punkte gefunden. Prüfen Sie diese vor der Ausführung.", - "data_sync.message.precheck_warnings": "Die Vorprüfung hat Risiken oder eingeschränkte Punkte gefunden. Prüfen Sie diese vor der Ausführung.", - "data_sync.message.more_items_collapsed": "{{count}} weitere nicht angezeigt", - "data_sync.table.table_name": "Tabelle", - "data_sync.table.target_table": "Zieltabelle", - "data_sync.table.target_exists": "Vorhanden", - "data_sync.table.target_missing": "Fehlt", - "data_sync.table.plan": "Ablaufplan", - "data_sync.table.insert": "Einfügen", - "data_sync.table.update": "Aktualisieren", - "data_sync.table.delete": "Löschen", - "data_sync.table.same": "Gleich", - "data_sync.table.risk": "Risiko", - "data_sync.table.preview": "Vorschau", - "data_sync.title.compare_result": "Vergleichsergebnis", - "data_sync.field.connection": "Verbindung", - "data_sync.field.database": "Datenbank", - "data_sync.field.migration_content": "Migrationsinhalt", - "data_sync.field.migration_mode": "Migrationsmodus", - "data_sync.field.mongo_collection_name": "Mongo-Collection-Name (optional)", - "data_sync.field.source_dataset_mode": "Quelldatenmodus", - "data_sync.field.source_query_sql": "Quellabfrage-SQL", - "data_sync.field.sync_content": "Synchronisierungsinhalt", - "data_sync.field.sync_mode": "Synchronisierungsmodus", - "data_sync.field.target_table": "Zieltabelle", - "data_sync.field.target_table_requirement": "Anforderung an Zieltabelle", - "data_sync.field.target_table_strategy": "Strategie für Zieltabelle", - "data_sync.field.workflow_type": "Funktionstyp", - "data_sync.help.mongo_collection_mongo_to_redis": "Bei MongoDB nach Redis wählen Sie meistens direkt die Quell-Collection. Lassen Sie das Feld leer, sofern kein ausdrücklicher Ersatzname nötig ist.", - "data_sync.help.mongo_collection_redis_to_mongo": "Leer lassen, um den Standard-Collection-Namen zu verwenden. Wenn ein Wert eingetragen ist, schreibt dieser Lauf den Redis-Keyspace in diese Mongo-Collection.", - "data_sync.help.workflow_type": "Wählen Sie zuerst, ob dieser Lauf vorhandene Zieltabellen synchronisiert oder eine datenbankübergreifende Migration ausführt. Die Seite passt sicherere Standardwerte an den Funktionstyp an.", - "data_sync.help.select_tables": "Zu synchronisierende Tabellen auswählen:", - "data_sync.help.source_query_mode": "Geben Sie Quellabfrage-SQL ein und wählen Sie eine Zieltabelle. Die Unterschiedsanalyse vergleicht diese Ergebnismenge direkt mit der Zieltabelle.", - "data_sync.hero.migration_description": "Quelltabellen in eine andere Datenbank übertragen, nach Strategie Tabellen erstellen, Daten importieren und kompatible Indizes ergänzen.", - "data_sync.hero.migration_title": "Datenquellenübergreifende Migration", - "data_sync.hero.sync_description": "Vorhandene Zieltabellen verwenden, zuerst Unterschiede vergleichen und dann ausgewählte Einfügungen, Aktualisierungen oder Löschungen ausführen.", - "data_sync.hero.sync_title": "Datensynchronisierung", - "data_sync.log.level.error": "Fehler", - "data_sync.log.level.info": "Information", - "data_sync.log.level.warn": "Warnung", - "data_sync.log.title": "Ausführungsprotokoll", - "data_sync.message.analysis_complete": "Unterschiedsanalyse abgeschlossen", - "data_sync.message.analysis_failed": "Unterschiedsanalyse fehlgeschlagen", - "data_sync.message.analysis_failed_detail": "Unterschiedsanalyse fehlgeschlagen: {{detail}}", - "data_sync.message.analyze_before_sync": "Analysieren Sie die Unterschiede, bevor Sie die Synchronisierung starten", - "data_sync.message.close_blocked_running": "Die Synchronisierung läuft. Das Fenster kann noch nicht geschlossen werden.", - "data_sync.message.fetch_source_databases_failed": "Quelldatenbanken konnten nicht geladen werden", - "data_sync.message.fetch_source_databases_failed_detail": "Quelldatenbanken konnten nicht geladen werden: {{detail}}", - "data_sync.message.fetch_tables_failed": "Tabellen konnten nicht geladen werden", - "data_sync.message.fetch_tables_failed_detail": "Tabellen konnten nicht geladen werden: {{detail}}", - "data_sync.message.fetch_target_databases_failed": "Zieldatenbanken konnten nicht geladen werden", - "data_sync.message.fetch_target_databases_failed_detail": "Zieldatenbanken konnten nicht geladen werden: {{detail}}", - "data_sync.message.preview_load_failed": "Unterschiedsvorschau konnte nicht geladen werden", - "data_sync.message.preview_load_failed_detail": "Unterschiedsvorschau konnte nicht geladen werden: {{detail}}", - "data_sync.message.select_connections_first": "Wählen Sie zuerst die Verbindungen", - "data_sync.message.select_databases_first": "Wählen Sie zuerst die Datenbanken", - "data_sync.message.select_source_database": "Wählen Sie die Quelldatenbank", - "data_sync.message.select_target_database": "Wählen Sie die Zieldatenbank", - "data_sync.message.sync_execution_failed": "Synchronisierungsausführung fehlgeschlagen", - "data_sync.message.sync_execution_failed_detail": "Synchronisierungsausführung fehlgeschlagen: {{detail}}", - "data_sync.option.auto_add_columns": "Fehlende Zielspalten automatisch ergänzen (derzeit für MySQL-Ziele und MySQL nach Kingbase; SQL-Ergebnismengenmodus wird nicht unterstützt)", - "data_sync.option.content.both": "Schema und Daten synchronisieren", - "data_sync.option.content.data": "Nur Daten", - "data_sync.option.content.schema": "Nur Schema", - "data_sync.option.create_indexes": "Kompatible normale und eindeutige Indizes automatisch migrieren (nur bei automatischer Tabellenerstellung)", - "data_sync.option.source_dataset.query": "Nach SQL-Ergebnismenge synchronisieren", - "data_sync.option.source_dataset.table": "Nach Tabelle synchronisieren", - "data_sync.option.show_same_tables": "Gleiche Tabellen anzeigen", - "data_sync.option.sync_mode.full_overwrite": "Vollständiges Überschreiben (Zieltabelle vor dem Einfügen leeren)", - "data_sync.option.sync_mode.insert_only": "Nur einfügen (kein Zielvergleich; Tabellen ohne Primärschlüssel werden übersprungen)", - "data_sync.option.sync_mode.insert_update": "Inkrementelle Synchronisierung (Unterschiede vergleichen, danach Einfügungen, Aktualisierungen und Löschungen wählen)", - "data_sync.option.target_strategy.auto_create_if_missing": "Zieltabelle automatisch erstellen, wenn sie fehlt", - "data_sync.option.target_strategy.existing_only": "Nur vorhandene Zieltabellen verwenden", - "data_sync.option.target_strategy.smart": "Intelligenter Modus (bei vorhandener Tabelle direkt importieren, sonst automatisch erstellen)", - "data_sync.option.workflow.migration": "Datenbankübergreifende Migration (automatisch erstellen und importieren)", - "data_sync.option.workflow.sync": "Datensynchronisierung (Unterschiede mit vorhandenen Zieltabellen synchronisieren)", - "data_sync.placeholder.mongo_collection_name": "Mongo-Collection-Namen eingeben", - "data_sync.placeholder.source_query_sql": "Beispiel: SELECT id, name, email FROM users WHERE status = 'active'", - "data_sync.placeholder.target_table": "Eine Zieltabelle auswählen", - "data_sync.preview.action.copy_sql": "SQL kopieren", - "data_sync.preview.column.changed_columns": "Geänderte Spalten", - "data_sync.preview.column.data": "Daten", - "data_sync.preview.column.detail": "Einzelheiten", - "data_sync.preview.column.primary_key": "Primärschlüssel", - "data_sync.preview.data_summary": "{{inserts}} einfügen, {{updates}} aktualisieren, {{deletes}} löschen (Vorschau zeigt je Typ höchstens 200 Zeilen)", - "data_sync.preview.delete_warning": "Löschen ist standardmäßig nicht ausgewählt. Aktivieren Sie es erst nach Prüfung der fachlichen Auswirkungen.", - "data_sync.preview.loading": "Unterschiedsvorschau wird geladen...", - "data_sync.preview.message.copy_failed": "Kopieren fehlgeschlagen. Bitte manuell kopieren.", - "data_sync.preview.message.sql_copied": "SQL kopiert", - "data_sync.preview.schema_plan_help": "Die für diesen Schema-Synchronisierungslauf geplanten Anweisungen werden unten angezeigt.", - "data_sync.preview.schema_statement_count": "{{count}} Schemaänderungsanweisungen erkannt", - "data_sync.preview.schema_warning_title": "Die Schemavorschau enthält Risiken oder eingeschränkte Punkte", - "data_sync.preview.selection_hint.delete": "Wenn keine Zeilen ausgewählt sind, werden alle Löschunterschiede synchronisiert. Entfernen Sie Löschen im Vergleichsergebnis, um Löschungen zu überspringen.", - "data_sync.preview.selection_hint.insert": "Wenn keine Zeilen ausgewählt sind, werden alle Einfügungsunterschiede synchronisiert. Entfernen Sie Einfügen im Vergleichsergebnis, um Einfügungen zu überspringen.", - "data_sync.preview.selection_hint.update": "Wenn keine Zeilen ausgewählt sind, werden alle Aktualisierungsunterschiede synchronisiert. Entfernen Sie Aktualisieren im Vergleichsergebnis, um Aktualisierungen zu überspringen.", - "data_sync.preview.side.source": "Quelle", - "data_sync.preview.side.target": "Ziel", - "data_sync.preview.sql.data_help": "Die SQL-Vorschau wird aus den ausgewählten Einfügungen, Aktualisierungen, Löschungen und Zeilenbereichen zur Prüfung erzeugt.", - "data_sync.preview.sql.no_data_sql": "-- Für die aktuelle Auswahl ist kein SQL verfügbar", - "data_sync.preview.sql.no_schema_changes": "-- Für die aktuelle Tabelle gibt es keine ausführbaren Schemaänderungen", - "data_sync.preview.sql.schema_help": "Die SQL-Vorschau zeigt die auszuführenden Schemaänderungsanweisungen zur Prüfung.", - "data_sync.preview.sql.schema_statement_count": "{{count}} Schemaänderungsanweisungen", - "data_sync.preview.sql.statement_count": "{{count}} Anweisungen (Vorschaudaten zeigen je Typ höchstens 200 Zeilen)", - "data_sync.preview.tab.delete": "Löschen({{count}})", - "data_sync.preview.tab.insert": "Einfügen({{count}})", - "data_sync.preview.tab.schema": "Struktur({{count}})", - "data_sync.preview.tab.sql": "SQL({{count}})", - "data_sync.preview.tab.update": "Aktualisieren({{count}})", - "data_sync.preview.title": "Unterschiedsvorschau: {{table}}", - "data_sync.preview.update_detail_title": "Aktualisierungsdetails: {{table}} / {{pk}}", - "data_sync.plan.use_existing_target": "In vorhandene Zieltabelle importieren", - "data_sync.plan.target_missing_manual_create": "Zieltabelle fehlt; bitte zuerst manuell erstellen", - "data_sync.plan.target_missing_auto_create": "Zieltabelle fehlt; sie wird automatisch erstellt und danach importiert", - "data_sync.plan.target_missing_cannot_sync": "Zieltabelle fehlt; Synchronisierung kann nicht ausgeführt werden", - "data_sync.plan.target_missing_auto_create_all": "Zieltabelle fehlt; beim Ausführen wird sie automatisch erstellt und alle Quelldaten werden importiert", - "data_sync.plan.schema_changes_detected": "{{count}} Strukturänderungen erkannt", - "data_sync.plan.add_missing_columns_before_import": "{{count}} fehlende Felder vor dem Import ergänzen", - "data_sync.plan.missing_columns_no_executable_sql": "Der Zieltabelle fehlen {{count}} Felder, aber es wurde kein ausführbares Ergänzungs-SQL erzeugt", - "data_sync.plan.missing_columns_auto_add_unsupported": "Der Zieltabelle fehlen {{count}} Felder, und automatische Feldergänzung wird für diese Datenbankkombination nicht unterstützt", - "data_sync.plan.missing_columns_auto_add_disabled": "Der Zieltabelle fehlen {{count}} Felder, und automatische Feldergänzung ist nicht aktiviert", - "data_sync.plan.schema_only_no_data_diff": "Nur Struktur wird synchronisiert; Daten-Differenzanalyse wurde nicht ausgeführt", - "data_sync.plan.schema_only": "Nur Struktur synchronisieren", - "data_sync.plan.schema_preview": "Strukturvorschau", - "data_sync.plan.schema_aligned": "Tabellenstruktur ist bereits identisch", - "data_sync.plan.auto_create_unsupported": "Automatische Tabellenerstellung wird für diese Datenbankkombination nicht unterstützt", - "data_sync.plan.tdengine_time_column_missing": "In der Quelltabelle wurde keine Zeitspalte erkannt, die der ersten TDengine-Spalte zugeordnet werden kann; automatische Tabellenerstellung ist nicht möglich", - "data_sync.plan.use_existing_target_collection": "In vorhandene Ziel-Collection importieren", - "data_sync.plan.target_collection_missing_manual_create": "Ziel-Collection fehlt; bitte zuerst manuell erstellen", - "data_sync.plan.target_collection_missing_auto_create": "Ziel-Collection fehlt; sie wird automatisch erstellt und danach importiert", - "data_sync.plan.redis_key_to_mongodb_document": "MongoDB-Dokumente aus Redis Keys erzeugen und importieren", - "data_sync.plan.migrate_to_collection": "In Collection {{collection}} migrieren", - "data_sync.plan.migrate_to_target": "Nach {{target}} migrieren", - "data_sync.plan.source_query_preview": "Vorschau für SQL-Ergebnismengen-Sync", - "data_sync.plan.migration_kernel_planning": "Dieses Datenbankpaar ist in der Migrationsplanung und wartet auf Strukturableitung und Zieldialekt-Erzeugung", - "data_sync.plan.backend_summary": "Planübersicht", - "data_sync.progress.stage.analysis_started": "Differenzanalyse gestartet", - "data_sync.progress.stage.analysis_completed": "Differenzanalyse abgeschlossen", - "data_sync.progress.stage.sync_started": "Synchronisierung gestartet", - "data_sync.progress.stage.connecting_source": "Verbindung zur Quelldatenbank", - "data_sync.progress.stage.connecting_target": "Verbindung zur Zieldatenbank", - "data_sync.progress.stage.analyzing_table": "Tabelle wird analysiert ({{current}}/{{total}})", - "data_sync.progress.stage.syncing_table": "Tabelle wird synchronisiert ({{current}}/{{total}})", - "data_sync.progress.stage.table_completed": "Tabellenverarbeitung abgeschlossen", - "data_sync.progress.stage.creating_target_table": "Zieltabelle wird erstellt", - "data_sync.progress.stage.syncing_schema": "Tabellenstruktur wird synchronisiert", - "data_sync.progress.stage.creating_indexes": "Indizes werden erstellt", - "data_sync.progress.stage.reading_source": "Quelldaten werden gelesen", - "data_sync.progress.stage.reading_target": "Zieldaten werden gelesen", - "data_sync.progress.stage.comparing_diff": "Differenzen werden verglichen", - "data_sync.progress.stage.clearing_target": "Zieltabelle wird geleert", - "data_sync.progress.stage.checking_columns": "Feldkonsistenz wird geprüft", - "data_sync.progress.stage.applying_changes": "Änderungen werden angewendet", - "data_sync.progress.stage.completed": "Synchronisierung abgeschlossen", - "data_sync.progress.stage.failed": "Synchronisierung fehlgeschlagen", - "data_sync.progress.stage.redis_keyspace_started": "Redis-Keyspace-Migration gestartet", - "data_sync.progress.stage.creating_target_collection": "Ziel-Collection wird erstellt", - "data_sync.progress.stage.migrating_key": "Key wird migriert ({{current}}/{{total}})", - "data_sync.progress.stage.mongodb_keyspace_started": "MongoDB-Keyspace-Migration gestartet", - "data_sync.progress.stage.migrating_collection": "Collection wird migriert ({{current}}/{{total}})", - "data_sync.progress.stage.collection_completed": "Collection-Verarbeitung abgeschlossen", - "data_sync.progress.stage.backend_update": "Fortschritt wird verarbeitet", - "data_sync.progress.stage.analyzing_diff": "Unterschiede werden analysiert", - "data_sync.progress.stage.executing": "Ausführung läuft", - "data_sync.progress.stage.preparing": "Vorbereitung läuft", - "data_sync.query_mode.help": "Geben Sie Quellabfrage-SQL ein und wählen Sie eine Zieltabelle. Die Unterschiedsanalyse vergleicht diese Ergebnismenge direkt mit der Zieltabelle.", - "data_sync.result.completed": "Synchronisierung abgeschlossen", - "data_sync.result.failed": "Synchronisierung fehlgeschlagen", - "data_sync.result.failed_description": "Die Synchronisierung wurde nicht abgeschlossen.", - "data_sync.result.failed_detail": "Synchronisierung fehlgeschlagen: {{detail}}", - "data_sync.result.running": "Synchronisierung läuft", - "data_sync.result.running_description": "Aktuelle Phase: {{stage}}{{table}}", - "data_sync.result.success_summary": "{{tables}} Tabellen erfolgreich synchronisiert. Eingefügt: {{inserted}}, aktualisiert: {{updated}}", - "data_sync.result.table_suffix": ", Tabelle: {{table}}", - "data_sync.section.migration_options": "Migrationsoptionen", - "data_sync.section.source_database": "Quelldatenbank", - "data_sync.section.sync_options": "Synchronisierungsoptionen", - "data_sync.section.target_database": "Zieldatenbank", - "data_sync.title.source_database": "Quelldatenbank", - "data_sync.title.target_database": "Zieldatenbank", - "data_sync.title.migration_options": "Migrationsoptionen", - "data_sync.title.sync_options": "Synchronisierungsoptionen", - "data_sync.title.execution_log": "Ausführungsprotokoll", - "data_sync.step.configure": "Quelle und Ziel konfigurieren", - "data_sync.step.result": "Ausführungsergebnis", - "data_sync.step.select_tables": "Tabellen auswählen", - "data_sync.table_picker.help": "Zu synchronisierende Tabellen auswählen:", - "data_sync.table_picker.item_unit": "Eintrag", - "data_sync.table_picker.items_unit": "Einträge", - "data_sync.table_picker.not_found": "Keine Daten", - "data_sync.table_picker.search_placeholder": "Tabellen suchen...", - "data_sync.table_picker.selected_title": "Ausgewählte Tabellen", - "data_sync.table_picker.show_same": "Gleiche Tabellen anzeigen", - "data_sync.table_picker.source_title": "Quelltabellen", - "data_sync.transfer.source_tables": "Quelltabellen", - "data_sync.transfer.selected_tables": "Ausgewählte Tabellen", - "data_sync.transfer.item_unit": "Eintrag", - "data_sync.transfer.items_unit": "Einträge", - "data_sync.transfer.search_placeholder": "Tabellen suchen...", - "data_sync.transfer.empty": "Keine Daten", - "data_sync.title.migration_description": "Tabellenerstellung, Datenimport und Risiko-Vorprüfung von der Quelle bis zum Ziel durchführen.", - "data_sync.title.migration_workbench": "Arbeitsbereich für datenbankübergreifende Migration", - "data_sync.title.sync_description": "Unterschiede vergleichen, Synchronisierung ausführen und Ergebnisse mit vorhandenen Zieltabellen bestätigen.", - "data_sync.title.sync_workbench": "Arbeitsbereich für Datensynchronisierung", - "data_sync.title.migration": "Datenquellenübergreifende Migration", - "data_sync.title.sync": "Datensynchronisierung", - "data_sync.validation.query_mode_data_only": "Die Synchronisierung von SQL-Ergebnismengen unterstützt nur Datensynchronisierung", - "data_sync.validation.single_target_table_required": "Für die Synchronisierung von SQL-Ergebnismengen ist genau eine Zieltabelle erforderlich", - "data_sync.validation.source_query_required": "Geben Sie Quellabfrage-SQL ein", - "data_sync.validation.table_required": "Wählen Sie mindestens eine Tabelle", - "data_sync.plan.use_existing_target_table": "In vorhandene Zieltabelle importieren", - "data_sync.plan.missing_columns_auto_add": "{{count}} fehlende Felder vor dem Import ergänzen", - "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "In der Quelltabelle wurde keine Zeitspalte erkannt, die der ersten TDengine-Spalte zugeordnet werden kann; automatische Tabellenerstellung ist nicht möglich", - "data_sync.plan.redis_mongo_keyspace_import": "MongoDB-Dokumente aus Redis Keys erzeugen und importieren", - "data_sync.plan.redis_mongo_target_collection_missing_manual": "Ziel-Collection fehlt; bitte zuerst manuell erstellen", - "data_sync.plan.redis_mongo_target_collection_auto_create": "Ziel-Collection fehlt; sie wird automatisch erstellt und danach importiert", - "data_sync.backend.summary.redis_mongo_planned_action": "In Collection {{collection}} migrieren", - "data_sync.backend.summary.mongo_redis_planned_action": "Nach {{target}} migrieren", - "data_sync.plan.mongo_relational_kernel_planned": "Dieses Datenbankpaar ist in der Migrationsplanung und wartet auf Strukturableitung und Zieldialekt-Erzeugung", - "data_sync.progress.stage.redis_mongo_creating_collection": "Ziel-Collection wird erstellt", - "data_sync.progress.stage.redis_mongo_migrating_key": "Key wird migriert ({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_migrating_collection": "Collection wird migriert ({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_collection_completed": "Collection-Verarbeitung abgeschlossen", - "data_sync.backend.error.apply_changes_unsupported": "Der Zieltreiber unterstützt das Anwenden von Datenänderungen nicht", - "data_sync.backend.error.apply_source_query_changes_failed": "Änderungen am SQL-Ergebnissatz konnten nicht angewendet werden: {{detail}}", - "data_sync.backend.error.clear_target_failed": "Zieltabelle konnte nicht geleert werden: {{detail}}", - "data_sync.backend.error.connect_source_mongodb_failed": "Verbindung zur Quell-MongoDB fehlgeschlagen: {{detail}}", - "data_sync.backend.error.connect_source_redis_failed": "Verbindung zum Quell-Redis fehlgeschlagen: {{detail}}", - "data_sync.backend.error.connect_target_mongodb_failed": "Verbindung zur Ziel-MongoDB fehlgeschlagen: {{detail}}", - "data_sync.backend.error.connect_target_redis_failed": "Verbindung zum Ziel-Redis fehlgeschlagen: {{detail}}", - "data_sync.backend.error.diff_composite_pk_unsupported": "Zusammengesetzter Primärschlüssel ({{columns}}) wird für die Differenzsynchronisierung nicht unterstützt", - "data_sync.backend.error.diff_pk_required": "Kein Primärschlüssel vorhanden. Differenzsynchronisierung wird nicht unterstützt; verwenden Sie für den Direktimport den Modus insert-only oder full-overwrite.", - "data_sync.backend.error.execute_source_query_failed": "Quellabfrage konnte nicht ausgeführt werden: {{detail}}", - "data_sync.backend.error.init_source_mongodb_driver_failed": "Quell-MongoDB-Treiber konnte nicht initialisiert werden: {{detail}}", - "data_sync.backend.error.init_target_mongodb_driver_failed": "Ziel-MongoDB-Treiber konnte nicht initialisiert werden: {{detail}}", - "data_sync.backend.error.inspect_mongodb_collection_failed": "Ziel-MongoDB collection konnte nicht geprüft werden: {{detail}}", - "data_sync.backend.error.list_mongodb_collections_failed": "MongoDB collection konnten nicht aufgelistet werden: {{detail}}", - "data_sync.backend.error.load_target_columns_failed": "Zieltabellenspalten konnten nicht geladen werden: {{detail}}", - "data_sync.backend.error.mongo_document_write_unsupported": "Der Zieltreiber unterstützt das Schreiben von MongoDB document nicht", - "data_sync.backend.error.mongo_redis_analyze_collection_failed": "MongoDB collection {{collection}} konnte nicht analysiert werden: {{detail}}", - "data_sync.backend.error.mongo_redis_document_key_missing": "Im MongoDB document fehlt das Feld key", - "data_sync.backend.error.mongo_redis_document_type_missing": "Im MongoDB document für Redis Key {{key}} fehlt Feld {{field}}", - "data_sync.backend.error.mongo_redis_empty_target_value": "Der Redis-Zielwert für Key {{key}} ist leer", - "data_sync.backend.error.mongo_redis_unsupported_type": "Redis Key {{key}} unterstützt den Typ {{type}} nicht", - "data_sync.backend.error.mongo_redis_value_invalid": "Redis Key {{key}} hat einen ungültigen {{type}} payload; tatsächlicher Typ={{actual}}", - "data_sync.backend.error.mongo_redis_write_key_failed": "Redis Key {{key}} konnte nicht geschrieben werden: {{detail}}", - "data_sync.backend.error.read_redis_key_failed": "Redis Key {{key}} konnte nicht gelesen werden: {{detail}}", - "data_sync.backend.error.read_source_table_failed": "Quelltabelle konnte nicht gelesen werden: {{detail}}", - "data_sync.backend.error.read_target_redis_key_failed": "Ziel-Redis Key {{key}} konnte nicht gelesen werden: {{detail}}", - "data_sync.backend.error.read_target_table_failed": "Zieltabelle konnte nicht gelesen werden: {{detail}}", - "data_sync.backend.error.redis_mongo_analyze_changes_failed": "Redis-Migrationsänderungen konnten nicht analysiert werden: {{detail}}", - "data_sync.backend.error.redis_mongo_apply_changes_failed": "Redis-Migrationsänderungen konnten nicht angewendet werden: {{detail}}", - "data_sync.backend.error.redis_mongo_build_changes_failed": "Redis-Migrationsänderungen konnten nicht erstellt werden: {{detail}}", - "data_sync.backend.error.redis_mongo_create_collection_failed": "Ziel-MongoDB collection konnte nicht erstellt werden: {{detail}}", - "data_sync.backend.error.scan_redis_keys_failed": "Redis Keys konnten nicht gescannt werden: {{detail}}", - "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "Die Zieltabelle hat einen zusammengesetzten Primärschlüssel ({{columns}}), daher wird die SQL-Ergebnissatz-Differenzanalyse nicht unterstützt", - "data_sync.backend.error.target_table_columns_missing": "Zieltabelle {{table}} fehlt oder ihre Spaltendefinitionen konnten nicht gelesen werden", - "data_sync.backend.result.mongo_redis_analyzed_collections": "{{count}} MongoDB collection für Redis-Migration analysiert", - "data_sync.backend.result.mongo_redis_completed": "MongoDB-keyspace-Migration abgeschlossen; verarbeitet: {{collections}} collection und {{keys}} Redis Key(s)", - "data_sync.backend.result.mongo_redis_no_collections": "Keine MongoDB collection für die Migration verfügbar", - "data_sync.backend.result.mongo_redis_no_documents": "Keine MongoDB Redis document für die Migration verfügbar", - "data_sync.backend.result.redis_mongo_analyzed_keys": "{{count}} Redis Key(s) für MongoDB-Migration analysiert", - "data_sync.backend.result.redis_mongo_completed": "Redis-keyspace-Migration abgeschlossen; verarbeitet: {{count}} Redis Key(s)", - "data_sync.backend.result.redis_mongo_no_keys": "Keine Redis Keys für die Migration verfügbar", - "data_sync.backend.summary.mongo_redis_diff": "Bei der Ausführung werden {{inserts}} Redis Key(s) eingefügt und {{updates}} Redis Key(s) aktualisiert", - "data_sync.backend.summary.mongo_redis_empty_collection": "In der collection wurden keine migrierbaren document gefunden", - "data_sync.backend.summary.mongo_redis_same_keys": "Die passenden Redis Keys sind bereits aktuell", - "data_sync.backend.summary.mongo_redis_warning_document_format": "Es werden nur document mit den Feldern key/type/ttl/value unterstützt", - "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB zu Redis stuft vollständiges Überschreiben auf inkrementelle Synchronisierung herab, um andere Redis Keys in der DB nicht zu löschen", - "data_sync.backend.summary.mongo_redis_warning_keyspace": "Document in der MongoDB collection werden mit keyspace-Semantik nach Redis geschrieben", - "data_sync.backend.summary.redis_mongo_insert_document": "Bei der Ausführung wird ein neues MongoDB document eingefügt", - "data_sync.backend.summary.redis_mongo_same_document": "Das passende MongoDB document ist bereits aktuell", - "data_sync.backend.summary.redis_mongo_update_document": "Bei der Ausführung wird das vorhandene MongoDB document aktualisiert", - "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key wird als MongoDB document geschrieben", - "data_sync.plan.data_import_without_diff": "Der aktuelle Modus importiert Quelltabellendaten ohne Differenzvergleich.", - "data_sync.plan.mongo_relational_entry_warning": "Für die {{objectKind}}-Migration von {{sourceType}} zu {{targetType}} ist derzeit nur ein Planungshinweis zur Strukturableitung verfügbar", - "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis zu MongoDB migriert mit keyspace-Semantik und führt keine Tabellenstrukturprüfungen aus", - "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Redis TTL und collection-Sortiersemantik werden als document-Felder erhalten, sind aber möglicherweise nicht vollständig äquivalent", - "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "Die aktuelle Strategie erfordert eine vorhandene Ziel-MongoDB collection; bei der Ausführung wird sie nicht automatisch erstellt", - "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state werden noch nicht migriert", - "data_sync.plan.target_missing_preview_unavailable": "Die Zieltabelle fehlt. Differenzvorschau ist nicht verfügbar.", - "data_sync.progress.stage.redis_mongo_started": "Redis-zu-MongoDB-keyspace-Migration gestartet", - "data_sync.progress.stage.mongo_redis_started": "MongoDB-zu-Redis-keyspace-Migration gestartet", - "data_sync.schema_inference.mongo_relational_issue": "Die Strukturableitung für {{sourceType}} -> {{targetType}} befindet sich noch in Entwicklung; derzeit ist nur ein Hinweis zur Migrationsplanung verfügbar.", - "data_sync.schema_inference.mongo_relational_resolution": "Künftige Iterationen werden Spaltendefinitionen und Typ-Degradationsrichtlinien aus Beispieldaten erzeugen.", - "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view-Semantik wird noch nicht automatisch zu PG-like-Zielen migriert", - "data_sync.backend.warning.auto_create_pair_unsupported": "Automatische Tabellenerstellung unterstützt derzeit nur MySQL -> Kingbase; aktuelles Paar={{sourceType}} -> {{targetType}}", - "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "Spalte {{column}} Typ {{type}} wurde zu json herabgestuft", - "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "Spalte {{column}} Typ {{type}} wurde zu jsonb herabgestuft", - "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "Spalte {{column}} enum-Typ {{type}} wurde zu varchar(255) herabgestuft", - "data_sync.backend.warning.clickhouse_order_by_tuple_used": "Es wurde kein Quell-Primärschlüssel erkannt, daher verwendet ClickHouse ORDER BY tuple(); die Abfrageleistung kann beeinträchtigt werden", - "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse erhält keine relationalen Fremdschlüssel- oder Unique-Constraint-Semantiken; nur Spalten und Daten werden migriert", - "data_sync.backend.warning.clickhouse_source_metadata_limited": "ClickHouse-Quellmetadaten für Indizes und Constraints sind begrenzt; Rückmigration konzentriert sich auf Spalten und Daten", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "Die ClickHouse-Quelle hat keine Primärschlüsselinformationen geliefert, daher erstellt die Ziel-MySQL-Tabelle keinen Primärschlüssel automatisch", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "Die ClickHouse-Quelle hat keine Primärschlüsselinformationen geliefert, daher erstellt die Ziel-PG-like-Tabelle keinen Primärschlüssel automatisch", - "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "Für ClickHouse-Ziele wird insert-only oder full-overwrite empfohlen; update/delete-Semantik unterscheidet sich von klassischen relationalen Datenbanken", - "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "Spalte {{column}} Typ {{type}} hat keine dedizierte MySQL-Zuordnung und wurde zu text herabgestuft", - "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "Spalte {{column}} Typ {{type}} hat keine dedizierte PG-like-Zuordnung und wurde zu text herabgestuft", - "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "Spalte {{column}} Typ {{type}} wurde zu numeric(20,0) zugeordnet, um unsigned-Überlauf zu vermeiden", - "data_sync.backend.warning.column_type_degraded_clickhouse_string": "Spalte {{column}} Typ {{type}} wurde zu String herabgestuft", - "data_sync.backend.warning.column_type_empty_clickhouse_string": "Spalte {{column}} hat einen leeren Typ und wurde zu String herabgestuft", - "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "Spalte {{column}} ist ein benutzerdefinierter Typ und wurde zu String herabgestuft", - "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "AUTO_INCREMENT der Spalte {{column}} wird in ClickHouse nicht als Auto-Increment-Semantik erhalten", - "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "Binärtyp der Spalte {{column}} wurde zu String herabgestuft", - "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "Spalte {{column}} Typ {{type}} wurde zu String herabgestuft", - "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "Spalte {{column}} Typ {{type}} hat keine dedizierte ClickHouse-Zuordnung und wurde zu String herabgestuft", - "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "Identity-/Auto-Increment-Semantik der Spalte {{column}} wird in ClickHouse nicht erhalten", - "data_sync.backend.warning.target_existing_only_required": "Die aktuelle Strategie erfordert eine vorhandene Zieltabelle, daher wird sie bei der Ausführung nicht automatisch erstellt.", - "data_sync.backend.warning.target_exists_data_only_no_indexes": "Die Zieltabelle existiert bereits. Es wird nur Datenimport ausgeführt; vorhandene Indizes und Constraints werden nicht automatisch neu aufgebaut.", - "data_sync.backend.warning.target_missing_columns": "Der Zieltabelle fehlen {{count}} Spalte(n): {{columns}}", - "data_sync.backend.warning.target_table_existing_only_required": "Die aktuelle Strategie erfordert eine vorhandene Zieltabelle, daher wird sie bei der Ausführung nicht automatisch erstellt.", - "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "Quell-ORDER BY/PARTITION/TTL/Projection/materialized-view-Semantik wird noch nicht automatisch nach TDengine migriert", - "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "Quellindizes, Fremdschlüssel, Trigger, Unique Constraints und Auto-Increment-Semantik werden noch nicht automatisch nach TDengine migriert", - "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "Quellindizes, Fremdschlüssel, Trigger, Unique Constraints, Identity- und Sequence-Semantik werden noch nicht automatisch nach TDengine migriert", - "data_sync.unsupported.tdengine_source_relational_semantics": "TDengine-Indizes, Fremdschlüssel, Trigger, Supertables, TTL und weitere Zeitreihen-Semantik werden noch nicht automatisch migriert", - "data_sync.unsupported.tdengine_target_missing_timestamp": "Die erste Spalte einer TDengine regular table muss TIMESTAMP sein; die aktuelle Quelltabelle hat keine direkt zuordenbare Zeitspalte", - "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "Quell-supertable-, TAGS-, TTL-, retention policy- und Index-Semantik werden noch nicht automatisch in eine TDengine regular table migriert", - "data_sync.warning.target_exists_strategy_no_auto_create": "Die aktuelle Strategie erfordert eine vorhandene Zieltabelle, daher wird sie bei der Ausführung nicht automatisch erstellt.", - "data_sync.warning.target_missing_columns": "Der Zieltabelle fehlen {{count}} Spalte(n): {{columns}}", - "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "TDengine-Quellen ergänzen vorhandene Zieltabellen derzeit nicht automatisch um Spalten; prüfen Sie zuerst das Zielschema", - "data_sync.warning.tdengine_source_mysql_type_fallback": "Spalte {{column}} Typ {{type}} hat keine dedizierte MySQL-Zuordnung und wurde zu {{targetType}} herabgestuft", - "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "Spalte {{column}} Typ {{type}} wurde zu {{targetType}} zugeordnet, um unsigned-Überlauf zu vermeiden", - "data_sync.warning.tdengine_source_pglike_type_fallback": "Spalte {{column}} Typ {{type}} hat keine dedizierte PG-like-Zuordnung und wurde zu {{targetType}} herabgestuft", - "data_sync.warning.tdengine_source_semantics_degraded": "TDengine zu relationalen Zielen migriert derzeit nur Spalten und Daten; supertable-, TAG-Verknüpfungs-, retention policy- und weitere Zeitreihen-Semantik kann herabgestuft werden oder verloren gehen", - "data_sync.warning.tdengine_source_tag_column_degraded": "Spalte {{column}} ist eine TDengine TAG-Spalte und wird im relationalen Ziel zu einer regulären Spalte herabgestuft", - "data_sync.warning.tdengine_source_tag_column_mapped": "Spalte {{column}} ist eine TDengine TAG-Spalte und wurde als reguläre Spalte zugeordnet", - "data_sync.warning.tdengine_target_auto_create_basic_table_only": "TDengine-Ziel-auto-create erstellt derzeit nur eine Basistabelle; Indizes, Fremdschlüssel, Trigger, supertable/TAGS/TTL werden nicht automatisch migriert", - "data_sync.warning.tdengine_target_auto_increment_not_migrated": "Auto-Increment-Semantik der Spalte {{column}} wird nicht nach TDengine migriert", - "data_sync.warning.tdengine_target_binary_type_fallback": "Spalte {{column}} Typ {{type}} wurde nach String-Semantik zu {{targetType}} herabgestuft", - "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "Spalte {{column}} Typ {{type}} wurde zur ersten TDengine TIMESTAMP-Spalte hochgestuft", - "data_sync.warning.tdengine_target_empty_type_fallback": "Spalte {{column}} hat einen leeren Typ und wurde zu {{targetType}} herabgestuft", - "data_sync.warning.tdengine_target_enum_type_fallback": "Spalte {{column}} enum-Typ {{type}} wurde zu {{targetType}} herabgestuft", - "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "TDengine-Ziele ergänzen vorhandene Zieltabellen derzeit nicht automatisch um Spalten; prüfen Sie zuerst das Zielschema", - "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "FixedString-Länge der Spalte {{column}} konnte nicht geparst werden und wurde zu {{targetType}} herabgestuft", - "data_sync.warning.tdengine_target_identity_not_migrated": "Auto-Increment-/Identity-Semantik der Spalte {{column}} wird nicht nach TDengine migriert", - "data_sync.warning.tdengine_target_insert_only": "TDengine-Ziele unterstützen derzeit nur INSERT-Schreibvorgänge; update/delete-Differenzen werden bei der Ausführung abgelehnt", - "data_sync.warning.tdengine_target_json_regular_table_fallback": "Spalte {{column}} Typ {{type}} erhält in TDengine regular table keine TAG-Semantik und wurde zu {{targetType}} herabgestuft", - "data_sync.warning.tdengine_target_json_tag_only_fallback": "Spalte {{column}} Typ {{type}} wurde zu {{targetType}} herabgestuft, da TDengine JSON nur für TAG gilt", - "data_sync.warning.tdengine_target_missing_time_column": "Die Quelltabelle hat keine zuordenbare Zeitspalte, daher ist automatische Tabellenerstellung nicht verfügbar. Bereiten Sie vor dem Fortfahren die TDengine-Zieltabelle und Zeitspalte manuell vor.", - "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "Primärschlüssel-Semantik der Spalte {{column}} wird nicht als relationaler Constraint nach TDengine migriert", - "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "Spalte {{column}} Typ {{type}} hat keine dedizierte TDengine-Same-Database-Zuordnung und wurde zu {{targetType}} herabgestuft", - "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "Spalte {{column}} ist eine TDengine TAG-Spalte und wird nach der Migration zu regular table zu einer regulären Spalte herabgestuft", - "data_sync.warning.tdengine_target_time_only_type_fallback": "Spalte {{column}} Typ {{type}} hat keine stabile TDengine time-only-Zuordnung und wurde zu {{targetType}} herabgestuft", - "data_sync.warning.tdengine_target_timestamp_column_reordered": "TDengine-Basistabellen erfordern die Zeitspalte zuerst; Spalte {{column}} wurde an die erste Position verschoben", - "data_sync.warning.tdengine_target_type_fallback": "Spalte {{column}} Typ {{type}} wurde zu {{targetType}} herabgestuft", - "data_sync.warning.tdengine_target_type_no_mapping_fallback": "Spalte {{column}} Typ {{type}} hat keine dedizierte TDengine-Zuordnung und wurde zu {{targetType}} herabgestuft", - "data_sync.warning.tdengine_target_user_defined_type_fallback": "Spalte {{column}} ist ein benutzerdefinierter Typ und wurde zu {{targetType}} herabgestuft", - "data_sync.backend.error.analyze_prepare_secrets_failed": "Zugangsdaten für die Analyse des Datenabgleichs konnten nicht vorbereitet werden: {{detail}}", - "data_sync.backend.error.apply_changes_failed": "Änderungen konnten nicht angewendet werden: {{detail}}", - "data_sync.backend.error.auto_add_column_failed": "Spalte konnte nicht automatisch ergänzt werden: Spalte={{column}}, Fehler={{detail}}", - "data_sync.backend.error.build_migration_plan_failed": "Migrationsplan konnte nicht erstellt werden: Tabelle={{table}}, Fehler={{detail}}", - "data_sync.backend.error.create_indexes_failed": "Indizes konnten nicht erstellt werden: Tabelle={{table}}, Fehler={{detail}}", - "data_sync.backend.error.create_table_sql_empty": "Automatische Tabellenerstellung für Tabelle {{table}} fehlgeschlagen: create-table SQL ist leer", - "data_sync.backend.error.create_target_table_failed": "Zieltabelle konnte nicht erstellt werden: Tabelle={{table}}, Fehler={{detail}}", - "data_sync.backend.error.exec_ddl_statement_failed": "{{stage}} fehlgeschlagen: SQL={{sql}}, Fehler={{detail}}", - "data_sync.backend.error.mongo_read_source_samples_failed": "Samples der Quell-MongoDB collection konnten nicht gelesen werden: {{detail}}", - "data_sync.backend.error.pre_create_table_sql_failed": "create-table SQL konnte nicht vorab ausgeführt werden: Tabelle={{table}}, Fehler={{detail}}", - "data_sync.backend.error.prepare_secrets_failed": "Zugangsdaten für den Datenabgleich konnten nicht vorbereitet werden: {{detail}}", - "data_sync.backend.error.preview_failed": "Vorschau des Datenabgleichs fehlgeschlagen: {{detail}}", - "data_sync.backend.error.preview_prepare_secrets_failed": "Zugangsdaten für die Vorschau des Datenabgleichs konnten nicht vorbereitet werden: {{detail}}", - "data_sync.backend.error.read_source_table_failed_with_table": "Quelltabelle {{table}} konnte nicht gelesen werden: {{detail}}", - "data_sync.backend.error.read_target_table_failed_with_table": "Zieltabelle {{table}} konnte nicht gelesen werden: {{detail}}", - "data_sync.backend.error.refresh_columns_after_create_failed": "Spalten konnten nach dem Erstellen der Zieltabelle nicht geladen werden: Tabelle={{table}}, Fehler={{detail}}", - "data_sync.backend.error.source_collection_no_migratable_fields": "Aus der Quell-MongoDB collection konnten keine migrierbaren Felder abgeleitet werden: {{collection}}", - "data_sync.backend.error.source_table_columns_failed": "Quelltabellenspalten konnten nicht abgerufen werden: {{detail}}", - "data_sync.backend.error.source_table_missing_or_no_columns": "Quelltabelle fehlt oder hat keine Spaltendefinitionen: {{table}}", - "data_sync.backend.error.sync_table_schema_failed": "Tabellenschema konnte nicht synchronisiert werden: Tabelle={{table}}, Fehler={{detail}}", - "data_sync.backend.error.target_collection_check_failed": "Ziel-MongoDB collection konnte nicht geprüft werden: {{detail}}", - "data_sync.backend.error.target_table_columns_failed": "Zieltabellenspalten konnten nicht abgerufen werden: {{detail}}", - "data_sync.backend.label.content_data_only": "Nur Daten", - "data_sync.backend.label.content_schema_and_data": "Schema + Daten", - "data_sync.backend.label.content_schema_only": "Nur Schema", - "data_sync.backend.label.mode_full_overwrite": "Vollständig überschreiben", - "data_sync.backend.label.mode_insert_only": "Nur einfügen", - "data_sync.backend.label.mode_insert_update": "Inkrementelle Synchronisierung", - "data_sync.backend.label.target_strategy_auto_create_if_missing": "Ziel bei Bedarf automatisch erstellen", - "data_sync.backend.label.target_strategy_existing_only": "Nur vorhandenes Ziel verwenden", - "data_sync.backend.label.target_strategy_smart": "Ziel automatisch behandeln", - "data_sync.backend.log.auto_add_columns_completed": "Automatische Spaltenergänzung abgeschlossen: erfolgreich={{succeeded}}, fehlgeschlagen={{failed}}", - "data_sync.backend.log.change_counts": "Einzufügen: {{inserts}} Zeilen, zu aktualisieren: {{updates}} Zeilen, zu löschen: {{deletes}} Zeilen", - "data_sync.backend.log.connecting_source": "Verbindung zur Quelldatenbank wird hergestellt: {{host}}...", - "data_sync.backend.log.connecting_target": "Verbindung zur Zieldatenbank wird hergestellt: {{host}}...", - "data_sync.backend.log.data_already_consistent": "Daten sind bereits konsistent; keine Änderungen erforderlich.", - "data_sync.backend.log.ddl_statement_succeeded": "Tabelle {{table}} {{stage}} erfolgreich: {{sql}}", - "data_sync.backend.log.fatal_error": "Schwerwiegender Fehler: {{message}}", - "data_sync.backend.log.missing_columns_auto_add_disabled": "Der Zieltabelle fehlen {{count}} Spalte(n), aber automatische Ergänzung ist deaktiviert; sie werden ignoriert: {{columns}}", - "data_sync.backend.log.missing_columns_auto_add_started": "Der Zieltabelle fehlen {{count}} Spalte(n); automatische Ergänzung wird gestartet: {{columns}}", - "data_sync.backend.log.mongo_redis_keyspace_options": "MongoDB -> Redis keyspace-Migration; Modus={{mode}}; Ziel={{target}}", - "data_sync.backend.log.mongo_redis_migrating_key": "Schreibe Redis Key {{key}}", - "data_sync.backend.log.mongo_redis_syncing_collection": "Synchronisiere MongoDB collection {{collection}}", - "data_sync.backend.log.redis_mongo_keyspace_options": "Redis -> MongoDB keyspace-Migration; Modus={{mode}}; Zielstrategie={{strategy}}", - "data_sync.backend.log.redis_mongo_migrating_key": "Migriere Redis Key {{key}}", - "data_sync.backend.log.source_query_no_changes": "SQL-Ergebnissatz und Zieltabelle sind konsistent; keine Änderungen anzuwenden", - "data_sync.backend.log.source_query_sync_completed": "SQL-Ergebnissatz-Synchronisierung abgeschlossen: Inserts={{inserts}}, Updates={{updates}}, Deletes={{deletes}}", - "data_sync.backend.log.source_query_sync_source": "Synchronisationsquelle: SQL-Ergebnissatz -> Zieltabelle {{table}}; Modus: {{mode}}", - "data_sync.backend.log.sync_options": "Synchronisationsinhalt: {{content}}; Modus: {{mode}}; Spalten automatisch ergänzen: {{autoAddColumns}}; Zieltabellenstrategie: {{targetTableStrategy}}; Indizes erstellen: {{createIndexes}}", - "data_sync.backend.log.syncing_table": "Tabelle wird synchronisiert: {{table}}", - "data_sync.backend.log.table_no_operations_skipped": "Tabelle {{table}} hat keine ausgewählten Operationen und wurde übersprungen", - "data_sync.backend.log.target_table_created": "Zieltabelle erfolgreich erstellt: {{table}}", - "data_sync.backend.log.target_table_no_operations": "Zieltabelle {{table}} hat keine ausgewählten Operationen und wurde übersprungen", - "data_sync.backend.log.unknown_sync_content_data_only": "Unbekannter Synchronisationsinhalt {{content}}; Nur-Daten-Synchronisierung wurde automatisch gewählt", - "data_sync.backend.result.preview_ready": "Vorschau des Datenabgleichs ist bereit", - "data_sync.backend.result.sync_completed": "Synchronisierung abgeschlossen: Tabellen={{tables}}, eingefügt={{rowsInserted}}, aktualisiert={{rowsUpdated}}, gelöscht={{rowsDeleted}}", - "data_sync.plan.mongo_target_collection_missing_auto_create": "Ziel-MongoDB collection {{collection}} fehlt. Sie wird vor dem Import automatisch erstellt.", - "data_sync.plan.mongo_target_collection_missing_manual_create": "Ziel-MongoDB collection {{collection}} fehlt. Erstellen Sie sie zuerst manuell.", - "data_sync.backend.warning.apply_changes_unsupported": "Der Zieltreiber unterstützt das Anwenden von Datenänderungen nicht.", - "data_sync.backend.warning.auto_add_column_sql_generation_failed": "SQL für automatische Ergänzung der Spalte {{column}} konnte nicht erzeugt werden: {{detail}}", - "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "Spalte {{column}} ist eine Auto-Increment-Spalte; {{feature}} wird beim Ergänzen in einer vorhandenen Zieltabelle nicht automatisch neu erstellt", - "data_sync.backend.warning.column_default_expression_skipped": "Standardwert {{default}} der Spalte {{column}} enthält einen Ausdruck und wird derzeit nicht automatisch migriert", - "data_sync.backend.warning.column_empty_string_default_not_preserved": "Leerer String als Standardwert der Spalte {{column}} wurde nicht erhalten", - "data_sync.backend.warning.column_type_degraded": "Spalte {{column}} Typ {{sourceType}} wurde zu {{targetType}} herabgestuft", - "data_sync.backend.warning.column_type_empty_degraded": "Spalte {{column}} hat einen leeren Typ und wurde zu {{targetType}} herabgestuft", - "data_sync.backend.warning.column_type_mapped": "Spalte {{column}} Typ {{sourceType}} wurde zu {{targetType}} zugeordnet", - "data_sync.backend.warning.column_type_no_mapping_degraded": "Spalte {{column}} Typ {{sourceType}} hat keine dedizierte Zuordnung und wurde zu {{targetType}} herabgestuft", - "data_sync.backend.warning.column_user_defined_degraded": "Spalte {{column}} ist ein benutzerdefinierter Typ und wurde zu {{targetType}} herabgestuft", - "data_sync.backend.warning.composite_pk_skipped": "Tabelle {{table}} hat einen zusammengesetzten Primärschlüssel ({{columns}}); Differenzsynchronisierung wird noch nicht unterstützt und wurde übersprungen", - "data_sync.backend.warning.full_overwrite_clearing_target": "Modus für vollständiges Überschreiben: Zieltabelle {{table}} wird geleert", - "data_sync.backend.warning.load_target_columns_skip_check_failed": "Zieltabellenspalten konnten nicht abgerufen werden; Spaltenkonsistenzprüfung wurde übersprungen: {{detail}}", - "data_sync.backend.warning.mongo_redis_document_format": "MongoDB -> Redis unterstützt derzeit nur documents mit key/type/ttl/value-Feldern", - "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "MongoDB -> Redis stuft vollständiges Überschreiben für diese Migration auf inkrementelle Synchronisierung zurück", - "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "Spalte {{column}} ist unsigned bigint auto_increment; sie wurde zu {{targetType}} herabgestuft und Auto-Increment-Semantik wurde nicht erhalten", - "data_sync.backend.warning.refresh_columns_after_add_failed": "Zielspalten konnten nach dem Hinzufügen von Spalten nicht aktualisiert werden: Tabelle={{table}}, Fehler={{detail}}", - "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "Redis -> MongoDB stuft vollständiges Überschreiben für diese Migration auf inkrementelle Synchronisierung zurück", - "data_sync.backend.warning.source_indexes_read_failed": "Quelltabellenindizes konnten nicht gelesen werden; Indexmigration wurde übersprungen: {{detail}}", - "data_sync.backend.warning.table_pk_required_skipped": "Tabelle {{table}} hat keinen Primärschlüssel; der aktuelle Modus erfordert Differenzvergleich und wurde übersprungen", - "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "Zieltabelle für {{table}} fehlt; die aktuelle Strategie erlaubt keine automatische Tabellenerstellung, daher wurde sie übersprungen", - "data_sync.backend.warning.unknown_content_default_data": "Unbekannter Synchronisationsinhalt {{content}}; Nur-Daten-Synchronisierung wurde automatisch gewählt", - "data_sync.backend.warning.unknown_mode_default_insert_update": "Unbekannter Synchronisationsmodus {{mode}}; inkrementelle Synchronisierung wurde automatisch gewählt", - "data_sync.schema_sync.error.create_statement_empty": "Create-table-Anweisung ist leer", - "data_sync.schema_sync.error.create_target_table_failed": "Zieltabelle {{table}} konnte nicht erstellt werden: {{detail}}", - "data_sync.schema_sync.error.get_columns_after_create_failed": "Spalten konnten nach dem Erstellen der Zieltabelle {{table}} nicht abgerufen werden: {{detail}}", - "data_sync.schema_sync.error.get_create_statement_failed": "Create-table-Anweisung der Quelltabelle {{table}} konnte nicht abgerufen werden: {{detail}}", - "data_sync.schema_sync.error.get_source_columns_failed": "Spalten der Quelltabelle {{table}} konnten nicht abgerufen werden: {{detail}}", - "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "Zieltabelle {{table}} fehlt, und Quelltyp {{sourceType}} unterstützt automatische Tabellenerstellung noch nicht: {{detail}}", - "data_sync.schema_sync.log.add_column_failed": "Spalte konnte nicht ergänzt werden: Tabelle={{table}}, Spalte={{column}}, Fehler={{detail}}", - "data_sync.schema_sync.log.column_added": "Spalte ergänzt: Tabelle={{table}}, Spalte={{column}}, Typ={{type}}", - "data_sync.schema_sync.log.completed": "Schema-Synchronisierung für {{table}} abgeschlossen; {{count}} Spalte(n) hinzugefügt", - "data_sync.schema_sync.log.schema_aligned": "Tabellenschema ist abgeglichen: {{table}}", - "data_sync.schema_sync.log.target_created": "Zieltabelle erfolgreich erstellt: {{table}}", - "data_sync.schema_sync.log.target_missing_create": "Zieltabelle {{table}} fehlt; Erstellung des Tabellenschemas wird versucht", - "data_sync.schema_sync.warning.target_unsupported": "Zieldatenbanktyp={{targetType}} unterstützt Schema-Synchronisierung noch nicht; Tabelle {{table}} wurde übersprungen", - "data_sync.unsupported.mongo_index_columns_missing": "Index {{name}} hat keine Spaltendefinition und wurde übersprungen", - "data_sync.unsupported.mongo_index_create_command_failed": "MongoDB createIndexes-Befehl für Index {{name}} konnte nicht erzeugt werden: {{detail}}", - "data_sync.unsupported.mongo_index_prefix_length": "Index {{name}} verwendet eine Präfixlänge; äquivalente Migration zu MongoDB wird noch nicht unterstützt", - "data_sync.warning.mongo_field_mixed_bson_types": "Feld {{field}} enthält mehrere BSON-Werttypen und wurde zu einem kompatiblen Typ herabgestuft", - "data_sync.warning.mongo_index_type_normalized": "Index {{name}} Typ={{type}} wird als regulärer Index nach MongoDB migriert", - "data_sync.warning.mongo_source_collection_index_read_failed": "Indizes der Quell-MongoDB collection konnten nicht gelesen werden; Indexmigration wurde übersprungen: {{detail}}", - "data_sync.warning.mongo_source_empty_sample_id_only": "Die Quell-MongoDB collection hat keine Beispieldaten; nur eine einfache Primärschlüsselspalte wird aus `_id` erzeugt", - "data_sync.warning.mongo_source_primary_key_missing": "Aus der Quell-MongoDB collection konnte kein stabiler Primärschlüssel abgeleitet werden; die Zieltabelle erstellt keinen Primärschlüssel automatisch", - "data_sync.warning.mongo_source_table_index_read_failed": "Quelltabellenindizes konnten nicht gelesen werden; Indexmigration wurde übersprungen: {{detail}}", - "data_sync.warning.mongo_target_collection_existing_only_required": "Die aktuelle Strategie erfordert eine vorhandene Ziel-MongoDB collection, daher wird sie bei der Ausführung nicht automatisch erstellt", - "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB ist ein Ziel mit flexibler Struktur; die Feldstruktur folgt den geschriebenen document, und Zielspaltenprüfungen werden nicht ausgeführt", - "file.backend.dialog.export_connections": "Verbindungen exportieren", - "file.backend.dialog.export_data": "Daten exportieren", - "file.backend.dialog.export_database_sql": "{{database}} exportieren (SQL)", - "file.backend.dialog.export_query_result": "Abfrageergebnis exportieren", - "file.backend.dialog.export_table": "{{table}} exportieren", - "file.backend.dialog.export_tables_sql": "Tabellen exportieren (SQL)", - "file.backend.dialog.import_data": "In {{table}} importieren", - "file.backend.dialog.select_config_file": "Konfigurationsdatei auswählen", - "file.backend.dialog.select_database_file": "Datenbankdatei auswählen", - "file.backend.dialog.select_duckdb_file": "DuckDB-Datendatei auswählen", - "file.backend.dialog.select_sql_directory": "SQL-Verzeichnis auswählen", - "file.backend.dialog.select_sql_file": "SQL-Datei auswählen", - "file.backend.dialog.select_sqlite_file": "SQLite-Datendatei auswählen", - "file.backend.dialog.select_ssh_key_file": "SSH-Private-Key-Datei auswählen", - "file.backend.html_export.document_title": "GoNavi Datenexport", - "file.backend.html_export.empty_rows": "(0 Zeilen)", - "file.backend.html_export.heading": "GoNavi Datenexport", - "file.backend.html_export.meta": "Zeilen: {{rowCount}} · Spalten: {{columnCount}} · Erstellt am: {{generatedAt}}", - "file.backend.sql_dump.database": "Datenbank: {{database}}", - "file.backend.sql_dump.empty_rows": "(0 Zeilen)", - "file.backend.sql_dump.generated_at": "Erstellt am: {{generatedAt}}", - "file.backend.sql_dump.table": "Tabelle: {{objectName}}", - "file.backend.sql_dump.title": "GoNavi SQL-Export", - "file.backend.sql_dump.view": "Ansicht: {{objectName}}", - "file.backend.sql_dump.view_data_skipped": "Datenexport für Ansichten wurde übersprungen (INSERT für Ansichten wird nicht ausgegeben).", - "file.backend.error.batch_commit_unsupported": "Der aktuelle Datenbanktyp unterstützt keinen Batch-Commit", - "file.backend.error.connection_export_file_too_large": "Die Verbindungsexportdatei ist zu groß", - "file.backend.error.connection_import_file_too_large": "Die Verbindungsimportdatei ist zu groß", - "file.backend.error.connection_package_decrypt_failed": "Das Dateikennwort ist falsch oder die Datei ist beschädigt", - "file.backend.error.connection_package_password_required": "Das Kennwort des Wiederherstellungspakets darf nicht leer sein", - "file.backend.error.connection_package_payload_too_large": "Der Inhalt des Verbindungspakets ist zu groß", - "file.backend.error.connection_package_unsupported": "Nicht unterstütztes Format des Verbindungs-Wiederherstellungspakets", - "file.backend.error.database_name_required": "Datenbankname darf nicht leer sein", - "file.backend.error.directory_path_required": "Verzeichnispfad darf nicht leer sein", - "file.backend.error.export_unsupported_format": "Nicht unterstütztes Exportformat: {{format}}", - "file.backend.error.file_path_empty": "Dateipfad ist leer", - "file.backend.error.file_path_required": "Dateipfad darf nicht leer sein", - "file.backend.error.import_file_empty": "Dateipfad darf nicht leer sein", - "file.backend.error.import_csv_empty_or_missing_header": "CSV ist leer oder hat keine Kopfzeile", - "file.backend.error.import_csv_open_failed": "CSV konnte nicht geöffnet werden: {{detail}}", - "file.backend.error.import_csv_read_failed": "CSV konnte nicht gelesen werden: {{detail}}", - "file.backend.error.import_excel_empty_or_missing_header": "Excel ist leer oder hat keine Kopfzeile", - "file.backend.error.import_excel_no_sheets": "Excel-Datei enthält keine Tabellenblätter", - "file.backend.error.import_excel_parse_failed": "Excel konnte nicht geparst werden: {{detail}}", - "file.backend.error.import_excel_read_failed": "Excel konnte nicht gelesen werden: {{detail}}", - "file.backend.error.import_json_parse_failed": "JSON konnte nicht geparst werden: {{detail}}", - "file.backend.error.import_json_root_not_array": "JSON-Wurzel muss ein Array sein", - "file.backend.error.import_unsupported_format": "Nicht unterstütztes Dateiformat", - "file.backend.error.invalid_export_mode": "Ungültiger Exportmodus", - "file.backend.error.mysql_workbench_no_connections": "Im XML wurden keine gültigen Verbindungskonfigurationen gefunden", - "file.backend.error.mysql_workbench_parse_failed": "MySQL Workbench-XML konnte nicht geparst werden: {{detail}}", - "file.backend.error.open_file_failed": "Datei konnte nicht geöffnet werden: {{detail}}", - "file.backend.error.query_required": "Abfrage darf nicht leer sein", - "file.backend.error.read_file_error_summary": "Dateilesefehler: {{detail}}. Ausgeführt: {{count}}.", - "file.backend.error.read_file_info_failed": "Dateiinformationen konnten nicht gelesen werden: {{detail}}", - "file.backend.error.selected_path_not_directory": "Der ausgewählte Pfad ist kein Verzeichnis", - "file.backend.error.selected_path_not_sql_file": "Der ausgewählte Pfad ist keine SQL-Datei", - "file.backend.error.select_with_query_required": "Nur SELECT/WITH-Abfrageexport wird unterstützt", - "file.backend.error.task_not_found": "Aufgabe nicht gefunden", - "file.backend.error.table_data_batch_limit": "Es können höchstens {{max}} Tabellen gleichzeitig verarbeitet werden; aktuell ausgewählt: {{count}}", - "file.backend.error.table_data_clear_failed": "Leeren von {{table}} fehlgeschlagen: {{detail}}", - "file.backend.error.table_data_clear_failed_partial": "Leeren von {{table}} fehlgeschlagen: {{detail}}. Warnung: Die ersten {{count}} Tabellen wurden bereits geleert und können nicht wiederhergestellt werden", - "file.backend.error.table_data_mode_unsupported": "Nicht unterstützter Tabellen-Datenbereinigungsmodus: {{mode}}", - "file.backend.error.table_data_no_tables": "Keine Tabellen ausgewählt", - "file.backend.error.table_data_truncate_failed": "TRUNCATE für {{table}} fehlgeschlagen: {{detail}}", - "file.backend.error.table_data_truncate_failed_partial": "TRUNCATE für {{table}} fehlgeschlagen: {{detail}}. Warnung: Für die ersten {{count}} Tabellen wurde bereits TRUNCATE ausgeführt und sie können nicht wiederhergestellt werden", - "file.backend.error.table_data_truncate_unsupported": "Der aktuelle Datenbanktyp {{type}} unterstützt TRUNCATE für Tabellen nicht. Verwenden Sie stattdessen Leeren", - "file.backend.error.write_failed": "Schreiben fehlgeschlagen: {{detail}}", - "file.backend.message.cancel_requested": "Abbruchanforderung gesendet", - "file.backend.message.execution_cancelled": "Ausführung abgebrochen. Ausgeführt: {{executed}}, fehlgeschlagen: {{failed}}, Dauer: {{duration}}.", - "file.backend.message.execution_completed": "Ausführung abgeschlossen. Erfolgreich: {{success}}, fehlgeschlagen: {{failed}}, Dauer: {{duration}}.", - "file.backend.message.execution_error_detail_header": "Fehlerdetails (erste {{count}}):", - "file.backend.message.execution_more_errors": "...{{count}} weitere Fehler werden nicht angezeigt", - "file.backend.message.export_completed": "Export abgeschlossen", - "file.backend.message.import_no_data": "Keine importierbaren Daten", - "file.backend.message.import_row_failed": "Importzeile {{index}} fehlgeschlagen: {{detail}}", - "file.backend.message.import_summary": "Importiert: {{imported}}, fehlgeschlagen: {{failed}}", - "file.backend.message.statement_failed": "Anweisung {{index}} fehlgeschlagen: {{detail}}\n SQL: {{sql}}", - "file.backend.message.table_data_clear_succeeded": "Leeren erfolgreich", - "file.backend.message.table_data_truncate_succeeded": "TRUNCATE erfolgreich", - "file.backend.message.transaction_committed": "Transaktion erfolgreich committet", - "file.backend.message.user_cancelled": "Benutzer hat die Ausführung abgebrochen", - "file.backend.filter.all_files": "Alle Dateien", - "file.backend.filter.all_files_pattern": "Alle Dateien (*.*)", - "file.backend.filter.connection_package": "GoNavi-Verbindungspaket (*.gonavi-conn)", - "file.backend.filter.database_files": "Datenbankdateien", - "file.backend.filter.data_files": "Datendateien", - "file.backend.filter.duckdb_files": "DuckDB-Dateien", - "file.backend.filter.json_files": "JSON-Dateien (*.json)", - "file.backend.filter.mysql_workbench_connections": "MySQL Workbench-Verbindungen (*.xml)", - "file.backend.filter.private_key_files": "Private-Key-Dateien", - "file.backend.filter.sql_files": "SQL-Dateien (*.sql)", - "file.backend.filter.sqlite_files": "SQLite-Dateien", - "ai_service.backend.message.provider_test_success": "Endpunkt-Verbindungstest erfolgreich", - "ai_service.backend.error.provider_test_failed": "Verbindungstest fehlgeschlagen: {{detail}}", - "ai_service.backend.error.provider_auth_failed": "API Key ist ungültig oder die Anfrage wurde abgelehnt (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_status_failed": "Endpunkt hat einen unerwarteten Status zurückgegeben (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_server_error": "Upstream-Server hat einen internen Fehler zurückgegeben (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_request_create_failed": "Anfrage konnte nicht erstellt werden: {{detail}}", - "ai_service.backend.error.provider_request_serialize_failed": "Anfrage konnte nicht serialisiert werden: {{detail}}", - "ai_service.backend.error.provider_secret_read_failed": "Provider secret konnte nicht gelesen werden: {{detail}}", - "ai_service.backend.error.provider_secret_save_failed": "Provider secret konnte nicht gespeichert werden: {{detail}}", - "ai_service.backend.error.provider_secret_saved_read_failed": "Gespeicherter Provider secret konnte nicht gelesen werden: {{detail}}", - "ai_service.backend.error.provider_secret_delete_failed": "Provider secret konnte nicht gelöscht werden: {{detail}}", - "ai_service.backend.error.provider_secret_load_failed": "AI Provider secret konnte nicht geladen werden (provider={{provider}}): {{detail}}", - "ai_service.backend.error.config_rewrite_failed": "AI-Konfiguration konnte nicht neu geschrieben werden: {{detail}}", - "ai_service.backend.error.config_read_failed": "AI-Konfiguration konnte nicht gelesen werden: {{detail}}", - "ai_service.backend.error.config_load_failed": "AI-Konfiguration konnte nicht geladen werden: {{detail}}", - "ai_service.backend.error.config_serialize_failed": "AI-Konfiguration konnte nicht serialisiert werden: {{detail}}", - "ai_service.backend.error.config_dir_create_failed": "Konfigurationsverzeichnis konnte nicht erstellt werden: {{detail}}", - "ai_service.backend.error.config_write_failed": "AI-Konfiguration konnte nicht geschrieben werden: {{detail}}", - "ai_service.backend.error.daily_secret_store_unavailable": "Daily secret store ist nicht verfügbar: {{detail}}", - "ai_service.backend.error.secret_store_unavailable": "Secret store ist nicht verfügbar: {{detail}}", - "ai_service.backend.error.provider_secret_bundle_parse_failed": "Provider secret bundle konnte nicht geparst werden: {{detail}}", - "ai_service.backend.error.models_request_create_failed": "Modelllisten-Anfrage konnte nicht erstellt werden: {{detail}}", - "ai_service.backend.error.models_request_failed": "Modellliste konnte nicht angefordert werden: {{detail}}", - "ai_service.backend.error.models_http_status_failed": "Modelllisten-Endpunkt hat einen unerwarteten Status zurückgegeben (HTTP {{status}}){{body}}", - "ai_service.backend.error.models_parse_failed": "Modellliste konnte nicht geparst werden: {{detail}}", - "ai_service.backend.error.active_provider_not_found": "Aktiver AI Provider wurde nicht gefunden", - "ai_service.backend.error.editable_provider_not_found": "Zu bearbeitender AI Provider wurde nicht gefunden: {{detail}}", - "ai_service.backend.error.provider_not_configured": "AI Provider ist nicht konfiguriert. Konfigurieren Sie zuerst einen in den Einstellungen.", - "ai_service.backend.error.volcengine_coding_models_empty": "Der aktuelle Endpunkt hat keine verfügbaren Volcengine Coding Plan-Modelle zurückgegeben. Prüfen Sie die Kontoberechtigungen oder wechseln Sie zum Provider \"Volcengine Ark\"", - "ai_service.backend.error.session_missing": "Sitzung existiert nicht", - "ai_service.backend.error.session_corrupt": "Sitzungsdaten sind beschädigt", - "ai_service.backend.error.sessions_dir_create_failed": "sessions-Verzeichnis konnte nicht erstellt werden: {{detail}}", - "ai_service.backend.error.session_serialize_failed": "Sitzungsdaten konnten nicht serialisiert werden: {{detail}}", - "ai_service.backend.error.session_write_failed": "Sitzung konnte nicht gespeichert werden: {{detail}}", - "ai_service.backend.error.session_delete_failed": "Sitzung konnte nicht gelöscht werden: {{detail}}", - "ai_service.backend.warning.sql_drop": "Hochriskantes SQL: DROP löscht Datenbankobjekte dauerhaft", - "ai_service.backend.warning.sql_truncate": "Hochriskantes SQL: TRUNCATE entfernt alle Zeilen aus der Tabelle", - "ai_service.backend.warning.sql_delete_without_where": "Hochriskantes SQL: DELETE ohne WHERE löscht alle Zeilen", - "ai_service.backend.warning.sql_update_without_where": "Hochriskantes SQL: UPDATE ohne WHERE aktualisiert alle Zeilen", - "jvm_monitoring_charts.title.heap": "Heap-Speicher", - "jvm_monitoring_charts.title.gc": "Garbage Collection", - "jvm_monitoring_charts.title.threads": "Threads", - "jvm_monitoring_charts.title.classes": "Klassenladen", - "jvm_monitoring_charts.empty.heap.no_samples": "Noch keine Heap-Speicher-Stichproben", - "jvm_monitoring_charts.empty.heap.metric_unavailable": "Die aktuelle Monitoring-Quelle stellt keine Heap-Speicher-Metriken bereit", - "jvm_monitoring_charts.empty.gc.no_samples": "Noch keine Garbage-Collection-Stichproben", - "jvm_monitoring_charts.empty.gc.metric_unavailable": "Die aktuelle Monitoring-Quelle stellt keine Garbage-Collection-Metriken bereit", - "jvm_monitoring_charts.empty.threads.no_samples": "Noch keine Thread-Stichproben", - "jvm_monitoring_charts.empty.threads.metric_unavailable": "Die aktuelle Monitoring-Quelle stellt keine Thread-Metriken bereit", - "jvm_monitoring_charts.empty.classes.no_samples": "Noch keine Klassenladen-Stichproben", - "jvm_monitoring_charts.empty.classes.metric_unavailable": "Die aktuelle Monitoring-Quelle stellt keine Klassenladen-Metriken bereit", - "jvm_monitoring_charts.legend.heap_used": "Verwendeter Heap", - "jvm_monitoring_charts.legend.heap_committed": "Reservierter Heap", - "jvm_monitoring_charts.legend.gc_count": "GC-Anzahl", - "jvm_monitoring_charts.legend.gc_time_ms": "GC-Zeit (ms)", - "jvm_monitoring_charts.legend.thread_count": "Thread-Anzahl", - "jvm_monitoring_charts.legend.daemon_thread_count": "Daemon-Threads", - "jvm_monitoring_charts.legend.peak_thread_count": "Maximale Thread-Anzahl", - "jvm_monitoring_charts.legend.loaded_classes": "Geladene Klassen", - "jvm_monitoring_charts.legend.unloaded_classes": "Entladene Klassen", - "jvm_monitoring_status_cards.title.heap": "Heap-Speicher", - "jvm_monitoring_status_cards.title.gc_pressure": "GC-Druck", - "jvm_monitoring_status_cards.title.threads": "Threads", - "jvm_monitoring_status_cards.title.classes": "Klassenladen", - "jvm_monitoring_status_cards.meta.heap_committed": "Reserviert {{value}}", - "jvm_monitoring_status_cards.meta.waiting_samples": "Warten auf Stichproben", - "jvm_monitoring_status_cards.meta.gc_total_time": "Gesamt {{value}}", - "jvm_monitoring_status_cards.meta.thread_peak": "Maximum {{value}}", - "jvm_monitoring_status_cards.status.sampling": "Sampling läuft", - "jvm_monitoring_status_cards.status.stopped": "Gestoppt", - "jvm_monitoring_status_cards.thread_state.runnable_count": "Ausführbar {{count}}", - "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "Fehlerbehebungsmetriken", - "jvm_monitoring_detail_panel.title.thread_state_distribution": "Verteilung der Thread-Zustände", - "jvm_monitoring_detail_panel.title.recent_gc_details": "Details der letzten Garbage Collections", - "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "Fähigkeiten und Degradation", - "jvm_monitoring_detail_panel.field.process_cpu": "Prozess-CPU", - "jvm_monitoring_detail_panel.field.system_cpu": "System-CPU", - "jvm_monitoring_detail_panel.field.process_physical_memory": "Physischer Prozessspeicher", - "jvm_monitoring_detail_panel.field.process_virtual_memory": "Virtueller Prozessspeicher", - "jvm_monitoring_detail_panel.memory_missing.title": "Warum physischer Prozessspeicher fehlt", - "jvm_monitoring_detail_panel.memory_missing.jmx": "Die JMX-Verbindung stellt das Attribut für residenten physischen Prozessspeicher nicht bereit. Derzeit kann nur der virtuelle Prozessspeicher gelesen werden. Wechseln Sie zum HTTP-Endpunkt oder zum erweiterten Agent, um physischen Prozessspeicher zu erfassen.", - "jvm_monitoring_detail_panel.memory_missing.default": "Die aktuelle Monitoring-Quelle hat keine Metriken für residenten physischen Prozessspeicher zurückgegeben. Prüfen Sie, ob der HTTP-Endpunkt oder der erweiterte Agent physischen Prozessspeicher erfasst und meldet.", - "jvm_monitoring_detail_panel.empty.thread_states": "Noch keine Stichproben für Thread-Zustände.", - "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "Die aktuelle Monitoring-Quelle stellt keine ereignisbezogenen Garbage-Collection-Daten bereit.", - "jvm_monitoring_detail_panel.empty.recent_gc_events": "Keine Garbage-Collection-Ereignisse im letzten Fenster.", - "jvm_monitoring_detail_panel.gc.before": "Vor der Collection", - "jvm_monitoring_detail_panel.gc.after": "Nach der Collection", - "jvm_monitoring_presentation.metric.heap_used": "Heap-Speicher", - "jvm_monitoring_presentation.metric.heap_non_heap": "Nicht-Heap-Speicher", - "jvm_monitoring_presentation.metric.gc_count": "Garbage-Collection-Anzahl", - "jvm_monitoring_presentation.metric.gc_time": "Garbage-Collection-Dauer", - "jvm_monitoring_presentation.metric.gc_events": "Letzte Garbage-Collection-Ereignisse", - "jvm_monitoring_presentation.metric.thread_count": "Thread-Anzahl", - "jvm_monitoring_presentation.metric.thread_states": "Thread-Zustände", - "jvm_monitoring_presentation.metric.class_loading": "Klassenladen", - "jvm_monitoring_presentation.metric.cpu_process": "Prozess-CPU", - "jvm_monitoring_presentation.metric.cpu_system": "System-CPU", - "jvm_monitoring_presentation.metric.memory_rss": "Physischer Prozessspeicher", - "jvm_monitoring_presentation.metric.memory_virtual": "Virtueller Prozessspeicher", - "jvm_monitoring_presentation.thread_state.new": "Neu", - "jvm_monitoring_presentation.thread_state.runnable": "Ausführbar", - "jvm_monitoring_presentation.thread_state.blocked": "Blockiert", - "jvm_monitoring_presentation.thread_state.waiting": "Wartend", - "jvm_monitoring_presentation.thread_state.timed_waiting": "Zeitbegrenzt wartend", - "jvm_monitoring_presentation.thread_state.terminated": "Beendet", - "jvm_monitoring_presentation.availability.missing_metrics": "Fehlende Metriken: {{metrics}}", - "jvm_monitoring_presentation.availability.provider_warnings": "Warnung der Monitoring-Quelle: {{warnings}}", - "jvm_monitoring_presentation.availability.no_obvious_degradation": "In der aktuellen Monitoring-Sitzung wurde keine offensichtliche Degradation gefunden.", - "jvm_change_preview_modal.title": "JVM-Änderungsvorschau", - "jvm_change_preview_modal.status.no_preview": "Kein Vorschauergebnis", - "jvm_change_preview_modal.status.generated": "Vorschau erstellt", - "jvm_change_preview_modal.action.confirm_execute": "Ausführung bestätigen", - "jvm_change_preview_modal.action.close": "Schließen", - "jvm_change_preview_modal.section.summary": "Änderungszusammenfassung", - "jvm_change_preview_modal.section.before": "Vorher", - "jvm_change_preview_modal.section.after": "Nachher", - "jvm_change_preview_modal.field.resource_id": "Ressourcen-ID", - "jvm_change_preview_modal.field.version": "Version", - "jvm_change_preview_modal.field.format": "Format", - "jvm_change_preview_modal.risk.label": "Risiko {{level}}", - "jvm_change_preview_modal.risk.low": "Niedrig", - "jvm_change_preview_modal.risk.medium": "Mittel", - "jvm_change_preview_modal.risk.high": "Hoch", - "jvm_change_preview_modal.risk.unknown": "Unbekannt", - "jvm_change_preview_modal.permission.requires_confirmation": "Bestätigung erforderlich", - "jvm_change_preview_modal.permission.allowed": "Ausführung erlaubt", - "jvm_change_preview_modal.permission.forbidden": "Ausführung verboten", - "jvm_change_preview_modal.blocking.label": "Blockiergrund", - "jvm_change_preview_modal.blocking.alert_message": "Diese Änderung kann derzeit nicht ausgeführt werden", - "jvm_diagnostic.completion.category.observe": "Beobachtungsbefehl", - "jvm_diagnostic.completion.category.trace": "Trace-Befehl", - "jvm_diagnostic.completion.category.mutating": "Hochrisikobefehl", - "jvm_diagnostic.completion.category.control": "Steuerbefehl", - "jvm_diagnostic.completion.preset.category.observe": "Beobachtungsbefehl", - "jvm_diagnostic.completion.preset.category.trace": "Trace-Befehl", - "jvm_diagnostic.completion.preset.category.mutating": "Hochrisikobefehl", - "jvm_diagnostic.completion.preset.thread-top.documentation": "Zeigt die am stärksten ausgelasteten Threads an, um blockierte Threads oder Threads mit hoher CPU-Last schnell zu finden.", - "jvm_diagnostic.completion.preset.dashboard.documentation": "Zeigt die JVM-Laufzeitübersicht an.", - "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "Verfolgt langsame Methodenaufrufpfade.", - "jvm_diagnostic.completion.preset.watch-return.documentation": "Beobachtet Parameter und Rückgabewerte.", - "jvm_diagnostic.completion.preset.ognl-sample.documentation": "Hochriskanter Ausdrucksbefehl, standardmäßig nur als Beispiel angezeigt.", - "jvm_diagnostic.completion.command.dashboard.documentation": "Zeigt die JVM-Laufzeitübersicht an.", - "jvm_diagnostic.completion.command.jvm.documentation": "Zeigt JVM-Speicher, Threads, Klassenladen, GC und Laufzeitargumente an.", - "jvm_diagnostic.completion.command.thread.documentation": "Zeigt Hot Threads, Thread-Stacks und blockierte Threads an.", - "jvm_diagnostic.completion.command.sc.documentation": "Sucht passende Klasseninformationen.", - "jvm_diagnostic.completion.command.sm.documentation": "Zeigt Methodensignaturen einer Klasse an.", - "jvm_diagnostic.completion.command.jad.documentation": "Dekompiliert die angegebene Klasse.", - "jvm_diagnostic.completion.command.sysprop.documentation": "Zeigt Systemeigenschaften an.", - "jvm_diagnostic.completion.command.sysenv.documentation": "Zeigt Umgebungsvariablen an.", - "jvm_diagnostic.completion.command.classloader.documentation": "Zeigt Classloader-Informationen an.", - "jvm_diagnostic.completion.command.trace.documentation": "Verfolgt Zeitpfade von Methodenaufrufen.", - "jvm_diagnostic.completion.command.watch.documentation": "Beobachtet Parameter, Rückgabewerte oder Ausnahmen.", - "jvm_diagnostic.completion.command.stack.documentation": "Gibt Methodenaufruf-Stacks aus.", - "jvm_diagnostic.completion.command.monitor.documentation": "Sammelt regelmäßig Statistiken zu Methodenaufrufen.", - "jvm_diagnostic.completion.command.tt.documentation": "Methoden-Zeittunnel zum Aufzeichnen und Wiedergeben von Aufrufen.", - "jvm_diagnostic.completion.command.ognl.documentation": "Führt einen OGNL-Ausdruck aus; standardmäßig ist zusätzliche Autorisierung erforderlich.", - "jvm_diagnostic.completion.command.vmtool.documentation": "Manipuliert JVM-Objekte direkt oder führt VMTool-Aktionen aus.", - "jvm_diagnostic.completion.command.redefine.documentation": "Definiert Klassenbytecode neu.", - "jvm_diagnostic.completion.command.retransform.documentation": "Löst eine erneute Klassentransformation aus.", - "jvm_diagnostic.completion.command.stop.documentation": "Stoppt die aktuelle Hintergrundaufgabe.", - "jvm_diagnostic.completion.detail.execute_directly": "direkt ausführen", - "jvm_diagnostic.completion.detail.thread_option": "Thread-Option", - "jvm_diagnostic.completion.detail.class_search_template": "Klassensuchvorlage", - "jvm_diagnostic.completion.detail.method_search_template": "Methodensuchvorlage", - "jvm_diagnostic.completion.detail.decompile_template": "Dekompilierungsvorlage", - "jvm_diagnostic.completion.detail.system_property_template": "Systemeigenschaftsvorlage", - "jvm_diagnostic.completion.detail.environment_variable_template": "Umgebungsvariablenvorlage", - "jvm_diagnostic.completion.detail.classloader_template": "Classloader-Vorlage", - "jvm_diagnostic.completion.detail.trace_template": "Trace-Vorlage", - "jvm_diagnostic.completion.detail.trace_option": "Trace-Option", - "jvm_diagnostic.completion.detail.watch_template": "watch-Vorlage", - "jvm_diagnostic.completion.detail.watch_option": "watch-Option", - "jvm_diagnostic.completion.detail.stack_template": "Stack-Vorlage", - "jvm_diagnostic.completion.detail.monitor_template": "monitor-Vorlage", - "jvm_diagnostic.completion.detail.time_tunnel_template": "Zeittunnel-Vorlage", - "jvm_diagnostic.completion.detail.high_risk_template": "Hochrisikovorlage", - "jvm_diagnostic.completion.argument.command_template.label": "{{command}}-Vorlage", - "jvm_diagnostic.completion.argument.detail_mode_d.label": "Detailmodus (-d)", - "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", - "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "Zeigt die aktuelle JVM-Laufzeitübersicht an.", - "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", - "jvm_diagnostic.completion.argument.jvm.direct.documentation": "Zeigt JVM-Speicher, Threads, Klassenladen, GC und Laufzeitargumente an.", - "jvm_diagnostic.completion.argument.thread.busy_top.label": "Ausgelastete Threads TOP N (-n)", - "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "Zeigt die Top-N-Threads mit der höchsten CPU-Last an.", - "jvm_diagnostic.completion.argument.thread.blocking.label": "Blockierte Threads (-b)", - "jvm_diagnostic.completion.argument.thread.blocking.documentation": "Findet Threads, die aktuell andere Threads blockieren.", - "jvm_diagnostic.completion.argument.thread.thread_id.label": "Angegebene Thread-ID", - "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "Zeigt detaillierte Stackinformationen für einen angegebenen Thread an.", - "jvm_diagnostic.completion.argument.sc.class_pattern.label": "Klassenmuster-Vorlage", - "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "Sucht nach Klassenname-Muster.", - "jvm_diagnostic.completion.argument.sc.detail.documentation": "Gibt detaillierte Klasseninformationen aus.", - "jvm_diagnostic.completion.argument.sm.method_signature.label": "Methodensignatur-Vorlage", - "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "Zeigt Methodensignaturen einer Klasse an.", - "jvm_diagnostic.completion.argument.sm.detail.documentation": "Gibt detaillierte Methodensignaturen aus.", - "jvm_diagnostic.completion.argument.jad.template.label": "Dekompilierungsvorlage", - "jvm_diagnostic.completion.argument.jad.template.documentation": "Dekompiliert die angegebene Klasse.", - "jvm_diagnostic.completion.argument.sysprop.property.label": "Eigenschaft anzeigen", - "jvm_diagnostic.completion.argument.sysprop.property.documentation": "Liest die angegebene Systemeigenschaft.", - "jvm_diagnostic.completion.argument.sysenv.variable.label": "Umgebungsvariable anzeigen", - "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "Liest die angegebene Umgebungsvariable.", - "jvm_diagnostic.completion.argument.classloader.tree.label": "Baumansicht (-t)", - "jvm_diagnostic.completion.argument.classloader.tree.documentation": "Gibt den Classloader-Baum aus.", - "jvm_diagnostic.completion.argument.classloader.url_stat.label": "Alle URL-Statistiken (--url-stat)", - "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "Zeigt Classloader-URL-Statistiken an.", - "jvm_diagnostic.completion.argument.classloader.hash.label": "Angegebener Classloader-Hash", - "jvm_diagnostic.completion.argument.classloader.hash.documentation": "Zeigt Details zu einem angegebenen Classloader an.", - "jvm_diagnostic.completion.argument.trace.template.documentation": "Verfolgt langsame Methodenaufrufketten.", - "jvm_diagnostic.completion.argument.trace.condition.label": "Bedingungsfilter '#cost > 100'", - "jvm_diagnostic.completion.argument.trace.condition.documentation": "Fügt einen trace-Bedingungsausdruck hinzu.", - "jvm_diagnostic.completion.argument.watch.template.documentation": "Beobachtet Parameter, Rückgabewerte oder Ausnahmen.", - "jvm_diagnostic.completion.argument.watch.expand_depth.label": "Expansionstiefe -x 2", - "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "Legt die Expansionstiefe von Objekten fest.", - "jvm_diagnostic.completion.argument.stack.template.documentation": "Gibt Methodenaufruf-Stacks aus.", - "jvm_diagnostic.completion.argument.monitor.template.documentation": "Sammelt Methodenaufrufstatistiken in Intervallen.", - "jvm_diagnostic.completion.argument.tt.record.label": "tt-Aufzeichnungsvorlage", - "jvm_diagnostic.completion.argument.tt.record.documentation": "Zeichnet Aufrufe der angegebenen Methode auf.", - "jvm_diagnostic.completion.argument.tt.list.label": "Aufzeichnungsliste anzeigen (-l)", - "jvm_diagnostic.completion.argument.tt.list.documentation": "Zeigt die aktuelle Aufzeichnungsliste an.", - "jvm_diagnostic.completion.argument.tt.replay.label": "Aufzeichnung wiedergeben (-i)", - "jvm_diagnostic.completion.argument.tt.replay.documentation": "Zeigt Details zu einer angegebenen Aufzeichnung an.", - "jvm_diagnostic.completion.argument.ognl.template.documentation": "Führt einen OGNL-Ausdruck aus; Hochrisikobefehle sind standardmäßig durch Richtlinien eingeschränkt.", - "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", - "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "Ruft Instanzen der angegebenen Klasse ab; Hochrisikobefehle sind standardmäßig durch Richtlinien eingeschränkt.", - "jvm_diagnostic.completion.argument.redefine.template.documentation": "Definiert den Pfad zur Klassenbytecode-Datei neu.", - "jvm_diagnostic.completion.argument.retransform.template.documentation": "Transformiert die angegebene Klasse erneut.", - "jvm_diagnostic.completion.argument.stop.direct.label": "stop", - "jvm_diagnostic.completion.argument.stop.direct.documentation": "Stoppt die aktuelle Hintergrundaufgabe.", - "app.about.action.open_install_directory": "Installationsordner öffnen", - "app.about.action.install_update": "Update installieren", - "app.about.action.hide_to_background": "Im Hintergrund ausblenden", - "app.about.download_progress.title": "Update herunterladen", - "app.about.download_progress.title_with_version": "Update {{version}} herunterladen", - "app.about.update_status.not_checked": "Nicht geprüft", - "app.about.update_status.checking": "Suche nach Updates...", - "app.about.update_status.check_failed": "Updateprüfung fehlgeschlagen: {{error}}", - "app.about.update_status.new_version_downloaded": "Neue Version {{version}} gefunden (heruntergeladen; öffnen Sie den Downloadfortschritt zur Installation)", - "app.about.update_status.new_version_not_downloaded": "Neue Version {{version}} gefunden (nicht heruntergeladen)", - "app.about.update_status.latest": "Sie verwenden die neueste Version ({{version}})", - "app.about.message.update_package_ready": "Updatepaket ist bereit ({{version}})", - "app.about.message.update_package_ready_with_path": "Updatepaket ist bereit ({{version}}), Pfad: {{path}}", - "app.about.message.download_completed": "Update-Download abgeschlossen", - "app.about.message.download_completed_with_path": "Update-Download abgeschlossen. Paketpfad: {{path}}", - "app.about.message.download_failed_with_error": "Update-Download fehlgeschlagen: {{error}}", - "app.about.message.install_directory_opened_manual_replace": "Installationsordner geöffnet. Schließen Sie den Austausch manuell ab.", - "app.about.message.open_install_directory_failed_with_error": "Installationsordner konnte nicht geöffnet werden: {{error}}", - "app.about.message.install_failed_with_error": "Updateinstallation fehlgeschlagen: {{error}}", - "app.about.message.check_failed_with_error": "Updateprüfung fehlgeschlagen: {{error}}", - "app.about.message.new_version_found": "Neue Version {{version}} gefunden", - "app.theme.font_family.title": "Schriftfamilie", - "app.theme.font_family.ui_title": "UI-Schriftfamilie", - "app.theme.font_family.mono_title": "Monospace-Schriftfamilie", - "app.theme.font_family.load_failed": "Systemschriften konnten nicht geladen werden", - "app.theme.font_family.load_failed_fallback": "Systemschriften konnten nicht geladen werden. Häufige Schriftvorgaben werden verwendet: {{error}}", - "app.theme.font_family.loaded_ui_hint": "{{count}} Schriftfamilien wurden auf diesem System gelesen. Tippen Sie zum Suchen. Leeren setzt auf die Standard-UI-Schrift zurück.", - "app.theme.font_family.loading_ui_hint": "Installierte Schriften des aktuellen Systems werden in Echtzeit geladen. Tippen Sie zum Suchen. Leeren setzt auf die Standard-UI-Schrift zurück.", - "app.theme.font_family.mono_fallback_hint": "Häufige Code-Schriftvorgaben werden verwendet. Gilt für Monospace-Inhalte wie SQL-Editor, AI-Codeblöcke, Logs, DDL und Datentabellen.", - "app.theme.font_family.mono_hint": "Installierte Systemschriften werden zuerst angezeigt; Namen nahe Mono/Code/Console werden höher eingestuft. Gilt für Monospace-Inhalte wie SQL-Editor, AI-Codeblöcke, Logs, DDL und Datentabellen.", - "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux hat keine chinesischen CJK-Schriften erkannt; die Oberfläche kann fehlende Glyphen als Kästchen anzeigen. Installieren Sie: ", - "app.theme.font_family.linux_cjk_install_suffix": ", und starten Sie GoNavi danach neu.", - "app.linux_cjk_font_banner.title": "Linux-CJK-Schriften fehlen", - "app.linux_cjk_font_banner.description": "Chinesischer Text kann als Kästchen für fehlende Glyphen erscheinen. Installieren Sie die Schriften und starten Sie GoNavi danach neu: ", - "app.linux_cjk_font_banner.action.open_font_settings": "Schrifteinstellungen", - "app.theme.data_table.density": "Tabellendichte", - "app.theme.data_table.density.comfortable": "Komfortabel", - "app.theme.data_table.density.standard": "Standard", - "app.theme.data_table.density.compact": "Kompakt", - "app.theme.data_table.density_hint": "Steuert Zeilenhöhe, Spaltenbreite und Innenabstand. Komfortabel eignet sich für große Bildschirme; kompakt maximiert die Informationsdichte. Manuell gezogene Spaltenbreiten bleiben vorrangig erhalten.", - "app.theme.data_table.font_size": "Schriftgröße der Datentabelle", - "app.theme.data_table.sidebar_tree_font_size": "Schriftgröße des linken Schemasbaums", - "app.theme.data_table.follow_global": "Global folgen", - "sidebar.message.operation_rename_failed": "Umbenennen fehlgeschlagen: {{error}}", - "sidebar.message.operation_drop_failed": "Löschen fehlgeschlagen: {{error}}", - "sidebar.v2_database_menu.meta": "{{dialect}} · Datenbankaktionen", - "sidebar.v2_database_menu.new_schema": "Neues schema", - "sidebar.v2_database_menu.new_materialized_view": "Neue materialisierte Ansicht", - "sidebar.v2_database_menu.new_external_catalog": "Neuer externer Catalog", - "sidebar.v2_database_menu.refresh_object_tree": "Objektbaum aktualisieren", - "sidebar.v2_database_menu.export_backup_section": "Export und Sicherung", - "sidebar.v2_database_menu.export_all_table_schema_sql": "Schemas aller Tabellen exportieren · SQL", - "sidebar.v2_database_menu.backup_all_tables_sql": "Alle Tabellen sichern · Schema + Daten SQL", - "ai_settings.message.load_provider_failed": "Anbieterkonfiguration konnte nicht gelesen werden", - "data_sync.field.schema": "Schema", - "data_sync.message.fetch_target_schemas_failed_detail": "Zielschemas konnten nicht geladen werden: {{detail}}", - "data_sync.message.select_target_schema": "Zielschema auswählen", - "connection_modal.field.readOnly.label": "Produktionsschutz", - "connection_modal.field.readOnly.help": "Wenn aktiviert, sind für diese Verbindung nur Abfragen erlaubt. Import, Schemaänderungen, Schreibvorgänge und die Nutzung als Synchronisationsziel werden blockiert.", - "connection_modal.field.readOnly.checkbox": "Diese Verbindung als Produktionsverbindung markieren und nur Abfragen erlauben", - "query_editor.message.connection_readonly_blocked": "Für diese Verbindung ist der Produktionsschutz aktiv; es sind nur Abfragen erlaubt.", - "query_editor.results_panel.message.action.copy": "Kopieren", - "query_editor.results_panel.message.copy_unsupported": "Die Zwischenablage ist in der aktuellen Umgebung nicht verfügbar", - "query_editor.results_panel.message.copy_failed": "Nachricht konnte nicht kopiert werden: {{detail}}", "ai_chat.builtin_tools.database.execute_sql.desc": "Execute a SQL query and return results", "ai_chat.builtin_tools.database.execute_sql.detail": "Pass connectionId, dbName, and sql, then execute SQL on the target database and return results (up to 50 rows). Controlled by safety level; read-only mode only allows SELECT/SHOW/DESCRIBE.", "ai_chat.builtin_tools.database.execute_sql.parameters.connectionId.description": "Connection ID", @@ -5037,7 +178,38 @@ "ai_chat.builtin_tools.flows.upstream_request.title": "Trace AI upstream requests", "ai_chat.builtin_tools.flows.workspace_tabs.description": "See which SQL, table, or command tabs are open, then inspect the target tab for field checks, comparisons, and read-only validation.", "ai_chat.builtin_tools.flows.workspace_tabs.title": "Inventory the current workspace", + "ai_chat.composer_notice.missing_model.description": "Öffnen Sie unten die Modellauswahl und wählen Sie ein Modell. Wenn die Liste leer ist, prüfen Sie Anbieter-Endpunkt und API Key.", + "ai_chat.composer_notice.missing_model.title": "Zuerst ein Modell auswählen", + "ai_chat.composer_notice.missing_provider.description": "Fügen Sie zuerst in den AI-Einstellungen einen Modellanbieter hinzu und aktivieren Sie ihn.", + "ai_chat.composer_notice.missing_provider.title": "Kein Anbieter verfügbar", + "ai_chat.composer_notice.model_fetch_failed.default_description": "Prüfen Sie Anbieter-Endpunkt, API Key oder Kontoberechtigungen und öffnen Sie danach die Modellauswahl erneut.", + "ai_chat.composer_notice.model_fetch_failed.detail_description": "Anbieterdetail: {{detail}}", + "ai_chat.composer_notice.model_fetch_failed.title": "Modellliste konnte nicht geladen werden", + "ai_chat.header.action.export": "Exportieren", + "ai_chat.header.default_session_title": "Neuer Chat", + "ai_chat.header.export_time": "Exportiert am:", + "ai_chat.header.export_user": "Sie", + "ai_chat.header.mode_tabs.aria_label": "AI-Arbeitsmodus", + "ai_chat.header.mode.chat": "Chat", + "ai_chat.header.mode.history": "Verlauf", + "ai_chat.header.mode.insights": "Auto-Insights", + "ai_chat.header.session.connected": "{{title}} · Verbunden", + "ai_chat.header.tooltip.close": "Panel schließen", + "ai_chat.header.tooltip.export_markdown": "Als Markdown exportieren", + "ai_chat.header.tooltip.history": "Chatverlauf", + "ai_chat.header.tooltip.new_chat": "Neuer Chat", + "ai_chat.header.tooltip.new_chat_clear": "Neuer Chat (aktuellen Inhalt leeren)", + "ai_chat.header.tooltip.settings": "AI-Einstellungen", + "ai_chat.history.action.new_chat": "Neuen Chat starten", + "ai_chat.history.default_session_title": "Neuer Chat", "ai_chat.history.empty.no_history": "Noch kein Verlauf", + "ai_chat.history.empty.no_matches": "Keine passenden Chats", + "ai_chat.history.search.placeholder": "Verlauf suchen...", + "ai_chat.history.title": "Chatverlauf", + "ai_chat.history.tooltip.collapse": "Einklappen", + "ai_chat.history.tooltip.delete": "Löschen", + "ai_chat.input.action.send": "Senden", + "ai_chat.input.action.stop": "Generierung stoppen", "ai_chat.input.attachment.excel.worksheet_header": "[Arbeitsblatt: {{sheetName}}]", "ai_chat.input.attachment.kind.document": "Datei", "ai_chat.input.attachment.kind.excel": "Excel", @@ -5069,8 +241,10 @@ "ai_chat.input.attachment.warning.too_large": "Die Datei überschreitet {{size}}; Dateiinformationen wurden angehängt, der Inhalt wurde jedoch nicht gelesen.", "ai_chat.input.attachment.warning.unsupported_type": "Dieser Dateityp wurde angehängt, aber der Textinhalt wurde noch nicht extrahiert. Wenn das Modell den Inhalt analysieren soll, verwenden Sie markdown, txt, docx, xlsx oder pdf.", "ai_chat.input.context.add": "Hinzufügen", + "ai_chat.input.context.connection_tooltip": "Aktueller Datenabfragekontext", "ai_chat.input.context.current_count": "Aktueller Kontext · {{count}}", "ai_chat.input.context.label": "Verknüpfter Kontext", + "ai_chat.input.context.memory_tooltip": "Aktuelle Speichernutzung der Sitzung. Bei Erreichen der Grenze von {{limit}} startet die automatische Komprimierung.", "ai_chat.input.context.selector.cancel": "Abbrechen", "ai_chat.input.context.selector.confirm": "Ausgewählte Tabellen in den Kontext übernehmen", "ai_chat.input.context.selector.database_placeholder": "Datenbank wechseln", @@ -5080,7 +254,25 @@ "ai_chat.input.context.selector.search_placeholder": "Tabellennamen in der aktuellen Datenbank suchen...", "ai_chat.input.context.selector.select_all": "Alle passenden Tabellen auswählen ({{count}})", "ai_chat.input.context.selector.title": "Tabellenstrukturen als Kontext verknüpfen", + "ai_chat.input.context.tag_label": "Verknüpfter Kontext ({{count}})", + "ai_chat.input.message.context_added": "{{count}} Tabellenstrukturen zum Kontext hinzugefügt", + "ai_chat.input.message.context_load_failed": "Tabellenkontext konnte nicht geladen werden: {{detail}}", + "ai_chat.input.message.context_removed": "{{count}} Tabellenstrukturen aus dem Kontext entfernt", "ai_chat.input.message.context_sync_failed": "Der AI-Kontext konnte nicht synchronisiert werden: {{detail}}", + "ai_chat.input.message.context_synced": "Kontext synchronisiert: hinzugefügt {{added}}, entfernt {{removed}}", + "ai_chat.input.message.fetch_table_schema_failed": "Struktur für {{table}} konnte nicht geladen werden: {{detail}}", + "ai_chat.input.message.fetch_tables_failed": "Tabellen konnten nicht geladen werden: {{detail}}", + "ai_chat.input.message.select_database_context_first": "Wählen Sie links eine Datenbank aus, bevor Sie Chatkontext anhängen", + "ai_chat.input.message.selection_unchanged": "Die ausgewählten Tabellen wurden nicht geändert", + "ai_chat.input.modal.empty_tables": "Keine Tabellen passen zu \"{{query}}\"", + "ai_chat.input.modal.invert_matching": "Passende Ergebnisse umkehren", + "ai_chat.input.modal.ok": "Ausgewählte Tabellen mit Kontext synchronisieren", + "ai_chat.input.modal.search_table.placeholder": "Tabellen in der aktuellen Datenbank suchen...", + "ai_chat.input.modal.select_all_matching": "Alle passenden Tabellen auswählen ({{count}})", + "ai_chat.input.modal.switch_database.placeholder": "Datenbank wechseln", + "ai_chat.input.modal.title": "Datenbanktabellen-Schemakontext anhängen", + "ai_chat.input.model.placeholder": "Modell auswählen", + "ai_chat.input.placeholder": "Nachricht eingeben... ({{shortcut}}, Shift+Enter für Zeilenumbruch, / für Befehle)", "ai_chat.input.placeholder_compact": "Nachricht eingeben... {{shortcut}} · / Befehle", "ai_chat.input.shortcut.disabled": "Senden per Tastenkürzel deaktiviert", "ai_chat.input.shortcut.send_with_combo": "{{shortcut}} zum Senden", @@ -5110,11 +302,17 @@ "ai_chat.input.slash.connfail.keywords": "verbindungsfehler|cooldown|validierungsfehler|ssh|mysql", "ai_chat.input.slash.connfail.label": "🧯 Sonde für Verbindungsfehler", "ai_chat.input.slash.connfail.prompt": "Führe zuerst inspect_recent_connection_failures aus. Fasse die echten Log-Erkenntnisse zu den letzten Datenbankverbindungsfehlern, Verbindungsabkühlungen, Validierungsfehlern und SSH-Tunnel-Ausnahmen zusammen. Wenn bereits eine klare Adresse oder ein Typ bekannt ist, nutze zusätzlich inspect_current_connection oder inspect_saved_connections, um den Bereich weiter einzugrenzen.", + "ai_chat.input.slash.diff.desc": "Zwei Tabellen vergleichen und Änderungen erzeugen", "ai_chat.input.slash.diff.keywords": "diff|migration|alter", + "ai_chat.input.slash.diff.label": "🔄 Tabellenvergleich", + "ai_chat.input.slash.diff.prompt": "Vergleiche die Strukturunterschiede zwischen diesen zwei Tabellen und erzeuge ALTER-Anweisungen für die Migration von der alten zur neuen Version:", "ai_chat.input.slash.empty.description": "Probiere zuerst diese häufigen Einstiege aus, um schnell zu SQL-Generierung, AI-Gesundheitscheck oder MCP-Diagnose zu springen.", "ai_chat.input.slash.empty.summary": "Derzeit sind {{count}} Slash-Befehle verfügbar. Suche nach Befehlsname, Beschreibung oder Schlüsselwort.", "ai_chat.input.slash.empty.title": "Keine passenden Slash-Befehle", + "ai_chat.input.slash.explain.desc": "Logik des ausgewählten SQL erklären", "ai_chat.input.slash.explain.keywords": "erklären|sql|logik", + "ai_chat.input.slash.explain.label": "💡 SQL erklären", + "ai_chat.input.slash.explain.prompt": "Erkläre die Ausführungslogik dieses SQL und die Aufgabe jedes Schritts:\n```sql\n\n```", "ai_chat.input.slash.health.desc": "Gesundheitsprüfungen für die aktuelle AI-Konfiguration ausführen", "ai_chat.input.slash.health.keywords": "health|zustandsprüfung|ai-konfiguration|probe", "ai_chat.input.slash.health.label": "🩺 AI-Gesundheitscheck", @@ -5123,7 +321,10 @@ "ai_chat.input.slash.hotspots.keywords": "große datei|aufgebläht|aufteilen|refactoring|hotspots|code-hotspots|tausende zeilen", "ai_chat.input.slash.hotspots.label": "🧱 Code-Hotspots", "ai_chat.input.slash.hotspots.prompt": "Führe zuerst inspect_codebase_hotspots aus. Lies die aktuellen Hotspots großer Frontend-Dateien in GoNavi, empfohlene Aufteilungsscheiben und Testziele und sage mir dann, welche Datei ich als Nächstes am besten aufteilen sollte, welche Grenze sinnvoll ist und welche Prüfungen ich ausführen muss. Schlüsselwörter:", + "ai_chat.input.slash.index.desc": "Beste Indexstrategie empfehlen", "ai_chat.input.slash.index.keywords": "index|langsame abfrage|leistung", + "ai_chat.input.slash.index.label": "📊 Indexvorschläge", + "ai_chat.input.slash.index.prompt": "Empfiehl anhand der aktuellen Tabellenstruktur und typischer Abfrageszenarien die beste Indexstrategie und gib die DDL an:", "ai_chat.input.slash.mcp.desc": "MCP-Dienste und Status externer Clients prüfen", "ai_chat.input.slash.mcp.keywords": "mcp|codex|claude|openclaw|hermans|externer client", "ai_chat.input.slash.mcp.label": "🪛 MCP-Setup prüfen", @@ -5144,19 +345,34 @@ "ai_chat.input.slash.mcptool.keywords": "mcp-tool|mcp-tool-argumente|schema|arguments|parameter|toolaufruf|inputschema", "ai_chat.input.slash.mcptool.label": "🧩 MCP-Tool-Argumente", "ai_chat.input.slash.mcptool.prompt": "Führe zuerst inspect_mcp_setup aus, um den aktuell entdeckten MCP-Tool-Alias zu finden. Wenn ich bereits einen Tool-Namen oder ein Schlüsselwort genannt habe, rufe zusätzlich inspect_mcp_tool_schema auf, um das passende inputSchema zu lesen, und erkläre mir Pflichtparameter, Feldtypen, Enum-Werte, verschachtelte Pfade und wie das arguments-JSON geschrieben werden sollte.", + "ai_chat.input.slash.mock.desc": "INSERT-Testdaten erzeugen", "ai_chat.input.slash.mock.keywords": "mock|testdaten|insert", + "ai_chat.input.slash.mock.label": "🎲 Testdaten erzeugen", + "ai_chat.input.slash.mock.prompt": "Erzeuge 10 fachlich realistische INSERT-Testdatenanweisungen für die aktuell verknüpften Tabellen:", + "ai_chat.input.slash.optimize.desc": "SQL-Leistungsengpässe analysieren", "ai_chat.input.slash.optimize.keywords": "optimieren|index|leistung", + "ai_chat.input.slash.optimize.label": "⚡ Optimierungsanalyse", + "ai_chat.input.slash.optimize.prompt": "Analysiere dieses SQL auf Performanceprobleme und liefere eine optimierte Version:\n```sql\n\n```", + "ai_chat.input.slash.query.desc": "Beschreiben Sie, was Sie abfragen möchten", "ai_chat.input.slash.query.keywords": "abfrage|natürliche sprache|daten suchen", + "ai_chat.input.slash.query.label": "🔍 Abfrage in natürlicher Sprache", + "ai_chat.input.slash.query.prompt": "Schreibe eine SQL-Abfrage:", "ai_chat.input.slash.safety.desc": "Schreibgrenzen und allowMutating bestätigen", "ai_chat.input.slash.safety.keywords": "sicherheit|nur lesen|allowmutating|ddl|dml", "ai_chat.input.slash.safety.label": "🛡️ Schreibsicherheit", "ai_chat.input.slash.safety.prompt": "Führe zuerst inspect_ai_safety aus. Sage mir die aktuellen Schreibgrenzen für AI und GoNavi MCP, ob sie schreibgeschützt sind und ob execute_sql allowMutating benötigt.", + "ai_chat.input.slash.schema.desc": "Qualität des Tabellendesigns prüfen", "ai_chat.input.slash.schema.keywords": "schema|tabellenstruktur|design", + "ai_chat.input.slash.schema.label": "🏗️ Tabellendesign prüfen", + "ai_chat.input.slash.schema.prompt": "Prüfe das aktuell verknüpfte Tabellendesign, einschließlich Feldtypen, Normalisierung, Indexstrategie und Verbesserungsvorschlägen:", "ai_chat.input.slash.shortcuts.desc": "Aktuelle Win/Mac-Tastenkonfiguration lesen", "ai_chat.input.slash.shortcuts.keywords": "tastenkürzel|shortcuts|ergebnisbereich|mac|windows", "ai_chat.input.slash.shortcuts.label": "⌨️ Shortcut-Sonde", "ai_chat.input.slash.shortcuts.prompt": "Führe zuerst inspect_shortcuts aus. Erkläre mir die aktuelle GoNavi-Shortcut-Konfiguration, insbesondere wie SQL ausführen, Ergebnisbereich wechseln, AI-Panel öffnen und AI-Nachrichten senden auf der aktuellen Plattform und der anderen Plattform belegt sind und ob Standardwerte geändert wurden.", + "ai_chat.input.slash.sql.desc": "Anforderungen beschreiben und Anweisungen erzeugen", "ai_chat.input.slash.sql.keywords": "sql|generieren|abfragesatz", + "ai_chat.input.slash.sql.label": "📝 SQL erzeugen", + "ai_chat.input.slash.sql.prompt": "Erzeuge SQL aus den folgenden Anforderungen:", "ai_chat.input.slash.tools.desc": "Per Schlüsselwort die passende integrierte Sonde wählen", "ai_chat.input.slash.tools.keywords": "toolkatalog|integrierte tools|toolcatalog|parameterhinweise|arguments|probe-route", "ai_chat.input.slash.tools.label": "🧰 Tool-Katalog", @@ -5194,8 +410,10 @@ "ai_chat.input.status.ready.description.with_context": "Aktuell sind {{count}} Tabellenstruktur-Kontexte verknüpft. Sie können jetzt senden.", "ai_chat.input.status.ready.auto_model": "Automatisch ausgewählt", "ai_chat.input.status.ready.title": "AI ist bereit: {{provider}} / {{model}}", + "ai_chat.input.tooltip.attach_table_context": "Datenbanktabellenkontext anhängen", "ai_chat.input.tooltip.slash_command": "Slash-Befehle", "ai_chat.input.tooltip.upload_attachment": "Anhang hochladen (Bilder, Markdown, Word, Excel, PDF, Text)", + "ai_chat.input.tooltip.upload_image": "Bild oder Screenshot hochladen", "ai_chat.inspection.ai_config.error.inspect_ai_chat_readiness": "AI-Chat-Voraussetzungen konnten nicht gelesen werden", "ai_chat.inspection.ai_config.error.inspect_ai_guidance": "Aktuelle AI-Prompts- und Skills-Konfiguration konnte nicht gelesen werden", "ai_chat.inspection.ai_config.error.inspect_ai_providers": "Aktuelle AI-Anbieterkonfiguration konnte nicht gelesen werden", @@ -6022,14 +1240,61 @@ "ai_chat.mcp_client.install.summary.missing": "Dieses GoNavi MCP ist noch nicht mit {{label}} verbunden.", "ai_chat.mcp_client.install.summary.remote": "{{label}} läuft normalerweise in der Cloud oder auf einer anderen Maschine und benötigt eine Remote-MCP-Bridge, um dieses GoNavi aufzurufen.", "ai_chat.mcp_client.install.summary.stale": "{{label}} hat bereits einen alten GoNavi-Eintrag. Nach dem Update zeigt er auf dieses GoNavi.", + "ai_chat.message.action.copied": "Kopiert", + "ai_chat.message.action.copied_error_raw": "Originalfehler kopiert", + "ai_chat.message.action.copy_error_raw": "Originalfehler kopieren", + "ai_chat.message.action.copy_full": "Volltext kopieren", + "ai_chat.message.action.delete": "Nachricht löschen", + "ai_chat.message.action.edit": "Diese Nachricht bearbeiten, spätere Einträge entfernen und erneut senden", + "ai_chat.message.action.retry": "Aus der vorherigen Benutzernachricht neu generieren", + "ai_chat.message.code.collapse": "Code einklappen", + "ai_chat.message.code.copied": "Kopiert", + "ai_chat.message.code.copy": "Code kopieren", + "ai_chat.message.code.execute": "Ausführen", + "ai_chat.message.code.execute_failed": "Ausführung fehlgeschlagen", + "ai_chat.message.code.execute_tooltip": "Jetzt ausführen, gesteuert durch die AI-Sicherheitsrichtlinie", + "ai_chat.message.code.executing": "Wird ausgeführt...", + "ai_chat.message.code.expand_all": "Gesamten Code aufklappen", + "ai_chat.message.code.insert": "Einfügen", + "ai_chat.message.code.insert_tooltip": "Dieses SQL in den Abfragearbeitsbereich einfügen, um es schnell zu bearbeiten oder auszuführen", + "ai_chat.message.code.preview": "Vorschau", + "ai_chat.message.code.preview_collapse": "Einklappen", + "ai_chat.message.code.preview_result": "Vorschauergebnis ({{rows}} Zeilen x {{columns}} Spalten)", + "ai_chat.message.code.preview_tooltip": "Abfrageergebnisse im Chat anzeigen, maximal 20 Zeilen", + "ai_chat.message.code.query_no_result": "Die Abfrage lieferte keine Ergebnisse", + "ai_chat.message.code.view_result": "Ergebnis anzeigen ({{rows}} Zeilen)", + "ai_chat.message.image_alt": "Angehängtes Bild {{index}}", + "ai_chat.message.jvm.apply_diagnostic": "Auf Diagnosekonsole anwenden", + "ai_chat.message.jvm.apply_preview": "Auf JVM-Vorschau anwenden", + "ai_chat.message.jvm.diagnostic_target_not_found": "Kein Diagnosekonsolen-Tab passt zu diesem Plan. Öffnen Sie die ursprüngliche Zielkonsole, bevor Sie ihn anwenden.", + "ai_chat.message.jvm.missing_diagnostic_context": "Diesem Diagnoseplan fehlt der Kontext des Ursprungstabs. Generieren Sie ihn in der Ziel-Diagnosekonsole erneut.", + "ai_chat.message.jvm.missing_plan_context": "Diesem JVM-Plan fehlt der Kontext des Ursprungstabs. Generieren Sie ihn auf der Ziel-JVM-Ressourcenseite erneut.", + "ai_chat.message.jvm.plan_target_not_found": "Kein Ressourcentab passt zu diesem JVM-Plan. Öffnen Sie die ursprüngliche Zielressource, bevor Sie ihn anwenden.", + "ai_chat.message.mermaid.parse_failed": "Mermaid-Analyse fehlgeschlagen: {{detail}}", + "ai_chat.message.mermaid.render_failed": "Mermaid-Rendering fehlgeschlagen: {{detail}}", "ai_chat.message.render_error.body": "Der restliche Verlauf bleibt nutzbar. Sie können diese fehlerhafte Nachricht löschen, bevor Sie fortfahren.", "ai_chat.message.render_error.delete": "Diese Nachricht löschen", "ai_chat.message.render_error.retry": "Rendern erneut versuchen", "ai_chat.message.render_error.title": "Diese AI-Nachricht konnte nicht gerendert werden und wurde isoliert", "ai_chat.message.render_error.unknown": "Unbekannter Renderfehler", + "ai_chat.message.role.user": "Sie", + "ai_chat.message.security.blocked": "🔒 Sicherheitsrichtlinie blockiert: Die aktuelle Sicherheitsstufe erlaubt keine {{operationType}}-SQL-Operationen. Passen Sie die Sicherheitsstufe in den AI-Einstellungen an.", + "ai_chat.message.security.confirm_execute": "Ausführen", + "ai_chat.message.security.confirm_title": "⚠️ Sicherheitsbestätigung", + "ai_chat.message.security.default_warning": "Dieses SQL ist eine {{operationType}}-Operation. Ausführen?", + "ai_chat.message.thinking.active": "Denkt...", + "ai_chat.message.thinking.count": "({{count}} Zeichen)", + "ai_chat.message.thinking.title": "Denkprozess", + "ai_chat.message.tool_call.done": "Datenprüfungen abgeschlossen ({{count}} Elemente)", + "ai_chat.message.tool_call.execute_sql": "Schreibgeschützte SQL-Prüfung ausführen", "ai_chat.message.tool_call.get_all_columns": "Spalten über Tabellen hinweg zusammenfassen", + "ai_chat.message.tool_call.get_columns": "Echte Spaltendefinitionen prüfen", + "ai_chat.message.tool_call.get_connections": "Verfügbare Verbindungsinformationen laden", + "ai_chat.message.tool_call.get_databases": "Datenbankliste scannen", "ai_chat.message.tool_call.get_foreign_keys": "Fremdschlüsselbeziehungen zuordnen", "ai_chat.message.tool_call.get_indexes": "Indexdefinitionen prüfen", + "ai_chat.message.tool_call.get_table_ddl": "CREATE TABLE-Anweisung extrahieren", + "ai_chat.message.tool_call.get_tables": "Tabellenstrukturinformationen analysieren", "ai_chat.message.tool_call.get_triggers": "Triggerlogik prüfen", "ai_chat.message.tool_call.inspect_active_tab": "Aktiven Tab lesen", "ai_chat.message.tool_call.inspect_ai_chat_readiness": "Aktuellen AI-Chat-Vorbereitungsstatus lesen", @@ -6067,14 +1332,132 @@ "ai_chat.message.tool_call.inspect_table_bundle": "Vollständigen Tabellenstruktur-Snapshot abrufen", "ai_chat.message.tool_call.inspect_workspace_tabs": "Aktuelle Arbeitsbereich-Tabs prüfen", "ai_chat.message.tool_call.preview_table_rows": "Echte Beispieldaten anzeigen", + "ai_chat.message.tool_call.running": "Datenprüfungen werden ausgeführt...", + "ai_chat.message.tool_result.char_count": "{{count}} Zeichen", + "ai_chat.message.tool_result.no_data": "Keine Daten", + "ai_chat.message.tool_result.title": "Prüfergebnis ({{name}})", + "ai_chat.message.wait.connecting": "Verbindung wird hergestellt", + "ai_chat.panel.error.html_response": "Der Server hat eine ungewöhnliche HTML-Antwort zurückgegeben, möglicherweise wegen Gateway-Timeout oder nicht verfügbarem Dienst", + "ai_chat.panel.error.http_server": "HTTP {{code}} Serverfehler", + "ai_chat.panel.error.truncated_suffix": "...(gekürzt)", + "ai_chat.panel.error.unknown": "Unbekannter Fehler", + "ai_chat.panel.history.empty": "Noch kein Chatverlauf", + "ai_chat.panel.insight.context.empty_body": "Wenn AI auf einer Tabellenseite geöffnet wird, wird die aktuelle Tabelle automatisch verknüpft. Kontext kann auch manuell oberhalb des Eingabefelds hinzugefügt werden.", + "ai_chat.panel.insight.context.empty_title": "Noch keine Tabellenstruktur verknüpft", + "ai_chat.panel.insight.context.linked_body": "Diese Unterhaltung enthält Strukturkontext für {{tables}}.", + "ai_chat.panel.insight.context.linked_title": "{{count}} Tabellen verknüpft", + "ai_chat.panel.insight.context.more_tables_suffix": " und weitere Tabellen", + "ai_chat.panel.insight.context.table_separator": ", ", + "ai_chat.panel.insight.query.empty_body": "Nach dem Ausführen einer Abfrage erscheinen hier SQL-Hinweise für die Optimierungsanalyse.", + "ai_chat.panel.insight.query.empty_title": "Noch keine Laufzeitdaten für Abfragen", + "ai_chat.panel.insight.query.slowest_title": "Langsamste aktuelle Abfrage {{duration}}ms", + "ai_chat.panel.insight.status.empty_body": "Noch keine SQL-Protokolle.", + "ai_chat.panel.insight.status.failed_title": "{{count}} aktuelle Abfragefehler", + "ai_chat.panel.insight.status.ok_title": "Aktueller Abfragestatus normal", + "ai_chat.panel.insight.status.recent_body": "{{count}} aktuelle SQL-Einträge wurden erfasst. AI kann sie direkt erklären oder optimieren.", + "ai_chat.panel.insight.write.detected_body": "Für SQL mit Schreibzugriff sollten vor dem Commit eine Vorschau und Rollback-Anweisungen erzeugt werden.", + "ai_chat.panel.insight.write.detected_title": "{{count}} Schreiboperationen erkannt", + "ai_chat.panel.insight.write.readonly_body": "AI priorisiert standardmäßig Erklärungen, SELECT-Generierung, Schema-Analyse und Indexoptimierung.", + "ai_chat.panel.insight.write.readonly_title": "Der Schwerpunkt liegt aktuell auf Nur-Lese-Analyse", + "ai_chat.panel.jvm_diagnostic.permission.allowed": "erlaubt", + "ai_chat.panel.jvm_diagnostic.permission.forbidden": "verboten", + "ai_chat.panel.jvm_diagnostic.policy.plan_first": "Diagnosebefehle dürfen generiert werden, aber liefere immer zuerst den Plan und lasse den Nutzer entscheiden, ob er ausgeführt wird.", + "ai_chat.panel.jvm_diagnostic.policy.read_only": "Antworte standardmäßig als Nur-Lese-Diagnose; generiere nur observe-, trace- und Troubleshooting-Befehle und nimm nicht an, dass bereits etwas ausgeführt wurde.", + "ai_chat.panel.jvm_runtime.policy.preview_required": "Schreibbare Verbindung, aber jede Änderung muss zuerst eine Vorschau erzeugen und auf menschliche Bestätigung warten.", + "ai_chat.panel.jvm_runtime.policy.read_only": "Nur-Lese-Verbindung; analysiere nur und generiere Änderungspläne, und nimm niemals an, dass Schreibvorgänge bereits ausgeführt wurden.", + "ai_chat.panel.jvm_runtime.resource_path.current": "Aktueller resourcePath: {{resourcePath}}", + "ai_chat.panel.jvm_runtime.resource_path.missing": "Aktuell ist kein konkreter resourcePath ausgewählt.", + "ai_chat.panel.local_tool.execute_sql.description": "Führt eine SQL-Abfrage auf der angegebenen Verbindung und Datenbank aus und gibt das Ergebnis zurück. Durch die Sicherheitsstufe gesteuert: Im Nur-Lese-Modus sind nur SELECT/SHOW/DESCRIBE und ähnliche Abfrageoperationen zulässig. Es werden höchstens 50 Zeilen zurückgegeben.", + "ai_chat.panel.local_tool.get_columns.description": "Ruft die field-Liste der angegebenen Tabelle ab, einschließlich field-Namen, Typen, NULL-Zulässigkeit, Standardwerten, Kommentaren und weiteren Metadaten. Vor dem Generieren von SQL muss dieses Tool aufgerufen werden, um echte field-Namen zu bestätigen; field-Namen dürfen nicht geraten werden.", + "ai_chat.panel.local_tool.get_connections.description": "Wenn eine Datenbank abgefragt oder bearbeitet werden soll, aber kein Verbindungskontext ausgewählt ist, werden alle in der App verfügbaren Datenbankverbindungen abgerufen. Die zurückgegebenen Daten enthalten Verbindungs-ID (id) und Name (name).", + "ai_chat.panel.local_tool.get_databases.description": "Ruft alle Datenbanknamen (Database/Schema) unter der angegebenen Verbindung (connectionId) ab.", + "ai_chat.panel.local_tool.get_table_ddl.description": "Ruft das vollständige CREATE TABLE DDL der angegebenen Tabelle ab, einschließlich fields, Indizes, Constraints und vollständiger Strukturinformationen.", + "ai_chat.panel.local_tool.get_tables.description": "Nachdem Zielverbindung und dbName feststehen, rufe dieses Tool auf, wenn der Benutzer eine Tabelle erwähnt oder danach fragt, du aber den exakten tableName nicht kennst. Es liefert alle Tabellennamen dieser Datenbank (nur Tabellennamen), damit du die Zieltabelle ableiten kannst.", + "ai_chat.panel.local_tool.param.connection_id": "connectionId (Verbindungs-ID)", + "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId (aus get_connections)", + "ai_chat.panel.local_tool.param.db_name": "dbName (Datenbankname)", + "ai_chat.panel.local_tool.param.sql": "Auszuführende SQL-Anweisung", + "ai_chat.panel.local_tool.param.table_name": "tableName (Tabellenname)", + "ai_chat.panel.message.empty_response": "❌ Das Modell hat keinen Inhalt zurückgegeben. Möglicherweise greift ein Ratenlimit, der Kontext ist überlastet oder die Anfrage wurde abgelehnt.", + "ai_chat.panel.message.error": "❌ Fehler: {{detail}}", + "ai_chat.panel.message.request_interrupted": "❌ Anfrage unterbrochen: Es wurde keine konkrete Antwort empfangen.", + "ai_chat.panel.message.send_failed": "❌ Senden fehlgeschlagen: {{detail}}", + "ai_chat.panel.message.service_not_ready": "❌ AI Service ist nicht bereit", + "ai_chat.panel.model_control.continue_after_summary": "Setze anhand des neuesten Status und der Explorationsergebnisse oben deine noch nicht abgeschlossene Analyse fort oder führe den nächsten Schritt aus.", + "ai_chat.panel.model_control.force_tool_call": "Verwende direkt einen function call, um das Tool aufzurufen und die Aktion auszuführen; beschreibe den Plan nicht nur als Text.", + "ai_chat.panel.notice.fetch_models_failed": "Modellliste konnte nicht abgerufen werden: {{detail}}", + "ai_chat.panel.probe.consecutive_failed": "⚠️ Prüfungen sind 3 Runden in Folge fehlgeschlagen und wurden beendet. Prüfen Sie den Verbindungsstatus und versuchen Sie es erneut.", + "ai_chat.panel.probe.max_rounds": "⚠️ Werkzeugaufrufe haben das Limit von {{count}} Runden erreicht und wurden beendet. Senden Sie eine neue Nachricht, um weiter zu erkunden.", + "ai_chat.panel.prompt.jvm_diagnostic": "Du bist der JVM-Diagnoseassistent von GoNavi. Der aktuelle Tab ist eine Arthas-kompatible Diagnose-Workbench, und das Ziel ist ein strukturierter Diagnoseplan, der zurück in die Diagnosekonsole eingefügt werden kann.\n\nAktuelle Verbindung: {{connectionName}}\nZielhost: {{host}}\nDiagnose-transport: {{transport}}\nUmgebung: {{environment}}\nVerbindungsrichtlinie: {{readOnlyPolicy}}\nBefehlsberechtigungen: observe={{observePolicy}}, trace={{tracePolicy}}, mutating={{mutatingPolicy}}\n\nAntwortregeln:\n1. Du darfst mit einer kurzen Analyse beginnen, aber die Antwort muss genau einen ```json Codeblock enthalten.\n2. JSON-Felder sind strikt auf intent, transport, command, riskLevel, reason, expectedSignals beschränkt.\n3. Das Feld transport muss dem oben gezeigten Diagnose-transport entsprechen; erfinde keinen anderen transport.\n4. command muss ein einzelner Diagnosebefehl sein, ohne shell-Prompt, Zeilenumbruch-Verkettung, mehrere Befehle oder Code-Fence.\n5. riskLevel darf nur low, medium oder high sein.\n6. expectedSignals muss ein String-Array sein, das die nach der Ausführung zu beobachtenden Signale beschreibt.\n7. Wenn Berechtigungen eine Operationskategorie verbieten, gib keine Befehle dieser Kategorie aus; erkläre die Einschränkung direkt, wenn die Anfrage nicht erfüllbar ist.", + "ai_chat.panel.prompt.jvm_runtime": "Du bist der JVM-Laufzeitanalyseassistent von GoNavi. Der aktuelle Kontext ist nicht SQL, sondern die JVM-Ressourcen-Workbench.\n\nAktuelle Verbindung: {{connectionName}}\nZielhost: {{host}}\nProvider-Modus: {{providerMode}}\nUmgebung: {{environment}}\nVerbindungsrichtlinie: {{connectionPolicy}}\nStatus des resourcePath: {{resourcePathStatus}}\n\nAntwortregeln:\n1. Du darfst Ressourcenstruktur, Risiken, Änderungsvorschläge und Rollback-Vorschläge erklären.\n2. Wenn der Nutzer einen JVM-Änderungsplan verlangt, gib genau einen ```json Codeblock aus und beschränke JSON-Felder strikt auf targetType, selector, action, payload, reason.\n3. Bevorzuge für action Werte, die im aktuellen Ressourcen-Snapshot oder in Metadaten bereits als supportedActions deklariert sind; wenn die aktuelle Ressource nichts deklariert, leite sie nur vorsichtig aus dem Snapshot-Inhalt ab.\n4. Bevorzuge den aktuellen resourcePath für selector.resourcePath; wenn der aktuelle Pfad unbekannt ist, sage klar, dass keine genaue Zielauswahl möglich ist, und erfinde keinen Pfad.\n5. payload darf nur {\"format\":\"json\",\"value\":{...}} oder {\"format\":\"text\",\"value\":\"...\"} verwenden; gib keine Skripte, Befehle oder nackten Werte aus.\n6. Gib keine Skripte, Befehle oder Aussagen wie bereits erfolgreich ausgeführt aus.", + "ai_chat.panel.prompt.memory_summary": "Dies ist der Verlauf einer überlangen Unterhaltung. Um Kontextplatz freizugeben und zugleich den Kern der Erinnerung zu bewahren, lies ihn sorgfältig und erstelle eine stark verdichtete strukturierte Zusammenfassung auf Basis technischer Fakten, des erkundeten Datenstrukturzustands, des zentralen Nutzeranliegens und des aktuellen Fortschritts.\nHinweise:\n1. Sei objektiv und genau; lasse keine wichtige Geschäftslogik und keine erkundeten Tabellennamen/Felder aus.\n2. Entferne unwirksame Ausführungsschritte, Höflichkeitsfloskeln und die JSON-Rückgabewerte selbst.\n3. Halte den Umfang bei etwa 1000-2000 Wörtern und gib ausschließlich kompaktes Markdown aus.\n4. Beginne direkt mit der Zusammenfassung; keine Begrüßung.", + "ai_chat.panel.prompt.sql.context_tables": "Du bist ein professioneller Datenbankassistent. Der aktuelle Datenbanktyp ist {{dbDisplayType}}. Erzeuge SQL in diesem Dialekt. Die folgende verknüpfte Tabellenstruktur-DDL wurde vom Benutzer bereitgestellt; berücksichtige sie vorrangig bei der Antwort:\n\n{{ddlChunks}}", + "ai_chat.panel.prompt.sql.current_database": "Du bist ein professioneller Datenbankassistent. Der aktuelle Datenbanktyp ist {{dbDisplayType}}, und der aktuelle Datenbankname ist {{targetDbName}}. Wenn der Benutzer Informationen zu einer bestimmten Tabelle oder zur aktuellen Datenbank benötigt, kannst du das bereitgestellte get_tables-Tool aktiv aufrufen, um Tabelleninformationen abzurufen.", + "ai_chat.panel.prompt.sql.no_connections": "Du bist ein professioneller Datenbankassistent. In der App sind aktuell keine Datenbankverbindungen verfügbar.\n\nWenn die Frage des Benutzers Datenbankstruktur oder SQL benötigt, erkläre zuerst, dass get_connections, get_databases, get_tables und get_columns ohne vorhandene Verbindung keine echten Datenbankinformationen abrufen können, und bitte den Benutzer, eine Verbindung zu erstellen und es erneut zu versuchen. Rate keine connectionId, keinen dbName, keine Tabellennamen und keine Feldnamen.\n\nBei allgemeinen Fragen ohne Datenbankabfrage antworte normal.", + "ai_chat.panel.prompt.sql.no_context": "Du bist ein professioneller Datenbankassistent. Der Benutzer hat in der Oberfläche aktuell keine konkrete Datenbank oder Tabelle als Kontext ausgewählt.\n\nWichtige Regeln:\n1. Wenn du dem Benutzer helfen musst, eine Zieltabelle zu finden, rate niemals Tabellennamen. Du musst Tools aufrufen, um echte Daten abzurufen.\n2. Vollständiger Ablauf: get_connections → get_databases → get_tables → get_columns → SQL erzeugen. Kein Schritt darf übersprungen werden.\n3. [Verbindungspriorität - kritisch] Nach dem Abrufen der Verbindungsliste musst du in dieser Reihenfolge suchen:\n - Erste Priorität: Verbindungen, deren host localhost oder 127.0.0.1 ist oder lokale Maschine bedeutet\n - Zweite Priorität: Verbindungen, deren name oder host dev oder local enthält, oder deren host eine interne IP wie 10.x, 192.168.x oder 172.16-31.x ist\n - Dritte Priorität: andere Verbindungen wie test oder production\n Wenn du die Zieltabelle in einer Verbindung mit höherer Priorität findest, verwende diese Verbindung direkt und suche nicht weiter in Verbindungen mit niedrigerer Priorität.\n4. Wenn die Zieltabelle in der aktuellen Datenbank nicht gefunden wird, musst du weitere Datenbanken prüfen; gib nicht auf.\n5. Stoppe nur, wenn alle möglichen Datenbanken geprüft wurden oder die Zieltabelle eindeutig gefunden wurde.\n6. Bei allgemeinen Fragen ohne Datenbankabfrage antworte normal.\n\nSQL-Erzeugungsregeln (kritisch, strikt befolgen):\n7. [Feldgenauigkeit - absolute Regel] Bevor du SQL erzeugst, musst du get_columns aufrufen, um die echte Feldliste der Zieltabelle abzurufen. Jeder Feldname im SQL muss exakt dem von get_columns zurückgegebenen field-Wert entsprechen, einschließlich Groß-/Kleinschreibung. Erfinde, kürze oder erschließe keine Feldnamen. Wenn das Feld zum Beispiel channel heißt, schreibe channel und nicht pay_channel.\n8. Verwende beim Erzeugen von SQL kein qualifiziertes Präfix im Format \"database.table\"; schreibe nur den Tabellennamen selbst.\n9. Beim Berichten von Ergebnissen müssen Verbindungsname/ID und Datenbankname strikt aus den tatsächlichen Parametern desselben get_tables-Aufrufs stammen. Mische keine connectionId einer Verbindung mit dem dbName einer anderen.\n10. Wenn mehrere Datenbanken ähnliche Namen haben, sage dem Benutzer klar, in welcher Datenbank sich die Zieltabelle befindet.\n11. [Pflicht] Die erste Zeile jedes SQL-Codeblocks muss einen Kontext-Kommentar exakt in diesem Format enthalten: -- @context connectionId= dbName=. connectionId und dbName müssen aus demselben erfolgreichen get_tables-Aufruf stammen, also aus den tatsächlichen Parameterwerten, die du in diesem Aufruf übergeben hast. Beispiel:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\nAktuell verfügbare Verbindungen: [{{connList}}]", + "ai_chat.panel.render_error.delete": "Diese Nachricht löschen", + "ai_chat.panel.render_error.description": "Die übrige Unterhaltung bleibt nutzbar. Sie können diese fehlerhafte Nachricht löschen und danach fortfahren.", + "ai_chat.panel.render_error.retry": "Rendering erneut versuchen", + "ai_chat.panel.render_error.title": "Diese AI-Nachricht konnte nicht gerendert werden und wurde isoliert", + "ai_chat.panel.render_error.unknown": "Unbekannter Renderfehler", + "ai_chat.panel.session.default_title": "Neuer Chat", + "ai_chat.panel.status.analyzing_chain": "Kette und Logik werden tiefgehend analysiert", + "ai_chat.panel.status.deep_reasoning": "Das Modell führt eine tiefe Schlussfolgerung aus", + "ai_chat.panel.status.memory_compress_failed": "❌ Speicherkomprimierung fehlgeschlagen. Der ursprüngliche Kontext wird weiterverwendet...", + "ai_chat.panel.status.memory_compressing": "⚙️ Die Unterhaltung ist überlastet. Speicherkomprimierung wird gestartet...", + "ai_chat.panel.status.memory_probe_summary": "[Automatische Speicherumformung] Lange Prüfverlaufsdaten und Chat wurden zu einer Zusammenfassung komprimiert:\n\n{{summary}}", + "ai_chat.panel.status.memory_summary": "[Automatische Speicherumformung] Der lange Verlauf wurde zu einer Zusammenfassung komprimiert:\n\n{{summary}}", + "ai_chat.panel.status.model_connecting": "Verbindung zum Modell wird hergestellt", + "ai_chat.panel.status.returning_runtime_data": "Laufzeitdaten werden an das Modell zurückgegeben", + "ai_chat.panel.status.summarizing_probe": "Prüfergebnisse werden zusammengefasst", + "ai_chat.panel.status.waiting_instruction": "Warten auf Operationsanweisung", + "ai_chat.panel.status.waiting_response": "Warten auf Modellantwort", + "ai_chat.panel.status.waking_engine": "Schlussfolgerungs-Engine wird geweckt", + "ai_chat.panel.tool_error.connection_not_found": "Verbindung nicht gefunden", "ai_chat.panel.tool_error.fetch_all_columns_failed": "Datenbankweite Spaltenzusammenfassung konnte nicht abgerufen werden: {{detail}}", + "ai_chat.panel.tool_error.fetch_columns_failed": "Spaltenliste konnte nicht abgerufen werden: {{detail}}", + "ai_chat.panel.tool_error.fetch_databases_failed": "Datenbankliste konnte nicht abgerufen werden: {{detail}}", "ai_chat.panel.tool_error.fetch_foreign_keys_failed": "Fremdschlüsselbeziehungen konnten nicht abgerufen werden: {{detail}}", "ai_chat.panel.tool_error.fetch_indexes_failed": "Indexdefinitionen konnten nicht abgerufen werden: {{detail}}", + "ai_chat.panel.tool_error.fetch_table_ddl_failed": "CREATE TABLE-Anweisung konnte nicht abgerufen werden: {{detail}}", + "ai_chat.panel.tool_error.fetch_tables_failed": "Tabellenliste konnte nicht abgerufen werden: {{detail}}", "ai_chat.panel.tool_error.fetch_triggers_failed": "Triggerdefinitionen konnten nicht abgerufen werden: {{detail}}", "ai_chat.panel.tool_error.mcp_failed": "MCP-Tool-Aufruf fehlgeschlagen", "ai_chat.panel.tool_error.mcp_failed_with_detail": "MCP-Tool-Aufruf fehlgeschlagen: {{detail}}", "ai_chat.panel.tool_error.preview_table_rows_failed": "Tabellenbeispieldaten konnten nicht angezeigt werden: {{detail}}", + "ai_chat.panel.tool_error.sql_blocked": "Die Sicherheitsrichtlinie hat diese Anfrage blockiert: Die aktuelle Sicherheitsstufe erlaubt kein {{operationType}} SQL. Zeigen Sie dem Benutzer das SQL und bitten Sie ihn, es manuell auszuführen.", + "ai_chat.panel.tool_error.sql_execute_exception": "SQL-Ausnahme bei der Ausführung: {{detail}}", + "ai_chat.panel.tool_error.sql_execute_failed": "SQL-Ausführung fehlgeschlagen", "ai_chat.panel.tool_error.table_name_required": "tableName darf nicht leer sein", + "ai_chat.panel.tool_error.unknown_function": "Unbekannte Funktion: {{functionName}}", + "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ Dies ist die exakte Feldliste der Tabelle {{tableName}}. Verwende beim Erzeugen von SQL nur diese field-Werte als Spaltennamen, exakt wie angegeben. Nicht ändern, abkürzen oder eigene Feldnamen bilden.\nVerfügbare Felder: {{fieldNames}}\nDetails: {{detailJson}}", + "ai_chat.quick_action.explain_schema": "🔍 Schema erklären", + "ai_chat.quick_action.explain_schema.hint.with_context": "Felder und Einschränkungen erklären", + "ai_chat.quick_action.explain_schema.prompt.with_context": "Erkläre die Designabsicht und die Bedeutung der Felder dieser Tabellen ausführlich: {{tables}}", + "ai_chat.quick_action.explain_schema.title": "Schema erklären", + "ai_chat.quick_action.explain_sql": "🔍 SQL erklären", + "ai_chat.quick_action.explain_sql.hint.default": "Ausführungslogik erklären", + "ai_chat.quick_action.explain_sql.prompt.default": "Erkläre die Ausführungslogik dieser SQL-Anweisung:\n```sql\n\n```", + "ai_chat.quick_action.explain_sql.title": "SQL erklären", + "ai_chat.quick_action.generate_sql": "📝 SQL erzeugen", + "ai_chat.quick_action.generate_sql.hint.default": "Abfrage aus natürlicher Sprache erzeugen", + "ai_chat.quick_action.generate_sql.hint.with_context": "Abfrage aus natürlicher Sprache erzeugen", + "ai_chat.quick_action.generate_sql.prompt.default": "Erzeuge eine Abfrage aus der aktuellen Datenbanktabellenstruktur:", + "ai_chat.quick_action.generate_sql.prompt.with_context": "Erzeuge eine häufig verwendete Abfrage für diese Tabellenstrukturen: {{tables}}", + "ai_chat.quick_action.generate_sql.title": "SQL erzeugen", + "ai_chat.quick_action.optimize": "⚡ Optimierungstipps", + "ai_chat.quick_action.optimize.hint.default": "Performance- und Indexempfehlungen", + "ai_chat.quick_action.optimize.hint.with_context": "Indizes, Normalisierung und Risiken", + "ai_chat.quick_action.optimize.prompt.default": "Analysiere die Performance dieser SQL-Anweisung und schlage Optimierungen vor:\n```sql\n\n```", + "ai_chat.quick_action.optimize.prompt.with_context": "Analysiere das Strukturdesign dieser Tabellen und schlage Optimierungen für Indizes und Abfrageperformance vor: {{tables}}", + "ai_chat.quick_action.optimize.title": "Optimierungstipps", + "ai_chat.quick_action.schema_analysis": "🏗️ Schema-Analyse", + "ai_chat.quick_action.schema_analysis.hint.default": "Strukturqualität analysieren", + "ai_chat.quick_action.schema_analysis.hint.with_context": "Tabellenbeziehungen und Abhängigkeitsdiagramm", + "ai_chat.quick_action.schema_analysis.prompt.default": "Analysiere die aktuelle Datenbanktabellenstruktur und schlage Optimierungen vor.", + "ai_chat.quick_action.schema_analysis.prompt.with_context": "Führe eine vollständige Schema-Analyse für diese Tabellen aus, einschließlich Datentypauswahl, Normalisierungsprüfung und Verbesserungsvorschlägen: {{tables}}", + "ai_chat.quick_action.schema_analysis.title": "Schema-Analyse", + "ai_chat.quick_action.table_separator": ", ", "ai_chat.system.context.custom_prompt.database": "Der Benutzer hat einen zusaetzlichen Prompt fuer die Datenbanksitzung hinterlegt. Befolge ihn, solange er Sicherheitsregeln und Fakten nicht widerspricht:\n{{content}}", "ai_chat.system.context.custom_prompt.global": "Der Benutzer hat einen zusaetzlichen globalen Prompt hinterlegt. Befolge ihn, solange er Sicherheitsregeln und Fakten nicht widerspricht:\n{{content}}", "ai_chat.system.context.custom_prompt.jvm": "Der Benutzer hat einen zusaetzlichen Prompt fuer die JVM-Ressourcenanalyse hinterlegt. Befolge ihn, solange er Sicherheitsregeln und Fakten nicht widerspricht:\n{{content}}", @@ -6131,6 +1514,17 @@ "ai_chat.system.inspection_guidance.inspect_sql_editor_transaction": "Bei Fragen zu Manual Commit, Autocommit, offenen Transaktionen oder DML-Transaktionssemantik zuerst inspect_sql_editor_transaction aufrufen, den echten GoNavi Zustand lesen und nicht aus Erinnerung oder UI-Vermutungen antworten.", "ai_chat.system.inspection_guidance.inspect_sql_risk": "Bei Fragen zu Ausfuehren, Loeschen, Aktualisieren, DDL, Batch-SQL oder SQL-Risiko zuerst inspect_sql_risk aufrufen, den echten GoNavi Zustand lesen und nicht aus Erinnerung oder UI-Vermutungen antworten.", "ai_chat.system.inspection_guidance.inspect_sql_snippets": "Bei Fragen zu SQL-Snippets, Vorlagenpraefixen oder haeufig genutzten Vorlagen zuerst inspect_sql_snippets aufrufen, den echten GoNavi Zustand lesen und nicht aus Erinnerung oder UI-Vermutungen antworten.", + "ai_chat.tools.mcp_fallback_description": "MCP-Tool {{toolName}} von {{serverName}}", + "ai_chat.welcome.description.default": "Ich bin Ihr Datenbankassistent. Ich kann SQL-Abfragen erzeugen, Schemas analysieren, Ausführungslogik erklären und die Datenbankleistung optimieren.", + "ai_chat.welcome.description.with_context": "{{count}} Tabellenstrukturen sind verknüpft. Nutzen Sie die Schnellaktionen unten, um mit der Analyse zu beginnen.", + "ai_chat.welcome.suggestion.channel_distribution.default": "Bestellkanalverteilung der letzten 7 Tage", + "ai_chat.welcome.suggestion.channel_distribution.with_context": "Verteilung der wichtigsten Kanäle in den letzten 7 Tagen", + "ai_chat.welcome.suggestion.cleanup.default": "Schreibe SQL zum Bereinigen auffälliger Daten", + "ai_chat.welcome.suggestion.cleanup.with_context": "Schreibe SQL zum Deaktivieren auffälliger Kanäle", + "ai_chat.welcome.suggestion.divider": "Oder direkt fragen", + "ai_chat.welcome.suggestion.low_rows.default": "Warum enthält das aktuelle Ergebnis nur wenige Zeilen?", + "ai_chat.welcome.suggestion.low_rows.with_context": "Warum hat {{table}} nur wenige Zeilen?", + "ai_chat.welcome.title": "Hallo, ich bin GoNavi AI", "ai_service.backend.builtin_prompt.body.data_analyze": "Du bist der GoNavi AI Assistant, ein erfahrener Datenanalyseexperte mit scharfem Geschäftssinn. Prüfe die Datenstichprobe aus der Abfrage des Nutzers und extrahiere die darin verborgenen wertvollen Informationen.\n\nZiele der Analyse:\n1. Harte Statistik: Fasse die Gesamtzahl der Zeilen und zentrale numerische Kennzahlen zusammen, etwa Extremwerte, Durchschnittswerte und aggregierte Mediane.\n2. Trends und Anomalien: Wenn die Daten Zeitstempel enthalten, erkenne steigende oder fallende Trends; wenn Ausreißer vorhanden sind, markiere sie klar.\n3. Geschäftlichen Wert herausarbeiten: Gib die Daten nicht nur wieder. Kombiniere sichtbare Muster mit AI-Urteilskraft und nenne eine konstruktive Handlungsempfehlung für Entscheider oder Entwickler.\n4. Darstellungsformat: Strukturiere die Analyse als knappen Mini-Report mit Titel und verdichteten Stichpunkten und vermeide flache, mechanische Nacherzählung.", "ai_service.backend.builtin_prompt.body.general_chat": "Du bist der GoNavi AI-Assistent, ein spezialisiertes Expertensystem, das tief in den GoNavi-Datenbank- und Cache-Client integriert ist.\nDein Ziel ist es, für Entwickler, DBAs und Data Scientists das nützlichste zweite Gehirn zu sein und professionelle, präzise sowie zukunftsorientierte Lösungen für datenbezogene Aufgaben zu liefern.\n\nKernrolle und Interaktionston:\n- Fachlich fundiert: Beurteile Datenbankprodukte wie MySQL, PostgreSQL, DuckDB und Redis solide, einschließlich Ausführungsplänen, Indizierung und Speicherverhalten.\n- Direkt und praktisch: Vermeide leeres Gerede. Wenn die Absicht des Benutzers klar ist, beginne mit elegantem Code oder Schritten, die direkt nutzbar sind.\n- Strukturiert und gut lesbar: Nutze Markdown-Überschriften, Hervorhebungen und Codeblöcke mit korrekter Sprachkennung wie sql, json oder bash.\n- Produktionssicherheit zuerst: Wenn eine SQL-Anweisung ernsthafte Risiken erzeugen kann, etwa DELETE oder UPDATE ohne WHERE-Klausel oder eine Abfrage, die eine große Produktionstabelle sperren könnte, gib vor dem Fortfahren eine klare Warnung aus.\n\nFähigkeitskarte:\n1. Natürliche Sprache zu Datenoperationen: Übersetze menschliche Absichten in präzise Abfragen oder Befehle.\n2. Ausführungslogik erklären: Erläutere die Logik und Performance-Auswirkungen hinter Abfragen.\n3. Expertenoptimierung: Erkenne Engpässe und schlage Index-, Rewrite- oder Ausführungsstrategien vor.\n4. Daten-Insights: Extrahiere sinnvolle Muster aus Ergebnismengen, statt Zeilen nur nachzuerzählen.\n5. Architekturreview: Bewerte Grenzen des Schemas und schlage Entwicklungspfade vor, die Datenwachstum aushalten.\n\nInteraktionsregeln:\n- Verwende professionelle, kooperative Sprache und passe dich an die vom Benutzer gewählte Oberflächensprache an.\n- Wenn Datenbankcode angefordert wird, verbinde die Antwort mit den Best Practices der jeweiligen Engine. Ist die genaue Version unbekannt, nutze einen standardorientierten Ausgangspunkt und weise auf wichtige Versionsunterschiede hin, zum Beispiel MySQL 8 Window Functions.\n- Lehne nicht vorschnell ab: Wenn der Benutzer SQL verlangt, aber keine detaillierte DDL angehängt ist, nutze den Gesprächskontext und reine Tabellennamenlisten, um die wahrscheinliche Zieltabelle abzuleiten. Ist das nicht möglich, erkläre die bekannten Informationen und frage, welche Tabelle abgefragt werden soll.", "ai_service.backend.builtin_prompt.body.schema_insight": "Du bist der GoNavi AI Assistant, ein leitender Datenbankarchitekt für den gesamten Datenbank-Lebenszyklus. In diesem Modus prüfst du die vom Nutzer bereitgestellten Tabellenstrukturen streng nach Normalisierung, Wartbarkeit und Zukunftsfähigkeit.\n\nPrüfperspektiven:\n1. Normalisierungsabwägung: Erkenne offensichtliche denormalisierte Entwürfe und beurteile, ob die Redundanz sinnvoll der Performance dient oder schlicht ein Strukturfehler ist.\n2. Indexrobustheit: Bewerte Primärschlüsselentscheidungen wie Auto-Increment gegenüber UUID, redundante Indizes, die Schreibvorgänge verlangsamen, und fehlende häufig genutzte zusammengesetzte Indizes.\n3. Physische Kapazitätsvorausschau: Prüfe Datentypen wie übergroße VARCHAR-Felder oder unnötige BIGINT-Spalten, die Speicher verschwenden können.\n4. Code-nahe Anleitung: Wenn strukturelle Defekte vorliegen, benenne nicht nur das Problem. Gib bei Bedarf konkrete ALTER TABLE-Verbesserungsskripte an.", @@ -6159,6 +1553,15 @@ "ai_service.backend.database_context.unique_index": " (eindeutig)", "ai_service.backend.database_context.value_no": "Nein", "ai_service.backend.database_context.value_yes": "Ja", + "ai_service.backend.error.active_provider_not_found": "Aktiver AI Provider wurde nicht gefunden", + "ai_service.backend.error.config_dir_create_failed": "Konfigurationsverzeichnis konnte nicht erstellt werden: {{detail}}", + "ai_service.backend.error.config_load_failed": "AI-Konfiguration konnte nicht geladen werden: {{detail}}", + "ai_service.backend.error.config_read_failed": "AI-Konfiguration konnte nicht gelesen werden: {{detail}}", + "ai_service.backend.error.config_rewrite_failed": "AI-Konfiguration konnte nicht neu geschrieben werden: {{detail}}", + "ai_service.backend.error.config_serialize_failed": "AI-Konfiguration konnte nicht serialisiert werden: {{detail}}", + "ai_service.backend.error.config_write_failed": "AI-Konfiguration konnte nicht geschrieben werden: {{detail}}", + "ai_service.backend.error.daily_secret_store_unavailable": "Daily secret store ist nicht verfügbar: {{detail}}", + "ai_service.backend.error.editable_provider_not_found": "Zu bearbeitender AI Provider wurde nicht gefunden: {{detail}}", "ai_service.backend.error.mcp_command_required": "MCP-Befehl darf nicht leer sein", "ai_service.backend.error.mcp_http_executable_resolve_failed": "Die aktuelle GoNavi-Programmdatei konnte nicht ermittelt werden: {{detail}}", "ai_service.backend.error.mcp_http_health_status_failed": "healthz gab HTTP {{statusCode}} zurück", @@ -6172,16 +1575,86 @@ "ai_service.backend.error.mcp_tool_alias_invalid": "Ungültiger MCP-Tool-Alias: {{alias}}", "ai_service.backend.error.mcp_tool_arguments_parse_failed": "MCP-Tool-Argumente konnten nicht geparst werden: {{detail}}", "ai_service.backend.error.mcp_transport_unsupported": "Nicht unterstützter MCP-Transport: {{transport}}", + "ai_service.backend.error.models_http_status_failed": "Modelllisten-Endpunkt hat einen unerwarteten Status zurückgegeben (HTTP {{status}}){{body}}", + "ai_service.backend.error.models_parse_failed": "Modellliste konnte nicht geparst werden: {{detail}}", + "ai_service.backend.error.models_request_create_failed": "Modelllisten-Anfrage konnte nicht erstellt werden: {{detail}}", + "ai_service.backend.error.models_request_failed": "Modellliste konnte nicht angefordert werden: {{detail}}", + "ai_service.backend.error.provider_auth_failed": "API Key ist ungültig oder die Anfrage wurde abgelehnt (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_server_error": "Upstream-Server hat einen internen Fehler zurückgegeben (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_status_failed": "Endpunkt hat einen unerwarteten Status zurückgegeben (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_not_configured": "AI Provider ist nicht konfiguriert. Konfigurieren Sie zuerst einen in den Einstellungen.", + "ai_service.backend.error.provider_request_create_failed": "Anfrage konnte nicht erstellt werden: {{detail}}", + "ai_service.backend.error.provider_request_serialize_failed": "Anfrage konnte nicht serialisiert werden: {{detail}}", + "ai_service.backend.error.provider_secret_bundle_parse_failed": "Provider secret bundle konnte nicht geparst werden: {{detail}}", + "ai_service.backend.error.provider_secret_delete_failed": "Provider secret konnte nicht gelöscht werden: {{detail}}", + "ai_service.backend.error.provider_secret_load_failed": "AI Provider secret konnte nicht geladen werden (provider={{provider}}): {{detail}}", + "ai_service.backend.error.provider_secret_read_failed": "Provider secret konnte nicht gelesen werden: {{detail}}", + "ai_service.backend.error.provider_secret_save_failed": "Provider secret konnte nicht gespeichert werden: {{detail}}", + "ai_service.backend.error.provider_secret_saved_read_failed": "Gespeicherter Provider secret konnte nicht gelesen werden: {{detail}}", + "ai_service.backend.error.provider_test_failed": "Verbindungstest fehlgeschlagen: {{detail}}", + "ai_service.backend.error.secret_store_unavailable": "Secret store ist nicht verfügbar: {{detail}}", + "ai_service.backend.error.session_corrupt": "Sitzungsdaten sind beschädigt", + "ai_service.backend.error.session_delete_failed": "Sitzung konnte nicht gelöscht werden: {{detail}}", + "ai_service.backend.error.session_missing": "Sitzung existiert nicht", + "ai_service.backend.error.session_serialize_failed": "Sitzungsdaten konnten nicht serialisiert werden: {{detail}}", + "ai_service.backend.error.session_write_failed": "Sitzung konnte nicht gespeichert werden: {{detail}}", + "ai_service.backend.error.sessions_dir_create_failed": "sessions-Verzeichnis konnte nicht erstellt werden: {{detail}}", + "ai_service.backend.error.volcengine_coding_models_empty": "Der aktuelle Endpunkt hat keine verfügbaren Volcengine Coding Plan-Modelle zurückgegeben. Prüfen Sie die Kontoberechtigungen oder wechseln Sie zum Provider \"Volcengine Ark\"", "ai_service.backend.message.mcp_test_success": "MCP-Dienstverbindung erfolgreich; {{count}} Tools gefunden", + "ai_service.backend.message.provider_test_success": "Endpunkt-Verbindungstest erfolgreich", "ai_service.backend.message.skill_unnamed": "Unbenanntes Skill", "ai_service.backend.provider.image_fallback_prompt": "Bitte beschreibe und analysiere dieses Bild.", "ai_service.backend.provider.image_omitted_notice": "[Bild ausgelassen: Das aktuelle Modell oder die Upstream-API unterstützt keine Bildeingaben. Wechsle zu einem vision-fähigen Modell und sende das Bild erneut.]", + "ai_service.backend.warning.sql_delete_without_where": "Hochriskantes SQL: DELETE ohne WHERE löscht alle Zeilen", + "ai_service.backend.warning.sql_drop": "Hochriskantes SQL: DROP löscht Datenbankobjekte dauerhaft", + "ai_service.backend.warning.sql_truncate": "Hochriskantes SQL: TRUNCATE entfernt alle Zeilen aus der Tabelle", + "ai_service.backend.warning.sql_update_without_where": "Hochriskantes SQL: UPDATE ohne WHERE aktualisiert alle Zeilen", + "ai_settings.action.back": "Zurück", + "ai_settings.action.connection_ok": "Verbindung OK", + "ai_settings.action.retest": "Erneut testen", + "ai_settings.action.save": "Speichern", + "ai_settings.action.test": "Verbindung testen", + "ai_settings.clipboard.error.unsupported": "Kopieren in die Zwischenablage wird in dieser Umgebung nicht unterstützt", + "ai_settings.context.description": "Steuert, wie viel Datenbankkontext an AI gesendet wird", + "ai_settings.context.schema_only.desc": "Nur Tabellen- und Spaltenstruktur wird an AI gesendet", + "ai_settings.context.schema_only.label": "Nur Schema", + "ai_settings.context.with_results.desc": "Sendet aktuelle Abfrageergebnisse als Kontext", + "ai_settings.context.with_results.label": "Mit Abfrageergebnissen", + "ai_settings.context.with_samples.desc": "Enthält wenige Beispieldaten, damit AI Datenmuster besser versteht", + "ai_settings.context.with_samples.label": "Mit Beispieldaten", + "ai_settings.form.api_endpoint": "API Endpoint (URL)", + "ai_settings.form.api_endpoint_required": "Bitte eine gültige Endpunkt-URL eingeben", "ai_settings.form.api_endpoint_placeholder.codebuddy": "Leer lassen, um das Standard-Gateway der CodeBuddy CLI zu verwenden", + "ai_settings.form.api_format": "API-Format", + "ai_settings.form.api_key": "API Key", "ai_settings.form.api_key.codebuddy_optional": "API Key / Auth Token (optional)", "ai_settings.form.api_key.codebuddy_hint": "Leer lassen, um das auf diesem Rechner angemeldete CodeBuddy-CLI-Konto zu verwenden; bei Eingabe wird die aktuelle Anmeldeinformation bevorzugt.", + "ai_settings.form.api_key_keep_placeholder": "Leer lassen, um das gespeicherte Secret weiterzuverwenden", + "ai_settings.form.api_key_placeholder": "sk-... / Ihr API Key", "ai_settings.form.api_key_placeholder.codebuddy": "Leer lassen, um die lokale Anmeldung zu verwenden, oder API Key / Token zum Überschreiben eingeben", + "ai_settings.form.api_key_required": "Bitte API Key eingeben", + "ai_settings.form.api_key_saved_hint": "Ein API Key ist bereits gespeichert. Leer lassen, um ihn weiterzuverwenden, oder einen neuen Wert zum Ersetzen eingeben.", + "ai_settings.form.clear_saved_api_key": "Gespeicherten API Key löschen", + "ai_settings.form.model_list": "Verfügbare Modellliste (optional)", + "ai_settings.form.model_list_placeholder": "Modell-IDs konfigurieren; leer lassen, um sie vom Server abzurufen", "ai_settings.form.model_list_placeholder.codebuddy": "Optional: Häufige Modelle vorab eintragen; leer lassen, damit CodeBuddy CLI oder der Dienst automatisch wählt", "ai_settings.form.model_list_placeholder.cursor": "Optional: Häufige Cursor-Modell-IDs vorab eintragen; leer lassen, damit automatisch das Standardmodell von Cursor gewählt wird", + "ai_settings.form.provider_name": "Anbietername", + "ai_settings.form.provider_name_placeholder": "Beispiel: eigener OpenAI-kompatibler Endpunkt / privates Modell", + "ai_settings.form.provider_name_required": "Bitte einen Namen eingeben", + "ai_settings.form.section.auth_connection": "Authentifizierung und Verbindung", + "ai_settings.form.section.basic": "Basisinformationen", + "ai_settings.form.section.service_type": "Diensttyp", + "ai_settings.mcp_http.error.control_unsupported_runtime": "Die aktuelle Laufzeit unterstützt keine Steuerung des MCP HTTP-Dienstes", + "ai_settings.mcp_http.error.start_unsupported_version": "Diese Version unterstützt das Starten des MCP HTTP-Dienstes nicht", + "ai_settings.mcp_http.error.stop_unsupported_version": "Diese Version unterstützt das Stoppen des MCP HTTP-Dienstes nicht", + "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header kopiert", + "ai_settings.mcp_http.message.authorization_header_required": "Starten Sie zuerst den MCP HTTP-Dienst, um den Authorization Header zu erzeugen", + "ai_settings.mcp_http.message.started": "GoNavi MCP HTTP-Dienst gestartet", + "ai_settings.mcp_http.message.stopped": "GoNavi MCP HTTP-Dienst gestoppt", + "ai_settings.mcp_http.message.toggle_failed": "GoNavi MCP HTTP-Dienst konnte nicht umgeschaltet werden", + "ai_settings.mcp_http.message.url_copied": "MCP HTTP-URL kopiert", + "ai_settings.mcp_http.message.url_unavailable": "Keine MCP HTTP-URL zum Kopieren verfügbar", "ai_settings.mcp_http.panel.addr_label": "Lauschadresse / Port", "ai_settings.mcp_http.panel.authorization_placeholder": "Bearer gnv_xxx (leer lassen für automatische Generierung)", "ai_settings.mcp_http.panel.copy_authorization": "Authorization kopieren", @@ -6194,6 +1667,7 @@ "ai_settings.mcp_http.panel.switch.off": "Aus", "ai_settings.mcp_http.panel.switch.on": "Ein", "ai_settings.mcp_http.panel.title": "GoNavi MCP HTTP-Dienst", + "ai_settings.mcp_http.status.not_running": "GoNavi MCP HTTP-Dienst läuft nicht", "ai_settings.mcp_server.argument_hints.action_separator": "; ", "ai_settings.mcp_server.argument_hints.argument_details": "Argumente einzeln erklärt", "ai_settings.mcp_server.argument_hints.business_arguments": "Erkannte fachliche Argumente", @@ -6628,6 +2102,13 @@ "ai_settings.mcp_server.help.field_state.fixed": "Fest", "ai_settings.mcp_server.help.field_state.optional": "Optional", "ai_settings.mcp_server.help.field_state.required": "Erforderlich", + "ai_settings.mcp_server.message.delete_failed": "MCP-Dienst konnte nicht gelöscht werden", + "ai_settings.mcp_server.message.deleted": "MCP-Dienst gelöscht", + "ai_settings.mcp_server.message.save_failed": "MCP-Dienst konnte nicht gespeichert werden", + "ai_settings.mcp_server.message.saved": "MCP-Dienst gespeichert", + "ai_settings.mcp_server.message.test_failed": "MCP-Diensttest fehlgeschlagen", + "ai_settings.mcp_server.message.test_request_failed": "MCP-Dienst konnte nicht getestet werden", + "ai_settings.mcp_server.message.test_success": "MCP-Dienstverbindung erfolgreich", "ai_settings.mcp_server.quick_add.action.parse_and_add": "Analysieren und Entwurf hinzufügen", "ai_settings.mcp_server.quick_add.description": "Wählen Sie die passendste Vorlage oder fügen Sie den vollständigen Startbefehl aus dem README ein. GoNavi teilt ihn in command, args und env auf und erstellt einen bearbeitbaren MCP-Entwurf.", "ai_settings.mcp_server.quick_add.templates_description": "Wenn Sie nicht sicher sind, wie command und args aufzuteilen sind, klicken Sie auf eine Vorlage. Jede Karte zeigt den Befehl, den GoNavi tatsächlich startet.", @@ -6752,12 +2233,40 @@ "ai_settings.mcp_server.validation.summary.ready": "Die aktuelle Konfiguration kann getestet und gespeichert werden.", "ai_settings.mcp_server.validation.summary.warnings": "{{count}} Prüfpunkt gefunden. Testen und Speichern sind weiterhin möglich.", "ai_settings.mcp_server.validation.title": "Konfigurationsprüfung", + "ai_settings.message.delete_failed": "Löschen fehlgeschlagen", + "ai_settings.message.delete_failed_detail": "Löschen fehlgeschlagen: {{detail}}", + "ai_settings.message.deleted": "Gelöscht", + "ai_settings.message.deleted_and_switched": "Gelöscht und automatisch zu „{{name}}“ gewechselt", + "ai_settings.message.load_provider_failed": "Anbieterkonfiguration konnte nicht gelesen werden", + "ai_settings.message.save_failed": "Speichern fehlgeschlagen", + "ai_settings.message.save_failed_detail": "Speichern fehlgeschlagen: {{detail}}", + "ai_settings.message.saved": "Gespeichert", + "ai_settings.message.switch_failed": "Wechsel fehlgeschlagen", + "ai_settings.message.switch_failed_detail": "Wechsel fehlgeschlagen: {{detail}}", + "ai_settings.message.switched": "Gewechselt", + "ai_settings.message.test_failed": "Test fehlgeschlagen", + "ai_settings.message.test_failed_detail": "Test fehlgeschlagen: {{detail}}", + "ai_settings.message.test_requires_new_api_key": "Geben Sie vor dem Verbindungstest einen neuen API Key ein oder brechen Sie das Löschen des gespeicherten Secrets ab", + "ai_settings.message.test_success": "Verbindung erfolgreich", + "ai_settings.message.unknown_error": "Unbekannter Fehler", + "ai_settings.nav.context.description": "Datenbankschema-Kontext konfigurieren", + "ai_settings.nav.context.title": "Kontext", "ai_settings.nav.mcp.description": "GoNavi mit externen Clients verbinden und Tool-Quellen verwalten", "ai_settings.nav.mcp.title": "MCP-Dienste", + "ai_settings.nav.prompts.description": "Vordefinierte Systemanforderungen anzeigen", + "ai_settings.nav.prompts.title": "Integrierte Prompts", + "ai_settings.nav.providers.description": "Modellendpunkte und Secrets konfigurieren", + "ai_settings.nav.providers.title": "Modellanbieter", + "ai_settings.nav.safety.description": "Risikostufe von AI-Operationen begrenzen", + "ai_settings.nav.safety.title": "Sicherheitssteuerung", "ai_settings.nav.skills.description": "Wiederverwendbare Prompt-Module konfigurieren", "ai_settings.nav.skills.title": "Skills", + "ai_settings.nav.title": "Einstellungsnavigation", + "ai_settings.nav.tools.description": "Von AI nutzbare Datenproben anzeigen", + "ai_settings.nav.tools.title": "Integrierte Tools", "ai_settings.prompts.action.save": "Benutzerdefinierte Prompts speichern", "ai_settings.prompts.builtin.description": "Dies sind die schreibgeschützten Low-Level-AI-Prompts der aktuellen GoNavi-Version. Sie werden im passenden Anfragekontext vor den obigen Prompts auf Benutzerebene eingefügt.", + "ai_settings.prompts.description": "Dies sind die schreibgeschützten Systemprompts der aktuellen GoNavi-Version. Sie werden je nach Szenario dynamisch in den Anfragekontext eingefügt.", "ai_settings.prompts.field.database.description": "Gilt nur für Datenbank- und SQL-Szenarien, zum Beispiel \"Feldnamen vor dem Erzeugen von SQL bestätigen\".", "ai_settings.prompts.field.database.title": "Zusatzprompt für Datenbanksitzungen", "ai_settings.prompts.field.global.description": "Gilt für alle AI-Sitzungen, zum Beispiel \"zuerst das Fazit nennen\" oder \"Antworten knapp halten\".", @@ -6766,16 +2275,65 @@ "ai_settings.prompts.field.jvm_diagnostic.title": "Zusatzprompt für JVM-Diagnose", "ai_settings.prompts.field.jvm.description": "Gilt nur für JVM-Ressourcen-Browsing und Analyse.", "ai_settings.prompts.field.jvm.title": "Zusatzprompt für JVM-Ressourcenanalyse", + "ai_settings.prompts.message.save_failed": "Benutzerdefinierte Prompts konnten nicht gespeichert werden", + "ai_settings.prompts.message.saved": "Benutzerdefinierte Prompts gespeichert", "ai_settings.prompts.placeholder.empty": "Leer lassen, um nichts Zusätzliches anzuhängen", "ai_settings.prompts.user.description": "Dieser Inhalt wird nach den eingebauten Systemprompts als system message angehängt. Nutzen Sie ihn für persönlichen Antwortstil, Ausgabevorgaben oder Teamregeln. Bei Sicherheitsgrenzen haben Systemregeln weiterhin Vorrang.", "ai_settings.prompts.user.title": "Benutzerdefinierte Prompts auf Benutzerebene", + "ai_settings.provider_preset.anthropic.desc": "Claude Opus/Sonnet Modelle", + "ai_settings.provider_preset.anthropic.label": "Claude", + "ai_settings.provider_preset.custom.desc": "Benutzerdefinierter API-Endpunkt", + "ai_settings.provider_preset.custom.label": "Benutzerdefiniert", + "ai_settings.provider_preset.deepseek.desc": "DeepSeek-V4 / R1 Modelle", + "ai_settings.provider_preset.deepseek.label": "DeepSeek", + "ai_settings.provider_preset.gemini.desc": "Gemini 3.1 / 2.5-Reihe", + "ai_settings.provider_preset.gemini.label": "Gemini", + "ai_settings.provider_preset.minimax.desc": "M3 / M2.7-Reihe (Anthropic-kompatibel)", + "ai_settings.provider_preset.minimax.label": "MiniMax", + "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5 (Anthropic-kompatibel)", + "ai_settings.provider_preset.moonshot.label": "Kimi", + "ai_settings.provider_preset.ollama.desc": "Lokal bereitgestellte Open-Source-Modelle", + "ai_settings.provider_preset.ollama.label": "Ollama", + "ai_settings.provider_preset.openai.desc": "GPT-5.4 / 5.3-Reihe", + "ai_settings.provider_preset.openai.label": "OpenAI", + "ai_settings.provider_preset.qwen_bailian.desc": "Bailian Anthropic-kompatibler Endpunkt / entfernte Modellliste", + "ai_settings.provider_preset.qwen_bailian.label": "Qwen (Bailian Allgemein)", + "ai_settings.provider_preset.qwen_coding_plan.desc": "Claude Code CLI Proxy-Kette / offiziell unterstützte Modellliste", + "ai_settings.provider_preset.qwen_coding_plan.label": "Qwen (Coding Plan)", + "ai_settings.provider_preset.volcengine_ark.desc": "Ark allgemeine Inferenz / Doubao-Modelle", + "ai_settings.provider_preset.volcengine_ark.label": "Volcengine Ark", + "ai_settings.provider_preset.volcengine_coding.desc": "Ark Code / Coding Plan Ausführung", + "ai_settings.provider_preset.volcengine_coding.label": "Volcengine Coding Plan", + "ai_settings.provider_preset.zhipu.desc": "GLM-5 / GLM-5-Turbo Modelle", + "ai_settings.provider_preset.zhipu.label": "Zhipu GLM", + "ai_settings.provider.action.add": "Modellanbieter hinzufügen", + "ai_settings.provider.action.delete": "Löschen", + "ai_settings.provider.action.edit": "Bearbeiten", + "ai_settings.provider.confirm_delete": "Diesen Anbieter löschen?", + "ai_settings.provider.editor.add_title": "Modellanbieter hinzufügen", + "ai_settings.provider.editor.edit_title": "Modellanbieter bearbeiten", + "ai_settings.provider.empty.description": "Fügen Sie einen Anbieter hinzu, um den AI-Assistenten zu verwenden", + "ai_settings.provider.empty.title": "Noch kein Modellanbieter konfiguriert", + "ai_settings.provider.next_provider": "nächster Anbieter", + "ai_settings.provider.no_model": "Kein Modell ausgewählt", "ai_settings.provider.auto_model": "Automatisch ausgewählt", + "ai_settings.safety.description": "Steuert, welche SQL-Operationstypen AI ausführen darf, um Daten zu schützen", + "ai_settings.safety.full.desc": "AI darf alle Operationen ausführen, einschließlich DDL. Bei Hochrisiko-Operationen werden Warnungen automatisch angezeigt.", + "ai_settings.safety.full.label": "Vollmodus", + "ai_settings.safety.readonly.desc": "AI darf nur SELECT und ähnliche Abfragen ausführen. Dies ist der sicherste Modus.", + "ai_settings.safety.readonly.label": "Nur-Lesen-Modus", + "ai_settings.safety.readwrite.desc": "AI darf INSERT/UPDATE/DELETE ausführen. Riskante Operationen erfordern eine Bestätigung.", + "ai_settings.safety.readwrite.label": "Lese-/Schreibmodus", "ai_settings.skill.action.add": "Skill hinzufügen", "ai_settings.skill.confirm_delete": "Diesen Skill löschen?", "ai_settings.skill.description": "Ein Skill ist kein weiterer großer Prompt. Er besteht aus einem benannten Prompt-Modul + scope + Tool-Abhängigkeiten. Behalte ihn in dieser Phase im Hauptrepository. Ein separates GitHub-Repository ist erst nötig, wenn später ein gemeinsames skill pack verteilt werden soll.", "ai_settings.skill.description_placeholder": "Private Notiz, zum Beispiel: Feldnamen und Risiken vor der SQL-Ausgabe bestätigen", "ai_settings.skill.empty": "Noch keine Skills. Du kannst dedizierte system prompts für Datenbank-, JVM- und Diagnoseszenarien definieren.", "ai_settings.skill.hint": "Wenn aktiviert, wird er nach scope in die passende Sitzung injiziert. Fehlt ein erforderliches Tool, wird dieser Skill automatisch übersprungen.", + "ai_settings.skill.message.delete_failed": "Skill konnte nicht gelöscht werden", + "ai_settings.skill.message.deleted": "Skill gelöscht", + "ai_settings.skill.message.save_failed": "Skill konnte nicht gespeichert werden", + "ai_settings.skill.message.saved": "Skill gespeichert", "ai_settings.skill.name_placeholder": "Skill-Name, zum Beispiel: SQL-Review / JVM-Diagnoseplan", "ai_settings.skill.required_tools_placeholder": "Optional: Tools deklarieren, von denen dieser Skill abhängt", "ai_settings.skill.scope.database.desc": "Nur für SQL- / Datenbankszenarien aktiviert", @@ -6790,6 +2348,37 @@ "ai_settings.skill.status.disabled": "Deaktiviert", "ai_settings.skill.status.enabled": "Aktiviert", "ai_settings.skill.system_prompt_placeholder": "Gib den system prompt ein, den dieser Skill anhängen soll. Fokussiere eine klare Fähigkeit und vermeide Duplikate globaler Prompts.", + "ai_settings.subtitle": "AI-Modelle, Sicherheitsstufe und Kontextoptionen konfigurieren", + "ai_settings.title": "AI-Einstellungen", + "ai_settings.tools.builtin_tool_label": "Integriertes Tool", + "ai_settings.tools.description": "Bei Datenbankfragen kann der AI-Assistent diese integrierten Tools automatisch aufrufen, um echte Daten ohne manuelle Eingriffe abzurufen.", + "ai_settings.tools.empty.no_matches": "Keine passenden integrierten Tools. Versuchen Sie allgemeinere Stichwörter wie mcp, logs, connection, transaction, shortcuts oder schema.", + "ai_settings.tools.execute_sql.desc": "SQL-Abfrage ausführen und Ergebnisse zurückgeben", + "ai_settings.tools.execute_sql.detail": "Übergibt connectionId, dbName und sql, führt SQL auf der Zieldatenbank aus und gibt bis zu 50 Ergebniszeilen zurück. Die Sicherheitsstufe gilt; im Nur-Lesen-Modus sind nur SELECT/SHOW/DESCRIBE erlaubt.", + "ai_settings.tools.get_columns.desc": "Spaltenstruktur einer Tabelle abrufen", + "ai_settings.tools.get_columns.detail": "Übergibt connectionId, dbName und tableName und gibt Name, Typ, NULL-Zulässigkeit, Standardwert und Kommentar jeder Spalte zurück. AI muss dieses Tool vor der SQL-Erzeugung aufrufen, um echte Spaltennamen zu bestätigen.", + "ai_settings.tools.get_connections.desc": "Alle verfügbaren Datenbankverbindungen abrufen", + "ai_settings.tools.get_connections.detail": "Gibt Verbindungs-ID, Name, Typ (MySQL/PostgreSQL usw.) und Host-Adresse zurück. AI entscheidet anhand dieser Informationen, welche Verbindung zuerst untersucht wird.", + "ai_settings.tools.get_databases.desc": "Alle Datenbanken unter einer Verbindung abrufen", + "ai_settings.tools.get_databases.detail": "Übergibt connectionId und gibt die Datenbank- oder Schema-Namen unter dieser Verbindung zurück.", + "ai_settings.tools.get_table_ddl.desc": "DDL einer Tabelle abrufen", + "ai_settings.tools.get_table_ddl.detail": "Übergibt connectionId, dbName und tableName und gibt die vollständige CREATE TABLE-Anweisung einschließlich Spaltendefinitionen, Indizes, Constraints und Metadaten zurück.", + "ai_settings.tools.get_tables.desc": "Alle Tabellennamen unter einer Datenbank abrufen", + "ai_settings.tools.get_tables.detail": "Übergibt connectionId und dbName und gibt Tabellennamen zurück. AI nutzt dies, um die vom Benutzer erwähnte Zieltabelle zu finden.", + "ai_settings.tools.parameters.default_value": "Standard: {{value}}", + "ai_settings.tools.parameters.enum_values": "Zulässige Werte: {{values}}", + "ai_settings.tools.parameters.example": "Beispiel:", + "ai_settings.tools.parameters.hint_title": "Parameterhinweise", + "ai_settings.tools.parameters.optional": "Optional", + "ai_settings.tools.parameters.required": "Pflichtfeld", + "ai_settings.tools.parameters.type_label": "Typ: {{type}}", + "ai_settings.tools.params_label": "Parameter:", + "ai_settings.tools.params.none": "Keine Parameter", + "ai_settings.tools.search.aria_label": "Integrierte Tools suchen", + "ai_settings.tools.search.clear": "Löschen", + "ai_settings.tools.search.placeholder": "Tools, Abläufe oder Parameter suchen, z. B. mcp / lineLimit / allowMutating / transaction", + "ai_settings.tools.summary": "{{flowVisible}}/{{flowTotal}} empfohlene Abläufe und {{toolVisible}}/{{toolTotal}} integrierte Tools werden angezeigt.", + "ai_settings.tools.workflow": "💡 Ablauf: get_connections → get_databases → get_tables → get_columns → SQL erzeugen", "ai.service.mcp_client.claude_code.config_dir_create_failed": "Claude Code-Konfigurationsverzeichnis konnte nicht erstellt werden: {{detail}}", "ai.service.mcp_client.claude_code.config_format_invalid": "Das Format der Claude Code-Konfiguration ist ungültig: {{path}} muss {{expected}} sein", "ai.service.mcp_client.claude_code.config_parse_failed": "Claude Code-Konfiguration konnte nicht geparst werden: {{detail}}", @@ -6816,12 +2405,111 @@ "ai.service.mcp_client.executable_path_failed": "Die aktuelle GoNavi-Programmdatei konnte nicht gefunden werden: {{detail}}", "ai.service.mcp_client.remote.status.message": "{{label}} läuft normalerweise in der Cloud oder in einer Remote-Umgebung. Binden Sie es über eine Remote-MCP-Brücke an Windows GoNavi an; Datenbankpasswörter bleiben auf diesem GoNavi-Rechner.", "ai.service.mcp_client.user_home_dir_unavailable": "Das aktuelle Benutzer-Home-Verzeichnis konnte nicht ermittelt werden", + "app.about.action.check_updates": "Nach Updates suchen", + "app.about.action.download_progress": "Downloadfortschritt", + "app.about.action.download_update": "Update herunterladen", + "app.about.action.hide_to_background": "Im Hintergrund ausblenden", + "app.about.action.install_update": "Update installieren", + "app.about.action.mute_this_version": "Diesmal nicht erinnern", + "app.about.action.open_install_directory": "Installationsordner öffnen", + "app.about.community.ai_book": "AI全书", + "app.about.description": "Versionsinformationen, Repository-Links, Updatestatus und Downloadzugänge anzeigen.", + "app.about.download_progress.title": "Update herunterladen", + "app.about.download_progress.title_with_version": "Update {{version}} herunterladen", + "app.about.field.author": "Autor", + "app.about.field.community": "Community", + "app.about.field.update_status": "Updatestatus", + "app.about.field.version": "Version", + "app.about.message.check_failed_with_error": "Updateprüfung fehlgeschlagen: {{error}}", + "app.about.message.download_completed": "Update-Download abgeschlossen", + "app.about.message.download_completed_with_path": "Update-Download abgeschlossen. Paketpfad: {{path}}", + "app.about.message.download_failed_with_error": "Update-Download fehlgeschlagen: {{error}}", + "app.about.message.install_directory_opened_manual_replace": "Installationsordner geöffnet. Schließen Sie den Austausch manuell ab.", + "app.about.message.install_failed_with_error": "Updateinstallation fehlgeschlagen: {{error}}", + "app.about.message.load_failed": "App-Informationen konnten nicht geladen werden: {{error}}", + "app.about.message.new_version_found": "Neue Version {{version}} gefunden", + "app.about.message.open_install_directory_failed_with_error": "Installationsordner konnte nicht geöffnet werden: {{error}}", + "app.about.message.update_package_ready": "Updatepaket ist bereit ({{version}})", + "app.about.message.update_package_ready_with_path": "Updatepaket ist bereit ({{version}}), Pfad: {{path}}", + "app.about.project_links": "Projektlinks", + "app.about.title": "Über GoNavi", + "app.about.update_status.check_failed": "Updateprüfung fehlgeschlagen: {{error}}", + "app.about.update_status.checking": "Suche nach Updates...", + "app.about.update_status.latest": "Sie verwenden die neueste Version ({{version}})", + "app.about.update_status.new_version_downloaded": "Neue Version {{version}} gefunden (heruntergeladen; öffnen Sie den Downloadfortschritt zur Installation)", + "app.about.update_status.new_version_not_downloaded": "Neue Version {{version}} gefunden (nicht heruntergeladen)", + "app.about.update_status.not_checked": "Nicht geprüft", + "app.ai_panel.action.close": "Panel schließen", + "app.ai_panel.action.reload": "Neu laden", + "app.ai_panel.aria.close": "AI-Panel schließen", + "app.ai_panel.error.description": "Dies wird meist durch ungültig gewordene Lazy-Load-Ressourcen nach Hot Reloads in der Entwicklungsumgebung verursacht. Ein kompletter White-Screen wurde verhindert; Sie können es direkt erneut versuchen.", + "app.ai_panel.error.title": "AI-Panel konnte nicht geladen werden", "app.backend.error.reset_webview_zoom_failed": "Zurücksetzen des WebView2-Zooms fehlgeschlagen: {{detail}}", + "app.browser_mock.export_connection_package_unsupported": "Browser-Mock unterstützt den Export von Wiederherstellungspaketen nicht", + "app.browser_mock.export_sql_unsupported": "Browser-Mock unterstützt den Export von SQL-Dateien nicht", + "app.browser_mock.import_connection_package_unsupported": "Browser-Mock unterstützt den Import von Wiederherstellungspaketen nicht; nur historische JSON-Verbindungsarrays werden unterstützt", + "app.browser_mock.mcp_client.claude_code.installed": "Die MCP-Konfiguration auf Benutzerebene für Claude Code wurde geschrieben. Starten Sie Claude CLI neu; GoNavi erscheint dann unter User MCPs in /mcp.", + "app.browser_mock.mcp_client.claude_code.not_detected": "Keine GoNavi MCP-Konfiguration auf Benutzerebene für Claude Code erkannt", + "app.browser_mock.mcp_client.codex.installed": "Die MCP-Konfiguration auf Benutzerebene für Codex wurde geschrieben. Starten Sie Codex CLI oder die Desktop-App neu, um GoNavi zu sehen.", + "app.browser_mock.mcp_client.codex.path_mismatch": "In Codex wurde ein GoNavi MCP-Eintrag erkannt, der nicht zum aktuellen GoNavi-Installationspfad passt. Eine Aktualisierung wird empfohlen.", + "app.browser_mock.mcp_http.not_running": "Der GoNavi MCP HTTP-Dienst läuft nicht", + "app.browser_mock.mcp_http.started": "Der GoNavi MCP HTTP-Dienst wurde gestartet", + "app.browser_mock.mcp_http.stopped": "Der GoNavi MCP HTTP-Dienst wurde gestoppt", + "app.browser_mock.mcp_server.command_required": "MCP-Befehl darf nicht leer sein", + "app.browser_mock.mcp_server.test_success": "MCP-mock-Test erfolgreich", + "app.browser_mock.mcp_tool.unavailable": "Browser-Mock ist nicht mit einem echten MCP-Dienst verbunden", + "app.browser_mock.provider.test_failed_detail": "Verbindungstest fehlgeschlagen: {{detail}}", + "app.browser_mock.provider.test_success": "Endpunkt-Verbindungstest erfolgreich", + "app.connection_package.action.start_export": "Export starten", + "app.connection_package.action.start_import": "Import starten", + "app.connection_package.dialog.export_title": "Verbindungen exportieren", + "app.connection_package.dialog.file_password_placeholder": "Dateischutzpasswort eingeben (optional)", + "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "Passwörter sind verschlüsselt. Für die Übertragung über öffentliche Netzwerke sollten Sie ein Dateischutzpasswort festlegen.", + "app.connection_package.dialog.help.exclude_passwords": "Es werden nur Verbindungseinstellungen exportiert. Passwörter sind nicht enthalten.", + "app.connection_package.dialog.help.share_file_password_separately": "Teilen Sie das Passwort über einen separaten Kanal mit. Senden Sie es nicht zusammen mit der Datei.", + "app.connection_package.dialog.import_password_title": "Importpasswort eingeben", + "app.connection_package.dialog.option.include_passwords": "Verbindungspasswörter exportieren", + "app.connection_package.dialog.option.use_file_password": "Dateischutzpasswort festlegen", + "app.connection_package.dialog.restore_password_placeholder": "Passwort des Wiederherstellungspakets eingeben", + "app.connection_package.error.export_capability_unavailable": "Export fehlgeschlagen: Das aktuelle Backend stellt die neue Exportfunktion nicht bereit", + "app.connection_package.error.file_password_required": "Das Dateischutzpasswort darf nicht leer sein", + "app.connection_package.error.import_capability_unavailable": "Import fehlgeschlagen: Das aktuelle Backend stellt die neue Importfunktion nicht bereit", + "app.connection_package.error.import_no_connections": "Import fehlgeschlagen: Das Backend hat keine Verbindungsliste zurückgegeben", + "app.connection_package.error.missing_import_payload": "Import fehlgeschlagen: Der zu importierende Inhalt des Wiederherstellungspakets wurde nicht gefunden", + "app.connection_package.error.refresh_failed_no_connections": "Import erfolgreich, aber Aktualisieren der Verbindungsliste fehlgeschlagen: Das Backend hat keine Verbindungsliste zurückgegeben", + "app.connection_package.error.restore_password_required": "Das Passwort des Wiederherstellungspakets darf nicht leer sein", + "app.connection_package.message.export_failed": "Export fehlgeschlagen", + "app.connection_package.message.export_succeeded": "Export erfolgreich", + "app.connection_package.message.import_failed": "Import fehlgeschlagen", + "app.connection_package.message.import_failed_with_error": "Import fehlgeschlagen: {{error}}", + "app.connection_package.message.imported_connections": "{{count}} Verbindungen importiert", + "app.connection_package.message.imported_with_missing_passwords": "{{count}} Verbindungen importiert. Einige Verbindungen enthalten keine Passwörter. Bearbeiten Sie diese Verbindungen und geben Sie vor dem Speichern die Passwörter ein.", + "app.connection_package.message.no_connections_to_export": "Keine Verbindungen zum Exportieren", + "app.connection_package.message.unsupported_file_format": "Dateiformatfehler: Unterstützt werden nur GoNavi-Wiederherstellungspakete, historische JSON-Verbindungsarrays oder MySQL Workbench XML", + "app.connection.message.editable_load_failed": "Die Details der gespeicherten Verbindung konnten nicht geladen werden. Stattdessen wird die maskierte Konfiguration geöffnet.", + "app.connection.message.editable_load_failed_with_detail": "Die Details der gespeicherten Verbindung konnten nicht geladen werden: {{detail}}. Stattdessen wird die maskierte Konfiguration geöffnet.", + "app.data_root.action.migrate_and_switch": "Vorhandene Daten migrieren und wechseln", + "app.data_root.action.open_current": "Aktuelles Verzeichnis öffnen", + "app.data_root.action.restore_default_directory": "Standardverzeichnis wiederherstellen", + "app.data_root.action.select": "Verzeichnis auswählen", + "app.data_root.action.switch_only": "Nur zum ausgewählten Verzeichnis wechseln", + "app.data_root.apply_method": "Anwendungsmethode", + "app.data_root.backend.dialog.select_directory": "GoNavi-Datenverzeichnis auswählen", + "app.data_root.backend.error.create_bootstrap_directory_failed": "Standard-Bootstrap-Verzeichnis konnte nicht erstellt werden: {{detail}}", + "app.data_root.backend.error.create_data_directory_failed": "Datenverzeichnis konnte nicht erstellt werden: {{detail}}", + "app.data_root.backend.error.create_target_failed": "Ziel-Datenverzeichnis konnte nicht erstellt werden: {{detail}}", + "app.data_root.backend.error.directory_empty": "Datenverzeichnis darf nicht leer sein", + "app.data_root.backend.error.directory_unavailable": "Datenverzeichnis existiert nicht oder ist nicht zugänglich", + "app.data_root.backend.error.migrate_directory_failed": "Verzeichnis konnte nicht migriert werden ({{entry}}): {{detail}}", + "app.data_root.backend.error.migrate_file_failed": "Datei konnte nicht migriert werden ({{entry}}): {{detail}}", + "app.data_root.backend.error.open_directory_failed": "Datenverzeichnis konnte nicht geöffnet werden: {{detail}}", + "app.data_root.backend.error.open_directory_unsupported": "Das Öffnen von Verzeichnissen wird auf dieser Plattform nicht unterstützt: {{platform}}", "app.data_root.backend.error.parse_migrated_security_update_manifest_failed": "Migriertes Manifest der Sicherheitsupdate-Sicherung konnte nicht verarbeitet werden: {{detail}}", "app.data_root.backend.error.parse_migrated_security_update_result_failed": "Migriertes Ergebnis des Sicherheitsupdates konnte nicht verarbeitet werden: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_manifest_failed": "Migriertes Manifest der Sicherheitsupdate-Sicherung konnte nicht gelesen werden: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_result_failed": "Migriertes Ergebnis des Sicherheitsupdates konnte nicht gelesen werden: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_state_failed": "Migrierter Status des Sicherheitsupdates konnte nicht gelesen werden: {{detail}}", + "app.data_root.backend.error.read_source_failed": "Quelldaten konnten nicht gelesen werden ({{entry}}): {{detail}}", "app.data_root.backend.error.read_source_root_failed": "Quell-Datenverzeichnis konnte nicht gelesen werden: {{detail}}", "app.data_root.backend.error.resolve_source_failed": "Quell-Datenverzeichnis konnte nicht aufgelöst werden: {{detail}}", "app.data_root.backend.error.resolve_target_failed": "Ziel-Datenverzeichnis konnte nicht aufgelöst werden: {{detail}}", @@ -6829,11 +2517,539 @@ "app.data_root.backend.error.write_migrated_security_update_manifest_failed": "Migriertes Manifest der Sicherheitsupdate-Sicherung konnte nicht geschrieben werden: {{detail}}", "app.data_root.backend.error.write_migrated_security_update_result_failed": "Migriertes Ergebnis des Sicherheitsupdates konnte nicht geschrieben werden: {{detail}}", "app.data_root.backend.error.write_migrated_security_update_state_failed": "Migrierter Status des Sicherheitsupdates konnte nicht geschrieben werden: {{detail}}", + "app.data_root.backend.message.migrated_restart": "Daten wurden migriert und auf das neue Verzeichnis umgestellt. Starten Sie die App neu, um alle Module vollständig umzustellen.", + "app.data_root.backend.message.opened": "Datenverzeichnis wurde geöffnet", + "app.data_root.backend.message.unchanged": "Datenverzeichnis ist unverändert", + "app.data_root.backend.message.updated_restart": "Datenverzeichnis wurde aktualisiert. Starten Sie die App neu, damit AI und andere laufende Module vollständig auf das neue Verzeichnis wechseln.", + "app.data_root.current_directory": "Aktuelles Verzeichnis", + "app.data_root.default_directory": "Standardverzeichnis", + "app.data_root.description": "Verwaltet das Stammverzeichnis für dateibasierte Daten wie Verbindungen, Proxy, AI-Einstellungen und Treiber.", + "app.data_root.driver_directory": "Treiberverzeichnis", + "app.data_root.message.apply_failed": "Datenverzeichnis konnte nicht angewendet werden", + "app.data_root.message.apply_failed_with_error": "Datenverzeichnis konnte nicht angewendet werden: {{error}}", + "app.data_root.message.load_failed": "Datenverzeichnisinformationen konnten nicht geladen werden", + "app.data_root.message.load_failed_with_error": "Datenverzeichnisinformationen konnten nicht geladen werden: {{error}}", + "app.data_root.message.open_failed": "Datenverzeichnis konnte nicht geöffnet werden", + "app.data_root.message.open_failed_with_error": "Datenverzeichnis konnte nicht geöffnet werden: {{error}}", + "app.data_root.message.select_failed": "Datenverzeichnis konnte nicht ausgewählt werden", + "app.data_root.message.select_failed_with_error": "Datenverzeichnis konnte nicht ausgewählt werden: {{error}}", + "app.data_root.message.select_valid_first": "Wählen Sie zuerst ein gültiges Datenverzeichnis aus", + "app.data_root.message.updated": "Datenverzeichnis wurde aktualisiert", + "app.data_root.placeholder.select_new_directory": "Neues Datenverzeichnis auswählen", + "app.data_root.restart_hint": "Nach dem Wechsel wird ein Neustart der App empfohlen, damit AI und andere langlebige Module vollständig in das neue Verzeichnis wechseln. Sensible Passwörter bleiben im secret store des Systems und werden nicht mit Dateiverzeichnissen migriert.", + "app.data_root.switch_target": "Wechselziel", + "app.data_root.title": "Datenspeicherort", + "app.linux_cjk_font_banner.action.open_font_settings": "Schrifteinstellungen", + "app.linux_cjk_font_banner.description": "Chinesischer Text kann als Kästchen für fehlende Glyphen erscheinen. Installieren Sie die Schriften und starten Sie GoNavi danach neu: ", + "app.linux_cjk_font_banner.title": "Linux-CJK-Schriften fehlen", + "app.proxy.description": "Konfiguriert Updateprüfungen, Treiberverwaltung und den Netzwerkzugang für Verbindungen ohne separaten Proxy.", + "app.proxy.enable": "Globalen Proxy aktivieren", + "app.proxy.host": "Proxy-Host", + "app.proxy.host_placeholder": "Beispiel: 127.0.0.1", "app.proxy.message.config_applied": "Die globale Proxy-Konfiguration wurde angewendet", + "app.proxy.message.invalid_enabled": "Der globale Proxy ist aktiviert, aber Host oder Port sind ungültig. Er wird derzeit als deaktiviert behandelt.", + "app.proxy.message.save_failed": "Globale Proxy-Konfiguration fehlgeschlagen: {{error}}", + "app.proxy.password_optional": "Passwort (optional)", + "app.proxy.port": "Port", + "app.proxy.scope_hint": "* Gilt für Updateprüfungen, Netzwerkanfragen der Treiberverwaltung und Datenbankverbindungen ohne separat konfigurierten Proxy", + "app.proxy.section_title": "Globaler Proxy", + "app.proxy.title": "Globale Proxy-Einstellungen", + "app.proxy.type": "Proxy-Typ", + "app.proxy.username_optional": "Benutzername (optional)", + "app.security_update.error.capability_unavailable": "Sicherheitsupdate-Funktion ist nicht verfügbar", + "app.security_update.message.completed": "Gespeicherte Konfigurationen haben das Sicherheitsupdate abgeschlossen", + "app.security_update.message.needs_attention": "Das Update ist noch nicht abgeschlossen. Einige Konfigurationen erfordern Aufmerksamkeit.", + "app.security_update.message.not_finished_retry_later": "Das Sicherheitsupdate ist nicht abgeschlossen. Versuchen Sie es später erneut.", + "app.security_update.message.postpone_failed": "Dieses Sicherheitsupdate kann derzeit nicht verschoben werden", + "app.security_update.message.rolled_back": "Dieses Update wurde nicht abgeschlossen. Das System hat die aktuell nutzbare Konfiguration beibehalten.", + "app.security_update.stage.checking_saved_config": "Gespeicherte Konfigurationen werden geprüft", + "app.security_update.stage.updating_secure_storage": "Sicherer Speicher wird aktualisiert", + "app.security_update.stage.verifying_result": "Updateergebnis wird geprüft", + "app.settings.description": "Verwaltet allgemeine Einstellungen wie Sprache, Proxy, Theme, AI und Informationen.", + "app.settings.entry.about.description": "Versionsinformationen, Repository-Links und Updatestatus anzeigen.", + "app.settings.entry.about.title": "Über GoNavi", + "app.settings.entry.ai.description": "Modellanbieter, Schlüssel und Standardverhalten verwalten.", + "app.settings.entry.ai.title": "AI-Einstellungen", + "app.settings.entry.proxy.description": "Updateprüfungen, Treiberverwaltung und gemeinsamen Netzwerkzugang konfigurieren.", + "app.settings.entry.proxy.title": "Globaler Proxy", + "app.settings.entry.theme.description": "Helles oder dunkles Theme wechseln und die Oberfläche anpassen.", + "app.settings.entry.theme.title": "Theme und Darstellung", + "app.settings.title": "Einstellungscenter", + "app.shortcuts.action.diagnoseQuery.description": "EXPLAIN für die aktuelle SQL ausführen und Ausführungsplan mit Indexvorschlägen anzeigen", + "app.shortcuts.action.diagnoseQuery.label": "SQL-Diagnose", + "app.shortcuts.action.focusSidebarSearch.description": "Fokussiert das Suchfeld der linken Verbindungsstruktur", + "app.shortcuts.action.focusSidebarSearch.label": "Sidebar-Suche fokussieren", + "app.shortcuts.action.newConnection.description": "Neue Datenbank-, Runtime- oder andere Datenquellenverbindung erstellen", + "app.shortcuts.action.newConnection.label": "Neue Datenquelle", + "app.shortcuts.action.newQueryTab.description": "Erstellt einen neuen SQL-Abfrage-Tab", + "app.shortcuts.action.newQueryTab.label": "Neuer Abfrage-Tab", + "app.shortcuts.action.openShortcutManager.description": "Öffnet das Panel für Tastenkürzel-Einstellungen", + "app.shortcuts.action.openShortcutManager.label": "Tastenkürzelverwaltung öffnen", + "app.shortcuts.action.record": "Aufzeichnen", + "app.shortcuts.action.resetWindowZoom.description": "Manuell auslösen, wenn die Schrift nach dem Wiederherstellen aus der Windows-Taskleiste ungewöhnlich groß wird; wechselt einmal den maximierten Zustand, damit WebView2 die Schriftmetriken neu berechnet", + "app.shortcuts.action.resetWindowZoom.label": "Fensterzoom zurücksetzen", + "app.shortcuts.action.restore_defaults": "Standardwerte wiederherstellen", + "app.shortcuts.action.runQuery.description": "SQL auf der aktuellen Abfrageseite ausführen", + "app.shortcuts.action.runQuery.label": "SQL ausführen", + "app.shortcuts.action.saveQuery.description": "Aktuellen Abfrage-Tab speichern; unbenannte Abfragen öffnen den Speicherdialog", + "app.shortcuts.action.saveQuery.label": "Abfrage speichern", + "app.shortcuts.action.selectCurrentStatement.description": "SQL-Anweisung an der Cursorposition im Abfrageeditor auswählen", + "app.shortcuts.action.selectCurrentStatement.label": "Aktuelle Anweisung auswählen", + "app.shortcuts.action.sendAIChatMessage.description": "Aktuelle Nachricht im AI-Eingabefeld senden; Shift+Enter fügt immer einen Zeilenumbruch ein", + "app.shortcuts.action.sendAIChatMessage.label": "AI-Chat senden", + "app.shortcuts.action.showSlowQueries.description": "Verlauf langsamer SQL-Abfragen für die aktuelle Verbindung anzeigen (Standard-Schwellwert 500ms)", + "app.shortcuts.action.showSlowQueries.label": "Langsame SQL-Historie", + "app.shortcuts.action.switchToNextTab.description": "In geöffneten Tabs nach rechts wechseln", + "app.shortcuts.action.switchToNextTab.label": "Zum nächsten Tab wechseln", + "app.shortcuts.action.switchToPreviousTab.description": "In geöffneten Tabs nach links wechseln", + "app.shortcuts.action.switchToPreviousTab.label": "Zum vorherigen Tab wechseln", + "app.shortcuts.action.toggleAIPanel.description": "Rechtes Panel für AI-Dateneinblicke öffnen", + "app.shortcuts.action.toggleAIPanel.label": "AI-Dateneinblicke öffnen", + "app.shortcuts.action.toggleLogPanel.description": "SQL-Ausführungslog öffnen oder schließen", + "app.shortcuts.action.toggleLogPanel.label": "Logbereich umschalten", + "app.shortcuts.action.toggleMacFullscreen.description": "Nativer Vollbildwechsel im macOS-Modus für native Fenstersteuerung", + "app.shortcuts.action.toggleMacFullscreen.label": "Nativen Vollbildmodus umschalten", "app.shortcuts.action.toggleQueryResultsPanel.description": "Ergebnisbereich unter dem Abfrageeditor ein- oder ausblenden", "app.shortcuts.action.toggleQueryResultsPanel.label": "Ergebnisbereich umschalten", + "app.shortcuts.action.toggleTheme.description": "Zwischen hellem und dunklem Theme wechseln", + "app.shortcuts.action.toggleTheme.label": "Theme umschalten", + "app.shortcuts.capture_hint": "Drücken Sie das Tastenkürzel, nachdem Sie auf \"Aufzeichnen\" geklickt haben. Mit Esc brechen Sie die Aufzeichnung ab. Globale Tastenkürzel sollten eine Modifikatortaste enthalten; AI-Chat-Senden unterstützt nur Enter-Kombinationen, Shift+Enter bleibt ein Zeilenumbruch.", + "app.shortcuts.capture_waiting": "Tastenkürzel drücken...", + "app.shortcuts.context.datagrid": "Datentabelle", + "app.shortcuts.context.global": "Browser", + "app.shortcuts.context.monaco": "Editor", + "app.shortcuts.description": "Häufige globale Tastenkürzel an einem Ort anzeigen, aufzeichnen und aktivieren.", + "app.shortcuts.message.ai_send_limit": "Das Tastenkürzel zum Senden im AI-Chat unterstützt nur Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter; Shift+Enter bleibt ein Zeilenumbruch", + "app.shortcuts.message.conflict": "Konflikt mit \"{{action}}\". Wählen Sie ein anderes Tastenkürzel.", + "app.shortcuts.message.modifier_required": "Das Tastenkürzel muss mindestens eine der Tasten Ctrl / Alt / Shift / Meta enthalten", + "app.shortcuts.message.reserved_conflict_info": "Überschreibt das Standard-Tastenkürzel des Editors \"{{labels}}\"", + "app.shortcuts.message.reserved_conflict_warning": "Konflikt mit {{contexts}} \"{{labels}}\"; funktioniert möglicherweise nicht", + "app.shortcuts.message.restored_defaults": "Standard-Tastenkürzel wurden wiederhergestellt", + "app.shortcuts.reserved.browser_close_tab": "Browser Tab schließen", + "app.shortcuts.reserved.browser_new_incognito_window": "Browser neues Inkognito-Fenster", + "app.shortcuts.reserved.browser_new_tab": "Browser neuer Tab", + "app.shortcuts.reserved.browser_new_window": "Browser neues Fenster", + "app.shortcuts.reserved.browser_print": "Browser Drucken", + "app.shortcuts.reserved.browser_save": "Browser Speichern", + "app.shortcuts.reserved.datagrid_copy": "Datentabelle kopieren", + "app.shortcuts.reserved.editor_add_selection": "Editor Auswahl hinzufügen", + "app.shortcuts.reserved.editor_delete_line": "Editor Zeile löschen", + "app.shortcuts.reserved.editor_find": "Editor Suchen", + "app.shortcuts.reserved.editor_find_global": "Editor globale Suche", + "app.shortcuts.reserved.editor_goto_line": "Editor Gehe zu Zeile", + "app.shortcuts.reserved.editor_insert_line_after": "Editor Zeile darunter einfügen", + "app.shortcuts.reserved.editor_insert_line_before": "Editor Zeile darüber einfügen", + "app.shortcuts.reserved.editor_quick_open": "Editor Schnell öffnen", + "app.shortcuts.reserved.editor_rename_symbol": "Editor Symbol umbenennen", + "app.shortcuts.reserved.editor_replace": "Editor Ersetzen", + "app.shortcuts.title": "Tastenkürzelverwaltung", + "app.sidebar.ai_assistant": "AI-Assistent", + "app.sidebar.resize_width": "Ziehen, um die Breite zu ändern", + "app.sidebar.settings": "Einstellungen", + "app.sidebar.sql_execution_log": "SQL-Ausführungslog", + "app.sidebar.tools": "Tools", + "app.startup_readiness.loading_local_config": "Lokale Konfiguration wird geladen...", + "app.startup_readiness.loading_security_config": "Sicherheitskonfiguration wird geladen...", + "app.theme.action.restore_defaults": "Standardwerte wiederherstellen", + "app.theme.appearance_settings_description": "Skalierung, Schriftgröße, Transparenz und Weichzeichnung zentral anpassen.", + "app.theme.appearance_settings_title": "Darstellungseinstellungen", + "app.theme.appearance.blur_hint": "* Steuert nur die Unschärfe von Overlay-Ebenen innerhalb der App", + "app.theme.appearance.blur_title": "Gaußsche Weichzeichnung (Blur)", + "app.theme.appearance.enable_transparency_blur": "Transparenz und Weichzeichnung aktivieren", + "app.theme.appearance.enable_transparency_blur_hint": "Bei Deaktivierung bleiben die aktuellen Schwellenwerte erhalten und werden beim erneuten Aktivieren direkt wiederhergestellt.", + "app.theme.appearance.font_size_title": "Basisschriftgröße (Font Size)", + "app.theme.appearance.opacity_title": "Hintergrunddeckkraft (Opacity)", + "app.theme.appearance.transparency_blur_title": "Transparenz- und Weichzeichnungseffekte", + "app.theme.appearance.ui_scale_hint": "* Für kleine Bildschirme werden 85%-95% empfohlen", + "app.theme.appearance.ui_scale_title": "UI-Skalierung (UI Scale)", + "app.theme.appearance.windows_acrylic_hint": "Windows verwendet den systemeigenen Acrylic-Effekt. Die Unschärfestärke wird vom System gesteuert.", + "app.theme.data_table.column_width_hint": "Der Standardmodus nutzt 200px, der kompakte Modus 140px als Standardspaltenbreite. Manuell angepasste Spaltenbreiten bleiben vorrangig erhalten.", + "app.theme.data_table.column_width_mode": "Spaltenbreitenmodus der Datentabelle", + "app.theme.data_table.column_width_mode.compact": "Kompakt 140px", + "app.theme.data_table.column_width_mode.standard": "Standard 200px", + "app.theme.data_table.density": "Tabellendichte", + "app.theme.data_table.density_hint": "Steuert Zeilenhöhe, Spaltenbreite und Innenabstand. Komfortabel eignet sich für große Bildschirme; kompakt maximiert die Informationsdichte. Manuell gezogene Spaltenbreiten bleiben vorrangig erhalten.", + "app.theme.data_table.density.comfortable": "Komfortabel", + "app.theme.data_table.density.compact": "Kompakt", + "app.theme.data_table.density.standard": "Standard", + "app.theme.data_table.follow_global": "Global folgen", + "app.theme.data_table.font_size": "Schriftgröße der Datentabelle", + "app.theme.data_table.sidebar_tree_font_size": "Schriftgröße des linken Schemasbaums", + "app.theme.data_table.title": "Datentabellenanzeige", + "app.theme.data_table.vertical_borders": "Vertikale Trennlinien der Datentabelle anzeigen", + "app.theme.data_table.vertical_borders_hint": "Wirkt nur auf DataGrid auf Datentabellenseiten und nicht auf andere Tabellenkomponenten.", "app.theme.font_family.default_mono_option": "Standard-Code-Schrift", "app.theme.font_family.default_ui_option": "Standard-UI-Schrift", + "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux hat keine chinesischen CJK-Schriften erkannt; die Oberfläche kann fehlende Glyphen als Kästchen anzeigen. Installieren Sie: ", + "app.theme.font_family.linux_cjk_install_suffix": ", und starten Sie GoNavi danach neu.", + "app.theme.font_family.load_failed": "Systemschriften konnten nicht geladen werden", + "app.theme.font_family.load_failed_fallback": "Systemschriften konnten nicht geladen werden. Häufige Schriftvorgaben werden verwendet: {{error}}", + "app.theme.font_family.loaded_ui_hint": "{{count}} Schriftfamilien wurden auf diesem System gelesen. Tippen Sie zum Suchen. Leeren setzt auf die Standard-UI-Schrift zurück.", + "app.theme.font_family.loading_ui_hint": "Installierte Schriften des aktuellen Systems werden in Echtzeit geladen. Tippen Sie zum Suchen. Leeren setzt auf die Standard-UI-Schrift zurück.", + "app.theme.font_family.mono_fallback_hint": "Häufige Code-Schriftvorgaben werden verwendet. Gilt für Monospace-Inhalte wie SQL-Editor, AI-Codeblöcke, Logs, DDL und Datentabellen.", + "app.theme.font_family.mono_hint": "Installierte Systemschriften werden zuerst angezeigt; Namen nahe Mono/Code/Console werden höher eingestuft. Gilt für Monospace-Inhalte wie SQL-Editor, AI-Codeblöcke, Logs, DDL und Datentabellen.", + "app.theme.font_family.mono_title": "Monospace-Schriftfamilie", + "app.theme.font_family.title": "Schriftfamilie", + "app.theme.font_family.ui_title": "UI-Schriftfamilie", + "app.theme.mac_window.restart_hint": "* Benutzerdefinierte Schaltflächen oben rechts werden ausgeblendet. Falls der Systemfensterstil nicht sofort aktualisiert wird, starten Sie die App neu.", + "app.theme.mac_window.title": "macOS-Fenstersteuerung", + "app.theme.mac_window.use_native_controls": "Native macOS-Fenstersteuerung verwenden", + "app.theme.mac_window.use_native_controls_hint": "Zeigt die roten/gelben/grünen Schaltflächen oben links und priorisiert natives macOS-Vollbildverhalten.", + "app.theme.mode_title": "Theme-Modus", + "app.theme.mode.dark.description": "Geeignet für dunkle Umgebungen mit ruhigerer visueller Wirkung.", + "app.theme.mode.dark.label": "Dunkles Theme", + "app.theme.mode.light.description": "Geeignet für helle Umgebungen mit leichterer visueller Hierarchie.", + "app.theme.mode.light.label": "Helles Theme", + "app.theme.nav.appearance.description": "Skalierung, Schrift und Transparenz", + "app.theme.nav.appearance.title": "Darstellungsparameter", + "app.theme.nav.theme.description": "Wechsel zwischen hell und dunkel", + "app.theme.nav.theme.title": "Theme-Modus", + "app.theme.navigation_title": "Einstellungsnavigation", + "app.theme.startup_window.fullscreen": "Beim Start im Vollbild öffnen", + "app.theme.startup_window.fullscreen_windows": "Beim Start im Vollbild öffnen (Windows behandelt dies als Maximieren)", + "app.theme.startup_window.hint": "* Wird beim nächsten Start wirksam", + "app.theme.startup_window.title": "Startfenster", + "app.theme.startup_window.windows_hint": "* Unter Windows wird diese Option als \"beim Start maximieren\" behandelt und beim nächsten Start wirksam", + "app.theme.tab_display.action.move_down": "Nach unten", + "app.theme.tab_display.action.move_up": "Nach oben", + "app.theme.tab_display.badge.current": "Aktuell", + "app.theme.tab_display.description": "Passe die Anzeigereihenfolge von Verbindungsname, Objekttyp, Objektname, Datenbank, Schema und Host/IP an. Im zweizeiligen Modus kann Kontext in die Nebenzeile gelegt werden.", + "app.theme.tab_display.element.connection.description": "Verbindungsalias oder Umgebungsname, zum Beispiel DEV", + "app.theme.tab_display.element.connection.label": "Verbindung", + "app.theme.tab_display.element.database.description": "Aktueller DB- / catalog-Name", + "app.theme.tab_display.element.database.label": "Datenbank", + "app.theme.tab_display.element.host.description": "Zusammenfassung der Zieladresse der Verbindung", + "app.theme.tab_display.element.host.label": "Host/IP", + "app.theme.tab_display.element.kind.description": "Typkennzeichen wie SQL / TABLE / VIEW", + "app.theme.tab_display.element.kind.label": "Objekttyp", + "app.theme.tab_display.element.object.description": "Kernnamen wie Tabellen-, Abfrage- oder Ressourcennamen", + "app.theme.tab_display.element.object.label": "Objektname", + "app.theme.tab_display.element.schema.description": "schema / owner-Präfix", + "app.theme.tab_display.element.schema.label": "Schema", + "app.theme.tab_display.layout.double": "Zweizeilig", + "app.theme.tab_display.layout.single": "Einzeilig", + "app.theme.tab_display.preview.default_label": "Standardbeschriftung", + "app.theme.tab_display.preview.focused": "; aktuell ausgewählt {{label}}", + "app.theme.tab_display.preview.prefix": "Aktuelle Vorschau: ", + "app.theme.tab_display.preview.secondary": ", Nebenzeile {{labels}}", + "app.theme.tab_display.row.primary": "Hauptzeile", + "app.theme.tab_display.row.secondary": "Nebenzeile", + "app.theme.tab_display.title": "Tab-Beschriftung", + "app.theme.theme_settings_description": "Helle und dunkle Themes wechseln und einen einheitlichen visuellen Stil beibehalten.", + "app.theme.theme_settings_title": "Theme-Einstellungen", + "app.theme.ui_version.badge.new": "NEW", + "app.theme.ui_version.beta_warning": "Die neue UI ist noch in Beta. Einige Bildschirmstile können von der alten UI abweichen; bei Problemen können Sie jederzeit zurückwechseln.", + "app.theme.ui_version.description": "Wechseln Sie das gesamte Erscheinungsbild, während alle Funktionen erhalten bleiben. Die neue Version nutzt eine kompaktere Informationshierarchie und eine modernere visuelle Sprache.", + "app.theme.ui_version.legacy.badge": "Standard", + "app.theme.ui_version.legacy.description": "Die aktuelle stabile Oberfläche, in der alle Funktionen vollständig verfügbar sind.", + "app.theme.ui_version.legacy.label": "Alte UI", + "app.theme.ui_version.platform_hint": "Windows, macOS und Linux können alle wechseln. Änderungen werden sofort wirksam; einige Modals verwenden den neuen Stil beim nächsten Öffnen.", + "app.theme.ui_version.sidebar_search.command": "Neue Befehlssuche", + "app.theme.ui_version.sidebar_search.filter": "Alter Seitenleistenfilter", + "app.theme.ui_version.sidebar_search.hint": "Die neue Befehlssuche eignet sich zum Wechseln zu Verbindungen, Tabellen und Aktionen. Aktivieren Sie die Synchronisierung im Panel, um den linken Baum fortlaufend zu filtern; der alte Seitenleistenfilter zeigt das Eingabefeld direkt an und behält den Filtertext bei.", + "app.theme.ui_version.sidebar_search.title": "Neuer Suchmodus der linken Seitenleiste", + "app.theme.ui_version.title": "Oberflächenversion", + "app.theme.ui_version.v2.badge": "Beta", + "app.theme.ui_version.v2.description": "Eine neu gestaltete kompakte Oberfläche mit stärkerem AI-Einstieg und Tabellenübersicht.", + "app.theme.ui_version.v2.label": "Neue UI", + "app.tools.description": "Verbindungskonfiguration, Synchronisierung, Treiber und Tastenkürzel zentral verwalten.", + "app.tools.entry.data_compare.description": "Analysiert eingefügte, aktualisierte, gelöschte und unveränderte Zeilen anhand des Primärschlüssels.", + "app.tools.entry.data_compare.title": "Datenvergleich", + "app.tools.entry.data_root.description": "Lokalen Datenspeicherort anzeigen, wechseln oder migrieren.", + "app.tools.entry.data_root.title": "Datenverzeichnis", + "app.tools.entry.drivers.description": "Datenbanktreiber installieren, aktualisieren oder entfernen.", + "app.tools.entry.drivers.title": "Treiberverwaltung", + "app.tools.entry.export.description": "Aktuelle Verbindungen und sichtbare Konfigurationsfelder exportieren.", + "app.tools.entry.export.title": "Verbindungskonfiguration exportieren", + "app.tools.entry.import.description": "Verbindungsliste aus einer lokalen Datei wiederherstellen.", + "app.tools.entry.import.title": "Verbindungskonfiguration importieren", + "app.tools.entry.schema_compare.description": "Vergleicht Strukturunterschiede zwischen Quell- und Zieltabellen, nur als Vorschau ohne Ausführung.", + "app.tools.entry.schema_compare.title": "Schemavergleich", + "app.tools.entry.security_update.description": "Sicherheitsupdate-Status gespeicherter Konfigurationen anzeigen.", + "app.tools.entry.security_update.status_description": "Aktueller Status: {{status}}", + "app.tools.entry.security_update.title": "Sicherheitsupdate", + "app.tools.entry.shortcuts.description": "Globale Tastenkürzelbindungen anzeigen und anpassen.", + "app.tools.entry.shortcuts.title": "Tastenkürzelverwaltung", + "app.tools.entry.snippets.description": "SQL-Code-Snippets und Präfixvervollständigung verwalten.", + "app.tools.entry.snippets.title": "Code-Snippet-Verwaltung", + "app.tools.entry.sync.description": "Workflow für quellenübergreifende Synchronisierung öffnen.", + "app.tools.entry.sync.title": "Datensynchronisierung", + "app.tools.group.config.description": "Import/Export, Datenverzeichnis und Pflege gespeicherter Konfigurationen.", + "app.tools.group.config.title": "Verbindungen und Konfiguration", + "app.tools.group.workflow.description": "Struktur vergleichen, Unterschiede prüfen und Synchronisierung starten.", + "app.tools.group.workflow.title": "Daten-Workflows", + "app.tools.group.workspace.description": "Treiber, Code-Snippets und globale Tastenkürzel.", + "app.tools.group.workspace.title": "Editor und Treiber", + "app.tools.title": "Toolcenter", + "app.update.action.hide_to_background": "In den Hintergrund ausblenden", + "app.update.action.install_update": "Update installieren", + "app.update.action.open_install_directory": "Installationsverzeichnis öffnen", + "app.update.backend.error.check_failed": "Updateprüfung fehlgeschlagen: {{detail}}", + "app.update.backend.error.check_http_status": "Updateprüfung fehlgeschlagen: HTTP {{status}}", + "app.update.backend.error.download_failed": "Updatedownload fehlgeschlagen: {{detail}}", + "app.update.backend.error.install_unsupported": "Updateinstallation wird auf dieser Plattform nicht unterstützt: {{platform}}", + "app.update.backend.error.latest_version_unparseable": "Neueste Versionsnummer konnte nicht gelesen werden", + "app.update.backend.error.online_update_unsupported": "Online-Update wird auf dieser Plattform nicht unterstützt: {{platform}}", + "app.update.backend.error.package_download_http_failed": "Updatepaket konnte nicht heruntergeladen werden: HTTP {{status}}", + "app.update.backend.error.package_file_busy": "Updatedownload fehlgeschlagen, weil die Datei belegt ist: {{detail}}", + "app.update.backend.error.release_version_unparseable": "Release-Version konnte nicht gelesen werden", + "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS enthält kein Updatepaket für die aktuelle Plattform", + "app.update.backend.error.sha256sums_download_failed": "SHA256SUMS konnte nicht heruntergeladen werden: HTTP {{status}}", + "app.update.backend.error.sha256sums_missing": "Release stellt keine SHA256SUMS bereit", + "app.update.backend.error.update_package_not_found": "Updatepaket nicht gefunden: {{name}}", + "app.update.backend.message.app_directory_unavailable": "Auf das App-Verzeichnis kann nicht zugegriffen werden: {{path}}", + "app.update.backend.message.app_directory_unresolved_download": "Das aktuelle App-Verzeichnis kann nicht bestimmt werden, daher kann das Update nicht heruntergeladen werden", + "app.update.backend.message.check_first": "Prüfen Sie zuerst auf Updates", + "app.update.backend.message.checksum_failed": "Prüfsumme des Updatepakets ist fehlgeschlagen. Versuchen Sie es erneut.", + "app.update.backend.message.checksum_missing": "Prüfsumme des Updatepakets fehlt (SHA256SUMS)", + "app.update.backend.message.create_workspace_failed": "Update-Arbeitsverzeichnis konnte im App-Verzeichnis nicht erstellt werden: {{path}}", + "app.update.backend.message.download_in_progress": "Updatepaket wird heruntergeladen. Versuchen Sie es später erneut.", + "app.update.backend.message.install_launch_failed": "Update-Installer konnte nicht gestartet werden: {{detail}}", + "app.update.backend.message.install_launch_failed_with_log": "Update-Installer konnte nicht gestartet werden: {{detail}} (Updateprotokoll: {{path}})", + "app.update.backend.message.install_started": "Updateinstallation wurde gestartet", + "app.update.backend.message.install_started_with_log": "Updateinstallation wurde gestartet. Protokollpfad: {{path}}", + "app.update.backend.message.latest": "Bereits auf der neuesten Version", + "app.update.backend.message.no_downloaded_package": "Kein heruntergeladenes Updatepaket gefunden", + "app.update.backend.message.no_update_package": "Kein Updatepaket verfügbar", + "app.update.backend.message.open_directory_failed": "Updateverzeichnis konnte nicht geöffnet werden: {{detail}}", + "app.update.backend.message.open_directory_unsupported": "Öffnen von Verzeichnissen wird auf dieser Plattform nicht unterstützt: {{platform}}", + "app.update.backend.message.opened_install_directory": "Installationsverzeichnis geöffnet: {{path}}", + "app.update.backend.message.package_already_downloaded": "Updatepaket wurde bereits heruntergeladen", + "app.update.backend.message.package_directory_unavailable": "Updateverzeichnis ist nicht vorhanden oder nicht zugänglich", + "app.update.backend.message.package_directory_unresolved": "Updateverzeichnis konnte nicht aufgelöst werden", + "app.update.backend.message.package_downloaded": "Updatepaket heruntergeladen", + "app.update.backend.message.package_path_empty": "Pfad des Updatepakets ist leer", + "app.update.backend.message.update_found": "Neue Version gefunden: {{version}}", + "app.update.download_title": "Update herunterladen", + "app.update.download_title_with_version": "Update herunterladen {{version}}", + "app.update.message.check_failed": "Updateprüfung fehlgeschlagen: {{error}}", + "app.update.message.download_completed": "Updatedownload abgeschlossen", + "app.update.message.download_completed_with_path": "Updatedownload abgeschlossen. Paketpfad: {{path}}", + "app.update.message.download_failed": "Updatedownload fehlgeschlagen: {{error}}", + "app.update.message.install_failed": "Updateinstallation fehlgeschlagen: {{error}}", + "app.update.message.open_install_directory_failed": "Installationsverzeichnis konnte nicht geöffnet werden: {{error}}", + "app.update.message.opened_install_directory": "Installationsverzeichnis wurde geöffnet. Bitte schließen Sie den Austausch manuell ab.", + "app.update.message.package_ready": "Updatepaket ist bereit ({{version}})", + "app.update.message.package_ready_with_path": "Updatepaket ist bereit ({{version}}), Pfad: {{path}}", + "app.update.message.update_found": "Neue Version gefunden: {{version}}", + "app.update.status.available_downloaded": "Neue Version {{version}} gefunden (heruntergeladen; klicken Sie zum Installieren auf \"Downloadfortschritt\")", + "app.update.status.available_not_downloaded": "Neue Version {{version}} gefunden (nicht heruntergeladen)", + "app.update.status.check_failed": "Updateprüfung fehlgeschlagen: {{error}}", + "app.update.status.checking": "Suche nach Updates...", + "app.update.status.latest": "Bereits auf der neuesten Version ({{version}})", + "app.update.status.not_checked": "Nicht geprüft", + "app.window_zoom.message.fullscreen_exit_first": "Der Zoom kann im Vollbildmodus nicht zurückgesetzt werden. Beenden Sie zuerst den Vollbildmodus.", + "app.window_zoom.message.reset_failed": "Fensterzoom konnte nicht zurückgesetzt werden", + "app.window_zoom.message.reset_success": "Fensterzoom wurde zurückgesetzt", + "app.window_zoom.message.reset_success_fallback": "Fensterzoom wurde zurückgesetzt (Fallback)", + "app.window_zoom.message.windows_only": "Diese Funktion ist nur unter Windows verfügbar", + "common.back_to_previous": "Zurück", + "common.cancel": "Abbrechen", + "common.close": "Schließen", + "common.confirm": "Bestätigen", + "common.continue": "Fortfahren", + "common.delete": "Löschen", + "common.edit": "Bearbeiten", + "common.error": "Fehler", + "common.loading": "Wird geladen", + "common.named_item": "{{name}}", + "common.ok": "OK", + "common.refresh": "Aktualisieren", + "common.save": "Speichern", + "common.search": "Suchen", + "common.success": "Erfolg", + "common.unknown": "Unbekannt", + "common.warning": "Warnung", + "connection_modal.action.browse": "Durchsuchen...", + "connection_modal.action.cancel": "Abbrechen", + "connection_modal.action.close": "Schließen", + "connection_modal.action.copy_uri": "URI kopieren", + "connection_modal.action.disable": "Deaktivieren", + "connection_modal.action.discover_members": "Mitglieder erkennen", + "connection_modal.action.enable_and_prefer": "Aktivieren und bevorzugen", + "connection_modal.action.generate_uri": "URI erzeugen", + "connection_modal.action.open_driver_manager": "Treiberverwaltung öffnen", + "connection_modal.action.parse_uri": "URI einlesen", + "connection_modal.action.previous_step": "Zurück", + "connection_modal.action.reset_default": "Auf Standard zurücksetzen", + "connection_modal.action.save": "Speichern", + "connection_modal.action.test": "Verbindung testen", + "connection_modal.action.view_reason": "Grund anzeigen", + "connection_modal.appearance.color": "Farbe", + "connection_modal.appearance.current_icon": "Aktuelles Symbol: {{icon}}", + "connection_modal.appearance.custom_color": "Benutzerdefinierte Farbe", + "connection_modal.appearance.icon": "Symbol", + "connection_modal.appearance.preview": "Vorschau", + "connection_modal.badge.current": "Aktuell", + "connection_modal.badge.current_editing": "In Bearbeitung", + "connection_modal.badge.preferred": "Bevorzugt", + "connection_modal.config_section.connectionMode.description": "Verbindungsmodus konfigurieren.", + "connection_modal.config_section.connectionMode.title": "Verbindungsmodus", + "connection_modal.config_section.credentials.description": "Anmeldedaten konfigurieren.", + "connection_modal.config_section.credentials.title": "Anmeldedaten", + "connection_modal.config_section.customDriver.description": "Benutzerdefinierter Treiber konfigurieren.", + "connection_modal.config_section.customDriver.title": "Benutzerdefinierter Treiber", + "connection_modal.config_section.customDsn.description": "Benutzerdefinierter DSN konfigurieren.", + "connection_modal.config_section.customDsn.title": "Benutzerdefinierter DSN", + "connection_modal.config_section.databaseScope.description": "Datenbankbereich konfigurieren.", + "connection_modal.config_section.databaseScope.title": "Datenbankbereich", + "connection_modal.config_section.fileTarget.description": "Dateidatenbank konfigurieren.", + "connection_modal.config_section.fileTarget.title": "Dateidatenbank", + "connection_modal.config_section.identity.description": "Identität konfigurieren.", + "connection_modal.config_section.identity.title": "Identität", + "connection_modal.config_section.jvmRuntime.description": "JVM-Laufzeit konfigurieren.", + "connection_modal.config_section.jvmRuntime.title": "JVM-Laufzeit", + "connection_modal.config_section.mongoDiscovery.description": "MongoDB-Erkennung konfigurieren.", + "connection_modal.config_section.mongoDiscovery.title": "MongoDB-Erkennung", + "connection_modal.config_section.mongoPolicy.description": "MongoDB-Richtlinie konfigurieren.", + "connection_modal.config_section.mongoPolicy.title": "MongoDB-Richtlinie", + "connection_modal.config_section.replica.description": "Replikatknoten konfigurieren.", + "connection_modal.config_section.replica.title": "Replikatknoten", + "connection_modal.config_section.service.description": "Dienst und Datenbank konfigurieren.", + "connection_modal.config_section.service.title": "Dienst und Datenbank", + "connection_modal.config_section.target.description": "Zieladresse konfigurieren.", + "connection_modal.config_section.target.title": "Zieladresse", + "connection_modal.config_section.uri.description": "Verbindungs-URI eingeben, erzeugen oder einlesen.", + "connection_modal.config_section.uri.title": "Verbindungs-URI", + "connection_modal.db_icon_label.custom": "Benutzerdefiniert", + "connection_modal.db_type_hint.custom": "Mit einem benutzerdefinierten Treiber und DSN verbinden.", + "connection_modal.db_type_hint.file": "Eine lokale SQLite- oder DuckDB-Datenbankdatei auswählen.", + "connection_modal.db_type_hint.mongodb": "Mit MongoDB Standalone, Replica Set oder SRV-Adressen verbinden.", + "connection_modal.db_type_hint.redis": "Mit Redis Standalone oder Redis Cluster verbinden.", + "connection_modal.db_type_hint.standard": "Host, Port, Authentifizierung und optional eine Datenbank eingeben.", + "connection_modal.db_type.custom": "Benutzerdefiniert", + "connection_modal.driver.current": "Aktuell", + "connection_modal.error.unknown": "Unbekannter Fehler", + "connection_modal.error.unknown_exception": "Unbekannter Fehler", + "connection_modal.field.additional_hosts": "Weitere Hosts", + "connection_modal.field.additional_srv_hosts_optional": "Weitere SRV-Hosts (optional)", + "connection_modal.field.auth_source": "Authentifizierungsdatenbank (authSource)", + "connection_modal.field.clickHouseProtocol.auto": "Automatisch", + "connection_modal.field.cluster_additional_hosts": "Weitere Cluster-Hosts", + "connection_modal.field.connection_name": "Verbindungsname", + "connection_modal.field.connection_timeout_seconds": "Verbindungs-Timeout (Sekunden)", + "connection_modal.field.connection_timeout_seconds_ascii": "Verbindungs-Timeout (Sekunden)", + "connection_modal.field.default_database_optional": "Standarddatenbank (optional)", + "connection_modal.field.defaultDatabase.placeholder": "Zum Beispiel: appdb", + "connection_modal.field.display_databases_optional": "Anzuzeigende Datenbanken (optional)", + "connection_modal.field.driver_name": "Treibername", + "connection_modal.field.driver.placeholder": "Zum Beispiel: mysql, postgres", + "connection_modal.field.dsn": "DSN", + "connection_modal.field.dsn.placeholder": "Beispiel: user:pass@tcp(localhost:3306)/dbname?charset=utf8", + "connection_modal.field.file_path_absolute": "Dateipfad (absoluter Pfad)", + "connection_modal.field.host": "Host", + "connection_modal.field.host_address": "Hostadresse", + "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "Wenn bei einer Oracle-Mandantenverbindung \"Error 1235\" oder ein OBClient-Handshake-Fehler auftritt, können Sie im Feld \"Verbindungsparameter\" mit {{attributes}} die standardmäßig von GoNavi injizierte OBClient-Capability überschreiben.", + "connection_modal.field.oceanBaseProtocol.help.primary": "Wählen Sie für MySQL-Mandanten MySQL und für Oracle-Mandanten Oracle. GoNavi wählt anhand des Ports automatisch: Für den OB MySQL wire-Port wird die OBClient-Capability-Injektion verwendet (derselbe Pfad wie in Navicat), für den OBProxy Oracle listener-Port Standard-TNS.", + "connection_modal.field.oceanBaseProtocol.label": "OceanBase-Protokoll", + "connection_modal.field.password": "Passwort", + "connection_modal.field.password_optional": "Passwort (optional)", + "connection_modal.field.port": "Port", + "connection_modal.field.port_plain": "Port", + "connection_modal.field.primary_port": "Primärer Port", + "connection_modal.field.private_key_path_optional": "Pfad zum privaten Schlüssel (optional)", + "connection_modal.field.proxy_host": "Proxy-Host", + "connection_modal.field.proxy_password_optional": "Proxy-Passwort (optional)", + "connection_modal.field.proxy_type": "Proxy-Typ", + "connection_modal.field.proxy_username_optional": "Proxy-Benutzername (optional)", + "connection_modal.field.replica_hosts": "Replica-Hostliste", + "connection_modal.field.replica_password_optional": "Replica-Passwort (optional)", + "connection_modal.field.replica_set_optional": "Replica Set (optional)", + "connection_modal.field.replica_set_password_optional": "Replica-Set-Passwort (optional)", + "connection_modal.field.replica_set_username_optional": "Replica-Set-Benutzername (optional)", + "connection_modal.field.replica_username_optional": "Replica-Benutzername (optional)", + "connection_modal.field.save_password": "Passwort speichern", + "connection_modal.field.service_name": "Servicename", + "connection_modal.field.serviceName.placeholder": "Zum Beispiel: ORCLPDB1", + "connection_modal.field.ssh_host": "SSH-Host", + "connection_modal.field.ssh_password": "SSH-Passwort", + "connection_modal.field.ssh_user": "SSH-Benutzer", + "connection_modal.field.ssl_cert_path": "SSL-Zertifikatspfad", + "connection_modal.field.ssl_key_path": "SSL-Schlüsselpfad", + "connection_modal.field.tunnel_host": "HTTP Tunnel-Host", + "connection_modal.field.tunnel_password_optional": "HTTP Tunnel-Passwort (optional)", + "connection_modal.field.tunnel_username_optional": "HTTP Tunnel-Benutzername (optional)", + "connection_modal.field.uri": "URI", + "connection_modal.field.username": "Benutzername", + "connection_modal.field.username.optional_placeholder": "Leer lassen, wenn keine Authentifizierung aktiviert ist", + "connection_modal.group.chinese_databases": "Chinesische Datenbanken", + "connection_modal.group.other": "Andere", + "connection_modal.group.relational": "Relationale Datenbanken", + "connection_modal.group.time_series": "Zeitreihendatenbanken", + "connection_modal.help.additional_hosts": "Optionale MongoDB-Mitglieder, getrennt durch Komma, Semikolon oder Leerzeichen.", + "connection_modal.help.additional_srv_hosts": "Optionale zusätzliche SRV-Hosts für die MongoDB-Erkennung.", + "connection_modal.help.connection_timeout": "Gilt für Verbindungstests und das Laden von Metadaten. Bereich: 1-300 Sekunden.", + "connection_modal.help.custom_driver": "Unterstützt: mysql, postgres, sqlite, oracle, dm, kingbase. Aliase: postgresql/pgx, dm8, kingbase8/kingbasees/kingbasev8. Das Erweitern von Treibern über JDBC Jar wird derzeit nicht unterstützt.", + "connection_modal.help.default_database": "Leer lassen, um die Standarddatenbank des Servers zu verwenden.", + "connection_modal.help.oracle_service_name": "Oracle-Servicename, zum Beispiel ORCLPDB1.", + "connection_modal.help.private_key_path": "Privaten Schlüssel für die SSH-Authentifizierung verwenden. Passwort leer lassen, wenn der Schlüssel nicht verschlüsselt ist.", + "connection_modal.help.redis_cluster_hosts": "Weitere Redis-Cluster-Knoten, getrennt durch Komma, Semikolon oder Leerzeichen.", + "connection_modal.help.replica_hosts": "Replica-Hosts im Format host:port, getrennt durch Komma, Semikolon oder Leerzeichen.", + "connection_modal.help.select_after_test": "Führen Sie zuerst einen Verbindungstest aus, um auswählbare Datenbanken zu laden.", + "connection_modal.help.uri": "Verbindungs-URI einfügen oder erzeugen.", + "connection_modal.jvm.access_mode_description": "Wählen Sie, welche JVM-Zugriffsmodi diese Verbindung verwenden kann und welcher bevorzugt wird.", + "connection_modal.jvm.access_mode_title": "Zugriffsmodi", + "connection_modal.jvm.agent_api_key_optional": "Agent-API-Schlüssel (optional)", + "connection_modal.jvm.agent_description": "Verbindung über einen GoNavi Agent, wenn direkter Netzwerkzugriff eingeschränkt ist.", + "connection_modal.jvm.agent_help": "Basis-URL des GoNavi Agent-Dienstes.", + "connection_modal.jvm.agent_url": "Agent-URL", + "connection_modal.jvm.diagnostic_api_key_optional": "Diagnose-API-Schlüssel (optional)", + "connection_modal.jvm.diagnostic_description": "Optionale Diagnosebefehle für die JVM-Fehlersuche aktivieren.", + "connection_modal.jvm.diagnostic_disabled_hint": "Diagnoseerweiterung ist deaktiviert. Nur bei Bedarf zur Laufzeit-Fehlersuche aktivieren.", + "connection_modal.jvm.diagnostic_timeout_seconds": "Diagnose-Timeout (Sekunden)", + "connection_modal.jvm.diagnostic_title": "Diagnoseerweiterung", + "connection_modal.jvm.diagnostic_transport": "Diagnosetransport", + "connection_modal.jvm.diagnostic.agent_bridge_description": "Den Diagnose-Endpoint der GoNavi Agent Bridge verwenden.", + "connection_modal.jvm.diagnostic.arthas_tunnel_description": "Arthas Tunnel verwenden, um die Ziel-JVM zu erreichen.", + "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Basis-URL des Arthas Tunnel-Servers.", + "connection_modal.jvm.diagnostic.arthas_tunnel_url": "Arthas Tunnel-URL", + "connection_modal.jvm.diagnostic.bridge_help": "Basis-URL der GoNavi-Diagnosebrücke.", + "connection_modal.jvm.diagnostic.bridge_url": "Diagnosebrücken-URL", + "connection_modal.jvm.diagnostic.mutating_commands": "Verändernde Befehle", + "connection_modal.jvm.diagnostic.mutating_commands_description": "Befehle erlauben, die den Laufzeitzustand ändern können. Nur in kontrollierten Umgebungen verwenden.", + "connection_modal.jvm.diagnostic.observe_commands": "Beobachtungsbefehle", + "connection_modal.jvm.diagnostic.observe_commands_description": "Nur-Lese-Befehle wie dashboard, thread und JVM-Informationen erlauben.", + "connection_modal.jvm.diagnostic.target_agent_id": "Ziel-Agent-ID", + "connection_modal.jvm.diagnostic.target_agent_id_help": "In Arthas Tunnel registrierte Agent-ID.", + "connection_modal.jvm.diagnostic.target_id": "Ziel-ID", + "connection_modal.jvm.diagnostic.target_id_help": "Zielkennung, die die Diagnosebrücke versteht. Leer lassen, wenn die Brücke das Standardziel wählt.", + "connection_modal.jvm.diagnostic.trace_commands": "Tracing-Befehle", + "connection_modal.jvm.diagnostic.trace_commands_description": "Tracing- und Watch-Befehle erlauben, die Laufzeitaufwand verursachen.", + "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", + "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", + "connection_modal.jvm.endpoint_api_key_optional": "Endpoint-API-Schlüssel (optional)", + "connection_modal.jvm.endpoint_description": "Mit einem vom Dienst bereitgestellten Endpoint statt direkt mit JMX verbinden.", + "connection_modal.jvm.endpoint_help": "Basis-URL des JVM-Verwaltungs-Endpoint.", + "connection_modal.jvm.endpoint_url": "Endpoint-URL", + "connection_modal.jvm.environment": "Umgebung", + "connection_modal.jvm.environment.dev": "Entwicklung", + "connection_modal.jvm.environment.dev_description": "Testumgebung mit geringerem Risiko.", + "connection_modal.jvm.environment.prod": "Produktion", + "connection_modal.jvm.environment.prod_description": "Produktionsumgebung; Nur-Lese-Betrieb wird empfohlen.", + "connection_modal.jvm.environment.uat": "UAT", + "connection_modal.jvm.environment.uat_description": "Validierungsumgebung vor der Produktion.", + "connection_modal.jvm.jmx_description": "Über JMX mit Host, Port und optionalen Zugangsdaten verbinden.", + "connection_modal.jvm.jmx_host_override_optional": "JMX-Host überschreiben (optional)", + "connection_modal.jvm.jmx_password_optional": "JMX-Passwort (optional)", + "connection_modal.jvm.jmx_port": "JMX-Port", + "connection_modal.jvm.jmx_username_optional": "JMX-Benutzername (optional)", + "connection_modal.jvm.mode.agent_description": "Für Umgebungen hinter Firewalls oder NAT über GoNavi Agent gehen.", + "connection_modal.jvm.mode.endpoint_description": "Einen vom Zieldienst bereitgestellten HTTP Endpoint verwenden.", + "connection_modal.jvm.mode.jmx_description": "Standardmäßigen JMX-Remotezugriff verwenden.", + "connection_modal.jvm.preferred_mode_hint": "Aktuell bevorzugter Modus: {{mode}}", + "connection_modal.jvm.read_only_first": "Nur-Lese-Operationen bevorzugen", + "connection_modal.jvm.security_policy": "Sicherheitsrichtlinie", + "connection_modal.jvm.target_description": "Host, Port und Zugriffsmethode für den JVM-Verwaltungs-Endpoint konfigurieren.", + "connection_modal.jvm.target_title": "JVM-Ziel", + "connection_modal.layout.custom": "Benutzerdefinierte Treiberverbindung", + "connection_modal.layout.file": "Dateidatenbank-Verbindung", + "connection_modal.layout.generic_sql": "Generische SQL-Verbindung", + "connection_modal.layout.jvm": "JVM-Laufzeitverbindung", + "connection_modal.layout.mongodb": "MongoDB-Verbindung", + "connection_modal.layout.mysql_compatible": "MySQL-kompatible Verbindung", + "connection_modal.layout.oracle": "Oracle-Verbindung", + "connection_modal.layout.postgres_compatible": "PostgreSQL-kompatible Verbindung", + "connection_modal.layout.redis": "Redis-Verbindung", "connection_modal.layoutKind.custom": "Benutzerdefinierter Treiber", "connection_modal.layoutKind.file": "Dateibasierte Datenbanken", "connection_modal.layoutKind.genericSql": "Standard-SQL", @@ -6846,18 +3062,1308 @@ "connection_modal.layoutKind.search": "Suchmaschinen", "connection_modal.layoutKind.timeseries": "Zeitreihendatenbanken", "connection_modal.layoutKind.vector": "Vektordatenbanken", + "connection_modal.message.connection_failed": "Verbindung fehlgeschlagen", + "connection_modal.message.connection_params_incomplete": "Die Verbindungsparameter sind unvollständig.", + "connection_modal.message.connection_rejected": "Verbindung abgelehnt", + "connection_modal.message.connection_success": "Verbindung erfolgreich", + "connection_modal.message.copy_failed": "Kopieren fehlgeschlagen", + "connection_modal.message.current_driver_not_enabled": "Der aktuelle Treiber ist nicht installiert oder nicht aktiviert.", + "connection_modal.message.dameng_ssl_cert_required": "Dieses Feld ist erforderlich", + "connection_modal.message.database_list_failed": "Datenbankliste konnte nicht geladen werden: {{error}}", + "connection_modal.message.database_list_timeout": "Vorgang nach {{seconds}} Sekunden abgelaufen", + "connection_modal.message.driver_not_enabled": "Der Treiber ist nicht installiert oder nicht aktiviert.", + "connection_modal.message.driver_not_enabled_with_name": "Der Treiber {{name}} ist nicht installiert oder nicht aktiviert. Installieren oder aktivieren Sie ihn zuerst in der Treiberverwaltung.", + "connection_modal.message.driver_not_enabled_with_name_short": "Der Treiber {{name}} ist nicht installiert oder nicht aktiviert. Öffnen Sie zuerst die Treiberverwaltung.", + "connection_modal.message.driver_unavailable_title": "Treiber {{name}} nicht verfügbar", + "connection_modal.message.http_tunnel_host_required": "Dieses Feld ist erforderlich", + "connection_modal.message.http_tunnel_port_invalid": "Der HTTP Tunnel-Port ist ungültig", + "connection_modal.message.member_discovery_failed": "Vorgang fehlgeschlagen", + "connection_modal.message.member_discovery_success": "{{count}} Mitglieder gefunden", + "connection_modal.message.no_visible_databases": "Keine sichtbaren Datenbanken gefunden.", + "connection_modal.message.no_visible_schema": "Es wurden keine sichtbaren Schemas zurückgegeben.", + "connection_modal.message.required_fields_before_test": "Füllen Sie die Pflichtfelder aus, bevor Sie die Verbindung testen.", + "connection_modal.message.save_backend_unavailable": "Vorgang fehlgeschlagen", + "connection_modal.message.save_created_disconnected": "Konfiguration gespeichert (nicht verbunden).", + "connection_modal.message.save_failed": "Vorgang fehlgeschlagen", + "connection_modal.message.save_security_refresh_failed": "Vorgang fehlgeschlagen", + "connection_modal.message.save_updated_disconnected": "Konfiguration gespeichert (nicht verbunden)", + "connection_modal.message.select_database_file_failed": "Datenbankdatei konnte nicht ausgewählt werden: {{error}}", + "connection_modal.message.select_ssh_key_failed": "SSH-Privatschlüssel konnte nicht ausgewählt werden: {{error}}", + "connection_modal.message.srv_with_ssh_dns_warning": "SRV mit SSH Tunnel kann von lokaler DNS-Auflösung abhängen. Wenn die Auflösung fehlschlägt, verwenden Sie Standard-Hosts.", + "connection_modal.message.test_failed_detail": "Test fehlgeschlagen: {{detail}}", + "connection_modal.message.test_requires_new_mongo_replica_password": "Geben Sie vor dem Test das neue MongoDB Replica Set-Passwort ein.", + "connection_modal.message.test_requires_new_mongodb_password": "Geben Sie vor dem Test das neue MongoDB-Passwort ein.", + "connection_modal.message.test_requires_new_password": "Geben Sie vor dem Test das neue Verbindungspasswort ein.", + "connection_modal.message.test_requires_new_proxy_password": "Geben Sie vor dem Test das neue Proxy-Passwort ein.", + "connection_modal.message.test_requires_new_replica_password": "Geben Sie vor dem Test das neue Replikatpasswort ein.", + "connection_modal.message.test_requires_new_ssh_password": "Geben Sie vor dem Test das neue SSH-Passwort ein.", + "connection_modal.message.test_requires_new_tunnel_password": "Geben Sie vor dem Test das neue HTTP Tunnel-Passwort ein.", + "connection_modal.message.test_timeout": "Vorgang nach {{seconds}} Sekunden abgelaufen", + "connection_modal.message.unsupported_jvm_diagnostic_transport": "Der ausgewählte JVM-Diagnosetransport wird nicht unterstützt", + "connection_modal.message.unsupported_jvm_modes": "Der ausgewählte JVM-Zugriffsmodus wird nicht unterstützt", + "connection_modal.message.unsupported_jvm_modes_current": "Diese Verbindung enthält nicht unterstützte JVM-Zugriffsmodi", + "connection_modal.message.unsupported_jvm_modes_detected": "Nicht unterstützte JVM-Zugriffsmodi erkannt", + "connection_modal.message.uri_copied": "URI kopiert", + "connection_modal.message.uri_empty_copy": "URI ist leer und kann nicht kopiert werden", + "connection_modal.message.uri_generate_failed": "URI konnte nicht erstellt werden", + "connection_modal.message.uri_generated": "URI erzeugt", + "connection_modal.message.uri_parse_failed": "Vorgang fehlgeschlagen", + "connection_modal.message.uri_parsed": "URI wurde in das Formular übernommen", + "connection_modal.message.uri_required": "Geben Sie zuerst eine URI ein", + "connection_modal.message.uri_type_mismatch": "Der URI-Typ passt nicht zur ausgewählten Datenquelle", + "connection_modal.messageQueue.kafka.defaultTopic.help": "Wenn leer, muss das Topic in SQL explizit angegeben werden. Danach können SHOW, CONSUME oder SELECT direkt eine Vorschau liefern.", + "connection_modal.messageQueue.kafka.defaultTopic.label": "Standard-Topic (optional)", + "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "Beispiel: orders.events", + "connection_modal.messageQueue.kafka.extraBrokers.help": "Mehrere broker-Adressen im Format host:port eingeben und mit Enter bestätigen.", + "connection_modal.messageQueue.kafka.extraBrokers.label": "Zusätzliche Broker-Adressen", + "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "Beispiel: 10.10.0.12:9092, 10.10.0.13:9092", + "connection_modal.messageQueue.kafka.topology.cluster.description": "Konfiguriert mehrere bootstrap broker, um Discovery und Failover-Erfolg zu verbessern.", + "connection_modal.messageQueue.kafka.topology.single.description": "Konfiguriert einen bootstrap broker für lokale oder einfache Umgebungen.", + "connection_modal.messageQueue.kafka.topology.single.label": "Einzelner Broker", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "Wenn leer, muss das Topic in SQL explizit angegeben werden. Danach können SHOW, CONSUME oder SELECT direkt eine Vorschau liefern. /, + und # werden unterstützt.", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "Standard-Topic / Filter (optional)", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "Beispiel: devices/+/telemetry", + "connection_modal.messageQueue.mqtt.extraBrokers.help": "Mehrere broker-Adressen im Format host:port eingeben und mit Enter bestätigen.", + "connection_modal.messageQueue.mqtt.extraBrokers.label": "Zusätzliche Broker-Adressen", + "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "Beispiel: 10.10.0.12:1883, 10.10.0.13:1883", + "connection_modal.messageQueue.mqtt.topology.cluster.description": "Konfiguriert mehrere broker, um Verbindungserkennung und Failover-Erfolg zu verbessern.", + "connection_modal.messageQueue.mqtt.topology.single.description": "Konfiguriert einen broker für lokale oder einfache Umgebungen.", + "connection_modal.messageQueue.mqtt.topology.single.label": "Einzelner Broker", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "Wenn leer, wird standardmäßig / verwendet. Danach nutzt der Query-Editor den aktuellen vhost als Kontext für Queue-Browsing und Testversand.", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "Standard-Virtual Host (optional)", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "Beispiel: / oder orders-vhost", + "connection_modal.messageQueue.rocketmq.defaultTopic.help": "Wenn leer, muss das Topic in SQL explizit angegeben werden. Verbindungsparameter können weiterhin groupId, namespace, tag, pullBatchSize und startOffset ergänzen.", + "connection_modal.messageQueue.rocketmq.defaultTopic.label": "Standard-Topic (optional)", + "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "Beispiel: orders.events", + "connection_modal.messageQueue.rocketmq.extraNameServers.help": "Mehrere NameServer-Adressen im Format host:port eingeben und mit Enter bestätigen.", + "connection_modal.messageQueue.rocketmq.extraNameServers.label": "Zusätzliche NameServer-Adressen", + "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "Beispiel: 10.10.0.12:9876, 10.10.0.13:9876", + "connection_modal.messageQueue.rocketmq.topology.cluster.description": "Konfiguriert mehrere NameServer, um Routenerkennung und Failover-Erfolg zu verbessern.", + "connection_modal.messageQueue.rocketmq.topology.single.description": "Konfiguriert einen NameServer für lokale oder einfache Umgebungen.", + "connection_modal.messageQueue.rocketmq.topology.single.label": "Einzelner NameServer", + "connection_modal.messageQueue.topology.cluster.label": "Clustermodus", + "connection_modal.mongodb.auth_mechanism": "Authentifizierungsmechanismus", + "connection_modal.mongodb.auth.auto": "Automatisch", + "connection_modal.mongodb.auth.auto_description": "Der Treiber wählt den Authentifizierungsmechanismus.", + "connection_modal.mongodb.auth.aws_iam_description": "AWS IAM-Authentifizierung verwenden. AWS IAM-Zugangsdaten in der Laufzeitumgebung bereitstellen.", + "connection_modal.mongodb.auth.none": "Keine Authentifizierung", + "connection_modal.mongodb.auth.none_description": "Ohne MongoDB-Authentifizierung verbinden.", + "connection_modal.mongodb.auth.scram_sha1_description": "SCRAM-SHA-1-Authentifizierung verwenden.", + "connection_modal.mongodb.auth.scram_sha256_description": "SCRAM-SHA-256-Authentifizierung verwenden.", + "connection_modal.mongodb.discovery.current": "Aktuell", + "connection_modal.mongodb.discovery.srv_ssh_warning": "Wenn SRV und SSH-Tunnel gleichzeitig aktiv sind, kann lokale DNS-Auflösung erforderlich sein.", + "connection_modal.mongodb.discovery.srv.description": "mongodb+srv verwenden und Zielknoten per DNS erkennen lassen.", + "connection_modal.mongodb.discovery.srv.label": "SRV-Adresse", + "connection_modal.mongodb.discovery.standard.description": "Direkt mit host:port verbinden oder eine Replikatset-Knotenliste verwenden.", + "connection_modal.mongodb.discovery.standard.label": "Standardadresse", + "connection_modal.mongodb.members.health": "Zustand", + "connection_modal.mongodb.members.health.error": "Fehlerhaft", + "connection_modal.mongodb.members.health.ok": "Normal", + "connection_modal.mongodb.members.role": "Rolle", + "connection_modal.mongodb.policy.auth_source.label": "Authentifizierungsdatenbank (authSource)", + "connection_modal.mongodb.policy.auth_source.placeholder": "Standardmäßig database oder admin", + "connection_modal.mongodb.read_preference": "readPreference", + "connection_modal.mongodb.read_preference.nearest": "Lesezugriffe zum nächsten Mitglied leiten.", + "connection_modal.mongodb.read_preference.primary": "Nur vom primary lesen.", + "connection_modal.mongodb.read_preference.primary_preferred": "primary bevorzugen, bei Bedarf auf secondaries zurückfallen.", + "connection_modal.mongodb.read_preference.secondary": "Nur von secondaries lesen.", + "connection_modal.mongodb.read_preference.secondary_preferred": "secondaries bevorzugen, bei Bedarf auf primary zurückfallen.", + "connection_modal.mongodb.replica.hosts.srv.help": "Mehrere Kandidaten-Hostnamen im Format host eingeben. Leer lassen, um nur den obigen Host zu verwenden.", + "connection_modal.mongodb.replica.hosts.srv.label": "Zusätzliche SRV-Hosts (optional)", + "connection_modal.mongodb.replica.hosts.srv.placeholder": "Beispiel: cluster-a.example.com, cluster-b.example.com", + "connection_modal.mongodb.replica.hosts.standard.help": "Mehrere Knotenadressen im Format host:port eingeben und mit Enter bestätigen.", + "connection_modal.mongodb.replica.hosts.standard.label": "Zusätzliche Knotenadressen", + "connection_modal.mongodb.replica.hosts.standard.placeholder": "Beispiel: 10.10.0.12:27017, 10.10.0.13:27017", + "connection_modal.mongodb.replica.password.clear": "Gespeichertes Replikatset-Passwort löschen", + "connection_modal.mongodb.replica.password.description": "Ein Replikatset-Passwort ist derzeit gespeichert. Leer lassen, um es weiterzuverwenden, oder einen neuen Wert zum Ersetzen eingeben.", + "connection_modal.mongodb.replica.password.label": "Replikatset-Passwort (optional)", + "connection_modal.mongodb.replica.password.placeholder.empty": "Leer lassen, um das primäre Passwort zu verwenden", + "connection_modal.mongodb.replica.password.placeholder.retained": "Gespeichertes Replikatset-Passwort", + "connection_modal.mongodb.replica.set.label": "Replikatset-Name (optional)", + "connection_modal.mongodb.replica.set.placeholder": "Beispiel: rs0", + "connection_modal.mongodb.replica.user.label": "Replikatset-Benutzername (optional)", + "connection_modal.mongodb.replica.user.placeholder": "Leer lassen, um den primären Benutzernamen zu verwenden", + "connection_modal.mongodb.srv_address": "SRV-Adresse", + "connection_modal.mongodb.srv_address_description": "Einen MongoDB SRV-Eintrag zur Host-Erkennung verwenden.", + "connection_modal.mongodb.standard_address": "Standardadresse", + "connection_modal.mongodb.standard_address_description": "Host und Port plus optionale Mitgliederliste verwenden.", + "connection_modal.mongodb.topology.replica.label": "Replikatset / mehrere Knoten", + "connection_modal.mongodb.topology.single.label": "Standalone-Modus", + "connection_modal.network.http_tunnel": "HTTP Tunnel", + "connection_modal.network.http_tunnel_description": "Datenbankverkehr über einen HTTP Tunnel weiterleiten.", + "connection_modal.network.http_tunnel_disabled_hint": "HTTP Tunnel aktivieren, um Tunnel-Host, Port und Zugangsdaten zu konfigurieren.", + "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel kann nicht zusammen mit SSH Tunnel oder Proxy verwendet werden.", + "connection_modal.network.http_tunnel_panel_description": "Ein HTTP Tunnel-Gateway für diese Verbindung konfigurieren.", + "connection_modal.network.proxy": "Proxy", + "connection_modal.network.proxy_disabled_hint": "Proxy aktivieren, um diese Verbindung über SOCKS5 oder HTTP CONNECT zu leiten.", + "connection_modal.network.proxy_panel_description": "Proxy-Einstellungen für diese Verbindung konfigurieren.", + "connection_modal.network.proxy_type.http_description": "HTTP CONNECT-Proxying verwenden.", + "connection_modal.network.proxy_type.socks5_description": "SOCKS5-Proxying verwenden.", + "connection_modal.network.ssh_disabled_hint": "SSH Tunnel aktivieren, um über einen Bastion-Host zu verbinden.", + "connection_modal.network.ssh_panel_description": "SSH Tunnel-Host, Zugangsdaten und optionalen privaten Schlüssel konfigurieren.", + "connection_modal.network.ssh_tunnel": "SSH Tunnel", + "connection_modal.network.ssh_tunnel_description": "Vor dem Datenbankzugriff über einen SSH Tunnel verbinden.", + "connection_modal.network.ssl_description": "Datenbankverbindung mit SSL/TLS verschlüsseln.", + "connection_modal.network.ssl_disabled_hint": "SSL/TLS aktivieren, um die Zertifikatsrichtlinie zu konfigurieren.", + "connection_modal.network.ssl_mode": "SSL-Modus", + "connection_modal.network.ssl_mode.preferred": "Bevorzugt", + "connection_modal.network.ssl_mode.preferred_description": "Zuerst SSL versuchen und zurückfallen, wenn der Server es nicht verlangt.", + "connection_modal.network.ssl_mode.required": "Erforderlich", + "connection_modal.network.ssl_mode.required_description": "SSL erzwingen und fehlschlagen, wenn keine verschlüsselte Verbindung möglich ist.", + "connection_modal.network.ssl_mode.skip_verify": "Prüfung überspringen", + "connection_modal.network.ssl_mode.skip_verify_description": "SSL verwenden, aber Zertifikatsprüfung überspringen. Nur für Tests oder selbstsignierte Zertifikate verwenden.", + "connection_modal.network.ssl_panel_description": "SSL/TLS-Richtlinie für diese Verbindung konfigurieren.", + "connection_modal.network.ssl_tls": "SSL/TLS", + "connection_modal.placeholder.absolute_path": "/absoluter/pfad/zur/datei", + "connection_modal.placeholder.agent_api_key": "Optionaler Agent-API-Schlüssel", + "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", + "connection_modal.placeholder.connection_name": "Verbindung Name", + "connection_modal.placeholder.connection_name_fallback": "Verbindungsname", + "connection_modal.placeholder.custom_dsn_example": "Beispiel: treiberspezifischer DSN", + "connection_modal.placeholder.default_database_or_admin": "Standarddatenbank oder admin", + "connection_modal.placeholder.diagnostic_api_key": "Optionaler Diagnose-API-Schlüssel", + "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", + "connection_modal.placeholder.diagnostic_target_id": "Ziel-ID", + "connection_modal.placeholder.driver_name": "Treiber Name", + "connection_modal.placeholder.empty_without_auth": "Ohne Authentifizierung leer lassen", + "connection_modal.placeholder.endpoint_api_key": "Optionaler Endpoint-API-Schlüssel", + "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", + "connection_modal.placeholder.example_appdb": "appdb", + "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", + "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", + "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", + "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", + "connection_modal.placeholder.example_rs0": "rs0", + "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", + "connection_modal.placeholder.jvm_name": "jvm Name", + "connection_modal.placeholder.no_auth": "Keine Authentifizierung", + "connection_modal.placeholder.proxy_host": "127.0.0.1", + "connection_modal.placeholder.redis_password": "Redis-Passwort", + "connection_modal.placeholder.select_databases": "Anzuzeigende Datenbanken auswählen", + "connection_modal.placeholder.select_redis_databases": "Anzuzeigende Redis-Datenbanken auswählen", + "connection_modal.placeholder.ssh_host": "bastion.example.com", + "connection_modal.placeholder.ssl_cert_path": "/absoluter/pfad/client.crt", + "connection_modal.placeholder.ssl_key_path": "/absoluter/pfad/client.key", + "connection_modal.placeholder.tunnel_host": "tunnel.example.com", + "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", + "connection_modal.placeholder.use_primary_host": "Primären Host verwenden", + "connection_modal.placeholder.use_primary_password": "Primäres Passwort verwenden", + "connection_modal.placeholder.use_primary_password_short": "Primäres Passwort verwenden", + "connection_modal.placeholder.use_primary_port": "Primären Port verwenden", + "connection_modal.placeholder.use_primary_username": "Primären Benutzernamen verwenden", + "connection_modal.placeholder.use_primary_username_short": "Primären Benutzernamen verwenden", + "connection_modal.redis.credentials.primary.label": "Passwort (optional)", + "connection_modal.redis.credentials.primary.placeholder.empty": "Redis-Passwort, wenn requirepass gesetzt ist", + "connection_modal.redis.credentials.primary.placeholder.retained": "Gespeichertes Redis-Passwort", + "connection_modal.redis.credentials.sentinelPassword.clear": "Gespeichertes Sentinel-Passwort löschen", + "connection_modal.redis.credentials.sentinelPassword.description": "Ein Sentinel-Passwort ist derzeit gespeichert. Leer lassen, um es weiterzuverwenden, oder einen neuen Wert zum Ersetzen eingeben.", + "connection_modal.redis.credentials.sentinelPassword.label": "Sentinel-Passwort (optional)", + "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Authentifizierungspasswort für Sentinel selbst. Leer lassen, um keines zu senden.", + "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "Gespeichertes Sentinel-Passwort", + "connection_modal.redis.credentials.sentinelUser.label": "Sentinel-Benutzername (optional)", + "connection_modal.redis.credentials.sentinelUser.placeholder": "Leer lassen, wenn Sentinel keinen ACL-Benutzernamen verwendet", + "connection_modal.redis.databaseScope.help": "Nach erfolgreichem Verbindungstest auswählbar", + "connection_modal.redis.databaseScope.label": "Anzuzeigende Datenbanken (leer zeigt alle)", + "connection_modal.redis.databaseScope.placeholder": "Anzuzeigende Datenbanken auswählen", + "connection_modal.redis.hosts.cluster.help": "Der obige Host wird als primärer Knoten verwendet. Weitere Seed-Knoten hier im Format host:port eingeben.", + "connection_modal.redis.hosts.cluster.label": "Zusätzliche Cluster-Knotenadressen", + "connection_modal.redis.hosts.cluster.placeholder": "Beispiel: 10.10.0.12:6379, 10.10.0.13:6379", + "connection_modal.redis.hosts.sentinel.help": "Der obige Host wird als erster Sentinel verwendet. Weitere Sentinel-Knoten hier im Format host:port eingeben.", + "connection_modal.redis.hosts.sentinel.label": "Zusätzliche Sentinel-Knotenadressen", + "connection_modal.redis.hosts.sentinel.placeholder": "Beispiel: 10.10.0.12:26379, 10.10.0.13:26379", + "connection_modal.redis.sentinel.master.help": "Den monitor-Namen aus der Sentinel-Konfiguration eingeben, zum Beispiel mymaster.", + "connection_modal.redis.sentinel.master.label": "Sentinel master-Name", + "connection_modal.redis.sentinel.master.placeholder": "Beispiel: mymaster", + "connection_modal.redis.sentinel.master.required": "Sentinel master-Name eingeben", + "connection_modal.redis.topology.cluster.description": "Redis Cluster mit mehreren Seed-Knoten.", + "connection_modal.redis.topology.cluster.label": "Clustermodus", + "connection_modal.redis.topology.sentinel.description": "Ermittelt den primären Knoten über Sentinel für Primär-Replikat-Hochverfügbarkeit.", + "connection_modal.redis.topology.sentinel.label": "Sentinel-Modus", + "connection_modal.redis.topology.single.description": "Verbindet sich mit einem Redis-Knoten.", + "connection_modal.redis.topology.single.label": "Standalone-Modus", + "connection_modal.secret.blocking.redis_sentinel": "Geben Sie vor dem Test ein neues Sentinel-Passwort ein oder brechen Sie das Löschen des gespeicherten Sentinel-Passworts ab", + "connection_modal.secret.clear_saved_dsn": "Gespeicherte DSN löschen", + "connection_modal.secret.clear_saved_mongo_replica_password": "Gespeichertes MongoDB-Replica-Passwort löschen", + "connection_modal.secret.clear_saved_password": "Gespeichertes Passwort löschen", + "connection_modal.secret.clear_saved_proxy_password": "Gespeichertes Proxy-Passwort löschen", + "connection_modal.secret.clear_saved_replica_password": "Gespeichertes Replica-Passwort löschen", + "connection_modal.secret.clear_saved_ssh_password": "Gespeichertes SSH-Passwort löschen", + "connection_modal.secret.clear_saved_tunnel_password": "Gespeichertes HTTP Tunnel-Passwort löschen", + "connection_modal.secret.clear_saved_uri": "Gespeicherte URI löschen", "connection_modal.secret.error.saved_connection_deleted": "Die gespeicherte Verbindung wurde nicht gefunden. Sie wurde möglicherweise gelöscht. Aktualisieren Sie die Ansicht und versuchen Sie es erneut.", + "connection_modal.secret.error.saved_connection_missing": "Das gespeicherte Secret für die aktuelle Verbindung wurde nicht gefunden. Geben Sie das Passwort erneut ein, speichern Sie und versuchen Sie es noch einmal.", + "connection_modal.secret.error.store_unavailable": "Der sichere Secret-Speicher ist derzeit nicht verfügbar. Prüfen Sie den System-Schlüsselbund oder die Anmeldeinformationsverwaltung und versuchen Sie es erneut.", + "connection_modal.secret.new_value_replaces_saved": "Der neu eingegebene Wert ersetzt beim Speichern den aktuell gesicherten Wert.", + "connection_modal.secret.saved_dsn_description": "Eine DSN ist bereits sicher gespeichert. Lassen Sie das Feld leer, um sie weiter zu verwenden.", + "connection_modal.secret.saved_mongo_replica_password": "Gespeichertes MongoDB-Replica-Passwort", + "connection_modal.secret.saved_mongo_replica_password_description": "Ein MongoDB-Replica-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", + "connection_modal.secret.saved_password": "Gespeichertes Passwort", + "connection_modal.secret.saved_placeholder": "•••••• (leer lassen, um {{label}} weiter zu verwenden)", + "connection_modal.secret.saved_primary_password_description": "Ein Passwort für die primäre Verbindung ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", + "connection_modal.secret.saved_proxy_password": "Gespeichertes Proxy-Passwort", + "connection_modal.secret.saved_proxy_password_description": "Ein Proxy-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", + "connection_modal.secret.saved_redis_password": "Gespeichertes Redis-Passwort", + "connection_modal.secret.saved_redis_password_description": "Ein Redis-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", + "connection_modal.secret.saved_replica_password": "Gespeichertes Replica-Passwort", + "connection_modal.secret.saved_replica_password_description": "Ein Replica-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", + "connection_modal.secret.saved_ssh_password": "Gespeichertes SSH-Passwort", + "connection_modal.secret.saved_ssh_password_description": "Ein SSH-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", + "connection_modal.secret.saved_tunnel_password": "Gespeichertes HTTP Tunnel-Passwort", + "connection_modal.secret.saved_tunnel_password_description": "Ein HTTP Tunnel-Passwort ist bereits im sicheren Speicher vorhanden. Leer lassen, um es beizubehalten.", + "connection_modal.secret.saved_uri_description": "Eine Verbindungs-URI ist bereits sicher gespeichert. Lassen Sie das Feld leer, um sie weiter zu verwenden.", + "connection_modal.section.advanced_connection": "Erweiterte Verbindung", + "connection_modal.section.appearance.description": "Icon und Farbe für diese Verbindung in der Seitenleiste festlegen.", + "connection_modal.section.appearance.title": "Darstellung", + "connection_modal.section.basic.description": "Benennen Sie die Verbindung und geben Sie Ziel, Treiber und Authentifizierung ein.", + "connection_modal.section.basic.jvm_description": "JVM-Ziel, Zugriffsmodi und Anmeldedaten konfigurieren.", + "connection_modal.section.basic.sql_description": "Ziel, Treiber, Anmeldedaten und Datenbankbereich konfigurieren.", + "connection_modal.section.basic.title": "Basisinformationen", + "connection_modal.section.config_sections": "Konfigurationsbereiche", + "connection_modal.section.network.description": "SSL/TLS, SSH Tunnel, Proxy und HTTP Tunnel konfigurieren.", + "connection_modal.section.network.nav_description": "Netzwerk- und Sicherheitsoptionen für diese Verbindung konfigurieren.", + "connection_modal.section.network.title": "Netzwerk und Sicherheit", + "connection_modal.ssl_hint.dameng": "Dameng SSL benötigt Pfade für Clientzertifikat und privaten Schlüssel (sslCertPath / sslKeyPath).", + "connection_modal.ssl_hint.default": "Bevorzugen Sie Required. Verwenden Sie Skip Verify nur für Tests oder selbstsignierte Zertifikate.", + "connection_modal.ssl_hint.mongodb": "MongoDB-Verbindungen können mit TLS geschützt werden. Wenn die Zertifikatsprüfung Tests blockiert, zunächst Skip Verify verwenden.", + "connection_modal.ssl_hint.mysql_like": "Aktivieren Sie SSL, wenn MySQL/MariaDB/Doris/Sphinx sichere Übertragung verlangt. Bei selbstsignierten Zertifikaten zuerst Preferred oder Skip Verify prüfen.", + "connection_modal.ssl_hint.sqlserver": "Für SQL Server in Produktion Required verwenden und TrustServerCertificate deaktivieren.", + "connection_modal.status.disabled": "Deaktiviert", + "connection_modal.status.enabled": "Aktiviert", + "connection_modal.status.healthy": "Fehlerfrei", + "connection_modal.status.unhealthy": "Fehlerhaft", + "connection_modal.step.select_source": "Datenquelle auswählen", + "connection_modal.step.select_source_description": "Wählen Sie den zu erstellenden Verbindungstyp.", + "connection_modal.step1.group.domestic": "Inländische Datenbanken", "connection_modal.step1.group.message_queue": "Nachrichtenwarteschlangen", + "connection_modal.step1.group.nosql": "NoSQL-Datenbanken", + "connection_modal.step1.group.other": "Andere", + "connection_modal.step1.group.relational": "Relationale Datenbanken", + "connection_modal.step1.group.timeseries": "Zeitreihendatenbanken", "connection_modal.step1.group.vector": "Vektordatenbanken", "connection_modal.step1.hint.chroma": "Collection-Browsing, Vektorsuche und Metadatenfilter", + "connection_modal.step1.hint.custom": "Benutzerdefinierter Treiber und DSN", "connection_modal.step1.hint.elasticsearch": "Index-Browsing, Mapping-Prüfung, JSON DSL und query_string-Abfragen", + "connection_modal.step1.hint.file": "Lokale Dateiverbindung", "connection_modal.step1.hint.goldendb": "MySQL-kompatibel / verteilte Transaktionen", + "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", + "connection_modal.step1.hint.mongodb": "Einzelknoten / Replikatset", + "connection_modal.step1.hint.oceanBase": "MySQL / Oracle-Mandant", "connection_modal.step1.hint.qdrant": "Collection-Browsing, Vektorsuche und Payload-Filter", + "connection_modal.step1.hint.redis": "Einzelknoten / Cluster", + "connection_modal.step1.hint.standard": "Standard-Verbindungskonfiguration", + "connection_modal.switch.off": "Aus", + "connection_modal.switch.on": "Ein", + "connection_modal.table.health": "Zustand", + "connection_modal.table.role": "Rolle", + "connection_modal.test_error.description": "Vollständige vom Backend zurückgegebene Fehlermeldung anzeigen.", + "connection_modal.test_error.empty": "Keine Fehlerdetails", + "connection_modal.test_error.title": "Details zum fehlgeschlagenen Verbindungstest", + "connection_modal.test.redis_database_list_failure": "Verbunden, aber die Redis-Datenbankliste konnte nicht geladen werden: {{detail}}", + "connection_modal.test.redis_database_list_timeout": "Verbunden, aber das Laden der Redis-Datenbankliste ist abgelaufen (>{{seconds}} Sekunden)", + "connection_modal.title.create": "Neue {{type}}-Verbindung", + "connection_modal.title.create_description": "Verbindungskonfiguration eingeben und speichern.", + "connection_modal.title.edit": "Verbindung bearbeiten", + "connection_modal.title.edit_description": "Konfiguration der {{type}}-Verbindung bearbeiten.", + "connection_modal.title.select_type": "Datenquellentyp auswählen", + "connection_modal.title.select_type_description": "Wählen Sie einen unterstützten Datenquellentyp aus.", + "connection_modal.topology.cluster": "Cluster", + "connection_modal.topology.mongodb_replica": "Replica Set", + "connection_modal.topology.mongodb_replica_description": "Mit einem MongoDB Replica Set verbinden und optional Mitglieder erkennen.", + "connection_modal.topology.mongodb_single_description": "Mit einem einzelnen MongoDB-Host verbinden.", + "connection_modal.topology.mysql_replica_description": "Primäre Verbindung plus optionale Replica-Hosts verwenden.", + "connection_modal.topology.mysql_single_description": "Mit einem einzelnen MySQL-kompatiblen Knoten verbinden.", + "connection_modal.topology.primary_replica": "Primary/Replica", + "connection_modal.topology.redis_cluster_description": "Mit einem Redis Cluster verbinden und weitere Knoten angeben.", + "connection_modal.topology.redis_single_description": "Mit einem einzelnen Redis-Knoten verbinden.", + "connection_modal.topology.single": "Einzelknoten", + "connection_modal.validation.address_or_path_required": "Hostadresse oder Dateipfad eingeben", + "connection_modal.validation.agent_url_required": "Agent-URL eingeben", + "connection_modal.validation.arthas_tunnel_url_required": "Arthas Tunnel-URL eingeben", + "connection_modal.validation.custom_dsn_required": "Geben Sie die Verbindungszeichenfolge ein.", + "connection_modal.validation.custom_dsn_required_when_clearing_saved": "Geben Sie eine neue Verbindungszeichenfolge ein oder brechen Sie das Löschen der gespeicherten DSN ab.", + "connection_modal.validation.dameng_ssl_cert_path_required": "Dameng SSL-Zertifikatspfad eingeben", + "connection_modal.validation.dameng_ssl_key_path_required": "Dameng SSL-Schlüsselpfad eingeben", + "connection_modal.validation.diagnostic_bridge_url_required": "Diagnosebrücken-URL eingeben", + "connection_modal.validation.diagnostic_target_required": "Diagnoseziel eingeben", + "connection_modal.validation.diagnostic_timeout_range_1_300": "Diagnose-Timeout muss zwischen 1 und 300 Sekunden liegen", + "connection_modal.validation.driver_name_required": "Geben Sie den Treibernamen ein.", + "connection_modal.validation.endpoint_url_required": "Endpoint-URL eingeben", + "connection_modal.validation.jvm_access_mode_required": "Mindestens einen JVM-Zugriffsmodus auswählen", + "connection_modal.validation.jvm_host_required": "Geben Sie den JVM-Host ein.", + "connection_modal.validation.jvm_port_required": "Geben Sie den JVM-Port ein.", + "connection_modal.validation.jvm_preferred_mode_required": "Bevorzugten JVM-Zugriffsmodus auswählen", + "connection_modal.validation.oracle_service_required": "Oracle-Servicename eingeben", + "connection_modal.validation.port_required": "Port eingeben", + "connection_modal.validation.proxy_host_required": "Proxy-Host eingeben", + "connection_modal.validation.proxy_port_required": "Proxy-Port eingeben", + "connection_modal.validation.ssh_host_required": "SSH-Host eingeben", + "connection_modal.validation.ssh_port_required": "SSH-Port eingeben", + "connection_modal.validation.ssh_user_required": "SSH-Benutzer eingeben", + "connection_modal.validation.timeout_range_1_300": "Timeout muss zwischen 1 und 300 Sekunden liegen", + "connection_modal.validation.tunnel_host_required": "HTTP Tunnel-Host eingeben", + "connection_modal.validation.tunnel_port_required": "HTTP Tunnel-Port eingeben", + "connection_modal.validation.username_required": "Benutzernamen eingeben", + "connection.copy_suffix": " - Kopie", + "connection.delete": "Verbindung löschen", + "connection.edit": "Verbindung bearbeiten", + "connection.new": "Neue Verbindung", "connection.oceanbase.error.unsupported_protocol": "OceanBase unterstützt nur MySQL/Oracle-Mandantenprotokolle; \"{{value}}\" wird nicht unterstützt. Wechseln Sie zu MySQL oder Oracle.", + "connection.sidebar.delete.backendUnavailable": "Löschen der Verbindung fehlgeschlagen: Backend-Schnittstelle nicht verfügbar", + "connection.sidebar.delete.confirmContent": "Verbindung \"{{name}}\" wirklich löschen?", + "connection.sidebar.delete.confirmTitle": "Löschen bestätigen", + "connection.sidebar.delete.failureFallback": "Löschen der Verbindung fehlgeschlagen", + "connection.sidebar.delete.success": "Verbindung gelöscht", + "connection.sidebar.disconnect.success": "Verbindung getrennt", + "connection.sidebar.duplicate.backendUnavailable": "Kopieren der Verbindung fehlgeschlagen: Backend-Schnittstelle nicht verfügbar", + "connection.sidebar.duplicate.failureFallback": "Kopieren der Verbindung fehlgeschlagen", + "connection.sidebar.duplicate.noResult": "Kopieren der Verbindung fehlgeschlagen: Backend hat kein Ergebnis zurückgegeben", + "connection.sidebar.duplicate.success": "Verbindung kopiert: {{name}}", + "connection.sidebar.group.badge": "Gruppe", + "connection.sidebar.group.collapseAria": "Verbindungsgruppe {{name}} einklappen", + "connection.sidebar.group.delete": "Gruppe löschen", + "connection.sidebar.group.deleteConfirmContent": "Gruppe \"{{name}}\" löschen? Die enthaltenen Verbindungen bleiben erhalten.", + "connection.sidebar.group.deleteConfirmTitle": "Löschen bestätigen", + "connection.sidebar.group.edit": "Gruppe bearbeiten", + "connection.sidebar.group.expandAria": "Verbindungsgruppe {{name}} erweitern", + "connection.sidebar.group.meta": "{{count}} Verbindungen · Verbindungsgruppe", + "connection.sidebar.group.untitled": "Unbenannte Gruppe", + "connection.sidebar.menu.copy": "Verbindung kopieren", + "connection.sidebar.menu.createDatabase": "Neue Datenbank", + "connection.sidebar.menu.current": "Aktuell", + "connection.sidebar.menu.delete": "Verbindung löschen", + "connection.sidebar.menu.disconnect": "Verbindung trennen", + "connection.sidebar.menu.groupSection": "Verbindungsgruppen", + "connection.sidebar.menu.hostBadge": "HOST", + "connection.sidebar.menu.hostFallback": "Adresse nicht konfiguriert", + "connection.sidebar.menu.moveOutTag": "Aus Tag entfernen", + "connection.sidebar.menu.moveToTag": "Zu Tag verschieben", + "connection.sidebar.menu.moveToUngrouped": "Aus Gruppe entfernen", + "connection.sidebar.menu.refresh": "Verbindung aktualisieren", + "connection.sidebar.menu.section": "Verbindung", + "connection.test": "Verbindung testen", + "connection.unnamed": "Unbenannte Verbindung", + "data_grid.action.apply": "Anwenden", + "data_grid.ai_insight.prompt": "Analysiere bitte die folgenden Abfrageergebnisse (die ersten {{count}} Beispieldatensätze):\n```json\n{{json}}\n```\n\nAnalysiere Datenmerkmale, erkenne Muster oder liefere geschäftliche Erkenntnisse.", + "data_grid.ai_prompt.analyze_page": "Analysiere bitte die folgenden Abfrageergebnisse (die ersten {{count}} Beispielzeilen):\n```json\n{{json}}\n```\n\nAnalysiere Datenmerkmale, erkenne Muster oder liefere geschäftliche Erkenntnisse.", "data_grid.aria.row_number": "Zeilennummer", + "data_grid.batch_fill.set_null": "Auf NULL setzen", + "data_grid.batch_fill.title": "Stapelfüllung ({{count}} Zellen)", + "data_grid.batch_fill.value_placeholder": "Einzufüllenden Wert eingeben", + "data_grid.cell_editor.now": "Jetzt", + "data_grid.cell_editor.title": "Zelle bearbeiten", + "data_grid.cell_editor.title_with_column": "Zelle bearbeiten: {{column}}", + "data_grid.column_quick_find.placeholder": "Zur Spalte springen...", + "data_grid.column_quick_find.tooltip": "Spaltennamen eingeben, dann Enter drücken oder die Suchschaltfläche nutzen, um zur Spalte zu springen", + "data_grid.column_settings.column_visibility": "Spaltensichtbarkeit", + "data_grid.column_settings.display_settings": "Anzeigeeinstellungen", + "data_grid.column_settings.field_info": "Feldinformationen", + "data_grid.column_settings.hide_all": "Alle ausblenden", + "data_grid.column_settings.remember_column_order": "Eigene Spaltenreihenfolge merken", + "data_grid.column_settings.remember_hidden_columns": "Ausgeblendete Spalten merken", + "data_grid.column_settings.reset_hidden": "Ausblendungen zurücksetzen", + "data_grid.column_settings.reset_hidden_success": "Alle Spalten werden wieder angezeigt", + "data_grid.column_settings.reset_order": "Reihenfolge zurücksetzen", + "data_grid.column_settings.reset_order_success": "Standard-Spaltenreihenfolge wiederhergestellt", + "data_grid.column_settings.search_columns_placeholder": "Spaltennamen suchen...", + "data_grid.column_settings.show_all": "Alle anzeigen", + "data_grid.column_settings.show_comments": "Spaltenkommentare in der Kopfzeile anzeigen", + "data_grid.column_settings.show_types": "Spaltentypen in der Kopfzeile anzeigen", + "data_grid.column.comment_tooltip": "Kommentar: {{comment}}", + "data_grid.column.drag_tooltip": "Ziehen, um Spalten neu anzuordnen", + "data_grid.column.foreign_key_jump_title": "Zur Fremdschlüssel-Tabelle springen: {{tableName}}", + "data_grid.column.foreign_key_tooltip": "Fremdschlüssel: {{target}}", + "data_grid.column.resize_tooltip": "Ziehen, um die Spaltenbreite zu ändern; Doppelklick für automatische Anpassung", + "data_grid.column.type_tooltip": "Typ: {{type}}", + "data_grid.context_menu.auto_fit_column": "Spaltenbreite an Inhalt anpassen", + "data_grid.context_menu.clear_column_sort": "Sortierung für dieses Feld aufheben", + "data_grid.context_menu.column_display_section": "Feldanzeige", + "data_grid.context_menu.column_no_comment": "Kein Kommentar", + "data_grid.context_menu.column_unknown_type": "Unbekannter Typ", + "data_grid.context_menu.column_unnamed_field": "Unbenanntes Feld", + "data_grid.context_menu.copy_as_csv": "Als CSV kopieren", + "data_grid.context_menu.copy_as_delete": "Als DELETE kopieren", + "data_grid.context_menu.copy_as_insert": "Als INSERT kopieren", + "data_grid.context_menu.copy_as_json": "Als JSON kopieren", + "data_grid.context_menu.copy_as_markdown": "Als Markdown kopieren", + "data_grid.context_menu.copy_as_update": "Als UPDATE kopieren", + "data_grid.context_menu.copy_column_data": "Spaltendaten kopieren", + "data_grid.context_menu.copy_field_name": "Feldnamen kopieren", + "data_grid.context_menu.copy_row_as_new": "Diese Zeile als neue Zeile kopieren", + "data_grid.context_menu.copy_row_data": "Zeilendaten kopieren", + "data_grid.context_menu.current_cell": "Aktuelle Zelle", + "data_grid.context_menu.current_marker": "Aktuell", + "data_grid.context_menu.current_row": "Aktuelle Zeile", + "data_grid.context_menu.edit_row": "Diese Zeile bearbeiten", + "data_grid.context_menu.edit_section": "Bearbeiten", + "data_grid.context_menu.export_as_csv": "Als CSV exportieren", + "data_grid.context_menu.export_as_excel": "Als Excel exportieren", + "data_grid.context_menu.export_as_html": "Als HTML exportieren", + "data_grid.context_menu.export_as_json": "Als JSON exportieren", + "data_grid.context_menu.export_selected": "Ausgewählte Daten exportieren", + "data_grid.context_menu.fill_to_selected_rows": "In ausgewählte Zeilen füllen ({{count}})", + "data_grid.context_menu.hide_column": "Dieses Feld ausblenden", + "data_grid.context_menu.hide_column_comment": "Feldkommentar ausblenden", + "data_grid.context_menu.hide_column_type": "Feldtyp ausblenden", + "data_grid.context_menu.paste_copied_columns": "Kopierte Spalten einfügen (gleiche Namen)", + "data_grid.context_menu.paste_row_as_new": "Als neue Zeile einfügen", + "data_grid.context_menu.paste_row_as_new_count": "Als neue Zeile einfügen ({{count}})", + "data_grid.context_menu.show_column_comment": "Feldkommentar anzeigen", + "data_grid.context_menu.show_column_type": "Feldtyp anzeigen", + "data_grid.context_menu.sort_ascending": "Aufsteigend sortieren", + "data_grid.context_menu.sort_descending": "Absteigend sortieren", + "data_grid.context_menu.sort_section": "Sortierung", + "data_grid.context_menu.undo_cell_change": "Änderung dieser Zelle zurücknehmen", + "data_grid.copy_sql.error.missing_safe_where": "Das aktuelle Resultset hat keinen Primärschlüssel oder eindeutigen Schlüssel, mit dem die Zeile sicher identifiziert werden kann, und deckt nicht alle Tabellenspalten ab. Daher kann keine WHERE-Bedingung erzeugt werden.", + "data_grid.copy_sql.error.missing_table_name": "Das aktuelle Resultset ist keinem eindeutigen Tabellennamen zugeordnet. Daher kann kein {{mode}} SQL erzeugt werden.", + "data_grid.copy_sql.error.no_copyable_fields": "Das aktuelle Resultset enthält keine kopierbaren Felder. Daher kann kein SQL erzeugt werden.", + "data_grid.data_panel.click_cell_description": "Klicke auf eine Tabellenzelle, um die vollständigen Daten als Vorschau zu sehen", + "data_grid.data_panel.click_cell_title": "Zelle anklicken, um Daten anzuzeigen", + "data_grid.data_panel.title": "Datenvorschau", + "data_grid.datetime_picker.now": "Jetzt", + "data_grid.ddl.copy": "DDL kopieren", + "data_grid.ddl.layout_bottom": "Unten", + "data_grid.ddl.layout_side": "Seitenleiste", + "data_grid.ddl.loading": "DDL wird geladen...", + "data_grid.ddl.reload": "Neu laden", + "data_grid.ddl.sidebar_aria": "Tabellen-DDL-Seitenleiste", + "data_grid.ddl.view": "DDL anzeigen", + "data_grid.embedded_designer.title": "Tabelle entwerfen ({{tableName}})", + "data_grid.error_boundary.description": "Beim Rendern des Datenrasters ist ein Fehler aufgetreten. Das Datenformat ist möglicherweise ungültig.", + "data_grid.error_boundary.retry": "Erneut versuchen", + "data_grid.error_boundary.title": "Renderfehler", + "data_grid.export.all_data": "Alle Daten exportieren", + "data_grid.export.all_rows": "Alle Zeilen exportieren ({{count}} Zeilen)", + "data_grid.export.all_rows_requery": "Alles exportieren (Abfrage erneut ausführen)", + "data_grid.export.current_page": "Aktuelle Seite exportieren ({{count}} Zeilen)", + "data_grid.export.current_page_rows": "Aktuelle Seite exportieren ({{count}} Zeilen)", + "data_grid.export.group_filtered_results": "Gefilterte Ergebnisse", + "data_grid.export.group_full_table": "Gesamte Tabelle", + "data_grid.export.no_selection_prompt": "Es sind keine Zeilen ausgewählt. Wähle einen Exportbereich:", + "data_grid.export.options_title": "Exportoptionen", + "data_grid.export.query_result_title": "Abfrageergebnisse exportieren", + "data_grid.export.scope_prompt": "Exportbereich auswählen:", + "data_grid.export.selected_rows": "Ausgewählte Zeilen exportieren ({{count}} Zeilen)", + "data_grid.filter.add_condition": "Bedingung hinzufügen", + "data_grid.filter.add_sort": "Sortierung hinzufügen", + "data_grid.filter.apply": "Anwenden", + "data_grid.filter.apply_where": "WHERE anwenden", + "data_grid.filter.clear": "Leeren", + "data_grid.filter.custom_where_placeholder": "Benutzerdefinierten WHERE-Ausdruck eingeben (ohne WHERE), z. B.: status IN ('A','B')", + "data_grid.filter.disable_all": "Alle deaktivieren", + "data_grid.filter.enable_all": "Alle aktivieren", + "data_grid.filter.enabled": "Aktiviert", + "data_grid.filter.end_value_placeholder": "Endwert", + "data_grid.filter.first_condition": "Erste", + "data_grid.filter.invalid_quick_where": "WHERE-Bedingungen dürfen keine Semikolons oder SQL-Kommentare enthalten", + "data_grid.filter.list_values_placeholder": "Mehrere Werte durch Kommas oder Zeilenumbrüche trennen", + "data_grid.filter.logic.and": "Und (AND)", + "data_grid.filter.logic.or": "Oder (OR)", + "data_grid.filter.mongodb_query_placeholder": "MongoDB-JSON-Abfrageobjekt eingeben, z. B. {\"status\":\"A\"}", + "data_grid.filter.no_value_placeholder": "Kein Wert erforderlich", + "data_grid.filter.op.between": "Zwischen", + "data_grid.filter.op.contains": "Enthält", + "data_grid.filter.op.custom": "[Benutzerdefiniert]", + "data_grid.filter.op.ends_with": "Endet mit", + "data_grid.filter.op.in_list": "In Liste", + "data_grid.filter.op.is_empty": "Ist leer", + "data_grid.filter.op.is_not_empty": "Ist nicht leer", + "data_grid.filter.op.is_not_null": "Ist nicht NULL", + "data_grid.filter.op.is_null": "Ist NULL", + "data_grid.filter.op.not_between": "Nicht zwischen", + "data_grid.filter.op.not_contains": "Enthält nicht", + "data_grid.filter.op.not_ends_with": "Endet nicht mit", + "data_grid.filter.op.not_in_list": "Nicht in Liste", + "data_grid.filter.op.not_starts_with": "Beginnt nicht mit", + "data_grid.filter.op.starts_with": "Beginnt mit", + "data_grid.filter.quick_where_placeholder": "Bedingung nach WHERE eingeben, z. B. status = 1 AND name LIKE 'A%'", + "data_grid.filter.search_field_placeholder": "Feldnamen suchen", + "data_grid.filter.select_sort_field_placeholder": "Sortierfeld auswählen", + "data_grid.filter.sort_asc": "Aufsteigend", + "data_grid.filter.sort_desc": "Absteigend", + "data_grid.filter.sort_label": "Sortierung", + "data_grid.filter.start_value_placeholder": "Startwert", + "data_grid.filter.suggestion.column": "Spalte", + "data_grid.filter.suggestion.keyword": "Schlüsselwort", + "data_grid.filter.suggestion.operator": "Operator", + "data_grid.filter.then_label": "Dann", + "data_grid.json_editor.apply_changes": "Änderungen anwenden", + "data_grid.json_editor.description": "In der aktuellen Ergebnisreihenfolge bearbeiten. Im JSON-Modus können keine Datensätze hinzugefügt oder gelöscht werden. Verwende dafür den Tabellenmodus.", + "data_grid.json_editor.format": "JSON formatieren", + "data_grid.json_editor.invalid_format": "Ungültiges JSON-Format: {{error}}", + "data_grid.json_editor.title": "JSON-Ergebnismenge bearbeiten", + "data_grid.message.auto_commit_failed": "Automatische Übernahme fehlgeschlagen: {{detail}}", + "data_grid.message.auto_commit_success": "Automatisch übernommen", + "data_grid.message.cell_edit_mode_entered": "Zellbearbeitung aktiviert. Zum Auswählen mehrerer Zellen ziehen.", + "data_grid.message.cell_edit_mode_exited": "Zellbearbeitung deaktiviert.", + "data_grid.message.change_set_build_failed": "Änderungssatz konnte nicht erstellt werden", + "data_grid.message.change_set_build_failed_detail": "Änderungssatz konnte nicht erstellt werden: {{detail}}", + "data_grid.message.column_order_reset": "Standard-Spaltenreihenfolge wiederhergestellt", + "data_grid.message.column_quick_find_not_found": "Feldspalte nicht gefunden: {{query}}", + "data_grid.message.column_quick_find_not_rendered": "Die Feldspalte \"{{column}}\" wird derzeit nicht gerendert und kann daher nicht gefunden werden.", + "data_grid.message.column_visibility_reset": "Alle Spalten wiederhergestellt", + "data_grid.message.commit_failed": "Übernahme fehlgeschlagen: {{detail}}", + "data_grid.message.copied_columns": "{{count}} Spalten kopiert. Du kannst sie in Zielzeilen einfügen.", + "data_grid.message.copied_rows": "{{count}} Zeilen kopiert. Du kannst sie als neue Zeilen einfügen.", + "data_grid.message.copied_to_clipboard": "In die Zwischenablage kopiert", + "data_grid.message.copy_columns_first": "Zuerst Spaltenwerte kopieren", + "data_grid.message.copy_columns_same_row_only": "Beim Kopieren von Spaltenwerten nur Zellen aus einer Zeile auswählen", + "data_grid.message.copy_rows_first": "Zuerst Zeilen kopieren", + "data_grid.message.copy_sql_not_supported": "Diese Datenquelle unterstützt das Kopieren von SQL nicht. Verwende stattdessen JSON/CSV/Markdown.", + "data_grid.message.current_field_not_editable": "Das aktuelle Feld ist nicht bearbeitbar", + "data_grid.message.current_record_not_editable": "Der aktuelle Datensatz kann nicht bearbeitet werden", + "data_grid.message.current_row_no_copyable_content": "Die aktuelle Zeile enthält keine kopierbaren Inhalte", + "data_grid.message.ddl_copied": "DDL in die Zwischenablage kopiert", + "data_grid.message.ddl_copy_failed": "DDL konnte nicht kopiert werden", + "data_grid.message.ddl_load_failed": "DDL konnte nicht geladen werden", + "data_grid.message.ddl_missing_context": "Für die aktuelle Tabelle fehlen Verbindung oder Tabellenname, daher kann die DDL nicht angezeigt werden", + "data_grid.message.drag_select_cells_to_copy": "Zuerst die zu kopierenden Zellen durch Ziehen auswählen", + "data_grid.message.export_failed": "Export fehlgeschlagen: {{detail}}", + "data_grid.message.export_success": "Export abgeschlossen", + "data_grid.message.export_with_uncommitted_changes": "Es gibt nicht übernommene Änderungen. Der Export verwendet die sichtbaren Rasterdaten. Übernimm die Änderungen zuerst, wenn du vollständige Daten langer Felder benötigst.", + "data_grid.message.exporting": "Export läuft...", + "data_grid.message.exporting_all": "Alle Daten werden exportiert...", + "data_grid.message.exporting_rows": "{{count}} Zeilen werden exportiert...", + "data_grid.message.filled_cells": "{{count}} Zellen gefüllt", + "data_grid.message.filled_rows": "{{count}} Zeilen gefüllt", + "data_grid.message.filtered_export_not_supported": "Diese Datenquelle unterstützt den Export gefilterter Ergebnisse nicht", + "data_grid.message.filtered_export_uses_committed_data": "Es gibt nicht übernommene Änderungen. Der Export gefilterter Ergebnisse verwendet bereits übernommene Datenbankdaten.", + "data_grid.message.import_done": "Import abgeschlossen", + "data_grid.message.json_applied": "JSON-Änderungen wurden auf die aktuelle Ergebnismenge angewendet. Du kannst mit dem Übernehmen der Transaktion fortfahren.", + "data_grid.message.json_invalid": "Ungültiges JSON: {{detail}}", + "data_grid.message.json_parse_failed": "JSON konnte nicht geparst werden: {{detail}}", + "data_grid.message.json_record_count_mismatch": "Datensatzanzahl stimmt nicht überein: aktuell {{current}} Zeilen, JSON enthält {{json}} Zeilen. In diesem Modus keine Datensätze hinzufügen oder löschen.", + "data_grid.message.json_record_missing_row_key": "Datensatz {{index}} enthält keine Zeilenkennung und kann nicht angewendet werden", + "data_grid.message.json_record_not_object": "Datensatz {{index}} ist kein Objekt und kann nicht angewendet werden", + "data_grid.message.json_view_must_be_array": "Die JSON-Ansicht muss ein Array sein, dessen Elemente jeweils einem Datensatz entsprechen", + "data_grid.message.keep_one_visible_column": "Mindestens eine sichtbare Spalte beibehalten", + "data_grid.message.locate_record_to_edit": "Zuerst den zu bearbeitenden Datensatz suchen", + "data_grid.message.locator_column_value_empty": "Die Locator-Spalte {{column}} ist leer, deshalb können Änderungen nicht sicher gesendet werden.", + "data_grid.message.no_changes_to_commit": "Keine Änderungen zum Übernehmen", + "data_grid.message.no_copyable_cells": "Keine kopierbaren Zellen erkannt", + "data_grid.message.no_copyable_columns": "Keine kopierbaren Spalten erkannt", + "data_grid.message.no_copyable_rows": "Keine kopierbaren Zeilen erkannt", + "data_grid.message.no_data_changes": "Keine Daten geändert", + "data_grid.message.no_ddl_to_copy": "Keine DDL zum Kopieren", + "data_grid.message.no_field_name": "Feldname wurde nicht erkannt", + "data_grid.message.no_filter_applied": "Derzeit ist keine Filterbedingung angewendet", + "data_grid.message.no_other_rows_to_fill": "Es gibt keine weiteren ausgewählten Zeilen zum Füllen", + "data_grid.message.no_pasteable_editable_fields": "Keine einfügbaren bearbeitbaren Felder verfügbar", + "data_grid.message.no_pasteable_rows": "Keine Zeilen zum Einfügen verfügbar", + "data_grid.message.no_rows_selected": "Es sind keine Zeilen ausgewählt", + "data_grid.message.no_safe_locator": "Für dieses Resultset ist kein sicherer Zeilen-Locator verfügbar.", + "data_grid.message.pasted_columns_to_rows": "In {{rows}} Zeilen eingefügt, insgesamt {{cells}} Zellen", + "data_grid.message.pasted_rows_as_new": "{{count}} Zeilen als neue Zeilen eingefügt. Vor dem Übernehmen prüfen.", + "data_grid.message.preview_sql_failed": "SQL-Vorschau konnte nicht erzeugt werden", + "data_grid.message.preview_sql_failed_detail": "SQL-Vorschau konnte nicht erzeugt werden: {{detail}}", + "data_grid.message.result_set_no_copyable_content": "Die aktuelle Ergebnismenge enthält keine kopierbaren Inhalte", "data_grid.message.rollback_failed": "Rollback fehlgeschlagen: {{detail}}", + "data_grid.message.saved": "Gespeichert", + "data_grid.message.select_cells_to_fill": "Zuerst zu füllende Zellen auswählen", + "data_grid.message.select_file_failed": "Datei konnte nicht ausgewählt werden: {{detail}}", + "data_grid.message.select_rows_to_copy": "Zuerst zu kopierende Zeilen auswählen", + "data_grid.message.select_rows_to_fill": "Zuerst zu füllende Zeilen auswählen", + "data_grid.message.select_same_row_cells_to_copy": "Zuerst Zellen derselben Zeile zum Kopieren auswählen", + "data_grid.message.select_target_rows": "Zuerst Zielzeilen auswählen", + "data_grid.message.selected_cells_no_update": "Ausgewählte Zellen müssen nicht aktualisiert werden", + "data_grid.message.selection_no_copyable_content": "Die aktuelle Auswahl enthält keine kopierbaren Inhalte", + "data_grid.message.target_row_not_found": "Zielzeile nicht gefunden. Aktualisieren und erneut versuchen.", + "data_grid.message.target_rows_cannot_only_source": "Die Zielzeilen dürfen nicht nur aus der Quellzeile bestehen. Wähle eine andere Zeile aus.", + "data_grid.message.target_rows_no_update": "Zielzeilen müssen nicht aktualisiert werden", + "data_grid.message.transaction_committed": "Transaktion übernommen", "data_grid.message.transaction_rolled_back": "Transaktion zurückgesetzt", + "data_grid.message.undo_added_row_hint": "Neue Zeilen lassen sich über „Auswahl löschen“ oder einen Rollback der ganzen Tabelle zurücknehmen.", + "data_grid.message.undo_cell_original_missing": "Die ursprünglichen Daten dieser Zelle wurden nicht gefunden, daher kann die Änderung nicht zurückgenommen werden.", + "data_grid.message.undo_cell_success": "Zelländerung zurückgenommen", + "data_grid.metadata_view.column_name": "Name", + "data_grid.metadata_view.column_type": "Typ", + "data_grid.metadata_view.comment": "Kommentar", + "data_grid.metadata_view.default_value": "Standardwert", + "data_grid.metadata_view.er_collapse_fields": "Feldzusammenfassung einklappen", + "data_grid.metadata_view.er_current_badge": "Aktuelle Tabelle", + "data_grid.metadata_view.er_empty": "Fuer diese Tabelle wurden keine Fremdschluesselbeziehungen gefunden", + "data_grid.metadata_view.er_expand_fields": "Alle Felder erweitern", + "data_grid.metadata_view.er_expand_hidden_columns": "{{count}} weitere Felder anzeigen", + "data_grid.metadata_view.er_expand_relations": "Naechste Ebene erweitern", + "data_grid.metadata_view.er_field_badge": "Feld", + "data_grid.metadata_view.er_hidden_columns": "{{count}} weitere Felder", + "data_grid.metadata_view.er_open_table": "Tabelle oeffnen", + "data_grid.metadata_view.er_partial_warning": "Ein Teil der Beziehungen konnte nicht geladen werden. Das Diagramm ist moeglicherweise unvollstaendig.", + "data_grid.metadata_view.er_reference_badge": "Referenziert", + "data_grid.metadata_view.er_referenced_by_badge": "Referenziert von", + "data_grid.metadata_view.er_related_table_count": "{{count}} verknuepfte Tabellen", + "data_grid.metadata_view.er_relation_count": "{{count}} Beziehungen", + "data_grid.metadata_view.er_relation_depth": "Ebene {{count}}", + "data_grid.metadata_view.er_reset_relations": "Auf eine Ebene zuruecksetzen", + "data_grid.metadata_view.er_table_badge": "Tabelle", + "data_grid.metadata_view.field_count": "{{count}} Felder", + "data_grid.metadata_view.fields_badge": "Felder", + "data_grid.modal.export_options.all_data": "Alle Daten exportieren", + "data_grid.modal.export_options.current_page": "Aktuelle Seite exportieren ({{count}} Zeilen)", + "data_grid.modal.export_options.filtered_results": "Gefilterte Ergebnisse", + "data_grid.modal.export_options.no_rows_selected": "Es sind keine Zeilen ausgewählt. Wähle einen Exportbereich:", + "data_grid.modal.export_options.title": "Exportoptionen", + "data_grid.modal.export_options.whole_table": "Ganze Tabelle", + "data_grid.page_find.next": "Weiter", + "data_grid.page_find.placeholder": "Auf aktueller Seite suchen...", + "data_grid.page_find.previous": "Zurück", + "data_grid.page_find.summary": "{{occurrences}} Treffer / {{cells}} Zellen", + "data_grid.page_find.tooltip": "Sucht nur in den auf der aktuellen Seite geladenen Zeilen. WHERE-Bedingungen bleiben unverändert.", + "data_grid.pagination.jump_action": "Los", + "data_grid.pagination.jump_aria": "Zur Seite springen", + "data_grid.pagination.jump_label": "Springen", + "data_grid.pagination.page_size_aria": "Zeilen pro Seite", + "data_grid.pagination.page_size_option": "{{count}} Zeilen / Seite", + "data_grid.pagination.page.current": "Seite {{current}}", + "data_grid.pagination.page.known": "Seite {{current}} / {{totalPages}}", + "data_grid.pagination.result_set": "Ergebnismenge", + "data_grid.pagination.summary.approximate": "Aktuell {{current}} Zeilen / etwa {{total}} Zeilen", + "data_grid.pagination.summary.cancelled": "Aktuell {{current}} Zeilen / Zählung abgebrochen", + "data_grid.pagination.summary.counting": "Aktuell {{current}} Zeilen / Gesamtzahl wird gezählt...", + "data_grid.pagination.summary.counting_exact": "Aktuell {{current}} Zeilen / exakte Gesamtzahl wird gezählt...", + "data_grid.pagination.summary.empty": "Aktuell 0 Zeilen / insgesamt 0 Zeilen", + "data_grid.pagination.summary.known": "Aktuell {{current}} Zeilen / insgesamt {{total}} Zeilen", + "data_grid.pagination.summary.not_counted": "Aktuell {{current}} Zeilen / Gesamtzahl nicht gezählt", + "data_grid.preview_panel.no_cell_description": "Tabellenzelle anklicken, um die vollständigen Daten anzuzeigen", + "data_grid.preview_panel.no_cell_title": "Zelle anklicken, um Daten anzuzeigen", + "data_grid.preview_sql.copied": "Kopiert", + "data_grid.preview_sql.no_changes": "Keine Änderungen", + "data_grid.preview_sql.summary": "{{deletes}} DELETE, {{updates}} UPDATE, {{inserts}} INSERT", + "data_grid.preview_sql.title": "Änderungsvorschau", + "data_grid.record_view.edit_current": "Aktuellen Datensatz bearbeiten", + "data_grid.record_view.edit_json": "JSON bearbeiten", + "data_grid.record_view.empty": "Keine Daten in der aktuellen Ergebnismenge", + "data_grid.record_view.json_record_count": "Aktuelle Ergebnismenge: {{count}} Datensätze", + "data_grid.record_view.next": "Weiter", + "data_grid.record_view.previous": "Zurück", + "data_grid.record_view.record_position": "Datensatz {{current}} / {{total}}", + "data_grid.row_editor.popup_edit": "Im Popup bearbeiten", + "data_grid.row_editor.title": "Zeile bearbeiten", + "data_grid.secondary.column_display": "Spaltenanzeige", + "data_grid.secondary.data_preview": "Datenvorschau", + "data_grid.secondary.er_diagram": "ER-Diagramm", + "data_grid.secondary.jump_column": "Zur Spalte springen", + "data_grid.secondary.live": "live", + "data_grid.secondary.object_design": "Objektdesign", + "data_grid.secondary.pending_changes": "{{count}} ausstehend", + "data_grid.secondary.row_count": "{{count}} Zeilen", + "data_grid.secondary.view_ddl": "DDL anzeigen", + "data_grid.table_fallback.query_result": "Abfrageergebnis", + "data_grid.toolbar.add_row": "Zeile hinzufügen", + "data_grid.toolbar.ai_insight": "AI-Datenanalyse", + "data_grid.toolbar.ai_insight_short": "AI-Analyse", + "data_grid.toolbar.ai_insight_tooltip": "AI bitten, die Daten der aktuellen Abfrageseite zu analysieren", + "data_grid.toolbar.batch_fill": "Stapelfüllung ({{count}})", + "data_grid.toolbar.cancel_count": "Zählung abbrechen", + "data_grid.toolbar.cancel_count_tooltip": "Diese exakte Gesamtzählung abbrechen. Das aktuelle Browsen bleibt unbeeinflusst.", + "data_grid.toolbar.cell_editor": "Zelleditor", + "data_grid.toolbar.commit": "Transaktion übernehmen ({{count}})", + "data_grid.toolbar.commit_delay.seconds": "{{seconds}}s", + "data_grid.toolbar.commit_label": "Transaktion übernehmen", + "data_grid.toolbar.commit_mode.auto": "Automatisch übernehmen", + "data_grid.toolbar.commit_mode.auto_countdown": "Übernahme in {{seconds}}s", + "data_grid.toolbar.commit_mode.manual": "Manuell übernehmen", + "data_grid.toolbar.commit_mode.tooltip": "Steuert, wie Änderungen an Tabellendaten übernommen werden. Manuelles Übernehmen ist sicherer; automatisches Übernehmen startet nach der gewählten Verzögerung seit der letzten Änderung.", + "data_grid.toolbar.copied_columns_count": "{{count}} kopierte Spalten", + "data_grid.toolbar.copy": "Kopieren", + "data_grid.toolbar.copy_row": "Zeile kopieren", + "data_grid.toolbar.copy_selection": "Auswahl kopieren ({{count}})", + "data_grid.toolbar.copy_selection_columns": "Spaltenwerte der Auswahl kopieren ({{count}})", + "data_grid.toolbar.count_total": "Gesamtzahl zählen", + "data_grid.toolbar.count_total_tooltip": "Exakte Gesamtzahl mit dem aktuellen Filter zählen", + "data_grid.toolbar.delete_selected": "Auswahl löschen", + "data_grid.toolbar.export": "Exportieren", + "data_grid.toolbar.filter": "Filtern", + "data_grid.toolbar.import": "Importieren", + "data_grid.toolbar.paste_row": "Zeile einfügen", + "data_grid.toolbar.paste_row_count": "Zeile einfügen ({{count}})", + "data_grid.toolbar.paste_to_selected_rows": "In ausgewählte Zeilen einfügen ({{count}})", + "data_grid.toolbar.preview_sql": "SQL-Vorschau", + "data_grid.toolbar.preview_sql_generate": "SQL-Vorschau generieren", + "data_grid.toolbar.refresh": "Aktualisieren", + "data_grid.toolbar.rollback": "Zurückrollen", + "data_grid.toolbar.selected_count": "{{count}} ausgewählt", + "data_grid.toolbar.undo_delete": "Löschen rückgängig", + "data_grid.view.edit_current_record": "Aktuellen Datensatz bearbeiten", + "data_grid.view.edit_json": "JSON bearbeiten", + "data_grid.view.empty_result": "Die aktuelle Ergebnismenge enthält keine Daten", + "data_grid.view.next_record": "Nächster Datensatz", + "data_grid.view.previous_record": "Vorheriger Datensatz", + "data_grid.view.record_count": "Aktuelle Ergebnismenge: {{count}} Datensätze", + "data_grid.view.record_position": "Datensatz {{current}} / {{total}}", + "data_grid.view.result_view": "Ergebnisansicht", + "data_grid.view.table": "Tabelle", + "data_grid.view.text": "Text", + "data_sync.action.analyze_diff": "Unterschiede analysieren", + "data_sync.action.cancel": "Abbrechen", + "data_sync.action.close": "Schließen", + "data_sync.action.continue_sync": "Synchronisierung fortsetzen", + "data_sync.action.next": "Weiter", + "data_sync.action.previous": "Zurück", + "data_sync.action.start_sync": "Synchronisierung starten", + "data_sync.action.view": "Ansehen", + "data_sync.alert.auto_create_planner_scope": "Automatisches Erstellen von Tabellen unterstützt derzeit nur MySQL nach Kingbase. Spalten, Primärschlüssel, normale Indizes, eindeutige Indizes und zusammengesetzte Indizes werden migriert; Volltext-, räumliche, Präfix- und Funktionsindizes werden ausdrücklich übersprungen.", + "data_sync.alert.auto_create_scope": "Automatisches Erstellen von Tabellen unterstützt derzeit nur MySQL nach Kingbase. Spalten, Primärschlüssel, normale Indizes, eindeutige Indizes und zusammengesetzte Indizes werden migriert; Volltext-, räumliche, Präfix- und Funktionsindizes werden ausdrücklich übersprungen.", + "data_sync.alert.existing_target_only": "Die Datensynchronisierung arbeitet standardmäßig mit vorhandenen Zieltabellen. Wechseln Sie zur datenbankübergreifenden Migration, wenn Tabellen erstellt und Daten importiert werden sollen.", + "data_sync.alert.full_overwrite": "Vollständiges Überschreiben löscht Daten in den Zieltabellen. Verwenden Sie diese Option vorsichtig.", + "data_sync.alert.migration_mode": "Die datenbankübergreifende Migration ist aktiv. Nutzen Sie sie, um Tabellen in eine andere Datenquelle zu übertragen, automatisch zu erstellen und zu importieren.", + "data_sync.alert.query_mode": "Die Synchronisierung von SQL-Ergebnismengen unterstützt derzeit benutzerdefiniertes Quell-SQL zu genau einer vorhandenen Zieltabelle. Das Abfrageergebnis muss die Primärschlüsselspalte der Zieltabelle enthalten.", + "data_sync.alert.sync_mode": "Die Datensynchronisierung ist aktiv. Nutzen Sie sie für inkrementelle Synchronisierung oder Import mit Überschreiben, wenn Zieltabellen bereits vorhanden sind.", + "data_sync.backend.error.analyze_prepare_secrets_failed": "Zugangsdaten für die Analyse des Datenabgleichs konnten nicht vorbereitet werden: {{detail}}", + "data_sync.backend.error.apply_changes_failed": "Änderungen konnten nicht angewendet werden: {{detail}}", + "data_sync.backend.error.apply_changes_unsupported": "Der Zieltreiber unterstützt das Anwenden von Datenänderungen nicht", + "data_sync.backend.error.apply_source_query_changes_failed": "Änderungen am SQL-Ergebnissatz konnten nicht angewendet werden: {{detail}}", + "data_sync.backend.error.auto_add_column_failed": "Spalte konnte nicht automatisch ergänzt werden: Spalte={{column}}, Fehler={{detail}}", + "data_sync.backend.error.build_migration_plan_failed": "Migrationsplan konnte nicht erstellt werden: Tabelle={{table}}, Fehler={{detail}}", + "data_sync.backend.error.clear_target_failed": "Zieltabelle konnte nicht geleert werden: {{detail}}", + "data_sync.backend.error.connect_source_failed": "Verbindung zur Quelldatenbank fehlgeschlagen: {{detail}}", + "data_sync.backend.error.connect_source_mongodb_failed": "Verbindung zur Quell-MongoDB fehlgeschlagen: {{detail}}", + "data_sync.backend.error.connect_source_redis_failed": "Verbindung zum Quell-Redis fehlgeschlagen: {{detail}}", + "data_sync.backend.error.connect_target_failed": "Verbindung zur Zieldatenbank fehlgeschlagen: {{detail}}", + "data_sync.backend.error.connect_target_mongodb_failed": "Verbindung zur Ziel-MongoDB fehlgeschlagen: {{detail}}", + "data_sync.backend.error.connect_target_redis_failed": "Verbindung zum Ziel-Redis fehlgeschlagen: {{detail}}", + "data_sync.backend.error.create_indexes_failed": "Indizes konnten nicht erstellt werden: Tabelle={{table}}, Fehler={{detail}}", + "data_sync.backend.error.create_table_sql_empty": "Automatische Tabellenerstellung für Tabelle {{table}} fehlgeschlagen: create-table SQL ist leer", + "data_sync.backend.error.create_target_table_failed": "Zieltabelle konnte nicht erstellt werden: Tabelle={{table}}, Fehler={{detail}}", + "data_sync.backend.error.diff_composite_pk_unsupported": "Zusammengesetzter Primärschlüssel ({{columns}}) wird für die Differenzsynchronisierung nicht unterstützt", + "data_sync.backend.error.diff_pk_required": "Kein Primärschlüssel vorhanden. Differenzsynchronisierung wird nicht unterstützt; verwenden Sie für den Direktimport den Modus insert-only oder full-overwrite.", + "data_sync.backend.error.exec_ddl_statement_failed": "{{stage}} fehlgeschlagen: SQL={{sql}}, Fehler={{detail}}", + "data_sync.backend.error.execute_source_query_failed": "Quellabfrage konnte nicht ausgeführt werden: {{detail}}", + "data_sync.backend.error.init_source_driver_failed": "Quelldatenbanktreiber konnte nicht initialisiert werden: {{detail}}", + "data_sync.backend.error.init_source_mongodb_driver_failed": "Quell-MongoDB-Treiber konnte nicht initialisiert werden: {{detail}}", + "data_sync.backend.error.init_target_driver_failed": "Zieldatenbanktreiber konnte nicht initialisiert werden: {{detail}}", + "data_sync.backend.error.init_target_mongodb_driver_failed": "Ziel-MongoDB-Treiber konnte nicht initialisiert werden: {{detail}}", + "data_sync.backend.error.inspect_mongodb_collection_failed": "Ziel-MongoDB collection konnte nicht geprüft werden: {{detail}}", + "data_sync.backend.error.list_mongodb_collections_failed": "MongoDB collection konnten nicht aufgelistet werden: {{detail}}", + "data_sync.backend.error.load_target_columns_failed": "Zieltabellenspalten konnten nicht geladen werden: {{detail}}", + "data_sync.backend.error.mongo_document_write_unsupported": "Der Zieltreiber unterstützt das Schreiben von MongoDB document nicht", + "data_sync.backend.error.mongo_read_source_samples_failed": "Samples der Quell-MongoDB collection konnten nicht gelesen werden: {{detail}}", + "data_sync.backend.error.mongo_redis_analyze_collection_failed": "MongoDB collection {{collection}} konnte nicht analysiert werden: {{detail}}", + "data_sync.backend.error.mongo_redis_document_key_missing": "Im MongoDB document fehlt das Feld key", + "data_sync.backend.error.mongo_redis_document_type_missing": "Im MongoDB document für Redis Key {{key}} fehlt Feld {{field}}", + "data_sync.backend.error.mongo_redis_empty_target_value": "Der Redis-Zielwert für Key {{key}} ist leer", + "data_sync.backend.error.mongo_redis_unsupported_type": "Redis Key {{key}} unterstützt den Typ {{type}} nicht", + "data_sync.backend.error.mongo_redis_value_invalid": "Redis Key {{key}} hat einen ungültigen {{type}} payload; tatsächlicher Typ={{actual}}", + "data_sync.backend.error.mongo_redis_write_key_failed": "Redis Key {{key}} konnte nicht geschrieben werden: {{detail}}", + "data_sync.backend.error.pre_create_table_sql_failed": "create-table SQL konnte nicht vorab ausgeführt werden: Tabelle={{table}}, Fehler={{detail}}", + "data_sync.backend.error.prepare_secrets_failed": "Zugangsdaten für den Datenabgleich konnten nicht vorbereitet werden: {{detail}}", + "data_sync.backend.error.preview_composite_pk_unsupported": "Zusammengesetzter Primärschlüssel ({{columns}}) wird für die Datenvorschau nicht unterstützt", + "data_sync.backend.error.preview_failed": "Vorschau des Datenabgleichs fehlgeschlagen: {{detail}}", + "data_sync.backend.error.preview_pk_required": "Kein Primärschlüssel vorhanden; Datenvorschau wird nicht unterstützt", + "data_sync.backend.error.preview_prepare_secrets_failed": "Zugangsdaten für die Vorschau des Datenabgleichs konnten nicht vorbereitet werden: {{detail}}", + "data_sync.backend.error.read_redis_key_failed": "Redis Key {{key}} konnte nicht gelesen werden: {{detail}}", + "data_sync.backend.error.read_source_table_failed": "Quelltabelle konnte nicht gelesen werden: {{detail}}", + "data_sync.backend.error.read_source_table_failed_with_table": "Quelltabelle {{table}} konnte nicht gelesen werden: {{detail}}", + "data_sync.backend.error.read_target_redis_key_failed": "Ziel-Redis Key {{key}} konnte nicht gelesen werden: {{detail}}", + "data_sync.backend.error.read_target_table_failed": "Zieltabelle konnte nicht gelesen werden: {{detail}}", + "data_sync.backend.error.read_target_table_failed_with_table": "Zieltabelle {{table}} konnte nicht gelesen werden: {{detail}}", + "data_sync.backend.error.redis_mongo_analyze_changes_failed": "Redis-Migrationsänderungen konnten nicht analysiert werden: {{detail}}", + "data_sync.backend.error.redis_mongo_apply_changes_failed": "Redis-Migrationsänderungen konnten nicht angewendet werden: {{detail}}", + "data_sync.backend.error.redis_mongo_build_changes_failed": "Redis-Migrationsänderungen konnten nicht erstellt werden: {{detail}}", + "data_sync.backend.error.redis_mongo_create_collection_failed": "Ziel-MongoDB collection konnte nicht erstellt werden: {{detail}}", + "data_sync.backend.error.refresh_columns_after_create_failed": "Spalten konnten nach dem Erstellen der Zieltabelle nicht geladen werden: Tabelle={{table}}, Fehler={{detail}}", + "data_sync.backend.error.restore_source_secret_failed": "Verbindungsgeheimnis der Quelldatenbank konnte nicht wiederhergestellt werden: {{detail}}", + "data_sync.backend.error.restore_target_secret_failed": "Verbindungsgeheimnis der Zieldatenbank konnte nicht wiederhergestellt werden: {{detail}}", + "data_sync.backend.error.scan_redis_keys_failed": "Redis Keys konnten nicht gescannt werden: {{detail}}", + "data_sync.backend.error.source_collection_no_migratable_fields": "Aus der Quell-MongoDB collection konnten keine migrierbaren Felder abgeleitet werden: {{collection}}", + "data_sync.backend.error.source_table_columns_failed": "Quelltabellenspalten konnten nicht abgerufen werden: {{detail}}", + "data_sync.backend.error.source_table_missing_or_no_columns": "Quelltabelle fehlt oder hat keine Spaltendefinitionen: {{table}}", + "data_sync.backend.error.sync_table_schema_failed": "Tabellenschema konnte nicht synchronisiert werden: Tabelle={{table}}, Fehler={{detail}}", + "data_sync.backend.error.target_collection_check_failed": "Ziel-MongoDB collection konnte nicht geprüft werden: {{detail}}", + "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "Die Zieltabelle hat einen zusammengesetzten Primärschlüssel ({{columns}}), daher wird die SQL-Ergebnissatz-Differenzanalyse nicht unterstützt", + "data_sync.backend.error.target_pk_required_for_query_diff": "Die Zieltabelle hat keinen Primärschlüssel; SQL-Ergebnismengen-Differenzanalyse wird nicht unterstützt", + "data_sync.backend.error.target_table_columns_failed": "Zieltabellenspalten konnten nicht abgerufen werden: {{detail}}", + "data_sync.backend.error.target_table_columns_missing": "Zieltabelle {{table}} fehlt oder ihre Spaltendefinitionen konnten nicht gelesen werden", + "data_sync.backend.label.content_data_only": "Nur Daten", + "data_sync.backend.label.content_schema_and_data": "Schema + Daten", + "data_sync.backend.label.content_schema_only": "Nur Schema", + "data_sync.backend.label.mode_full_overwrite": "Vollständig überschreiben", + "data_sync.backend.label.mode_insert_only": "Nur einfügen", + "data_sync.backend.label.mode_insert_update": "Inkrementelle Synchronisierung", + "data_sync.backend.label.target_strategy_auto_create_if_missing": "Ziel bei Bedarf automatisch erstellen", + "data_sync.backend.label.target_strategy_existing_only": "Nur vorhandenes Ziel verwenden", + "data_sync.backend.label.target_strategy_smart": "Ziel automatisch behandeln", + "data_sync.backend.log.auto_add_columns_completed": "Automatische Spaltenergänzung abgeschlossen: erfolgreich={{succeeded}}, fehlgeschlagen={{failed}}", + "data_sync.backend.log.change_counts": "Einzufügen: {{inserts}} Zeilen, zu aktualisieren: {{updates}} Zeilen, zu löschen: {{deletes}} Zeilen", + "data_sync.backend.log.connecting_source": "Verbindung zur Quelldatenbank wird hergestellt: {{host}}...", + "data_sync.backend.log.connecting_target": "Verbindung zur Zieldatenbank wird hergestellt: {{host}}...", + "data_sync.backend.log.data_already_consistent": "Daten sind bereits konsistent; keine Änderungen erforderlich.", + "data_sync.backend.log.ddl_statement_succeeded": "Tabelle {{table}} {{stage}} erfolgreich: {{sql}}", + "data_sync.backend.log.fatal_error": "Schwerwiegender Fehler: {{message}}", + "data_sync.backend.log.missing_columns_auto_add_disabled": "Der Zieltabelle fehlen {{count}} Spalte(n), aber automatische Ergänzung ist deaktiviert; sie werden ignoriert: {{columns}}", + "data_sync.backend.log.missing_columns_auto_add_started": "Der Zieltabelle fehlen {{count}} Spalte(n); automatische Ergänzung wird gestartet: {{columns}}", + "data_sync.backend.log.mongo_redis_keyspace_options": "MongoDB -> Redis keyspace-Migration; Modus={{mode}}; Ziel={{target}}", + "data_sync.backend.log.mongo_redis_migrating_key": "Schreibe Redis Key {{key}}", + "data_sync.backend.log.mongo_redis_syncing_collection": "Synchronisiere MongoDB collection {{collection}}", + "data_sync.backend.log.redis_mongo_keyspace_options": "Redis -> MongoDB keyspace-Migration; Modus={{mode}}; Zielstrategie={{strategy}}", + "data_sync.backend.log.redis_mongo_migrating_key": "Migriere Redis Key {{key}}", + "data_sync.backend.log.source_query_no_changes": "SQL-Ergebnissatz und Zieltabelle sind konsistent; keine Änderungen anzuwenden", + "data_sync.backend.log.source_query_sync_completed": "SQL-Ergebnissatz-Synchronisierung abgeschlossen: Inserts={{inserts}}, Updates={{updates}}, Deletes={{deletes}}", + "data_sync.backend.log.source_query_sync_source": "Synchronisationsquelle: SQL-Ergebnissatz -> Zieltabelle {{table}}; Modus: {{mode}}", + "data_sync.backend.log.sync_options": "Synchronisationsinhalt: {{content}}; Modus: {{mode}}; Spalten automatisch ergänzen: {{autoAddColumns}}; Zieltabellenstrategie: {{targetTableStrategy}}; Indizes erstellen: {{createIndexes}}", + "data_sync.backend.log.syncing_table": "Tabelle wird synchronisiert: {{table}}", + "data_sync.backend.log.table_no_operations_skipped": "Tabelle {{table}} hat keine ausgewählten Operationen und wurde übersprungen", + "data_sync.backend.log.target_table_created": "Zieltabelle erfolgreich erstellt: {{table}}", + "data_sync.backend.log.target_table_no_operations": "Zieltabelle {{table}} hat keine ausgewählten Operationen und wurde übersprungen", + "data_sync.backend.log.unknown_sync_content_data_only": "Unbekannter Synchronisationsinhalt {{content}}; Nur-Daten-Synchronisierung wurde automatisch gewählt", + "data_sync.backend.result.analyzed_tables": "Differenzanalyse für {{count}} Tabelle(n) abgeschlossen", + "data_sync.backend.result.analyzed_target_tables": "Differenzanalyse für {{count}} Zieltabelle(n) abgeschlossen", + "data_sync.backend.result.mongo_redis_analyzed_collections": "{{count}} MongoDB collection für Redis-Migration analysiert", + "data_sync.backend.result.mongo_redis_completed": "MongoDB-keyspace-Migration abgeschlossen; verarbeitet: {{collections}} collection und {{keys}} Redis Key(s)", + "data_sync.backend.result.mongo_redis_no_collections": "Keine MongoDB collection für die Migration verfügbar", + "data_sync.backend.result.mongo_redis_no_documents": "Keine MongoDB Redis document für die Migration verfügbar", + "data_sync.backend.result.preview_ready": "Vorschau des Datenabgleichs ist bereit", + "data_sync.backend.result.redis_mongo_analyzed_keys": "{{count}} Redis Key(s) für MongoDB-Migration analysiert", + "data_sync.backend.result.redis_mongo_completed": "Redis-keyspace-Migration abgeschlossen; verarbeitet: {{count}} Redis Key(s)", + "data_sync.backend.result.redis_mongo_no_keys": "Keine Redis Keys für die Migration verfügbar", + "data_sync.backend.result.sync_completed": "Synchronisierung abgeschlossen: Tabellen={{tables}}, eingefügt={{rowsInserted}}, aktualisiert={{rowsUpdated}}, gelöscht={{rowsDeleted}}", + "data_sync.backend.summary.diff_completed": "Differenzanalyse abgeschlossen", + "data_sync.backend.summary.mongo_redis_diff": "Bei der Ausführung werden {{inserts}} Redis Key(s) eingefügt und {{updates}} Redis Key(s) aktualisiert", + "data_sync.backend.summary.mongo_redis_empty_collection": "In der collection wurden keine migrierbaren document gefunden", + "data_sync.backend.summary.mongo_redis_planned_action": "Nach {{target}} migrieren", + "data_sync.backend.summary.mongo_redis_same_keys": "Die passenden Redis Keys sind bereits aktuell", + "data_sync.backend.summary.mongo_redis_warning_document_format": "Es werden nur document mit den Feldern key/type/ttl/value unterstützt", + "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB zu Redis stuft vollständiges Überschreiben auf inkrementelle Synchronisierung herab, um andere Redis Keys in der DB nicht zu löschen", + "data_sync.backend.summary.mongo_redis_warning_keyspace": "Document in der MongoDB collection werden mit keyspace-Semantik nach Redis geschrieben", + "data_sync.backend.summary.redis_mongo_insert_document": "Bei der Ausführung wird ein neues MongoDB document eingefügt", + "data_sync.backend.summary.redis_mongo_planned_action": "In Collection {{collection}} migrieren", + "data_sync.backend.summary.redis_mongo_same_document": "Das passende MongoDB document ist bereits aktuell", + "data_sync.backend.summary.redis_mongo_update_document": "Bei der Ausführung wird das vorhandene MongoDB document aktualisiert", + "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key wird als MongoDB document geschrieben", + "data_sync.backend.summary.source_query_diff_completed": "SQL-Ergebnismengen-Differenzanalyse abgeschlossen", + "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view-Semantik wird noch nicht automatisch zu PG-like-Zielen migriert", + "data_sync.backend.validation.query_mode_data_only": "SQL-Ergebnismengen-Sync unterstützt derzeit nur reine Datensynchronisierung", + "data_sync.backend.validation.single_target_table_required": "SQL-Ergebnismengen-Sync erfordert genau eine Zieltabelle", + "data_sync.backend.validation.source_query_required": "Quellabfrage-SQL ist erforderlich", + "data_sync.backend.validation.target_table_required": "Zieltabelle ist erforderlich", + "data_sync.backend.warning.apply_changes_unsupported": "Der Zieltreiber unterstützt das Anwenden von Datenänderungen nicht.", + "data_sync.backend.warning.auto_add_column_sql_generation_failed": "SQL für automatische Ergänzung der Spalte {{column}} konnte nicht erzeugt werden: {{detail}}", + "data_sync.backend.warning.auto_create_pair_unsupported": "Automatische Tabellenerstellung unterstützt derzeit nur MySQL -> Kingbase; aktuelles Paar={{sourceType}} -> {{targetType}}", + "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "Spalte {{column}} ist eine Auto-Increment-Spalte; {{feature}} wird beim Ergänzen in einer vorhandenen Zieltabelle nicht automatisch neu erstellt", + "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "Spalte {{column}} Typ {{type}} wurde zu json herabgestuft", + "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "Spalte {{column}} Typ {{type}} wurde zu jsonb herabgestuft", + "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "Spalte {{column}} enum-Typ {{type}} wurde zu varchar(255) herabgestuft", + "data_sync.backend.warning.clickhouse_order_by_tuple_used": "Es wurde kein Quell-Primärschlüssel erkannt, daher verwendet ClickHouse ORDER BY tuple(); die Abfrageleistung kann beeinträchtigt werden", + "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse erhält keine relationalen Fremdschlüssel- oder Unique-Constraint-Semantiken; nur Spalten und Daten werden migriert", + "data_sync.backend.warning.clickhouse_source_metadata_limited": "ClickHouse-Quellmetadaten für Indizes und Constraints sind begrenzt; Rückmigration konzentriert sich auf Spalten und Daten", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "Die ClickHouse-Quelle hat keine Primärschlüsselinformationen geliefert, daher erstellt die Ziel-MySQL-Tabelle keinen Primärschlüssel automatisch", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "Die ClickHouse-Quelle hat keine Primärschlüsselinformationen geliefert, daher erstellt die Ziel-PG-like-Tabelle keinen Primärschlüssel automatisch", + "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "Für ClickHouse-Ziele wird insert-only oder full-overwrite empfohlen; update/delete-Semantik unterscheidet sich von klassischen relationalen Datenbanken", + "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "Spalte {{column}} Typ {{type}} hat keine dedizierte MySQL-Zuordnung und wurde zu text herabgestuft", + "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "Spalte {{column}} Typ {{type}} hat keine dedizierte PG-like-Zuordnung und wurde zu text herabgestuft", + "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "Spalte {{column}} Typ {{type}} wurde zu numeric(20,0) zugeordnet, um unsigned-Überlauf zu vermeiden", + "data_sync.backend.warning.column_default_expression_skipped": "Standardwert {{default}} der Spalte {{column}} enthält einen Ausdruck und wird derzeit nicht automatisch migriert", + "data_sync.backend.warning.column_empty_string_default_not_preserved": "Leerer String als Standardwert der Spalte {{column}} wurde nicht erhalten", + "data_sync.backend.warning.column_type_degraded": "Spalte {{column}} Typ {{sourceType}} wurde zu {{targetType}} herabgestuft", + "data_sync.backend.warning.column_type_degraded_clickhouse_string": "Spalte {{column}} Typ {{type}} wurde zu String herabgestuft", + "data_sync.backend.warning.column_type_empty_clickhouse_string": "Spalte {{column}} hat einen leeren Typ und wurde zu String herabgestuft", + "data_sync.backend.warning.column_type_empty_degraded": "Spalte {{column}} hat einen leeren Typ und wurde zu {{targetType}} herabgestuft", + "data_sync.backend.warning.column_type_mapped": "Spalte {{column}} Typ {{sourceType}} wurde zu {{targetType}} zugeordnet", + "data_sync.backend.warning.column_type_no_mapping_degraded": "Spalte {{column}} Typ {{sourceType}} hat keine dedizierte Zuordnung und wurde zu {{targetType}} herabgestuft", + "data_sync.backend.warning.column_user_defined_degraded": "Spalte {{column}} ist ein benutzerdefinierter Typ und wurde zu {{targetType}} herabgestuft", + "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "Spalte {{column}} ist ein benutzerdefinierter Typ und wurde zu String herabgestuft", + "data_sync.backend.warning.composite_pk_skipped": "Tabelle {{table}} hat einen zusammengesetzten Primärschlüssel ({{columns}}); Differenzsynchronisierung wird noch nicht unterstützt und wurde übersprungen", + "data_sync.backend.warning.full_overwrite_clearing_target": "Modus für vollständiges Überschreiben: Zieltabelle {{table}} wird geleert", + "data_sync.backend.warning.index_columns_missing": "Index {{name}} hat keine Spaltendefinition und wurde übersprungen", + "data_sync.backend.warning.index_prefix_length_unsupported": "Index {{name}} verwendet eine Präfixlänge und kann derzeit nicht automatisch migriert werden", + "data_sync.backend.warning.index_type_unsupported": "Index {{name}} Typ={{type}} kann derzeit nicht automatisch migriert werden", + "data_sync.backend.warning.load_target_columns_skip_check_failed": "Zieltabellenspalten konnten nicht abgerufen werden; Spaltenkonsistenzprüfung wurde übersprungen: {{detail}}", + "data_sync.backend.warning.mongo_redis_document_format": "MongoDB -> Redis unterstützt derzeit nur documents mit key/type/ttl/value-Feldern", + "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "MongoDB -> Redis stuft vollständiges Überschreiben für diese Migration auf inkrementelle Synchronisierung zurück", + "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "AUTO_INCREMENT der Spalte {{column}} wird in ClickHouse nicht als Auto-Increment-Semantik erhalten", + "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "Binärtyp der Spalte {{column}} wurde zu String herabgestuft", + "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "Spalte {{column}} Typ {{type}} wurde zu String herabgestuft", + "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "Spalte {{column}} Typ {{type}} hat keine dedizierte ClickHouse-Zuordnung und wurde zu String herabgestuft", + "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "Spalte {{column}} ist unsigned bigint auto_increment; sie wurde zu {{targetType}} herabgestuft und Auto-Increment-Semantik wurde nicht erhalten", + "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "Identity-/Auto-Increment-Semantik der Spalte {{column}} wird in ClickHouse nicht erhalten", + "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "Redis -> MongoDB stuft vollständiges Überschreiben für diese Migration auf inkrementelle Synchronisierung zurück", + "data_sync.backend.warning.refresh_columns_after_add_failed": "Zielspalten konnten nach dem Hinzufügen von Spalten nicht aktualisiert werden: Tabelle={{table}}, Fehler={{detail}}", + "data_sync.backend.warning.source_indexes_read_failed": "Quelltabellenindizes konnten nicht gelesen werden; Indexmigration wurde übersprungen: {{detail}}", + "data_sync.backend.warning.table_pk_required_skipped": "Tabelle {{table}} hat keinen Primärschlüssel; der aktuelle Modus erfordert Differenzvergleich und wurde übersprungen", + "data_sync.backend.warning.target_existing_only_required": "Die aktuelle Strategie erfordert eine vorhandene Zieltabelle, daher wird sie bei der Ausführung nicht automatisch erstellt.", + "data_sync.backend.warning.target_exists_data_only_no_indexes": "Die Zieltabelle existiert bereits. Es wird nur Datenimport ausgeführt; vorhandene Indizes und Constraints werden nicht automatisch neu aufgebaut.", + "data_sync.backend.warning.target_missing_columns": "Der Zieltabelle fehlen {{count}} Spalte(n): {{columns}}", + "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "Zieltabelle für {{table}} fehlt; die aktuelle Strategie erlaubt keine automatische Tabellenerstellung, daher wurde sie übersprungen", + "data_sync.backend.warning.target_table_existing_only_required": "Die aktuelle Strategie erfordert eine vorhandene Zieltabelle, daher wird sie bei der Ausführung nicht automatisch erstellt.", + "data_sync.backend.warning.unknown_content_default_data": "Unbekannter Synchronisationsinhalt {{content}}; Nur-Daten-Synchronisierung wurde automatisch gewählt", + "data_sync.backend.warning.unknown_mode_default_insert_update": "Unbekannter Synchronisationsmodus {{mode}}; inkrementelle Synchronisierung wurde automatisch gewählt", + "data_sync.badge.migration_mode": "Migrationsmodus", + "data_sync.badge.source_pending": "Quelle ausstehend", + "data_sync.badge.source_selected": "Quelle gewählt", + "data_sync.badge.sync_mode": "Synchronisierungsmodus", + "data_sync.badge.table_count": "{{count}} Tabellen", + "data_sync.compare_entry.action.return_to_compare": "Zurück zum Vergleich", + "data_sync.compare_entry.alert.data": "Dies ist der Datenvergleich. Er analysiert nur zeilenweise Unterschiede nach Primärschlüssel und schreibt keine Daten.", + "data_sync.compare_entry.alert.schema": "Dies ist der Strukturvergleich. Er analysiert nur Strukturunterschiede und erzeugt prüfbares SQL, ohne Änderungen auszuführen.", + "data_sync.compare_entry.option.auto_add_columns": "Kompatibles Änderungs-SQL für fehlende Zielspalten erzeugen (nur Vorschau, keine Ausführung)", + "data_sync.compare_entry.option.source_dataset.query": "Nach SQL-Ergebnismenge vergleichen", + "data_sync.compare_entry.option.source_dataset.table": "Nach Tabelle vergleichen", + "data_sync.compare_entry.preview.selection_hint": "Die Zeilenauswahl wirkt sich nur auf den SQL-Vorschaubereich aus und schreibt keine Daten.", + "data_sync.compare_entry.preview.sql.data_help": "Die SQL-Vorschau wird aus den ausgewählten Einfüge-, Aktualisierungs-, Lösch- und Zeilenbereichen erzeugt und dient nur der Differenzprüfung.", + "data_sync.compare_entry.preview.sql.schema_help": "Die SQL-Vorschau zeigt empfohlene Anweisungen für Strukturunterschiede und dient nur der Prüfung.", + "data_sync.compare_entry.result.completed": "Vergleich abgeschlossen", + "data_sync.compare_entry.result.failed": "Vergleich fehlgeschlagen", + "data_sync.compare_entry.result.running": "Vergleich läuft", + "data_sync.compare_entry.result.running_description": "Aktuelle Phase: {{stage}}{{table}}", + "data_sync.compare_entry.result.stage_fallback": "Wird ausgeführt", + "data_sync.compare_entry.result.success_summary": "{{tables}} Tabellen erfolgreich verglichen.", + "data_sync.compare_entry.result.table_suffix": ", Tabelle: {{table}}", + "data_sync.compare_entry.title.analysis_log": "Analyseprotokoll", + "data_sync.compare_entry.workflow_help": "Dieser Einstieg analysiert nur Unterschiede und zeigt Vorschauen. Er synchronisiert nicht, erstellt keine Tabellen, ergänzt keine Spalten und löscht keine Daten.", + "data_sync.confirm.full_overwrite.content": "Vollständiges Überschreiben löscht zuerst die Daten der Zieltabelle und fügt danach Zeilen ein. Bestätigen Sie, dass die Zieldatenbank gesichert wurde.", + "data_sync.confirm.full_overwrite.ok": "Fortfahren", + "data_sync.confirm.full_overwrite.title": "Vollständiges Überschreiben bestätigen", + "data_sync.diff.column.delete": "Löschen", + "data_sync.diff.column.insert": "Einfügen", + "data_sync.diff.column.plan": "Ablaufplan", + "data_sync.diff.column.preview": "Vorschau", + "data_sync.diff.column.risk": "Risiko", + "data_sync.diff.column.same": "Gleich", + "data_sync.diff.column.table": "Tabelle", + "data_sync.diff.column.target_table": "Zieltabelle", + "data_sync.diff.column.update": "Aktualisieren", + "data_sync.diff.more_warnings": "{{count}} weitere nicht angezeigt", + "data_sync.diff.target_exists": "Vorhanden", + "data_sync.diff.target_missing": "Fehlt", + "data_sync.diff.title": "Vergleichsergebnis", + "data_sync.diff.warning_title": "Die Vorprüfung hat Risiken oder eingeschränkte Punkte gefunden. Prüfen Sie diese vor der Ausführung.", + "data_sync.entry_mode.compare.action.start": "Vergleich starten", + "data_sync.entry_mode.compare.option_title": "Vergleichsoptionen", + "data_sync.entry_mode.compare.result_title": "Vergleichsergebnis", + "data_sync.entry_mode.data_compare.badge": "Datenvergleich", + "data_sync.entry_mode.data_compare.description": "Vergleicht Datenunterschiede zwischen Quell- und Zieltabelle nach Primärschlüssel und zeigt Einfügungen, Aktualisierungen und Löschungen.", + "data_sync.entry_mode.data_compare.hero_description": "Geeignet zum Prüfen der Datenkonsistenz. Es werden nur Unterschiede analysiert und Zeilen angezeigt, ohne Daten zu schreiben.", + "data_sync.entry_mode.data_compare.table_select_label": "Tabellen für den Datenvergleich auswählen:", + "data_sync.entry_mode.data_compare.title": "Datenvergleich", + "data_sync.entry_mode.schema_compare.badge": "Strukturvergleich", + "data_sync.entry_mode.schema_compare.description": "Erzeugt Strukturunterschiede, Kompatibilitätsrisiken und prüfbares SQL zwischen Quell- und Zieltabelle.", + "data_sync.entry_mode.schema_compare.hero_description": "Geeignet vor Releases, um Strukturunterschiede zu prüfen. Es wird nur analysiert und angezeigt, ohne Strukturänderungen auszuführen.", + "data_sync.entry_mode.schema_compare.table_select_label": "Tabellen für den Strukturvergleich auswählen:", + "data_sync.entry_mode.schema_compare.title": "Tabellenstrukturvergleich", + "data_sync.entry_mode.sync.hero_description": "Geeignet, wenn Zieltabellen bereits vorhanden sind. Zuerst Unterschiede analysieren, dann ausgewählte Einfügungen, Aktualisierungen oder Löschungen ausführen.", + "data_sync.field.connection": "Verbindung", + "data_sync.field.database": "Datenbank", + "data_sync.field.migration_content": "Migrationsinhalt", + "data_sync.field.migration_mode": "Migrationsmodus", + "data_sync.field.mongo_collection_name": "Mongo-Collection-Name (optional)", + "data_sync.field.schema": "Schema", + "data_sync.field.source_dataset_mode": "Quelldatenmodus", + "data_sync.field.source_query_sql": "Quellabfrage-SQL", + "data_sync.field.sync_content": "Synchronisierungsinhalt", + "data_sync.field.sync_mode": "Synchronisierungsmodus", + "data_sync.field.target_table": "Zieltabelle", + "data_sync.field.target_table_requirement": "Anforderung an Zieltabelle", + "data_sync.field.target_table_strategy": "Strategie für Zieltabelle", + "data_sync.field.workflow_type": "Funktionstyp", + "data_sync.help.mongo_collection_mongo_to_redis": "Bei MongoDB nach Redis wählen Sie meistens direkt die Quell-Collection. Lassen Sie das Feld leer, sofern kein ausdrücklicher Ersatzname nötig ist.", + "data_sync.help.mongo_collection_redis_to_mongo": "Leer lassen, um den Standard-Collection-Namen zu verwenden. Wenn ein Wert eingetragen ist, schreibt dieser Lauf den Redis-Keyspace in diese Mongo-Collection.", + "data_sync.help.select_tables": "Zu synchronisierende Tabellen auswählen:", + "data_sync.help.source_query_mode": "Geben Sie Quellabfrage-SQL ein und wählen Sie eine Zieltabelle. Die Unterschiedsanalyse vergleicht diese Ergebnismenge direkt mit der Zieltabelle.", + "data_sync.help.workflow_type": "Wählen Sie zuerst, ob dieser Lauf vorhandene Zieltabellen synchronisiert oder eine datenbankübergreifende Migration ausführt. Die Seite passt sicherere Standardwerte an den Funktionstyp an.", + "data_sync.hero.migration_description": "Quelltabellen in eine andere Datenbank übertragen, nach Strategie Tabellen erstellen, Daten importieren und kompatible Indizes ergänzen.", + "data_sync.hero.migration_title": "Datenquellenübergreifende Migration", + "data_sync.hero.sync_description": "Vorhandene Zieltabellen verwenden, zuerst Unterschiede vergleichen und dann ausgewählte Einfügungen, Aktualisierungen oder Löschungen ausführen.", + "data_sync.hero.sync_title": "Datensynchronisierung", + "data_sync.log.level.error": "Fehler", + "data_sync.log.level.info": "Information", + "data_sync.log.level.warn": "Warnung", + "data_sync.log.title": "Ausführungsprotokoll", + "data_sync.message.analysis_complete": "Unterschiedsanalyse abgeschlossen", + "data_sync.message.analysis_failed": "Unterschiedsanalyse fehlgeschlagen", + "data_sync.message.analysis_failed_detail": "Unterschiedsanalyse fehlgeschlagen: {{detail}}", + "data_sync.message.analyze_before_sync": "Analysieren Sie die Unterschiede, bevor Sie die Synchronisierung starten", + "data_sync.message.close_blocked_running": "Die Synchronisierung läuft. Das Fenster kann noch nicht geschlossen werden.", + "data_sync.message.fetch_source_databases_failed": "Quelldatenbanken konnten nicht geladen werden", + "data_sync.message.fetch_source_databases_failed_detail": "Quelldatenbanken konnten nicht geladen werden: {{detail}}", + "data_sync.message.fetch_tables_failed": "Tabellen konnten nicht geladen werden", + "data_sync.message.fetch_tables_failed_detail": "Tabellen konnten nicht geladen werden: {{detail}}", + "data_sync.message.fetch_target_databases_failed": "Zieldatenbanken konnten nicht geladen werden", + "data_sync.message.fetch_target_databases_failed_detail": "Zieldatenbanken konnten nicht geladen werden: {{detail}}", + "data_sync.message.fetch_target_schemas_failed_detail": "Zielschemas konnten nicht geladen werden: {{detail}}", + "data_sync.message.more_items_collapsed": "{{count}} weitere nicht angezeigt", + "data_sync.message.precheck_warnings": "Die Vorprüfung hat Risiken oder eingeschränkte Punkte gefunden. Prüfen Sie diese vor der Ausführung.", + "data_sync.message.preview_load_failed": "Unterschiedsvorschau konnte nicht geladen werden", + "data_sync.message.preview_load_failed_detail": "Unterschiedsvorschau konnte nicht geladen werden: {{detail}}", + "data_sync.message.select_connections_first": "Wählen Sie zuerst die Verbindungen", + "data_sync.message.select_databases_first": "Wählen Sie zuerst die Datenbanken", + "data_sync.message.select_source_database": "Wählen Sie die Quelldatenbank", + "data_sync.message.select_target_database": "Wählen Sie die Zieldatenbank", + "data_sync.message.select_target_schema": "Zielschema auswählen", + "data_sync.message.sync_execution_failed": "Synchronisierungsausführung fehlgeschlagen", + "data_sync.message.sync_execution_failed_detail": "Synchronisierungsausführung fehlgeschlagen: {{detail}}", + "data_sync.modal.full_overwrite_content": "Vollständiges Überschreiben löscht zuerst die Daten der Zieltabelle und fügt danach Zeilen ein. Bestätigen Sie, dass die Zieldatenbank gesichert wurde.", + "data_sync.modal.full_overwrite_ok": "Fortfahren", + "data_sync.modal.full_overwrite_title": "Vollständiges Überschreiben bestätigen", + "data_sync.option.auto_add_columns": "Fehlende Zielspalten automatisch ergänzen (derzeit für MySQL-Ziele und MySQL nach Kingbase; SQL-Ergebnismengenmodus wird nicht unterstützt)", + "data_sync.option.content.both": "Schema und Daten synchronisieren", + "data_sync.option.content.data": "Nur Daten", + "data_sync.option.content.schema": "Nur Schema", + "data_sync.option.create_indexes": "Kompatible normale und eindeutige Indizes automatisch migrieren (nur bei automatischer Tabellenerstellung)", + "data_sync.option.show_same_tables": "Gleiche Tabellen anzeigen", + "data_sync.option.source_dataset.query": "Nach SQL-Ergebnismenge synchronisieren", + "data_sync.option.source_dataset.table": "Nach Tabelle synchronisieren", + "data_sync.option.sync_mode.full_overwrite": "Vollständiges Überschreiben (Zieltabelle vor dem Einfügen leeren)", + "data_sync.option.sync_mode.insert_only": "Nur einfügen (kein Zielvergleich; Tabellen ohne Primärschlüssel werden übersprungen)", + "data_sync.option.sync_mode.insert_update": "Inkrementelle Synchronisierung (Unterschiede vergleichen, danach Einfügungen, Aktualisierungen und Löschungen wählen)", + "data_sync.option.target_strategy.auto_create_if_missing": "Zieltabelle automatisch erstellen, wenn sie fehlt", + "data_sync.option.target_strategy.existing_only": "Nur vorhandene Zieltabellen verwenden", + "data_sync.option.target_strategy.smart": "Intelligenter Modus (bei vorhandener Tabelle direkt importieren, sonst automatisch erstellen)", + "data_sync.option.workflow.migration": "Datenbankübergreifende Migration (automatisch erstellen und importieren)", + "data_sync.option.workflow.sync": "Datensynchronisierung (Unterschiede mit vorhandenen Zieltabellen synchronisieren)", + "data_sync.placeholder.mongo_collection_name": "Mongo-Collection-Namen eingeben", + "data_sync.placeholder.source_query_sql": "Beispiel: SELECT id, name, email FROM users WHERE status = 'active'", + "data_sync.placeholder.target_table": "Eine Zieltabelle auswählen", + "data_sync.plan.add_missing_columns_before_import": "{{count}} fehlende Felder vor dem Import ergänzen", + "data_sync.plan.auto_create_unsupported": "Automatische Tabellenerstellung wird für diese Datenbankkombination nicht unterstützt", + "data_sync.plan.backend_summary": "Planübersicht", + "data_sync.plan.data_import_without_diff": "Der aktuelle Modus importiert Quelltabellendaten ohne Differenzvergleich.", + "data_sync.plan.migrate_to_collection": "In Collection {{collection}} migrieren", + "data_sync.plan.migrate_to_target": "Nach {{target}} migrieren", + "data_sync.plan.migration_kernel_planning": "Dieses Datenbankpaar ist in der Migrationsplanung und wartet auf Strukturableitung und Zieldialekt-Erzeugung", + "data_sync.plan.missing_columns_auto_add": "{{count}} fehlende Felder vor dem Import ergänzen", + "data_sync.plan.missing_columns_auto_add_disabled": "Der Zieltabelle fehlen {{count}} Felder, und automatische Feldergänzung ist nicht aktiviert", + "data_sync.plan.missing_columns_auto_add_unsupported": "Der Zieltabelle fehlen {{count}} Felder, und automatische Feldergänzung wird für diese Datenbankkombination nicht unterstützt", + "data_sync.plan.missing_columns_no_executable_sql": "Der Zieltabelle fehlen {{count}} Felder, aber es wurde kein ausführbares Ergänzungs-SQL erzeugt", + "data_sync.plan.mongo_relational_entry_warning": "Für die {{objectKind}}-Migration von {{sourceType}} zu {{targetType}} ist derzeit nur ein Planungshinweis zur Strukturableitung verfügbar", + "data_sync.plan.mongo_relational_kernel_planned": "Dieses Datenbankpaar ist in der Migrationsplanung und wartet auf Strukturableitung und Zieldialekt-Erzeugung", + "data_sync.plan.mongo_target_collection_missing_auto_create": "Ziel-MongoDB collection {{collection}} fehlt. Sie wird vor dem Import automatisch erstellt.", + "data_sync.plan.mongo_target_collection_missing_manual_create": "Ziel-MongoDB collection {{collection}} fehlt. Erstellen Sie sie zuerst manuell.", + "data_sync.plan.redis_key_to_mongodb_document": "MongoDB-Dokumente aus Redis Keys erzeugen und importieren", + "data_sync.plan.redis_mongo_keyspace_import": "MongoDB-Dokumente aus Redis Keys erzeugen und importieren", + "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis zu MongoDB migriert mit keyspace-Semantik und führt keine Tabellenstrukturprüfungen aus", + "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Redis TTL und collection-Sortiersemantik werden als document-Felder erhalten, sind aber möglicherweise nicht vollständig äquivalent", + "data_sync.plan.redis_mongo_target_collection_auto_create": "Ziel-Collection fehlt; sie wird automatisch erstellt und danach importiert", + "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "Die aktuelle Strategie erfordert eine vorhandene Ziel-MongoDB collection; bei der Ausführung wird sie nicht automatisch erstellt", + "data_sync.plan.redis_mongo_target_collection_missing_manual": "Ziel-Collection fehlt; bitte zuerst manuell erstellen", + "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state werden noch nicht migriert", + "data_sync.plan.schema_aligned": "Tabellenstruktur ist bereits identisch", + "data_sync.plan.schema_changes_detected": "{{count}} Strukturänderungen erkannt", + "data_sync.plan.schema_only": "Nur Struktur synchronisieren", + "data_sync.plan.schema_only_no_data_diff": "Nur Struktur wird synchronisiert; Daten-Differenzanalyse wurde nicht ausgeführt", + "data_sync.plan.schema_preview": "Strukturvorschau", + "data_sync.plan.source_query_preview": "Vorschau für SQL-Ergebnismengen-Sync", + "data_sync.plan.target_collection_missing_auto_create": "Ziel-Collection fehlt; sie wird automatisch erstellt und danach importiert", + "data_sync.plan.target_collection_missing_manual_create": "Ziel-Collection fehlt; bitte zuerst manuell erstellen", + "data_sync.plan.target_missing_auto_create": "Zieltabelle fehlt; sie wird automatisch erstellt und danach importiert", + "data_sync.plan.target_missing_auto_create_all": "Zieltabelle fehlt; beim Ausführen wird sie automatisch erstellt und alle Quelldaten werden importiert", + "data_sync.plan.target_missing_cannot_sync": "Zieltabelle fehlt; Synchronisierung kann nicht ausgeführt werden", + "data_sync.plan.target_missing_manual_create": "Zieltabelle fehlt; bitte zuerst manuell erstellen", + "data_sync.plan.target_missing_preview_unavailable": "Die Zieltabelle fehlt. Differenzvorschau ist nicht verfügbar.", + "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "In der Quelltabelle wurde keine Zeitspalte erkannt, die der ersten TDengine-Spalte zugeordnet werden kann; automatische Tabellenerstellung ist nicht möglich", + "data_sync.plan.tdengine_time_column_missing": "In der Quelltabelle wurde keine Zeitspalte erkannt, die der ersten TDengine-Spalte zugeordnet werden kann; automatische Tabellenerstellung ist nicht möglich", + "data_sync.plan.use_existing_target": "In vorhandene Zieltabelle importieren", + "data_sync.plan.use_existing_target_collection": "In vorhandene Ziel-Collection importieren", + "data_sync.plan.use_existing_target_table": "In vorhandene Zieltabelle importieren", + "data_sync.preview.action.copy_sql": "SQL kopieren", + "data_sync.preview.column.changed_columns": "Geänderte Spalten", + "data_sync.preview.column.data": "Daten", + "data_sync.preview.column.detail": "Einzelheiten", + "data_sync.preview.column.primary_key": "Primärschlüssel", + "data_sync.preview.data_summary": "{{inserts}} einfügen, {{updates}} aktualisieren, {{deletes}} löschen (Vorschau zeigt je Typ höchstens 200 Zeilen)", + "data_sync.preview.delete_warning": "Löschen ist standardmäßig nicht ausgewählt. Aktivieren Sie es erst nach Prüfung der fachlichen Auswirkungen.", + "data_sync.preview.loading": "Unterschiedsvorschau wird geladen...", + "data_sync.preview.message.copy_failed": "Kopieren fehlgeschlagen. Bitte manuell kopieren.", + "data_sync.preview.message.sql_copied": "SQL kopiert", + "data_sync.preview.schema_plan_help": "Die für diesen Schema-Synchronisierungslauf geplanten Anweisungen werden unten angezeigt.", + "data_sync.preview.schema_statement_count": "{{count}} Schemaänderungsanweisungen erkannt", + "data_sync.preview.schema_warning_title": "Die Schemavorschau enthält Risiken oder eingeschränkte Punkte", + "data_sync.preview.selection_hint.delete": "Wenn keine Zeilen ausgewählt sind, werden alle Löschunterschiede synchronisiert. Entfernen Sie Löschen im Vergleichsergebnis, um Löschungen zu überspringen.", + "data_sync.preview.selection_hint.insert": "Wenn keine Zeilen ausgewählt sind, werden alle Einfügungsunterschiede synchronisiert. Entfernen Sie Einfügen im Vergleichsergebnis, um Einfügungen zu überspringen.", + "data_sync.preview.selection_hint.update": "Wenn keine Zeilen ausgewählt sind, werden alle Aktualisierungsunterschiede synchronisiert. Entfernen Sie Aktualisieren im Vergleichsergebnis, um Aktualisierungen zu überspringen.", + "data_sync.preview.side.source": "Quelle", + "data_sync.preview.side.target": "Ziel", + "data_sync.preview.sql.data_help": "Die SQL-Vorschau wird aus den ausgewählten Einfügungen, Aktualisierungen, Löschungen und Zeilenbereichen zur Prüfung erzeugt.", + "data_sync.preview.sql.no_data_sql": "-- Für die aktuelle Auswahl ist kein SQL verfügbar", + "data_sync.preview.sql.no_schema_changes": "-- Für die aktuelle Tabelle gibt es keine ausführbaren Schemaänderungen", + "data_sync.preview.sql.schema_help": "Die SQL-Vorschau zeigt die auszuführenden Schemaänderungsanweisungen zur Prüfung.", + "data_sync.preview.sql.schema_statement_count": "{{count}} Schemaänderungsanweisungen", + "data_sync.preview.sql.statement_count": "{{count}} Anweisungen (Vorschaudaten zeigen je Typ höchstens 200 Zeilen)", + "data_sync.preview.tab.delete": "Löschen({{count}})", + "data_sync.preview.tab.insert": "Einfügen({{count}})", + "data_sync.preview.tab.schema": "Struktur({{count}})", + "data_sync.preview.tab.sql": "SQL({{count}})", + "data_sync.preview.tab.update": "Aktualisieren({{count}})", + "data_sync.preview.title": "Unterschiedsvorschau: {{table}}", + "data_sync.preview.update_detail_title": "Aktualisierungsdetails: {{table}} / {{pk}}", + "data_sync.progress.stage.analysis_completed": "Differenzanalyse abgeschlossen", + "data_sync.progress.stage.analysis_started": "Differenzanalyse gestartet", + "data_sync.progress.stage.analyzing_diff": "Unterschiede werden analysiert", + "data_sync.progress.stage.analyzing_table": "Tabelle wird analysiert ({{current}}/{{total}})", + "data_sync.progress.stage.applying_changes": "Änderungen werden angewendet", + "data_sync.progress.stage.backend_update": "Fortschritt wird verarbeitet", + "data_sync.progress.stage.checking_columns": "Feldkonsistenz wird geprüft", + "data_sync.progress.stage.clearing_target": "Zieltabelle wird geleert", + "data_sync.progress.stage.collection_completed": "Collection-Verarbeitung abgeschlossen", + "data_sync.progress.stage.comparing_diff": "Differenzen werden verglichen", + "data_sync.progress.stage.completed": "Synchronisierung abgeschlossen", + "data_sync.progress.stage.connecting_source": "Verbindung zur Quelldatenbank", + "data_sync.progress.stage.connecting_target": "Verbindung zur Zieldatenbank", + "data_sync.progress.stage.creating_indexes": "Indizes werden erstellt", + "data_sync.progress.stage.creating_target_collection": "Ziel-Collection wird erstellt", + "data_sync.progress.stage.creating_target_table": "Zieltabelle wird erstellt", + "data_sync.progress.stage.executing": "Ausführung läuft", + "data_sync.progress.stage.failed": "Synchronisierung fehlgeschlagen", + "data_sync.progress.stage.migrating_collection": "Collection wird migriert ({{current}}/{{total}})", + "data_sync.progress.stage.migrating_key": "Key wird migriert ({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_collection_completed": "Collection-Verarbeitung abgeschlossen", + "data_sync.progress.stage.mongo_redis_migrating_collection": "Collection wird migriert ({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_started": "MongoDB-zu-Redis-keyspace-Migration gestartet", + "data_sync.progress.stage.mongodb_keyspace_started": "MongoDB-Keyspace-Migration gestartet", + "data_sync.progress.stage.preparing": "Vorbereitung läuft", + "data_sync.progress.stage.reading_source": "Quelldaten werden gelesen", + "data_sync.progress.stage.reading_target": "Zieldaten werden gelesen", + "data_sync.progress.stage.redis_keyspace_started": "Redis-Keyspace-Migration gestartet", + "data_sync.progress.stage.redis_mongo_creating_collection": "Ziel-Collection wird erstellt", + "data_sync.progress.stage.redis_mongo_migrating_key": "Key wird migriert ({{current}}/{{total}})", + "data_sync.progress.stage.redis_mongo_started": "Redis-zu-MongoDB-keyspace-Migration gestartet", + "data_sync.progress.stage.sync_started": "Synchronisierung gestartet", + "data_sync.progress.stage.syncing_schema": "Tabellenstruktur wird synchronisiert", + "data_sync.progress.stage.syncing_table": "Tabelle wird synchronisiert ({{current}}/{{total}})", + "data_sync.progress.stage.table_completed": "Tabellenverarbeitung abgeschlossen", + "data_sync.query_mode.help": "Geben Sie Quellabfrage-SQL ein und wählen Sie eine Zieltabelle. Die Unterschiedsanalyse vergleicht diese Ergebnismenge direkt mit der Zieltabelle.", + "data_sync.result.completed": "Synchronisierung abgeschlossen", + "data_sync.result.failed": "Synchronisierung fehlgeschlagen", + "data_sync.result.failed_description": "Die Synchronisierung wurde nicht abgeschlossen.", + "data_sync.result.failed_detail": "Synchronisierung fehlgeschlagen: {{detail}}", + "data_sync.result.running": "Synchronisierung läuft", + "data_sync.result.running_description": "Aktuelle Phase: {{stage}}{{table}}", + "data_sync.result.success_summary": "{{tables}} Tabellen erfolgreich synchronisiert. Eingefügt: {{inserted}}, aktualisiert: {{updated}}", + "data_sync.result.table_suffix": ", Tabelle: {{table}}", + "data_sync.schema_inference.mongo_relational_issue": "Die Strukturableitung für {{sourceType}} -> {{targetType}} befindet sich noch in Entwicklung; derzeit ist nur ein Hinweis zur Migrationsplanung verfügbar.", + "data_sync.schema_inference.mongo_relational_resolution": "Künftige Iterationen werden Spaltendefinitionen und Typ-Degradationsrichtlinien aus Beispieldaten erzeugen.", + "data_sync.schema_sync.error.create_statement_empty": "Create-table-Anweisung ist leer", + "data_sync.schema_sync.error.create_target_table_failed": "Zieltabelle {{table}} konnte nicht erstellt werden: {{detail}}", + "data_sync.schema_sync.error.get_columns_after_create_failed": "Spalten konnten nach dem Erstellen der Zieltabelle {{table}} nicht abgerufen werden: {{detail}}", + "data_sync.schema_sync.error.get_create_statement_failed": "Create-table-Anweisung der Quelltabelle {{table}} konnte nicht abgerufen werden: {{detail}}", + "data_sync.schema_sync.error.get_source_columns_failed": "Spalten der Quelltabelle {{table}} konnten nicht abgerufen werden: {{detail}}", + "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "Zieltabelle {{table}} fehlt, und Quelltyp {{sourceType}} unterstützt automatische Tabellenerstellung noch nicht: {{detail}}", + "data_sync.schema_sync.log.add_column_failed": "Spalte konnte nicht ergänzt werden: Tabelle={{table}}, Spalte={{column}}, Fehler={{detail}}", + "data_sync.schema_sync.log.column_added": "Spalte ergänzt: Tabelle={{table}}, Spalte={{column}}, Typ={{type}}", + "data_sync.schema_sync.log.completed": "Schema-Synchronisierung für {{table}} abgeschlossen; {{count}} Spalte(n) hinzugefügt", + "data_sync.schema_sync.log.schema_aligned": "Tabellenschema ist abgeglichen: {{table}}", + "data_sync.schema_sync.log.target_created": "Zieltabelle erfolgreich erstellt: {{table}}", + "data_sync.schema_sync.log.target_missing_create": "Zieltabelle {{table}} fehlt; Erstellung des Tabellenschemas wird versucht", + "data_sync.schema_sync.warning.target_unsupported": "Zieldatenbanktyp={{targetType}} unterstützt Schema-Synchronisierung noch nicht; Tabelle {{table}} wurde übersprungen", + "data_sync.section.migration_options": "Migrationsoptionen", + "data_sync.section.source_database": "Quelldatenbank", + "data_sync.section.sync_options": "Synchronisierungsoptionen", + "data_sync.section.target_database": "Zieldatenbank", + "data_sync.step.configure": "Quelle und Ziel konfigurieren", + "data_sync.step.result": "Ausführungsergebnis", + "data_sync.step.select_tables": "Tabellen auswählen", + "data_sync.table_picker.help": "Zu synchronisierende Tabellen auswählen:", + "data_sync.table_picker.item_unit": "Eintrag", + "data_sync.table_picker.items_unit": "Einträge", + "data_sync.table_picker.not_found": "Keine Daten", + "data_sync.table_picker.search_placeholder": "Tabellen suchen...", + "data_sync.table_picker.selected_title": "Ausgewählte Tabellen", + "data_sync.table_picker.show_same": "Gleiche Tabellen anzeigen", + "data_sync.table_picker.source_title": "Quelltabellen", + "data_sync.table.delete": "Löschen", + "data_sync.table.insert": "Einfügen", + "data_sync.table.plan": "Ablaufplan", + "data_sync.table.preview": "Vorschau", + "data_sync.table.risk": "Risiko", + "data_sync.table.same": "Gleich", + "data_sync.table.table_name": "Tabelle", + "data_sync.table.target_exists": "Vorhanden", + "data_sync.table.target_missing": "Fehlt", + "data_sync.table.target_table": "Zieltabelle", + "data_sync.table.update": "Aktualisieren", + "data_sync.title.compare_result": "Vergleichsergebnis", + "data_sync.title.execution_log": "Ausführungsprotokoll", + "data_sync.title.migration": "Datenquellenübergreifende Migration", + "data_sync.title.migration_description": "Tabellenerstellung, Datenimport und Risiko-Vorprüfung von der Quelle bis zum Ziel durchführen.", + "data_sync.title.migration_options": "Migrationsoptionen", + "data_sync.title.migration_workbench": "Arbeitsbereich für datenbankübergreifende Migration", + "data_sync.title.source_database": "Quelldatenbank", + "data_sync.title.sync": "Datensynchronisierung", + "data_sync.title.sync_description": "Unterschiede vergleichen, Synchronisierung ausführen und Ergebnisse mit vorhandenen Zieltabellen bestätigen.", + "data_sync.title.sync_options": "Synchronisierungsoptionen", + "data_sync.title.sync_workbench": "Arbeitsbereich für Datensynchronisierung", + "data_sync.title.target_database": "Zieldatenbank", + "data_sync.transfer.empty": "Keine Daten", + "data_sync.transfer.item_unit": "Eintrag", + "data_sync.transfer.items_unit": "Einträge", + "data_sync.transfer.search_placeholder": "Tabellen suchen...", + "data_sync.transfer.selected_tables": "Ausgewählte Tabellen", + "data_sync.transfer.source_tables": "Quelltabellen", + "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "Quell-ORDER BY/PARTITION/TTL/Projection/materialized-view-Semantik wird noch nicht automatisch nach TDengine migriert", + "data_sync.unsupported.mongo_index_columns_missing": "Index {{name}} hat keine Spaltendefinition und wurde übersprungen", + "data_sync.unsupported.mongo_index_create_command_failed": "MongoDB createIndexes-Befehl für Index {{name}} konnte nicht erzeugt werden: {{detail}}", + "data_sync.unsupported.mongo_index_prefix_length": "Index {{name}} verwendet eine Präfixlänge; äquivalente Migration zu MongoDB wird noch nicht unterstützt", + "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "Quellindizes, Fremdschlüssel, Trigger, Unique Constraints und Auto-Increment-Semantik werden noch nicht automatisch nach TDengine migriert", + "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "Quellindizes, Fremdschlüssel, Trigger, Unique Constraints, Identity- und Sequence-Semantik werden noch nicht automatisch nach TDengine migriert", + "data_sync.unsupported.tdengine_source_relational_semantics": "TDengine-Indizes, Fremdschlüssel, Trigger, Supertables, TTL und weitere Zeitreihen-Semantik werden noch nicht automatisch migriert", + "data_sync.unsupported.tdengine_target_missing_timestamp": "Die erste Spalte einer TDengine regular table muss TIMESTAMP sein; die aktuelle Quelltabelle hat keine direkt zuordenbare Zeitspalte", + "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "Quell-supertable-, TAGS-, TTL-, retention policy- und Index-Semantik werden noch nicht automatisch in eine TDengine regular table migriert", + "data_sync.validation.query_mode_data_only": "Die Synchronisierung von SQL-Ergebnismengen unterstützt nur Datensynchronisierung", + "data_sync.validation.single_target_table_required": "Für die Synchronisierung von SQL-Ergebnismengen ist genau eine Zieltabelle erforderlich", + "data_sync.validation.source_query_required": "Geben Sie Quellabfrage-SQL ein", + "data_sync.validation.table_required": "Wählen Sie mindestens eine Tabelle", + "data_sync.warning.mongo_field_mixed_bson_types": "Feld {{field}} enthält mehrere BSON-Werttypen und wurde zu einem kompatiblen Typ herabgestuft", + "data_sync.warning.mongo_index_type_normalized": "Index {{name}} Typ={{type}} wird als regulärer Index nach MongoDB migriert", + "data_sync.warning.mongo_source_collection_index_read_failed": "Indizes der Quell-MongoDB collection konnten nicht gelesen werden; Indexmigration wurde übersprungen: {{detail}}", + "data_sync.warning.mongo_source_empty_sample_id_only": "Die Quell-MongoDB collection hat keine Beispieldaten; nur eine einfache Primärschlüsselspalte wird aus `_id` erzeugt", + "data_sync.warning.mongo_source_primary_key_missing": "Aus der Quell-MongoDB collection konnte kein stabiler Primärschlüssel abgeleitet werden; die Zieltabelle erstellt keinen Primärschlüssel automatisch", + "data_sync.warning.mongo_source_table_index_read_failed": "Quelltabellenindizes konnten nicht gelesen werden; Indexmigration wurde übersprungen: {{detail}}", + "data_sync.warning.mongo_target_collection_existing_only_required": "Die aktuelle Strategie erfordert eine vorhandene Ziel-MongoDB collection, daher wird sie bei der Ausführung nicht automatisch erstellt", + "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB ist ein Ziel mit flexibler Struktur; die Feldstruktur folgt den geschriebenen document, und Zielspaltenprüfungen werden nicht ausgeführt", + "data_sync.warning.target_exists_strategy_no_auto_create": "Die aktuelle Strategie erfordert eine vorhandene Zieltabelle, daher wird sie bei der Ausführung nicht automatisch erstellt.", + "data_sync.warning.target_missing_columns": "Der Zieltabelle fehlen {{count}} Spalte(n): {{columns}}", + "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "TDengine-Quellen ergänzen vorhandene Zieltabellen derzeit nicht automatisch um Spalten; prüfen Sie zuerst das Zielschema", + "data_sync.warning.tdengine_source_mysql_type_fallback": "Spalte {{column}} Typ {{type}} hat keine dedizierte MySQL-Zuordnung und wurde zu {{targetType}} herabgestuft", + "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "Spalte {{column}} Typ {{type}} wurde zu {{targetType}} zugeordnet, um unsigned-Überlauf zu vermeiden", + "data_sync.warning.tdengine_source_pglike_type_fallback": "Spalte {{column}} Typ {{type}} hat keine dedizierte PG-like-Zuordnung und wurde zu {{targetType}} herabgestuft", + "data_sync.warning.tdengine_source_semantics_degraded": "TDengine zu relationalen Zielen migriert derzeit nur Spalten und Daten; supertable-, TAG-Verknüpfungs-, retention policy- und weitere Zeitreihen-Semantik kann herabgestuft werden oder verloren gehen", + "data_sync.warning.tdengine_source_tag_column_degraded": "Spalte {{column}} ist eine TDengine TAG-Spalte und wird im relationalen Ziel zu einer regulären Spalte herabgestuft", + "data_sync.warning.tdengine_source_tag_column_mapped": "Spalte {{column}} ist eine TDengine TAG-Spalte und wurde als reguläre Spalte zugeordnet", + "data_sync.warning.tdengine_target_auto_create_basic_table_only": "TDengine-Ziel-auto-create erstellt derzeit nur eine Basistabelle; Indizes, Fremdschlüssel, Trigger, supertable/TAGS/TTL werden nicht automatisch migriert", + "data_sync.warning.tdengine_target_auto_increment_not_migrated": "Auto-Increment-Semantik der Spalte {{column}} wird nicht nach TDengine migriert", + "data_sync.warning.tdengine_target_binary_type_fallback": "Spalte {{column}} Typ {{type}} wurde nach String-Semantik zu {{targetType}} herabgestuft", + "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "Spalte {{column}} Typ {{type}} wurde zur ersten TDengine TIMESTAMP-Spalte hochgestuft", + "data_sync.warning.tdengine_target_empty_type_fallback": "Spalte {{column}} hat einen leeren Typ und wurde zu {{targetType}} herabgestuft", + "data_sync.warning.tdengine_target_enum_type_fallback": "Spalte {{column}} enum-Typ {{type}} wurde zu {{targetType}} herabgestuft", + "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "TDengine-Ziele ergänzen vorhandene Zieltabellen derzeit nicht automatisch um Spalten; prüfen Sie zuerst das Zielschema", + "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "FixedString-Länge der Spalte {{column}} konnte nicht geparst werden und wurde zu {{targetType}} herabgestuft", + "data_sync.warning.tdengine_target_identity_not_migrated": "Auto-Increment-/Identity-Semantik der Spalte {{column}} wird nicht nach TDengine migriert", + "data_sync.warning.tdengine_target_insert_only": "TDengine-Ziele unterstützen derzeit nur INSERT-Schreibvorgänge; update/delete-Differenzen werden bei der Ausführung abgelehnt", + "data_sync.warning.tdengine_target_json_regular_table_fallback": "Spalte {{column}} Typ {{type}} erhält in TDengine regular table keine TAG-Semantik und wurde zu {{targetType}} herabgestuft", + "data_sync.warning.tdengine_target_json_tag_only_fallback": "Spalte {{column}} Typ {{type}} wurde zu {{targetType}} herabgestuft, da TDengine JSON nur für TAG gilt", + "data_sync.warning.tdengine_target_missing_time_column": "Die Quelltabelle hat keine zuordenbare Zeitspalte, daher ist automatische Tabellenerstellung nicht verfügbar. Bereiten Sie vor dem Fortfahren die TDengine-Zieltabelle und Zeitspalte manuell vor.", + "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "Primärschlüssel-Semantik der Spalte {{column}} wird nicht als relationaler Constraint nach TDengine migriert", + "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "Spalte {{column}} Typ {{type}} hat keine dedizierte TDengine-Same-Database-Zuordnung und wurde zu {{targetType}} herabgestuft", + "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "Spalte {{column}} ist eine TDengine TAG-Spalte und wird nach der Migration zu regular table zu einer regulären Spalte herabgestuft", + "data_sync.warning.tdengine_target_time_only_type_fallback": "Spalte {{column}} Typ {{type}} hat keine stabile TDengine time-only-Zuordnung und wurde zu {{targetType}} herabgestuft", + "data_sync.warning.tdengine_target_timestamp_column_reordered": "TDengine-Basistabellen erfordern die Zeitspalte zuerst; Spalte {{column}} wurde an die erste Position verschoben", + "data_sync.warning.tdengine_target_type_fallback": "Spalte {{column}} Typ {{type}} wurde zu {{targetType}} herabgestuft", + "data_sync.warning.tdengine_target_type_no_mapping_fallback": "Spalte {{column}} Typ {{type}} hat keine dedizierte TDengine-Zuordnung und wurde zu {{targetType}} herabgestuft", + "data_sync.warning.tdengine_target_user_defined_type_fallback": "Spalte {{column}} ist ein benutzerdefinierter Typ und wurde zu {{targetType}} herabgestuft", + "data_viewer.message.connection_not_found": "Verbindung nicht gefunden", + "data_viewer.message.duckdb_query_timeout": "Die DuckDB-Abfrage hat das Verbindungstimeout überschritten und wurde unterbrochen. Erhöhen Sie das Verbindungstimeout oder verkleinern Sie den Sortier-/Filterbereich und versuchen Sie es erneut.", + "data_viewer.message.fetch_data_failed_detail": "Fehler beim Abrufen der Daten: {{detail}}", + "data_viewer.message.mongo_filter_invalid_detail": "MongoDB-Filterbedingung ist ungültig: {{detail}}", + "data_viewer.message.mongo_filter_parse_failed": "Analyse fehlgeschlagen", + "data_viewer.message.query_failed": "Abfrage fehlgeschlagen", + "data_viewer.message.query_timeout": "Die Abfrage hat das Verbindungstimeout überschritten und wurde unterbrochen. Erhöhen Sie das Verbindungstimeout oder verkleinern Sie den Abfragebereich und versuchen Sie es erneut.", + "data_viewer.message.result_not_ready": "Die aktuelle Ergebnismenge ist noch nicht bereit. Laden Sie zuerst einmal Daten.", + "data_viewer.message.sort_buffer_retry_succeeded": "Der Sortierpuffer wurde automatisch erhöht und die Abfrage erfolgreich erneut ausgeführt.", + "data_viewer.message.total_count_failed": "Gesamtanzahl konnte nicht ermittelt werden", + "data_viewer.message.total_count_failed_detail": "Gesamtanzahl konnte nicht ermittelt werden: {{detail}}", + "data_viewer.message.total_count_parse_failed": "Gesamtanzahl-Ergebnis konnte nicht ausgewertet werden", "data_viewer.read_only.reason.duckdb_rowid_missing": "Es wurde kein Primärschlüssel, nutzbarer eindeutiger Index oder DuckDB rowid gefunden, deshalb können Änderungen nicht sicher gesendet werden.", + "data_viewer.read_only.reason.index_metadata_unavailable": "Metadaten zum eindeutigen Index konnten nicht geladen werden, deshalb können Änderungen nicht sicher gesendet werden.", + "data_viewer.read_only.reason.metadata_unavailable": "Metadaten zu Primärschlüssel oder eindeutigem Index konnten nicht geladen werden, deshalb können Änderungen nicht sicher gesendet werden.", + "data_viewer.read_only.reason.mongo_id_missing": "Im MongoDB-Ergebnis fehlt _id, deshalb können Änderungen nicht sicher gesendet werden.", + "data_viewer.read_only.reason.no_safe_locator": "Es wurde kein Primärschlüssel oder nutzbarer eindeutiger Index gefunden, deshalb können Änderungen nicht sicher gesendet werden.", + "data_viewer.read_only.reason.oracle_rowid_missing": "Es wurde kein Primärschlüssel oder nutzbarer eindeutiger Index gefunden, und Oracle ROWID fehlt im Ergebnis, deshalb können Änderungen nicht sicher gesendet werden.", + "data_viewer.read_only.reason.primary_key_column_missing": "Im Ergebnis fehlt die Primärschlüsselspalte {{columns}}, deshalb können Änderungen nicht sicher gesendet werden.", + "data_viewer.read_only.warning.collection": "Collection {{target}} bleibt schreibgeschützt: {{reason}}", + "data_viewer.read_only.warning.table": "Tabelle {{target}} bleibt schreibgeschützt: {{reason}}", + "data_viewer.sql_log.phase.complex_type_fallback_retry": "Fallback-Wiederholung für komplexe Typen", + "data_viewer.sql_log.phase.main_query": "Hauptabfrage", + "data_viewer.sql_log.phase.sort_buffer_retry": "Wiederholung ({{size}} sort_buffer)", + "database.label": "Datenbank", + "database.unnamed": "Unbenannte Datenbank", "db.backend.action.delete": "Löschen", "db.backend.action.update": "Aktualisieren", "db.backend.error.batch_insert_exec_required": "Die Ausführungsfunktion ist erforderlich", @@ -6979,6 +4485,41 @@ "definition_viewer.edit.comment_empty_definition": "Die aktuelle Objektdefinition ist leer. Vervollständigen Sie vor der Ausführung das DDL für {{name}}", "definition_viewer.edit.comment_title": "{{object}} bearbeiten: {{name}}", "definition_viewer.edit.tab_title": "{{object}} bearbeiten: {{name}}", + "definition_viewer.editor.event_definition_not_found": "Ereignisdefinition nicht gefunden", + "definition_viewer.editor.event_fragment_fallback.header": "Die aktuelle Datenquelle hat keine vollständige CREATE EVENT-Anweisung zurückgegeben; ein Ereignisdefinitionsfragment wurde zurückgegeben", + "definition_viewer.editor.metadata_fallback.header": "Die aktuelle Datenquelle hat keinen ausführbaren Definitionstext zurückgegeben; Metadaten wurden zurückgegeben", + "definition_viewer.editor.metadata_fallback.name_label": "Name", + "definition_viewer.editor.metadata_fallback.type_label": "Typ", + "definition_viewer.editor.object_definition_not_found": "{{object}}definition nicht gefunden", + "definition_viewer.editor.routine_definition_not_found": "Funktions-/Prozedurdefinition nicht gefunden", + "definition_viewer.editor.sphinx.compat_queries_hint": "Mehrere Kompatibilitätsabfragen wurden ausgeführt. Ursache können Versionsbeschränkungen oder ein nicht unterstützter Objekttyp sein.", + "definition_viewer.editor.sphinx.empty_result": "Die aktuelle Sphinx-Instanz{{version}} hat keine {{object}}definition zurückgegeben.", + "definition_viewer.editor.sphinx.failed_message_label": "Zurückgegebene Fehlermeldung", + "definition_viewer.editor.sphinx.failed_message_unknown": "Zurückgegebene Fehlermeldung: Unbekannter Fehler", + "definition_viewer.editor.sphinx.unsupported_query": "Die aktuelle Sphinx-Instanz{{version}} unterstützt das Abfragen von {{object}}definitionen nicht.", + "definition_viewer.editor.sphinx.version_suffix": " (Version: {{version}})", + "definition_viewer.editor.unsupported_event_definition": "Dieser Datenbanktyp unterstützt das Anzeigen von Ereignisdefinitionen nicht", + "definition_viewer.editor.unsupported_object_definition": "Diese Objektdefinition wird nicht unterstützt", + "definition_viewer.editor.unsupported_routine_definition": "Dieser Datenbanktyp unterstützt das Anzeigen von Funktions-/Prozedurdefinitionen nicht", + "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite unterstützt keine Verwaltung von Funktions-/Prozedurdefinitionen", + "definition_viewer.editor.unsupported_view_definition": "Dieser Datenbanktyp unterstützt das Anzeigen von Ansichtsdefinitionen nicht", + "definition_viewer.editor.view_definition_not_found": "Ansichtsdefinition nicht gefunden", + "definition_viewer.error.connection_not_found": "Datenbankverbindung nicht gefunden", + "definition_viewer.error.event_name_empty": "Ereignisname ist leer", + "definition_viewer.error.load_failed": "Laden fehlgeschlagen", + "definition_viewer.error.query_failed": "Definitionsabfrage fehlgeschlagen", + "definition_viewer.error.query_failed_detail": "Definitionsabfrage fehlgeschlagen: {{detail}}", + "definition_viewer.error.routine_name_empty": "Funktions-/Prozedurname ist leer", + "definition_viewer.error.view_name_empty": "Ansichtsname ist leer", + "definition_viewer.field.database": "Datenbank", + "definition_viewer.field.type": "Typ", + "definition_viewer.loading.event_definition": "Ereignisdefinition wird geladen...", + "definition_viewer.loading.routine_definition": "Funktions-/Prozedurdefinition wird geladen...", + "definition_viewer.loading.view_definition": "Ansichtsdefinition wird geladen...", + "definition_viewer.object.event": "Ereignis", + "definition_viewer.object.materialized_view": "Materialisierte Ansicht", + "definition_viewer.object.routine": "Funktion/Prozedur", + "definition_viewer.object.view": "Ansicht", "definition_viewer.warning.refresh_latest_failed": "Neueste Definition konnte nicht aktualisiert werden", "dev.perf_data_grid.columns": "Spalten", "dev.perf_data_grid.density.comfortable": "Standard", @@ -6993,41 +4534,106 @@ "dev.perf_data_grid.ui_version.legacy_short": "Alt", "dev.perf_data_grid.ui_version.v2": "Neue UI", "dev.perf_data_grid.ui_version.v2_short": "Neu", + "driver_manager.action.close": "Schließen", + "driver_manager.action.import_directory": "Treiberordner importieren", + "driver_manager.action.import_package": "Treiberpaket importieren", + "driver_manager.action.install_enable": "Installieren und aktivieren", + "driver_manager.action.logs": "Protokoll", + "driver_manager.action.network_check": "Netzwerk prüfen", + "driver_manager.action.open_directory": "Treiberordner öffnen", + "driver_manager.action.open_global_proxy_settings": "Globale Proxy-Einstellungen öffnen", + "driver_manager.action.refresh": "Aktualisieren", + "driver_manager.action.remove": "Entfernen", "driver_manager.action.switch_version": "Version wechseln", + "driver_manager.backend.dialog.select_download_directory": "Treiber-Downloadordner auswählen", + "driver_manager.backend.dialog.select_package_directory": "Treiberpaketordner auswählen", + "driver_manager.backend.dialog.select_package_file": "Treiberpaketdatei auswählen (kein JDBC Jar)", + "driver_manager.backend.driver_fallback_name": "Treiber", "driver_manager.backend.error.agent_hash_failed": "Pruefsumme des Treiber-Agents konnte nicht berechnet werden: {{detail}}", "driver_manager.backend.error.agent_metadata_unavailable": "Versionsmetadaten des {{name}}-driver-agent sind nicht verfuegbar. Installiere den zur aktuellen Version passenden driver-agent: {{detail}}", "driver_manager.backend.error.agent_path_occupied_by_directory": "Pfad des {{name}}-Treiber-Agents ist durch einen Ordner belegt: {{path}}", "driver_manager.backend.error.agent_revision_mismatch": "Revision des {{name}}-driver-agent stimmt nicht ueberein (installiert: {{actual}}, erforderlich: {{expected}}). Installiere den zur aktuellen Version passenden driver-agent.", "driver_manager.backend.error.agent_revision_mismatch_empty_actual": "Revision des {{name}}-driver-agent stimmt nicht ueberein (installiert: leer, erforderlich: {{expected}}). Installiere den zur aktuellen Version passenden driver-agent.", + "driver_manager.backend.error.api_url_empty": "API URL ist leer", + "driver_manager.backend.error.asset_name_empty": "Treiber-Assetname ist leer", + "driver_manager.backend.error.builtin_download_not_required": "Integrierte Treiber benötigen keine Downloads von Erweiterungspaketen", + "driver_manager.backend.error.builtin_install_not_required": "Integrierte Treiber benötigen keine Installation von Erweiterungspaketen", + "driver_manager.backend.error.builtin_package_not_required": "Integrierte Treiber haben keine Installationspakete", + "driver_manager.backend.error.builtin_remove_not_allowed": "Integrierte Treiber können nicht entfernt werden", + "driver_manager.backend.error.builtin_version_not_required": "Integrierte Treiber benötigen keine Versionsauswahl", + "driver_manager.backend.error.bundle_download_failed": "Treiberbundle konnte nicht heruntergeladen werden: {{detail}}", "driver_manager.backend.error.bundle_entry_missing": "{{name}} wurde im Treiberbundle nicht gefunden (erwarteter Pfad: {{path}})", + "driver_manager.backend.error.bundle_index_asset_missing": "Treiberbundle-Index-Asset wurde nicht gefunden", + "driver_manager.backend.error.bundle_index_empty": "Treiberbundle-Index ist leer", + "driver_manager.backend.error.bundle_index_fetch_failed": "Treiberbundle-Index konnte nicht abgerufen werden: {{detail}}", + "driver_manager.backend.error.bundle_index_parse_failed": "Treiberbundle-Index konnte nicht gelesen werden: {{detail}}", + "driver_manager.backend.error.bundle_url_empty": "Download-URL des Treiberbundles ist leer", "driver_manager.backend.error.bundled_agent_hash_failed": "Pruefsumme des gebündelten {{name}}-Treiber-Agents konnte nicht berechnet werden: {{detail}}", + "driver_manager.backend.error.cache_key_empty": "Cache key ist leer", "driver_manager.backend.error.chmod_agent_failed": "Berechtigungen des Treiber-Agents konnten nicht gesetzt werden: {{detail}}", "driver_manager.backend.error.close_agent_file_failed": "Treiber-Agent-Datei konnte nicht geschlossen werden: {{detail}}", "driver_manager.backend.error.copy_bundled_agent_failed": "Gebündelter {{name}}-Treiber-Agent konnte nicht kopiert werden: {{detail}}", "driver_manager.backend.error.copy_runtime_dependency_entry_failed": "Laufzeitabhaengigkeit {{name}} konnte nicht kopiert werden: {{detail}}", "driver_manager.backend.error.copy_runtime_dependency_failed": "{{name}}-Laufzeitabhaengigkeiten konnten nicht kopiert werden: {{detail}}", "driver_manager.backend.error.create_agent_temp_file_failed": "Temporaere Datei fuer Treiber-Agent konnte nicht erstellt werden: {{detail}}", + "driver_manager.backend.error.create_directory_failed": "Treiberordner konnte nicht erstellt werden: {{detail}}", "driver_manager.backend.error.create_named_directory_failed": "{{name}}-Treiberordner konnte nicht erstellt werden: {{detail}}", + "driver_manager.backend.error.download_failed": "Download fehlgeschlagen: {{detail}}", + "driver_manager.backend.error.download_url_empty": "Download-URL ist leer", + "driver_manager.backend.error.driver_type_empty": "Treibertyp ist leer", + "driver_manager.backend.error.driver_version_list_fetch_failed": "Treiberversionsliste konnte nicht abgerufen werden: {{detail}}", + "driver_manager.backend.error.driver_version_list_parse_failed": "Treiberversionsliste konnte nicht gelesen werden: {{detail}}", "driver_manager.backend.error.driver_version_unsupported": "{{name}}-Version {{version}} wird nicht unterstützt", "driver_manager.backend.error.extract_runtime_dependency_failed": "Laufzeitabhaengigkeit {{name}} konnte nicht entpackt werden: {{detail}}", + "driver_manager.backend.error.file_manifest_url_invalid": "Ungültige Datei-Treiber-Manifest-URL", + "driver_manager.backend.error.file_path_empty": "Dateipfad ist leer", "driver_manager.backend.error.go_not_found_prebuilt_missing": "Go ist in der aktuellen Umgebung nicht installiert, und es wurde kein verfuegbares vorkompiliertes {{name}}-Agent-Paket gefunden", "driver_manager.backend.error.import_local_agent_failed": "Lokaler Treiber-Agent konnte nicht importiert werden: {{detail}}", "driver_manager.backend.error.import_local_agent_runtime_failed": "Laufzeitabhaengigkeiten des lokalen Treiber-Agents konnten nicht importiert werden: {{detail}}", "driver_manager.backend.error.install_prebuilt_package_failed": "Vorkompiliertes Treiberpaket konnte nicht installiert werden: {{detail}}", "driver_manager.backend.error.local_directory_entry_missing": "{{name}}-Agent-Datei wurde im Ordner nicht gefunden (bevorzugter Pfad: {{path}}, Kandidatendateinamen: {{assetCandidates}} / {{baseCandidates}})", "driver_manager.backend.error.local_directory_not_directory": "Pfad des lokalen Treiberordners ist kein Ordner: {{path}}", + "driver_manager.backend.error.local_directory_path_empty": "Lokaler Treiberordnerpfad ist leer", "driver_manager.backend.error.local_directory_scan_limit": "Lokaler Treiberordner enthält zu viele Einträge (über {{max}}). Grenzen Sie den Ordner ein oder wählen Sie direkt eine zip-/Einzeldatei.", + "driver_manager.backend.error.local_manifest_url_invalid": "Ungültige lokale Treiber-Manifest-URL", "driver_manager.backend.error.local_package_entry_missing": "{{name}}-Agent-Datei wurde im lokalen Treiberpaket nicht gefunden (erwarteter Pfad: {{path}})", + "driver_manager.backend.error.local_package_path_empty": "Lokaler Treiberpaketpfad ist leer", + "driver_manager.backend.error.manifest_fetch_failed": "Treiber-Manifest konnte nicht abgerufen werden: {{detail}}", + "driver_manager.backend.error.manifest_parse_failed": "Treiber-Manifest konnte nicht gelesen werden: {{detail}}", + "driver_manager.backend.error.manifest_scheme_unsupported": "Nicht unterstütztes Treiber-Manifest-URL-Schema: {{scheme}}", + "driver_manager.backend.error.manifest_too_large": "Treiber-Manifest überschreitet die Größenbegrenzung", + "driver_manager.backend.error.manifest_url_empty": "Treiber-Manifest-URL ist leer", "driver_manager.backend.error.metadata_file_write_failed": "Driver-Metadatendatei konnte nicht geschrieben werden: {{detail}}", "driver_manager.backend.error.metadata_payload_encode_failed": "Driver-Metadaten konnten nicht serialisiert werden: {{detail}}", + "driver_manager.backend.error.module_path_empty": "Modulpfad ist leer", + "driver_manager.backend.error.module_version_list_empty": "Modulversionsliste ist leer", + "driver_manager.backend.error.module_version_list_fetch_failed": "Modulversionsliste konnte nicht abgerufen werden: {{detail}}", + "driver_manager.backend.error.module_version_list_read_failed": "Modulversionsliste konnte nicht gelesen werden: {{detail}}", + "driver_manager.backend.error.mongo_version_unsupported": "MongoDB-Version {{version}} wird nicht unterstützt; unterstützt werden nur 1.17.x und 2.x", "driver_manager.backend.error.named_agent_hash_failed": "Pruefsumme des {{name}}-Treiber-Agents konnte nicht berechnet werden: {{detail}}", "driver_manager.backend.error.named_chmod_agent_failed": "Berechtigungen des {{name}}-Treiber-Agents konnten nicht gesetzt werden: {{detail}}", + "driver_manager.backend.error.no_driver_versions": "Keine verfügbaren Treiberversionen gefunden", + "driver_manager.backend.error.open_bundle_failed": "Treiberbundle konnte nicht geöffnet werden: {{detail}}", + "driver_manager.backend.error.open_directory_failed": "Treiberordner konnte nicht geöffnet werden: {{detail}}", + "driver_manager.backend.error.open_directory_unsupported": "Ordner können auf dieser Plattform nicht geöffnet werden: {{platform}}", + "driver_manager.backend.error.open_local_package_failed": "Lokales Treiberpaket konnte nicht geöffnet werden: {{detail}}", + "driver_manager.backend.error.optional_go_only": "Hier können nur optionale Go-Treiber installiert und aktiviert werden", + "driver_manager.backend.error.package_size_unsupported": "Dieser Treiber unterstützt keine Abfragen zur Installationspaketgröße", + "driver_manager.backend.error.prebuilt_downloads_failed": "Vorkompiliertes Paket konnte nicht heruntergeladen werden: {{detail}}", + "driver_manager.backend.error.read_bundle_entry_failed": "Eintrag im Treiberbundle konnte nicht gelesen werden: {{detail}}", + "driver_manager.backend.error.read_local_directory_failed": "Lokaler Treiberordner konnte nicht gelesen werden: {{detail}}", + "driver_manager.backend.error.read_local_package_entry_failed": "Eintrag im lokalen Treiberpaket konnte nicht gelesen werden: {{detail}}", + "driver_manager.backend.error.read_local_package_failed": "Lokales Treiberpaket konnte nicht gelesen werden: {{detail}}", + "driver_manager.backend.error.release_empty": "Release ist leer", + "driver_manager.backend.error.release_info_fetch_failed": "Release-Informationen konnten nicht abgerufen werden: {{detail}}", "driver_manager.backend.error.remove_installed_agent_failed": "Installierter {{name}}-Treiber-Agent konnte nicht entfernt werden: {{detail}}", + "driver_manager.backend.error.remove_package_failed": "Treiberpaket konnte nicht entfernt werden: {{detail}}", "driver_manager.backend.error.replace_agent_failed": "Treiber-Agent konnte nicht ersetzt werden: {{detail}}", "driver_manager.backend.error.runtime_dependency_directory_empty": "Verzeichnis fuer Laufzeitabhaengigkeiten ist leer", "driver_manager.backend.error.runtime_dependency_entry_missing": "Im Treiberpaket fehlt die Laufzeitabhaengigkeit: {{name}}", "driver_manager.backend.error.runtime_dependency_required": "{{name}} benoetigt auf der aktuellen Plattform mitgelieferte Laufzeitabhaengigkeiten ({{files}}); eine Einzeldatei-Agent-Installation wird nicht unterstuetzt. Verwenden Sie das Treiberbundle, eine dedizierte Treiber-zip-Datei oder einen lokalen Quellbuild.", "driver_manager.backend.error.runtime_dependency_target_directory_empty": "Zielverzeichnis fuer Laufzeitabhaengigkeiten ist leer", + "driver_manager.backend.error.scan_local_directory_failed": "Lokaler Treiberordner konnte nicht gescannt werden: {{detail}}", "driver_manager.backend.error.source_build_command_failed": "{{name}}-Treiber-Agent konnte nicht gebaut werden: {{detail}}; Ausgabe: {{output}}", "driver_manager.backend.error.source_build_duckdb_windows_cgo_toolchain_prepare_failed": "Vorbereitung der DuckDB Windows CGO-Toolchain fehlgeschlagen: {{detail}}", "driver_manager.backend.error.source_build_duckdb_windows_dlltool_resolve_failed": "DuckDB Windows dlltool konnte nicht gefunden werden: {{detail}}", @@ -7036,6 +4642,7 @@ "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found": "Es wurde kein verwendbares gcc.exe/g++.exe gefunden; {{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found_with_checked": "Es wurde kein verwendbares gcc.exe/g++.exe gefunden. Geprueft: {{checked}}; {{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_toolchain_install_hint": "Bitte installieren Sie zuerst die MSYS2 UCRT64-Toolchain: winget install --id MSYS2.MSYS2 -e; fuehren Sie dann C:\\msys64\\usr\\bin\\bash.exe -lc \"pacman -S --needed --noconfirm mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-binutils\" aus", + "driver_manager.backend.error.source_build_failed": "Lokaler Quellbuild fehlgeschlagen: {{detail}}", "driver_manager.backend.error.source_build_go_mod_read_failed": "go.mod konnte nicht gelesen werden: {{detail}}", "driver_manager.backend.error.source_build_module_dependency_missing": "Die Treiberabhängigkeit wurde in go.mod nicht gefunden: {{modulePath}}", "driver_manager.backend.error.source_build_module_or_version_empty": "Treibermodul oder Version ist leer", @@ -7047,53 +4654,297 @@ "driver_manager.backend.error.source_build_timeout": "Build des {{name}}-Treiber-Agents ist abgelaufen (ueber {{timeout}}). Verwenden Sie bevorzugt ein vorkompiliertes Treiberpaket oder den Import eines lokalen Treiberpakets.", "driver_manager.backend.error.source_build_workdir_unavailable": "Aktuelles Verzeichnis konnte nicht ermittelt werden: {{detail}}", "driver_manager.backend.error.sync_agent_failed": "Treiber-Agent konnte nicht auf den Datentraeger geschrieben werden: {{detail}}", + "driver_manager.backend.error.tag_empty": "Tag ist leer", + "driver_manager.backend.error.unknown": "Unbekannter Fehler", + "driver_manager.backend.error.unsupported_driver_type": "Nicht unterstützter Treibertyp", + "driver_manager.backend.error.version_empty": "Version ist leer", "driver_manager.backend.error.write_agent_failed": "Treiber-Agent konnte nicht geschrieben werden: {{detail}}", "driver_manager.backend.error.zip_entry_empty": "Zip-Eintrag ist leer", + "driver_manager.backend.message.download_failed_detail": "Treiber konnte nicht heruntergeladen und installiert werden: {{detail}}", + "driver_manager.backend.message.driver_install_success": "Treiber erfolgreich installiert", + "driver_manager.backend.message.jdbc_jar_unsupported": "JDBC Jar-Dateien können nicht direkt importiert werden. GoNavi verwendet Go-Treiber und optionale driver-agent-Pakete; nutze stattdessen ein Treiberpaket oder einen Treiberordner. Für Verbindungen zu Kingbase verwende bevorzugt den Verbindungstyp Kingbase oder trage kingbase / kingbase8 in einer benutzerdefinierten Verbindung ein.", + "driver_manager.backend.message.local_import_failed_detail": "Lokales Treiberpaket konnte nicht importiert werden: {{detail}}", + "driver_manager.backend.message.log_hint": " (Detailprotokoll: {{path}})", + "driver_manager.backend.message.metadata_write_failed_detail": "Treibermetadaten konnten nicht geschrieben werden: {{detail}}", + "driver_manager.backend.message.opened_directory": "Treiberordner geöffnet: {{path}}", + "driver_manager.backend.message.package_removed": "Treiberpaket entfernt", + "driver_manager.backend.message.runtime_directory_configured": "Treiber-Laufzeitordner ist konfiguriert", + "driver_manager.backend.message.unsupported_builtin_manifest_url": "Nicht unterstützte integrierte Treiber-Manifest-URL: {{url}}", + "driver_manager.backend.network.error.probe_host_missing": "Prüf-URL enthält keinen Host", + "driver_manager.backend.network.error.probe_url_empty": "Prüf-URL ist leer", "driver_manager.backend.network.error.timeout": "Zeitüberschreitung bei der Netzwerkverbindung", + "driver_manager.backend.network.probe.github_driver_release": "GitHub-Treiber-Releases", + "driver_manager.backend.network.probe.github_release_asset_domain": "GitHub Release-Asset-Domain", + "driver_manager.backend.network.probe.go_module_proxy": "Go-Modulproxy", + "driver_manager.backend.network.summary.download_chain_unreachable": "Die GitHub API ist erreichbar, aber die Treiber-Downloadkette ist nicht erreichbar. Aktiviere zuerst den globalen GoNavi-Proxy, erlaube github.com, api.github.com, release-assets.githubusercontent.com, objects.githubusercontent.com und raw.githubusercontent.com in den Proxyregeln, und erwäge danach TUN-Modus, falls es weiterhin fehlschlägt.", + "driver_manager.backend.package_size.built_in": "Integriert", + "driver_manager.backend.package_size.to_be_published": "Noch zu veröffentlichen", + "driver_manager.backend.progress.fallback.bundle_available": "Direktlink nicht verfügbar; Wechsel zum Treiberbundle-Fallback ({{name}}, {{bundle}} Bundle-Quellen verbleiben)", + "driver_manager.backend.progress.fallback.direct_to_bundle": "Vorkompilierte Direktlinks passten nicht; Wechsel zum Treiberbundle-Fallback ({{name}}, {{bundle}} Bundle-Quellen verbleiben)", + "driver_manager.backend.progress.fallback.explicit_skip_bundle": "Vorkompilierte Direktlinks passten nicht; nur explizite Assets erlaubt, Treiberbundle wird übersprungen ({{name}})", + "driver_manager.backend.progress.fallback.source_build": "Release-Assets passten nicht; lokaler Quellbuild-Fallback wird vorbereitet ({{name}})", + "driver_manager.backend.progress.plan.bundle_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); keine vorkompilierten Direktlinks, {{bundle}} Treiberbundle-Quellen werden versucht", + "driver_manager.backend.progress.plan.direct_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); {{direct}} vorkompilierte Direktlinks werden versucht", + "driver_manager.backend.progress.plan.direct_then_bundle": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); {{direct}} vorkompilierte Direktlinks, danach {{bundle}} Treiberbundle-Quellen", + "driver_manager.backend.progress.plan.explicit_direct": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); nur explizite Versionsassets, {{direct}} vorkompilierte Direktlinks", + "driver_manager.backend.progress.plan.source_fallback": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); bei nicht passenden Release-Assets wird auf lokalen Quellbuild zurückgegriffen", + "driver_manager.backend.progress.plan.source_first": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); zuerst lokaler Quellbuild, danach Download-Fallback", + "driver_manager.backend.progress.plan.source_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); diese Version erlaubt nur lokale Quellbuilds", + "driver_manager.backend.status.affected_connections": "Betrifft {{count}} gespeicherte Verbindungen", + "driver_manager.backend.status.agent_arch_incompatible_detail": "Die Architektur des {{name}}-Treiberagenten ist inkompatibel: Datei={{file}}, aktueller Prozess={{process}}. Installiere und aktiviere ihn im Driver Manager erneut.", + "driver_manager.backend.status.agent_missing": "{{name}}-Treiberagent fehlt. Installiere und aktiviere ihn im Driver Manager erneut.", + "driver_manager.backend.status.agent_path_failed": "Pfad des {{name}}-Treiberagenten konnte nicht aufgelöst werden. Installiere und aktiviere ihn im Driver Manager erneut.", "driver_manager.backend.status.agent_revision_update_detail": "Grund: Die aktuelle GoNavi-Version erfordert den aktualisierten {{name}} driver-agent (Revision: {{expected}}). Auswirkung: Der driver-agent ist eine separate Binärdatei und wird nicht automatisch mit dem Hauptprogramm aktualisiert. Ohne Neuinstallation läuft weiter die alte Agent-Logik, sodass treiberseitige Fehlerbehebungen oder Optimierungen nicht wirksam werden und alte Probleme bestehen bleiben können. Eine Neuinstallation des passenden driver-agent wird dringend empfohlen.", "driver_manager.backend.status.agent_revision_update_detail_with_actual": "Grund: Die aktuelle GoNavi-Version erfordert den aktualisierten {{name}} driver-agent (Revision: {{expected}}). Auswirkung: Der driver-agent ist eine separate Binärdatei und wird nicht automatisch mit dem Hauptprogramm aktualisiert. Ohne Neuinstallation läuft weiter die alte Agent-Logik, sodass treiberseitige Fehlerbehebungen oder Optimierungen nicht wirksam werden und alte Probleme bestehen bleiben können. Eine Neuinstallation des passenden driver-agent wird dringend empfohlen (installierter Marker: {{actual}}, erforderlich: {{expected}}).", + "driver_manager.backend.status.agent_unavailable_reinstall": "{{name}}-Treiberagent ist nicht verfügbar: {{detail}}. Installiere und aktiviere ihn im Driver Manager erneut.", + "driver_manager.backend.status.built_in_available": "Integrierter Treiber ist verbindungsbereit", + "driver_manager.backend.status.expected_revision": "erwartete Revision {{revision}}.", + "driver_manager.backend.status.installed_pending": "Treiber ist installiert und wartet auf Aktivierung", + "driver_manager.backend.status.installed_pending_with_version": "Treiber ist installiert (Version: {{version}}) und wartet auf Aktivierung", + "driver_manager.backend.status.installed_revision": "installierte Revision {{revision}}.", "driver_manager.backend.status.mongodb_compatibility_update_detail": "Grund: Die empfohlene MongoDB-kompatible Treiberversion ist {{recommended}}, installiert ist {{installed}}. Auswirkung: Der MongoDB 2.x driver-agent verwendet den offiziellen v2-Treiber und erfordert MongoDB Server 4.2+; bei Verbindungen zu MongoDB 4.0 kann eine Inkompatibilität mit wire version 7 auftreten. Eine Neuinstallation des passenden driver-agent wird dringend empfohlen.", + "driver_manager.backend.status.needs_update": "Neuinstallation erforderlich, um Treiberaktualisierungen anzuwenden.", + "driver_manager.backend.status.optional_disabled": "{{name}} Go-Treiber ist nicht aktiviert. Installiere und aktiviere ihn im Driver Manager.", + "driver_manager.backend.status.optional_disabled_generic": "Nicht aktiviert", + "driver_manager.backend.status.optional_disabled_with_version": "Nicht aktiviert (Version: {{version}})", + "driver_manager.backend.status.optional_enabled": "Go-Treiber ist aktiviert und verbindungsbereit", + "driver_manager.backend.status.slim_build_required": "{{name}} ist im aktuellen slim build nicht enthalten. Installiere die Full-Version, um diesen Treiber zu verwenden.", + "driver_manager.backend.status.unrecognized_driver_type": "Nicht erkannter Datenquellentyp", + "driver_manager.backend.version.latest_suffix": " (neueste)", + "driver_manager.backend.version.recommended_suffix": " (empfohlen)", + "driver_manager.backend.version.unlabeled": "Unbenannte Version", + "driver_manager.column.actions": "Aktionen", + "driver_manager.column.data_source": "Datenquelle", + "driver_manager.column.package_size": "Paketgröße", + "driver_manager.column.progress": "Installationsfortschritt", + "driver_manager.column.status": "Zustand", + "driver_manager.column.version": "Treiberversion", + "driver_manager.description.install_required": "Außer MySQL / Redis / Oracle / PostgreSQL müssen Datenquellen vor dem Verbinden installiert und aktiviert werden.", + "driver_manager.directory_info.details_label": "Treiberordner und Wiederverwendung anzeigen", + "driver_manager.directory_info.log_file": "Laufzeitprotokoll: {{path}}", + "driver_manager.directory_info.reuse_help": "Automatisch heruntergeladene und manuell importierte Treiber werden in diesem Ordner gespeichert. Heruntergeladene Treiber können bei späteren Versionsupdates wiederverwendet werden.", + "driver_manager.directory_info.root_dir": "Treiber-Stammordner: {{path}}", + "driver_manager.directory_info.title": "Treiberordner und Wiederverwendung", + "driver_manager.empty.default": "Keine Treiberdaten", + "driver_manager.empty.search": "Kein Treiber passt zu \"{{keyword}}\"", + "driver_manager.filter_summary.match": "{{filtered}} / {{total}} Treffer", + "driver_manager.filter_summary.total": "{{total}} Treiber", + "driver_manager.import.directory_help": "Wenn der Download in der App fehlschlägt, lade das Treiberpaket zuerst manuell in diesen Ordner herunter und nutze dann \"Treiberpaket importieren\" oder \"Treiberordner importieren\", um die Installation abzuschließen.", + "driver_manager.import.single_file_help": "\"Treiberpaket importieren\" in der Zeile ist nur für eine einzelne Treiberdatei oder ein Bündel wie `mariadb-driver-agent`, `mariadb-driver-agent.exe` oder `GoNavi-DriverAgents.zip` vorgesehen. Ein JDBC Jar wird nicht direkt importiert; für Stapelimporte nutze oben \"Treiberordner importieren\".", + "driver_manager.local_source.directory": "Ordner", + "driver_manager.local_source.file": "Datei", + "driver_manager.log_modal.empty": "Für diesen Treiber gibt es noch keine Vorgangsprotokolle.", + "driver_manager.log_modal.executable_path": "Treiberprogramm: {{path}}", + "driver_manager.log_modal.install_dir": "Installationsordner: {{path}}", + "driver_manager.log_modal.title": "Treiberprotokoll - {{name}}", + "driver_manager.log.done_auto_install": "Automatische Installation abgeschlossen{{version}}", + "driver_manager.log.done_local_import": "Lokale Importinstallation abgeschlossen{{version}}", + "driver_manager.log.done_remove": "Treiberentfernung abgeschlossen", + "driver_manager.log.force_overwrite_reinstall": "Modus zum Überschreiben installierter Treiber ist aktiv; Neuimport wird ausgeführt", + "driver_manager.log.progress_line": "{{status}}: {{message}} ({{percent}} %)", + "driver_manager.log.skip_installed_dedupe": "Treiber ist bereits installiert; beim Ordnerimport wegen Dublettenprüfung übersprungen", + "driver_manager.log.skip_slim_build": "Das aktuelle Release-Paket ist ein Slim-Build; Ordnerimport wurde übersprungen", + "driver_manager.log.start_auto_install": "Automatische Installation gestartet", + "driver_manager.log.start_local_import": "Lokaler Import gestartet{{version}} ({{source}}): {{path}}", + "driver_manager.log.start_remove": "Treiberentfernung gestartet", + "driver_manager.message.directory_import_completed": "Ordnerimport abgeschlossen{{mode}}: {{success}} erfolgreich{{skip}}", + "driver_manager.message.directory_import_completed_with_failure": "Ordnerimport abgeschlossen{{mode}}: {{success}} erfolgreich, {{failed}} fehlgeschlagen{{skip}}", + "driver_manager.message.directory_import_failed": "Ordnerimport fehlgeschlagen{{mode}}: {{failed}} fehlgeschlagen{{skip}}", + "driver_manager.message.install_failed": "{{name}} konnte nicht installiert werden", + "driver_manager.message.install_failed_detail": "{{name}} konnte nicht installiert werden: {{detail}}", "driver_manager.message.install_failed_fallback": "Installation von {{name}} fehlgeschlagen", + "driver_manager.message.install_start": "Installation gestartet", + "driver_manager.message.install_success": "{{name}}{{version}} installiert und aktiviert", "driver_manager.message.install_watchdog_timeout": "Die Installation von {{name}} ist nach {{minutes}} Minuten noch nicht abgeschlossen. Der Hintergrundprozess lädt oder erstellt möglicherweise noch Dateien. Aktualisiere den Status später; falls dies wiederholt auftritt, prüfe den Proxy oder importiere ein lokales Treiberpaket.", + "driver_manager.message.load_status_failed": "Treiberstatus konnte nicht geladen werden", + "driver_manager.message.load_status_failed_detail": "Treiberstatus konnte nicht geladen werden: {{detail}}", + "driver_manager.message.load_version_failed": "Versionsliste für {{name}} konnte nicht geladen werden", + "driver_manager.message.load_version_failed_detail": "Versionsliste für {{name}} konnte nicht geladen werden: {{detail}}", + "driver_manager.message.local_directory_required": "Wähle einen gültigen Treiberpaketordner", + "driver_manager.message.local_file_required": "Wähle eine gültige Treiberpaketdatei", + "driver_manager.message.local_import_failed": "Lokales Treiberpaket für {{name}} konnte nicht importiert werden", + "driver_manager.message.local_import_failed_detail": "Lokales Treiberpaket für {{name}} konnte nicht importiert werden: {{detail}}", + "driver_manager.message.local_import_start": "Import des lokalen Treiberpakets gestartet", + "driver_manager.message.local_import_success": "Lokales Treiberpaket für {{name}}{{version}} installiert und aktiviert", + "driver_manager.message.local_path_required": "Wähle eine gültige lokale Importquelle: {{source}}", + "driver_manager.message.network_check_completed": "Treiber-Netzwerkprüfung abgeschlossen", + "driver_manager.message.network_check_failed": "Treiber-Netzwerkprüfung fehlgeschlagen", + "driver_manager.message.network_check_failed_detail": "Treiber-Netzwerkprüfung fehlgeschlagen: {{detail}}", + "driver_manager.message.no_external_drivers_to_import": "Es gibt keine externen Treiber zum Importieren", + "driver_manager.message.open_directory_failed": "Treiberordner konnte nicht geöffnet werden", + "driver_manager.message.open_directory_failed_detail": "Treiberordner konnte nicht geöffnet werden: {{detail}}", + "driver_manager.message.overwrite_suffix": " (installierte überschreiben)", + "driver_manager.message.remove_failed": "{{name}} konnte nicht entfernt werden", + "driver_manager.message.remove_failed_detail": "{{name}} konnte nicht entfernt werden: {{detail}}", + "driver_manager.message.remove_success": "{{name}} entfernt", + "driver_manager.message.select_local_directory_failed": "Lokaler Treiberpaketordner konnte nicht ausgewählt werden", + "driver_manager.message.select_local_directory_failed_detail": "Lokaler Treiberpaketordner konnte nicht ausgewählt werden: {{detail}}", + "driver_manager.message.select_local_file_failed": "Lokale Treiberpaketdatei konnte nicht ausgewählt werden", + "driver_manager.message.select_local_file_failed_detail": "Lokale Treiberpaketdatei konnte nicht ausgewählt werden: {{detail}}", + "driver_manager.message.skip_suffix": ", {{items}}", + "driver_manager.message.skip.dedupe": "{{count}} wegen Dubletten übersprungen", + "driver_manager.message.skip.slim": "{{count}} wegen Slim-Build übersprungen", + "driver_manager.network.alert.download_chain_unreachable": "Wichtig: Domains der Treiber-Downloadroute sind nicht erreichbar", + "driver_manager.network.alert.download_network_unreachable": "Wichtig: Treiber-Downloadnetzwerk ist nicht erreichbar", + "driver_manager.network.chain_alert.allow_hosts": "Wenn es weiter fehlschlägt, erlaube diese Hosts in den Proxy-Regeln: {{hosts}}. Wenn die Regeln nicht angepasst werden können, erwäge den TUN-Modus.", + "driver_manager.network.chain_alert.description": "GitHub-Seiten sind eventuell erreichbar, aber Treiberpakete werden beim Download auf Asset-Domains umgeleitet. Aktiviere zuerst den globalen Proxy im oberen GoNavi-Eintrag \"Proxy\" und trage lokale Adresse und Port der Proxy-App ein.", + "driver_manager.network.checking": "Treiber-Downloadnetzwerk wird geprüft...", + "driver_manager.network.details_label": "Details der Netzwerkprüfung anzeigen", + "driver_manager.network.error_value": ", {{detail}}", + "driver_manager.network.github_latency": "Latenz der Proxy-Verbindung zu GitHub: {{status}}{{latency}}{{detail}}", + "driver_manager.network.latency_value": ", {{latency}}ms", + "driver_manager.network.no_proxy_env": "Keine System-Proxy-Umgebungsvariablen erkannt.", + "driver_manager.network.no_result": "kein Ergebnis", + "driver_manager.network.not_checked": "Netzwerkprüfung noch nicht abgeschlossen", + "driver_manager.network.proxy_env_detected": "Proxy-Umgebungsvariablen erkannt: {{keys}}", + "driver_manager.network.reachable": "erreichbar", + "driver_manager.network.summary.download_chain_unreachable": "Die GitHub API ist erreichbar, aber die Asset-Domains für Treiberdownloads sind nicht erreichbar.", + "driver_manager.network.summary.proxy_recommended": "Einige Treiber-Downloadziele sind nicht erreichbar. Konfiguriere vor der Installation einen HTTP/HTTPS/SOCKS5-Proxy.", + "driver_manager.network.summary.reachable": "Das Treiber-Downloadnetzwerk ist erreichbar. Treiber können direkt installiert werden.", + "driver_manager.network.summary.reachable_with_proxy": "Das Treiber-Downloadnetzwerk ist über den konfigurierten Proxy erreichbar.", + "driver_manager.network.summary.unreachable": "Einige Treiber-Downloadziele sind nicht erreichbar. Prüfe das Netzwerk und versuche es erneut.", + "driver_manager.network.summary.unreachable_proxy_configured": "Einige Treiber-Downloadziele sind nicht erreichbar. Prüfe, ob der konfigurierte Proxy funktioniert, und versuche es erneut.", + "driver_manager.network.unreachable": "nicht erreichbar", + "driver_manager.option.force_overwrite_installed": "Installierte überschreiben", "driver_manager.package_size.built_in": "Integriert", "driver_manager.package_size.pending_release": "Noch nicht veröffentlicht", + "driver_manager.progress.agent_install_done": "Installation des {{name}}-Treiberagenten abgeschlossen", + "driver_manager.progress.agent_install_start": "Installation des {{name}}-Treiberagenten gestartet", + "driver_manager.progress.backend_detail": "Backend-Detail: {{detail}}", + "driver_manager.progress.backend_empty": "Kein Fortschrittsdetail vom Backend", + "driver_manager.progress.dev_build_fallback": "Kein vorkompiliertes Paket gefunden; lokaler Entwicklungsbuild wird versucht", + "driver_manager.progress.download_bundle": "{{name}}-Treiberbundle herunterladen", + "driver_manager.progress.download_prebuilt_agent": "Vorkompilierten {{name}}-Treiberagenten herunterladen", "driver_manager.progress.download_prebuilt_package": "Vorkompiliertes {{name}}-Treiberpaket herunterladen", + "driver_manager.progress.extract_agent_from_bundle": "{{name}}-Agent aus Treiberbundle extrahieren", + "driver_manager.progress.fallback.bundle_available": "Direktlink nicht verfügbar; Wechsel zum Treiberbundle-Fallback ({{name}}, {{bundle}} Bundle-Quellen verbleiben)", + "driver_manager.progress.fallback.direct_to_bundle": "Vorkompilierte Direktlinks passten nicht; Wechsel zum Treiberbundle-Fallback ({{name}}, {{bundle}} Bundle-Quellen verbleiben)", + "driver_manager.progress.fallback.explicit_skip_bundle": "Vorkompilierte Direktlinks passten nicht; nur explizite Assets erlaubt, Treiberbundle wird übersprungen ({{name}})", + "driver_manager.progress.fallback.source_build": "Release-Assets passten nicht; lokaler Quellbuild-Fallback wird vorbereitet ({{name}})", + "driver_manager.progress.install_start": "Installation gestartet", + "driver_manager.progress.local_package_done": "Lokaler Treiberpaketimport abgeschlossen", + "driver_manager.progress.local_package_start": "Installation des lokalen Treiberpakets gestartet", + "driver_manager.progress.metadata_write": "Treibermetadaten werden geschrieben", + "driver_manager.progress.plan.bundle_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); keine vorkompilierten Direktlinks, {{bundle}} Treiberbundle-Quellen werden versucht", + "driver_manager.progress.plan.direct_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); {{direct}} vorkompilierte Direktlinks werden versucht", + "driver_manager.progress.plan.direct_then_bundle": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); {{direct}} vorkompilierte Direktlinks, danach {{bundle}} Treiberbundle-Quellen", + "driver_manager.progress.plan.explicit_direct": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); nur explizite Versionsassets, {{direct}} vorkompilierte Direktlinks", "driver_manager.progress.plan.require_source_first": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); der Entwicklungsbuild verwendet nur lokalen Quellcode und nutzt keine Release-Pakete als Fallback", + "driver_manager.progress.plan.source_fallback": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); bei nicht passenden Release-Assets wird auf lokalen Quellbuild zurückgegriffen", + "driver_manager.progress.plan.source_first": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); zuerst lokaler Quellbuild, danach Download-Fallback", + "driver_manager.progress.plan.source_only": "Installation des {{name}}-Treiberagenten wird vorbereitet (Version {{version}}); diese Version erlaubt nur lokale Quellbuilds", + "driver_manager.progress.pure_go_enabled": "Installation abgeschlossen; reiner Go-Treiber aktiviert", + "driver_manager.progress.source_build_preferred": "Lokalen Quellbuild zuerst für {{name}}-Treiberagent verwenden", + "driver_manager.progress.status.done": "FERTIG", + "driver_manager.progress.status.downloading": "DOWNLOAD", + "driver_manager.progress.status.error": "FEHLER", + "driver_manager.progress.status.start": "BEGINN", + "driver_manager.progress.status.unknown": "UNBEKANNT", + "driver_manager.progress.unzip_agent": "{{name}}-Treiberagent extrahieren", "driver_manager.progress.wait_bundle": "Auf Abschluss des {{name}}-Treiberbundle-Downloads warten", + "driver_manager.punctuation.list_separator": ", ", + "driver_manager.search.built_in": "integriert", + "driver_manager.search.external": "extern", + "driver_manager.search.placeholder": "Treibername/-typ suchen, z. B. DuckDB oder clickhouse", + "driver_manager.status.built_in_available": "Integriert verfügbar", + "driver_manager.status.calculating": "Wird berechnet...", + "driver_manager.status.disabled": "Nicht aktiviert", + "driver_manager.status.enabled": "Aktiviert", + "driver_manager.status.full_required": "Full-Version erforderlich", + "driver_manager.status.installed": "Installiert", + "driver_manager.status.installing_percent": "Installation {{percent}}%", + "driver_manager.title": "Treiberverwaltung", "driver_manager.version.current_fallback": "aktuelle Version", + "driver_manager.version.default": "Standardversion", + "driver_manager.version.group.other": "Weitere", + "driver_manager.version.group.year": "Jahr {{year}}", + "driver_manager.version.inline_suffix": " (Version {{version}})", "driver_manager.version.installed": "Installiert{{suffix}}", + "driver_manager.version.installed_locked": "Installiert (zum Ändern entfernen)", + "driver_manager.version.installed_locked_with_version": "{{version}} (installiert; zum Ändern entfernen)", "driver_manager.version.installed_with_version": "{{version}} (installiert{{suffix}})", "driver_manager.version.latest_suffix": " (neueste)", + "driver_manager.version.mongodb_hint": "Derzeit werden nur MongoDB 1.17.x und 2.x unterstützt. Ältere 1.x-Versionen stehen nicht zur Installation bereit.", "driver_manager.version.needs_reinstall_suffix": ", Neuinstallation erforderlich", + "driver_manager.version.placeholder.load_on_expand": "Aufklappen, um Versionen zu laden", + "driver_manager.version.placeholder.select": "Treiberversion auswählen", "driver_manager.version.recommended_suffix": " (empfohlen)", "driver_manager.version.switch_pending": "Aktuell installiert: {{installedVersion}}; ausgewählt: {{targetVersion}}. Klicke auf „Version wechseln“, um die Änderung anzuwenden.", "driver_manager.version.target_fallback": "Zielversion", "driver_manager.version.unlabeled": "Version ohne Kennzeichnung", + "driver.guidance.customConnectionDriverHelp": "Unterstützt: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase; Aliasse: postgresql/pgx, open_gauss/open-gauss, dm8, kingbase8/kingbasees/kingbasev8. Geben Sie einen bereits von GoNavi registrierten Go database/sql-Treibernamen ein. Geben Sie keinen System-ODBC/JDBC-Treibernamen direkt ein und importieren Sie kein JDBC Jar.", + "file.backend.dialog.export_connections": "Verbindungen exportieren", + "file.backend.dialog.export_data": "Daten exportieren", + "file.backend.dialog.export_database_sql": "{{database}} exportieren (SQL)", + "file.backend.dialog.export_query_result": "Abfrageergebnis exportieren", + "file.backend.dialog.export_table": "{{table}} exportieren", + "file.backend.dialog.export_tables_sql": "Tabellen exportieren (SQL)", + "file.backend.dialog.import_data": "In {{table}} importieren", "file.backend.dialog.select_ca_server_certificate_file": "CA-/Serverzertifikatdatei auswählen", "file.backend.dialog.select_client_certificate_file": "Clientzertifikatdatei auswählen", "file.backend.dialog.select_client_private_key_file": "Client-Private-Key-Datei auswählen", + "file.backend.dialog.select_config_file": "Konfigurationsdatei auswählen", + "file.backend.dialog.select_database_file": "Datenbankdatei auswählen", + "file.backend.dialog.select_duckdb_file": "DuckDB-Datendatei auswählen", + "file.backend.dialog.select_sql_directory": "SQL-Verzeichnis auswählen", + "file.backend.dialog.select_sql_file": "SQL-Datei auswählen", + "file.backend.dialog.select_sqlite_file": "SQLite-Datendatei auswählen", + "file.backend.dialog.select_ssh_key_file": "SSH-Private-Key-Datei auswählen", "file.backend.dialog.select_tls_certificate_file": "TLS-Zertifikatdatei auswählen", "file.backend.error.app_log_file_not_found": "GoNavi-Logdatei wurde nicht gefunden", + "file.backend.error.batch_commit_unsupported": "Der aktuelle Datenbanktyp unterstützt keinen Batch-Commit", + "file.backend.error.connection_export_file_too_large": "Die Verbindungsexportdatei ist zu groß", + "file.backend.error.connection_import_file_too_large": "Die Verbindungsimportdatei ist zu groß", + "file.backend.error.connection_package_decrypt_failed": "Das Dateikennwort ist falsch oder die Datei ist beschädigt", + "file.backend.error.connection_package_password_required": "Das Kennwort des Wiederherstellungspakets darf nicht leer sein", + "file.backend.error.connection_package_payload_too_large": "Der Inhalt des Verbindungspakets ist zu groß", + "file.backend.error.connection_package_unsupported": "Nicht unterstütztes Format des Verbindungs-Wiederherstellungspakets", "file.backend.error.create_directory_failed": "Verzeichnis konnte nicht erstellt werden: {{detail}}", "file.backend.error.create_sql_file_failed": "SQL-Datei konnte nicht erstellt werden: {{detail}}", + "file.backend.error.database_name_required": "Datenbankname darf nicht leer sein", "file.backend.error.delete_sql_directory_failed": "Verzeichnis konnte nicht gelöscht werden: {{detail}} (nur leere Verzeichnisse können gelöscht werden)", "file.backend.error.delete_sql_file_failed": "SQL-Datei konnte nicht gelöscht werden: {{detail}}", "file.backend.error.directory_exists": "Verzeichnis ist bereits vorhanden", "file.backend.error.directory_name_no_separator": "Verzeichnisname darf keine Pfadtrennzeichen enthalten", "file.backend.error.directory_name_required": "Verzeichnisname darf nicht leer sein", + "file.backend.error.directory_path_required": "Verzeichnispfad darf nicht leer sein", + "file.backend.error.export_unsupported_format": "Nicht unterstütztes Exportformat: {{format}}", + "file.backend.error.file_path_empty": "Dateipfad ist leer", + "file.backend.error.file_path_required": "Dateipfad darf nicht leer sein", + "file.backend.error.import_csv_empty_or_missing_header": "CSV ist leer oder hat keine Kopfzeile", + "file.backend.error.import_csv_open_failed": "CSV konnte nicht geöffnet werden: {{detail}}", + "file.backend.error.import_csv_read_failed": "CSV konnte nicht gelesen werden: {{detail}}", + "file.backend.error.import_excel_empty_or_missing_header": "Excel ist leer oder hat keine Kopfzeile", + "file.backend.error.import_excel_no_sheets": "Excel-Datei enthält keine Tabellenblätter", + "file.backend.error.import_excel_parse_failed": "Excel konnte nicht geparst werden: {{detail}}", + "file.backend.error.import_excel_read_failed": "Excel konnte nicht gelesen werden: {{detail}}", + "file.backend.error.import_file_empty": "Dateipfad darf nicht leer sein", + "file.backend.error.import_json_parse_failed": "JSON konnte nicht geparst werden: {{detail}}", + "file.backend.error.import_json_root_not_array": "JSON-Wurzel muss ein Array sein", + "file.backend.error.import_unsupported_format": "Nicht unterstütztes Dateiformat", + "file.backend.error.invalid_export_mode": "Ungültiger Exportmodus", + "file.backend.error.mysql_workbench_no_connections": "Im XML wurden keine gültigen Verbindungskonfigurationen gefunden", + "file.backend.error.mysql_workbench_parse_failed": "MySQL Workbench-XML konnte nicht geparst werden: {{detail}}", "file.backend.error.navicat_connection_password_parse_failed": "Passwort für Verbindung {{name}} konnte nicht verarbeitet werden", "file.backend.error.navicat_connection_proxy_password_parse_failed": "Proxy-Passwort für Verbindung {{name}} konnte nicht verarbeitet werden", "file.backend.error.navicat_connection_ssh_password_parse_failed": "SSH-Passwort für Verbindung {{name}} konnte nicht verarbeitet werden", "file.backend.error.navicat_ncx_no_connections": "In Navicat NCX wurde keine von GoNavi unterstützte gültige Verbindungskonfiguration gefunden", "file.backend.error.navicat_ncx_parse_failed": "Navicat NCX konnte nicht geparst werden", "file.backend.error.navicat_secret_decrypt_failed": "Navicat-Passwort konnte nicht entschlüsselt werden", + "file.backend.error.open_file_failed": "Datei konnte nicht geöffnet werden: {{detail}}", + "file.backend.error.query_required": "Abfrage darf nicht leer sein", "file.backend.error.read_directory_info_failed": "Verzeichnisinformationen konnten nicht gelesen werden: {{detail}}", + "file.backend.error.read_file_error_summary": "Dateilesefehler: {{detail}}. Ausgeführt: {{count}}.", + "file.backend.error.read_file_info_failed": "Dateiinformationen konnten nicht gelesen werden: {{detail}}", "file.backend.error.read_target_directory_info_failed": "Informationen zum Zielverzeichnis konnten nicht gelesen werden: {{detail}}", "file.backend.error.read_target_file_info_failed": "Informationen zur Zieldatei konnten nicht gelesen werden: {{detail}}", "file.backend.error.rename_directory_failed": "Verzeichnis konnte nicht umbenannt werden: {{detail}}", "file.backend.error.rename_sql_file_failed": "SQL-Datei konnte nicht umbenannt werden: {{detail}}", "file.backend.error.schema_export_no_objects": "Im Schema {{schema}} wurden keine exportierbaren Tabellen oder Ansichten gefunden", "file.backend.error.schema_name_required": "Schemaname darf nicht leer sein", + "file.backend.error.select_with_query_required": "Nur SELECT/WITH-Abfrageexport wird unterstützt", + "file.backend.error.selected_path_not_directory": "Der ausgewählte Pfad ist kein Verzeichnis", + "file.backend.error.selected_path_not_sql_file": "Der ausgewählte Pfad ist keine SQL-Datei", "file.backend.error.sql_file_batch_execution_failed": "Batch-Ausführung ab Anweisung {{index}} fehlgeschlagen: {{detail}}", "file.backend.error.sql_file_batch_rollback_failed": "Batch-Ausführung fehlgeschlagen: {{detail}}; Rollback fehlgeschlagen: {{rollbackDetail}}", "file.backend.error.sql_file_exists": "SQL-Datei ist bereits vorhanden", @@ -7101,15 +4952,338 @@ "file.backend.error.sql_file_name_no_separator": "SQL-Dateiname darf keine Pfadtrennzeichen enthalten", "file.backend.error.sql_file_name_required": "SQL-Dateiname darf nicht leer sein", "file.backend.error.sql_file_statement_execution_failed": "Anweisung {{index}} fehlgeschlagen: {{detail}}", + "file.backend.error.table_data_batch_limit": "Es können höchstens {{max}} Tabellen gleichzeitig verarbeitet werden; aktuell ausgewählt: {{count}}", + "file.backend.error.table_data_clear_failed": "Leeren von {{table}} fehlgeschlagen: {{detail}}", + "file.backend.error.table_data_clear_failed_partial": "Leeren von {{table}} fehlgeschlagen: {{detail}}. Warnung: Die ersten {{count}} Tabellen wurden bereits geleert und können nicht wiederhergestellt werden", + "file.backend.error.table_data_mode_unsupported": "Nicht unterstützter Tabellen-Datenbereinigungsmodus: {{mode}}", + "file.backend.error.table_data_no_tables": "Keine Tabellen ausgewählt", + "file.backend.error.table_data_truncate_failed": "TRUNCATE für {{table}} fehlgeschlagen: {{detail}}", + "file.backend.error.table_data_truncate_failed_partial": "TRUNCATE für {{table}} fehlgeschlagen: {{detail}}. Warnung: Für die ersten {{count}} Tabellen wurde bereits TRUNCATE ausgeführt und sie können nicht wiederhergestellt werden", + "file.backend.error.table_data_truncate_unsupported": "Der aktuelle Datenbanktyp {{type}} unterstützt TRUNCATE für Tabellen nicht. Verwenden Sie stattdessen Leeren", "file.backend.error.target_directory_exists": "Zielverzeichnis ist bereits vorhanden", "file.backend.error.target_sql_file_exists": "Ziel-SQL-Datei ist bereits vorhanden", + "file.backend.error.task_not_found": "Aufgabe nicht gefunden", + "file.backend.error.write_failed": "Schreiben fehlgeschlagen: {{detail}}", + "file.backend.filter.all_files": "Alle Dateien", + "file.backend.filter.all_files_pattern": "Alle Dateien (*.*)", "file.backend.filter.certificate_files": "Zertifikatdateien", + "file.backend.filter.connection_package": "GoNavi-Verbindungspaket (*.gonavi-conn)", + "file.backend.filter.data_files": "Datendateien", + "file.backend.filter.database_files": "Datenbankdateien", + "file.backend.filter.duckdb_files": "DuckDB-Dateien", + "file.backend.filter.json_files": "JSON-Dateien (*.json)", + "file.backend.filter.mysql_workbench_connections": "MySQL Workbench-Verbindungen (*.xml)", + "file.backend.filter.private_key_files": "Private-Key-Dateien", + "file.backend.filter.sql_files": "SQL-Dateien (*.sql)", + "file.backend.filter.sqlite_files": "SQLite-Dateien", + "file.backend.html_export.document_title": "GoNavi Datenexport", + "file.backend.html_export.empty_rows": "(0 Zeilen)", + "file.backend.html_export.heading": "GoNavi Datenexport", + "file.backend.html_export.meta": "Zeilen: {{rowCount}} · Spalten: {{columnCount}} · Erstellt am: {{generatedAt}}", + "file.backend.message.cancel_requested": "Abbruchanforderung gesendet", + "file.backend.message.execution_cancelled": "Ausführung abgebrochen. Ausgeführt: {{executed}}, fehlgeschlagen: {{failed}}, Dauer: {{duration}}.", + "file.backend.message.execution_completed": "Ausführung abgeschlossen. Erfolgreich: {{success}}, fehlgeschlagen: {{failed}}, Dauer: {{duration}}.", + "file.backend.message.execution_error_detail_header": "Fehlerdetails (erste {{count}}):", + "file.backend.message.execution_more_errors": "...{{count}} weitere Fehler werden nicht angezeigt", + "file.backend.message.export_completed": "Export abgeschlossen", + "file.backend.message.import_no_data": "Keine importierbaren Daten", + "file.backend.message.import_row_failed": "Importzeile {{index}} fehlgeschlagen: {{detail}}", + "file.backend.message.import_summary": "Importiert: {{imported}}, fehlgeschlagen: {{failed}}", + "file.backend.message.statement_failed": "Anweisung {{index}} fehlgeschlagen: {{detail}}\n SQL: {{sql}}", + "file.backend.message.table_data_clear_succeeded": "Leeren erfolgreich", + "file.backend.message.table_data_truncate_succeeded": "TRUNCATE erfolgreich", + "file.backend.message.transaction_committed": "Transaktion erfolgreich committet", + "file.backend.message.user_cancelled": "Benutzer hat die Ausführung abgebrochen", + "file.backend.sql_dump.database": "Datenbank: {{database}}", + "file.backend.sql_dump.empty_rows": "(0 Zeilen)", + "file.backend.sql_dump.generated_at": "Erstellt am: {{generatedAt}}", + "file.backend.sql_dump.table": "Tabelle: {{objectName}}", + "file.backend.sql_dump.title": "GoNavi SQL-Export", + "file.backend.sql_dump.view": "Ansicht: {{objectName}}", + "file.backend.sql_dump.view_data_skipped": "Datenexport für Ansichten wurde übersprungen (INSERT für Ansichten wird nicht ausgegeben).", + "find_in_database.column.action": "Aktionen", + "find_in_database.column.match_count": "Trefferzeilen", + "find_in_database.column.matched_columns": "Treffer-Spalten", + "find_in_database.column.table_name": "Tabelle", + "find_in_database.detail.row_count": "Zeilen: {{count}}", + "find_in_database.detail.title": "{{table}} - Details zu Trefferzeilen", + "find_in_database.match.contains": "Enthält", + "find_in_database.match.exact": "Exakte Übereinstimmung", + "find_in_database.message.connection_config_not_found": "Verbindungskonfiguration nicht gefunden", + "find_in_database.message.get_tables_failed": "Tabellenliste konnte nicht abgerufen werden: {{detail}}", + "find_in_database.message.keyword_required": "Suchbegriff eingeben", + "find_in_database.message.no_matches": "Keine passenden Daten gefunden", + "find_in_database.message.no_tables": "Die aktuelle Datenbank enthält keine Tabellen", + "find_in_database.message.search_failed": "Suche fehlgeschlagen: {{detail}}", + "find_in_database.placeholder.keyword": "Zu suchende Zeichenfolge eingeben...", + "find_in_database.progress.searching_table": "{{table}} wird durchsucht... ({{current}}/{{total}})", + "find_in_database.summary.found_tables": "Passende Tabellen: {{count}}", + "find_in_database.summary.searching": " (Suche läuft...)", + "find_in_database.title": "In Datenbank suchen - {{dbName}}", + "find_in_database.tooltip.collapse_details": "Details ausblenden", + "find_in_database.tooltip.view_details": "Details anzeigen", + "import_preview.action.start": "Import starten", + "import_preview.error.connection_config_not_found": "Verbindungskonfiguration nicht gefunden", + "import_preview.error.import_failed": "Import fehlgeschlagen", + "import_preview.error.import_failed_detail": "Import fehlgeschlagen: {{detail}}", + "import_preview.error.preview_failed": "Vorschau fehlgeschlagen", + "import_preview.error.preview_failed_detail": "Vorschau fehlgeschlagen: {{detail}}", + "import_preview.preview.description": "Die ersten 5 Zeilen werden unten angezeigt. Starten Sie den Import nach der Prüfung der Daten.", + "import_preview.preview.field_list": "Feldliste:", + "import_preview.preview.summary": "{{rows}} Zeilen und {{columns}} Felder", + "import_preview.preview.table_title": "Datenvorschau (erste 5 Zeilen):", + "import_preview.progress.error_count": "Fehlgeschlagen {{count}}", + "import_preview.progress.processed_rows": "{{current}} / {{total}} Zeilen verarbeitet", + "import_preview.progress.success_count": "Erfolgreich {{count}}", + "import_preview.result.completed": "Import abgeschlossen", + "import_preview.result.error_logs": "Fehlerprotokolle:", + "import_preview.result.failed_rows": "{{count}} Zeilen fehlgeschlagen", + "import_preview.result.success_rows": "{{count}} Zeilen erfolgreich importiert", + "import_preview.status.importing": "Daten werden importiert...", + "import_preview.status.loading_preview": "Vorschaudaten werden geladen...", + "import_preview.title": "Datenimport-Vorschau", + "jvm_ai_plan.actions.description": ": {{description}}", + "jvm_ai_plan.actions.field_separator": ", ", + "jvm_ai_plan.actions.label": " ({{label}})", + "jvm_ai_plan.actions.none": "Die aktuelle Ressource deklariert keine unterstützten Aktionen. Wenn du einen Plan erzeugst, gib action nur an, wenn sie aus dem Snapshot eindeutig ableitbar ist, und lasse payload als JSON-Objekt.", + "jvm_ai_plan.actions.payload_fields": "; payload-Felder: {{fields}}", + "jvm_ai_plan.actions.required_suffix": "(required)", + "jvm_ai_plan.error.action_missing": "Dem AI-Plan fehlt eine ausführbare action.", + "jvm_ai_plan.error.payload_json_object_required": "Die aktuelle JVM-Vorschau erfordert, dass payload weiterhin ein JSON-Objekt ist.", + "jvm_ai_plan.error.reason_missing": "Dem AI-Plan fehlt ein Änderungsgrund.", + "jvm_ai_plan.error.resource_locator_missing": "Dem AI-Plan fehlen nutzbare Informationen zur Ressourcenlokalisierung.", + "jvm_ai_plan.prompt.connection_name": "Verbindungsname: {{connectionName}}", + "jvm_ai_plan.prompt.connection_policy": "Verbindungsrichtlinie: {{policy}}", + "jvm_ai_plan.prompt.connection_policy.read_only": "Schreibgeschützte Verbindung. Du darfst nur einen Plan und eine Risikoanalyse erzeugen und nicht annehmen, dass die Ausführung bereits erfolgt ist.", + "jvm_ai_plan.prompt.connection_policy.writable": "Schreibbare Verbindung, aber die Änderung muss trotzdem zuerst in der Vorschau geprüft und manuell bestätigt werden.", + "jvm_ai_plan.prompt.environment": "Umgebung: {{environmentLabel}}", + "jvm_ai_plan.prompt.environment_unknown": "unknown", + "jvm_ai_plan.prompt.example_reason": "Dirty Cache-Wert korrigieren", + "jvm_ai_plan.prompt.example_title": "JSON-Beispiel:", + "jvm_ai_plan.prompt.intro": "Analysiere die folgende JVM-Ressource und erstelle einen strukturierten Änderungsplan für GoNavi \"Änderungsvorschau\".", + "jvm_ai_plan.prompt.output_requirements_title": "Ausgabeanforderungen:", + "jvm_ai_plan.prompt.provider_mode": "Provider-Modus: {{providerMode}}", + "jvm_ai_plan.prompt.requirement.action": "4. Wähle action bevorzugt aus \"Unterstützte Aktionen für die aktuelle Ressource\"; leite sie nur aus dem Snapshot ab, wenn keine unterstützten Aktionen deklariert sind.", + "jvm_ai_plan.prompt.requirement.fields": "2. Die JSON-Felder im Codeblock müssen exakt lauten: targetType, selector, action, payload, reason.", + "jvm_ai_plan.prompt.requirement.no_execute": "6. Behaupte nicht, dass die Änderung bereits ausgeführt wurde, und gib keine Skripte oder Befehle aus.", + "jvm_ai_plan.prompt.requirement.payload": "5. payload muss als JSON-Objekt verpackt werden. Gib keine Skripte, Befehle oder Rohbinärdaten aus. Wenn ein reiner Textwert nötig ist, verpacke ihn als {\"format\":\"text\",\"value\":\"...\"}.", + "jvm_ai_plan.prompt.requirement.resource_path": "3. Bevorzuge selector.resourcePath mit dem aktuellen Ressourcenpfad {{resourcePath}}. Erfinde keinen anderen Pfad.", + "jvm_ai_plan.prompt.requirement.single_json_block": "1. Du darfst zuerst eine kurze Analyse einfügen, aber die Antwort muss genau einen ```json-Codeblock enthalten.", + "jvm_ai_plan.prompt.resource_path": "Aktueller Ressourcenpfad: {{resourcePath}}", + "jvm_ai_plan.prompt.resource_path_missing": "(Ressourcenpfad nicht angegeben)", + "jvm_ai_plan.prompt.snapshot_title": "Aktueller Ressourcen-Snapshot:", + "jvm_ai_plan.prompt.supported_actions_title": "Unterstützte Aktionen für die aktuelle Ressource:", + "jvm_ai_plan.prompt.target_host": "Zielhost: {{host}}", + "jvm_ai_plan.snapshot.unavailable": "Der aktuelle Ressourcen-Snapshot wurde noch nicht erfolgreich geladen.", + "jvm_audit.action.refresh": "Aktualisieren", + "jvm_audit.card.records": "Audit-Einträge", + "jvm_audit.column.action": "Aktion", + "jvm_audit.column.mode": "Modus", + "jvm_audit.column.reason": "Grund", + "jvm_audit.column.resource": "Ressource", + "jvm_audit.column.result": "Ergebnis", + "jvm_audit.column.source": "Quelle", + "jvm_audit.column.time": "Zeit", + "jvm_audit.description.current_range": "Aktueller Bereich: letzte {{limit}} Einträge", + "jvm_audit.empty.load_failed": "Audit-Einträge sind derzeit nicht verfügbar", + "jvm_audit.empty.no_records": "Keine Audit-Einträge", + "jvm_audit.error.backend_unavailable": "Die Backend-Methode JVMListAuditRecords ist nicht verfügbar.", + "jvm_audit.error.connection_missing": "Die Verbindung existiert nicht oder wurde gelöscht.", + "jvm_audit.error.load_failed": "JVM-Audit-Einträge konnten nicht geladen werden{{separator}}{{detail}}", + "jvm_audit.eyebrow": "JVM-Audit", + "jvm_audit.option.last_records": "Letzte {{limit}} Einträge", + "jvm_audit.source.ai_plan": "AI-unterstützt", + "jvm_audit.source.manual": "Manuell", + "jvm_audit.title": "JVM-Änderungsaudit", + "jvm_change_preview_modal.action.close": "Schließen", + "jvm_change_preview_modal.action.confirm_execute": "Ausführung bestätigen", + "jvm_change_preview_modal.blocking.alert_message": "Diese Änderung kann derzeit nicht ausgeführt werden", + "jvm_change_preview_modal.blocking.label": "Blockiergrund", + "jvm_change_preview_modal.field.format": "Format", + "jvm_change_preview_modal.field.resource_id": "Ressourcen-ID", + "jvm_change_preview_modal.field.version": "Version", + "jvm_change_preview_modal.permission.allowed": "Ausführung erlaubt", + "jvm_change_preview_modal.permission.forbidden": "Ausführung verboten", + "jvm_change_preview_modal.permission.requires_confirmation": "Bestätigung erforderlich", + "jvm_change_preview_modal.risk.high": "Hoch", + "jvm_change_preview_modal.risk.label": "Risiko {{level}}", + "jvm_change_preview_modal.risk.low": "Niedrig", + "jvm_change_preview_modal.risk.medium": "Mittel", + "jvm_change_preview_modal.risk.unknown": "Unbekannt", + "jvm_change_preview_modal.section.after": "Nachher", + "jvm_change_preview_modal.section.before": "Vorher", + "jvm_change_preview_modal.section.summary": "Änderungszusammenfassung", + "jvm_change_preview_modal.status.generated": "Vorschau erstellt", + "jvm_change_preview_modal.status.no_preview": "Kein Vorschauergebnis", + "jvm_change_preview_modal.title": "JVM-Änderungsvorschau", "jvm_diagnostic.ai_plan.default_reason": "AI-Diagnoseplan: {{intent}}", + "jvm_diagnostic.ai_plan.error.transport_mismatch": "Der Diagnose-transport des AI-Plans ist {{planTransport}} und stimmt nicht mit der aktuellen Konsole {{currentTransport}} überein. Erstellen Sie den Plan vor dem Anwenden erneut.", + "jvm_diagnostic.ai_plan.message.filled": "AI-Diagnoseplan wurde in die Konsole übernommen", + "jvm_diagnostic.capability_result.mutating_allowed": "Hochrisikobefehle", + "jvm_diagnostic.capability_result.observe_allowed": "Observe-Befehle", + "jvm_diagnostic.capability_result.observe_denied": "Observe gesperrt", + "jvm_diagnostic.capability_result.session_allowed": "Sitzungen möglich", + "jvm_diagnostic.capability_result.session_denied": "Sitzungen nicht möglich", + "jvm_diagnostic.capability_result.streaming_supported": "Streaming-Ausgabe", + "jvm_diagnostic.capability_result.streaming_unsupported": "Streaming nicht unterstützt", + "jvm_diagnostic.capability_result.title": "Ergebnis der Funktionsprüfung", + "jvm_diagnostic.capability_result.trace_allowed": "Trace-Befehle", + "jvm_diagnostic.capability.empty.description": "Die Funktionsprüfung liest nur Kanalberechtigungen und Befehlsrichtlinien. Sie erstellt keine Sitzung und führt keine Befehle aus.", + "jvm_diagnostic.capability.empty.title": "Funktionen noch nicht geprüft", + "jvm_diagnostic.command_input.command_description": "Geben Sie einen Arthas-/Diagnosebefehl ein, zum Beispiel thread -n 5, dashboard oder jvm; die Vorlagen unten können ihn mit einem Klick einfügen.", + "jvm_diagnostic.command_input.command_label": "Diagnosebefehl", + "jvm_diagnostic.command_input.description": "Unterstützt Autovervollständigung. Mit Ctrl/Cmd + Enter ausführen.", + "jvm_diagnostic.command_input.reason_help": "Wird für Audit-Einträge und AI-Kontext verwendet. Wird nicht als Arthas-Befehl an die Ziel-JVM gesendet.", + "jvm_diagnostic.command_input.reason_label": "Begründung (optional)", + "jvm_diagnostic.command_input.reason_placeholder": "Zum Beispiel: hohe CPU-Last untersuchen, blockierte Threads bestätigen oder eine langsame Methode finden", + "jvm_diagnostic.command_input.title": "Befehlseingabe", + "jvm_diagnostic.command_templates.title": "Befehlsvorlagen", + "jvm_diagnostic.completion.argument.classloader.hash.documentation": "Zeigt Details zu einem angegebenen Classloader an.", + "jvm_diagnostic.completion.argument.classloader.hash.label": "Angegebener Classloader-Hash", + "jvm_diagnostic.completion.argument.classloader.tree.documentation": "Gibt den Classloader-Baum aus.", + "jvm_diagnostic.completion.argument.classloader.tree.label": "Baumansicht (-t)", + "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "Zeigt Classloader-URL-Statistiken an.", + "jvm_diagnostic.completion.argument.classloader.url_stat.label": "Alle URL-Statistiken (--url-stat)", + "jvm_diagnostic.completion.argument.command_template.label": "{{command}}-Vorlage", + "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "Zeigt die aktuelle JVM-Laufzeitübersicht an.", + "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", + "jvm_diagnostic.completion.argument.detail_mode_d.label": "Detailmodus (-d)", + "jvm_diagnostic.completion.argument.jad.template.documentation": "Dekompiliert die angegebene Klasse.", + "jvm_diagnostic.completion.argument.jad.template.label": "Dekompilierungsvorlage", + "jvm_diagnostic.completion.argument.jvm.direct.documentation": "Zeigt JVM-Speicher, Threads, Klassenladen, GC und Laufzeitargumente an.", + "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", + "jvm_diagnostic.completion.argument.monitor.template.documentation": "Sammelt Methodenaufrufstatistiken in Intervallen.", + "jvm_diagnostic.completion.argument.ognl.template.documentation": "Führt einen OGNL-Ausdruck aus; Hochrisikobefehle sind standardmäßig durch Richtlinien eingeschränkt.", + "jvm_diagnostic.completion.argument.redefine.template.documentation": "Definiert den Pfad zur Klassenbytecode-Datei neu.", + "jvm_diagnostic.completion.argument.retransform.template.documentation": "Transformiert die angegebene Klasse erneut.", + "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "Sucht nach Klassenname-Muster.", + "jvm_diagnostic.completion.argument.sc.class_pattern.label": "Klassenmuster-Vorlage", + "jvm_diagnostic.completion.argument.sc.detail.documentation": "Gibt detaillierte Klasseninformationen aus.", + "jvm_diagnostic.completion.argument.sm.detail.documentation": "Gibt detaillierte Methodensignaturen aus.", + "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "Zeigt Methodensignaturen einer Klasse an.", + "jvm_diagnostic.completion.argument.sm.method_signature.label": "Methodensignatur-Vorlage", + "jvm_diagnostic.completion.argument.stack.template.documentation": "Gibt Methodenaufruf-Stacks aus.", + "jvm_diagnostic.completion.argument.stop.direct.documentation": "Stoppt die aktuelle Hintergrundaufgabe.", + "jvm_diagnostic.completion.argument.stop.direct.label": "stop", + "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "Liest die angegebene Umgebungsvariable.", + "jvm_diagnostic.completion.argument.sysenv.variable.label": "Umgebungsvariable anzeigen", + "jvm_diagnostic.completion.argument.sysprop.property.documentation": "Liest die angegebene Systemeigenschaft.", + "jvm_diagnostic.completion.argument.sysprop.property.label": "Eigenschaft anzeigen", + "jvm_diagnostic.completion.argument.thread.blocking.documentation": "Findet Threads, die aktuell andere Threads blockieren.", + "jvm_diagnostic.completion.argument.thread.blocking.label": "Blockierte Threads (-b)", + "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "Zeigt die Top-N-Threads mit der höchsten CPU-Last an.", + "jvm_diagnostic.completion.argument.thread.busy_top.label": "Ausgelastete Threads TOP N (-n)", + "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "Zeigt detaillierte Stackinformationen für einen angegebenen Thread an.", + "jvm_diagnostic.completion.argument.thread.thread_id.label": "Angegebene Thread-ID", + "jvm_diagnostic.completion.argument.trace.condition.documentation": "Fügt einen trace-Bedingungsausdruck hinzu.", + "jvm_diagnostic.completion.argument.trace.condition.label": "Bedingungsfilter '#cost > 100'", + "jvm_diagnostic.completion.argument.trace.template.documentation": "Verfolgt langsame Methodenaufrufketten.", + "jvm_diagnostic.completion.argument.tt.list.documentation": "Zeigt die aktuelle Aufzeichnungsliste an.", + "jvm_diagnostic.completion.argument.tt.list.label": "Aufzeichnungsliste anzeigen (-l)", + "jvm_diagnostic.completion.argument.tt.record.documentation": "Zeichnet Aufrufe der angegebenen Methode auf.", + "jvm_diagnostic.completion.argument.tt.record.label": "tt-Aufzeichnungsvorlage", + "jvm_diagnostic.completion.argument.tt.replay.documentation": "Zeigt Details zu einer angegebenen Aufzeichnung an.", + "jvm_diagnostic.completion.argument.tt.replay.label": "Aufzeichnung wiedergeben (-i)", + "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "Ruft Instanzen der angegebenen Klasse ab; Hochrisikobefehle sind standardmäßig durch Richtlinien eingeschränkt.", + "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", + "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "Legt die Expansionstiefe von Objekten fest.", + "jvm_diagnostic.completion.argument.watch.expand_depth.label": "Expansionstiefe -x 2", + "jvm_diagnostic.completion.argument.watch.template.documentation": "Beobachtet Parameter, Rückgabewerte oder Ausnahmen.", + "jvm_diagnostic.completion.category.control": "Steuerbefehl", + "jvm_diagnostic.completion.category.mutating": "Hochrisikobefehl", + "jvm_diagnostic.completion.category.observe": "Beobachtungsbefehl", + "jvm_diagnostic.completion.category.trace": "Trace-Befehl", + "jvm_diagnostic.completion.command.classloader.documentation": "Zeigt Classloader-Informationen an.", + "jvm_diagnostic.completion.command.dashboard.documentation": "Zeigt die JVM-Laufzeitübersicht an.", + "jvm_diagnostic.completion.command.jad.documentation": "Dekompiliert die angegebene Klasse.", + "jvm_diagnostic.completion.command.jvm.documentation": "Zeigt JVM-Speicher, Threads, Klassenladen, GC und Laufzeitargumente an.", + "jvm_diagnostic.completion.command.monitor.documentation": "Sammelt regelmäßig Statistiken zu Methodenaufrufen.", + "jvm_diagnostic.completion.command.ognl.documentation": "Führt einen OGNL-Ausdruck aus; standardmäßig ist zusätzliche Autorisierung erforderlich.", + "jvm_diagnostic.completion.command.redefine.documentation": "Definiert Klassenbytecode neu.", + "jvm_diagnostic.completion.command.retransform.documentation": "Löst eine erneute Klassentransformation aus.", + "jvm_diagnostic.completion.command.sc.documentation": "Sucht passende Klasseninformationen.", + "jvm_diagnostic.completion.command.sm.documentation": "Zeigt Methodensignaturen einer Klasse an.", + "jvm_diagnostic.completion.command.stack.documentation": "Gibt Methodenaufruf-Stacks aus.", + "jvm_diagnostic.completion.command.stop.documentation": "Stoppt die aktuelle Hintergrundaufgabe.", + "jvm_diagnostic.completion.command.sysenv.documentation": "Zeigt Umgebungsvariablen an.", + "jvm_diagnostic.completion.command.sysprop.documentation": "Zeigt Systemeigenschaften an.", + "jvm_diagnostic.completion.command.thread.documentation": "Zeigt Hot Threads, Thread-Stacks und blockierte Threads an.", + "jvm_diagnostic.completion.command.trace.documentation": "Verfolgt Zeitpfade von Methodenaufrufen.", + "jvm_diagnostic.completion.command.tt.documentation": "Methoden-Zeittunnel zum Aufzeichnen und Wiedergeben von Aufrufen.", + "jvm_diagnostic.completion.command.vmtool.documentation": "Manipuliert JVM-Objekte direkt oder führt VMTool-Aktionen aus.", + "jvm_diagnostic.completion.command.watch.documentation": "Beobachtet Parameter, Rückgabewerte oder Ausnahmen.", + "jvm_diagnostic.completion.detail.class_search_template": "Klassensuchvorlage", + "jvm_diagnostic.completion.detail.classloader_template": "Classloader-Vorlage", + "jvm_diagnostic.completion.detail.decompile_template": "Dekompilierungsvorlage", + "jvm_diagnostic.completion.detail.environment_variable_template": "Umgebungsvariablenvorlage", + "jvm_diagnostic.completion.detail.execute_directly": "direkt ausführen", + "jvm_diagnostic.completion.detail.high_risk_template": "Hochrisikovorlage", + "jvm_diagnostic.completion.detail.method_search_template": "Methodensuchvorlage", + "jvm_diagnostic.completion.detail.monitor_template": "monitor-Vorlage", + "jvm_diagnostic.completion.detail.stack_template": "Stack-Vorlage", + "jvm_diagnostic.completion.detail.system_property_template": "Systemeigenschaftsvorlage", + "jvm_diagnostic.completion.detail.thread_option": "Thread-Option", + "jvm_diagnostic.completion.detail.time_tunnel_template": "Zeittunnel-Vorlage", + "jvm_diagnostic.completion.detail.trace_option": "Trace-Option", + "jvm_diagnostic.completion.detail.trace_template": "Trace-Vorlage", + "jvm_diagnostic.completion.detail.watch_option": "watch-Option", + "jvm_diagnostic.completion.detail.watch_template": "watch-Vorlage", + "jvm_diagnostic.completion.preset.category.mutating": "Hochrisikobefehl", + "jvm_diagnostic.completion.preset.category.observe": "Beobachtungsbefehl", + "jvm_diagnostic.completion.preset.category.trace": "Trace-Befehl", + "jvm_diagnostic.completion.preset.dashboard.documentation": "Zeigt die JVM-Laufzeitübersicht an.", + "jvm_diagnostic.completion.preset.ognl-sample.documentation": "Hochriskanter Ausdrucksbefehl, standardmäßig nur als Beispiel angezeigt.", + "jvm_diagnostic.completion.preset.thread-top.documentation": "Zeigt die am stärksten ausgelasteten Threads an, um blockierte Threads oder Threads mit hoher CPU-Last schnell zu finden.", + "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "Verfolgt langsame Methodenaufrufpfade.", + "jvm_diagnostic.completion.preset.watch-return.documentation": "Beobachtet Parameter und Rückgabewerte.", + "jvm_diagnostic.connection_missing.message": "Verbindung existiert nicht oder wurde gelöscht", + "jvm_diagnostic.error.cancel_failed": "Diagnosebefehl konnte nicht abgebrochen werden", + "jvm_diagnostic.error.cancel_unavailable": "JVMCancelDiagnosticCommand-Backend-Methode ist nicht verfügbar", + "jvm_diagnostic.error.execute_command_required": "Diagnosebefehl darf nicht leer sein", + "jvm_diagnostic.error.execute_failed": "Diagnosebefehl konnte nicht ausgeführt werden", + "jvm_diagnostic.error.execute_session_required": "Erstellen Sie vor dem Ausführen eines Befehls eine Diagnosesitzung", + "jvm_diagnostic.error.execute_unavailable": "JVMExecuteDiagnosticCommand-Backend-Methode ist nicht verfügbar", + "jvm_diagnostic.error.history_load_failed": "Diagnoseverlauf konnte nicht geladen werden", + "jvm_diagnostic.error.probe_failed": "Diagnosefunktionen konnten nicht geprüft werden", + "jvm_diagnostic.error.probe_unavailable": "JVMProbeDiagnosticCapabilities-Backendmethode ist nicht verfügbar", + "jvm_diagnostic.error.start_failed": "Diagnosesitzung konnte nicht erstellt werden", + "jvm_diagnostic.error.start_unavailable": "JVMStartDiagnosticSession-Backend-Methode ist nicht verfügbar", + "jvm_diagnostic.history.current_session": "Aktuelle Sitzung", + "jvm_diagnostic.history.description": "Letzte Befehle und Ausführungsstatus", + "jvm_diagnostic.history.no_records": "Kein Diagnoseverlauf", + "jvm_diagnostic.history.no_session": "Noch keine Diagnosesitzung", + "jvm_diagnostic.history.reason_missing": "Kein Diagnosegrund angegeben", + "jvm_diagnostic.history.recent_records": "Letzte Einträge", + "jvm_diagnostic.history.title": "Audit-Verlauf", + "jvm_diagnostic.message.cancel_sent": "Abbruchanforderung gesendet", + "jvm_diagnostic.no_session.action.probe": "Zuerst Funktionen prüfen", + "jvm_diagnostic.no_session.action.start": "Diagnosesitzung erstellen", + "jvm_diagnostic.no_session.alert.description": "So wird vermieden, dass Befehle vor dem Binden einer Sitzung als ausführbar erscheinen; außerdem bleiben Audit-Einträge, Ausgabestreams und Abbruch an dieselbe Sitzung gebunden.", + "jvm_diagnostic.no_session.alert.title": "Die Befehlseingabe erscheint nach dem Erstellen einer Sitzung", + "jvm_diagnostic.no_session.description": "Erstellen Sie zuerst eine Sitzung, dann werden Befehlseditor und Vorlagen angezeigt", + "jvm_diagnostic.no_session.title": "Diagnosesitzung starten", + "jvm_diagnostic.output.description": "Aus Backend-Ereignisstream angehängt", + "jvm_diagnostic.output.empty.description": "Noch keine Live-Ausgabe. Nach dem Ausführen eines Befehls wird die Backend-Ausgabe hier chronologisch angezeigt.", + "jvm_diagnostic.output.frontend_completed_fallback": "Der Diagnosebefehlsaufruf wurde zurückgegeben, aber es wurde kein terminales Backend-Ereignis empfangen. Das Frontend hat den Wartezustand als Fallback beendet.", + "jvm_diagnostic.output.local_pending": "Diagnosebefehl übermittelt; warte auf Backend-Ausgabe: {{command}}", + "jvm_diagnostic.output.title": "Live-Ausgabe", + "jvm_diagnostic.presentation.category.mutating": "Hochrisikobefehle", + "jvm_diagnostic.presentation.category.observe": "Beobachtungsbefehle", + "jvm_diagnostic.presentation.category.trace": "Trace-Befehle", + "jvm_diagnostic.presentation.chunk.empty_event": "Leeres Ereignis", "jvm_diagnostic.presentation.command_type.mutating": "Hochrisiko", "jvm_diagnostic.presentation.command_type.observe": "Beobachtung", "jvm_diagnostic.presentation.command_type.trace": "Trace", + "jvm_diagnostic.presentation.event.chunk": "Ausgabeabschnitt", + "jvm_diagnostic.presentation.event.diagnostic": "Diagnoseausgabe", + "jvm_diagnostic.presentation.event.done": "Ausführung beendet", "jvm_diagnostic.presentation.fallback.unknown": "Unbekannt", "jvm_diagnostic.presentation.phase.canceled": "Abgebrochen", + "jvm_diagnostic.presentation.phase.canceling": "Wird abgebrochen", + "jvm_diagnostic.presentation.phase.completed": "Abgeschlossen", + "jvm_diagnostic.presentation.phase.diagnostic": "Diagnoseereignis", + "jvm_diagnostic.presentation.phase.failed": "Fehlgeschlagen", + "jvm_diagnostic.presentation.phase.running": "Läuft", "jvm_diagnostic.presentation.risk.high": "Hohes Risiko", "jvm_diagnostic.presentation.risk.low": "Niedriges Risiko", "jvm_diagnostic.presentation.risk.medium": "Mittleres Risiko", @@ -7117,6 +5291,734 @@ "jvm_diagnostic.presentation.source.manual": "Manuelle Eingabe", "jvm_diagnostic.presentation.transport.agent_bridge": "Agent Bridge", "jvm_diagnostic.presentation.transport.arthas_tunnel": "Arthas Tunnel", + "jvm_diagnostic.session_capability.action.clear_output": "Ausgabe löschen", + "jvm_diagnostic.session_capability.action.refresh_history": "Verlauf aktualisieren", + "jvm_diagnostic.session_capability.description": "Aktueller Kanal, Berechtigungen und Schnellwartung", + "jvm_diagnostic.session_capability.note": "Funktionsprüfungen führen keine Befehle aus; vor dem Ausführen eines Befehls muss eine Sitzung erstellt werden. Der Audit-Verlauf zeigt die neuesten Befehlsdatensätze und kann auch ohne aktuelle Sitzung Datensätze aus früheren Sitzungen enthalten.", + "jvm_diagnostic.session_capability.session_id_hint": "Die Sitzungs-ID wird nach dem Erstellen einer Sitzung hier angezeigt.", + "jvm_diagnostic.session_capability.status.command_running": "Befehl läuft", + "jvm_diagnostic.session_capability.status.idle": "Leerlauf", + "jvm_diagnostic.session_capability.status.no_session": "Keine Sitzung", + "jvm_diagnostic.session_capability.status.session_established": "Sitzung hergestellt", + "jvm_diagnostic.session_capability.title": "Sitzung und Funktionen", + "jvm_diagnostic.session.default_reason": "Sitzung aus der Konsole gestartet", + "jvm_diagnostic.session.default_title": "JVM-Diagnosekonsole", + "jvm_diagnostic.workbench.action.cancel_command": "Befehl abbrechen", + "jvm_diagnostic.workbench.action.execute_command": "Befehl ausführen", + "jvm_diagnostic.workbench.action.probe": "Funktionen prüfen", + "jvm_diagnostic.workbench.action.restart_session": "Sitzung neu erstellen", + "jvm_diagnostic.workbench.action.start_session": "Sitzung erstellen", + "jvm_diagnostic.workbench.eyebrow": "JVM-Diagnose", + "jvm_diagnostic.workbench.status.command_running": "Befehl läuft", + "jvm_diagnostic.workbench.status.no_session": "Keine Sitzung", + "jvm_diagnostic.workbench.status.session_established": "Sitzung hergestellt", + "jvm_diagnostic.workbench.title": "JVM-Diagnosearbeitsbereich", + "jvm_diagnostic.workflow.command.description": "Nach dem Erstellen der Sitzung werden Befehlseditor, Begründung und Vorlagen angezeigt.", + "jvm_diagnostic.workflow.command.title": "Befehl ausführen", + "jvm_diagnostic.workflow.probe.description": "Liest nur Diagnosekanal, Streaming-Ausgabe und Befehlsberechtigungen, ohne eine Sitzung zu erstellen.", + "jvm_diagnostic.workflow.probe.title": "Funktionen prüfen", + "jvm_diagnostic.workflow.session.description": "Erstellt einen Diagnosekontext, damit nachfolgende Befehle an diese Sitzung gebunden sind.", + "jvm_diagnostic.workflow.session.title": "Sitzung erstellen", + "jvm_monitoring_charts.empty.classes.metric_unavailable": "Die aktuelle Monitoring-Quelle stellt keine Klassenladen-Metriken bereit", + "jvm_monitoring_charts.empty.classes.no_samples": "Noch keine Klassenladen-Stichproben", + "jvm_monitoring_charts.empty.gc.metric_unavailable": "Die aktuelle Monitoring-Quelle stellt keine Garbage-Collection-Metriken bereit", + "jvm_monitoring_charts.empty.gc.no_samples": "Noch keine Garbage-Collection-Stichproben", + "jvm_monitoring_charts.empty.heap.metric_unavailable": "Die aktuelle Monitoring-Quelle stellt keine Heap-Speicher-Metriken bereit", + "jvm_monitoring_charts.empty.heap.no_samples": "Noch keine Heap-Speicher-Stichproben", + "jvm_monitoring_charts.empty.threads.metric_unavailable": "Die aktuelle Monitoring-Quelle stellt keine Thread-Metriken bereit", + "jvm_monitoring_charts.empty.threads.no_samples": "Noch keine Thread-Stichproben", + "jvm_monitoring_charts.legend.daemon_thread_count": "Daemon-Threads", + "jvm_monitoring_charts.legend.gc_count": "GC-Anzahl", + "jvm_monitoring_charts.legend.gc_time_ms": "GC-Zeit (ms)", + "jvm_monitoring_charts.legend.heap_committed": "Reservierter Heap", + "jvm_monitoring_charts.legend.heap_used": "Verwendeter Heap", + "jvm_monitoring_charts.legend.loaded_classes": "Geladene Klassen", + "jvm_monitoring_charts.legend.peak_thread_count": "Maximale Thread-Anzahl", + "jvm_monitoring_charts.legend.thread_count": "Thread-Anzahl", + "jvm_monitoring_charts.legend.unloaded_classes": "Entladene Klassen", + "jvm_monitoring_charts.title.classes": "Klassenladen", + "jvm_monitoring_charts.title.gc": "Garbage Collection", + "jvm_monitoring_charts.title.heap": "Heap-Speicher", + "jvm_monitoring_charts.title.threads": "Threads", + "jvm_monitoring_dashboard.action.refresh": "Aktualisieren", + "jvm_monitoring_dashboard.action.start": "Überwachung starten", + "jvm_monitoring_dashboard.action.stop": "Überwachung stoppen", + "jvm_monitoring_dashboard.connection_missing.message": "Verbindung existiert nicht oder wurde gelöscht", + "jvm_monitoring_dashboard.degraded.message": "Überwachungsfunktion ist eingeschränkt", + "jvm_monitoring_dashboard.empty.description": "Nachdem Sie auf \"Überwachung starten\" geklickt haben, behält GoNavi die Sampling-Ergebnisse für diese Verbindung in der aktuellen Sitzung; ein Tabwechsel stoppt das Sampling nicht.", + "jvm_monitoring_dashboard.empty.title": "Kontinuierliche Überwachung wurde noch nicht gestartet", + "jvm_monitoring_dashboard.error.history_load_failed": "Überwachungsverlauf konnte nicht geladen werden", + "jvm_monitoring_dashboard.error.history_unavailable": "JVMGetMonitoringHistory-Backend-Methode ist nicht verfügbar", + "jvm_monitoring_dashboard.error.start_failed": "Überwachung konnte nicht gestartet werden", + "jvm_monitoring_dashboard.error.start_unavailable": "JVMStartMonitoring-Backend-Methode ist nicht verfügbar", + "jvm_monitoring_dashboard.error.stop_failed": "Überwachung konnte nicht gestoppt werden", + "jvm_monitoring_dashboard.error.stop_unavailable": "JVMStopMonitoring-Backend-Methode ist nicht verfügbar", + "jvm_monitoring_dashboard.status.sampling": "Sampling läuft", + "jvm_monitoring_dashboard.status.stopped": "Nicht ausgeführt", + "jvm_monitoring_dashboard.title": "Kontinuierliche JVM-Überwachung", + "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "Die aktuelle Monitoring-Quelle stellt keine ereignisbezogenen Garbage-Collection-Daten bereit.", + "jvm_monitoring_detail_panel.empty.recent_gc_events": "Keine Garbage-Collection-Ereignisse im letzten Fenster.", + "jvm_monitoring_detail_panel.empty.thread_states": "Noch keine Stichproben für Thread-Zustände.", + "jvm_monitoring_detail_panel.field.process_cpu": "Prozess-CPU", + "jvm_monitoring_detail_panel.field.process_physical_memory": "Physischer Prozessspeicher", + "jvm_monitoring_detail_panel.field.process_virtual_memory": "Virtueller Prozessspeicher", + "jvm_monitoring_detail_panel.field.system_cpu": "System-CPU", + "jvm_monitoring_detail_panel.gc.after": "Nach der Collection", + "jvm_monitoring_detail_panel.gc.before": "Vor der Collection", + "jvm_monitoring_detail_panel.memory_missing.default": "Die aktuelle Monitoring-Quelle hat keine Metriken für residenten physischen Prozessspeicher zurückgegeben. Prüfen Sie, ob der HTTP-Endpunkt oder der erweiterte Agent physischen Prozessspeicher erfasst und meldet.", + "jvm_monitoring_detail_panel.memory_missing.jmx": "Die JMX-Verbindung stellt das Attribut für residenten physischen Prozessspeicher nicht bereit. Derzeit kann nur der virtuelle Prozessspeicher gelesen werden. Wechseln Sie zum HTTP-Endpunkt oder zum erweiterten Agent, um physischen Prozessspeicher zu erfassen.", + "jvm_monitoring_detail_panel.memory_missing.title": "Warum physischer Prozessspeicher fehlt", + "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "Fähigkeiten und Degradation", + "jvm_monitoring_detail_panel.title.recent_gc_details": "Details der letzten Garbage Collections", + "jvm_monitoring_detail_panel.title.thread_state_distribution": "Verteilung der Thread-Zustände", + "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "Fehlerbehebungsmetriken", + "jvm_monitoring_presentation.availability.missing_metrics": "Fehlende Metriken: {{metrics}}", + "jvm_monitoring_presentation.availability.no_obvious_degradation": "In der aktuellen Monitoring-Sitzung wurde keine offensichtliche Degradation gefunden.", + "jvm_monitoring_presentation.availability.provider_warnings": "Warnung der Monitoring-Quelle: {{warnings}}", + "jvm_monitoring_presentation.metric.class_loading": "Klassenladen", + "jvm_monitoring_presentation.metric.cpu_process": "Prozess-CPU", + "jvm_monitoring_presentation.metric.cpu_system": "System-CPU", + "jvm_monitoring_presentation.metric.gc_count": "Garbage-Collection-Anzahl", + "jvm_monitoring_presentation.metric.gc_events": "Letzte Garbage-Collection-Ereignisse", + "jvm_monitoring_presentation.metric.gc_time": "Garbage-Collection-Dauer", + "jvm_monitoring_presentation.metric.heap_non_heap": "Nicht-Heap-Speicher", + "jvm_monitoring_presentation.metric.heap_used": "Heap-Speicher", + "jvm_monitoring_presentation.metric.memory_rss": "Physischer Prozessspeicher", + "jvm_monitoring_presentation.metric.memory_virtual": "Virtueller Prozessspeicher", + "jvm_monitoring_presentation.metric.thread_count": "Thread-Anzahl", + "jvm_monitoring_presentation.metric.thread_states": "Thread-Zustände", + "jvm_monitoring_presentation.thread_state.blocked": "Blockiert", + "jvm_monitoring_presentation.thread_state.new": "Neu", + "jvm_monitoring_presentation.thread_state.runnable": "Ausführbar", + "jvm_monitoring_presentation.thread_state.terminated": "Beendet", + "jvm_monitoring_presentation.thread_state.timed_waiting": "Zeitbegrenzt wartend", + "jvm_monitoring_presentation.thread_state.waiting": "Wartend", + "jvm_monitoring_status_cards.meta.gc_total_time": "Gesamt {{value}}", + "jvm_monitoring_status_cards.meta.heap_committed": "Reserviert {{value}}", + "jvm_monitoring_status_cards.meta.thread_peak": "Maximum {{value}}", + "jvm_monitoring_status_cards.meta.waiting_samples": "Warten auf Stichproben", + "jvm_monitoring_status_cards.status.sampling": "Sampling läuft", + "jvm_monitoring_status_cards.status.stopped": "Gestoppt", + "jvm_monitoring_status_cards.thread_state.runnable_count": "Ausführbar {{count}}", + "jvm_monitoring_status_cards.title.classes": "Klassenladen", + "jvm_monitoring_status_cards.title.gc_pressure": "GC-Druck", + "jvm_monitoring_status_cards.title.heap": "Heap-Speicher", + "jvm_monitoring_status_cards.title.threads": "Threads", + "jvm_overview.badge.read_only": "Schreibgeschützte Verbindung", + "jvm_overview.badge.writable": "Schreibbare Verbindung", + "jvm_overview.capability.can_browse": "Durchsuchbar", + "jvm_overview.capability.cannot_browse": "Nicht durchsuchbar", + "jvm_overview.capability.preview_supported": "Vorschau unterstützt", + "jvm_overview.capability.preview_unsupported": "Vorschau nicht unterstützt", + "jvm_overview.capability.read_only": "Schreibgeschützt", + "jvm_overview.capability.writable": "Schreibbar", + "jvm_overview.card.connection_summary": "Verbindungsübersicht", + "jvm_overview.card.mode_capability": "Modusfunktionen", + "jvm_overview.connection_missing.message": "Verbindung existiert nicht oder wurde gelöscht", + "jvm_overview.empty.capabilities": "Keine Modusfunktionsdaten", + "jvm_overview.error.capability_load_failed": "JVM-Modusfunktionen konnten nicht gelesen werden", + "jvm_overview.eyebrow": "JVM-Laufzeit", + "jvm_overview.field.agent": "Agent", + "jvm_overview.field.allowed_modes": "Erlaubte Modi", + "jvm_overview.field.current_mode": "Aktueller Modus", + "jvm_overview.field.endpoint": "Endpoint", + "jvm_overview.field.jmx_address": "JMX-Adresse", + "jvm_overview.field.resource_browse": "Ressourcenbrowser", + "jvm_overview.title": "JVM-Laufzeitübersicht", + "jvm_overview.value.enabled": "Aktiviert", + "jvm_overview.value.not_configured": "Nicht konfiguriert", + "jvm_overview.value.resource_browse_lazy_load": "Wird nach dem Erweitern eines Modusknotens in der Seitenleiste lazy geladen", + "jvm_resource.action.ask_ai_plan": "AI um einen Plan bitten", + "jvm_resource.action.audit": "Auditprotokoll", + "jvm_resource.action.generate_ai_plan": "AI-Plan erzeugen", + "jvm_resource.action.preview_change": "Änderung vorschauen", + "jvm_resource.badge.read_only": "Schreibgeschützte Verbindung", + "jvm_resource.badge.writable": "Beschreibbare Verbindung", + "jvm_resource.card.change_draft": "Änderungsentwurf", + "jvm_resource.card.snapshot": "Ressourcen-Snapshot", + "jvm_resource.draft_source.ai_plan": "AI-unterstützter Entwurf", + "jvm_resource.draft_source.manual": "Manuelle Bearbeitung", + "jvm_resource.empty.no_resource_data": "Keine Ressourcendaten", + "jvm_resource.error.ai_plan_context_mismatch": "Der aktuelle JVM-Tab passt nicht zum Quellkontext des AI-Plans. Die automatische Anwendung wurde abgelehnt.", + "jvm_resource.error.ai_plan_missing_context": "Dem AI-Plan fehlt der Quellkontext. Erzeuge ihn auf der Zielseite der JVM-Ressource erneut, bevor du ihn anwendest.", + "jvm_resource.error.ai_plan_to_draft_failed": "Der AI-Plan kann derzeit nicht in einen JVM-Vorschauentwurf umgewandelt werden.", + "jvm_resource.error.apply_failed": "JVM-Änderung konnte nicht ausgeführt werden.", + "jvm_resource.error.apply_unavailable": "Die Ausführung von JVM-Änderungen ist in diesem Build nicht verfügbar.", + "jvm_resource.error.confirmation_missing": "Das Bestätigungstoken fehlt. Zeige vor der Ausführung erneut eine Vorschau an.", + "jvm_resource.error.connection_missing": "Die Verbindung existiert nicht oder wurde gelöscht.", + "jvm_resource.error.context_changed": "Der Ressourcenkontext hat sich geändert. Zeige vor der Ausführung erneut eine Vorschau an.", + "jvm_resource.error.draft_invalid": "Der Änderungsentwurf ist ungültig.", + "jvm_resource.error.get_value_unavailable": "Das Lesen von JVM-Werten ist in diesem Build nicht verfügbar.", + "jvm_resource.error.payload_object_required": "Payload muss ein JSON-Objekt sein.", + "jvm_resource.error.preview_failed": "JVM-Änderung konnte nicht in der Vorschau angezeigt werden.", + "jvm_resource.error.preview_required": "Zeige die Änderung in der Vorschau an, bevor du die Ausführung bestätigst.", + "jvm_resource.error.preview_result_invalid": "Das Vorschauergebnis hat ein ungültiges Format.", + "jvm_resource.error.preview_unavailable": "Die JVM-Änderungsvorschau ist in diesem Build nicht verfügbar.", + "jvm_resource.error.read_failed": "JVM-Ressource konnte nicht gelesen werden.", + "jvm_resource.error.reason_required": "Gib einen Änderungsgrund ein.", + "jvm_resource.error.resource_id_empty": "Die Ressourcen-ID ist leer, daher kann kein Änderungsentwurf erstellt werden.", + "jvm_resource.error.resource_path_empty": "Der Ressourcenpfad ist leer.", + "jvm_resource.field.action": "Aktion", + "jvm_resource.field.available_actions": "Verfügbare Aktionen", + "jvm_resource.field.draft_source": "Entwurfsquelle", + "jvm_resource.field.format": "Format", + "jvm_resource.field.payload": "Payload (JSON)", + "jvm_resource.field.payload_fields": "Payload-Felder: ", + "jvm_resource.field.reason": "Änderungsgrund", + "jvm_resource.field.resource_id": "Ressourcen-ID", + "jvm_resource.field.resource_path": "Ressourcenpfad", + "jvm_resource.field.resource_type": "Ressourcentyp", + "jvm_resource.field.resource_version": "Ressourcenversion", + "jvm_resource.field.target_resource": "Zielressource", + "jvm_resource.field.version": "Version", + "jvm_resource.list_separator": ", ", + "jvm_resource.marker.required_suffix": " (erforderlich)", + "jvm_resource.message.ai_plan_draft_filled": "Der Entwurf wurde aus dem AI-Plan für {{resourceId}} befüllt. Zeige die Änderung vor der Bestätigung der Schreiboperation in der Vorschau an.", + "jvm_resource.message.apply_success": "JVM-Änderung wurde ausgeführt.", + "jvm_resource.message.current_action": "Aktuelle Aktion: ", + "jvm_resource.message.payload_hint": "Die Vorschau verwendet den aktuellen Entwurf. Die Bestätigung verwendet die letzte erfolgreiche Vorschau-Anfrage. Zeigen Sie nach Änderungen am Entwurf erneut eine Vorschau an.", + "jvm_resource.message.payload_template_applied": "Für die aktuelle Aktion wurde eine empfohlene Vorlage eingefügt.", + "jvm_resource.placeholder.action_default": "Zum Beispiel put / clear / evict", + "jvm_resource.placeholder.action_jmx": "Zum Beispiel set oder invoke", + "jvm_resource.placeholder.reason": "Grund für diese JVM-Ressourcenänderung eingeben", + "jvm_resource.presentation.action.clear.description": "Leert Daten oder Status in der aktuellen JVM-Ressource.", + "jvm_resource.presentation.action.clear.label": "Ressource leeren", + "jvm_resource.presentation.action.delete.description": "Löscht die aktuelle Ressource oder hebt ihre Registrierung auf.", + "jvm_resource.presentation.action.delete.label": "Ressource löschen", + "jvm_resource.presentation.action.evict.description": "Verdrängt den Ziel-Cache-Eintrag aus der aktuellen JVM-Laufzeit.", + "jvm_resource.presentation.action.evict.label": "Cache verdrängen", + "jvm_resource.presentation.action.invoke.description": "Ruft eine Verwaltungsoperation auf, die die aktuelle Ressource bereitstellt.", + "jvm_resource.presentation.action.invoke.label": "Operation aufrufen", + "jvm_resource.presentation.action.put.description": "Schreibt den payload-Inhalt in die aktuelle JVM-Ressource.", + "jvm_resource.presentation.action.put.label": "Ressource schreiben", + "jvm_resource.presentation.action.refresh.description": "Aktualisiert den Laufzeitstatus der aktuellen Ressource.", + "jvm_resource.presentation.action.refresh.label": "Ressource aktualisieren", + "jvm_resource.presentation.action.reload.description": "Lädt die aktuelle Ressource oder ihre Konfiguration neu.", + "jvm_resource.presentation.action.reload.label": "Neu laden", + "jvm_resource.presentation.action.remove.description": "Entfernt den angegebenen Eintrag aus der aktuellen Ressource.", + "jvm_resource.presentation.action.remove.label": "Eintrag entfernen", + "jvm_resource.presentation.action.reset.description": "Setzt die aktuelle Ressource auf ihren initialen oder Standardstatus zurück.", + "jvm_resource.presentation.action.reset.label": "Status zurücksetzen", + "jvm_resource.presentation.action.set.description": "Aktualisiert einen beschreibbaren Eigenschaftswert, den die aktuelle Ressource bereitstellt.", + "jvm_resource.presentation.action.set.label": "Eigenschaft setzen", + "jvm_resource.presentation.audit_result.applied": "Ausgeführt", + "jvm_resource.presentation.audit_result.blocked": "Blockiert", + "jvm_resource.presentation.audit_result.failed": "Fehlgeschlagen", + "jvm_resource.presentation.audit_result.success": "Erfolgreich", + "jvm_resource.presentation.audit_result.unknown": "Unbekannt", + "jvm_resource.presentation.audit_result.warning": "Warnung", + "jvm_resource.presentation.risk.high": "Hoch", + "jvm_resource.presentation.risk.low": "Niedrig", + "jvm_resource.presentation.risk.medium": "Mittel", + "jvm_resource.presentation.risk.unknown": "Unbekannt", + "jvm_resource.presentation.unnamed_action": "Unbenannte Aktion", + "jvm_resource.section.metadata": "Metadaten", + "jvm_resource.section.resource_value": "Ressourcenwert", + "jvm_resource.section.supported_actions": "Unterstützte Ressourcenaktionen", + "jvm_resource.title": "JVM-Ressourcenarbeitsbereich", + "jvm.backend.capability.reason.read_only": "Aktuelle Verbindung ist schreibgeschützt", + "jvm.backend.connection_error.agent.base_url_invalid.help": "Gib eine vollständige http://- oder https://-URL ein, z. B. http://127.0.0.1:19090/gonavi/agent/jvm.", + "jvm.backend.connection_error.agent.base_url_invalid.summary": "Agent-Verbindung fehlgeschlagen: Agent Base URL ist ungültig.", + "jvm.backend.connection_error.agent.base_url_required": "Agent-Verbindung fehlgeschlagen: Agent Base URL fehlt.", + "jvm.backend.connection_error.agent.connection_refused.help": "Prüfe, ob der Java-Dienst den GoNavi Agent mit `-javaagent` gestartet hat, und prüfe Base URL, Port-Mapping und Firewall.", + "jvm.backend.connection_error.agent.connection_refused.summary": "Agent-Verbindung fehlgeschlagen: Der Ziel-Agent-Management-Port lauscht nicht oder die Adresse ist nicht erreichbar.", + "jvm.backend.connection_error.agent.forbidden.help": "Prüfe, ob Client-Quelle, Authentifizierung und Agent-Zugriffsrichtlinie GoNavi den Zugriff erlauben.", + "jvm.backend.connection_error.agent.forbidden.summary": "Agent-Verbindung fehlgeschlagen: Agent hat diese Anfrage abgelehnt.", + "jvm.backend.connection_error.agent.scheme_unsupported.help": "Ändere Agent Base URL auf eine Adresse, die mit http:// oder https:// beginnt.", + "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Agent-Verbindung fehlgeschlagen: nur HTTP oder HTTPS wird unterstützt.", + "jvm.backend.connection_error.agent.timeout.help": "Prüfe, ob die Zieladresse erreichbar ist, der Agent gestartet ist, und erhöhe bei Bedarf das Verbindungstimeout.", + "jvm.backend.connection_error.agent.timeout.summary": "Agent-Verbindung fehlgeschlagen: Zugriff auf den Agent-Management-Port ist abgelaufen.", + "jvm.backend.connection_error.agent.unauthorized.help": "Prüfe, ob der Agent API Key in der Verbindung zu den Startparametern des Zielservices passt.", + "jvm.backend.connection_error.agent.unauthorized.summary": "Agent-Verbindung fehlgeschlagen: Agent hat geantwortet, aber der API Key fehlt oder ist ungültig.", + "jvm.backend.connection_error.endpoint.base_url_invalid.help": "Gib eine vollständige http://- oder https://-URL ein, die auf den Management-API-Stammpfad mit GoNavi JVM HTTP contract zeigt, z. B. http://127.0.0.1:19090/manage/jvm.", + "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Endpoint-Verbindung fehlgeschlagen: Endpoint Base URL ist ungültig.", + "jvm.backend.connection_error.endpoint.base_url_required": "Endpoint-Verbindung fehlgeschlagen: Endpoint Base URL fehlt.", + "jvm.backend.connection_error.endpoint.connection_refused.help": "Prüfe, dass Base URL auf die Management-API mit GoNavi JVM HTTP contract zeigt, und prüfe Dienst-Listener, Port-Mapping und Firewall.", + "jvm.backend.connection_error.endpoint.connection_refused.summary": "Endpoint-Verbindung fehlgeschlagen: Die Ziel-Management-API lauscht nicht oder die Adresse ist nicht erreichbar.", + "jvm.backend.connection_error.endpoint.forbidden.help": "Prüfe, ob Client-Quelle, Authentifizierung und Zugriffsrichtlinie GoNavi den Zugriff auf diese Management-API erlauben.", + "jvm.backend.connection_error.endpoint.forbidden.summary": "Endpoint-Verbindung fehlgeschlagen: Die Ziel-Management-API hat diese Anfrage abgelehnt.", + "jvm.backend.connection_error.endpoint.not_found.help": "Prüfe, dass Base URL auf den Stamm der JVM-Management-API zeigt und nicht auf Business-Endpoint, Healthcheck oder Gateway-Startseite.", + "jvm.backend.connection_error.endpoint.not_found.summary": "Endpoint-Verbindung fehlgeschlagen: Das Ziel hat geantwortet, aber die GoNavi JVM-Management-API wurde nicht gefunden.", + "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "Ändere Endpoint Base URL auf eine Adresse, die mit http:// oder https:// beginnt.", + "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Endpoint-Verbindung fehlgeschlagen: nur HTTP oder HTTPS wird unterstützt.", + "jvm.backend.connection_error.endpoint.timeout.help": "Prüfe, ob Base URL erreichbar ist, der Zielservice gestartet ist, und erhöhe bei Bedarf das Verbindungstimeout.", + "jvm.backend.connection_error.endpoint.timeout.summary": "Endpoint-Verbindung fehlgeschlagen: Zugriff auf die Ziel-Management-API ist abgelaufen.", + "jvm.backend.connection_error.endpoint.unauthorized.help": "Prüfe, ob der Endpoint API Key in der Verbindung zur Zielservice-Konfiguration passt.", + "jvm.backend.connection_error.endpoint.unauthorized.summary": "Endpoint-Verbindung fehlgeschlagen: Die Ziel-Management-API hat geantwortet, aber der API Key fehlt oder ist ungültig.", + "jvm.backend.connection_error.generic": "JVM-Verbindung fehlgeschlagen", + "jvm.backend.connection_error.jmx.auth.help": "Prüfe, ob Ziel-JMX Authentifizierung deaktiviert. Falls Authentifizierung erforderlich ist, gib Benutzername und Passwort vor dem Verbinden an.", + "jvm.backend.connection_error.jmx.auth.summary": "JMX-Verbindung fehlgeschlagen: {{target}} erfordert Authentifizierung oder die aktuellen Zugangsdaten sind ungültig.", + "jvm.backend.connection_error.jmx.connection_refused.help": "Prüfe, ob Remote-JMX auf der Ziel-JVM aktiviert ist, und prüfe Host, Firewall, Port-Mapping, SSH und Proxy.", + "jvm.backend.connection_error.jmx.connection_refused.summary": "JMX-Verbindung fehlgeschlagen: Verbindung zu {{target}} nicht möglich, weil der Port nicht lauscht oder das Netzwerk nicht erreichbar ist.", + "jvm.backend.connection_error.jmx.connection_reset.help": "Prüfe, ob der konfigurierte Port der exponierte JMX-Port der JVM ist und nicht Business-Port, Debug-Port oder Proxy-Weiterleitung.", + "jvm.backend.connection_error.jmx.connection_reset.summary": "JMX-Verbindung fehlgeschlagen: Der Dienst auf {{target}} hat die Verbindung geschlossen; der Port ist kein kompatibler Standard-JMX-RMI-Port.", + "jvm.backend.connection_error.jmx.host_required": "JMX-Verbindung fehlgeschlagen: Host fehlt.", + "jvm.backend.connection_error.jmx.java_missing.help": "Installiere zuerst JRE/JDK oder setze die Umgebungsvariable GONAVI_JMX_JAVA_BIN auf die richtige `java`-Datei.", + "jvm.backend.connection_error.jmx.java_missing.summary": "JMX-Verbindung fehlgeschlagen: Auf diesem Rechner wurde keine `java` runtime gefunden, daher kann GoNavi den JMX helper nicht starten.", + "jvm.backend.connection_error.jmx.no_such_object.help": "Das bedeutet meist, dass ein RMI-Registry-Port, Debug-Port oder anderer Java-Service-Port verwendet wurde. Prüfe `jmxremote.port` und `jmxremote.rmi.port`.", + "jvm.backend.connection_error.jmx.no_such_object.summary": "JMX-Verbindung fehlgeschlagen: Auf {{target}} läuft ein RMI-Dienst, aber kein verwendbarer JMX RMIServer-Port.", + "jvm.backend.connection_error.jmx.non_jrmp.help": "Verwende den tatsächlich von der Anwendung exponierten JMX-Port, nicht den Business-`server.port`. Wenn der Dienst nur `-Dcom.sun.management.jmxremote` aktiviert, aber keinen `jmxremote.port` setzt, ist keine direkte Remote-Verbindung möglich.", + "jvm.backend.connection_error.jmx.non_jrmp.summary": "JMX-Verbindung fehlgeschlagen: {{target}} ist kein Standardport für JMX remote management; er sieht eher wie ein Business- oder HTTP-Port aus.", + "jvm.backend.connection_error.jmx.port_invalid": "JMX-Verbindung fehlgeschlagen: Port ist ungültig. Gib einen gültigen Port von 1 bis 65535 ein.", + "jvm.backend.connection_error.jmx.timeout.help": "Prüfe, ob der Port erreichbar ist, das Netzwerk nicht blockiert wird, und erhöhe bei Bedarf das Verbindungstimeout.", + "jvm.backend.connection_error.jmx.timeout.summary": "JMX-Verbindung fehlgeschlagen: Verbindung zu {{target}} ist abgelaufen.", + "jvm.backend.connection_error.suggestion": "Vorschlag: {{detail}}", + "jvm.backend.connection_error.technical_detail": "Technisches Detail: {{detail}}", + "jvm.backend.diagnostic.arthas.base_url_invalid": "Arthas Tunnel-Adresse ist ungültig: {{detail}}", + "jvm.backend.diagnostic.arthas.base_url_required": "Arthas Tunnel-Adresse ist erforderlich", + "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "Der aktive Befehl in dieser Arthas Tunnel-Sitzung stimmt nicht mit dem abzubrechenden Befehl überein.", + "jvm.backend.diagnostic.arthas.command_already_running": "In dieser Arthas Tunnel-Sitzung läuft bereits ein Befehl. Warte auf den Abschluss oder brich ihn zuerst ab.", + "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel-Befehl wurde abgebrochen", + "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel-Befehl hat nach {{timeout}} eine Zeitüberschreitung erreicht", + "jvm.backend.diagnostic.arthas.connect_canceled": "Arthas Tunnel WebSocket-Verbindung wurde abgebrochen", + "jvm.backend.diagnostic.arthas.connect_failed": "Arthas Tunnel WebSocket-Verbindung fehlgeschlagen: {{detail}}", + "jvm.backend.diagnostic.arthas.connect_timeout": "Arthas Tunnel WebSocket-Verbindung hat nach {{timeout}} ohne Antwort eine Zeitüberschreitung erreicht", + "jvm.backend.diagnostic.arthas.connection_closed": "Arthas Tunnel-Verbindung wurde geschlossen: {{detail}}", + "jvm.backend.diagnostic.arthas.connection_closed_code": "Arthas Tunnel-Verbindung wurde geschlossen: code={{code}}", + "jvm.backend.diagnostic.arthas.connection_not_ready": "Arthas Tunnel-Verbindung ist noch nicht bereit. Versuche es später erneut.", + "jvm.backend.diagnostic.arthas.http_failed": "Arthas Tunnel-Verbindung fehlgeschlagen: HTTP {{status}}", + "jvm.backend.diagnostic.arthas.no_running_command": "In dieser Arthas Tunnel-Sitzung läuft kein Befehl.", + "jvm.backend.diagnostic.arthas.read_canceled": "Lesen der Arthas Tunnel-Ausgabe wurde abgebrochen", + "jvm.backend.diagnostic.arthas.read_deadline_failed": "Arthas Tunnel-Lesefrist konnte nicht gesetzt werden: {{detail}}", + "jvm.backend.diagnostic.arthas.read_failed": "Arthas Tunnel-Ausgabe konnte nicht gelesen werden: {{detail}}", + "jvm.backend.diagnostic.arthas.read_timeout": "Lesen der Arthas Tunnel-Ausgabe hat nach {{timeout}} ohne Antwort eine Zeitüberschreitung erreicht", + "jvm.backend.diagnostic.arthas.request_encode_failed": "Arthas Tunnel-Anfrage konnte nicht codiert werden: {{detail}}", + "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel unterstützt nur http/https/ws/wss-Adressen: {{scheme}}", + "jvm.backend.diagnostic.arthas.send_canceled": "Senden des Arthas Tunnel-Terminalbefehls wurde abgebrochen", + "jvm.backend.diagnostic.arthas.send_failed": "Arthas Tunnel-Terminalbefehl konnte nicht gesendet werden: {{detail}}", + "jvm.backend.diagnostic.arthas.send_timeout": "Senden des Arthas Tunnel-Terminalbefehls hat nach {{timeout}} ohne Antwort eine Zeitüberschreitung erreicht", + "jvm.backend.diagnostic.arthas.session_config_changed": "Arthas Tunnel-Sitzungskonfiguration hat sich geändert. Erstelle die Diagnosesitzung erneut.", + "jvm.backend.diagnostic.arthas.session_missing": "Diagnosesitzung existiert nicht. Erstelle die Arthas Tunnel-Sitzung erneut.", + "jvm.backend.diagnostic.arthas.target_id_required": "Arthas Tunnel target ID ist erforderlich (targetId / agentId)", + "jvm.backend.diagnostic.arthas.target_not_found": "Zielinstanz wurde nicht gefunden. Prüfe targetId / agentId und ob der tunnel client online ist.", + "jvm.backend.diagnostic.arthas.target_not_found_with_id": "Zielinstanz {{target}} wurde nicht gefunden. Prüfe targetId / agentId und ob der tunnel client online ist.", + "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Arthas Tunnel-Terminalbefehl konnte nicht codiert werden: {{detail}}", + "jvm.backend.diagnostic.arthas.write_deadline_failed": "Arthas Tunnel-Schreibfrist konnte nicht gesetzt werden: {{detail}}", + "jvm.backend.diagnostic.error.audit_write_blocked": "Diagnose-Auditdatensatz konnte nicht geschrieben werden; Befehlsausführung wurde blockiert: {{detail}}", + "jvm.backend.diagnostic.error.cancel_identifiers_required": "Abbruchbefehl benötigt sessionId und commandId", + "jvm.backend.diagnostic.error.command_required": "Diagnosebefehl darf nicht leer sein", + "jvm.backend.diagnostic.error.disabled": "JVM-Diagnoseerweiterung ist für diese Verbindung nicht aktiviert", + "jvm.backend.diagnostic.error.execute_canceled": "Diagnose-Ausführungsanfrage wurde abgebrochen: {{detail}}", + "jvm.backend.diagnostic.error.session_id_required": "Diagnosesitzungs-ID ist erforderlich. Erstelle zuerst eine Sitzung.", + "jvm.backend.diagnostic.error.transport_unsupported": "Nicht unterstützter JVM-Diagnosetransport: {{transport}}", + "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas-Befehl abgebrochen", + "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas-Befehl abgeschlossen", + "jvm.backend.diagnostic.message.cancel_requested": "Abbruchanfrage gesendet; warte, bis die Diagnose-Bridge den Befehl beendet", + "jvm.backend.diagnostic.message.command_completed": "Diagnosebefehl abgeschlossen", + "jvm.backend.diagnostic.policy.multiline_not_supported": "Diagnosebefehl unterstützt keine Zeilenumbrüche oder mehrere Befehle", + "jvm.backend.diagnostic.policy.mutating_not_allowed": "Hochriskante Diagnosebefehle sind für diese Verbindung nicht aktiviert: {{command}}", + "jvm.backend.diagnostic.policy.observe_not_allowed": "Observe-Diagnosebefehle sind für diese Verbindung nicht aktiviert: {{command}}", + "jvm.backend.diagnostic.policy.read_only_observe_only": "Die aktuelle Verbindung ist schreibgeschützt. Nur Observe-Diagnosebefehle sind erlaubt", + "jvm.backend.diagnostic.policy.trace_not_allowed": "Trace-Diagnosebefehle sind für diese Verbindung nicht aktiviert: {{command}}", + "jvm.backend.diagnostic.warning.audit_write_failed": "Auditdatensatz konnte nicht geschrieben werden: {{detail}}", + "jvm.backend.error.audit_write_blocked": "Auditdatensatz konnte nicht geschrieben werden; JVM-Änderung wurde blockiert: {{detail}}", + "jvm.backend.error.change_action_required": "JVM-Änderungsaktion ist erforderlich", + "jvm.backend.error.change_blocked_by_guard": "Die aktuelle Änderung wurde von Guard blockiert", + "jvm.backend.error.change_blocked_read_only": "Die aktuelle Verbindung ist schreibgeschützt, daher werden Schreibvorgänge blockiert", + "jvm.backend.error.change_confirmation_token_failed": "JVM-Änderungsbestätigungstoken konnte nicht erzeugt werden: {{detail}}", + "jvm.backend.error.change_reason_required": "JVM-Änderungsgrund ist erforderlich", + "jvm.backend.error.change_resource_id_required": "JVM-Ressourcen-ID ist erforderlich", + "jvm.backend.error.confirmation_token_expired": "Bestätigungstoken ist abgelaufen. Vorschau erneut ausführen und bestätigen.", + "jvm.backend.error.confirmation_token_invalid": "Bestätigungstoken ist ungültig. Vorschau erneut ausführen und bestätigen.", + "jvm.backend.error.confirmation_token_missing": "Bestätigungstoken fehlt. Schließe zuerst die Vorschau-Bestätigung ab.", + "jvm.backend.error.disallowed_mode": "Die aktuelle Verbindung erlaubt den Modus {{mode}} nicht", + "jvm.backend.error.preview_confirmation_missing": "Bestätigungstoken der Vorschau fehlt. Vorschau vor dem Senden erneut ausführen.", + "jvm.backend.error.preview_context_hash_failed": "JVM-Vorschaukontext konnte nicht erzeugt werden: {{detail}}", + "jvm.backend.error.preview_payload_hash_failed": "JVM-Vorschau-Payload-Digest konnte nicht erzeugt werden: {{detail}}", + "jvm.backend.error.resource_path_invalid": "Ungültiger JVM-Ressourcenpfad: {{detail}}", + "jvm.backend.message.connect_success": "JVM-Verbindung erfolgreich", + "jvm.backend.monitoring.error.session_not_found": "JVM-Überwachungssitzung für {{connectionId}} {{providerMode}} nicht gefunden", + "jvm.backend.monitoring.error.snapshot_unsupported": "{{provider}} Überwachungssnapshot wird noch nicht unterstützt", + "jvm.backend.monitoring.warning.sample_auto_stopped": "Die Monitoring-Abfrage ist {{count}} Mal in Folge fehlgeschlagen; diese Sitzung wurde automatisch beendet", + "jvm.backend.separator.message_warning": "; ", + "jvm.backend.warning.failed_audit_write_failed": "Fehler-Auditdatensatz konnte nicht geschrieben werden: {{detail}}", + "jvm.backend.warning.terminal_audit_write_failed": "Abschluss-Auditdatensatz konnte nicht geschrieben werden: {{detail}}", + "log_panel.action.clear": "Logs leeren", + "log_panel.action.close": "Panel schliessen", + "log_panel.affected_rows": "Betroffene Zeilen: {{count}}", + "log_panel.column.duration": "Dauer", + "log_panel.column.sql_message": "SQL / Meldung", + "log_panel.column.status": "Zustand", + "log_panel.column.time": "Zeit", + "log_panel.description": "Zeichnet Ausfuehrungsstatus, Dauer und Fehler fuer schnelle Nachverfolgung auf.", + "log_panel.empty": "Keine SQL-Ausfuehrungslogs", + "log_panel.short_title": "Logs", + "log_panel.title": "SQL-Ausfuehrungslog", + "message_publish_modal.action.send": "Senden", + "message_publish_modal.error.build_command_failed": "Sende-Befehl konnte nicht erstellt werden", + "message_publish_modal.error.send_failed_detail": "Senden fehlgeschlagen: {{detail}}", + "message_publish_modal.error.unknown_error": "Unbekannter Fehler", + "message_publish_modal.field.body_mode.label": "Nachrichtentext-Typ", + "message_publish_modal.field.body.extra": "Im JSON-Modus ist gültiges JSON erforderlich. Der Textmodus sendet den Inhalt unverändert.", + "message_publish_modal.field.body.label": "Nachrichtentext", + "message_publish_modal.field.body.placeholder": "Nachrichtentext eingeben", + "message_publish_modal.field.body.required": "Nachrichtentext eingeben", + "message_publish_modal.field.delay_level.extra": "RocketMQ verwendet feste Verzögerungsstufen. 0 sendet sofort.", + "message_publish_modal.field.delay_level.label": "Delay Level (optional)", + "message_publish_modal.field.exchange.extra": "Leer lassen, um den Standard-Exchange zu verwenden. Wenn Sie einen eigenen Exchange eingeben, stellen Sie sicher, dass die Ziel-Queue ein binding hat.", + "message_publish_modal.field.exchange.label": "Exchange (optional)", + "message_publish_modal.field.exchange.placeholder": "Beispiel: events.topic", + "message_publish_modal.field.headers.extra": "Muss ein JSON-Objekt sein, zum Beispiel {{example}}.", + "message_publish_modal.field.headers.label": "Headers (optional)", + "message_publish_modal.field.properties.extra": "Muss ein JSON-Objekt sein, zum Beispiel {{example}}.", + "message_publish_modal.field.properties.label": "Properties (optional)", + "message_publish_modal.field.qos.extra": "0 ist at most once, 1 ist at least once und 2 ist exactly once.", + "message_publish_modal.field.retain.label": "Retain-Nachricht", + "message_publish_modal.field.routing_key.extra": "Leer lassen, um standardmäßig den aktuellen Queue-Namen zu verwenden.", + "message_publish_modal.field.routing_key.label": "Routing Key (optional)", + "message_publish_modal.field.routing_key.placeholder": "Beispiel: orders.queue", + "message_publish_modal.field.tag.extra": "Leer lassen, um nicht nach Tag zu filtern oder keinen Tag zu schreiben.", + "message_publish_modal.field.tag.label": "Tag (optional)", + "message_publish_modal.footer.success_prefix": "Nach erfolgreichem Senden wird", + "message_publish_modal.footer.success_suffix": " zurückgegeben, um zu bestätigen, ob diese Testnachricht übermittelt wurde.", + "message_publish_modal.option.no_delay": "Keine Verzögerung", + "message_publish_modal.option.text": "Text", + "message_publish_modal.title": "Nachricht testweise senden", + "message_publish_modal.title_with_connection": "Nachricht testweise senden · {{connectionName}}", + "message_publish.error.destination_required": "Ziel-Topic / Queue eingeben", + "message_publish.error.invalid_json_detail": "{{field}} ist kein gültiges JSON: {{detail}}", + "message_publish.error.json_object_required": "{{field}} muss ein JSON-Objekt sein", + "message_publish.error.mqtt_wildcard_topic": "MQTT publish Topic darf keine Platzhalter + oder # enthalten", + "message_publish.error.required_field": "{{field}} ist erforderlich", + "message_publish.error.unsupported_type": "Die aktuelle Datenquelle unterstützt das Testen des Nachrichtenversands nicht: {{type}}", + "message_publish.field.body": "Nachrichtentext", + "message_publish.field.message_key": "Nachrichten-Key", + "message_publish.presentation.kafka.alert": "Dieses Formular erstellt automatisch einen Kafka publish JSON-Befehl und ruft das Backend für eine Testsendung auf.", + "message_publish.presentation.kafka.destination_placeholder": "Beispiel: orders.events", + "message_publish.presentation.kafka.key_placeholder": "Optional. Im JSON-Modus eine gültige JSON-Zeile eingeben.", + "message_publish.presentation.kafka.success_hint": "Headers werden als Kafka Record Headers mitgesendet.", + "message_publish.presentation.key_label": "Nachrichten-Key (optional)", + "message_publish.presentation.keys_label": "Nachrichten-Keys (optional)", + "message_publish.presentation.mqtt.alert": "Dieses Formular erstellt automatisch einen MQTT publish JSON-Befehl und sendet eine Testnachricht direkt über den broker.", + "message_publish.presentation.mqtt.destination_placeholder": "Beispiel: devices/device-001/telemetry", + "message_publish.presentation.mqtt.success_hint": "QoS und retain können separat angegeben werden. Leere Felder verwenden die Standardwerte der aktuellen Verbindung.", + "message_publish.presentation.rabbitmq.alert": "Dieses Formular erstellt automatisch einen RabbitMQ publish JSON-Befehl und sendet eine Testnachricht über die Management API.", + "message_publish.presentation.rabbitmq.destination_placeholder": "Beispiel: orders.queue", + "message_publish.presentation.rabbitmq.destination_required": "Queue eingeben", + "message_publish.presentation.rabbitmq.success_hint": "Wenn Exchange leer ist, wird der Standard-Exchange verwendet und der Queue-Name als routing key genutzt.", + "message_publish.presentation.rocketmq.alert": "Dieses Formular erstellt automatisch einen RocketMQ publish JSON-Befehl und sendet eine Testnachricht über NameServer/Broker.", + "message_publish.presentation.rocketmq.destination_placeholder": "Beispiel: orders.events", + "message_publish.presentation.rocketmq.key_placeholder": "Mehrere Key-Werte durch Kommas getrennt eingeben", + "message_publish.presentation.rocketmq.success_hint": "Tag, Keys, Delay Level und Properties werden in die RocketMQ-Nachrichtenattribute geschrieben.", + "message_publish.presentation.rocketmq.tag_placeholder": "Beispiel: TagA", + "message_publish.presentation.topic_required": "Topic eingeben", + "proxy.backend.error.host_empty": "Proxy-Host ist leer", + "proxy.backend.error.http_connect_failed": "Verbindung zum HTTP-Proxy fehlgeschlagen: {{detail}}", + "proxy.backend.error.http_connect_read_failed": "Lesen der HTTP CONNECT-Antwort fehlgeschlagen: {{detail}}", + "proxy.backend.error.http_connect_status_failed": "HTTP-Proxy CONNECT fehlgeschlagen: {{status}}", + "proxy.backend.error.http_connect_write_failed": "Senden der HTTP CONNECT-Anfrage fehlgeschlagen: {{detail}}", + "proxy.backend.error.listen_failed": "Lokaler Proxy-Listener konnte nicht erstellt werden: {{detail}}", + "proxy.backend.error.port_invalid": "Ungültiger Proxy-Port: {{port}}", + "proxy.backend.error.remote_addr_invalid": "Ungültige Remote-Adresse: {{address}}", + "proxy.backend.error.socks5_connect_failed": "SOCKS5-Proxy-Verbindung fehlgeschlagen: {{detail}}", + "proxy.backend.error.socks5_dialer_failed": "SOCKS5-Proxy-Dialer konnte nicht erstellt werden: {{detail}}", + "proxy.backend.error.unsupported_type": "Nicht unterstützter Proxy-Typ: {{type}}", + "query_editor.action.ai_explain_sql": "SQL mit AI erklären", + "query_editor.action.ai_explain_sql_menu": "SQL erklären", + "query_editor.action.ai_generate_sql": "SQL mit AI erzeugen", + "query_editor.action.ai_generate_sql_menu": "SQL erzeugen", + "query_editor.action.ai_optimize_sql": "SQL mit AI optimieren", + "query_editor.action.ai_optimize_sql_menu": "SQL optimieren", + "query_editor.action.ai_schema_analysis": "Schema-Analyse", + "query_editor.action.export_sql_file": "SQL-Datei exportieren", + "query_editor.action.format": "Formatieren", + "query_editor.action.format_sql": "SQL formatieren", + "query_editor.action.hide_results_panel": "Ergebnisbereich ausblenden", + "query_editor.action.hide_results_panel_with_shortcut": "Ergebnisbereich ausblenden ({{shortcut}})", + "query_editor.action.more": "Mehr", + "query_editor.action.rename_query": "Abfrage umbenennen", + "query_editor.action.resize_editor": "Höhe durch Ziehen ändern", + "query_editor.action.results": "Ergebnisse", + "query_editor.action.run": "Ausführen", + "query_editor.action.run_with_shortcut": "Ausführen ({{shortcut}})", + "query_editor.action.save": "Speichern", + "query_editor.action.save_with_shortcut": "Speichern ({{shortcut}})", + "query_editor.action.show_object_info": "Objektinformationen anzeigen", + "query_editor.action.show_results_panel": "Ergebnisbereich anzeigen", + "query_editor.action.show_results_panel_with_shortcut": "Ergebnisbereich anzeigen ({{shortcut}})", + "query_editor.action.stop": "Stoppen", + "query_editor.ai_prompt.context": "Kontext: {{type}} {{name}}, ausgewählte Datenbank {{database}}.\n", + "query_editor.ai_prompt.default_database": "Standard", + "query_editor.ai_prompt.default_source": "Datenbank", + "query_editor.ai_prompt.diagnose": "Beim Ausführen dieses SQL ist ein Fehler aufgetreten:\n```sql\n{{sql}}\n```\n\nDie Datenbank meldete diesen Fehler:\n```text\n{{error}}\n```\n\nAnalysiere die Ursache und schlage eine Korrektur vor.", + "query_editor.ai_prompt.explain": "Erkläre die Ausführungslogik dieser SQL-Anweisung:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.generate": "Erzeuge eine Abfrage anhand des aktuellen Datenbankschemas.", + "query_editor.ai_prompt.optimize": "Analysiere diese SQL-Anweisung auf Leistungsprobleme und schlage Optimierungen vor:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.schema": "Analysiere das aktuelle Datenbankschema und schlage Verbesserungen für Leistung und Design vor.", + "query_editor.completion.action.absolute_value": "Absolutwert", + "query_editor.completion.action.approximate_distinct": "ungefähr eindeutige Werte", + "query_editor.completion.action.approximate_distinct_count": "ungefähre Anzahl eindeutiger Werte", + "query_editor.completion.action.approximate_percentile": "ungefähres Perzentil", + "query_editor.completion.action.approximate_quantile": "ungefähres Quantil", + "query_editor.completion.action.array_aggregation": "Array-Aggregation", + "query_editor.completion.action.array_length": "Array-Länge", + "query_editor.completion.action.average": "Durchschnitt", + "query_editor.completion.action.bitmap_aggregation": "Bitmap-Aggregation", + "query_editor.completion.action.bitmap_construction": "Bitmap erstellen", + "query_editor.completion.action.bitmap_count": "Bitmap-Anzahl", + "query_editor.completion.action.boolean_and_aggregation": "Boolesche UND-Aggregation", + "query_editor.completion.action.boolean_or_aggregation": "Boolesche ODER-Aggregation", + "query_editor.completion.action.character_length": "Zeichenlänge", + "query_editor.completion.action.concat_with_separator": "mit Trennzeichen verketten", + "query_editor.completion.action.concatenation": "verketten", + "query_editor.completion.action.condition_mapping": "Bedingungszuordnung", + "query_editor.completion.action.conditional_check": "Bedingungsprüfung", + "query_editor.completion.action.count": "Anzahl", + "query_editor.completion.action.current_database": "aktuelle Datenbank", + "query_editor.completion.action.current_date": "aktuelles Datum", + "query_editor.completion.action.current_date_time": "aktuelles Datum und Uhrzeit", + "query_editor.completion.action.current_time": "aktuelle Uhrzeit", + "query_editor.completion.action.current_timestamp": "aktueller Zeitstempel", + "query_editor.completion.action.current_user": "aktueller Benutzer", + "query_editor.completion.action.database_current_time": "aktuelle Datenbankzeit", + "query_editor.completion.action.date_addition": "Datumsaddition", + "query_editor.completion.action.date_conversion": "in Datum umwandeln", + "query_editor.completion.action.date_difference": "Datumsdifferenz", + "query_editor.completion.action.date_field_extraction": "Datumsfeld extrahieren", + "query_editor.completion.action.date_formatting": "Datumsformatierung", + "query_editor.completion.action.date_subtraction": "Datumssubtraktion", + "query_editor.completion.action.date_truncation": "Datum kürzen", + "query_editor.completion.action.date_value": "Datum", + "query_editor.completion.action.datetime_conversion": "in Datum und Uhrzeit umwandeln", + "query_editor.completion.action.datetime_value": "Datum und Uhrzeit", + "query_editor.completion.action.decimal_truncation": "Dezimalstellen kürzen", + "query_editor.completion.action.dense_rank": "dichter Rang", + "query_editor.completion.action.distinct_array_aggregation": "eindeutige Array-Aggregation", + "query_editor.completion.action.e_power": "e-Potenz", + "query_editor.completion.action.elapsed_time": "verstrichene Zeit", + "query_editor.completion.action.epoch_seconds": "Epoch-Sekunden", + "query_editor.completion.action.exact_distinct": "exakt eindeutige Werte", + "query_editor.completion.action.first_non_null": "ersten Nicht-NULL-Wert zurückgeben", + "query_editor.completion.action.first_value": "erster Wert", + "query_editor.completion.action.format_as_text": "als Text formatieren", + "query_editor.completion.action.group_concatenation": "Gruppenverkettung", + "query_editor.completion.action.guid_generation": "GUID erzeugen", + "query_editor.completion.action.hexadecimal": "hexadezimal", + "query_editor.completion.action.high_precision_current_time": "aktuelle Zeit mit hoher Genauigkeit", + "query_editor.completion.action.hll_aggregation": "HLL-Aggregation", + "query_editor.completion.action.hll_hash": "HLL-Hash", + "query_editor.completion.action.instant_rate_of_change": "momentane Änderungsrate", + "query_editor.completion.action.int64_conversion": "in Int64 umwandeln", + "query_editor.completion.action.interpolation": "Interpolation", + "query_editor.completion.action.json_string_extraction": "JSON-Zeichenkette extrahieren", + "query_editor.completion.action.json_unquote": "JSON-Anführungszeichen entfernen", + "query_editor.completion.action.json_value_extraction": "JSON-Wert extrahieren", + "query_editor.completion.action.json_value_set": "JSON-Wert setzen", + "query_editor.completion.action.jsonb_path_extraction": "JSONB-Pfad extrahieren", + "query_editor.completion.action.julian_day": "julianischer Tag", + "query_editor.completion.action.last_insert_id": "letzte Insert-ID", + "query_editor.completion.action.last_row": "letzte Zeile", + "query_editor.completion.action.last_value": "letzter Wert", + "query_editor.completion.action.least_squares": "kleinste Quadrate", + "query_editor.completion.action.left_padding": "links auffüllen", + "query_editor.completion.action.left_space_trimming": "linke Leerzeichen entfernen", + "query_editor.completion.action.left_substring": "von links extrahieren", + "query_editor.completion.action.length": "Länge", + "query_editor.completion.action.list_aggregation": "Listenaggregation", + "query_editor.completion.action.list_unnest": "Liste entpacken", + "query_editor.completion.action.log_base_10": "Logarithmus zur Basis 10", + "query_editor.completion.action.log_base_2": "Logarithmus zur Basis 2", + "query_editor.completion.action.logarithm": "Logarithmus", + "query_editor.completion.action.lowercase": "in Kleinbuchstaben umwandeln", + "query_editor.completion.action.maximum": "Maximum", + "query_editor.completion.action.md5_hash": "MD5-Hash", + "query_editor.completion.action.minimum": "Minimum", + "query_editor.completion.action.modulo": "Modulo", + "query_editor.completion.action.month_addition": "Monate addieren", + "query_editor.completion.action.month_difference": "Monatsdifferenz", + "query_editor.completion.action.month_end_date": "Monatsende", + "query_editor.completion.action.next_row": "nächste Zeile", + "query_editor.completion.action.null_branch": "NULL-Zweig", + "query_editor.completion.action.null_if_equal": "NULL zurückgeben, wenn gleich", + "query_editor.completion.action.null_replacement": "NULL-Ersetzung", + "query_editor.completion.action.number_conversion": "in Zahl umwandeln", + "query_editor.completion.action.number_formatting": "Zahlenformatierung", + "query_editor.completion.action.position_lookup": "Position suchen", + "query_editor.completion.action.power_operation": "Potenzoperation", + "query_editor.completion.action.previous_row": "vorherige Zeile", + "query_editor.completion.action.quantile": "Quantil", + "query_editor.completion.action.random_number": "Zufallszahl", + "query_editor.completion.action.rank": "Rang", + "query_editor.completion.action.rate_of_change": "Änderungsrate", + "query_editor.completion.action.regex_match": "Regex-Übereinstimmung", + "query_editor.completion.action.regex_replace": "Regex-Ersetzung", + "query_editor.completion.action.replacement": "Ersetzung", + "query_editor.completion.action.right_padding": "rechts auffüllen", + "query_editor.completion.action.right_space_trimming": "rechte Leerzeichen entfernen", + "query_editor.completion.action.right_substring": "von rechts extrahieren", + "query_editor.completion.action.round_down": "abrunden", + "query_editor.completion.action.round_up": "aufrunden", + "query_editor.completion.action.rounding": "runden", + "query_editor.completion.action.row_number": "Zeilennummer", + "query_editor.completion.action.set_lookup": "Mengensuche", + "query_editor.completion.action.sha1_hash": "SHA1-Hash", + "query_editor.completion.action.sha2_hash": "SHA2-Hash", + "query_editor.completion.action.space_trimming": "Leerzeichen entfernen", + "query_editor.completion.action.spread": "Streuung", + "query_editor.completion.action.sql_literal": "SQL-Literal", + "query_editor.completion.action.square_root": "Quadratwurzel", + "query_editor.completion.action.string_aggregation": "Zeichenkettenaggregation", + "query_editor.completion.action.string_conversion": "in Zeichenkette umwandeln", + "query_editor.completion.action.string_repetition": "Zeichenkette wiederholen", + "query_editor.completion.action.string_reversal": "Zeichenkette umkehren", + "query_editor.completion.action.string_to_date": "Zeichenkette in Datum umwandeln", + "query_editor.completion.action.string_to_timestamp": "Zeichenkette in Zeitstempel umwandeln", + "query_editor.completion.action.struct_construction": "Struktur erstellen", + "query_editor.completion.action.substring_extraction": "Teilzeichenkette extrahieren", + "query_editor.completion.action.sum": "Summe", + "query_editor.completion.action.time_difference": "Zeitdifferenz", + "query_editor.completion.action.time_value": "Zeit", + "query_editor.completion.action.time_weighted_average": "zeitgewichteter Durchschnitt", + "query_editor.completion.action.timestamp_difference": "Zeitstempeldifferenz", + "query_editor.completion.action.truncate_date_or_number": "Datum oder Zahl kürzen", + "query_editor.completion.action.try_conversion": "Umwandlung versuchen", + "query_editor.completion.action.type_conversion": "Typumwandlung", + "query_editor.completion.action.unix_time_to_datetime": "Unix-Zeit in Datum und Uhrzeit umwandeln", + "query_editor.completion.action.unix_timestamp": "Unix-Zeitstempel", + "query_editor.completion.action.uppercase": "in Großbuchstaben umwandeln", + "query_editor.completion.action.uuid_generation": "UUID erzeugen", + "query_editor.completion.action.value_formatting": "Wert formatieren", + "query_editor.completion.action.version": "Version", + "query_editor.completion.detail.aggregate": "Aggregatfunktion", + "query_editor.completion.detail.aggregate_count": "Aggregat - zählen", + "query_editor.completion.detail.conditional": "Bedingungsfunktion", + "query_editor.completion.detail.conditional_if": "Bedingung - IF", + "query_editor.completion.detail.conversion": "Typumwandlungsfunktion", + "query_editor.completion.detail.conversion_cast": "Umwandlung - Typumwandlung", + "query_editor.completion.detail.crypto_md5": "Hashwert - MD5", + "query_editor.completion.detail.date_now": "Datum - aktuelles Datum und Uhrzeit", + "query_editor.completion.detail.date_time": "Datums- und Zeitfunktion", + "query_editor.completion.detail.info": "Informationsfunktion", + "query_editor.completion.detail.info_database": "Info - aktuelle Datenbank", + "query_editor.completion.detail.json": "JSON-Funktion", + "query_editor.completion.detail.json_extract": "JSON - Wert extrahieren", + "query_editor.completion.detail.math": "Mathematische Funktion", + "query_editor.completion.detail.math_abs": "Mathematik - Absolutwert", + "query_editor.completion.detail.modifier_distinct": "Modifikator - eindeutig", + "query_editor.completion.detail.sql_function": "SQL-Funktion", + "query_editor.completion.detail.string": "Zeichenkettenfunktion", + "query_editor.completion.detail.string_concat": "Zeichenkette - verketten", + "query_editor.completion.detail.utility": "Hilfsfunktion", + "query_editor.completion.detail.window": "Fensterfunktion", + "query_editor.completion.detail.window_row_number": "Fenster - Zeilennummer", + "query_editor.completion.documentation.comment": "Kommentar: {{comment}}", + "query_editor.empty_state.description": "Fuehren Sie eine Abfrage aus, damit die Ergebnisse unten im neuen Datengitter angezeigt werden.", + "query_editor.empty_state.title": "Warten auf SQL-Ausfuehrung", + "query_editor.format.keyword_lower": "Schlüsselwörter kleinschreiben", + "query_editor.format.keyword_upper": "Schlüsselwörter großschreiben", + "query_editor.format.restore_last_format": "Letzte Formatierung zurücknehmen", + "query_editor.format.shortcut_settings": "Tastenkürzel-Einstellungen...", + "query_editor.format.snippet_settings": "Snippet-Einstellungen...", + "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + klicken, um diese Funktion zu öffnen", + "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + klicken, um diese materialisierte Ansicht zu öffnen", + "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + klicken, um diese gespeicherte Prozedur zu öffnen", + "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + klicken, um diese Tabelle zu öffnen", + "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + klicken, um diesen Trigger zu öffnen", + "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + klicken, um diese Ansicht zu öffnen", + "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + klicken, um zu dieser Datenbank zu wechseln", + "query_editor.max_rows.option_1000": "Max. Zeilen: 1000", + "query_editor.max_rows.option_20000": "Max. Zeilen: 20000", + "query_editor.max_rows.option_500": "Max. Zeilen: 500", + "query_editor.max_rows.option_5000": "Max. Zeilen: 5000", + "query_editor.max_rows.option_unlimited": "Max. Zeilen: unbegrenzt", + "query_editor.max_rows.tooltip": "Maximale Anzahl zurückgegebener Zeilen. SELECT erhält automatisch ein LIMIT, damit sehr große Ergebnismengen die Oberfläche nicht blockieren.", + "query_editor.message.append_success": "Code angehängt.", + "query_editor.message.cancel_failed": "Abfrage konnte nicht abgebrochen werden: {{error}}", + "query_editor.message.cancel_no_running": "Keine laufende Abfrage zum Abbrechen.", + "query_editor.message.cancel_success": "Abfrage abgebrochen.", + "query_editor.message.connection_not_found": "Verbindung nicht gefunden.", + "query_editor.message.execution_failed_with_error": "Abfrageausführung fehlgeschlagen: {{error}}", + "query_editor.message.execution_multi_success": "{{statements}} Anweisungen ausgeführt und {{results}} Ergebnismengen erzeugt.", + "query_editor.message.execution_result_sets_success": "Ausführung abgeschlossen und {{results}} Ergebnismengen erzeugt.", + "query_editor.message.execution_success": "Ausführung erfolgreich.", + "query_editor.message.export_sql_file_failed": "SQL-Datei konnte nicht exportiert werden: {{error}}", + "query_editor.message.export_sql_file_success": "SQL-Datei exportiert.", + "query_editor.message.format_failed": "Formatierung fehlgeschlagen: Die SQL-Syntax ist möglicherweise ungültig.", + "query_editor.message.format_restore_success": "Der SQL-Stand vor der Formatierung wurde wiederhergestellt.", + "query_editor.message.insert_success": "Code an der aktuellen Cursorposition eingefügt.", + "query_editor.message.no_executable_sql": "Kein ausführbares SQL.", + "query_editor.message.no_format_restore_snapshot": "Es ist kein SQL-Stand vor der Formatierung zum Wiederherstellen verfügbar.", + "query_editor.message.no_selectable_sql": "Keine auswählbare SQL-Anweisung.", + "query_editor.message.object_info_target_not_found": "Der Cursor befindet sich auf keiner erkannten Tabelle oder Spalte.", + "query_editor.message.page_query_empty": "Die Seitenabfrage hat keine Ergebnismenge zurückgegeben.", + "query_editor.message.page_query_failed": "Seitenabfrage fehlgeschlagen: {{error}}", + "query_editor.message.read_only_index_metadata_unavailable": "Die Metadaten des eindeutigen Indexes konnten nicht geladen werden, daher können Änderungen nicht sicher gespeichert werden.", + "query_editor.message.read_only_no_safe_locator": "Es wurde weder ein Primärschlüssel noch ein verwendbarer eindeutiger Index erkannt, daher können Änderungen nicht sicher gespeichert werden.", + "query_editor.message.read_only_oracle_rowid_injection_unavailable": "Die Oracle-Abfrage verwendet *, daher konnte die ROWID-Lokatorspalte nicht automatisch eingefügt werden. Das Ergebnis bleibt schreibgeschützt.", + "query_editor.message.read_only_system_metadata": "Abfrageergebnisse aus Systemmetadaten bleiben schreibgeschützt.", + "query_editor.message.read_only_table_locator_metadata_unavailable": "Die Metadaten des Primärschlüssels/eindeutigen Indexes für {{table}} konnten nicht geladen werden, daher können Änderungen nicht sicher gespeichert werden.", + "query_editor.message.read_only_warning_with_detail": "Abfrageergebnisse bleiben schreibgeschützt: {{detail}}", + "query_editor.message.refresh_failed": "Aktualisierung fehlgeschlagen: {{error}}", + "query_editor.message.renamed": "Abfrage umbenannt.", + "query_editor.message.save_first_before_rename": "Speichern Sie die Abfrage, bevor Sie sie umbenennen.", + "query_editor.message.save_query_failed": "Abfrage konnte nicht gespeichert werden: {{error}}", + "query_editor.message.save_sql_file_failed": "SQL-Datei konnte nicht gespeichert werden: {{error}}", + "query_editor.message.saved": "Abfrage gespeichert.", + "query_editor.message.select_database_first": "Wählen Sie zuerst eine Datenbank aus.", + "query_editor.message.sql_file_saved": "SQL-Datei gespeichert.", + "query_editor.message.statement_failed_prefix": "Anweisung {{index}} fehlgeschlagen: ", + "query_editor.message.unsupported_source": "Diese Datenquelle unterstützt den SQL-Abfrageeditor nicht. Verwenden Sie stattdessen die zugehörige Seite.", + "query_editor.object_info.column": "Spalte", + "query_editor.object_info.database": "Datenbank", + "query_editor.object_info.label.database": "Datenbank", + "query_editor.object_info.label.schema": "Schema", + "query_editor.object_info.label.separator": ": ", + "query_editor.object_info.label.table": "Tabelle", + "query_editor.object_info.label.type": "Typ", + "query_editor.object_info.materialized_view": "Materialisierte Ansicht", + "query_editor.object_info.table": "Tabelle", + "query_editor.placeholder.connection": "Verbindung auswählen", + "query_editor.placeholder.database": "Datenbank auswählen", + "query_editor.result.affected_rows": "Betroffene Zeilen: {{count}}", + "query_editor.result.ai_diagnose": "AI-Diagnose", + "query_editor.result.close": "Ergebnis schließen", + "query_editor.result.execution_failed": "Ausführung fehlgeschlagen", + "query_editor.result.execution_success": "Ausführung erfolgreich", + "query_editor.result.tab_title": "Ergebnis {{index}} ({{count}})", + "query_editor.result.tab_title_success": "Ergebnis {{index}} ✓", + "query_editor.results_panel.action.hide": "Ausblenden", + "query_editor.results_panel.aria.hide": "Ergebnisbereich ausblenden", + "query_editor.results_panel.menu.close_all": "Alle Tabs schließen", + "query_editor.results_panel.menu.close_left": "Tabs links schließen", + "query_editor.results_panel.menu.close_other": "Andere Tabs schließen", + "query_editor.results_panel.menu.close_right": "Tabs rechts schließen", + "query_editor.results_panel.message.title": "Ausführungsmeldungen", + "query_editor.results_panel.panel.title": "Ergebnisbereich", + "query_editor.results_panel.tab.message": "Meldung {{index}}", + "query_editor.results_panel.tab.result": "Ergebnis {{index}}", + "query_editor.results_panel.tooltip.hide": "Ergebnisbereich ausblenden", + "query_editor.results_panel.tooltip.hide_with_shortcut": "Ergebnisbereich ausblenden ({{shortcut}})", + "query_editor.save_modal.name_label": "Abfragename", + "query_editor.save_modal.name_placeholder": "Beispiel: alle Benutzer abfragen", + "query_editor.save_modal.name_required": "Geben Sie einen Abfragenamen ein.", + "query_editor.save_modal.rename_ok": "Umbenennen", + "query_editor.save_modal.rename_title": "Abfrage umbenennen", + "query_editor.save_modal.title": "Abfrage speichern", + "query_editor.save_modal.unnamed": "Unbenannte Abfrage", + "query_editor.slash_command.diff.description": "Tabellenunterschiede vergleichen und Änderungen erzeugen", + "query_editor.slash_command.diff.label": "Tabellenvergleich", + "query_editor.slash_command.diff.prompt": "Vergleiche diese zwei Tabellenstrukturen und erzeuge ALTER-Anweisungen für die Migration von der alten zur neuen Version.", + "query_editor.slash_command.explain.description": "Logik des ausgewählten SQL erklären", + "query_editor.slash_command.explain.label": "SQL erklären", + "query_editor.slash_command.explain.prompt": "Erkläre die Ausführungslogik dieser SQL-Anweisung:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.index.description": "Indexstrategie empfehlen", + "query_editor.slash_command.index.label": "Indexempfehlung", + "query_editor.slash_command.index.prompt": "Empfiehl anhand der aktuellen Tabellenstruktur und üblicher Abfragemuster eine Indexstrategie und füge bei Bedarf SQL hinzu.", + "query_editor.slash_command.mock.description": "INSERT-Testdaten erzeugen", + "query_editor.slash_command.mock.label": "Testdaten", + "query_editor.slash_command.mock.prompt": "Erzeuge 10 fachlich sinnvolle INSERT-Testzeilen für die zugehörige Tabelle.", + "query_editor.slash_command.optimize.description": "SQL-Leistungsengpässe analysieren", + "query_editor.slash_command.optimize.label": "Optimierungsanalyse", + "query_editor.slash_command.optimize.prompt": "Analysiere diese SQL-Anweisung auf Leistungsprobleme und schlage Optimierungen vor:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.query.description": "Beschreiben, was abgefragt werden soll", + "query_editor.slash_command.query.label": "Abfrage in natürlicher Sprache", + "query_editor.slash_command.query.prompt": "Schreibe eine SQL-Abfrage für diese Anfrage:", + "query_editor.slash_command.schema.description": "Qualität der Tabellenstruktur prüfen", + "query_editor.slash_command.schema.label": "Tabellendesign prüfen", + "query_editor.slash_command.schema.prompt": "Prüfe das zugehörige Tabellendesign einschließlich Feldtypen, Normalisierung, Indizes und Verbesserungsvorschlägen.", + "query_editor.slash_command.sql.description": "Anforderung beschreiben und Anweisung erzeugen", + "query_editor.slash_command.sql.label": "SQL erzeugen", + "query_editor.slash_command.sql.prompt": "Erzeuge SQL für diese Anforderung:", "query_editor.sql_error.rule.column_missing.explanation": "Das SQL verweist auf eine Spalte, die nicht im Ergebnissatz enthalten ist, anders geschrieben wurde oder in der aktuellen Tabelle nicht existiert.", "query_editor.sql_error.rule.column_missing.label": "Spalte existiert nicht", "query_editor.sql_error.rule.column_missing.suggestion": "Prüfe Spaltennamen, Aliasse, Groß-/Kleinschreibung, Tabellenaliase und ob die Spalte zum aktuellen FROM/JOIN-Objekt gehört.", @@ -7151,10 +6053,198 @@ "query_editor.sql_error.wrapper.raw_line": "Ursprünglicher Fehler: {{error}}", "query_editor.sql_error.wrapper.semantic_line": "Bedeutung: {{label}}. {{explanation}}", "query_editor.sql_error.wrapper.suggestion_line": "Vorschlag: {{suggestion}}", + "query_editor.transaction.action.commit": "Commit", + "query_editor.transaction.action.commit_with_count": "Commit ({{count}})", + "query_editor.transaction.action.rollback": "Rollback", + "query_editor.transaction.delay.immediate": "Sofort", + "query_editor.transaction.message.pending_managed_transaction": "Im SQL-Editor ist bereits eine nicht festgeschriebene Transaktion offen. Führen Sie zuerst Commit oder Rollback aus, bevor Sie eine weitere DML-Anweisung starten.", + "query_editor.transaction.mode.auto": "Automatisch", + "query_editor.transaction.mode.manual": "Manuell", + "query_editor.transaction.mode.tooltip": "Wie in DBeaver: Wenn der SQL-Editor DML wie INSERT/UPDATE/DELETE/MERGE/REPLACE ausführt, öffnet GoNavi zuerst eine verwaltete Transaktion. Im manuellen Modus müssen Sie commit/rollback ausführen; im automatischen Modus wird nach erfolgreicher Ausführung automatisch COMMIT ausgeführt.", + "query_editor.transaction.status.auto_commit_countdown": "Automatischer Commit in {{seconds}}s", + "query_editor.transaction.status.auto_committing": "Automatischer Commit läuft", + "query.format": "SQL formatieren", + "query.new": "Neue Abfrage", + "query.run": "Ausführen", + "query.save": "Abfrage speichern", + "query.stop": "Stoppen", + "redis_command.action.clear_console": "Konsole leeren", + "redis_command.action.execute": "Ausführen (Cmd+Enter)", + "redis_command.completion.detail": "Redis-Befehl", + "redis_command.message.command_required": "Geben Sie einen auszuführenden Befehl ein", + "redis_command.output.empty_hint": "Führen Sie Befehle in dieser Konsole aus; Ergebnisse werden wie zurückgegeben angezeigt.", + "redis_command.output.selection_tip": "Tipp: Wählen Sie Zeilen aus und drücken Sie Ctrl + Enter, um nur diese Auswahl auszuführen.", + "redis_command.output.title": "Ausgabe", + "redis_command.state.connection_not_found": "Verbindung nicht gefunden", + "redis_command.title.console": "Redis-Konsole", + "redis_monitor.action.pause_refresh": "Aktualisierung pausieren", + "redis_monitor.action.refresh_now": "Jetzt aktualisieren", + "redis_monitor.action.resume_refresh": "Aktualisierung fortsetzen", + "redis_monitor.chart.clients_keys": "Verbindungsinformationen (Clients und Keys)", + "redis_monitor.chart.cpu_usage": "CPU-Auslastung", + "redis_monitor.chart.memory": "Speicherverbrauch", + "redis_monitor.chart.qps": "Anfragedurchsatz (QPS)", + "redis_monitor.message.fetch_failed": "Redis-Informationen konnten nicht abgerufen werden: {{detail}}", + "redis_monitor.metric.blocked_clients": "Blockiert: {{value}}", + "redis_monitor.metric.clients": "Client-Verbindungen", + "redis_monitor.metric.days": "Tage: {{value}}", + "redis_monitor.metric.memory_peak": "Spitze: {{value}}", + "redis_monitor.metric.memory_used": "Verwendeter Speicher", + "redis_monitor.metric.ops": "Durchsatz (OPS)", + "redis_monitor.metric.uptime": "Laufzeit", + "redis_monitor.series.clients": "Client-Verbindungen", + "redis_monitor.series.rss_memory": "RSS-Speicher", + "redis_monitor.series.system": "Systemlast", + "redis_monitor.series.total_keys": "Keys gesamt", + "redis_monitor.series.used_memory": "Verwendeter Speicher", + "redis_monitor.series.user": "Benutzer", + "redis_monitor.server_details.title": "Detaillierte Serverparameter", + "redis_monitor.state.connection_not_found": "Verbindung nicht gefunden", + "redis_monitor.title.instance": "Redis-Instanzmonitor", + "redis_viewer.action.add_field": "Feld hinzufügen", + "redis_viewer.action.add_list_head": "An den Anfang schieben", + "redis_viewer.action.add_list_tail": "An das Ende schieben", + "redis_viewer.action.add_member": "Mitglied hinzufügen", + "redis_viewer.action.add_stream_entry": "Eintrag hinzufügen", + "redis_viewer.action.clear_group_selection": "Auswahl aufheben", + "redis_viewer.action.clear_selection": "Auswahl aufheben", + "redis_viewer.action.copy": "Kopieren", + "redis_viewer.action.copy_key_name": "Key-Namen kopieren", + "redis_viewer.action.copy_value": "Wert kopieren", + "redis_viewer.action.delete_key": "Key löschen", + "redis_viewer.action.delete_selected": "Auswahl löschen ({{count}})", + "redis_viewer.action.edit": "Bearbeiten", + "redis_viewer.action.load_more": "Mehr laden", + "redis_viewer.action.new_key": "Neu", + "redis_viewer.action.refresh": "Aktualisieren", + "redis_viewer.action.rename_key": "Key umbenennen", + "redis_viewer.action.select_all_loaded": "Alle geladenen auswählen", + "redis_viewer.action.select_group": "Auswählen", + "redis_viewer.action.set_ttl": "TTL setzen", + "redis_viewer.aria.collapse_group": "Gruppe einklappen", + "redis_viewer.aria.expand_group": "Gruppe ausklappen", + "redis_viewer.confirm.delete_field": "Dieses Feld löschen?", + "redis_viewer.confirm.delete_key": "Key \"{{key}}\" löschen?", + "redis_viewer.confirm.delete_member": "Dieses Mitglied löschen?", + "redis_viewer.confirm.delete_selected": "Die ausgewählten {{count}} Keys löschen?", + "redis_viewer.confirm.delete_stream_entry": "Diesen Stream-Eintrag löschen?", + "redis_viewer.field.field_name": "Feldname", + "redis_viewer.field.fields_json": "Felder-JSON:", + "redis_viewer.field.key": "Key", + "redis_viewer.field.member": "Mitglied:", + "redis_viewer.field.new_key_name": "Neuer Key-Name", + "redis_viewer.field.new_score": "Neuer Score:", + "redis_viewer.field.score": "Punktzahl:", + "redis_viewer.field.stream_id": "ID (optional, Standard *):", + "redis_viewer.field.ttl_seconds": "TTL (Sekunden)", + "redis_viewer.field.value": "Wert", + "redis_viewer.help.ttl_forever": "-1 bedeutet keine Ablaufzeit", + "redis_viewer.hint.binary_readonly": "Binärdaten können nicht bearbeitet werden", + "redis_viewer.hint.switch_auto_to_edit": "Zum Bearbeiten in den Auto-Modus wechseln", + "redis_viewer.label.encoding": "Kodierung: {{encoding}}", + "redis_viewer.label.keys_count": "{{count}} Schlüssel", + "redis_viewer.label.length": "Länge: {{count}}", + "redis_viewer.label.node_count": "{{count}} Knoten", + "redis_viewer.label.original_key": "Ursprünglicher Key: {{key}}", + "redis_viewer.message.add_failed": "Hinzufügen fehlgeschlagen: {{detail}}", + "redis_viewer.message.add_success": "Hinzugefügt", + "redis_viewer.message.add_success_with_id": "Hinzugefügt {{id}}", + "redis_viewer.message.copied": "Kopiert", + "redis_viewer.message.copy_failed": "Kopieren fehlgeschlagen", + "redis_viewer.message.create_failed": "Erstellen fehlgeschlagen: {{detail}}", + "redis_viewer.message.create_success": "Erstellt", + "redis_viewer.message.delete_failed": "Löschen fehlgeschlagen: {{detail}}", + "redis_viewer.message.delete_success": "Gelöscht", + "redis_viewer.message.deleted_keys": "{{count}} Keys gelöscht", + "redis_viewer.message.fields_json_invalid": "Felder-JSON ist ungültig", + "redis_viewer.message.fields_must_be_json_object": "Felder müssen ein JSON-Objekt sein", + "redis_viewer.message.fields_required": "Geben Sie mindestens ein Feld an", + "redis_viewer.message.key_check_failed": "Ziel-Key konnte nicht geprüft werden: {{detail}}", + "redis_viewer.message.key_missing_removed": "Der Key existiert nicht mehr oder ist abgelaufen und wurde aus der Liste entfernt", + "redis_viewer.message.key_name_copied": "Key-Name kopiert", + "redis_viewer.message.load_keys_failed": "Keys konnten nicht geladen werden: {{detail}}", + "redis_viewer.message.new_key_name_required": "Geben Sie den neuen Key-Namen ein", + "redis_viewer.message.rename_failed": "Umbenennen fehlgeschlagen: {{detail}}", + "redis_viewer.message.rename_same_key": "Der neue Key-Name muss sich vom ursprünglichen unterscheiden", + "redis_viewer.message.rename_success": "Key umbenannt", + "redis_viewer.message.save_failed": "Speichern fehlgeschlagen: {{detail}}", + "redis_viewer.message.save_success": "Gespeichert", + "redis_viewer.message.set_failed": "Setzen fehlgeschlagen: {{detail}}", + "redis_viewer.message.stream_entry_not_deleted": "Kein Stream-Eintrag wurde gelöscht; er existiert möglicherweise nicht mehr", + "redis_viewer.message.target_key_exists": "Ziel-Key existiert bereits: {{key}}", + "redis_viewer.message.ttl_set_success": "TTL aktualisiert", + "redis_viewer.message.update_failed": "Aktualisierung fehlgeschlagen: {{detail}}", + "redis_viewer.message.update_success": "Aktualisiert", + "redis_viewer.message.value_load_failed": "Wert konnte nicht abgerufen werden: {{detail}}", + "redis_viewer.modal.add_element": "Element hinzufügen", + "redis_viewer.modal.add_element_head": "Element am Anfang hinzufügen", + "redis_viewer.modal.add_field": "Feld hinzufügen", + "redis_viewer.modal.add_member": "Mitglied hinzufügen", + "redis_viewer.modal.add_stream_entry": "Stream-Eintrag hinzufügen", + "redis_viewer.modal.edit_field": "Feld bearbeiten: {{field}}", + "redis_viewer.modal.edit_index": "Index {{index}} bearbeiten", + "redis_viewer.modal.edit_value": "Wert bearbeiten", + "redis_viewer.modal.new_key": "Neuer Key", + "redis_viewer.modal.rename_key": "Key umbenennen", + "redis_viewer.modal.set_ttl": "TTL setzen", + "redis_viewer.modal.update_score": "Score aktualisieren", + "redis_viewer.notice.large_keyspace_mode": "Leistungsmodus für große Keyspaces ist aktiviert. Die Knotendarstellung ist vereinfacht, und bis zu {{count}} ausgeklappte Gruppen bleiben erhalten.", + "redis_viewer.placeholder.key_name": "Key-Name", + "redis_viewer.placeholder.member_value": "Mitgliedswert eingeben", + "redis_viewer.placeholder.new_element_value": "Neuen Elementwert eingeben", + "redis_viewer.placeholder.new_key_name": "new:key:name", + "redis_viewer.placeholder.new_member_value": "Neuen Mitgliedswert eingeben", + "redis_viewer.placeholder.search_exact": "Vollständigen Key oder Namespace für exakte Suche eingeben", + "redis_viewer.placeholder.search_fuzzy": "Keys suchen (unscharfe Suche)", + "redis_viewer.placeholder.stream_id": "Zum Beispiel: * oder 1723110000000-0", + "redis_viewer.placeholder.value": "Wert", + "redis_viewer.search.exact": "Exakt", + "redis_viewer.search.fuzzy": "Unscharf", + "redis_viewer.state.connection_not_found": "Verbindung nicht gefunden", + "redis_viewer.state.empty_selection": "Wählen Sie einen Key aus, um Details anzuzeigen", + "redis_viewer.table.action": "Aktionen", + "redis_viewer.table.field": "Feld", + "redis_viewer.table.fields": "Felder", + "redis_viewer.table.index": "Position", + "redis_viewer.table.member": "Mitglied", + "redis_viewer.table.score": "Punktzahl", + "redis_viewer.table.value": "Wert", + "redis_viewer.title.active_key": "Aktiver Key", + "redis_viewer.title.key_explorer": "Key-Explorer", + "redis_viewer.title.namespace_key": "Namensraum / Key", + "redis_viewer.title.type_ttl": "Typ / TTL", + "redis_viewer.tooltip.copy_fields_json": "Felder-JSON kopieren", + "redis_viewer.tooltip.copy_id": "ID kopieren", + "redis_viewer.tooltip.copy_key_name": "Key-Namen kopieren", + "redis_viewer.tooltip.copy_value": "Wert kopieren", + "redis_viewer.tooltip.resize_panels": "Zum Ändern der Größe ziehen", + "redis_viewer.topology.cluster": "Cluster", + "redis_viewer.topology.sentinel": "Sentinel", + "redis_viewer.topology.single": "Einzelinstanz", + "redis_viewer.ttl.days_hours": "{{days}} T {{hours}} Std.", + "redis_viewer.ttl.expired": "Abgelaufen", + "redis_viewer.ttl.forever": "Dauerhaft", + "redis_viewer.ttl.hours_minutes": "{{hours}} Std. {{minutes}} Min.", + "redis_viewer.ttl.minutes_seconds": "{{minutes}} Min. {{seconds}} Sek.", + "redis_viewer.ttl.seconds": "{{seconds}} Sek.", + "redis_viewer.validation.key_required": "Geben Sie einen Key ein", + "redis_viewer.validation.new_key_name_required": "Geben Sie den neuen Key-Namen ein", + "redis_viewer.validation.value_required": "Geben Sie einen Wert ein", + "redis_viewer.view.auto": "Auto", + "redis_viewer.view.hex": "Hex", + "redis_viewer.view.text": "Rohtext", + "redis_viewer.view.title": "Ansichtsmodus", + "redis.backend.error.address_required": "Redis-Verbindungsadresse darf nicht leer sein", + "redis.backend.error.argument_invalid_type": "{{name}} hat einen ungültigen Typ", + "redis.backend.error.argument_required": "{{name}} ist erforderlich", "redis.backend.error.cluster_connect_failed": "Redis-Cluster-Verbindung fehlgeschlagen: {{detail}}", + "redis.backend.error.command_required": "Command darf nicht leer sein", "redis.backend.error.connect_attempt_failed": "Verbindungsversuch {{attempt}} fehlgeschlagen: {{detail}}", "redis.backend.error.connect_failed": "Redis-Verbindung fehlgeschlagen: {{detail}}", "redis.backend.error.connect_tls_setup_failed": "TLS-Einrichtung bei Versuch {{attempt}} fehlgeschlagen: {{detail}}", + "redis.backend.error.invalid_node_address": "Ungültige Redis-Knotenadresse: {{address}}", + "redis.backend.error.invalid_port": "Ungültiger Redis-Port: {{address}}", + "redis.backend.error.node_address_required": "Redis-Knotenadresse darf nicht leer sein", "redis.backend.error.select_db_index_invalid": "Ungültiger Datenbankindex: {{value}}", "redis.backend.error.select_db_index_out_of_range": "Der Datenbankindex muss zwischen {{min}} und {{max}} liegen", "redis.backend.error.select_db_index_required": "Für den SELECT-Befehl ist ein Datenbankindex erforderlich", @@ -7165,13 +6255,144 @@ "redis.backend.label.topology_cluster": "Cluster", "redis.backend.label.topology_multi_node": "Multi-Node", "redis.backend.label.topology_sentinel": "Sentinel", + "redis.backend.message.add_success": "Hinzufügen erfolgreich", + "redis.backend.message.connect_success": "Verbindung erfolgreich", + "redis.backend.message.delete_success": "Löschen erfolgreich", + "redis.backend.message.flush_success": "Leeren erfolgreich", + "redis.backend.message.rename_success": "Umbenennen erfolgreich", + "redis.backend.message.select_db_success": "Datenbank gewechselt", + "redis.backend.message.set_success": "Setzen erfolgreich", + "redis.db_alias.menu.set": "Alias festlegen", + "redis.db_alias.modal.placeholder": "z. B. cache, sessions (leer lassen zum Entfernen)", + "redis.db_alias.modal.title": "Alias für {{db}}", + "saved_query.default_name": "Abfrage {{index}}", "saved_query.error.missing_context": "Der gespeicherten Abfrage fehlt SQL-, Verbindungs- oder Datenbankkontext", + "security_update.action.open_ai_settings": "AI-Einstellungen", + "security_update.action.open_connection": "Verbindung öffnen", + "security_update.action.open_proxy_settings": "Proxy-Einstellungen", + "security_update.action.retry_update": "Erneut prüfen", + "security_update.action.view_details": "Details anzeigen", + "security_update.backend.issue.ai_provider.migration_required": "Die AI-Anbieterkonfiguration ist noch in der aktuellen App-Konfiguration gespeichert. Nach Abschluss des Sicherheitsupdates wird sie in den neuen sicheren Speicher verschoben.", + "security_update.backend.issue.ai_provider.missing_or_resave": "Die AI-Anbieterkonfiguration ist nicht mehr vorhanden oder muss erneut gespeichert werden, bevor das Sicherheitsupdate abgeschlossen werden kann.", + "security_update.backend.issue.ai_provider.secret_missing": "Die AI-Anbieterkonfiguration benötigt weitere Angaben, bevor das Sicherheitsupdate abgeschlossen werden kann.", + "security_update.backend.issue.connection.incomplete": "Die Verbindungskonfiguration benötigt weitere Angaben, bevor das Sicherheitsupdate abgeschlossen werden kann.", + "security_update.backend.issue.connection.missing_or_resave": "Die Verbindungskonfiguration ist nicht mehr vorhanden oder muss erneut gespeichert werden, bevor das Sicherheitsupdate abgeschlossen werden kann.", + "security_update.backend.issue.connection.password_missing": "Das Verbindungspasswort fehlt. Speichern Sie es erneut, bevor Sie fortfahren.", + "security_update.backend.issue.global_proxy.missing_or_resave": "Die globalen Proxy-Einstellungen sind nicht mehr vorhanden oder müssen erneut gespeichert werden, bevor das Sicherheitsupdate abgeschlossen werden kann.", + "security_update.backend.issue.global_proxy.password_incomplete": "Das globale Proxy-Passwort benötigt weitere Angaben, bevor das Sicherheitsupdate abgeschlossen werden kann.", + "security_update.backend.issue.global_proxy.password_missing": "Das globale Proxy-Passwort fehlt. Speichern Sie es erneut, bevor Sie fortfahren.", + "security_update.backend.issue.global_proxy.title": "Globaler Proxy", + "security_update.backend.issue.system.message": "Die aktuelle Umgebung konnte dieses Sicherheitsupdate nicht abschließen. Versuchen Sie es später erneut.", + "security_update.backend.issue.system.title": "Sicherheitsupdate wurde nicht abgeschlossen", + "security_update.banner.action.restart_update": "Update neu starten", + "security_update.banner.action.retry_check": "Erneut prüfen", + "security_update.banner.action.start_now": "Jetzt aktualisieren", + "security_update.banner.action.view_details": "Details anzeigen", + "security_update.banner.title": "Gespeicherte Konfigurationen können sicher aktualisiert werden", + "security_update.bootstrap.legacy.connection.message": "Diese Verbindung ist noch in der lokalen Konfiguration der aktuellen App gespeichert. Nach Abschluss des Sicherheitsupdates wird sie in die neue sichere Speicherung verschoben.", + "security_update.bootstrap.legacy.global_proxy.message": "Globale Proxy-Einstellungen sind noch in der lokalen Konfiguration der aktuellen App gespeichert. Nach Abschluss des Sicherheitsupdates werden sie in die neue sichere Speicherung verschoben.", + "security_update.bootstrap.legacy.global_proxy.title": "Globaler Proxy", + "security_update.error.capability_unavailable": "Sicherheitsupdate-Funktion ist nicht verfügbar", + "security_update.intro.action.details": "Details anzeigen", + "security_update.intro.action.later": "Später erinnern", + "security_update.intro.action.start_now": "Jetzt aktualisieren", + "security_update.intro.description": "Damit gespeicherte Verbindungen, Proxy-Einstellungen und zugehörige Dienstkonfigurationen die neue sichere Speicherung verwenden, muss dieses Update einmal lokal ausgeführt werden. Vor dem Update wird automatisch eine lokale Sicherung erstellt. Wenn es nicht abgeschlossen wird, behält das System die aktuell nutzbare Konfiguration bei, und Sie können später fortfahren.", + "security_update.intro.subtitle": "Vor der neuen sicheren Speicherung ist ein lokales Konfigurationsupdate erforderlich.", + "security_update.intro.title": "Sicherheitsupdate für gespeicherte Konfigurationen", + "security_update.item_status.failed": "Fehlgeschlagen", + "security_update.item_status.needs_attention": "Bearbeitung erforderlich", + "security_update.item_status.pending": "Ausstehend", + "security_update.item_status.skipped": "Übersprungen", + "security_update.item_status.updated": "Aktualisiert", + "security_update.progress.default_detail": "Die aktuell nutzbare Konfiguration bleibt während des Updates erhalten. Bitte warten.", + "security_update.repair.warning.connection_not_found": "Die zugehörige Verbindung wurde nicht gefunden. Prüfen Sie zuerst den aktuellen Status erneut.", + "security_update.settings.action.close": "Schließen", + "security_update.settings.action.restart_update": "Update neu starten", + "security_update.settings.action.retry_check": "Erneut prüfen", + "security_update.settings.action.start": "Update starten", + "security_update.settings.backup_path": "Sicherungsort: ", + "security_update.settings.current_status": "Aktueller Status: {{status}}", + "security_update.settings.empty_pending": "Keine offenen Punkte", + "security_update.settings.item_default_message": "Dieser Punkt erfordert weitere Bearbeitung, bevor das Sicherheitsupdate abgeschlossen werden kann.", + "security_update.settings.item_severity": "Schweregrad: {{severity}}", + "security_update.settings.item_status": "Zustand: {{status}}", + "security_update.settings.last_error": "Letzter Fehler: ", + "security_update.settings.pending_list": "Offene Punkte", + "security_update.settings.recent_result": "Letztes Ergebnis", + "security_update.settings.scope_title": "Betroffener Bereich", + "security_update.settings.subtitle": "Status des Sicherheitsupdates und offene Punkte für gespeicherte Konfigurationen verwalten.", + "security_update.settings.summary.failed": "Fehlgeschlagen", + "security_update.settings.summary.pending": "Offen", + "security_update.settings.summary.skipped": "Übersprungen", + "security_update.settings.summary.total": "Gesamt", + "security_update.settings.summary.updated": "Aktualisiert", + "security_update.settings.title": "Sicherheitsupdate", + "security_update.severity.high": "Hohes Risiko", + "security_update.severity.low": "Niedriges Risiko", + "security_update.severity.medium": "Mittleres Risiko", + "security_update.status.completed.description": "Gespeicherte Konfigurationen haben das Sicherheitsupdate abgeschlossen.", + "security_update.status.completed.label": "Abgeschlossen", + "security_update.status.in_progress.description": "Sichere Speicherung gespeicherter Konfigurationen wird geprüft und aktualisiert.", + "security_update.status.in_progress.label": "Aktualisierung läuft", + "security_update.status.needs_attention.description": "Das Update ist noch nicht abgeschlossen. Einige Konfigurationen erfordern Aufmerksamkeit.", + "security_update.status.needs_attention.label": "Bearbeitung erforderlich", + "security_update.status.not_detected.description": "Derzeit erfordert kein Sicherheitsupdate Ihre Aufmerksamkeit.", + "security_update.status.not_detected.label": "Nicht erkannt", + "security_update.status.pending.description": "Ein Sicherheitsupdate ist verfügbar. Sie können jetzt starten oder später fortfahren.", + "security_update.status.pending.label": "Ausstehend", + "security_update.status.postponed.description": "Dieses Sicherheitsupdate wurde verschoben. Die aktuell nutzbare Konfiguration bleibt erhalten.", + "security_update.status.postponed.label": "Ausstehend", + "security_update.status.rolled_back.description": "Dieses Update wurde nicht abgeschlossen. Das System hat die aktuell nutzbare Konfiguration beibehalten.", + "security_update.status.rolled_back.label": "Zurückgesetzt", + "settings.language.description": "Wählen Sie die Anzeigesprache für GoNavi.", + "settings.language.english": "English", + "settings.language.follow_system": "Systemsprache verwenden", + "settings.language.german": "Deutsch", + "settings.language.japanese": "日本語", + "settings.language.restart_hint": "Einige Editoren und systemnahe Menüs müssen eventuell erneut geöffnet werden, damit die Änderung vollständig wirksam wird.", + "settings.language.russian": "Русский", + "settings.language.simplified_chinese": "简体中文", + "settings.language.title": "Sprache", + "settings.language.traditional_chinese": "繁體中文", + "settings.title": "Einstellungen", + "sidebar.action.backup_database_count": "Datenbanken sichern ({{count}})", + "sidebar.action.backup_schema_data": "Sicherung (Struktur + Daten)", + "sidebar.action.batch_databases": "Datenbanken stapelweise bearbeiten", + "sidebar.action.batch_tables": "Tabellen stapelweise bearbeiten", + "sidebar.action.cancel": "Abbrechen", + "sidebar.action.clear_selection": "Alle abwählen", + "sidebar.action.clear_tables": "Tabellen leeren", + "sidebar.action.close": "Schließen", + "sidebar.action.continue": "Fortfahren", + "sidebar.action.delete": "Löschen", + "sidebar.action.export_data_only": "Nur Daten (INSERT)", + "sidebar.action.export_database_schema_count": "Datenbankstrukturen exportieren ({{count}})", + "sidebar.action.export_schema": "Struktur exportieren", + "sidebar.action.invert_selection": "Auswahl umkehren", "sidebar.action.locate_current_tab": "Aktuellen Tab lokalisieren", + "sidebar.action.locate_current_table": "Aktuell geöffnete Tabelle lokalisieren", + "sidebar.action.new_group": "Neue Gruppe", + "sidebar.action.pin_table": "Tabelle anheften", + "sidebar.action.select_all": "Alle auswählen", + "sidebar.action.unpin_table": "Anheften aufheben", + "sidebar.active_connection.actions": "Verbindungsaktionen", + "sidebar.active_connection.current_host_database": "Aktueller Host und Datenbank", + "sidebar.active_connection.no_database_selected": "Keine Datenbank ausgewählt", + "sidebar.active_connection.no_host_selected": "Kein Host ausgewählt", "sidebar.ai_prompt.explain.detail": "Gehe besonders auf Feldbedeutungen, Primärschlüssel/Indizes, mögliche Beziehungen, typische Abfrageszenarien und Risiken ein.", "sidebar.ai_prompt.explain.intro": "Erkläre die Struktur und fachliche Bedeutung der Tabelle {{table}}.", "sidebar.ai_prompt.query.detail": "Enthalten sein sollen: eine Datenvorschau-Abfrage, eine Abfrage mit Filterung nach Schlüsselfeldern und eine Aggregations- oder Statistikabfrage.", "sidebar.ai_prompt.query.intro": "Erstelle 3 häufig genutzte SQL-Abfragen für die Tabelle {{table}}.", "sidebar.aria.switch_connection": "Zu Verbindung {{name}} wechseln", + "sidebar.badge.recommended": "Empfohlen", + "sidebar.batch_databases": "Datenbanken stapelweise bearbeiten", + "sidebar.batch_tables": "Tabellen stapelweise bearbeiten", + "sidebar.batch.filtered_count": "{{filtered}} / {{total}} Objekte angezeigt", + "sidebar.batch.group.tables": "Tabellen", + "sidebar.batch.group.views": "Ansichten", + "sidebar.batch.no_matching_objects": "Keine passenden Objekte", + "sidebar.batch.selected_databases": "{{selected}} / {{total}} Datenbanken ausgewählt", + "sidebar.batch.selected_objects": "{{selected}} / {{total}} Objekte ausgewählt", "sidebar.command_search.action.ask_ai.title": "AI fragen", "sidebar.command_search.action.new_connection.meta": "Eine Datenbank-, Runtime- oder andere Datenquellenverbindung erstellen", "sidebar.command_search.action.new_connection.title": "Neue Datenquelle", @@ -7187,49 +6408,480 @@ "sidebar.command_search.footer.navigate": "Navigieren", "sidebar.command_search.footer.object_only": "Nur Tabellenobjekte", "sidebar.command_search.footer.select": "Auswählen", + "sidebar.command_search.label": "Tabellen, Verbindungen, Aktionen suchen", + "sidebar.command_search.no_filter_content": "Kein Filtertext", + "sidebar.command_search.no_synced_filter": "Kein synchronisierter Seitenleistenfilter", + "sidebar.command_search.object_kind.all": "Alle", + "sidebar.command_search.object_kind.events": "Ereignisse", + "sidebar.command_search.object_kind.filter_aria": "Objektfilter", + "sidebar.command_search.object_kind.routines": "Routinen", + "sidebar.command_search.object_kind.tables": "Tabellen", + "sidebar.command_search.object_kind.views": "Sichten", + "sidebar.command_search.placeholder": "Tabellen, Verbindungen, Aktionen suchen... oder KI fragen", "sidebar.command_search.recent_sql_fallback": "SQL-Eintrag", + "sidebar.command_search.reset_filter": "Seitenleistenfilter zurücksetzen", + "sidebar.command_search.scope.compact_smart": "Smart", + "sidebar.command_search.scope.database": "Datenbank", + "sidebar.command_search.scope.description": "\"Smart\" wählt automatisch die wahrscheinlichsten Treffer; im manuellen Modus lassen sich Filterdimensionen kombinieren.", + "sidebar.command_search.scope.host": "Host", + "sidebar.command_search.scope.manual_help": "Smart schließt andere Optionen aus. Wenn klar ist, ob nach Objekten, Datenbanken, Host oder Tags gesucht werden soll, reduziert der manuelle Bereich störende Treffer.", + "sidebar.command_search.scope.manual_title": "Manueller Bereich", + "sidebar.command_search.scope.multi_select": "Mehrfachauswahl unterstützt", + "sidebar.command_search.scope.object": "Tabellenobjekte", + "sidebar.command_search.scope.recommended": "Empfohlen", + "sidebar.command_search.scope.smart": "Smart", + "sidebar.command_search.scope.smart_help": "Geeignet für die tägliche Suche; deckt automatisch häufige Dimensionen wie Namen, Datenbanken, Host und Tags ab.", + "sidebar.command_search.scope.summary_smart": "Smart", + "sidebar.command_search.scope.tag": "Tags", + "sidebar.command_search.scope.title": "Suchbereich", + "sidebar.command_search.scope.tooltip": "Suchbereich: {{scope}}", "sidebar.command_search.section.actions": "Aktionen", "sidebar.command_search.section.ai": "AI · Fragen", "sidebar.command_search.section.goto": "Gehe zu", "sidebar.command_search.section.recent": "Letzte Abfragen", + "sidebar.command_search.sync_to_filter_aria": "Mit linkem Filter synchronisieren", + "sidebar.command_search.sync_to_filter_tooltip": "Eingabe mit dem linken Filter synchronisieren", + "sidebar.copy_object_name.copied": "{{label}} wurde in die Zwischenablage kopiert", + "sidebar.copy_object_name.empty": "{{label}} ist leer und kann nicht kopiert werden", + "sidebar.copy_object_name.failed": "{{label}} konnte nicht kopiert werden: {{error}}", + "sidebar.copy_object_name.label.event": "Ereignisname", + "sidebar.copy_object_name.label.materialized_view": "Name der materialisierten Ansicht", + "sidebar.copy_object_name.label.table": "Tabellenname", + "sidebar.copy_object_name.label.view": "Ansichtsname", + "sidebar.error.unknown": "Unbekannter Fehler", + "sidebar.external_sql_modal.action.create": "Erstellen", + "sidebar.external_sql_modal.action.rename": "Umbenennen", + "sidebar.external_sql_modal.field.directory_name": "Verzeichnisname", + "sidebar.external_sql_modal.field.sql_file_name": "SQL-Dateiname", + "sidebar.external_sql_modal.help.directory": "Das Verzeichnis wird nur im externen SQL-Verzeichnisbaum angezeigt; Nicht-SQL-Dateien bleiben ausgeblendet", + "sidebar.external_sql_modal.help.sql_file": "Wenn die Endung .sql fehlt, wird sie automatisch ergänzt", + "sidebar.external_sql_modal.placeholder.directory_name": "z. B. reports", + "sidebar.external_sql_modal.placeholder.sql_file_name": "z. B. report.sql", + "sidebar.external_sql_modal.title.create_directory": "Neues Verzeichnis", + "sidebar.external_sql_modal.title.create_file": "Neue SQL-Datei", + "sidebar.external_sql_modal.title.rename_directory": "Verzeichnis umbenennen", + "sidebar.external_sql_modal.title.rename_file": "SQL-Datei umbenennen", + "sidebar.external_sql_modal.validation.directory_name_no_separator": "Der Verzeichnisname darf keine Pfadtrennzeichen enthalten", + "sidebar.external_sql_modal.validation.directory_name_required": "Verzeichnisnamen eingeben", + "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "Der Dateiname darf keine Pfadtrennzeichen enthalten", + "sidebar.external_sql_modal.validation.sql_file_name_required": "SQL-Dateinamen eingeben", + "sidebar.external_sql.directory_fallback": "SQL-Verzeichnis", + "sidebar.external_sql.root": "Externe SQL-Dateien", + "sidebar.field.database_name": "Datenbankname", + "sidebar.field.new_database_name": "Neuer Datenbankname", + "sidebar.field.new_table_name": "Neuer Tabellenname", + "sidebar.field.new_view_name": "Neuer Ansichtsname", + "sidebar.field.schema_name": "schema-Name", + "sidebar.field.select_connection": "Verbindung auswählen", + "sidebar.field.select_connections": "Verbindungen auswählen", + "sidebar.field.select_database": "Datenbank auswählen", + "sidebar.field.tag_name": "Gruppenname", + "sidebar.filter.all_objects": "Alle Objekte", + "sidebar.filter.scope_all": "Auswahl anwenden auf: alle Objekte", + "sidebar.filter.scope_filtered": "Auswahl anwenden auf: aktuelle Filterergebnisse", + "sidebar.filter.tables_only": "Nur Tabellen", + "sidebar.filter.views_only": "Nur Ansichten", + "sidebar.jvm.action.diagnostic": "Diagnoseerweiterung", + "sidebar.jvm.action.monitoring": "Kontinuierliche Überwachung", + "sidebar.jvm.tab.audit": "JVM-Audit", + "sidebar.jvm.tab.diagnostic": "JVM-Diagnose", + "sidebar.jvm.tab.monitoring": "JVM-Überwachung", + "sidebar.jvm.tab.overview": "JVM-Überblick", + "sidebar.jvm.tab.resource": "JVM-Ressourcen", + "sidebar.locate.object.materialized_view": "Materialisierte Ansicht", + "sidebar.locate.object.routine": "Funktion/Prozedur", + "sidebar.locate.object.table": "Tabelle", + "sidebar.locate.object.trigger": "Trigger", + "sidebar.locate.object.view": "Ansicht", + "sidebar.menu.add_sql_directory": "SQL-Verzeichnis hinzufügen", + "sidebar.menu.backup_all_tables_sql": "Alle Tabellen sichern (Schema + Daten-SQL)", "sidebar.menu.backup_current_schema_sql": "Alle Tabellen im aktuellen schema sichern (Struktur und Daten SQL)", + "sidebar.menu.backup_table_sql": "Tabelle sichern (SQL)", "sidebar.menu.bind_to_connection": "An Verbindung binden", + "sidebar.menu.browse_keys": "Schlüssel durchsuchen", + "sidebar.menu.browse_materialized_view_data": "Daten der materialisierten Ansicht durchsuchen", + "sidebar.menu.browse_view_data": "Ansichtsdaten durchsuchen", + "sidebar.menu.clear_table": "Tabelle leeren", + "sidebar.menu.close_database": "Datenbank schließen", "sidebar.menu.copy_object_name": "Namen kopieren", "sidebar.menu.copy_table_name": "Tabellennamen kopieren", + "sidebar.menu.copy_table_structure": "Tabellenstruktur kopieren", + "sidebar.menu.create_database": "Neue Datenbank", "sidebar.menu.create_event": "Neues Ereignis", + "sidebar.menu.create_function": "Neue Funktion", + "sidebar.menu.create_procedure": "Neue Prozedur", + "sidebar.menu.create_table": "Neue Tabelle", + "sidebar.menu.create_view": "Neue Ansicht", + "sidebar.menu.danger_operations": "Gefährliche Operationen", + "sidebar.menu.delete_connection": "Verbindung löschen", + "sidebar.menu.delete_database": "Datenbank löschen", + "sidebar.menu.delete_local_directory": "Lokales Verzeichnis löschen", + "sidebar.menu.delete_query": "Abfrage löschen", + "sidebar.menu.delete_routine": "{{type}} löschen", "sidebar.menu.delete_schema": "schema löschen", + "sidebar.menu.delete_sql_directory": "Verzeichnis löschen", + "sidebar.menu.delete_sql_file": "SQL-Datei löschen", + "sidebar.menu.delete_table": "Tabelle löschen", + "sidebar.menu.delete_tag": "Gruppe löschen", + "sidebar.menu.delete_view": "Ansicht löschen", + "sidebar.menu.design_table": "Tabelle entwerfen", + "sidebar.menu.disconnect": "Trennen", + "sidebar.menu.duplicate_connection": "Verbindung duplizieren", + "sidebar.menu.edit_connection": "Verbindung bearbeiten", + "sidebar.menu.edit_definition": "Definition bearbeiten", "sidebar.menu.edit_schema": "schema bearbeiten", + "sidebar.menu.edit_tag": "Gruppe bearbeiten", + "sidebar.menu.edit_view": "Ansicht bearbeiten", + "sidebar.menu.export_all_table_schema_sql": "Schemas aller Tabellen als SQL exportieren", + "sidebar.menu.export_csv": "Als CSV exportieren", "sidebar.menu.export_current_schema_sql": "Tabellenstruktur des aktuellen schema exportieren (SQL)", + "sidebar.menu.export_html": "Als HTML exportieren", + "sidebar.menu.export_json": "Als JSON exportieren", + "sidebar.menu.export_markdown": "Als Markdown exportieren", + "sidebar.menu.export_table_data": "Tabellendaten exportieren", + "sidebar.menu.export_xlsx": "Als XLSX exportieren", + "sidebar.menu.materialized_view_definition": "Definition der materialisierten Ansicht", + "sidebar.menu.move_out_of_tag": "Aus Gruppe entfernen", + "sidebar.menu.move_to_tag": "In Gruppe verschieben", + "sidebar.menu.new_command_window": "Neues Befehlsfenster", + "sidebar.menu.new_query": "Neue Abfrage", + "sidebar.menu.new_sql_directory": "Neues Verzeichnis", + "sidebar.menu.new_sql_directory_in_directory": "Neues Verzeichnis in diesem Verzeichnis", + "sidebar.menu.new_sql_file": "Neue SQL-Datei", + "sidebar.menu.new_sql_file_in_directory": "Neue SQL-Datei in diesem Verzeichnis", "sidebar.menu.new_table": "Neue Tabelle", + "sidebar.menu.open_query": "Abfrage öffnen", + "sidebar.menu.open_sql_file": "SQL-Datei öffnen", + "sidebar.menu.redis_monitor": "Redis Überwachung", + "sidebar.menu.refresh": "Aktualisieren", + "sidebar.menu.refresh_directory": "Verzeichnis aktualisieren", + "sidebar.menu.remove_directory": "Verzeichnis entfernen", + "sidebar.menu.rename_database": "Datenbank umbenennen", + "sidebar.menu.rename_query": "Abfrage umbenennen", + "sidebar.menu.rename_sql_directory": "Verzeichnis umbenennen", + "sidebar.menu.rename_sql_file": "SQL-Datei umbenennen", + "sidebar.menu.rename_table": "Tabelle umbenennen", + "sidebar.menu.rename_view": "Ansicht umbenennen", + "sidebar.menu.sort_by_frequency": "Sortieren nach Häufigkeit", + "sidebar.menu.sort_by_name": "Sortieren nach Name", "sidebar.menu.table_structure": "Tabellenstruktur", + "sidebar.menu.truncate_table": "Tabelle abschneiden", + "sidebar.menu.view_definition": "Ansichtsdefinition", + "sidebar.menu.view_object_definition": "Definition anzeigen", + "sidebar.menu.view_routine_definition": "Definition anzeigen", + "sidebar.message.add_sql_directory_database_required": "Wählen Sie eine Datenbank aus, bevor Sie ein SQL-Verzeichnis hinzufügen.", "sidebar.message.ai_table_context_missing": "Für die aktuelle Tabelle fehlt der Verbindungskontext; sie kann nicht an AI gesendet werden.", + "sidebar.message.backing_up_database": "Datenbank {{database}} wird gesichert...", + "sidebar.message.backing_up_selected_objects": "Ausgewählte Objekte werden gesichert: {{count}}...", + "sidebar.message.backing_up_selected_tables": "Ausgewählte Tabellen werden gesichert: {{count}}...", + "sidebar.message.clear_failed": "Leeren fehlgeschlagen: {{error}}", + "sidebar.message.clear_success": "Leeren erfolgreich.", + "sidebar.message.clearing_selected_tables": "{{count}} ausgewählte Tabellen werden geleert...", + "sidebar.message.connection_config_not_found": "Verbindungskonfiguration wurde nicht gefunden.", + "sidebar.message.connection_deleted": "Verbindung gelöscht.", + "sidebar.message.connection_failed": "Verbindung fehlgeschlagen: {{error}}", "sidebar.message.connection_release_failed": "Verbindung konnte nicht freigegeben werden", "sidebar.message.connection_release_failed_from_sidebar": "Die Verbindung wurde in der Seitenleiste getrennt, aber die Backend-Verbindung konnte nicht freigegeben werden", + "sidebar.message.create_failed": "Erstellen fehlgeschlagen: {{error}}", + "sidebar.message.create_sql_directory_failed": "Verzeichnis konnte nicht erstellt werden: {{error}}", + "sidebar.message.create_sql_file_failed": "SQL-Datei konnte nicht erstellt werden: {{error}}", + "sidebar.message.database_closed": "Datenbank geschlossen.", + "sidebar.message.database_created": "Datenbank erstellt.", + "sidebar.message.database_deleted": "Datenbank gelöscht.", + "sidebar.message.database_export_failed": "{{database}} konnte nicht exportiert werden: {{error}}", + "sidebar.message.database_export_success": "{{database}} wurde exportiert.", + "sidebar.message.database_name_required": "Datenbankname ist erforderlich.", + "sidebar.message.database_name_unchanged": "Datenbankname ist unverändert.", + "sidebar.message.database_renamed": "Datenbank umbenannt.", + "sidebar.message.delete_connection_backend_unavailable": "Verbindungen können in diesem Build nicht gelöscht werden.", + "sidebar.message.delete_connection_failed": "Verbindung konnte nicht gelöscht werden.", + "sidebar.message.delete_failed": "Löschen fehlgeschlagen: {{error}}", + "sidebar.message.delete_sql_directory_failed": "SQL-Verzeichnis konnte nicht gelöscht werden: {{error}}", + "sidebar.message.delete_sql_file_failed": "SQL-Datei konnte nicht gelöscht werden: {{error}}", + "sidebar.message.disconnected": "Getrennt.", + "sidebar.message.duplicate_backend_unavailable": "Das Duplizieren von Verbindungen ist in diesem Build nicht verfügbar.", + "sidebar.message.duplicate_empty_result": "Die duplizierte Verbindung wurde nicht zurückgegeben.", + "sidebar.message.duplicate_failed": "Verbindung konnte nicht dupliziert werden.", + "sidebar.message.duplicated_connection": "Verbindung {{name}} dupliziert.", + "sidebar.message.export_failed": "Export fehlgeschlagen: {{error}}", + "sidebar.message.export_success": "Export erfolgreich.", + "sidebar.message.export_success_skipped_views": "Export abgeschlossen. {{count}} Ansichten wurden beim Datenexport übersprungen.", + "sidebar.message.export_tables_same_database_required": "Wählen Sie Tabellen aus derselben Datenbank aus.", + "sidebar.message.exporting_database_backup": "{{database}} wird gesichert (Struktur und Daten)...", + "sidebar.message.exporting_database_schema": "Datenbankstruktur {{database}} wird exportiert...", + "sidebar.message.exporting_schema_backup": "Schema {{schema}} wird gesichert (Struktur und Daten)...", + "sidebar.message.exporting_schema_structure": "Struktur von Schema {{schema}} wird exportiert...", + "sidebar.message.exporting_selected_object_data": "{{format}}-Daten von {{count}} ausgewählten Objekten werden exportiert...", + "sidebar.message.exporting_selected_object_schema": "Struktur der ausgewählten Objekte wird exportiert: {{count}}...", + "sidebar.message.exporting_selected_table_schema": "Struktur der ausgewählten Tabellen wird exportiert: {{count}}...", + "sidebar.message.exporting_table_format": "{{table}} wird als {{format}} exportiert...", + "sidebar.message.external_sql_directory_added": "SQL-Verzeichnis hinzugefügt.", + "sidebar.message.external_sql_directory_context_missing": "Kontext des SQL-Verzeichnisses fehlt.", + "sidebar.message.external_sql_directory_delete_target_missing": "Das zu löschende SQL-Verzeichnis wurde nicht gefunden.", + "sidebar.message.external_sql_directory_not_found": "SQL-Verzeichnis wurde nicht gefunden.", + "sidebar.message.external_sql_directory_parent_missing": "Der Speicherort zum Erstellen des Verzeichnisses wurde nicht gefunden.", + "sidebar.message.external_sql_directory_read_failed": "SQL-Verzeichnis {{name}} konnte nicht gelesen werden: {{error}}", + "sidebar.message.external_sql_directory_refreshed": "SQL-Verzeichnis aktualisiert.", + "sidebar.message.external_sql_directory_removed": "SQL-Verzeichnis entfernt.", + "sidebar.message.external_sql_directory_rename_sync_failed": "Das Verzeichnis wurde umbenannt, aber die externe SQL-Verzeichnisliste konnte nicht synchronisiert werden. Fügen Sie das Verzeichnis erneut hinzu.", + "sidebar.message.external_sql_directory_rename_target_missing": "Das umzubenennende Verzeichnis wurde nicht gefunden.", + "sidebar.message.external_sql_file_delete_target_missing": "Die zu löschende SQL-Datei wurde nicht gefunden.", + "sidebar.message.external_sql_file_parent_missing": "Das Verzeichnis zum Erstellen der SQL-Datei wurde nicht gefunden.", + "sidebar.message.external_sql_file_rename_target_missing": "Die umzubenennende SQL-Datei wurde nicht gefunden.", + "sidebar.message.jvm_provider_probe_exception": "Prüfung der JVM-Anbieter fehlgeschlagen: {{error}}", + "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "Bei der JVM-Provider-Prüfung ist eine Ausnahme aufgetreten: {{error}}. Der Einstieg für die Diagnoseerweiterung bleibt verfügbar.", + "sidebar.message.jvm_provider_probe_failed": "JVM-Anbieter konnten nicht geprüft werden: {{error}}", + "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "JVM-Provider-Prüfung fehlgeschlagen: {{error}}. Der Einstieg für die Diagnoseerweiterung bleibt verfügbar.", + "sidebar.message.jvm_resources_backend_unavailable": "JVM-Ressourcen können in diesem Build nicht durchsucht werden.", + "sidebar.message.load_database_list_failed": "Datenbanken konnten nicht geladen werden: {{error}}", + "sidebar.message.load_jvm_resources_failed": "JVM-Ressourcen konnten nicht geladen werden: {{error}}", + "sidebar.message.load_table_list_failed": "Tabellen konnten nicht geladen werden: {{error}}", + "sidebar.message.load_tables_failed": "Objekte konnten nicht geladen werden: {{error}}", + "sidebar.message.locate_connection_not_found_for_object": "Die Verbindung für das aktuelle Objekt wurde nicht gefunden", + "sidebar.message.locate_connection_not_in_tree": "Die aktuelle Verbindung wurde im linken Baum nicht gefunden", "sidebar.message.locate_current_tab_unavailable": "Im aktuellen Tab gibt es keinen lokalisierbaren Inhalt", + "sidebar.message.locate_current_table_unavailable": "Im aktuellen Tab gibt es keine lokalisierbare Tabelle", + "sidebar.message.locate_database_loading": "Der Datenbankknoten wird noch geladen: {{database}}. Bitte später erneut versuchen", + "sidebar.message.locate_database_not_found": "Die Datenbank wurde im linken Baum nicht gefunden: {{database}}", + "sidebar.message.locate_external_sql_file_not_found": "SQL-Datei wurde in den externen SQL-Verzeichnissen nicht gefunden: {{path}}", + "sidebar.message.locate_object_loading": "Die Datenbankobjekte für {{object}} in {{database}} werden noch geladen. Bitte später erneut versuchen", + "sidebar.message.locate_object_not_found": "{{object}} wurde im linken Baum nicht gefunden: {{name}}. Bitte den Datenbankknoten aktualisieren und erneut versuchen", "sidebar.message.message_publish_success": "Testnachricht an {{destination}} gesendet", "sidebar.message.message_publish_success_with_count": "Testnachricht an {{destination}} gesendet ({{count}} übermittelt)", "sidebar.message.message_publish_target_fallback": "Ziel", "sidebar.message.message_publish_unsupported": "Das aktuelle Objekt unterstützt kein testweises Senden von Nachrichten", + "sidebar.message.no_visible_databases": "Es wurden keine sichtbaren Datenbanken oder Schemas zurückgegeben. Prüfen Sie die Berechtigungen oder aktualisieren Sie über das Kontextmenü.", + "sidebar.message.operation_create_failed": "Erstellen fehlgeschlagen: {{error}}", + "sidebar.message.operation_drop_failed": "Löschen fehlgeschlagen: {{error}}", + "sidebar.message.operation_rename_failed": "Umbenennen fehlgeschlagen: {{error}}", + "sidebar.message.read_file_failed": "Datei konnte nicht gelesen werden: {{error}}", + "sidebar.message.read_sql_file_failed": "SQL-Datei konnte nicht gelesen werden: {{error}}", + "sidebar.message.rename_failed": "Umbenennen fehlgeschlagen: {{error}}", + "sidebar.message.rename_sql_directory_failed": "Verzeichnis konnte nicht umbenannt werden: {{error}}", + "sidebar.message.rename_sql_file_failed": "SQL-Datei konnte nicht umbenannt werden: {{error}}", + "sidebar.message.routine_deleted": "{{type}} gelöscht.", "sidebar.message.saved_query_delete_failed": "Abfrage konnte nicht gelöscht werden: {{error}}", + "sidebar.message.saved_query_deleted": "Abfrage gelöscht.", + "sidebar.message.saved_query_name_unchanged": "Der Abfragename ist unverändert.", "sidebar.message.saved_query_rebind_failed": "Abfrage konnte nicht gebunden werden: {{error}}", "sidebar.message.saved_query_rebind_success": "Abfrage an {{name}} gebunden", "sidebar.message.saved_query_rename_failed": "Abfrage konnte nicht umbenannt werden: {{error}}", + "sidebar.message.saved_query_renamed": "Abfrage umbenannt.", + "sidebar.message.schema_create_unsupported": "Diese Datenbank unterstützt das Erstellen von schema nicht.", + "sidebar.message.schema_created": "schema wurde erstellt.", "sidebar.message.schema_deleted": "schema gelöscht.", "sidebar.message.schema_edit_unsupported": "Der aktuelle Knoten unterstützt das Bearbeiten von schema über diesen Einstieg nicht.", + "sidebar.message.schema_export_target_missing": "Das Ziel-Schema wurde nicht gefunden. Der Export kann nicht fortgesetzt werden.", "sidebar.message.schema_name_unchanged": "Der schema-Name ist unverändert.", "sidebar.message.schema_renamed": "schema umbenannt.", "sidebar.message.schema_target_delete_missing": "Ziel-schema zum Löschen nicht gefunden.", "sidebar.message.schema_target_edit_missing": "Ziel-schema für die Bearbeitung nicht gefunden.", + "sidebar.message.schema_target_missing": "Wählen Sie eine Datenbank für das Erstellen von schema aus.", + "sidebar.message.select_connection_or_database_first": "Wählen Sie zuerst eine Verbindung oder Datenbank aus.", + "sidebar.message.select_database_required": "Wählen Sie mindestens eine Datenbank aus.", + "sidebar.message.select_host_before_large_sql_file": "Wählen Sie einen Host aus, bevor Sie eine große SQL-Datei ausführen.", + "sidebar.message.select_object_required": "Wählen Sie mindestens ein Objekt aus.", + "sidebar.message.select_sql_directory_failed": "SQL-Verzeichnis konnte nicht ausgewählt werden: {{error}}", + "sidebar.message.sidebar_filter_reset": "Seitenleistenfilter zurückgesetzt.", + "sidebar.message.sidebar_filter_sync_disabled": "Synchronisierung des linken Filters deaktiviert.", + "sidebar.message.sidebar_filter_sync_enabled": "Synchronisierung des linken Filters aktiviert.", + "sidebar.message.sphinx_unsupported_objects": "Diese Sphinx-Instanz stellt diese Objektfunktionen nicht bereit: {{objects}}. Der Kompatibilitätsmodus wurde angewendet.", + "sidebar.message.sql_directory_created": "Verzeichnis erstellt.", + "sidebar.message.sql_directory_deleted": "SQL-Verzeichnis gelöscht.", + "sidebar.message.sql_directory_name_required": "Der Verzeichnisname ist erforderlich.", + "sidebar.message.sql_directory_path_invalid": "Pfad des SQL-Verzeichnisses ist ungültig.", + "sidebar.message.sql_directory_renamed": "Verzeichnis umbenannt.", + "sidebar.message.sql_file_context_incomplete": "SQL-Dateikontext unvollständig.", + "sidebar.message.sql_file_created": "SQL-Datei erstellt.", + "sidebar.message.sql_file_deleted": "SQL-Datei gelöscht.", + "sidebar.message.sql_file_name_required": "Der SQL-Dateiname ist erforderlich.", + "sidebar.message.sql_file_path_incomplete": "Der Pfad der SQL-Datei ist unvollständig und kann nicht geöffnet werden.", + "sidebar.message.sql_file_renamed": "SQL-Datei umbenannt.", + "sidebar.message.table_data_action_failed": "{{action}} fehlgeschlagen: {{error}}", + "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", + "sidebar.message.table_data_action_success": "{{action}} abgeschlossen.", + "sidebar.message.table_deleted": "Tabelle gelöscht.", + "sidebar.message.table_name_required": "Tabellenname ist erforderlich.", + "sidebar.message.table_name_unchanged": "Tabellenname ist unverändert.", + "sidebar.message.table_pinned": "Tabelle angeheftet", + "sidebar.message.table_renamed": "Tabelle umbenannt.", + "sidebar.message.table_structure_copied": "Tabellenstruktur kopiert.", + "sidebar.message.table_unpinned": "Tabellenfixierung aufgehoben", + "sidebar.message.view_deleted": "Ansicht gelöscht.", + "sidebar.message.view_name_required": "Ansichtsname ist erforderlich.", + "sidebar.message.view_name_unchanged": "Ansichtsname ist unverändert.", + "sidebar.message.view_renamed": "Ansicht umbenannt.", + "sidebar.message.visual_new_table_unsupported": "Diese Datenquelle unterstützt das visuelle Erstellen von Tabellen noch nicht.", + "sidebar.modal.batch_databases.description": "Exportieren Sie Datenbankstrukturen stapelweise nach Datenbank oder erstellen Sie Backups mit Struktur und Daten.", + "sidebar.modal.batch_databases.selection_hint": "Nach der Auswahl einer Verbindung wird die Liste der darunter stapelweise exportierbaren Datenbanken geladen.", + "sidebar.modal.batch_databases.title": "Stapeloperationen für Datenbanken", + "sidebar.modal.batch_tables.description": "Exportieren Sie Strukturen, Daten oder vollständige Backups für Objekte stapelweise.", + "sidebar.modal.batch_tables.selection_hint": "Wählen Sie zuerst Verbindung und Datenbank aus und legen Sie dann Exportbereich und Zielobjekte fest.", + "sidebar.modal.batch_tables.title": "Stapeloperationen für Objekte", + "sidebar.modal.confirm_clear_selected_tables.content": "Daten der ausgewählten Objekte unter {{connection}} / {{database}} leeren? Dies kann nicht rückgängig gemacht werden.", + "sidebar.modal.confirm_clear_selected_tables.title": "Ausgewählte Tabellen leeren", + "sidebar.modal.confirm_delete_connection.content": "{{name}} löschen?", + "sidebar.modal.confirm_delete_database.content": "{{name}} löschen? Dies kann nicht rückgängig gemacht werden.", + "sidebar.modal.confirm_delete_database.title": "Datenbank löschen", + "sidebar.modal.confirm_delete_routine.content": "{{type}} {{name}} löschen? Dies kann nicht rückgängig gemacht werden.", + "sidebar.modal.confirm_delete_routine.title": "{{type}} löschen", + "sidebar.modal.confirm_delete_saved_query.content": "Gespeicherte Abfrage \"{{name}}\" löschen? Diese Aktion kann nicht rückgängig gemacht werden.", "sidebar.modal.confirm_delete_schema.content": "schema {{name}} löschen? Das schema und alle enthaltenen Objekte werden gelöscht. Dies kann nicht rückgängig gemacht werden.", "sidebar.modal.confirm_delete_schema.title": "schema löschen", + "sidebar.modal.confirm_delete_sql_directory.content": "\"{{name}}\" löschen? Dadurch wird das lokale Verzeichnis vom Datenträger gelöscht; es können nur leere Verzeichnisse gelöscht werden.", + "sidebar.modal.confirm_delete_sql_directory.title": "SQL-Verzeichnis löschen", + "sidebar.modal.confirm_delete_sql_file.content": "\"{{name}}\" löschen? Dadurch wird die lokale Datei vom Datenträger gelöscht und kann nicht wiederhergestellt werden.", + "sidebar.modal.confirm_delete_sql_file.title": "SQL-Datei löschen", + "sidebar.modal.confirm_delete_table.content": "{{name}} löschen? Dies kann nicht rückgängig gemacht werden.", + "sidebar.modal.confirm_delete_table.title": "Tabelle löschen", + "sidebar.modal.confirm_delete_tag.content": "Gruppe \"{{name}}\" löschen? Die enthaltenen Verbindungen werden nicht gelöscht.", + "sidebar.modal.confirm_delete_view.content": "{{name}} löschen? Dies kann nicht rückgängig gemacht werden.", + "sidebar.modal.confirm_delete_view.title": "Ansicht löschen", + "sidebar.modal.confirm_delete.title": "Löschen bestätigen", + "sidebar.modal.confirm_table_data_action.content": "{{action}} für {{table}} ausführen? Dies kann nicht rückgängig gemacht werden.", + "sidebar.modal.confirm_table_data_action.title": "{{action}} bestätigen", + "sidebar.modal.create_database.title": "Datenbank erstellen", + "sidebar.modal.rename_database.title": "Datenbank umbenennen: {{name}}", "sidebar.modal.rename_schema.title": "schema bearbeiten: {{name}}", + "sidebar.modal.rename_table.title": "Tabelle umbenennen: {{name}}", + "sidebar.modal.rename_view.title": "Ansicht umbenennen: {{name}}", + "sidebar.modal.tag.create_description": "Eine Gruppe zum Organisieren von Verbindungen erstellen.", + "sidebar.modal.tag.create_title": "Gruppe erstellen", + "sidebar.modal.tag.edit_description": "Gruppenname und enthaltene Verbindungen aktualisieren.", + "sidebar.modal.tag.edit_title": "Gruppe bearbeiten", + "sidebar.object_group.events": "Ereignisse", + "sidebar.object_group.materialized_views": "Materialisierte Ansichten", + "sidebar.object_group.routines": "Funktionen und Prozeduren", + "sidebar.object_group.tables": "Tabellen", + "sidebar.object_group.triggers": "Trigger", + "sidebar.object_group.views": "Ansichten", + "sidebar.object.function": "Funktion", + "sidebar.object.procedure": "Prozedur", + "sidebar.object.view": "Ansicht", + "sidebar.placeholder.filter_table_view": "Tabellen und Ansichten filtern", + "sidebar.placeholder.select_connection": "Verbindung auswählen", + "sidebar.placeholder.select_connection_first": "Zuerst eine Verbindung auswählen", + "sidebar.placeholder.tag_name": "Gruppenname", + "sidebar.punctuation.list_separator": ", ", + "sidebar.rail.object_actions": "Schnellaktionen im Objektbereich", + "sidebar.rail.system_actions": "Systemaktionen", + "sidebar.search.manual_scope": "Manueller Bereich", + "sidebar.search.multi_select_supported": "Mehrere Bereiche unterstützt", + "sidebar.search.placeholder": "Suchen...", + "sidebar.search.scope_description": "Wählen Sie, wo die Suche in der Seitenleiste Treffer finden soll.", + "sidebar.search.scope_hint": "Im intelligenten Modus werden je nach Kontext Namen, Hosts, Datenbanken und Objekte durchsucht.", + "sidebar.search.scope_title": "Suchbereich", + "sidebar.search.scope_tooltip": "Aktueller Suchbereich: {{scope}}", + "sidebar.search.scope.database": "Datenbank", + "sidebar.search.scope.host": "Rechner", + "sidebar.search.scope.object": "Objekt", + "sidebar.search.scope.smart": "Intelligent", + "sidebar.search.scope.smart_description": "Grenzt die Suche anhand des ausgewählten Knotens automatisch ein.", + "sidebar.search.scope.smart_short": "Intelligent", + "sidebar.search.scope.tag": "Markierung", + "sidebar.sql_directory.default_name": "SQL-Verzeichnis", + "sidebar.sql_file_exec.cancel": "Ausführung abbrechen", + "sidebar.sql_file_exec.executed_label": "Ausgeführt: ", + "sidebar.sql_file_exec.file_size": "Dateigröße: ", + "sidebar.sql_file_exec.rows_separator": " Zeilen | Fehlgeschlagen: ", + "sidebar.sql_file_exec.rows_suffix": " Zeilen", + "sidebar.sql_file_exec.status_label": "Status: ", + "sidebar.sql_file_exec.status.cancelled": "Abgebrochen", + "sidebar.sql_file_exec.status.done": "Abgeschlossen", + "sidebar.sql_file_exec.status.error": "Fehler", + "sidebar.sql_file_exec.status.running": "Wird ausgeführt", + "sidebar.sql_file_exec.title": "Externe SQL-Datei ausführen", + "sidebar.sql_file.default_name": "SQL-Datei", + "sidebar.sql_template.duckdb_macro_hint": "Verwenden Sie SQL Macro für funktionsähnliches Verhalten", + "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB unterstützt gespeicherte Prozeduren noch nicht", + "sidebar.sql_template.edit_routine": "{{type}} {{name}} bearbeiten", + "sidebar.sql_template.edit_view": "Ansicht {{name}} bearbeiten", + "sidebar.sql_template.modify_then_execute": "Ändern und ausführen", + "sidebar.status.pinned": "Angeheftet", + "sidebar.tab.create_function": "Neue Funktion", + "sidebar.tab.create_procedure": "Neue Prozedur", + "sidebar.tab.create_view": "Neue Ansicht", + "sidebar.tab.design_table": "Tabelle entwerfen ({{table}})", + "sidebar.tab.edit_event": "Ereignis bearbeiten: {{name}}", + "sidebar.tab.edit_routine": "{{type}} bearbeiten: {{name}}", + "sidebar.tab.edit_view": "Ansicht bearbeiten: {{name}}", + "sidebar.tab.event": "Ereignis: {{name}}", + "sidebar.tab.materialized_view_definition": "Materialisierte Ansicht: {{name}}", "sidebar.tab.new_event": "Neues Ereignis", + "sidebar.tab.new_query": "Neue Abfrage", + "sidebar.tab.new_query_database": "Neue Abfrage ({{database}})", + "sidebar.tab.new_table": "Neue Tabelle - {{database}}", "sidebar.tab.recent_query": "Letzte Abfrage", + "sidebar.tab.redis_command": "Befehl - {{database}}", + "sidebar.tab.redis_monitor": "Monitoring - {{database}}", + "sidebar.tab.routine_definition": "{{type}}: {{name}}", + "sidebar.tab.table_overview": "Tabellenübersicht - {{database}}{{schema}}", + "sidebar.tab.table_structure": "Tabellenstruktur ({{table}})", + "sidebar.tab.trigger": "Trigger: {{name}}", + "sidebar.tab.view_definition": "Ansicht: {{name}}", + "sidebar.table_action.clear.label": "Tabellendaten löschen", + "sidebar.table_action.clear.progress": "Wird gelöscht", + "sidebar.table_action.truncate.label": "Tabelle leeren", + "sidebar.table_action.truncate.progress": "Wird geleert", + "sidebar.table_folder.columns": "Spalten", + "sidebar.table_folder.foreign_keys": "Fremdschlüssel", + "sidebar.table_folder.indexes": "Indizes", + "sidebar.table_folder.triggers": "Trigger", + "sidebar.tree.all_saved_queries": "Alle gespeicherten Abfragen", + "sidebar.tree.default_database": "Standarddatenbank", + "sidebar.tree.default_schema": "Standardschema", + "sidebar.tree.saved_queries": "Gespeicherte Abfragen", + "sidebar.tree.unknown_connection": "Unbekannte Verbindung", + "sidebar.tree.unmatched_saved_queries": "Nicht zugeordnet", + "sidebar.tree.untitled_query": "Unbenannte Abfrage", + "sidebar.v2_database_menu.backup_all_tables_sql": "Alle Tabellen sichern · Schema + Daten SQL", + "sidebar.v2_database_menu.export_all_table_schema_sql": "Schemas aller Tabellen exportieren · SQL", + "sidebar.v2_database_menu.export_backup_section": "Export und Sicherung", + "sidebar.v2_database_menu.meta": "{{dialect}} · Datenbankaktionen", + "sidebar.v2_database_menu.new_external_catalog": "Neuer externer Catalog", + "sidebar.v2_database_menu.new_materialized_view": "Neue materialisierte Ansicht", + "sidebar.v2_database_menu.new_schema": "Neues schema", + "sidebar.v2_database_menu.refresh_object_tree": "Objektbaum aktualisieren", "sidebar.v2_schema_menu.backup_current_schema_sql": "Alle Tabellen des aktuellen Schemas sichern · Schema + Daten", "sidebar.v2_schema_menu.delete_schema_cascade": "Schema löschen · DROP CASCADE", "sidebar.v2_schema_menu.edit_schema": "Schema bearbeiten", "sidebar.v2_schema_menu.export_current_schema_sql": "Tabellenstrukturen des aktuellen Schemas exportieren · SQL", "sidebar.v2_schema_menu.meta": "{{database}} · Schema-Aktionen", + "sidebar.v2_table_group_menu.current_database": "Aktuelle Datenbank", + "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} Tabellen · nach {{sort}} sortiert", + "sidebar.v2_table_group_menu.sort_frequency": "Nutzungshäufigkeit", + "sidebar.v2_table_group_menu.sort_name": "Name", + "sidebar.v2_table_group_menu.title": "Tabellen", + "sidebar.v2_table_menu.ai_explain_table": "Mit AI diese Tabelle erklären", + "sidebar.v2_table_menu.ai_generate_query": "Mit AI eine Abfrage erzeugen", + "sidebar.v2_table_menu.backup_sql_dump": "Backup · {{keyword}}", + "sidebar.v2_table_menu.copy_section": "Kopieren", + "sidebar.v2_table_menu.copy_table_as_insert": "Gesamte Tabelle als {{keyword}} kopieren", + "sidebar.v2_table_menu.copy_table_name": "Tabellennamen kopieren", + "sidebar.v2_table_menu.design_table_detail": "Spalten / Indizes / Fremdschlüssel", + "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", + "sidebar.v2_table_menu.maintenance_section": "Wartung", + "sidebar.v2_table_menu.meta.idle": "Zum Laden der Statistiken auf Aktualisieren klicken", + "sidebar.v2_table_menu.meta.loading": "Tabellenstatistiken werden geladen...", + "sidebar.v2_table_menu.meta.rows": "{{count}} Zeilen", + "sidebar.v2_table_menu.meta.rows_empty": "— Zeilen", + "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} Daten · {{indexes}} Indizes", + "sidebar.v2_table_menu.meta.unavailable": "Tabellenstatistiken nicht verfügbar", + "sidebar.v2_table_menu.metadata_section": "Metadaten", + "sidebar.v2_table_menu.new_rollup": "Neues {{keyword}}", + "sidebar.v2_table_menu.open_data": "Daten anzeigen", + "sidebar.v2_table_menu.open_export_workbench": "Export-Workbench öffnen...", + "sidebar.v2_table_menu.open_in_new_tab": "In neuem Tab öffnen", + "sidebar.v2_table_menu.refresh_stats": "Statistiken aktualisieren", + "sidebar.v2_table_menu.rename_compact": "Umbenennen...", + "sidebar.v2_table_menu.truncate_table": "Tabelle abschneiden", + "sidebar.v2_table_menu.view_in_er": "Im ER-Diagramm anzeigen", + "sidebar.validation.name_required": "Geben Sie einen Namen ein.", + "sidebar.validation.new_database_name_required": "Geben Sie den neuen Datenbanknamen ein.", + "sidebar.validation.new_table_name_required": "Geben Sie den neuen Tabellennamen ein.", + "sidebar.validation.new_view_name_required": "Geben Sie den neuen Ansichtsnamen ein.", + "sidebar.validation.schema_name_required": "Geben Sie den schema-Namen ein.", + "sidebar.validation.tag_name_required": "Geben Sie einen Gruppennamen ein.", "snippet_settings.action.close": "Schließen", "snippet_settings.action.delete": "Löschen", "snippet_settings.action.new": "Neues Snippet", @@ -7307,6 +6959,66 @@ "store.fallback.connection_name": "Verbindung {{index}}", "store.fallback.connection_tag_name": "Tag {{index}}", "store.fallback.sql_snippet_name": "Snippet {{index}}", + "tab_manager.close_aria": "{{title}} schließen", + "tab_manager.empty.action.open_ai": "AI öffnen", + "tab_manager.empty.aria.start_workbench": "GoNavi-Startarbeitsbereich", + "tab_manager.empty.eyebrow.connections": "{{count}} Verbindungen", + "tab_manager.empty.eyebrow.workbench": "ARBEITSBEREICH", + "tab_manager.empty.hero.description": "Wählen Sie eine Datenquelle, öffnen Sie den Abfrageeditor oder arbeiten Sie mit Kontext im AI-Panel weiter.", + "tab_manager.empty.hero.title": "Verbindungen, Abfragen und Analysen beginnen in einem Arbeitsbereich.", + "tab_manager.empty.quick.ai_assist.description": "SQL erklären, Abfragen generieren und Ergebnisse prüfen", + "tab_manager.empty.quick.ai_assist.title": "AI-Unterstützung öffnen", + "tab_manager.empty.quick.aria": "Schneller Workflow", + "tab_manager.empty.quick.configure_source.description": "URI, SSH, Proxy und Treiber zentral festlegen", + "tab_manager.empty.quick.configure_source.title": "Datenquelle konfigurieren", + "tab_manager.empty.quick.heading": "Schneller Workflow", + "tab_manager.empty.quick.sql_workspace.description": "Abfrageeditor mit aktuellem Kontext öffnen", + "tab_manager.empty.quick.sql_workspace.title": "SQL-Arbeitsbereich starten", + "tab_manager.hover.fallback.database_not_specified": "Nicht angegeben", + "tab_manager.hover.fallback.host_not_configured": "Nicht konfiguriert", + "tab_manager.hover.fallback.unbound_connection": "Nicht gebundene Verbindung", + "tab_manager.hover.kind.design": "Tabellendesign", + "tab_manager.hover.kind.event": "Ereignis", + "tab_manager.hover.kind.fallback": "Tab", + "tab_manager.hover.kind.jvm_audit": "JVM-Audit", + "tab_manager.hover.kind.jvm_diagnostic": "JVM-Diagnose", + "tab_manager.hover.kind.jvm_monitoring": "JVM-Monitoring", + "tab_manager.hover.kind.jvm_overview": "JVM-Übersicht", + "tab_manager.hover.kind.jvm_resource": "JVM-Ressource", + "tab_manager.hover.kind.materialized_view": "Materialisierte Ansicht", + "tab_manager.hover.kind.query": "SQL-Abfrage", + "tab_manager.hover.kind.redis_command": "Redis-Befehl", + "tab_manager.hover.kind.redis_keys": "Redis Key", + "tab_manager.hover.kind.redis_monitor": "Redis-Monitor", + "tab_manager.hover.kind.routine": "Funktion / Prozedur", + "tab_manager.hover.kind.sql_analysis": "SQL-Analyse-Workbench", + "tab_manager.hover.kind.table": "Tabellendaten", + "tab_manager.hover.kind.table_export": "Export-Workbench", + "tab_manager.hover.kind.table_overview": "Tabellenübersicht", + "tab_manager.hover.kind.trigger": "Trigger", + "tab_manager.hover.kind.view": "Ansicht", + "tab_manager.hover.label.connection": "Verbindung", + "tab_manager.hover.label.database": "Datenbank", + "tab_manager.hover.label.object": "Objekt", + "tab_manager.hover.label.type": "Typ", + "tab_manager.kind_badge.design": "Design", + "tab_manager.kind_badge.event": "Ereignis", + "tab_manager.kind_badge.fallback": "Tab", + "tab_manager.kind_badge.jvm": "JVM", + "tab_manager.kind_badge.materialized_view": "MV", + "tab_manager.kind_badge.query": "SQL", + "tab_manager.kind_badge.redis": "Redis", + "tab_manager.kind_badge.routine": "Funktion", + "tab_manager.kind_badge.sql_analysis": "Analyse", + "tab_manager.kind_badge.table": "Tabelle", + "tab_manager.kind_badge.table_export": "Export", + "tab_manager.kind_badge.table_overview": "DB", + "tab_manager.kind_badge.trigger": "Trigger", + "tab_manager.kind_badge.view": "Ansicht", + "tab_manager.menu.close_all": "Alle Tabs schließen", + "tab_manager.menu.close_left": "Tabs links schließen", + "tab_manager.menu.close_other": "Andere Tabs schließen", + "tab_manager.menu.close_right": "Tabs rechts schließen", "tab_manager.menu.tab_display_settings": "Tab-Einstellungen", "tab_manager.sql_file_close.close_tabs": "Tabs schließen", "tab_manager.sql_file_close.continue_close": "Schließen fortsetzen", @@ -7324,24 +7036,305 @@ "tab_manager.sql_file_close.save_failed": "{{title}} konnte nicht gespeichert werden: {{detail}}", "tab_manager.sql_file_close.saved": "SQL-Datei gespeichert", "tab_manager.sql_file_close.unknown_error": "Unbekannter Fehler", + "table_designer.action.add": "Hinzufügen", + "table_designer.action.add_after_selected": "Nach ausgewählter Spalte hinzufügen", + "table_designer.action.add_column": "Spalte hinzufügen", + "table_designer.action.apply": "Anwenden", + "table_designer.action.cancel": "Abbrechen", + "table_designer.action.copy_selected_to_new_table": "Auswahl in neue Tabelle kopieren", + "table_designer.action.create": "Erstellen", + "table_designer.action.create_table": "Neue Tabelle erstellen", + "table_designer.action.delete": "Löschen", + "table_designer.action.edit": "Bearbeiten", + "table_designer.action.execute": "Ausführen", + "table_designer.action.refresh": "Aktualisieren", + "table_designer.action.refresh_anyway": "Trotzdem aktualisieren", + "table_designer.action.save": "Speichern", + "table_designer.action.table_comment": "Tabellenkommentar", + "table_designer.action.view_statement": "Anweisung anzeigen", + "table_designer.column.actions": "Aktionen", + "table_designer.column.auto_increment": "Auto-Inkrement", + "table_designer.column.comment": "Kommentar", + "table_designer.column.default": "Standardwert", + "table_designer.column.name": "Name", + "table_designer.column.not_null": "NOT NULL", + "table_designer.column.primary_key": "Primärschlüssel", + "table_designer.column.type": "Typ", + "table_designer.empty.triggers": "Diese Tabelle hat keine Trigger", + "table_designer.fallback.empty": "(leer)", + "table_designer.fallback.unknown_error": "Unbekannter Fehler", + "table_designer.fallback.unnamed_foreign_key": "(unbenannter Fremdschlüssel)", + "table_designer.fallback.unnamed_index": "(unbenannter Index)", + "table_designer.foreign_key.column.constraint_name": "Constraint-Name", + "table_designer.foreign_key.column.fields": "Spalten", + "table_designer.foreign_key.column.ref_fields": "Referenzspalten", + "table_designer.foreign_key.column.ref_table": "Referenztabelle", + "table_designer.index.column.fields": "Spalten", + "table_designer.index.column.name": "Indexname", + "table_designer.index.column.type": "Indextyp", + "table_designer.index.column.uniqueness": "Eindeutigkeit", + "table_designer.index.kind.fulltext": "Volltextindex", + "table_designer.index.kind.normal": "Normaler Index", + "table_designer.index.kind.normal_nonclustered": "Normaler Index (nicht geclustert)", + "table_designer.index.kind.primary_clustered": "Primärschlüsselindex (geclustert)", + "table_designer.index.kind.spatial": "Räumlicher Index", + "table_designer.index.kind.unique": "Eindeutiger Index", + "table_designer.index.uniqueness.normal": "Normal", + "table_designer.index.uniqueness.unique": "Eindeutig", + "table_designer.label.create_statement": "CREATE-Anweisung für {{name}}", + "table_designer.label.create_statement_plain": "CREATE-Anweisung", + "table_designer.message.add_at_least_one_column": "Fügen Sie mindestens eine Spalte hinzu", + "table_designer.message.columns_copied_to_new_table": "{{count}} Spalten wurden in die neue Tabelle {{table}} kopiert", + "table_designer.message.connection_not_found": "Verbindung nicht gefunden", + "table_designer.message.delete_failed": "Löschen fehlgeschlagen: {{detail}}", + "table_designer.message.drop_old_trigger_failed": "Alter Trigger konnte nicht gelöscht werden: {{detail}}", "table_designer.message.duckdb_primary_key_change_unsupported": "DuckDB unterstützt derzeit nur das Hinzufügen eines Primärschlüssels zu Tabellen ohne Primärschlüssel. Das Ändern oder Entfernen eines vorhandenen Primärschlüssels erfordert den Neuaufbau der Tabelle.", + "table_designer.message.execution_failed": "Ausführung fehlgeschlagen: {{detail}}", + "table_designer.message.execution_failed_plain": "Ausführung fehlgeschlagen", + "table_designer.message.execution_failed_prefix": "Ausführung fehlgeschlagen: ", + "table_designer.message.foreign_key_column_count_mismatch": "Die Anzahl der lokalen Spalten muss mit der Anzahl der Referenzspalten übereinstimmen", + "table_designer.message.foreign_key_created": "Fremdschlüssel erstellt", + "table_designer.message.foreign_key_delete_unsupported": "Diese Datenbank unterstützt das Löschen dieses Fremdschlüssels hier nicht", + "table_designer.message.foreign_key_deleted": "Fremdschlüssel gelöscht", + "table_designer.message.foreign_key_maintenance_unsupported": "Diese Datenbank unterstützt die Fremdschlüsselpflege hier nicht", + "table_designer.message.foreign_key_name_exists": "Fremdschlüssel-Constraint existiert bereits: {{name}}", + "table_designer.message.foreign_key_name_required": "Geben Sie einen Namen für den Fremdschlüssel-Constraint ein", + "table_designer.message.foreign_key_updated": "Fremdschlüssel aktualisiert", + "table_designer.message.index_create_sql_placeholder": "SQL zum Erstellen des Index ist nicht verfügbar", + "table_designer.message.index_create_sql_unavailable": "SQL zum Erstellen des Index kann nicht generiert werden", + "table_designer.message.index_created": "Index erstellt", + "table_designer.message.index_delete_named_unsupported": "Diese Datenbank unterstützt das Löschen des Index \"{{name}}\" nicht", + "table_designer.message.index_delete_unsupported": "Diese Datenbank unterstützt das Löschen dieses Index nicht", + "table_designer.message.index_deleted": "Index gelöscht", + "table_designer.message.index_kind_unsupported": "Diese Datenbank unterstützt diesen Indextyp nicht", + "table_designer.message.index_maintenance_unsupported": "Diese Datenbank unterstützt die Indexpflege hier nicht", + "table_designer.message.index_name_exists": "Indexname existiert bereits: {{name}}", + "table_designer.message.index_name_required": "Geben Sie einen Indexnamen ein", + "table_designer.message.index_restore_failed": "{{detail}}; Wiederherstellung des ursprünglichen Index fehlgeschlagen: {{restoreDetail}}", + "table_designer.message.index_restore_unavailable": "{{detail}}; der ursprüngliche Index konnte nicht automatisch wiederhergestellt werden. Bitte prüfen Sie ihn zeitnah.", + "table_designer.message.index_restored_after_failure": "{{detail}}; der ursprüngliche Index wurde automatisch wiederhergestellt.", + "table_designer.message.index_updated": "Index aktualisiert", + "table_designer.message.indexes_deleted": "{{count}} Indizes gelöscht", + "table_designer.message.load_columns_failed": "Spalten konnten nicht geladen werden: {{detail}}", + "table_designer.message.no_changes_detected": "Keine Änderungen erkannt", + "table_designer.message.no_copyable_columns": "Keine kopierbaren Spalten ausgewählt", + "table_designer.message.no_index_changes": "Keine Indexänderungen erkannt", + "table_designer.message.only_normal_unique_index_supported": "Diese Datenbank unterstützt nur die Pflege normaler und eindeutiger Indizes", + "table_designer.message.ref_columns_required": "Geben Sie mindestens eine Referenzspalte ein", + "table_designer.message.ref_table_required": "Geben Sie eine Referenztabelle ein", + "table_designer.message.relational_index_unsupported": "Diese Datenquelle unterstützt keine relationalen Indizes", + "table_designer.message.schema_saved_alter": "Tabellenstruktur aktualisiert.", + "table_designer.message.schema_saved_create": "Tabelle erstellt.", + "table_designer.message.select_at_least_one_column": "Wählen Sie mindestens eine Spalte aus", + "table_designer.message.select_column_before_insert": "Wählen Sie vor dem Einfügen eine Spalte aus.", + "table_designer.message.select_columns_to_copy": "Wählen Sie zuerst die zu kopierenden Spalten aus", + "table_designer.message.select_index_to_delete": "Wählen Sie zuerst einen zu löschenden Index aus", + "table_designer.message.select_local_columns": "Wählen Sie mindestens eine lokale Spalte aus", + "table_designer.message.select_one_foreign_key": "Wählen Sie zuerst einen Fremdschlüssel aus", + "table_designer.message.select_one_index": "Wählen Sie zuerst einen Index aus", + "table_designer.message.statement_execution_failed_prefix": "Anweisung {{current}}/{{total}} fehlgeschlagen: ", + "table_designer.message.switch_index_kind": "Stellen Sie die Indexkategorie auf {{kind}}-Index um", + "table_designer.message.table_comment_unsupported": "Diese Datenbank unterstützt das Bearbeiten von Tabellenkommentaren hier nicht", + "table_designer.message.table_comment_updated": "Tabellenkommentar aktualisiert", + "table_designer.message.table_name_required": "Geben Sie einen Tabellennamen ein", + "table_designer.message.target_table_required": "Geben Sie den Namen der Zieltabelle ein", + "table_designer.message.trigger_created": "Trigger erstellt", + "table_designer.message.trigger_deleted": "Trigger gelöscht", + "table_designer.message.trigger_updated": "Trigger aktualisiert", + "table_designer.modal.column_comment_title": "Spaltenkommentar", + "table_designer.modal.column_comment_title_named": "Spaltenkommentar - {{name}}", + "table_designer.modal.confirm_sql_title": "SQL-Änderungen bestätigen", + "table_designer.modal.copy_columns_title": "Ausgewählte Spalten in neue Tabelle kopieren", + "table_designer.modal.delete_foreign_key_content": "Fremdschlüssel-Constraint \"{{name}}\" löschen?", + "table_designer.modal.delete_foreign_key_title": "Fremdschlüssel löschen", + "table_designer.modal.delete_index_many": "Diese {{count}} Indizes löschen?\n{{names}}", + "table_designer.modal.delete_index_one": "Index {{names}} löschen?", + "table_designer.modal.delete_index_title": "Index löschen", + "table_designer.modal.delete_trigger_content": "Trigger \"{{name}}\" löschen? Dies kann nicht rückgängig gemacht werden.", + "table_designer.modal.delete_trigger_title": "Trigger löschen", + "table_designer.modal.foreign_key_create_title": "Fremdschlüssel hinzufügen", + "table_designer.modal.foreign_key_edit_title": "Fremdschlüssel bearbeiten", + "table_designer.modal.index_create_title": "Index hinzufügen", + "table_designer.modal.index_edit_title": "Index bearbeiten", + "table_designer.modal.table_comment_title": "Tabellenkommentar bearbeiten", + "table_designer.modal.trigger_create_title": "Trigger hinzufügen", + "table_designer.modal.trigger_detail_title": "Triggerdetails", + "table_designer.modal.trigger_detail_title_named": "Trigger: {{name}}", + "table_designer.modal.trigger_edit_title": "Trigger bearbeiten", + "table_designer.modal.unsaved_changes_content": "Beim Aktualisieren gehen die ungespeicherten Spaltenänderungen im aktuellen Entwurf verloren. Trotzdem aktualisieren und den Entwurf überschreiben?", + "table_designer.modal.unsaved_changes_title": "Ungespeicherte Spaltenänderungen", + "table_designer.notice.foreign_key_readonly": "Diese Datenbank unterstützt das Bearbeiten von Fremdschlüsseln hier nicht. Nur Ansicht.", + "table_designer.notice.foreign_key_replace_hint": "Beim Bearbeiten eines Fremdschlüssels wird zuerst der alte Fremdschlüssel gelöscht und danach der neue erstellt.", + "table_designer.notice.index_readonly": "Diese Datenbank unterstützt das Bearbeiten von Indizes hier nicht. Nur Ansicht.", + "table_designer.notice.index_restore_hint": "Wenn beim Bearbeiten eines Index das Erstellen des neuen Index fehlschlägt, versucht das System den ursprünglichen Index wiederherzustellen.", + "table_designer.notice.sql_irreversible": "Prüfen Sie das SQL sorgfältig. Die Ausführung kann nicht rückgängig gemacht werden.", + "table_designer.notice.sql_statement_irreversible": "Prüfen Sie die SQL-Anweisung sorgfältig. Die Ausführung kann nicht rückgängig gemacht werden.", + "table_designer.notice.trigger_replace_hint": "Beim Bearbeiten eines Triggers wird zuerst der ursprüngliche Trigger gelöscht und danach ein neuer erstellt.", + "table_designer.option.default": "Standard", + "table_designer.option.recommended_suffix": "(Empfohlen)", + "table_designer.placeholder.column_comment": "Spaltenkommentar eingeben", + "table_designer.placeholder.foreign_key_name": "Name des Fremdschlüssel-Constraints, z. B. fk_order_user", + "table_designer.placeholder.index_columns": "Indexspalten auswählen; die Auswahlreihenfolge wird verwendet", + "table_designer.placeholder.index_name": "Indexname, z. B. idx_user_name", + "table_designer.placeholder.local_columns": "Lokale Spalten auswählen; die Reihenfolge muss zu den Referenzspalten passen", + "table_designer.placeholder.primary_index_name": "Primärschlüsselindex verwendet festen Namen: PRIMARY", + "table_designer.placeholder.ref_columns": "Referenzspalten eingeben; mehrere Werte möglich", + "table_designer.placeholder.ref_table": "Referenztabelle; db.table wird unterstützt", + "table_designer.placeholder.table_comment": "Tabellenkommentar eingeben", + "table_designer.placeholder.table_name": "Tabellennamen eingeben", + "table_designer.placeholder.target_table_name": "Namen der Zieltabelle eingeben", "table_designer.schema_sql.doris.primary_key_hint": "-- Doris-Primärschlüssel-/Key-Modelländerungen müssen passend zum Tabellenmodell manuell migriert werden. MySQL-spezifische DROP/ADD PRIMARY KEY-Klauseln wurden ausgelassen.", + "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB kann Spaltenkommentare nicht über COMMENT ON COLUMN dauerhaft speichern. Der Kommentar für Spalte {{column}} bleibt nur in der Designer-Vorschau erhalten.", "table_designer.schema_sql.duckdb.primary_key_hint": "-- DuckDB unterstützt derzeit nur das Hinzufügen von PRIMARY KEY zu Tabellen ohne bestehenden Primärschlüssel. Änderungen oder Löschungen bestehender Primärschlüssel erfordern einen Tabellenneuaufbau.", + "table_designer.schema_sql.limited_column_hint": "-- Die Syntax für Spalten-Constraints, Standardwerte und Kommentare in {{dialect}} unterscheidet sich von MySQL. MySQL-spezifische Klauseln wurden ausgelassen; ergänzen Sie vor der Ausführung dialektspezifisches SQL.", + "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite kann Spalteneigenschaften nicht direkt ändern. Erstellen Sie für Spalte {{column}} eine neue Tabelle, migrieren Sie die Daten und ersetzen Sie die alte Tabelle.", + "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server benötigt zum Löschen des alten Primärschlüssels den ursprünglichen Constraint-Namen. Prüfen Sie ihn vor dem Löschen im Indextab.", + "table_designer.schema_sql.tdengine.timestamp_hint": "-- Normale TDengine-Tabellen benötigen in der Regel eine TIMESTAMP-Zeitspalte. Prüfen Sie vor der Ausführung das Tabellenmodell.", + "table_designer.selection.columns_selected": "{{count}} Spalten ausgewählt", + "table_designer.selection.foreign_key_selected": "Ausgewählt: {{name}}", + "table_designer.selection.indexes_selected": "{{count}} Indizes ausgewählt", + "table_designer.selection.trigger_prompt": "Klicken Sie, um einen Trigger auszuwählen", + "table_designer.selection.trigger_selected": "Ausgewählt: {{name}}", + "table_designer.sql_preview.change.add": "Hinzufügung", + "table_designer.sql_preview.change.comment": "Kommentaränderung", + "table_designer.sql_preview.change.constraint": "Constraint-Änderung", + "table_designer.sql_preview.change.create": "Neue Tabellenstruktur", "table_designer.sql_preview.change.create_index": "Index erstellen", + "table_designer.sql_preview.change.drop": "Entfernung", + "table_designer.sql_preview.change.modify": "Spalteneigenschaft geändert", + "table_designer.sql_preview.change.rename": "Umbenennung", + "table_designer.starrocks.bucket_mode.auto": "Eimeranzahl automatisch", + "table_designer.starrocks.bucket_mode.number": "Feste Eimeranzahl", + "table_designer.starrocks.distribution.hash": "Hash-Verteilung", + "table_designer.starrocks.distribution.none": "Keine Verteilung", + "table_designer.starrocks.distribution.random": "Zufällige Verteilung", + "table_designer.starrocks.key_model.aggregate": "Aggregatschlüssel", + "table_designer.starrocks.key_model.duplicate": "Duplikatschlüssel", + "table_designer.starrocks.key_model.unique": "Eindeutiger Schlüssel", + "table_designer.starrocks.placeholder.bucket_count": "Eimeranzahl", + "table_designer.starrocks.placeholder.distribution_columns": "Verteilungsspalten, z. B. user_id", + "table_designer.starrocks.placeholder.key_columns": "Schlüsselspalten, z. B. id, date", + "table_designer.starrocks.placeholder.partition_clause": "Partitionsklausel, z. B. PARTITION BY RANGE(date_col)(...)", + "table_designer.starrocks.table_kind.external": "Externe Tabelle", + "table_designer.starrocks.table_kind.olap": "OLAP-Tabelle", + "table_designer.status.read_only": "Schreibgeschützt", + "table_designer.summary.columns": "{{count}} Spalten", + "table_designer.summary.indexes": "Indizes: {{count}}, Indexspalten: {{fields}}", + "table_designer.tab.columns": "Spalten", "table_designer.tab.edit_trigger_title": "Trigger bearbeiten: {{name}}", + "table_designer.tab.foreign_keys": "Fremdschlüssel", + "table_designer.tab.indexes": "Indizes", + "table_designer.tab.triggers": "Trigger", + "table_designer.table_comment.current": "Aktueller Kommentar: {{comment}}", + "table_designer.title.default_database": "Standarddatenbank", + "table_designer.title.schema_designer": "Schema-Designer", + "table_designer.title.untitled_table": "Unbenannte Tabelle", + "table_designer.tooltip.edit_comment_popup": "Kommentar im Dialog bearbeiten", + "table_designer.trigger.column.event": "Ereignis", + "table_designer.trigger.column.name": "Name", + "table_designer.trigger.column.timing": "Zeitpunkt", + "table_designer.trigger.definition_unavailable": "Vollständige Triggerdefinition konnte nicht abgerufen werden", + "table_designer.trigger.field.event": "Ereignis", + "table_designer.trigger.field.timing": "Zeitpunkt", + "table_designer.trigger.template.body_comment": "Triggerlogik", + "table_designer.trigger.template.enter_create": "Geben Sie eine CREATE TRIGGER-Anweisung ein", + "table_overview.action.show_more": "Mehr Tabellen anzeigen ({{count}} verbleibend)", + "table_overview.empty.no_matches": "Keine Treffer", + "table_overview.empty.no_tables": "Keine Tabellen", + "table_overview.menu.backup_table_sql": "Tabelle sichern (SQL)", + "table_overview.menu.clear_table": "Tabelle leeren", + "table_overview.menu.copy_structure": "Tabellenstruktur kopieren", "table_overview.menu.copy_table_name": "Tabellennamen kopieren", + "table_overview.menu.danger_operations": "Gefährliche Aktionen", + "table_overview.menu.delete_table": "Tabelle löschen", + "table_overview.menu.design_table": "Tabelle entwerfen", + "table_overview.menu.export_csv": "CSV exportieren", + "table_overview.menu.export_html": "HTML exportieren", + "table_overview.menu.export_json": "JSON exportieren", + "table_overview.menu.export_markdown": "Markdown exportieren", + "table_overview.menu.export_table_data": "Tabellendaten exportieren", + "table_overview.menu.export_xlsx": "XLSX exportieren", + "table_overview.menu.new_query": "Neue Abfrage", + "table_overview.menu.rename_table": "Tabelle umbenennen", "table_overview.menu.table_structure": "Tabellenstruktur", + "table_overview.menu.truncate_table": "Tabelle truncaten", + "table_overview.message.copy_structure_failed": "Tabellenstruktur konnte nicht kopiert werden: {{detail}}", + "table_overview.message.copy_structure_success": "Tabellenstruktur in die Zwischenablage kopiert", "table_overview.message.copy_table_name_empty": "Der Tabellenname ist leer und kann nicht kopiert werden", "table_overview.message.copy_table_name_failed": "Tabellenname konnte nicht kopiert werden: {{detail}}", "table_overview.message.copy_table_name_success": "Tabellenname wurde in die Zwischenablage kopiert", + "table_overview.message.delete_table_failed": "Tabelle konnte nicht gelöscht werden: {{detail}}", + "table_overview.message.delete_table_success": "Tabelle gelöscht", + "table_overview.message.export_failed": "Export fehlgeschlagen: {{detail}}", + "table_overview.message.export_success": "Export erfolgreich", + "table_overview.message.exporting_table_format": "{{table}} wird als {{format}} exportiert...", + "table_overview.message.load_tables_failed": "Tabelleninformationen konnten nicht geladen werden: {{detail}}", + "table_overview.message.pinned": "Tabelle angeheftet", + "table_overview.message.rename_table_failed": "Tabelle konnte nicht umbenannt werden: {{detail}}", + "table_overview.message.rename_table_success": "Tabelle umbenannt", + "table_overview.message.table_data_action_failed": "{{action}} fehlgeschlagen: {{detail}}", + "table_overview.message.table_data_action_loading": "{{action}} für {{table}} wird ausgeführt...", + "table_overview.message.table_data_action_success": "{{action}} erfolgreich", + "table_overview.message.unknown_error": "Unbekannter Fehler", + "table_overview.message.unpinned": "Anheften der Tabelle aufgehoben", + "table_overview.metric.data_size": "Datengröße", + "table_overview.metric.engine": "Engine", + "table_overview.metric.index_size": "Indexgröße", + "table_overview.metric.relative_size": "Relative Größe", + "table_overview.modal.delete_table.content": "Tabelle \"{{table}}\" löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "table_overview.modal.delete_table.title": "Tabelle löschen", + "table_overview.modal.rename_table.placeholder": "Neuen Tabellennamen eingeben", + "table_overview.modal.rename_table.title": "Tabelle umbenennen", + "table_overview.modal.table_data_action.content": "{{action}} löscht dauerhaft alle Daten in Tabelle \"{{table}}\". Diese Aktion kann nicht rückgängig gemacht werden. Fortfahren?", + "table_overview.modal.table_data_action.title": "{{action}} bestätigen", + "table_overview.placeholder.search": "Tabellennamen oder Kommentare suchen...", + "table_overview.row.engine_table": "{{engine}}-Tabelle", + "table_overview.row.open_hint": "Doppelklicken, um Daten zu öffnen; Rechtsklick für weitere Aktionen", + "table_overview.section.all": "Alle", + "table_overview.section.pinned": "Angeheftet", + "table_overview.sort.name": "Name", + "table_overview.sort.rows": "Zeilen", + "table_overview.sort.size": "Groesse", + "table_overview.status.hidden_count_hint": "{{count}} weitere sind nicht gerendert. Mehr laden oder die Suche eingrenzen.", + "table_overview.status.loading_tables": "Tabelleninformationen werden geladen...", + "table_overview.status.matching_rendered": "{{matched}} Tabellen gefunden, {{rendered}} werden angezeigt", + "table_overview.status.updating_filter": "Gefilterte Ergebnisse werden aktualisiert...", "table_overview.tab.design_table_title": "Tabelle entwerfen ({{table}})", "table_overview.tab.table_structure_title": "Tabellenstruktur ({{table}})", + "table_overview.table_data_action.clear.label": "Tabellendaten leeren", + "table_overview.table_data_action.truncate.label": "Tabelle leeren", + "table_overview.toolbar.summary": "{{count}} Tabellen · {{rows}} Zeilen · {{size}}", + "table_overview.tooltip.card_view": "Kartenansicht", + "table_overview.tooltip.list_view": "Listenansicht", + "table_overview.tooltip.refresh": "Aktualisieren", + "table_overview.tooltip.sort": "Sortieren", + "table_overview.validation.table_name_required": "Tabellenname ist erforderlich", + "table_overview.validation.table_name_unchanged": "Der neue Tabellenname entspricht dem aktuellen Namen", "trigger_viewer.action.edit_object": "Objekt bearbeiten", "trigger_viewer.edit_sql.compatibility_hint": "Prüfe vor dem Ausführen die Kompatibilität mit der aktuellen Datenbank.", "trigger_viewer.edit_sql.empty_definition": "Die Triggerdefinition ist leer. Vervollständige die CREATE TRIGGER-Anweisung vor dem Ausführen.", "trigger_viewer.edit_sql.fragment_definition": "Die aktuelle Datenquelle hat nur ein Fragment der Triggerdefinition zurückgegeben. Vervollständige die CREATE TRIGGER-Anweisung vor dem Ausführen.", "trigger_viewer.edit_sql.header": "Trigger bearbeiten: {{name}}", "trigger_viewer.edit_sql.replace_hint": "Die Tabellenentwurfsänderung löscht zuerst den ursprünglichen Trigger und erstellt danach einen neuen. Vor dem Ausführen prüfen.", + "trigger_viewer.editor.definition_not_found": "Triggerdefinition nicht gefunden", + "trigger_viewer.editor.sphinx.compat_queries_hint": "Mehrere Kompatibilitätsabfragen wurden ausgeführt. Ursache können Versionsbeschränkungen oder ein nicht unterstützter Objekttyp sein.", + "trigger_viewer.editor.sphinx.empty_result": "Die aktuelle Sphinx-Instanz{{version}} hat keine Triggerdefinition zurückgegeben.", + "trigger_viewer.editor.sphinx.failed_message_label": "Zurückgegebene Fehlermeldung", + "trigger_viewer.editor.sphinx.failed_message_unknown": "Zurückgegebene Fehlermeldung: Unbekannter Fehler", + "trigger_viewer.editor.sphinx.unsupported_query": "Die aktuelle Sphinx-Instanz{{version}} unterstützt das Abfragen von Triggerdefinitionen nicht.", + "trigger_viewer.editor.sphinx.version_suffix": " (Version: {{version}})", + "trigger_viewer.editor.unsupported.duckdb": "DuckDB unterstützt keine Trigger", + "trigger_viewer.editor.unsupported.generic": "Dieser Datenbanktyp unterstützt das Anzeigen von Triggerdefinitionen nicht", + "trigger_viewer.editor.unsupported.mongodb": "MongoDB unterstützt keine Trigger", + "trigger_viewer.editor.unsupported.tdengine": "TDengine unterstützt keine Trigger", + "trigger_viewer.error.connection_not_found": "Datenbankverbindung nicht gefunden", + "trigger_viewer.error.load_failed": "Laden fehlgeschlagen", + "trigger_viewer.error.query_failed": "Triggerdefinitionsabfrage fehlgeschlagen", + "trigger_viewer.error.query_failed_detail": "Triggerdefinitionsabfrage fehlgeschlagen: {{detail}}", + "trigger_viewer.error.trigger_name_empty": "Triggername ist leer", + "trigger_viewer.field.database": "Datenbank", + "trigger_viewer.field.trigger": "Trigger", + "trigger_viewer.loading.definition": "Triggerdefinition wird geladen...", "trigger_viewer.tab.edit_trigger_title": "Trigger bearbeiten: {{name}}", "trigger_viewer.warning.refresh_latest_failed": "Neueste Definition konnte nicht aktualisiert werden", "data_export.dialog.action.start": "Export starten", @@ -7455,5 +7448,133 @@ "data_export.workbench.target.batch_tables": "{{database}} · {{count}} Objekte", "data_export.workbench.target.current_database": "Aktuelle Datenbank", "data_export.workbench.task.export_target": "{{name}} exportieren", - "data_export.workbench.title": "Export-Workbench" + "data_export.workbench.title": "Export-Workbench", + "data_grid.export.scope.all_results_cached": "Alle Ergebnisse (aktueller Cache {{count}} Zeilen)", + "data_grid.export.scope.all_results_cached_description": "Exportiert alle Ergebnisse aus dem aktuellen Cache, wenn die aktuelle Abfrage nicht erneut ausgeführt werden kann.", + "data_grid.export.scope.all_results_requery": "Alle Ergebnisse (erneut abfragen)", + "data_grid.export.scope.all_results_requery_description": "Führt das SQL im Backend erneut aus, damit nicht nur die aktuelle Seite oder der Cache exportiert wird.", + "data_grid.export.scope.current_page": "Aktuelle Seite ({{count}} Zeilen)", + "data_grid.export.scope.current_page_description": "Exportiert direkt aus dem Cache der aktuellen Seite.", + "data_grid.export.scope.current_page_requery_description": "Fragt die aktuelle Seite mit den aktuellen Seiteneinstellungen im Backend erneut ab und exportiert sie dann.", + "data_grid.export.scope.current_page_unavailable_description": "Die aktuelle Seite hängt von temporärem Frontend-Status ab. Verwenden Sie stattdessen den Schnellexport.", + "data_grid.export.scope.filtered_results_all": "Gefilterte Ergebnisse (alle)", + "data_grid.export.scope.filtered_results_all_requery_description": "Fragt die Datenbank mit den aktuellen Filtern erneut ab und exportiert alle gefilterten Ergebnisse.", + "data_grid.export.scope.filtered_results_all_unavailable_description": "Die aktuelle Datenquelle oder der aktuelle Status unterstützt keine Wiederholung des Filterexports in der Workbench.", + "data_grid.export.scope.selected_rows": "Ausgewählte Zeilen", + "data_grid.export.scope.selected_rows_count": "Ausgewählte Zeilen ({{count}} Zeilen)", + "data_grid.export.scope.selected_rows_description": "Exportiert nur die markierten Zeilen aus der aktuellen Ergebnismenge.", + "sidebar.message.table_export_target_missing": "Der Tabellenname konnte nicht erkannt werden, daher kann der Export nicht fortgesetzt werden.", + "sidebar.tab.batch_export_databases": "Datenbanken gesammelt exportieren", + "sidebar.tab.batch_export_objects": "Objekte gesammelt exportieren", + "sidebar.tab.batch_export_objects_database": "Objekte aus {{database}} gesammelt exportieren", + "data_export.message.already_running": "Es läuft bereits ein Exportauftrag. Warten Sie, bis er abgeschlossen ist, bevor Sie einen neuen Export starten.", + "data_export.message.export_failed": "Export fehlgeschlagen: {{error}}", + "data_export.message.export_success": "Export erfolgreich", + "data_export.progress.stage.waiting_file_selection": "Warten auf Auswahl der Exportdatei", + "sql_analysis.workbench.validation.sql_required": "Geben Sie das zu analysierende SQL ein", + "sql_analysis.workbench.alert.connection_missing_title": "Die zugehoerige Verbindung fuer diese Workbench ist nicht mehr verfuegbar", + "sql_analysis.workbench.alert.connection_missing_description": "Waehlen Sie erneut eine gueltige Verbindung aus, bevor Sie die SQL-Analyse-Workbench wieder oeffnen.", + "sql_analysis.workbench.title": "SQL-Analyse-Workbench", + "sql_analysis.workbench.view.slow_query": "Langsame SQL", + "sql_analysis.workbench.view.diagnose": "SQL-Diagnose", + "sql_analysis.workbench.editor.placeholder": "Geben Sie das zu analysierende SQL ein oder uebernehmen Sie einen Eintrag aus der Liste langsamer SQL", + "sql_analysis.workbench.editor.hint": "Eintraege aus der Liste langsamer SQL koennen direkt uebernommen werden", + "sql_analysis.workbench.action.run": "Diagnose ausfuehren", + "sql_analysis.explain.error.query_required": "Die Abfrage ist leer", + "sql_analysis.explain.error.run_failed": "Diagnose fehlgeschlagen", + "sql_analysis.explain.loading": "EXPLAIN wird ausgefuehrt und der Plan wird analysiert...", + "sql_analysis.explain.error.title": "Diagnose fehlgeschlagen: ", + "sql_analysis.explain.empty": "SQL eingeben und Diagnose ausfuehren", + "sql_analysis.explain.view.plan": "Ausfuehrungsplan", + "sql_analysis.explain.view.raw": "Rohtext", + "sql_analysis.explain.meta.node_count": "{{count}} Knoten", + "sql_analysis.explain.raw.empty": "(kein Rohtext)", + "sql_analysis.explain_graph.label.table": "Tabelle: ", + "sql_analysis.explain_graph.label.index": "Index: ", + "sql_analysis.explain_graph.metric.est_rows": "Geschaetzt", + "sql_analysis.explain_graph.metric.actual_rows": "Tatsaechlich", + "sql_analysis.explain_graph.metric.cost": "Kosten", + "sql_analysis.explain_graph.flag.full_scan": "Vollscan", + "sql_analysis.explain_graph.flag.filesort": "Zusatzsortierung", + "sql_analysis.explain_graph.flag.temp_table": "Temporäre Tabelle", + "sql_analysis.sidebar.stats.title": "Ausfuehrungsstatistik", + "sql_analysis.sidebar.stats.total_cost": "Gesamtkosten", + "sql_analysis.sidebar.stats.total_duration": "Gesamtdauer", + "sql_analysis.sidebar.stats.rows_read": "Gelesene Zeilen", + "sql_analysis.sidebar.stats.buffer_hit": "Buffer-Treffer", + "sql_analysis.sidebar.stats.max_est_rows": "Max. geschaetzte Zeilen je Knoten", + "sql_analysis.sidebar.warning.full_scan": "Vollstaendiger Tabellenscan erkannt", + "sql_analysis.sidebar.warning.filesort": "Zusaetzliche Sortierung erkannt", + "sql_analysis.sidebar.warning.temp_table": "Temporäre Tabelle verwendet", + "sql_analysis.sidebar.node.title": "Knotendetails", + "sql_analysis.sidebar.node.op_type": "Operationstyp", + "sql_analysis.sidebar.node.op_detail": "Operationsdetail", + "sql_analysis.sidebar.node.table": "Tabelle", + "sql_analysis.sidebar.node.index": "Index", + "sql_analysis.sidebar.node.est_rows": "Geschaetzte Zeilen", + "sql_analysis.sidebar.node.actual_rows": "Tatsaechliche Zeilen", + "sql_analysis.sidebar.node.loops": "Schleifen", + "sql_analysis.sidebar.node.cost": "Kosten", + "sql_analysis.sidebar.node.duration": "Dauer", + "sql_analysis.sidebar.node.buffer_hit": "Buffer-Treffer", + "sql_analysis.sidebar.node.flags": "Kennzeichen", + "sql_analysis.sidebar.node.extra": "Extra-Felder ({{count}})", + "sql_analysis.sidebar.suggestions.title": "Indexempfehlungen ({{count}})", + "sql_analysis.sidebar.suggestions.empty": "Keine offensichtlichen Performance-Probleme gefunden", + "sql_analysis.sidebar.suggestions.rows": "{{count}} Zeilen", + "sql_analysis.sidebar.suggestions.table": "Tabelle: {{table}}", + "sql_analysis.slow_query.error.load_failed": "Laden fehlgeschlagen", + "sql_analysis.slow_query.message.cleared": "Verlauf langsamer Abfragen wurde geleert", + "sql_analysis.slow_query.error.clear_failed": "Leeren fehlgeschlagen", + "sql_analysis.slow_query.sort.duration": "Nach Dauer", + "sql_analysis.slow_query.sort.rows_read": "Nach gelesenen Zeilen", + "sql_analysis.slow_query.sort.recent": "Nach Zeit", + "sql_analysis.slow_query.tooltip.clear_current": "Verlauf der aktuellen Verbindung leeren", + "sql_analysis.slow_query.loading": "Verlauf langsamer Abfragen wird geladen...", + "sql_analysis.slow_query.error.title": "Laden fehlgeschlagen: ", + "sql_analysis.slow_query.empty": "Noch keine langsamen Abfragen (Schwelle {{threshold}}ms)", + "sql_analysis.slow_query.title": "Verlauf langsamer SQL", + "sql_analysis.slow_query.current_connection": "(aktuelle Verbindung)", + "sql_analysis.slow_query.metric.rows_read": "Gelesen", + "sql_analysis.slow_query.metric.rows_returned": "Zurueckgegeben", + "sql_analysis.slow_query.preview.empty": "(keine SQL-Vorschau)", + "sql_analysis.slow_query.relative.just_now": "Gerade eben", + "sql_analysis.slow_query.relative.minutes_ago": "vor {{count}} Minuten", + "sql_analysis.slow_query.relative.hours_ago": "vor {{count}} Stunden", + "sql_analysis.slow_query.relative.days_ago": "vor {{count}} Tagen", + "sql_analysis.slow_query.rail.tooltip.no_connection": "Oeffnen Sie zuerst einen Datenbankverbindungs-Tab", + "sql_analysis.slow_query.rail.tooltip.open": "Die SQL-Analyse-Workbench fuer die aktuelle Verbindung oeffnen", + "sql_analysis.slow_query.rail.aria_label": "Workbench fuer langsame SQL", + "sql_analysis.backend.error.query_required": "Die SQL-Abfrage darf nicht leer sein", + "sql_analysis.backend.error.select_only": "Die Diagnose unterstuetzt nur SELECT- / WITH-Abfragen. Fuer Schreiboperationen verwenden Sie bitte den EXPLAIN-PLAN-Modus (PR2-Unterstuetzung).", + "sql_analysis.backend.error.unsupported_db_type": "Die aktuelle Datenquelle ({{dbType}}) unterstuetzt noch keine SQL-Diagnose. In Phase 1 werden MySQL/PostgreSQL/SQLite/ClickHouse/Oracle/SQLServer/OceanBase unterstuetzt.", + "sql_analysis.backend.message.completed": "Diagnose abgeschlossen", + "query_history.backend.error.connection_fingerprint_invalid": "Der Verbindungs-Fingerprint konnte nicht analysiert werden", + "query_history.backend.message.loaded": "Geladen", + "query_history.backend.message.cleared": "Verlauf langsamer Abfragen wurde geleert", + "connection.backend.error.readonly_action_blocked": "Für diese Verbindung ist der Produktionsschutz aktiv; {{action}} ist nicht erlaubt.", + "connection.backend.action.create_database": "Datenbank erstellen", + "connection.backend.action.create_schema": "Schema erstellen", + "connection.backend.action.rename_schema": "Schema umbenennen", + "connection.backend.action.drop_schema": "Schema löschen", + "connection.backend.action.rename_database": "Datenbank umbenennen", + "connection.backend.action.drop_database": "Datenbank löschen", + "connection.backend.action.rename_table": "Tabelle umbenennen", + "connection.backend.action.drop_table": "Tabelle löschen", + "connection.backend.action.drop_view": "View löschen", + "connection.backend.action.drop_function_or_procedure": "Funktion oder Stored Procedure löschen", + "connection.backend.action.rename_view": "View umbenennen", + "connection.backend.action.import_data": "Daten importieren", + "connection.backend.action.apply_result_changes": "Ergebnisänderungen übernehmen", + "connection.backend.action.preview_result_changes": "Ergebnisänderungen in der Vorschau anzeigen", + "connection.backend.action.clear_table": "Tabellendaten leeren", + "connection.backend.action.truncate_table": "Tabelle per TRUNCATE leeren", + "connection.backend.action.data_sync_write": "Synchronisierte Daten schreiben", + "connection_modal.field.readOnly.label": "Produktionsschutz", + "connection_modal.field.readOnly.help": "Wenn aktiviert, sind für diese Verbindung nur Abfragen erlaubt. Import, Schemaänderungen, Schreibvorgänge und die Nutzung als Synchronisationsziel werden blockiert.", + "connection_modal.field.readOnly.checkbox": "Diese Verbindung als Produktionsverbindung markieren und nur Abfragen erlauben", + "query_editor.message.connection_readonly_blocked": "Für diese Verbindung ist der Produktionsschutz aktiv; es sind nur Abfragen erlaubt.", + "query_editor.results_panel.message.action.copy": "Kopieren", + "query_editor.results_panel.message.copy_unsupported": "Die Zwischenablage ist in der aktuellen Umgebung nicht verfügbar", + "query_editor.results_panel.message.copy_failed": "Nachricht konnte nicht kopiert werden: {{detail}}" } diff --git a/shared/i18n/en-US.json b/shared/i18n/en-US.json index 8778fe3..0ee0cf4 100644 --- a/shared/i18n/en-US.json +++ b/shared/i18n/en-US.json @@ -1,4863 +1,4 @@ { - "common.cancel": "Cancel", - "redis.db_alias.menu.set": "Set alias", - "redis.db_alias.modal.title": "Alias for {{db}}", - "redis.db_alias.modal.placeholder": "e.g. cache, sessions (leave empty to clear)", - "common.back_to_previous": "Back", - "common.close": "Close", - "common.confirm": "Confirm", - "common.continue": "Continue", - "common.delete": "Delete", - "common.edit": "Edit", - "common.error": "Error", - "common.loading": "Loading", - "common.named_item": "{{name}}", - "common.ok": "OK", - "common.refresh": "Refresh", - "common.save": "Save", - "common.search": "Search", - "common.success": "Success", - "common.unknown": "Unknown", - "common.warning": "Warning", - "connection.sidebar.group.untitled": "Untitled group", - "connection.sidebar.group.meta": "{{count}} connections · Connection group", - "connection.sidebar.group.badge": "GROUP", - "connection.sidebar.group.edit": "Edit group", - "connection.sidebar.group.delete": "Delete group", - "connection.sidebar.group.deleteConfirmTitle": "Confirm deletion", - "connection.sidebar.group.deleteConfirmContent": "Delete group \"{{name}}\"? Connections inside it will not be removed.", - "connection.sidebar.group.expandAria": "Expand connection group {{name}}", - "connection.sidebar.group.collapseAria": "Collapse connection group {{name}}", - "connection.sidebar.menu.section": "Connection", - "connection.sidebar.menu.groupSection": "Connection groups", - "connection.sidebar.menu.copy": "Copy connection", - "connection.sidebar.menu.disconnect": "Disconnect", - "connection.sidebar.menu.delete": "Delete connection", - "connection.sidebar.menu.hostFallback": "Address not configured", - "connection.sidebar.menu.hostBadge": "HOST", - "connection.sidebar.menu.moveToTag": "Move to tag", - "connection.sidebar.menu.moveOutTag": "Remove from tag", - "connection.sidebar.menu.moveToUngrouped": "Remove from group", - "connection.sidebar.menu.createDatabase": "New database", - "connection.sidebar.menu.refresh": "Refresh connection", - "connection.sidebar.menu.current": "Current", - "connection.sidebar.duplicate.backendUnavailable": "Failed to copy connection: backend interface unavailable", - "connection.sidebar.duplicate.noResult": "Failed to copy connection: backend returned no result", - "connection.sidebar.duplicate.success": "Connection copied: {{name}}", - "connection.sidebar.duplicate.failureFallback": "Failed to copy connection", - "connection.sidebar.disconnect.success": "Disconnected", - "connection.sidebar.delete.confirmTitle": "Confirm deletion", - "connection.sidebar.delete.confirmContent": "Are you sure you want to delete connection \"{{name}}\"?", - "connection.sidebar.delete.backendUnavailable": "Failed to delete connection: backend interface unavailable", - "connection.sidebar.delete.success": "Connection deleted", - "connection.sidebar.delete.failureFallback": "Failed to delete connection", - "find_in_database.title": "Search in database - {{dbName}}", - "find_in_database.placeholder.keyword": "Enter the string to search for...", - "find_in_database.match.contains": "Contains", - "find_in_database.match.exact": "Exact match", - "find_in_database.message.keyword_required": "Enter a search keyword", - "find_in_database.message.connection_config_not_found": "Connection configuration not found", - "find_in_database.message.get_tables_failed": "Failed to get table list: {{detail}}", - "find_in_database.message.no_tables": "The current database has no tables", - "find_in_database.message.no_matches": "No matching data found", - "find_in_database.message.search_failed": "Search failed: {{detail}}", - "find_in_database.column.table_name": "Table", - "find_in_database.column.matched_columns": "Matching columns", - "find_in_database.column.match_count": "Hit rows", - "find_in_database.column.action": "Actions", - "find_in_database.tooltip.collapse_details": "Collapse details", - "find_in_database.tooltip.view_details": "View details", - "find_in_database.progress.searching_table": "Searching {{table}}... ({{current}}/{{total}})", - "find_in_database.summary.found_tables": "Matching tables: {{count}}", - "find_in_database.summary.searching": " (search in progress...)", - "find_in_database.detail.title": "{{table}} - Matching row details", - "find_in_database.detail.row_count": "Rows: {{count}}", - "import_preview.title": "Import data preview", - "import_preview.action.start": "Start import", - "import_preview.status.loading_preview": "Loading preview data...", - "import_preview.status.importing": "Importing data...", - "import_preview.progress.processed_rows": "Processed {{current}} / {{total}} rows", - "import_preview.progress.success_count": "Success {{count}}", - "import_preview.progress.error_count": "Failed {{count}}", - "import_preview.preview.summary": "{{rows}} rows and {{columns}} fields", - "import_preview.preview.description": "The first 5 rows are shown below. Start the import after confirming the data.", - "import_preview.preview.field_list": "Field list:", - "import_preview.preview.table_title": "Data preview (first 5 rows):", - "import_preview.error.preview_failed": "Preview failed", - "import_preview.error.preview_failed_detail": "Preview failed: {{detail}}", - "import_preview.error.connection_config_not_found": "Connection configuration not found", - "import_preview.error.import_failed": "Import failed", - "import_preview.error.import_failed_detail": "Import failed: {{detail}}", - "import_preview.result.completed": "Import completed", - "import_preview.result.success_rows": "Successfully imported {{count}} rows", - "import_preview.result.failed_rows": "Failed {{count}} rows", - "import_preview.result.error_logs": "Error logs:", - "log_panel.title": "SQL execution log", - "log_panel.short_title": "Logs", - "log_panel.description": "Track execution status, duration, and errors for quick review.", - "log_panel.action.clear": "Clear logs", - "log_panel.action.close": "Close panel", - "log_panel.empty": "No SQL execution logs", - "log_panel.column.time": "Time", - "log_panel.column.status": "Status", - "log_panel.column.duration": "Duration", - "log_panel.column.sql_message": "SQL / Message", - "log_panel.affected_rows": "Affected: {{count}}", - "table_overview.status.loading_tables": "Loading table information...", - "table_overview.message.load_tables_failed": "Failed to load table information: {{detail}}", - "table_overview.message.pinned": "Table pinned", - "table_overview.message.unpinned": "Table unpinned", - "table_overview.message.copy_structure_success": "Table structure copied to clipboard", - "table_overview.message.copy_structure_failed": "Failed to copy table structure: {{detail}}", - "table_overview.message.exporting_table_format": "Exporting {{table}} as {{format}}...", - "table_overview.message.export_success": "Export succeeded", - "table_overview.message.export_failed": "Export failed: {{detail}}", - "table_overview.message.delete_table_success": "Table deleted", - "table_overview.message.delete_table_failed": "Failed to delete table: {{detail}}", - "table_overview.table_data_action.truncate.label": "Truncate Table", - "table_overview.table_data_action.clear.label": "Clear Table", - "table_overview.modal.table_data_action.title": "Confirm {{action}}", - "table_overview.modal.table_data_action.content": "{{action}} will permanently delete all data in table \"{{table}}\". This action cannot be undone. Continue?", - "table_overview.message.table_data_action_loading": "Running {{action}} on {{table}}...", - "table_overview.message.table_data_action_success": "{{action}} succeeded", - "table_overview.message.table_data_action_failed": "{{action}} failed: {{detail}}", - "table_overview.message.rename_table_success": "Table renamed", - "table_overview.message.rename_table_failed": "Failed to rename table: {{detail}}", - "table_overview.message.unknown_error": "Unknown error", - "table_overview.modal.delete_table.title": "Delete Table", - "table_overview.modal.delete_table.content": "Delete table \"{{table}}\"? This action cannot be undone.", - "table_overview.modal.rename_table.title": "Rename Table", - "table_overview.modal.rename_table.placeholder": "Enter a new table name", - "table_overview.validation.table_name_required": "Table name is required", - "table_overview.validation.table_name_unchanged": "New table name is the same as the current name", - "table_overview.toolbar.summary": "{{count}} tables · {{rows}} rows · {{size}}", - "table_overview.placeholder.search": "Search table names or comments...", - "table_overview.tooltip.sort": "Sort", - "table_overview.tooltip.card_view": "Card view", - "table_overview.tooltip.list_view": "List view", - "table_overview.tooltip.refresh": "Refresh", - "table_overview.sort.name": "Name", - "table_overview.sort.rows": "Rows", - "table_overview.sort.size": "Size", - "table_overview.metric.data_size": "Data size", - "table_overview.metric.index_size": "Index size", - "table_overview.metric.relative_size": "Relative size", - "table_overview.metric.engine": "Engine", - "table_overview.section.all": "All", - "table_overview.section.pinned": "Pinned", - "table_overview.row.engine_table": "{{engine}} table", - "table_overview.row.open_hint": "Double-click to open data, right-click for more actions", - "table_overview.status.updating_filter": "Updating filtered results...", - "table_overview.status.matching_rendered": "Matching {{matched}} tables, rendering {{rendered}}", - "table_overview.status.hidden_count_hint": "{{count}} more not rendered. Load more or narrow the search.", - "table_overview.empty.no_matches": "No matches", - "table_overview.empty.no_tables": "No tables", - "table_overview.action.show_more": "Show more tables ({{count}} remaining)", - "table_overview.menu.new_query": "New Query", - "table_overview.menu.design_table": "Design Table", - "table_overview.menu.copy_structure": "Copy Table Structure", - "table_overview.menu.backup_table_sql": "Back Up Table (SQL)", - "table_overview.menu.rename_table": "Rename Table", - "table_overview.menu.danger_operations": "Danger Operations", - "table_overview.menu.truncate_table": "Truncate Table", - "table_overview.menu.clear_table": "Clear Table", - "table_overview.menu.delete_table": "Delete Table", - "table_overview.menu.export_table_data": "Export Table Data", - "table_overview.menu.export_csv": "Export CSV", - "table_overview.menu.export_xlsx": "Export XLSX", - "table_overview.menu.export_json": "Export JSON", - "table_overview.menu.export_markdown": "Export Markdown", - "table_overview.menu.export_html": "Export HTML", - "settings.language.description": "Choose the display language for GoNavi.", - "settings.language.english": "English", - "settings.language.follow_system": "Follow system", - "settings.language.german": "Deutsch", - "settings.language.japanese": "日本語", - "settings.language.restart_hint": "Some editors and system-level menus may require reopening the window to fully apply.", - "settings.language.russian": "Русский", - "settings.language.simplified_chinese": "Simplified Chinese", - "settings.language.title": "Language", - "settings.language.traditional_chinese": "繁體中文", - "settings.title": "Settings", - "app.about.action.check_updates": "Check for Updates", - "app.about.action.download_progress": "Download Progress", - "app.about.action.download_update": "Download Update", - "app.about.action.mute_this_version": "Do Not Remind This Time", - "app.about.community.ai_book": "AI全书", - "app.about.description": "View version information, repository links, update status, and downloads.", - "app.about.field.author": "Author", - "app.about.field.community": "Community", - "app.about.field.update_status": "Update Status", - "app.about.field.version": "Version", - "app.about.message.load_failed": "Failed to get app info: {{error}}", - "app.about.project_links": "Project Links", - "app.about.title": "About GoNavi", - "app.ai_panel.action.close": "Close Panel", - "app.ai_panel.action.reload": "Reload", - "app.ai_panel.aria.close": "Close AI Panel", - "app.ai_panel.error.description": "This usually happens after hot reload invalidates lazy-loaded assets in development. The full-page white screen was prevented, and you can retry immediately.", - "app.ai_panel.error.title": "AI Panel Failed to Load", - "app.data_root.action.migrate_and_switch": "Migrate Existing Data and Switch", - "app.data_root.action.open_current": "Open Current Directory", - "app.data_root.action.restore_default_directory": "Restore Default Directory", - "app.data_root.action.select": "Select Directory", - "app.data_root.action.switch_only": "Switch to Selected Directory Only", - "app.data_root.apply_method": "Apply Method", - "app.data_root.current_directory": "Current Directory", - "app.data_root.default_directory": "Default Directory", - "app.data_root.description": "Manage the root directory for file-based data such as connections, proxy, AI settings, and drivers.", - "app.data_root.driver_directory": "Driver Directory", - "app.data_root.backend.dialog.select_directory": "Select GoNavi Data Directory", - "app.data_root.backend.error.create_target_failed": "Unable to create target data directory: {{detail}}", - "app.data_root.backend.error.create_bootstrap_directory_failed": "Failed to create default bootstrap directory: {{detail}}", - "app.data_root.backend.error.create_data_directory_failed": "Failed to create data directory: {{detail}}", - "app.data_root.backend.error.directory_empty": "Data directory cannot be empty", - "app.data_root.backend.error.directory_unavailable": "Data directory does not exist or is not accessible", - "app.data_root.backend.error.migrate_directory_failed": "Unable to migrate directory ({{entry}}): {{detail}}", - "app.data_root.backend.error.migrate_file_failed": "Unable to migrate file ({{entry}}): {{detail}}", - "app.data_root.backend.error.open_directory_failed": "Failed to open data directory: {{detail}}", - "app.data_root.backend.error.open_directory_unsupported": "Opening directories is not supported on this platform: {{platform}}", - "app.data_root.backend.error.read_source_failed": "Unable to read source data ({{entry}}): {{detail}}", - "app.data_root.backend.message.migrated_restart": "Data migrated and switched to the new directory. Restart the app to finish switching all modules.", - "app.data_root.backend.message.opened": "Data directory opened", - "app.data_root.backend.message.unchanged": "Data directory is unchanged", - "app.data_root.backend.message.updated_restart": "Data directory updated. Restart the app so AI and other runtime modules fully switch to the new directory.", - "app.data_root.message.apply_failed": "Failed to apply data directory", - "app.data_root.message.apply_failed_with_error": "Failed to apply data directory: {{error}}", - "app.data_root.message.load_failed": "Failed to load data directory info", - "app.data_root.message.load_failed_with_error": "Failed to load data directory info: {{error}}", - "app.data_root.message.open_failed": "Failed to open data directory", - "app.data_root.message.open_failed_with_error": "Failed to open data directory: {{error}}", - "app.data_root.message.select_failed": "Failed to select data directory", - "app.data_root.message.select_failed_with_error": "Failed to select data directory: {{error}}", - "app.data_root.message.select_valid_first": "Select a valid data directory first", - "app.data_root.message.updated": "Data directory updated", - "app.data_root.placeholder.select_new_directory": "Select a new data directory", - "app.data_root.restart_hint": "Restarting the app after switching is recommended so AI and other long-lived modules fully move to the new directory. Sensitive passwords remain in the system secret store and are not migrated with file directories.", - "app.data_root.switch_target": "Switch Target", - "app.data_root.title": "Data Storage Location", - "app.proxy.description": "Configure update checks, driver management, and connection network access that has no separate proxy.", - "app.proxy.enable": "Enable Global Proxy", - "app.proxy.host": "Proxy Host", - "app.proxy.host_placeholder": "Example: 127.0.0.1", - "app.proxy.message.invalid_enabled": "Global proxy is enabled, but the host or port is invalid. It is currently treated as disabled.", - "app.proxy.message.save_failed": "Global proxy configuration failed: {{error}}", - "app.proxy.password_optional": "Password (optional)", - "app.proxy.port": "Port", - "app.proxy.scope_hint": "* Applies to update checks, driver management network requests, and database connections without a separate proxy", - "app.proxy.section_title": "Global Proxy", - "app.proxy.title": "Global Proxy Settings", - "app.proxy.type": "Proxy Type", - "app.proxy.username_optional": "Username (optional)", - "proxy.backend.error.unsupported_type": "Unsupported proxy type: {{type}}", - "proxy.backend.error.host_empty": "Proxy host is empty", - "proxy.backend.error.port_invalid": "Invalid proxy port: {{port}}", - "proxy.backend.error.remote_addr_invalid": "Invalid remote address: {{address}}", - "proxy.backend.error.listen_failed": "Failed to create local proxy listener: {{detail}}", - "proxy.backend.error.socks5_dialer_failed": "Failed to create SOCKS5 proxy dialer: {{detail}}", - "proxy.backend.error.socks5_connect_failed": "SOCKS5 proxy connection failed: {{detail}}", - "proxy.backend.error.http_connect_failed": "Failed to connect to HTTP proxy: {{detail}}", - "proxy.backend.error.http_connect_write_failed": "Failed to send HTTP CONNECT request: {{detail}}", - "proxy.backend.error.http_connect_read_failed": "Failed to read HTTP CONNECT response: {{detail}}", - "proxy.backend.error.http_connect_status_failed": "HTTP proxy CONNECT failed: {{status}}", - "app.startup_readiness.loading_local_config": "Loading local configuration...", - "app.startup_readiness.loading_security_config": "Loading security configuration...", - "app.security_update.error.capability_unavailable": "Security update capability is unavailable", - "app.security_update.message.completed": "Saved configurations have completed the security update", - "app.security_update.message.needs_attention": "The update is not complete yet. A few configurations need your attention.", - "app.security_update.message.not_finished_retry_later": "Security update is not complete. Try again later.", - "app.security_update.message.postpone_failed": "Unable to postpone this security update right now", - "app.security_update.message.rolled_back": "This update did not complete. The system kept the currently usable configuration.", - "app.security_update.stage.checking_saved_config": "Checking saved configurations", - "app.security_update.stage.updating_secure_storage": "Updating secure storage", - "app.security_update.stage.verifying_result": "Verifying update result", - "security_update.banner.title": "Saved configurations can be securely updated", - "security_update.banner.action.start_now": "Update Now", - "security_update.banner.action.view_details": "View Details", - "security_update.banner.action.restart_update": "Restart Update", - "security_update.banner.action.retry_check": "Check Again", - "security_update.backend.issue.ai_provider.migration_required": "AI provider configuration is still saved in the current app configuration. After the security update completes, it will be moved to the new secure storage.", - "security_update.backend.issue.ai_provider.missing_or_resave": "AI provider configuration no longer exists or still needs to be saved again before the security update can be completed.", - "security_update.backend.issue.ai_provider.secret_missing": "AI provider configuration needs more information before the security update can be completed.", - "security_update.backend.issue.connection.incomplete": "Connection configuration still needs more information before the security update can be completed.", - "security_update.backend.issue.connection.missing_or_resave": "Connection configuration no longer exists or still needs to be saved again before the security update can be completed.", - "security_update.backend.issue.connection.password_missing": "Connection password is missing. Save it again before continuing.", - "security_update.backend.issue.global_proxy.missing_or_resave": "Global proxy settings no longer exist or still need to be saved again before the security update can be completed.", - "security_update.backend.issue.global_proxy.password_incomplete": "Global proxy password still needs more information before the security update can be completed.", - "security_update.backend.issue.global_proxy.password_missing": "Global proxy password is missing. Save it again before continuing.", - "security_update.backend.issue.global_proxy.title": "Global Proxy", - "security_update.backend.issue.system.message": "The current environment could not complete this security update. Try again later.", - "security_update.backend.issue.system.title": "Security update was not completed", - "security_update.intro.title": "Saved Configuration Security Update", - "security_update.intro.subtitle": "Complete a local configuration update before using the new secure storage.", - "security_update.intro.description": "To move saved connections, proxy settings, and related service configuration to the new secure storage, this update needs to run once locally. A local backup is created before the update. If it does not finish, the system keeps the currently usable configuration and you can continue later.", - "security_update.intro.action.details": "View Details", - "security_update.intro.action.later": "Remind Me Later", - "security_update.intro.action.start_now": "Update Now", - "security_update.progress.default_detail": "The currently usable configuration will be kept during the update. Please wait.", - "security_update.settings.title": "Security Update", - "security_update.settings.subtitle": "Manage the security update status and pending items for saved configurations.", - "security_update.settings.action.retry_check": "Check Again", - "security_update.settings.action.restart_update": "Restart Update", - "security_update.settings.action.start": "Start Update", - "security_update.settings.action.close": "Close", - "security_update.settings.current_status": "Current status: {{status}}", - "security_update.settings.scope_title": "Affected Scope", - "security_update.settings.summary.total": "Total", - "security_update.settings.summary.updated": "Updated", - "security_update.settings.summary.pending": "Pending", - "security_update.settings.summary.skipped": "Skipped", - "security_update.settings.summary.failed": "Failed", - "security_update.settings.pending_list": "Pending Items", - "security_update.settings.empty_pending": "No pending items", - "security_update.settings.item_status": "Status: {{status}}", - "security_update.settings.item_severity": "Level: {{severity}}", - "security_update.settings.item_default_message": "This item needs more attention before the security update can be completed.", - "security_update.settings.recent_result": "Latest Result", - "security_update.settings.backup_path": "Backup location: ", - "security_update.settings.last_error": "Latest error: ", - "security_update.status.pending.label": "Pending", - "security_update.status.pending.description": "A security update is available. You can start now or continue later.", - "security_update.status.postponed.label": "Pending", - "security_update.status.postponed.description": "This security update has been postponed. The currently usable configuration is still kept.", - "security_update.status.in_progress.label": "Updating", - "security_update.status.in_progress.description": "Checking and updating secure storage for saved configurations.", - "security_update.status.needs_attention.label": "Needs Attention", - "security_update.status.needs_attention.description": "The update is not complete yet. A few configurations need your attention.", - "security_update.status.completed.label": "Completed", - "security_update.status.completed.description": "Saved configurations have completed the security update.", - "security_update.status.rolled_back.label": "Rolled Back", - "security_update.status.rolled_back.description": "This update did not complete. The system kept the currently usable configuration.", - "security_update.status.not_detected.label": "Not Detected", - "security_update.status.not_detected.description": "No security update needs attention right now.", - "security_update.action.open_connection": "Open Connection", - "security_update.action.open_proxy_settings": "Proxy Settings", - "security_update.action.open_ai_settings": "AI Settings", - "security_update.action.retry_update": "Check Again", - "security_update.action.view_details": "View Details", - "security_update.item_status.pending": "Pending", - "security_update.item_status.updated": "Updated", - "security_update.item_status.needs_attention": "Needs Attention", - "security_update.item_status.skipped": "Skipped", - "security_update.item_status.failed": "Failed", - "security_update.severity.high": "High Risk", - "security_update.severity.medium": "Medium Risk", - "security_update.severity.low": "Low Risk", - "security_update.repair.warning.connection_not_found": "The matching connection was not found. Check the latest status first.", - "security_update.bootstrap.legacy.connection.message": "This connection is still saved in the current app's local configuration. After the security update completes, it will be moved to the new secure storage.", - "security_update.bootstrap.legacy.global_proxy.title": "Global Proxy", - "security_update.bootstrap.legacy.global_proxy.message": "Global proxy settings are still saved in the current app's local configuration. After the security update completes, they will be moved to the new secure storage.", - "security_update.error.capability_unavailable": "Security update capability is unavailable", - "app.settings.description": "Manage general settings such as language, proxy, theme, AI, and about.", - "app.settings.entry.about.description": "View version information, repository links, and update status.", - "app.settings.entry.about.title": "About GoNavi", - "app.settings.entry.ai.description": "Manage model providers, keys, and default behavior.", - "app.settings.entry.ai.title": "AI Settings", - "app.settings.entry.proxy.description": "Configure update checks, driver management, and public network access.", - "app.settings.entry.proxy.title": "Global Proxy", - "app.settings.entry.theme.description": "Switch light or dark theme and adjust interface appearance.", - "app.settings.entry.theme.title": "Theme and Appearance", - "app.settings.title": "Settings Center", - "app.shortcuts.action.focusSidebarSearch.description": "Focus the left connection tree search box", - "app.shortcuts.action.focusSidebarSearch.label": "Focus Sidebar Search", - "app.shortcuts.action.newConnection.description": "Create a new database, runtime, or other data source connection", - "app.shortcuts.action.newConnection.label": "New Data Source", - "app.shortcuts.action.newQueryTab.description": "Create a new SQL query tab", - "app.shortcuts.action.newQueryTab.label": "New Query Tab", - "app.shortcuts.action.openShortcutManager.description": "Open the shortcut settings panel", - "app.shortcuts.action.openShortcutManager.label": "Open Shortcut Manager", - "app.shortcuts.action.record": "Record", - "app.shortcuts.action.resetWindowZoom.description": "Manually trigger when the font becomes abnormally large after restoring from the Windows taskbar; toggles maximized state once so WebView2 recalculates font metrics", - "app.shortcuts.action.resetWindowZoom.label": "Reset Window Zoom", - "app.shortcuts.action.restore_defaults": "Restore Defaults", - "app.shortcuts.action.runQuery.description": "Run SQL in the current query page", - "app.shortcuts.action.runQuery.label": "Run SQL", - "app.shortcuts.action.saveQuery.description": "Save the current query tab; unnamed queries open the save dialog", - "app.shortcuts.action.saveQuery.label": "Save Query", - "app.shortcuts.action.selectCurrentStatement.description": "Select the SQL statement at the cursor in the query editor", - "app.shortcuts.action.selectCurrentStatement.label": "Select Current Statement", - "app.shortcuts.action.sendAIChatMessage.description": "Send the current message from the AI input; Shift+Enter always inserts a new line", - "app.shortcuts.action.sendAIChatMessage.label": "Send AI Chat", - "app.shortcuts.action.switchToNextTab.description": "Move right among open tabs", - "app.shortcuts.action.switchToNextTab.label": "Switch to Next Tab", - "app.shortcuts.action.switchToPreviousTab.description": "Move left among open tabs", - "app.shortcuts.action.switchToPreviousTab.label": "Switch to Previous Tab", - "app.shortcuts.action.toggleAIPanel.description": "Open the right AI data insights panel", - "app.shortcuts.action.toggleAIPanel.label": "Open AI Data Insights", - "app.shortcuts.action.toggleLogPanel.description": "Open or close the SQL execution log panel", - "app.shortcuts.action.toggleLogPanel.label": "Toggle Log Panel", - "app.shortcuts.action.toggleMacFullscreen.description": "Native fullscreen toggle in macOS native window control mode", - "app.shortcuts.action.toggleMacFullscreen.label": "Toggle Native Fullscreen", - "app.shortcuts.action.toggleTheme.description": "Switch between light and dark themes", - "app.shortcuts.action.toggleTheme.label": "Toggle Theme", - "app.shortcuts.action.diagnoseQuery.description": "Run EXPLAIN on the current SQL and visualize the execution plan with index suggestions", - "app.shortcuts.action.diagnoseQuery.label": "SQL Diagnose", - "app.shortcuts.action.showSlowQueries.description": "View slow SQL history for the current connection (default threshold 500ms)", - "app.shortcuts.action.showSlowQueries.label": "Slow SQL History", - "app.shortcuts.capture_hint": "Press the shortcut after clicking \"Record\". Press Esc to cancel recording. Global shortcuts should include a modifier; AI chat send only supports Enter-related combinations, and Shift+Enter keeps inserting a new line.", - "app.shortcuts.capture_waiting": "Press a shortcut...", - "app.shortcuts.context.datagrid": "Data Grid", - "app.shortcuts.context.global": "Browser", - "app.shortcuts.context.monaco": "Editor", - "app.shortcuts.description": "View, record, and enable common global shortcuts in one place.", - "app.shortcuts.message.ai_send_limit": "AI chat send shortcut only supports Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter; Shift+Enter keeps inserting a new line", - "app.shortcuts.message.conflict": "Conflicts with \"{{action}}\". Choose another shortcut.", - "app.shortcuts.message.modifier_required": "Shortcut must include at least one of Ctrl / Alt / Shift / Meta", - "app.shortcuts.message.reserved_conflict_info": "Overrides the editor default shortcut \"{{labels}}\"", - "app.shortcuts.message.reserved_conflict_warning": "Conflicts with {{contexts}} \"{{labels}}\" and may not work", - "app.shortcuts.message.restored_defaults": "Default shortcuts restored", - "app.shortcuts.reserved.browser_close_tab": "Browser Close Tab", - "app.shortcuts.reserved.browser_new_incognito_window": "Browser New Incognito Window", - "app.shortcuts.reserved.browser_new_tab": "Browser New Tab", - "app.shortcuts.reserved.browser_new_window": "Browser New Window", - "app.shortcuts.reserved.browser_print": "Browser Print", - "app.shortcuts.reserved.browser_save": "Browser Save", - "app.shortcuts.reserved.datagrid_copy": "Data Grid Copy", - "app.shortcuts.reserved.editor_add_selection": "Editor Add Selection", - "app.shortcuts.reserved.editor_delete_line": "Editor Delete Line", - "app.shortcuts.reserved.editor_find": "Editor Find", - "app.shortcuts.reserved.editor_find_global": "Editor Global Find", - "app.shortcuts.reserved.editor_goto_line": "Editor Go to Line", - "app.shortcuts.reserved.editor_insert_line_after": "Editor Insert Line Below", - "app.shortcuts.reserved.editor_insert_line_before": "Editor Insert Line Above", - "app.shortcuts.reserved.editor_quick_open": "Editor Quick Open", - "app.shortcuts.reserved.editor_rename_symbol": "Editor Rename Symbol", - "app.shortcuts.reserved.editor_replace": "Editor Replace", - "app.shortcuts.title": "Shortcut Manager", - "app.sidebar.ai_assistant": "AI Assistant", - "app.sidebar.resize_width": "Drag to resize width", - "app.sidebar.settings": "Settings", - "app.sidebar.sql_execution_log": "SQL Execution Log", - "app.sidebar.tools": "Tools", - "app.tools.entry.snippets.description": "Manage SQL snippets and prefix completion.", - "app.tools.entry.snippets.title": "Snippet Management", - "app.theme.action.restore_defaults": "Restore Defaults", - "app.theme.appearance.blur_hint": "* Only controls blur for in-app overlay layers", - "app.theme.appearance.blur_title": "Gaussian Blur (Blur)", - "app.theme.appearance.enable_transparency_blur": "Enable Transparency and Blur", - "app.theme.appearance.enable_transparency_blur_hint": "When disabled, the current thresholds are retained and restored directly when re-enabled.", - "app.theme.appearance.font_size_title": "Base Font Size (Font Size)", - "app.theme.appearance.opacity_title": "Background Opacity (Opacity)", - "app.theme.appearance.transparency_blur_title": "Transparency and Blur Effects", - "app.theme.appearance.ui_scale_hint": "* Recommended for small screens: 85%-95%", - "app.theme.appearance.ui_scale_title": "UI Scale (UI Scale)", - "app.theme.appearance.windows_acrylic_hint": "Windows uses the system Acrylic effect. Blur intensity is controlled by the system.", - "app.theme.appearance_settings_description": "Adjust scale, font size, transparency, and blur effects in one place.", - "app.theme.appearance_settings_title": "Appearance Settings", - "app.theme.data_table.column_width_hint": "Standard mode defaults to 200px; compact mode defaults to 140px. Manually adjusted column widths are preserved first.", - "app.theme.data_table.column_width_mode": "Data Table Column Width Mode", - "app.theme.data_table.column_width_mode.compact": "Compact 140px", - "app.theme.data_table.column_width_mode.standard": "Standard 200px", - "app.theme.data_table.title": "Data Table Display", - "app.theme.data_table.vertical_borders": "Show Data Table Vertical Separators", - "app.theme.data_table.vertical_borders_hint": "Only affects DataGrid on data table pages, not other table components.", - "app.theme.mac_window.restart_hint": "* Custom top-right buttons are hidden; restart the app if the system window style does not refresh immediately", - "app.theme.mac_window.title": "macOS Window Controls", - "app.theme.mac_window.use_native_controls": "Use macOS Native Window Controls", - "app.theme.mac_window.use_native_controls_hint": "Shows the red/yellow/green buttons in the top-left and prioritizes native macOS fullscreen behavior.", - "app.theme.mode.dark.description": "Better for low-light environments with a calmer visual weight.", - "app.theme.mode.dark.label": "Dark Theme", - "app.theme.mode.light.description": "Better for bright environments with lighter visual hierarchy.", - "app.theme.mode.light.label": "Light Theme", - "app.theme.mode_title": "Theme Mode", - "app.theme.nav.appearance.description": "Scale, font, and transparency", - "app.theme.nav.appearance.title": "Appearance Parameters", - "app.theme.nav.theme.description": "Light and dark switching", - "app.theme.nav.theme.title": "Theme Mode", - "app.theme.navigation_title": "Settings Navigation", - "app.theme.startup_window.fullscreen": "Fullscreen on startup", - "app.theme.startup_window.fullscreen_windows": "Fullscreen on startup (Windows treats this as maximize)", - "app.theme.startup_window.hint": "* Takes effect on next startup", - "app.theme.startup_window.title": "Startup Window", - "app.theme.startup_window.windows_hint": "* On Windows this option is treated as \"maximize on startup\" and takes effect on next startup", - "app.theme.theme_settings_description": "Switch light and dark themes while keeping the overall visual style consistent.", - "app.theme.theme_settings_title": "Theme Settings", - "app.theme.ui_version.badge.new": "NEW", - "app.theme.ui_version.beta_warning": "The new UI is still in Beta, so some screens may look different from the old UI. You can switch back at any time if needed.", - "app.theme.ui_version.description": "Switch the overall appearance while keeping all features available. The new version uses a more compact information hierarchy and a more modern visual language.", - "app.theme.ui_version.legacy.badge": "Default", - "app.theme.ui_version.legacy.description": "The current stable interface with all features fully available.", - "app.theme.ui_version.legacy.label": "Old UI", - "app.theme.ui_version.platform_hint": "Windows, macOS, and Linux can all switch versions. Changes take effect immediately, and some modals use the new style the next time they open.", - "app.theme.ui_version.sidebar_search.command": "New Command Search", - "app.theme.ui_version.sidebar_search.filter": "Legacy Sidebar Filter", - "app.theme.ui_version.sidebar_search.hint": "New Command Search is better for jumping to connections, tables, and actions. Enable sync in the panel to keep filtering the left tree; Legacy Sidebar Filter shows the input directly and keeps the filter text.", - "app.theme.ui_version.sidebar_search.title": "New Left Sidebar Search Mode", - "app.theme.tab_display.title": "Tab Label Display", - "app.theme.tab_display.description": "Customize the display order for connection name, object type, object name, database, Schema, and Host/IP. In double-line mode, context can be placed on the secondary row.", - "app.theme.tab_display.layout.single": "Single line", - "app.theme.tab_display.layout.double": "Double line", - "app.theme.tab_display.badge.current": "Current", - "app.theme.tab_display.row.primary": "Primary row", - "app.theme.tab_display.row.secondary": "Secondary row", - "app.theme.tab_display.action.move_up": "Move up", - "app.theme.tab_display.action.move_down": "Move down", - "app.theme.tab_display.preview.prefix": "Current preview: ", - "app.theme.tab_display.preview.default_label": "Default label", - "app.theme.tab_display.preview.secondary": ", secondary row {{labels}}", - "app.theme.tab_display.preview.focused": "; selected {{label}}", - "app.theme.tab_display.element.connection.label": "Connection", - "app.theme.tab_display.element.connection.description": "Connection alias or environment name, for example DEV", - "app.theme.tab_display.element.kind.label": "Object type", - "app.theme.tab_display.element.kind.description": "Type labels such as SQL / TABLE / VIEW", - "app.theme.tab_display.element.object.label": "Object name", - "app.theme.tab_display.element.object.description": "Core names such as table, query, or resource names", - "app.theme.tab_display.element.database.label": "Database", - "app.theme.tab_display.element.database.description": "Current DB / catalog name", - "app.theme.tab_display.element.schema.label": "Schema", - "app.theme.tab_display.element.schema.description": "schema / owner prefix", - "app.theme.tab_display.element.host.label": "Host/IP", - "app.theme.tab_display.element.host.description": "Connection target address summary", - "app.theme.ui_version.title": "Interface Version", - "app.theme.ui_version.v2.badge": "Beta", - "app.theme.ui_version.v2.description": "A redesigned compact interface with stronger AI entry points and table overview.", - "app.theme.ui_version.v2.label": "New UI", - "app.tools.description": "Manage connection configuration, sync, drivers, and shortcuts.", - "app.tools.group.config.description": "Import/export, data root, and saved configuration maintenance.", - "app.tools.group.config.title": "Connections and Config", - "app.tools.group.workflow.description": "Compare structure, inspect differences, and start sync tasks.", - "app.tools.group.workflow.title": "Data Workflows", - "app.tools.group.workspace.description": "Drivers, code snippets, and global shortcuts.", - "app.tools.group.workspace.title": "Editor and Drivers", - "app.tools.entry.data_root.description": "View, switch, or migrate the local data storage location.", - "app.tools.entry.data_root.title": "Data Directory", - "app.tools.entry.drivers.description": "Install, update, or remove database drivers.", - "app.tools.entry.drivers.title": "Driver Manager", - "app.tools.entry.export.description": "Export current connections and visible configuration fields.", - "app.tools.entry.export.title": "Export Connection Configuration", - "app.tools.entry.import.description": "Restore the connection list from a local file.", - "app.tools.entry.import.title": "Import Connection Configuration", - "app.tools.entry.security_update.description": "View the security update status of saved configurations.", - "app.tools.entry.security_update.status_description": "Current status: {{status}}", - "app.tools.entry.security_update.title": "Security Update", - "app.window_zoom.message.fullscreen_exit_first": "Window zoom cannot be reset in fullscreen. Exit fullscreen first.", - "app.window_zoom.message.reset_failed": "Failed to reset window zoom", - "app.window_zoom.message.reset_success": "Window zoom reset", - "app.window_zoom.message.reset_success_fallback": "Window zoom reset (fallback)", - "app.window_zoom.message.windows_only": "This feature is only available on Windows", - "app.tools.entry.shortcuts.description": "View and adjust global shortcut bindings.", - "app.tools.entry.shortcuts.title": "Shortcut Manager", - "app.tools.entry.schema_compare.description": "Compare structural differences between source and target tables, preview only without execution.", - "app.tools.entry.schema_compare.title": "Schema Compare", - "app.tools.entry.data_compare.description": "Analyze inserted, updated, deleted, and unchanged rows by primary key.", - "app.tools.entry.data_compare.title": "Data Compare", - "app.tools.entry.sync.description": "Open the cross-source sync workflow.", - "app.tools.entry.sync.title": "Data Sync", - "app.tools.title": "Tools Center", - "app.connection_package.action.start_export": "Start Export", - "app.connection_package.action.start_import": "Start Import", - "app.connection_package.dialog.export_title": "Export Connections", - "app.connection_package.dialog.file_password_placeholder": "Enter file protection password (optional)", - "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "Passwords are encrypted. For public transfer, set a file protection password.", - "app.connection_package.dialog.help.exclude_passwords": "Only connection settings will be exported. Passwords are not included.", - "app.connection_package.dialog.help.share_file_password_separately": "Share the password through a separate channel. Do not send it with the file.", - "app.connection_package.dialog.import_password_title": "Enter Import Password", - "app.connection_package.dialog.option.include_passwords": "Export connection passwords", - "app.connection_package.dialog.option.use_file_password": "Set file protection password", - "app.connection_package.dialog.restore_password_placeholder": "Enter recovery package password", - "app.connection_package.error.export_capability_unavailable": "Export failed: the current backend does not provide the new export capability", - "app.connection_package.error.file_password_required": "File protection password cannot be empty", - "app.connection_package.error.import_capability_unavailable": "Import failed: the current backend does not provide the new import capability", - "app.connection_package.error.import_no_connections": "Import failed: the backend did not return a connection list", - "app.connection_package.error.missing_import_payload": "Import failed: recovery package content to import was not found", - "app.connection_package.error.refresh_failed_no_connections": "Import succeeded, but refreshing the connection list failed: the backend did not return a connection list", - "app.connection_package.error.restore_password_required": "Recovery package password cannot be empty", - "app.connection_package.message.export_failed": "Export failed", - "app.connection_package.message.export_succeeded": "Export succeeded", - "app.connection_package.message.import_failed": "Import failed", - "app.connection_package.message.import_failed_with_error": "Import failed: {{error}}", - "app.connection_package.message.imported_connections": "Imported {{count}} connections", - "app.connection_package.message.imported_with_missing_passwords": "Imported {{count}} connections. Some connections do not include passwords; edit those connections and enter passwords before saving.", - "app.connection.message.editable_load_failed": "Failed to load the saved connection details. The masked configuration will be opened instead.", - "app.connection.message.editable_load_failed_with_detail": "Failed to load the saved connection details: {{detail}}. The masked configuration will be opened instead.", - "app.connection_package.message.no_connections_to_export": "No connections to export", - "app.connection_package.message.unsupported_file_format": "File format error: only GoNavi recovery packages, legacy JSON connection arrays, or MySQL Workbench XML are supported", - "app.browser_mock.export_sql_unsupported": "Browser mock does not support SQL file export", - "app.browser_mock.import_connection_package_unsupported": "Browser mock does not support recovery package import; only legacy JSON connection arrays are supported", - "app.browser_mock.export_connection_package_unsupported": "Browser mock does not support recovery package export", - "app.browser_mock.mcp_http.not_running": "GoNavi MCP HTTP service is not running", - "app.browser_mock.mcp_http.started": "GoNavi MCP HTTP service has started", - "app.browser_mock.mcp_http.stopped": "GoNavi MCP HTTP service has stopped", - "app.browser_mock.mcp_server.command_required": "MCP command cannot be empty", - "app.browser_mock.mcp_server.test_success": "MCP mock test succeeded", - "app.browser_mock.mcp_tool.unavailable": "Browser mock is not connected to a real MCP service", - "app.browser_mock.mcp_client.claude_code.installed": "Claude Code user-level MCP configuration has been written. Restart Claude CLI, then GoNavi will appear under User MCPs in /mcp.", - "app.browser_mock.mcp_client.claude_code.not_detected": "No Claude Code user-level GoNavi MCP configuration was detected", - "app.browser_mock.mcp_client.codex.installed": "Codex user-level MCP configuration has been written. Restart Codex CLI or the desktop app to see GoNavi.", - "app.browser_mock.mcp_client.codex.path_mismatch": "A GoNavi MCP record was detected in Codex, but it does not match the current GoNavi installation path. Updating is recommended.", - "app.browser_mock.provider.test_failed_detail": "Connection test failed: {{detail}}", - "app.browser_mock.provider.test_success": "Endpoint connectivity test succeeded", - "app.update.action.hide_to_background": "Hide to Background", - "app.update.action.install_update": "Install Update", - "app.update.action.open_install_directory": "Open Install Directory", - "app.update.backend.error.check_failed": "Check for updates failed: {{detail}}", - "app.update.backend.error.check_http_status": "Check for updates failed: HTTP {{status}}", - "app.update.backend.error.download_failed": "Update download failed: {{detail}}", - "app.update.backend.error.install_unsupported": "Update installation is not supported on this platform: {{platform}}", - "app.update.backend.error.latest_version_unparseable": "Unable to parse the latest version", - "app.update.backend.error.online_update_unsupported": "Online update is not supported on this platform: {{platform}}", - "app.update.backend.error.package_download_http_failed": "Failed to download update package: HTTP {{status}}", - "app.update.backend.error.package_file_busy": "Update download failed because the file is busy: {{detail}}", - "app.update.backend.error.release_version_unparseable": "Unable to parse release version", - "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS does not include the current platform update package", - "app.update.backend.error.sha256sums_download_failed": "Failed to download SHA256SUMS: HTTP {{status}}", - "app.update.backend.error.sha256sums_missing": "Release did not provide SHA256SUMS", - "app.update.backend.error.update_package_not_found": "Update package not found: {{name}}", - "app.update.backend.message.app_directory_unavailable": "Cannot access app directory: {{path}}", - "app.update.backend.message.app_directory_unresolved_download": "Cannot determine the current app directory, so the update cannot be downloaded", - "app.update.backend.message.check_first": "Check for updates first", - "app.update.backend.message.checksum_failed": "Update package checksum failed. Try again.", - "app.update.backend.message.checksum_missing": "Update package checksum is missing (SHA256SUMS)", - "app.update.backend.message.create_workspace_failed": "Cannot create update workspace directory in the app directory: {{path}}", - "app.update.backend.message.download_in_progress": "Update package is downloading. Try again later.", - "app.update.backend.message.install_launch_failed": "Failed to start update installer: {{detail}}", - "app.update.backend.message.install_launch_failed_with_log": "Failed to start update installer: {{detail}} (update log: {{path}})", - "app.update.backend.message.install_started": "Update installation has started", - "app.update.backend.message.install_started_with_log": "Update installation has started. Log path: {{path}}", - "app.update.backend.message.latest": "Already on the latest version", - "app.update.backend.message.no_downloaded_package": "No downloaded update package was found", - "app.update.backend.message.no_update_package": "No update package is available", - "app.update.backend.message.open_directory_failed": "Failed to open update directory: {{detail}}", - "app.update.backend.message.open_directory_unsupported": "Opening directories is not supported on this platform: {{platform}}", - "app.update.backend.message.opened_install_directory": "Opened install directory: {{path}}", - "app.update.backend.message.package_already_downloaded": "Update package is already downloaded", - "app.update.backend.message.package_directory_unavailable": "Update directory does not exist or is not accessible", - "app.update.backend.message.package_directory_unresolved": "Unable to resolve update directory", - "app.update.backend.message.package_downloaded": "Update package downloaded", - "app.update.backend.message.package_path_empty": "Update package path is empty", - "app.update.backend.message.update_found": "New version found: {{version}}", - "app.update.download_title": "Download Update", - "app.update.download_title_with_version": "Download Update {{version}}", - "app.update.message.check_failed": "Check for updates failed: {{error}}", - "app.update.message.download_completed": "Update download completed", - "app.update.message.download_completed_with_path": "Update download completed. Package path: {{path}}", - "app.update.message.download_failed": "Update download failed: {{error}}", - "app.update.message.install_failed": "Update installation failed: {{error}}", - "app.update.message.open_install_directory_failed": "Failed to open install directory: {{error}}", - "app.update.message.opened_install_directory": "Install directory opened. Please finish replacement manually.", - "app.update.message.package_ready": "Update package is ready ({{version}})", - "app.update.message.package_ready_with_path": "Update package is ready ({{version}}), path: {{path}}", - "app.update.message.update_found": "New version found: {{version}}", - "app.update.status.available_downloaded": "New version {{version}} found (downloaded; click \"Download Progress\" to install)", - "app.update.status.available_not_downloaded": "New version {{version}} found (not downloaded)", - "app.update.status.check_failed": "Check for updates failed: {{error}}", - "app.update.status.checking": "Checking for updates...", - "app.update.status.latest": "Already on the latest version ({{version}})", - "app.update.status.not_checked": "Not checked", - "connection.delete": "Delete Connection", - "connection.edit": "Edit Connection", - "connection.new": "New Connection", - "connection.test": "Test Connection", - "connection.unnamed": "Unnamed Connection", - "database.unnamed": "Unnamed Database", - "database.label": "Database", - "connection.copy_suffix": " - Copy", - "query.format": "Format SQL", - "query.new": "New Query", - "query.run": "Run", - "query.save": "Save Query", - "saved_query.default_name": "Query {{index}}", - "query.stop": "Stop", - "message_publish_modal.title": "Test message publish", - "message_publish_modal.title_with_connection": "Test message publish · {{connectionName}}", - "message_publish_modal.action.send": "Send", - "message_publish_modal.error.build_command_failed": "Failed to build the publish command", - "message_publish_modal.error.send_failed_detail": "Send failed: {{detail}}", - "message_publish_modal.error.unknown_error": "Unknown error", - "message_publish_modal.field.exchange.label": "Exchange (optional)", - "message_publish_modal.field.exchange.extra": "Leave empty to use the default exchange. If you enter a custom exchange, make sure the target Queue has a binding.", - "message_publish_modal.field.exchange.placeholder": "Example: events.topic", - "message_publish_modal.field.routing_key.label": "Routing Key (optional)", - "message_publish_modal.field.routing_key.extra": "Leave empty to use the current Queue name by default.", - "message_publish_modal.field.routing_key.placeholder": "Example: orders.queue", - "message_publish_modal.field.qos.extra": "0 is at most once, 1 is at least once, and 2 is exactly once.", - "message_publish_modal.field.retain.label": "Retain message", - "message_publish_modal.field.tag.label": "Tag (optional)", - "message_publish_modal.field.tag.extra": "Leave empty to skip filtering or writing a Tag.", - "message_publish_modal.field.delay_level.label": "Delay Level (optional)", - "message_publish_modal.field.delay_level.extra": "RocketMQ uses fixed delay levels. 0 sends immediately.", - "message_publish_modal.field.body_mode.label": "Message body type", - "message_publish_modal.field.body.label": "Message body", - "message_publish_modal.field.body.required": "Enter the message body", - "message_publish_modal.field.body.extra": "JSON mode requires valid JSON. Text mode sends the content as-is.", - "message_publish_modal.field.body.placeholder": "Enter the message body", - "message_publish_modal.field.headers.label": "Headers (optional)", - "message_publish_modal.field.headers.extra": "Must be a JSON object, for example {{example}}.", - "message_publish_modal.field.properties.label": "Properties (optional)", - "message_publish_modal.field.properties.extra": "Must be a JSON object, for example {{example}}.", - "message_publish_modal.option.no_delay": "No delay", - "message_publish_modal.option.text": "Text", - "message_publish_modal.footer.success_prefix": "A successful send returns", - "message_publish_modal.footer.success_suffix": " to confirm whether this test message was submitted.", - "message_publish.field.body": "Message body", - "message_publish.field.message_key": "Message Key", - "message_publish.error.destination_required": "Enter a target Topic / Queue", - "message_publish.error.required_field": "{{field}} is required", - "message_publish.error.invalid_json_detail": "{{field}} is not valid JSON: {{detail}}", - "message_publish.error.json_object_required": "{{field}} must be a JSON object", - "message_publish.error.mqtt_wildcard_topic": "MQTT publish Topic cannot contain + or # wildcards", - "message_publish.error.unsupported_type": "The current data source does not support test message publishing: {{type}}", - "message_publish.presentation.rabbitmq.destination_placeholder": "Example: orders.queue", - "message_publish.presentation.rabbitmq.destination_required": "Enter a Queue", - "message_publish.presentation.rabbitmq.alert": "This form builds a RabbitMQ publish JSON command and sends a test message through the Management API.", - "message_publish.presentation.rabbitmq.success_hint": "When Exchange is empty, the default exchange is used and the Queue name is used as the routing key.", - "message_publish.presentation.rocketmq.destination_placeholder": "Example: orders.events", - "message_publish.presentation.topic_required": "Enter a Topic", - "message_publish.presentation.rocketmq.alert": "This form builds a RocketMQ publish JSON command and sends a test message through the NameServer/Broker.", - "message_publish.presentation.rocketmq.success_hint": "Tag, Keys, Delay Level, and Properties are written into the RocketMQ message attributes.", - "message_publish.presentation.keys_label": "Message Keys (optional)", - "message_publish.presentation.rocketmq.key_placeholder": "Enter multiple Key values separated by commas", - "message_publish.presentation.rocketmq.tag_placeholder": "Example: TagA", - "message_publish.presentation.mqtt.destination_placeholder": "Example: devices/device-001/telemetry", - "message_publish.presentation.mqtt.alert": "This form builds an MQTT publish JSON command and sends a test message directly through the broker.", - "message_publish.presentation.mqtt.success_hint": "QoS and retain can be set separately. Empty fields use the defaults from the current connection.", - "message_publish.presentation.kafka.destination_placeholder": "Example: orders.events", - "message_publish.presentation.kafka.alert": "This form builds a Kafka publish JSON command and calls the backend to send a test message.", - "message_publish.presentation.kafka.success_hint": "Headers are sent as Kafka Record Headers.", - "message_publish.presentation.key_label": "Message Key (optional)", - "message_publish.presentation.kafka.key_placeholder": "Optional. In JSON mode, enter one valid JSON line.", - "connection_modal.action.browse": "Browse...", - "connection_modal.action.disable": "Disable", - "connection_modal.action.discover_members": "Discover members", - "connection_modal.action.enable_and_prefer": "Enable and prefer", - "connection_modal.badge.current_editing": "Editing", - "connection_modal.badge.preferred": "Preferred", - "connection_modal.field.additional_hosts": "Additional hosts", - "connection_modal.field.additional_srv_hosts_optional": "Additional SRV hosts (optional)", - "connection_modal.field.auth_source": "Authentication database (authSource)", - "connection_modal.field.cluster_additional_hosts": "Cluster additional hosts", - "connection_modal.field.connection_timeout_seconds": "Connection timeout (seconds)", - "connection_modal.field.connection_timeout_seconds_ascii": "Connection timeout (seconds)", - "connection_modal.field.default_database_optional": "Default database (optional)", - "connection_modal.field.display_databases_optional": "Display databases (optional)", - "connection_modal.field.file_path_absolute": "File path (absolute path)", - "connection_modal.field.host_address": "Host address", - "connection_modal.field.password_optional": "Password (optional)", - "connection_modal.field.port": "Port", - "connection_modal.field.port_plain": "Port", - "connection_modal.field.private_key_path_optional": "Private key path (optional)", - "connection_modal.field.proxy_host": "Proxy host", - "connection_modal.field.proxy_password_optional": "Proxy password (optional)", - "connection_modal.field.proxy_type": "Proxy type", - "connection_modal.field.proxy_username_optional": "Proxy username (optional)", - "connection_modal.field.replica_hosts": "Replica host list", - "connection_modal.field.replica_password_optional": "Replica password (optional)", - "connection_modal.field.replica_set_optional": "Replica set (optional)", - "connection_modal.field.replica_set_password_optional": "Replica set password (optional)", - "connection_modal.field.replica_set_username_optional": "Replica set username (optional)", - "connection_modal.field.replica_username_optional": "Replica username (optional)", - "connection_modal.field.save_password": "Save password", - "connection_modal.field.service_name": "Service name", - "connection_modal.field.defaultDatabase.placeholder": "For example: appdb", - "connection_modal.field.serviceName.placeholder": "For example: ORCLPDB1", - "connection_modal.field.clickHouseProtocol.auto": "Auto", - "connection_modal.field.oceanBaseProtocol.label": "OceanBase protocol", - "connection_modal.field.oceanBaseProtocol.help.primary": "Choose MySQL for MySQL tenants and Oracle for Oracle tenants. GoNavi selects automatically by port: OB MySQL wire ports use OBClient capability injection (the same path as Navicat), while OBProxy Oracle listener ports use standard TNS.", - "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "If an Oracle tenant connection reports \"Error 1235\" or an OBClient handshake failure, use {{attributes}} in the \"Connection parameters\" field to override the OBClient capability injected by GoNavi by default.", - "connection_modal.field.ssh_host": "SSH host", - "connection_modal.field.ssh_password": "SSH password", - "connection_modal.field.ssh_user": "SSH user", - "connection_modal.field.ssl_cert_path": "SSL certificate path", - "connection_modal.field.ssl_key_path": "SSL key path", - "connection_modal.field.tunnel_host": "HTTP Tunnel host", - "connection_modal.field.tunnel_password_optional": "HTTP Tunnel password (optional)", - "connection_modal.field.tunnel_username_optional": "HTTP Tunnel username (optional)", - "connection_modal.field.username": "Username", - "connection_modal.field.username.optional_placeholder": "Leave empty when authentication is disabled", - "connection_modal.help.additional_hosts": "Optional MongoDB members, separated by comma, semicolon, or space.", - "connection_modal.help.additional_srv_hosts": "Optional additional SRV hosts for MongoDB discovery.", - "connection_modal.help.connection_timeout": "Applies to connection tests and metadata loading. Range: 1-300 seconds.", - "connection_modal.help.custom_driver": "Supported: mysql, postgres, sqlite, oracle, dm, kingbase. Aliases: postgresql/pgx, dm8, kingbase8/kingbasees/kingbasev8. Extending drivers through JDBC Jar is not currently supported.", - "connection_modal.help.default_database": "Leave empty to use the server default database.", - "connection_modal.help.oracle_service_name": "Oracle service name, for example ORCLPDB1.", - "connection_modal.help.private_key_path": "Use a private key for SSH authentication. Leave password empty if the key is not encrypted.", - "connection_modal.help.redis_cluster_hosts": "Additional Redis cluster nodes, separated by comma, semicolon, or space.", - "connection_modal.help.replica_hosts": "Replica host list in host:port format, separated by comma, semicolon, or space.", - "connection_modal.help.select_after_test": "Run a connection test first to load selectable databases.", - "connection_modal.jvm.access_mode_description": "Choose which JVM access modes this connection can use and which one is preferred.", - "connection_modal.jvm.access_mode_title": "Access modes", - "connection_modal.jvm.agent_api_key_optional": "Agent API key (optional)", - "connection_modal.jvm.agent_description": "Connect through a GoNavi Agent when direct network access is restricted.", - "connection_modal.jvm.agent_help": "Base URL of the GoNavi Agent service.", - "connection_modal.jvm.agent_url": "Agent URL", - "connection_modal.jvm.diagnostic.agent_bridge_description": "Use the GoNavi Agent Bridge diagnostic endpoint.", - "connection_modal.jvm.diagnostic.arthas_tunnel_description": "Use Arthas Tunnel to reach the target JVM.", - "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Base URL of the Arthas Tunnel server.", - "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", - "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", - "connection_modal.jvm.diagnostic.arthas_tunnel_url": "Arthas Tunnel URL", - "connection_modal.jvm.diagnostic.bridge_help": "Base URL of the GoNavi diagnostic bridge.", - "connection_modal.jvm.diagnostic.bridge_url": "Diagnostic bridge URL", - "connection_modal.jvm.diagnostic.mutating_commands": "Mutating commands", - "connection_modal.jvm.diagnostic.mutating_commands_description": "Allow commands that may change runtime state. Use only in controlled environments.", - "connection_modal.jvm.diagnostic.observe_commands": "Observe commands", - "connection_modal.jvm.diagnostic.observe_commands_description": "Allow read-only commands such as dashboard, thread, and JVM info.", - "connection_modal.jvm.diagnostic.target_agent_id": "Target Agent ID", - "connection_modal.jvm.diagnostic.target_agent_id_help": "Agent ID registered in Arthas Tunnel.", - "connection_modal.jvm.diagnostic.target_id": "Target ID", - "connection_modal.jvm.diagnostic.target_id_help": "Target identifier understood by the diagnostic bridge. Leave empty if the bridge selects the default target.", - "connection_modal.jvm.diagnostic.trace_commands": "Trace commands", - "connection_modal.jvm.diagnostic.trace_commands_description": "Allow tracing and watch commands that add runtime overhead.", - "connection_modal.jvm.diagnostic_api_key_optional": "Diagnostic API key (optional)", - "connection_modal.jvm.diagnostic_description": "Enable optional diagnostic commands for JVM troubleshooting.", - "connection_modal.jvm.diagnostic_disabled_hint": "Diagnostic enhancement is disabled. Enable it only when you need runtime troubleshooting.", - "connection_modal.jvm.diagnostic_timeout_seconds": "Diagnostic timeout (seconds)", - "connection_modal.jvm.diagnostic_title": "Diagnostic enhancement", - "connection_modal.jvm.diagnostic_transport": "Diagnostic transport", - "connection_modal.jvm.endpoint_api_key_optional": "Endpoint API key (optional)", - "connection_modal.jvm.endpoint_description": "Connect to a service-provided Endpoint instead of direct JMX.", - "connection_modal.jvm.endpoint_help": "Base URL of the JVM management Endpoint.", - "connection_modal.jvm.endpoint_url": "Endpoint URL", - "connection_modal.jvm.environment": "Environment", - "connection_modal.jvm.environment.dev": "Development", - "connection_modal.jvm.environment.dev_description": "Lower risk test environment.", - "connection_modal.jvm.environment.prod": "Production", - "connection_modal.jvm.environment.prod_description": "Production environment; read-only first is recommended.", - "connection_modal.jvm.environment.uat": "UAT", - "connection_modal.jvm.environment.uat_description": "Pre-production validation environment.", - "connection_modal.jvm.jmx_description": "Connect through JMX using host, port, and optional credentials.", - "connection_modal.jvm.jmx_host_override_optional": "JMX host override (optional)", - "connection_modal.jvm.jmx_password_optional": "JMX password (optional)", - "connection_modal.jvm.jmx_port": "JMX port", - "connection_modal.jvm.jmx_username_optional": "JMX username (optional)", - "connection_modal.jvm.mode.agent_description": "Go through GoNavi Agent for environments behind firewalls or NAT.", - "connection_modal.jvm.mode.endpoint_description": "Use an HTTP Endpoint exposed by the target service.", - "connection_modal.jvm.mode.jmx_description": "Use standard JMX remote access.", - "connection_modal.jvm.preferred_mode_hint": "Current preferred mode: {{mode}}", - "connection_modal.jvm.read_only_first": "Prefer read-only operations", - "connection_modal.jvm.security_policy": "Security policy", - "connection_modal.message.srv_with_ssh_dns_warning": "SRV with SSH Tunnel may depend on local DNS resolution. If resolution fails, use standard hosts.", - "connection_modal.messageQueue.kafka.defaultTopic.label": "Default Topic (optional)", - "connection_modal.messageQueue.kafka.defaultTopic.help": "Specify a Topic in SQL when this is empty. After it is set, SHOW, CONSUME, or SELECT can preview data directly.", - "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "For example: orders.events", - "connection_modal.messageQueue.rocketmq.defaultTopic.label": "Default Topic (optional)", - "connection_modal.messageQueue.rocketmq.defaultTopic.help": "Specify a Topic in SQL when this is empty. Connection parameters can still add groupId, namespace, tag, pullBatchSize, and startOffset.", - "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "For example: orders.events", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "Default Topic / Filter (optional)", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "Specify a Topic in SQL when this is empty. After it is set, SHOW, CONSUME, or SELECT can preview data directly. Supports /, +, and #.", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "For example: devices/+/telemetry", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "Default Virtual Host (optional)", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "When empty, / is used by default. After it is set, the query editor uses the current vhost as the Queue browsing and test publishing context.", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "For example: / or orders-vhost", - "connection_modal.messageQueue.topology.cluster.label": "Cluster mode", - "connection_modal.messageQueue.kafka.topology.single.label": "Single Broker", - "connection_modal.messageQueue.kafka.topology.single.description": "Configure one bootstrap broker for local or simple environments.", - "connection_modal.messageQueue.kafka.topology.cluster.description": "Configure multiple bootstrap brokers to improve discovery and failover success.", - "connection_modal.messageQueue.rocketmq.topology.single.label": "Single NameServer", - "connection_modal.messageQueue.rocketmq.topology.single.description": "Configure one NameServer for local or simple environments.", - "connection_modal.messageQueue.rocketmq.topology.cluster.description": "Configure multiple NameServers to improve route discovery and failover success.", - "connection_modal.messageQueue.mqtt.topology.single.label": "Single Broker", - "connection_modal.messageQueue.mqtt.topology.single.description": "Configure one broker for local or simple environments.", - "connection_modal.messageQueue.mqtt.topology.cluster.description": "Configure multiple brokers to improve connection discovery and failover success.", - "connection_modal.messageQueue.kafka.extraBrokers.label": "Additional Broker addresses", - "connection_modal.messageQueue.kafka.extraBrokers.help": "Enter multiple broker addresses in host:port format and press Enter to confirm.", - "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "For example: 10.10.0.12:9092, 10.10.0.13:9092", - "connection_modal.messageQueue.rocketmq.extraNameServers.label": "Additional NameServer addresses", - "connection_modal.messageQueue.rocketmq.extraNameServers.help": "Enter multiple NameServer addresses in host:port format and press Enter to confirm.", - "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "For example: 10.10.0.12:9876, 10.10.0.13:9876", - "connection_modal.messageQueue.mqtt.extraBrokers.label": "Additional Broker addresses", - "connection_modal.messageQueue.mqtt.extraBrokers.help": "Enter multiple broker addresses in host:port format and press Enter to confirm.", - "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "For example: 10.10.0.12:1883, 10.10.0.13:1883", - "connection_modal.redis.topology.single.label": "Standalone mode", - "connection_modal.redis.topology.single.description": "Connect to one Redis node.", - "connection_modal.redis.topology.cluster.label": "Cluster mode", - "connection_modal.redis.topology.cluster.description": "Redis Cluster with multiple seed nodes.", - "connection_modal.redis.topology.sentinel.label": "Sentinel mode", - "connection_modal.redis.topology.sentinel.description": "Discover the primary node through Sentinel for primary-replica high availability.", - "connection_modal.redis.hosts.sentinel.label": "Additional Sentinel node addresses", - "connection_modal.redis.hosts.sentinel.help": "The host above is used as the first Sentinel. Enter other Sentinel nodes here in host:port format.", - "connection_modal.redis.hosts.sentinel.placeholder": "For example: 10.10.0.12:26379, 10.10.0.13:26379", - "connection_modal.redis.hosts.cluster.label": "Additional cluster node addresses", - "connection_modal.redis.hosts.cluster.help": "The host above is used as the primary node. Enter other seed nodes here in host:port format.", - "connection_modal.redis.hosts.cluster.placeholder": "For example: 10.10.0.12:6379, 10.10.0.13:6379", - "connection_modal.redis.sentinel.master.label": "Sentinel master name", - "connection_modal.redis.sentinel.master.help": "Enter the monitor name from the Sentinel configuration, for example mymaster.", - "connection_modal.redis.sentinel.master.required": "Enter the Sentinel master name", - "connection_modal.redis.sentinel.master.placeholder": "For example: mymaster", - "connection_modal.redis.credentials.primary.label": "Password (optional)", - "connection_modal.redis.credentials.primary.placeholder.empty": "Redis password if requirepass is set", - "connection_modal.redis.credentials.primary.placeholder.retained": "Saved Redis password", - "connection_modal.redis.credentials.sentinelUser.label": "Sentinel username (optional)", - "connection_modal.redis.credentials.sentinelUser.placeholder": "Leave empty when Sentinel does not use an ACL username", - "connection_modal.redis.credentials.sentinelPassword.label": "Sentinel password (optional)", - "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Sentinel authentication password. Leave empty to send none.", - "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "Saved Sentinel password", - "connection_modal.redis.credentials.sentinelPassword.clear": "Clear saved Sentinel password", - "connection_modal.redis.credentials.sentinelPassword.description": "A Sentinel password is currently saved. Leave this empty to keep it, or enter a new value to replace it.", - "connection_modal.redis.databaseScope.label": "Databases to show (empty shows all)", - "connection_modal.redis.databaseScope.help": "Selectable after the connection test succeeds", - "connection_modal.redis.databaseScope.placeholder": "Select databases to show", - "connection_modal.mongodb.auth.auto": "Auto", - "connection_modal.mongodb.auth.auto_description": "Let the driver choose the authentication mechanism.", - "connection_modal.mongodb.auth.aws_iam_description": "Use AWS IAM authentication. Keep AWS IAM credentials in the runtime environment.", - "connection_modal.mongodb.auth.none": "No auth", - "connection_modal.mongodb.auth.none_description": "Connect without MongoDB authentication.", - "connection_modal.mongodb.auth.scram_sha1_description": "Use SCRAM-SHA-1 authentication.", - "connection_modal.mongodb.auth.scram_sha256_description": "Use SCRAM-SHA-256 authentication.", - "connection_modal.mongodb.auth_mechanism": "Authentication mechanism", - "connection_modal.mongodb.topology.single.label": "Standalone mode", - "connection_modal.mongodb.topology.replica.label": "Replica set / multi-node", - "connection_modal.mongodb.discovery.standard.label": "Standard address", - "connection_modal.mongodb.discovery.standard.description": "Connect directly with host:port or use a replica set node list.", - "connection_modal.mongodb.discovery.srv.label": "SRV address", - "connection_modal.mongodb.discovery.srv.description": "Use mongodb+srv and let DNS discover target nodes.", - "connection_modal.mongodb.discovery.current": "Current", - "connection_modal.mongodb.discovery.srv_ssh_warning": "When SRV and SSH tunnel are both enabled, local DNS resolution may be required.", - "connection_modal.mongodb.replica.hosts.srv.label": "Additional SRV hosts (optional)", - "connection_modal.mongodb.replica.hosts.srv.help": "Enter multiple candidate host names in host format. Leave empty to use only the host above.", - "connection_modal.mongodb.replica.hosts.srv.placeholder": "For example: cluster-a.example.com, cluster-b.example.com", - "connection_modal.mongodb.replica.hosts.standard.label": "Additional node addresses", - "connection_modal.mongodb.replica.hosts.standard.help": "Enter multiple node addresses in host:port format and press Enter to confirm.", - "connection_modal.mongodb.replica.hosts.standard.placeholder": "For example: 10.10.0.12:27017, 10.10.0.13:27017", - "connection_modal.mongodb.replica.set.label": "Replica set name (optional)", - "connection_modal.mongodb.replica.set.placeholder": "For example: rs0", - "connection_modal.mongodb.replica.user.label": "Replica set username (optional)", - "connection_modal.mongodb.replica.user.placeholder": "Leave empty to reuse the primary username", - "connection_modal.mongodb.replica.password.label": "Replica set password (optional)", - "connection_modal.mongodb.replica.password.placeholder.empty": "Leave empty to reuse the primary password", - "connection_modal.mongodb.replica.password.placeholder.retained": "Saved replica set password", - "connection_modal.mongodb.replica.password.clear": "Clear saved replica set password", - "connection_modal.mongodb.replica.password.description": "A replica set password is currently saved. Leave this empty to keep it, or enter a new value to replace it.", - "connection_modal.mongodb.members.role": "Role", - "connection_modal.mongodb.members.health": "Health", - "connection_modal.mongodb.members.health.ok": "Healthy", - "connection_modal.mongodb.members.health.error": "Unhealthy", - "connection_modal.mongodb.policy.auth_source.label": "Auth database (authSource)", - "connection_modal.mongodb.policy.auth_source.placeholder": "Defaults to database or admin", - "connection_modal.mongodb.read_preference": "readPreference", - "connection_modal.mongodb.read_preference.nearest": "Route reads to the nearest member.", - "connection_modal.mongodb.read_preference.primary": "Read only from the primary.", - "connection_modal.mongodb.read_preference.primary_preferred": "Prefer primary, fall back to secondaries.", - "connection_modal.mongodb.read_preference.secondary": "Read only from secondaries.", - "connection_modal.mongodb.read_preference.secondary_preferred": "Prefer secondaries, fall back to primary.", - "connection_modal.mongodb.srv_address": "SRV address", - "connection_modal.mongodb.srv_address_description": "Use a MongoDB SRV record to discover hosts.", - "connection_modal.mongodb.standard_address": "Standard address", - "connection_modal.mongodb.standard_address_description": "Use host and port plus optional member list.", - "connection_modal.network.http_tunnel": "HTTP Tunnel", - "connection_modal.network.http_tunnel_description": "Forward database traffic through an HTTP Tunnel.", - "connection_modal.network.http_tunnel_disabled_hint": "Enable HTTP Tunnel to configure tunnel host, port, and credentials.", - "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel cannot be used together with SSH Tunnel or proxy.", - "connection_modal.network.http_tunnel_panel_description": "Configure an HTTP Tunnel gateway for this connection.", - "connection_modal.network.proxy": "Proxy", - "connection_modal.network.proxy_disabled_hint": "Enable proxy to route this connection through SOCKS5 or HTTP CONNECT.", - "connection_modal.network.proxy_panel_description": "Configure per-connection proxy settings.", - "connection_modal.network.proxy_type.http_description": "Use HTTP CONNECT proxying.", - "connection_modal.network.proxy_type.socks5_description": "Use SOCKS5 proxying.", - "connection_modal.network.ssh_disabled_hint": "Enable SSH Tunnel to connect through a bastion host.", - "connection_modal.network.ssh_panel_description": "Configure SSH Tunnel host, credentials, and optional private key.", - "connection_modal.network.ssh_tunnel": "SSH Tunnel", - "connection_modal.network.ssh_tunnel_description": "Connect through an SSH Tunnel before reaching the database.", - "connection_modal.network.ssl_description": "Encrypt the database connection with SSL/TLS.", - "connection_modal.network.ssl_tls": "SSL/TLS", - "connection_modal.network.ssl_disabled_hint": "Enable SSL/TLS to configure certificate policy.", - "connection_modal.network.ssl_mode": "SSL mode", - "connection_modal.network.ssl_mode.preferred_description": "Try SSL first and fall back if the server does not require it.", - "connection_modal.network.ssl_mode.required_description": "Require SSL and fail if encrypted connection cannot be established.", - "connection_modal.network.ssl_mode.skip_verify_description": "Use SSL but skip certificate verification. Use only for testing or self-signed certificates.", - "connection_modal.network.ssl_panel_description": "Configure SSL/TLS policy for this connection.", - "connection_modal.placeholder.absolute_path": "/absolute/path/to/file", - "connection_modal.placeholder.agent_api_key": "Optional Agent API key", - "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", - "connection_modal.placeholder.custom_dsn_example": "Example: driver-specific DSN", - "connection_modal.placeholder.default_database_or_admin": "default database or admin", - "connection_modal.placeholder.diagnostic_api_key": "Optional diagnostic API key", - "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", - "connection_modal.placeholder.diagnostic_target_id": "Target ID", - "connection_modal.placeholder.empty_without_auth": "Leave empty for no authentication", - "connection_modal.placeholder.endpoint_api_key": "Optional Endpoint API key", - "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", - "connection_modal.placeholder.example_appdb": "appdb", - "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", - "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", - "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", - "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", - "connection_modal.placeholder.example_rs0": "rs0", - "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", - "connection_modal.placeholder.no_auth": "No authentication", - "connection_modal.placeholder.proxy_host": "127.0.0.1", - "connection_modal.placeholder.redis_password": "Redis password", - "connection_modal.placeholder.select_databases": "Select databases to display", - "connection_modal.placeholder.select_redis_databases": "Select Redis databases to display", - "connection_modal.placeholder.ssh_host": "bastion.example.com", - "connection_modal.placeholder.ssl_cert_path": "/absolute/path/client.crt", - "connection_modal.placeholder.ssl_key_path": "/absolute/path/client.key", - "connection_modal.placeholder.tunnel_host": "tunnel.example.com", - "connection_modal.placeholder.use_primary_host": "Use primary host", - "connection_modal.placeholder.use_primary_password": "Use primary password", - "connection_modal.placeholder.use_primary_password_short": "Use primary password", - "connection_modal.placeholder.use_primary_port": "Use primary port", - "connection_modal.placeholder.use_primary_username": "Use primary username", - "connection_modal.placeholder.use_primary_username_short": "Use primary username", - "connection_modal.secret.clear_saved_mongo_replica_password": "Clear saved MongoDB replica password", - "connection_modal.secret.clear_saved_password": "Clear saved password", - "connection_modal.secret.clear_saved_proxy_password": "Clear saved proxy password", - "connection_modal.secret.clear_saved_replica_password": "Clear saved replica password", - "connection_modal.secret.clear_saved_ssh_password": "Clear saved SSH password", - "connection_modal.secret.clear_saved_tunnel_password": "Clear saved HTTP Tunnel password", - "connection_modal.secret.error.saved_connection_missing": "The saved secret for the current connection was not found. Re-enter the password, save, and try again.", - "connection_modal.secret.error.store_unavailable": "Secure secret storage is currently unavailable. Check the system keychain or credential manager, then try again.", - "connection_modal.secret.saved_mongo_replica_password": "Saved MongoDB replica password", - "connection_modal.secret.saved_mongo_replica_password_description": "A MongoDB replica password is already saved in secure storage. Leave this field empty to keep it.", - "connection_modal.secret.saved_password": "Saved password", - "connection_modal.secret.saved_placeholder": "•••••• (leave empty to keep using {{label}})", - "connection_modal.secret.saved_primary_password_description": "A primary connection password is already saved in secure storage. Leave this field empty to keep it.", - "connection_modal.secret.saved_proxy_password": "Saved proxy password", - "connection_modal.secret.saved_proxy_password_description": "A proxy password is already saved in secure storage. Leave this field empty to keep it.", - "connection_modal.secret.saved_redis_password": "Saved Redis password", - "connection_modal.secret.saved_redis_password_description": "A Redis password is already saved in secure storage. Leave this field empty to keep it.", - "connection_modal.secret.saved_replica_password": "Saved replica password", - "connection_modal.secret.saved_replica_password_description": "A replica password is already saved in secure storage. Leave this field empty to keep it.", - "connection_modal.secret.saved_ssh_password": "Saved SSH password", - "connection_modal.secret.saved_ssh_password_description": "An SSH password is already saved in secure storage. Leave this field empty to keep it.", - "connection_modal.secret.saved_tunnel_password": "Saved HTTP Tunnel password", - "connection_modal.secret.saved_tunnel_password_description": "An HTTP Tunnel password is already saved in secure storage. Leave this field empty to keep it.", - "connection_modal.section.advanced_connection": "Advanced connection", - "connection_modal.section.config_sections": "Configuration sections", - "connection_modal.status.disabled": "Disabled", - "connection_modal.status.enabled": "Enabled", - "connection_modal.status.healthy": "Healthy", - "connection_modal.status.unhealthy": "Unhealthy", - "connection_modal.switch.off": "Off", - "connection_modal.switch.on": "On", - "connection_modal.table.health": "Health", - "connection_modal.table.role": "Role", - "connection_modal.topology.cluster": "Cluster", - "connection_modal.topology.mongodb_replica": "Replica set", - "connection_modal.topology.mongodb_replica_description": "Connect to a MongoDB replica set and optionally discover members.", - "connection_modal.topology.mongodb_single_description": "Connect to one MongoDB host.", - "connection_modal.topology.mysql_replica_description": "Use a primary connection plus optional replica hosts.", - "connection_modal.topology.mysql_single_description": "Connect to a single MySQL-compatible node.", - "connection_modal.topology.primary_replica": "Primary/replica", - "connection_modal.topology.redis_cluster_description": "Connect to a Redis Cluster and list additional nodes.", - "connection_modal.topology.redis_single_description": "Connect to a single Redis node.", - "connection_modal.topology.single": "Single node", - "connection_modal.validation.address_or_path_required": "Enter a host address or file path", - "connection_modal.validation.agent_url_required": "Enter the Agent URL", - "connection_modal.validation.arthas_tunnel_url_required": "Enter the Arthas Tunnel URL", - "connection_modal.validation.dameng_ssl_cert_path_required": "Enter the Dameng SSL certificate path", - "connection_modal.validation.dameng_ssl_key_path_required": "Enter the Dameng SSL key path", - "connection_modal.validation.diagnostic_bridge_url_required": "Enter the diagnostic bridge URL", - "connection_modal.validation.diagnostic_target_required": "Enter the diagnostic target", - "connection_modal.validation.diagnostic_timeout_range_1_300": "Diagnostic timeout must be between 1 and 300 seconds", - "connection_modal.validation.endpoint_url_required": "Enter the Endpoint URL", - "connection_modal.validation.jvm_access_mode_required": "Select at least one JVM access mode", - "connection_modal.validation.jvm_preferred_mode_required": "Select a preferred JVM access mode", - "connection_modal.validation.oracle_service_required": "Enter the Oracle service name", - "connection_modal.validation.port_required": "Enter the port", - "connection_modal.validation.proxy_host_required": "Enter the proxy host", - "connection_modal.validation.proxy_port_required": "Enter the proxy port", - "connection_modal.validation.ssh_host_required": "Enter the SSH host", - "connection_modal.validation.ssh_port_required": "Enter the SSH port", - "connection_modal.validation.ssh_user_required": "Enter the SSH user", - "connection_modal.validation.timeout_range_1_300": "Timeout must be between 1 and 300 seconds", - "connection_modal.validation.tunnel_host_required": "Enter the HTTP Tunnel host", - "connection_modal.validation.tunnel_port_required": "Enter the HTTP Tunnel port", - "connection_modal.validation.username_required": "Enter the username", - "sidebar.batch_databases": "Batch database operations", - "sidebar.batch_tables": "Batch table operations", - "connection_modal.ssl_hint.mysql_like": "Choose the SSL/TLS mode required by the database security policy.", - "connection_modal.ssl_hint.dameng": "Choose the SSL/TLS mode required by the database security policy.", - "connection_modal.ssl_hint.sqlserver": "Choose the SSL/TLS mode required by the database security policy.", - "connection_modal.ssl_hint.mongodb": "Choose the SSL/TLS mode required by the database security policy.", - "connection_modal.ssl_hint.default": "Choose the SSL/TLS mode required by the database security policy.", - "connection_modal.secret.new_value_replaces_saved": "New value will replace the saved secret.", - "connection_modal.badge.current": "Current", - "connection_modal.message.driver_not_enabled_with_name": "{{name}} driver is not installed or enabled. Install or enable it in Driver Manager first.", - "connection_modal.driver.current": "Current", - "connection_modal.message.driver_unavailable_title": "{{name}} driver unavailable", - "connection_modal.action.open_driver_manager": "Open Driver Manager", - "connection_modal.action.cancel": "Cancel", - "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", - "connection_modal.message.uri_generated": "URI generated", - "connection_modal.message.uri_generate_failed": "Failed to generate URI", - "connection_modal.message.uri_required": "Enter a URI first", - "connection_modal.message.uri_type_mismatch": "URI type does not match the selected data source", - "connection_modal.message.uri_parsed": "URI parsed into the form", - "connection_modal.message.uri_parse_failed": "Failed to parse URI", - "connection_modal.message.uri_empty_copy": "No URI to copy", - "connection_modal.message.uri_copied": "URI copied", - "connection_modal.message.copy_failed": "Copy failed", - "connection_modal.message.select_ssh_key_failed": "Failed to select SSH private key: {{error}}", - "connection_modal.error.unknown": "Unknown error", - "connection_modal.message.select_database_file_failed": "Failed to select database file: {{error}}", - "connection_modal.message.save_backend_unavailable": "Save is unavailable because the backend API is not ready", - "connection_modal.message.save_updated_disconnected": "Configuration saved (not connected)", - "connection_modal.message.save_created_disconnected": "Configuration saved (not connected)", - "connection_modal.message.save_security_refresh_failed": "Configuration saved, but security metadata could not be refreshed", - "connection_modal.message.save_failed": "Failed to save connection", - "connection_modal.message.test_requires_new_password": "Enter the new connection password before testing.", - "connection_modal.secret.blocking.redis_sentinel": "Enter a new Sentinel password before testing, or cancel clearing the saved Sentinel password", - "connection_modal.test.redis_database_list_timeout": "Connected, but loading the Redis database list timed out (>{{seconds}} seconds)", - "connection_modal.test.redis_database_list_failure": "Connected, but failed to load the Redis database list: {{detail}}", - "connection_modal.message.test_requires_new_ssh_password": "Enter the new SSH password before testing.", - "connection_modal.message.test_requires_new_proxy_password": "Enter the new proxy password before testing.", - "connection_modal.message.test_requires_new_tunnel_password": "Enter the new HTTP Tunnel password before testing.", - "connection_modal.message.test_requires_new_replica_password": "Enter the new replica password before testing.", - "connection_modal.message.test_requires_new_mongo_replica_password": "Enter the new MongoDB Replica Set password before testing.", - "connection_modal.message.test_requires_new_mongodb_password": "Enter the new MongoDB password before testing.", - "connection_modal.message.driver_not_enabled": "Driver is not installed or enabled", - "connection_modal.message.connection_params_incomplete": "Connection parameters are incomplete", - "connection_modal.message.test_timeout": "Operation timed out after {{seconds}} seconds", - "connection_modal.message.database_list_timeout": "Operation timed out after {{seconds}} seconds", - "connection_modal.message.no_visible_schema": "No visible schema was returned", - "connection_modal.message.no_visible_databases": "No visible databases were returned", - "connection_modal.message.database_list_failed": "Failed to load database list: {{error}}", - "connection_modal.message.connection_rejected": "Connection rejected", - "connection_modal.message.required_fields_before_test": "Fill in the required fields before testing", - "connection_modal.message.test_failed_detail": "Test failed: {{detail}}", - "connection_modal.error.unknown_exception": "Unknown error", - "connection_modal.message.member_discovery_failed": "Failed to discover MongoDB members", - "connection_modal.message.member_discovery_success": "Discovered {{count}} members", - "connection_modal.message.unsupported_jvm_modes": "The selected JVM access mode is not supported", - "connection_modal.message.unsupported_jvm_diagnostic_transport": "The selected JVM diagnostic transport is not supported", - "connection_modal.message.dameng_ssl_cert_required": "Dameng SSL requires certificate and private key paths", - "connection_modal.message.http_tunnel_host_required": "Enter the HTTP Tunnel host", - "connection_modal.message.http_tunnel_port_invalid": "HTTP Tunnel port is invalid", - "connection_modal.message.unsupported_jvm_modes_current": "This connection contains unsupported JVM access modes", - "connection_modal.group.relational": "Relational databases", - "connection_modal.group.chinese_databases": "Chinese databases", - "connection_modal.step1.group.nosql": "NoSQL databases", - "connection_modal.step1.group.relational": "Relational databases", - "connection_modal.step1.group.domestic": "Domestic databases", - "connection_modal.step1.group.timeseries": "Time-series databases", - "connection_modal.step1.group.other": "Other", - "connection_modal.group.time_series": "Time-series databases", - "connection_modal.group.other": "Other", - "connection_modal.db_type.custom": "Custom", - "connection_modal.layout.mysql_compatible": "MySQL-compatible connection", - "connection_modal.layout.mongodb": "MongoDB connection", - "connection_modal.layout.redis": "Redis connection", - "connection_modal.layout.postgres_compatible": "PostgreSQL-compatible connection", - "connection_modal.layout.oracle": "Oracle connection", - "connection_modal.layout.file": "File database connection", - "connection_modal.layout.custom": "Custom driver connection", - "connection_modal.layout.jvm": "JVM runtime connection", - "connection_modal.layout.generic_sql": "Generic SQL connection", - "connection_modal.db_type_hint.custom": "Connect with a custom driver and DSN.", - "connection_modal.db_type_hint.redis": "Connect to Redis standalone or Redis Cluster.", - "connection_modal.db_type_hint.mongodb": "Connect to MongoDB standalone, Replica Set, or SRV addresses.", - "connection_modal.db_type_hint.file": "Select a local SQLite or DuckDB database file.", - "connection_modal.db_type_hint.standard": "Enter host, port, authentication details, and an optional database.", - "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", - "connection_modal.step1.hint.custom": "Custom driver and DSN", - "connection_modal.step1.hint.redis": "Single node / cluster", - "connection_modal.step1.hint.mongodb": "Single node / replica set", - "connection_modal.step1.hint.oceanBase": "MySQL / Oracle tenant", - "connection_modal.step1.hint.file": "Local file connection", - "connection_modal.step1.hint.standard": "Standard connection configuration", - "connection_modal.step.select_source": "Select data source", - "connection_modal.step.select_source_description": "Choose the connection type to create.", - "connection_modal.message.driver_not_enabled_with_name_short": "{{name}} driver is not installed or enabled. Open Driver Manager first.", - "connection_modal.section.basic.title": "Basic information", - "connection_modal.section.basic.description": "Name the connection and enter the target, driver, and authentication details.", - "connection_modal.field.connection_name": "Connection name", - "connection_modal.placeholder.jvm_name": "JVM connection name", - "connection_modal.placeholder.connection_name": "Connection name", - "connection_modal.field.uri": "URI", - "connection_modal.help.uri": "Paste a full connection URI or generate one from the current form.", - "connection_modal.action.generate_uri": "Generate URI", - "connection_modal.action.parse_uri": "Parse URI", - "connection_modal.action.copy_uri": "Copy URI", - "connection_modal.secret.clear_saved_uri": "Clear saved URI", - "connection_modal.secret.saved_uri_description": "A connection URI is already stored securely. Leave this empty to keep using it.", - "connection_modal.field.driver_name": "Driver name", - "connection_modal.field.driver.placeholder": "For example: mysql, postgres", - "connection_modal.validation.driver_name_required": "This field is required", - "connection_modal.placeholder.driver_name": "Driver name", - "connection_modal.field.dsn": "DSN", - "connection_modal.field.dsn.placeholder": "For example: user:pass@tcp(localhost:3306)/dbname?charset=utf8", - "connection_modal.validation.custom_dsn_required": "Enter the connection string", - "connection_modal.validation.custom_dsn_required_when_clearing_saved": "Enter a new connection string, or cancel clearing the saved DSN", - "connection_modal.secret.clear_saved_dsn": "Clear saved DSN", - "connection_modal.secret.saved_dsn_description": "A DSN is already stored securely. Leave this empty to keep using it.", - "connection_modal.message.unsupported_jvm_modes_detected": "Unsupported JVM access modes detected", - "connection_modal.jvm.target_title": "JVM target", - "connection_modal.jvm.target_description": "Configure the host, port, and access method for the JVM management endpoint.", - "connection_modal.field.host": "Host", - "connection_modal.validation.jvm_host_required": "This field is required", - "connection_modal.field.primary_port": "Primary port", - "connection_modal.validation.jvm_port_required": "This field is required", - "connection_modal.section.network.title": "Network and security", - "connection_modal.section.network.description": "Configure SSL/TLS, SSH Tunnel, proxy, and HTTP Tunnel options.", - "connection_modal.message.current_driver_not_enabled": "The current driver is not installed or enabled", - "connection_modal.section.basic.jvm_description": "Configure the JVM target, access modes, and credentials.", - "connection_modal.section.basic.sql_description": "Configure the target, driver, credentials, and database scope.", - "connection_modal.section.network.nav_description": "Configure network and security options for this connection.", - "connection_modal.section.appearance.title": "Appearance", - "connection_modal.section.appearance.description": "Set the icon and color shown for this connection in the sidebar.", - "connection_modal.appearance.icon": "Icon", - "connection_modal.appearance.current_icon": "Current icon: {{icon}}", - "connection_modal.db_icon_label.custom": "Custom", - "connection_modal.appearance.color": "Color", - "connection_modal.appearance.custom_color": "Custom color", - "connection_modal.appearance.preview": "Preview", - "connection_modal.placeholder.connection_name_fallback": "Connection name", - "connection_modal.action.reset_default": "Reset default", - "connection_modal.message.connection_failed": "Connection failed", - "connection_modal.action.previous_step": "Previous", - "connection_modal.message.connection_success": "Connection succeeded", - "connection_modal.action.view_reason": "View reason", - "connection_modal.action.test": "Test connection", - "connection_modal.action.save": "Save", - "connection_modal.title.select_type": "Select data source type", - "connection_modal.title.select_type_description": "Choose one of the supported data source types.", - "connection_modal.title.edit": "Edit connection", - "connection_modal.title.edit_description": "Edit the {{type}} connection configuration.", - "connection_modal.title.create": "New {{type}} connection", - "connection_modal.title.create_description": "Enter and save the connection configuration.", - "connection_modal.test_error.title": "Connection test failure details", - "connection_modal.test_error.description": "View the full error returned by the backend.", - "connection_modal.action.close": "Close", - "connection_modal.test_error.empty": "No error details", - "sidebar.message.duplicate_backend_unavailable": "Duplicate connection is not available in this build.", - "sidebar.message.duplicate_empty_result": "The duplicated connection was not returned.", - "sidebar.message.duplicated_connection": "Duplicated {{name}}.", - "sidebar.message.duplicate_failed": "Failed to duplicate connection.", - "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "JVM provider probe failed: {{error}}. Diagnostic enhancement entry remains available.", - "sidebar.message.jvm_provider_probe_failed": "Failed to probe JVM providers: {{error}}", - "sidebar.error.unknown": "Unknown error", - "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "JVM provider probe exception: {{error}}. Diagnostic enhancement entry remains available.", - "sidebar.message.jvm_provider_probe_exception": "JVM provider probe failed: {{error}}", - "sidebar.message.connection_failed": "Connection failed: {{error}}", - "sidebar.message.load_jvm_resources_failed": "Failed to load JVM resources: {{error}}", - "sidebar.message.load_tables_failed": "Failed to load objects: {{error}}", - "sidebar.message.table_pinned": "Table pinned", - "sidebar.message.table_unpinned": "Table unpinned", - "sidebar.message.table_structure_copied": "Table structure copied.", - "sidebar.message.exporting_table_format": "Exporting {{table}} as {{format}}...", - "sidebar.message.export_success": "Export succeeded.", - "sidebar.message.export_failed": "Export failed: {{error}}", - "sidebar.message.backing_up_database": "Backing up {{database}}...", - "sidebar.message.exporting_database_schema": "Exporting schema for {{database}}...", - "sidebar.message.exporting_database_backup": "Backing up {{database}} (schema and data)...", - "sidebar.message.schema_export_target_missing": "Target schema was not found, so export cannot continue.", - "sidebar.message.exporting_schema_structure": "Exporting structure for schema {{schema}}...", - "sidebar.message.exporting_schema_backup": "Backing up schema {{schema}} (structure and data)...", - "sidebar.message.export_tables_same_database_required": "Select tables from the same database.", - "sidebar.message.backing_up_selected_tables": "Backing up {{count}} selected tables...", - "sidebar.message.exporting_selected_table_schema": "Exporting schema for {{count}} selected tables...", - "sidebar.message.load_database_list_failed": "Failed to load databases: {{error}}", - "sidebar.message.load_table_list_failed": "Failed to load tables: {{error}}", - "sidebar.message.locate_external_sql_file_not_found": "SQL file was not found in external SQL directories: {{path}}", - "sidebar.message.locate_connection_not_found_for_object": "The connection for the current object was not found", - "sidebar.message.locate_connection_not_in_tree": "Current connection was not found in the left tree", - "sidebar.message.locate_database_loading": "Database node is still loading: {{database}}. Try again later", - "sidebar.message.locate_database_not_found": "Database was not found in the left tree: {{database}}", - "sidebar.message.locate_object_loading": "Database objects for {{object}} are still loading in {{database}}. Try again later", - "sidebar.message.locate_object_not_found": "{{object}} was not found in the left tree: {{name}}. Refresh the database node and try again", - "sidebar.message.select_object_required": "Select at least one object.", - "sidebar.message.backing_up_selected_objects": "Backing up {{count}} selected objects...", - "sidebar.message.exporting_selected_object_data": "Exporting {{format}} data for {{count}} selected objects...", - "sidebar.message.exporting_selected_object_schema": "Exporting schema for {{count}} selected objects...", - "sidebar.message.export_success_skipped_views": "Export succeeded. {{count}} views were skipped for data export.", - "sidebar.modal.confirm_clear_selected_tables.title": "Confirm clear selected tables", - "sidebar.modal.confirm_clear_selected_tables.content": "Clear data in selected objects under {{connection}} / {{database}}? This cannot be undone.", - "sidebar.action.continue": "Continue", - "sidebar.action.cancel": "Cancel", - "sidebar.action.delete": "Delete", - "sidebar.message.clearing_selected_tables": "Clearing {{count}} selected tables...", - "sidebar.message.clear_success": "Clear completed.", - "sidebar.message.clear_failed": "Clear failed: {{error}}", - "sidebar.message.select_database_required": "Select at least one database.", - "sidebar.message.database_export_success": "Exported {{database}}.", - "sidebar.message.database_export_failed": "Failed to export {{database}}: {{error}}", - "sidebar.message.connection_config_not_found": "Connection configuration was not found.", - "sidebar.sql_file_exec.title": "Run external SQL file", - "sidebar.message.read_file_failed": "Failed to read file: {{error}}", - "sidebar.message.select_connection_or_database_first": "Select a connection or database first.", - "sidebar.message.schema_create_unsupported": "Schema creation is not supported for this database.", - "sidebar.message.schema_target_missing": "Select a database for schema creation.", - "sidebar.message.schema_created": "Schema created.", - "sidebar.message.operation_create_failed": "Create failed: {{error}}", - "sidebar.sql_file.default_name": "SQL file", - "sidebar.message.sql_file_context_incomplete": "SQL file context is incomplete.", - "sidebar.message.sql_file_path_incomplete": "SQL file path is incomplete, so it cannot be opened.", - "sidebar.message.select_host_before_large_sql_file": "Select a Host before running a large SQL file.", - "sidebar.message.read_sql_file_failed": "Failed to read SQL file: {{error}}", - "sidebar.message.external_sql_file_parent_missing": "Could not find the directory for creating an SQL file.", - "sidebar.message.external_sql_file_rename_target_missing": "Could not find the SQL file to rename.", - "sidebar.message.external_sql_file_delete_target_missing": "Could not find the SQL file to delete.", - "sidebar.message.external_sql_directory_parent_missing": "Could not find the location for creating a directory.", - "sidebar.message.external_sql_directory_rename_target_missing": "Could not find the directory to rename.", - "sidebar.message.external_sql_directory_delete_target_missing": "Could not find the SQL directory to delete.", - "sidebar.message.sql_file_name_required": "SQL file name is required.", - "sidebar.message.sql_directory_name_required": "Directory name is required.", - "sidebar.message.create_sql_file_failed": "Failed to create SQL file: {{error}}", - "sidebar.message.sql_file_created": "SQL file created.", - "sidebar.message.rename_sql_file_failed": "Failed to rename SQL file: {{error}}", - "sidebar.message.sql_file_renamed": "SQL file renamed.", - "sidebar.message.delete_sql_file_failed": "Failed to delete SQL file: {{error}}", - "sidebar.message.sql_file_deleted": "SQL file deleted.", - "sidebar.message.create_sql_directory_failed": "Failed to create directory: {{error}}", - "sidebar.message.sql_directory_created": "Directory created.", - "sidebar.message.rename_sql_directory_failed": "Failed to rename directory: {{error}}", - "sidebar.message.external_sql_directory_rename_sync_failed": "Directory was renamed, but the external SQL directory list could not be synchronized. Add the directory again.", - "sidebar.message.sql_directory_renamed": "Directory renamed.", - "sidebar.message.delete_sql_directory_failed": "Failed to delete SQL directory: {{error}}", - "sidebar.message.sql_directory_deleted": "SQL directory deleted.", - "sidebar.message.add_sql_directory_database_required": "Select a database before adding an SQL directory.", - "sidebar.message.select_sql_directory_failed": "Failed to select SQL directory: {{error}}", - "sidebar.message.sql_directory_path_invalid": "SQL directory path is invalid.", - "sidebar.sql_directory.default_name": "SQL directory", - "sidebar.message.external_sql_directory_added": "SQL directory added.", - "sidebar.message.external_sql_directory_not_found": "SQL directory was not found.", - "sidebar.message.external_sql_directory_removed": "SQL directory removed.", - "sidebar.message.external_sql_directory_context_missing": "SQL directory context is missing.", - "sidebar.message.external_sql_directory_refreshed": "SQL directory refreshed.", - "sidebar.message.database_created": "Database created.", - "sidebar.message.create_failed": "Create failed: {{error}}", - "sidebar.modal.confirm_delete_database.title": "Delete database", - "sidebar.modal.confirm_delete_database.content": "Delete {{name}}? This cannot be undone.", - "sidebar.modal.confirm_delete_sql_file.title": "Delete SQL file", - "sidebar.modal.confirm_delete_sql_file.content": "Delete \"{{name}}\"? This will delete the local file from disk and cannot be undone.", - "sidebar.modal.confirm_delete_sql_directory.title": "Delete SQL directory", - "sidebar.modal.confirm_delete_sql_directory.content": "Delete \"{{name}}\"? This will delete the local directory from disk, and only empty directories can be deleted.", - "sidebar.modal.confirm_delete_table.title": "Delete table", - "sidebar.modal.confirm_delete_table.content": "Delete {{name}}? This cannot be undone.", - "sidebar.modal.confirm_table_data_action.title": "Confirm {{action}}", - "sidebar.modal.confirm_table_data_action.content": "{{action}} {{table}}? This cannot be undone.", - "sidebar.modal.confirm_delete_view.title": "Delete view", - "sidebar.modal.confirm_delete_view.content": "Delete {{name}}? This cannot be undone.", - "sidebar.modal.confirm_delete_routine.title": "Delete {{type}}", - "sidebar.modal.confirm_delete_routine.content": "Delete {{type}} {{name}}? This cannot be undone.", - "sidebar.search.scope.smart": "Smart", - "sidebar.search.scope_title": "Search scope", - "sidebar.search.scope_description": "Choose where the sidebar search should match.", - "sidebar.badge.recommended": "Recommended", - "sidebar.search.scope.smart_description": "Automatically narrows search based on the selected node.", - "sidebar.search.manual_scope": "Manual scope", - "sidebar.search.multi_select_supported": "Multiple scopes supported", - "sidebar.search.scope_hint": "Smart mode searches names, hosts, databases, and objects according to context.", - "sidebar.modal.confirm_delete.title": "Confirm delete", - "sidebar.modal.confirm_delete_tag.content": "Delete group \"{{name}}\"? This will not delete the connections inside it.", - "sidebar.menu.edit_connection": "Edit connection", - "sidebar.menu.delete_connection": "Delete connection", - "sidebar.modal.confirm_delete_connection.content": "Delete {{name}}?", - "sidebar.message.delete_connection_backend_unavailable": "Delete connection is not available in this build.", - "sidebar.message.connection_deleted": "Connection deleted.", - "sidebar.message.delete_connection_failed": "Failed to delete connection.", - "sidebar.modal.confirm_delete_saved_query.content": "Delete saved query \"{{name}}\"? This action cannot be undone.", - "sidebar.search.placeholder": "Search...", - "sidebar.punctuation.list_separator": ", ", - "sidebar.command_search.label": "Search tables, connections, actions", - "sidebar.command_search.placeholder": "Search tables, connections, actions... or ask AI", - "sidebar.command_search.sync_to_filter_tooltip": "Sync input to the left-side filter", - "sidebar.command_search.sync_to_filter_aria": "Sync to left-side filter", - "sidebar.command_search.reset_filter": "Reset sidebar filter", - "sidebar.command_search.no_synced_filter": "No synced sidebar filter", - "sidebar.command_search.no_filter_content": "No filter text", - "sidebar.command_search.object_kind.all": "All", - "sidebar.command_search.object_kind.tables": "Tables", - "sidebar.command_search.object_kind.views": "Views", - "sidebar.command_search.object_kind.routines": "Routines", - "sidebar.command_search.object_kind.events": "Events", - "sidebar.command_search.object_kind.filter_aria": "Object filters", - "sidebar.command_search.scope.smart": "Smart", - "sidebar.command_search.scope.object": "Table objects", - "sidebar.command_search.scope.database": "Database", - "sidebar.command_search.scope.host": "Host", - "sidebar.command_search.scope.tag": "Tags", - "sidebar.command_search.scope.summary_smart": "Smart", - "sidebar.command_search.scope.title": "Search scope", - "sidebar.command_search.scope.description": "\"Smart\" automatically matches the most likely results; manual mode lets you combine filter dimensions.", - "sidebar.command_search.scope.recommended": "Recommended", - "sidebar.command_search.scope.smart_help": "Best for everyday search; automatically covers common dimensions such as names, databases, Host, and tags.", - "sidebar.command_search.scope.manual_title": "Manual scope", - "sidebar.command_search.scope.multi_select": "Multiple selections supported", - "sidebar.command_search.scope.manual_help": "Smart is mutually exclusive with other options. If you know you need objects, databases, Host, or tags, switch to manual scope to reduce noisy results.", - "sidebar.command_search.scope.tooltip": "Search scope: {{scope}}", - "sidebar.command_search.scope.compact_smart": "Smart", - "sidebar.search.scope_tooltip": "Current search scope: {{scope}}", - "sidebar.search.scope.smart_short": "Smart", - "sidebar.rail.object_actions": "Object area quick actions", - "sidebar.rail.system_actions": "System actions", - "sidebar.action.new_group": "New group", - "sidebar.action.batch_tables": "Batch tables", - "sidebar.action.batch_databases": "Batch databases", - "sidebar.action.locate_current_table": "Locate current open table", - "sidebar.action.pin_table": "Pin table", - "sidebar.action.unpin_table": "Unpin table", - "sidebar.status.pinned": "Pinned", - "sidebar.v2_table_menu.meta.rows_empty": "— rows", - "sidebar.v2_table_menu.meta.rows": "{{count}} rows", - "sidebar.v2_table_menu.meta.idle": "Click refresh to load stats", - "sidebar.v2_table_menu.meta.loading": "Loading table stats...", - "sidebar.v2_table_menu.meta.unavailable": "Table stats unavailable", - "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} data · {{indexes}} indexes", - "sidebar.v2_table_menu.open_data": "View data", - "sidebar.v2_table_menu.design_table_detail": "columns / indexes / foreign keys", - "sidebar.v2_table_menu.open_in_new_tab": "Open in new tab", - "sidebar.v2_table_menu.metadata_section": "Metadata", - "sidebar.v2_table_menu.view_in_er": "View in ER diagram", - "sidebar.v2_table_menu.copy_section": "Copy", - "sidebar.v2_table_menu.copy_table_name": "Copy table name", - "sidebar.copy_object_name.label.table": "Table name", - "sidebar.copy_object_name.label.view": "View name", - "sidebar.copy_object_name.label.materialized_view": "Materialized view name", - "sidebar.copy_object_name.label.event": "Event name", - "sidebar.copy_object_name.empty": "{{label}} is empty and cannot be copied", - "sidebar.copy_object_name.copied": "{{label}} copied to clipboard", - "sidebar.copy_object_name.failed": "Failed to copy {{label}}: {{error}}", - "sidebar.v2_table_menu.copy_table_as_insert": "Copy entire table as {{keyword}}", - "sidebar.v2_table_menu.maintenance_section": "Maintenance", - "sidebar.v2_table_menu.rename_compact": "Rename...", - "sidebar.v2_table_menu.new_rollup": "New {{keyword}}", - "sidebar.v2_table_menu.backup_sql_dump": "Backup · {{keyword}}", - "sidebar.v2_table_menu.refresh_stats": "Refresh stats", - "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", - "sidebar.v2_table_menu.open_export_workbench": "Open export workbench...", - "sidebar.v2_table_menu.truncate_table": "Truncate table", - "sidebar.v2_table_menu.ai_explain_table": "Use AI to explain this table", - "sidebar.v2_table_menu.ai_generate_query": "Use AI to generate a query", - "sidebar.v2_table_group_menu.title": "Tables", - "sidebar.v2_table_group_menu.current_database": "Current database", - "sidebar.v2_table_group_menu.sort_name": "name", - "sidebar.v2_table_group_menu.sort_frequency": "usage frequency", - "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} tables · sorted by {{sort}}", - "sidebar.v2_database_menu.meta": "{{dialect}} · Database actions", - "sidebar.v2_database_menu.new_schema": "New schema", - "sidebar.v2_database_menu.new_materialized_view": "New materialized view", - "sidebar.v2_database_menu.new_external_catalog": "New external Catalog", - "sidebar.v2_database_menu.refresh_object_tree": "Refresh object tree", - "sidebar.v2_database_menu.export_backup_section": "Export and backup", - "sidebar.v2_database_menu.export_all_table_schema_sql": "Export all table schemas · SQL", - "sidebar.v2_database_menu.backup_all_tables_sql": "Back up all tables · schema + data SQL", - "sidebar.message.locate_current_table_unavailable": "The current tab has no table to locate", - "sidebar.locate.object.table": "Table", - "sidebar.locate.object.view": "View", - "sidebar.locate.object.materialized_view": "Materialized view", - "sidebar.locate.object.routine": "Function/procedure", - "sidebar.locate.object.trigger": "Trigger", - "sidebar.active_connection.current_host_database": "Current host and database", - "sidebar.active_connection.no_database_selected": "No database selected", - "sidebar.active_connection.no_host_selected": "No host selected", - "sidebar.active_connection.actions": "Connection actions", - "sidebar.modal.tag.edit_title": "Edit group", - "sidebar.modal.tag.create_title": "New group", - "sidebar.modal.tag.edit_description": "Update the group name and included connections.", - "sidebar.modal.tag.create_description": "Create a group to organize connections.", - "sidebar.field.tag_name": "Group name", - "sidebar.validation.tag_name_required": "Enter a group name.", - "sidebar.placeholder.tag_name": "Group name", - "sidebar.field.select_connections": "Select connections", - "sidebar.modal.create_database.title": "Create database", - "sidebar.field.database_name": "Database name", - "sidebar.validation.name_required": "Enter a name.", - "sidebar.modal.rename_database.title": "Rename database: {{name}}", - "sidebar.field.new_database_name": "Replacement database name", - "sidebar.validation.new_database_name_required": "Enter the replacement database name.", - "sidebar.field.schema_name": "Schema name", - "sidebar.validation.schema_name_required": "Enter the schema name.", - "sidebar.modal.rename_table.title": "Rename table: {{name}}", - "sidebar.field.new_table_name": "Replacement table name", - "sidebar.validation.new_table_name_required": "Enter the replacement table name.", - "sidebar.modal.rename_view.title": "Rename view: {{name}}", - "sidebar.field.new_view_name": "Replacement view name", - "sidebar.validation.new_view_name_required": "Enter the replacement view name.", - "sidebar.modal.batch_tables.title": "Batch table operations", - "sidebar.modal.batch_tables.description": "Select tables and views, then export or clear them in one operation.", - "sidebar.action.clear_tables": "Clear tables", - "sidebar.action.export_schema": "Export schema", - "sidebar.action.export_data_only": "Export data only", - "sidebar.action.backup_schema_data": "Back up schema and data", - "sidebar.field.select_connection": "Select connection", - "sidebar.placeholder.select_connection": "Select connection", - "sidebar.field.select_database": "Select database", - "sidebar.placeholder.select_connection_first": "Select a connection first", - "sidebar.modal.batch_tables.selection_hint": "Select the tables or views to process in this batch.", - "sidebar.placeholder.filter_table_view": "Filter tables and views", - "sidebar.filter.all_objects": "All objects", - "sidebar.filter.tables_only": "Tables only", - "sidebar.filter.views_only": "Views only", - "sidebar.filter.scope_filtered": "Filtered results", - "sidebar.filter.scope_all": "All results", - "sidebar.batch.filtered_count": "Filtered {{filtered}} / {{total}} objects", - "sidebar.action.select_all": "Select all", - "sidebar.action.clear_selection": "Clear selection", - "sidebar.action.invert_selection": "Invert selection", - "sidebar.batch.selected_objects": "Selected {{selected}} / {{total}} objects", - "sidebar.modal.batch_databases.title": "Batch database operations", - "sidebar.modal.batch_databases.description": "Select databases and export schemas or full backups.", - "sidebar.action.export_database_schema_count": "Export schemas ({{count}})", - "sidebar.action.backup_database_count": "Back up databases ({{count}})", - "sidebar.modal.batch_databases.selection_hint": "Select databases from the chosen connection.", - "sidebar.batch.selected_databases": "Selected {{selected}} / {{total}} databases", - "sidebar.sql_file_exec.cancel": "Cancel execution", - "sidebar.action.close": "Close", - "sidebar.sql_file_exec.file_size": "File size: ", - "sidebar.sql_file_exec.status_label": "Status: ", - "sidebar.sql_file_exec.status.running": "Running", - "sidebar.sql_file_exec.status.done": "Done", - "sidebar.sql_file_exec.status.cancelled": "Cancelled", - "sidebar.sql_file_exec.status.error": "Error", - "sidebar.sql_file_exec.executed_label": "Executed: ", - "sidebar.sql_file_exec.rows_separator": " rows | Failed: ", - "sidebar.sql_file_exec.rows_suffix": " rows", - "connection_modal.config_section.identity.title": "Identity", - "connection_modal.config_section.identity.description": "Configure the connection name, icon, and basic identity.", - "connection_modal.config_section.uri.title": "Connection URI", - "connection_modal.config_section.uri.description": "Enter, generate, or parse a connection URI.", - "connection_modal.config_section.target.title": "Target address", - "connection_modal.config_section.target.description": "Configure the host, port, and connection target.", - "connection_modal.config_section.fileTarget.title": "File database", - "connection_modal.config_section.fileTarget.description": "Select a local database file.", - "connection_modal.config_section.connectionMode.title": "Connection mode", - "connection_modal.config_section.connectionMode.description": "Configure standalone, primary/replica, cluster, or Replica Set mode.", - "connection_modal.config_section.mongoDiscovery.title": "MongoDB discovery", - "connection_modal.config_section.mongoDiscovery.description": "Discover and manage MongoDB members.", - "connection_modal.config_section.replica.title": "Replica nodes", - "connection_modal.config_section.replica.description": "Configure replica or additional nodes.", - "connection_modal.config_section.service.title": "Service and database", - "connection_modal.config_section.service.description": "Configure service name, default database, and visible database scope.", - "connection_modal.config_section.mongoPolicy.title": "MongoDB policy", - "connection_modal.config_section.mongoPolicy.description": "Configure MongoDB authentication, readPreference, and save policy.", - "connection_modal.config_section.credentials.title": "Credentials", - "connection_modal.config_section.credentials.description": "Configure username, password, and saved credentials.", - "connection_modal.config_section.databaseScope.title": "Database scope", - "connection_modal.config_section.databaseScope.description": "Choose which databases are shown after connecting.", - "connection_modal.config_section.customDriver.title": "Custom driver", - "connection_modal.config_section.customDriver.description": "Configure the custom driver name.", - "connection_modal.config_section.customDsn.title": "Custom DSN", - "connection_modal.config_section.customDsn.description": "Configure a driver-specific DSN.", - "connection_modal.config_section.jvmRuntime.title": "JVM runtime", - "connection_modal.config_section.jvmRuntime.description": "Configure JVM access modes and diagnostics.", - "connection_modal.field.password": "Password", - "sidebar.menu.refresh": "Refresh", - "sidebar.search.scope.object": "Object", - "sidebar.search.scope.database": "Database", - "sidebar.search.scope.host": "Host", - "sidebar.search.scope.tag": "Tag", - "sidebar.tree.saved_queries": "Saved queries", - "sidebar.tree.untitled_query": "Untitled query", - "sidebar.tree.default_database": "Default database", - "sidebar.tree.unknown_connection": "Unknown connection", - "sidebar.tree.unmatched_saved_queries": "Unmatched", - "sidebar.tree.all_saved_queries": "All saved queries", - "sidebar.tree.default_schema": "Default schema", - "sidebar.object_group.tables": "Tables", - "sidebar.object_group.views": "Views", - "sidebar.object_group.routines": "Functions and procedures", - "sidebar.object_group.triggers": "Triggers", - "sidebar.object_group.events": "Events", - "sidebar.object_group.materialized_views": "Materialized views", - "sidebar.table_folder.columns": "Columns", - "sidebar.table_folder.indexes": "Indexes", - "sidebar.table_folder.foreign_keys": "Foreign keys", - "sidebar.table_folder.triggers": "Triggers", - "sidebar.object.view": "View", - "sidebar.object.function": "Function", - "sidebar.object.procedure": "Procedure", - "sidebar.table_action.truncate.label": "Truncate table", - "sidebar.table_action.truncate.progress": "Truncating", - "sidebar.table_action.clear.label": "Clear table", - "sidebar.table_action.clear.progress": "Clearing", - "sidebar.tab.table_structure": "Table structure ({{table}})", - "sidebar.tab.design_table": "Design table ({{table}})", - "sidebar.tab.new_table": "New table - {{database}}", - "sidebar.tab.table_overview": "Table overview - {{database}}{{schema}}", - "sidebar.tab.trigger": "Trigger: {{name}}", - "sidebar.tab.event": "Event: {{name}}", - "sidebar.tab.edit_event": "Edit event: {{name}}", - "sidebar.tab.materialized_view_definition": "Materialized view: {{name}}", - "sidebar.tab.view_definition": "View: {{name}}", - "sidebar.tab.edit_view": "Edit view: {{name}}", - "sidebar.tab.create_view": "New view", - "sidebar.tab.routine_definition": "{{type}}: {{name}}", - "sidebar.tab.edit_routine": "Edit {{type}}: {{name}}", - "sidebar.tab.create_function": "New function", - "sidebar.tab.create_procedure": "New procedure", - "sidebar.tab.new_query": "New query", - "sidebar.tab.new_query_database": "New query ({{database}})", - "sidebar.tab.redis_command": "Command - {{database}}", - "sidebar.tab.redis_monitor": "Monitor - {{database}}", - "tab_manager.menu.close_all": "Close all tabs", - "tab_manager.menu.close_left": "Close tabs to the left", - "tab_manager.menu.close_other": "Close other tabs", - "tab_manager.menu.close_right": "Close tabs to the right", - "tab_manager.close_aria": "Close {{title}}", - "tab_manager.kind_badge.query": "SQL", - "tab_manager.kind_badge.table": "Table", - "tab_manager.kind_badge.design": "Design", - "tab_manager.kind_badge.table_overview": "DB", - "tab_manager.kind_badge.redis": "Redis", - "tab_manager.kind_badge.jvm": "JVM", - "tab_manager.kind_badge.trigger": "Trigger", - "tab_manager.kind_badge.materialized_view": "MV", - "tab_manager.kind_badge.view": "View", - "tab_manager.kind_badge.event": "Event", - "tab_manager.kind_badge.routine": "Func", - "tab_manager.kind_badge.table_export": "Export", - "tab_manager.kind_badge.sql_analysis": "Analyze", - "tab_manager.kind_badge.fallback": "Tab", - "tab_manager.empty.action.open_ai": "Open AI", - "tab_manager.empty.aria.start_workbench": "GoNavi start workbench", - "tab_manager.empty.eyebrow.connections": "{{count}} connections", - "tab_manager.empty.eyebrow.workbench": "WORKBENCH", - "tab_manager.empty.hero.description": "Choose a data source, open the query editor, or continue with context in the AI panel.", - "tab_manager.empty.hero.title": "Connections, queries, and analysis start in one workbench.", - "tab_manager.empty.quick.ai_assist.description": "Explain SQL, generate queries, and review results", - "tab_manager.empty.quick.ai_assist.title": "Enter AI assistance", - "tab_manager.empty.quick.aria": "Quick workflow", - "tab_manager.empty.quick.configure_source.description": "Set URI, SSH, proxy, and driver in one place", - "tab_manager.empty.quick.configure_source.title": "Configure data source", - "tab_manager.empty.quick.heading": "Quick workflow", - "tab_manager.empty.quick.sql_workspace.description": "Open the query editor with the current context", - "tab_manager.empty.quick.sql_workspace.title": "Start SQL workspace", - "tab_manager.hover.fallback.database_not_specified": "Not specified", - "tab_manager.hover.fallback.host_not_configured": "Not configured", - "tab_manager.hover.fallback.unbound_connection": "Unbound connection", - "tab_manager.hover.kind.design": "Table design", - "tab_manager.hover.kind.event": "Event", - "tab_manager.hover.kind.fallback": "Tab", - "tab_manager.hover.kind.jvm_audit": "JVM audit", - "tab_manager.hover.kind.jvm_diagnostic": "JVM diagnostic", - "tab_manager.hover.kind.jvm_monitoring": "JVM monitoring", - "tab_manager.hover.kind.jvm_overview": "JVM overview", - "tab_manager.hover.kind.jvm_resource": "JVM resource", - "tab_manager.hover.kind.materialized_view": "Materialized view", - "tab_manager.hover.kind.query": "SQL query", - "tab_manager.hover.kind.redis_command": "Redis command", - "tab_manager.hover.kind.redis_keys": "Redis Key", - "tab_manager.hover.kind.redis_monitor": "Redis monitor", - "tab_manager.hover.kind.routine": "Function / procedure", - "tab_manager.hover.kind.table": "Table data", - "tab_manager.hover.kind.table_export": "Export workbench", - "tab_manager.hover.kind.sql_analysis": "SQL analysis workbench", - "tab_manager.hover.kind.table_overview": "Table overview", - "tab_manager.hover.kind.trigger": "Trigger", - "tab_manager.hover.kind.view": "View", - "tab_manager.hover.label.connection": "Connection", - "tab_manager.hover.label.database": "Database", - "tab_manager.hover.label.object": "Object", - "tab_manager.hover.label.type": "Type", - "sidebar.message.no_visible_databases": "No visible databases or schemas were returned. Check account permissions or refresh from the context menu.", - "sidebar.message.visual_new_table_unsupported": "This data source does not support visual table creation yet.", - "sidebar.message.jvm_resources_backend_unavailable": "JVM resource browsing is not available in this build.", - "sidebar.message.external_sql_directory_read_failed": "Failed to read SQL directory {{name}}: {{error}}", - "sidebar.message.sphinx_unsupported_objects": "This Sphinx instance does not expose these object capabilities: {{objects}}. Compatibility mode was applied.", - "sidebar.message.sidebar_filter_sync_enabled": "Left-side filter sync enabled.", - "sidebar.message.sidebar_filter_sync_disabled": "Left-side filter sync disabled.", - "sidebar.message.sidebar_filter_reset": "Sidebar filter reset.", - "sidebar.message.database_name_required": "Database name is required.", - "sidebar.message.database_name_unchanged": "Database name is unchanged.", - "sidebar.message.database_renamed": "Database renamed.", - "sidebar.message.database_deleted": "Database deleted.", - "sidebar.message.operation_rename_failed": "Rename failed: {{error}}", - "sidebar.message.operation_drop_failed": "Drop failed: {{error}}", - "sidebar.message.table_name_required": "Table name is required.", - "sidebar.message.table_name_unchanged": "Table name is unchanged.", - "sidebar.message.table_renamed": "Table renamed.", - "sidebar.message.table_deleted": "Table deleted.", - "sidebar.message.view_name_required": "View name is required.", - "sidebar.message.view_name_unchanged": "View name is unchanged.", - "sidebar.message.view_deleted": "View deleted.", - "sidebar.message.view_renamed": "View renamed.", - "sidebar.message.routine_deleted": "{{type}} deleted.", - "sidebar.message.rename_failed": "Rename failed: {{error}}", - "sidebar.message.delete_failed": "Delete failed: {{error}}", - "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", - "sidebar.message.table_data_action_success": "{{action}} completed.", - "sidebar.message.table_data_action_failed": "{{action}} failed: {{error}}", - "sidebar.message.disconnected": "Disconnected.", - "sidebar.message.database_closed": "Database closed.", - "sidebar.message.saved_query_deleted": "Query deleted.", - "sidebar.message.saved_query_name_unchanged": "Query name is unchanged.", - "sidebar.message.saved_query_renamed": "Query renamed.", - "sidebar.menu.sort_by_name": "Sort by name", - "sidebar.menu.sort_by_frequency": "Sort by usage frequency", - "sidebar.menu.create_view": "New view", - "sidebar.menu.create_function": "New function", - "sidebar.menu.create_procedure": "New procedure", - "sidebar.menu.edit_tag": "Edit group", - "sidebar.menu.delete_tag": "Delete group", - "sidebar.menu.new_command_window": "New command window", - "sidebar.menu.redis_monitor": "Redis instance monitor", - "sidebar.menu.duplicate_connection": "Duplicate connection", - "sidebar.menu.disconnect": "Disconnect", - "sidebar.menu.move_out_of_tag": "Remove from group", - "sidebar.menu.create_database": "New database", - "sidebar.menu.new_query": "New query", - "sidebar.menu.move_to_tag": "Move to group", - "sidebar.menu.browse_keys": "Browse keys", - "sidebar.menu.create_table": "New table", - "sidebar.menu.rename_database": "Rename database", - "sidebar.menu.danger_operations": "Dangerous operations", - "sidebar.menu.delete_database": "Delete database", - "sidebar.menu.export_all_table_schema_sql": "Export all table schemas (SQL)", - "sidebar.menu.backup_all_tables_sql": "Back up all tables (schema + data SQL)", - "sidebar.menu.close_database": "Close database", - "sidebar.menu.browse_view_data": "Browse view data", - "sidebar.menu.view_definition": "View definition", - "sidebar.menu.browse_materialized_view_data": "Browse materialized view data", - "sidebar.menu.materialized_view_definition": "Materialized view definition", - "sidebar.menu.view_object_definition": "View definition", - "sidebar.menu.edit_view": "Edit view", - "sidebar.menu.rename_view": "Rename view", - "sidebar.menu.delete_view": "Delete view", - "sidebar.menu.view_routine_definition": "View definition", - "sidebar.menu.edit_definition": "Edit definition", - "sidebar.menu.delete_routine": "Delete {{type}}", - "sidebar.menu.design_table": "Design table", - "sidebar.menu.copy_table_structure": "Copy table structure", - "sidebar.menu.backup_table_sql": "Back up table (SQL)", - "sidebar.menu.rename_table": "Rename table", - "sidebar.menu.truncate_table": "Truncate table", - "sidebar.menu.clear_table": "Clear table", - "sidebar.menu.delete_table": "Delete table", - "sidebar.menu.export_table_data": "Export table data", - "sidebar.menu.export_csv": "Export CSV", - "sidebar.menu.export_xlsx": "Export Excel (XLSX)", - "sidebar.menu.export_json": "Export JSON", - "sidebar.menu.export_markdown": "Export Markdown", - "sidebar.menu.export_html": "Export HTML", - "sidebar.menu.open_query": "Open query", - "sidebar.menu.rename_query": "Rename query", - "sidebar.menu.delete_query": "Delete query", - "sidebar.menu.add_sql_directory": "Add SQL directory", - "sidebar.menu.refresh_directory": "Refresh directory", - "sidebar.menu.remove_directory": "Remove directory", - "sidebar.menu.open_sql_file": "Open SQL file", - "sidebar.menu.new_sql_file": "New SQL file", - "sidebar.menu.new_sql_directory": "New directory", - "sidebar.menu.rename_sql_directory": "Rename directory", - "sidebar.menu.delete_local_directory": "Delete local directory", - "sidebar.menu.delete_sql_directory": "Delete directory", - "sidebar.menu.rename_sql_file": "Rename SQL file", - "sidebar.menu.new_sql_file_in_directory": "New SQL file in this directory", - "sidebar.menu.new_sql_directory_in_directory": "New directory in this directory", - "sidebar.menu.delete_sql_file": "Delete SQL file", - "sidebar.batch.group.tables": "Tables", - "sidebar.batch.group.views": "Views", - "sidebar.batch.no_matching_objects": "No matching objects", - "sidebar.sql_template.edit_view": "Edit view {{name}}", - "sidebar.sql_template.modify_then_execute": "Modify and execute", - "sidebar.sql_template.edit_routine": "Edit {{type}} {{name}}", - "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB does not support stored procedures yet", - "sidebar.sql_template.duckdb_macro_hint": "Use SQL Macro for function-like behavior", - "connection_modal.network.ssl_mode.preferred": "Preferred", - "connection_modal.network.ssl_mode.required": "Required", - "connection_modal.network.ssl_mode.skip_verify": "Skip Verify", - "sidebar.external_sql.root": "External SQL files", - "sidebar.external_sql.directory_fallback": "SQL directory", - "sidebar.external_sql_modal.title.create_file": "New SQL file", - "sidebar.external_sql_modal.title.rename_file": "Rename SQL file", - "sidebar.external_sql_modal.title.create_directory": "New directory", - "sidebar.external_sql_modal.title.rename_directory": "Rename directory", - "sidebar.external_sql_modal.action.create": "Create", - "sidebar.external_sql_modal.action.rename": "Rename", - "sidebar.external_sql_modal.field.directory_name": "Directory name", - "sidebar.external_sql_modal.field.sql_file_name": "SQL file name", - "sidebar.external_sql_modal.validation.directory_name_required": "Enter a directory name", - "sidebar.external_sql_modal.validation.sql_file_name_required": "Enter a SQL file name", - "sidebar.external_sql_modal.validation.directory_name_no_separator": "Directory name cannot contain path separators", - "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "File name cannot contain path separators", - "sidebar.external_sql_modal.help.directory": "This directory only appears in the external SQL tree; non-SQL files still stay hidden", - "sidebar.external_sql_modal.help.sql_file": "The .sql suffix is added automatically when omitted", - "sidebar.external_sql_modal.placeholder.directory_name": "e.g. reports", - "sidebar.external_sql_modal.placeholder.sql_file_name": "e.g. report.sql", - "sidebar.jvm.action.monitoring": "Continuous monitoring", - "sidebar.jvm.action.diagnostic": "Diagnostic enhancement", - "sidebar.jvm.tab.overview": "JVM overview", - "sidebar.jvm.tab.resource": "JVM resources", - "sidebar.jvm.tab.audit": "JVM audit", - "sidebar.jvm.tab.diagnostic": "JVM diagnostics", - "sidebar.jvm.tab.monitoring": "JVM monitoring", - "jvm.backend.message.connect_success": "JVM connection succeeded", - "jvm.backend.error.preview_confirmation_missing": "Preview confirmation token is missing. Preview again before submitting.", - "jvm.backend.error.confirmation_token_missing": "Confirmation token is missing. Complete preview confirmation first.", - "jvm.backend.error.confirmation_token_invalid": "Confirmation token is invalid. Preview and confirm again.", - "jvm.backend.error.confirmation_token_expired": "Confirmation token expired. Preview and confirm again.", - "jvm.backend.error.preview_context_hash_failed": "Failed to generate JVM preview context: {{detail}}", - "jvm.backend.error.preview_payload_hash_failed": "Failed to generate JVM preview payload digest: {{detail}}", - "jvm.backend.error.change_blocked_by_guard": "The current change was blocked by Guard", - "jvm.backend.error.change_blocked_read_only": "Current connection is read-only, so writes are blocked", - "jvm.backend.error.change_resource_id_required": "JVM resource ID is required", - "jvm.backend.error.change_action_required": "JVM change action is required", - "jvm.backend.error.change_reason_required": "JVM change reason is required", - "jvm.backend.error.change_confirmation_token_failed": "Failed to generate JVM change confirmation token: {{detail}}", - "jvm.backend.error.disallowed_mode": "Current connection does not allow {{mode}} mode", - "jvm.backend.error.resource_path_invalid": "Invalid JVM resource path: {{detail}}", - "jvm.backend.error.audit_write_blocked": "Failed to write audit record, JVM change was blocked: {{detail}}", - "jvm.backend.warning.failed_audit_write_failed": "Failed to write failure audit record: {{detail}}", - "jvm.backend.warning.terminal_audit_write_failed": "Failed to write terminal audit record: {{detail}}", - "jvm.backend.separator.message_warning": "; ", - "jvm.backend.capability.reason.read_only": "Current connection is read-only", - "jvm.backend.monitoring.error.snapshot_unsupported": "{{provider}} monitoring snapshot is not supported yet", - "jvm.backend.monitoring.error.session_not_found": "Monitoring session not found for {{connectionId}} {{providerMode}}", - "jvm.backend.monitoring.warning.sample_auto_stopped": "Monitoring sampling failed {{count}} consecutive times and this session was stopped automatically", - "jvm.backend.connection_error.suggestion": "Suggestion: {{detail}}", - "jvm.backend.connection_error.technical_detail": "Technical detail: {{detail}}", - "jvm.backend.connection_error.generic": "JVM connection failed", - "jvm.backend.connection_error.endpoint.base_url_required": "Endpoint connection failed: Endpoint Base URL is missing.", - "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Endpoint connection failed: Endpoint Base URL is invalid.", - "jvm.backend.connection_error.endpoint.base_url_invalid.help": "Enter a full http:// or https:// URL that points to the management API root implementing the GoNavi JVM HTTP contract, for example http://127.0.0.1:19090/manage/jvm.", - "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Endpoint connection failed: only HTTP or HTTPS is supported.", - "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "Change Endpoint Base URL to an address that starts with http:// or https://.", - "jvm.backend.connection_error.endpoint.not_found.summary": "Endpoint connection failed: the target responded, but the GoNavi JVM management API was not found.", - "jvm.backend.connection_error.endpoint.not_found.help": "Confirm that Base URL points to the JVM management API root, not a business endpoint, health check, or gateway home page.", - "jvm.backend.connection_error.endpoint.connection_refused.summary": "Endpoint connection failed: the target management API is not listening, or the address is unreachable.", - "jvm.backend.connection_error.endpoint.connection_refused.help": "Confirm that Base URL points to the management API implementing the GoNavi JVM HTTP contract, and check service listening, port mapping, and firewall rules.", - "jvm.backend.connection_error.endpoint.unauthorized.summary": "Endpoint connection failed: the target management API responded, but the API Key is missing or invalid.", - "jvm.backend.connection_error.endpoint.unauthorized.help": "Check whether the Endpoint API Key in the connection matches the target service configuration.", - "jvm.backend.connection_error.endpoint.forbidden.summary": "Endpoint connection failed: the target management API rejected this request.", - "jvm.backend.connection_error.endpoint.forbidden.help": "Confirm that client source, authentication settings, and access policy allow GoNavi to access this management API.", - "jvm.backend.connection_error.endpoint.timeout.summary": "Endpoint connection failed: timed out while accessing the target management API.", - "jvm.backend.connection_error.endpoint.timeout.help": "Confirm Base URL is reachable, the target service has started, and increase the connection timeout if needed.", - "jvm.backend.connection_error.agent.base_url_required": "Agent connection failed: Agent Base URL is missing.", - "jvm.backend.connection_error.agent.base_url_invalid.summary": "Agent connection failed: Agent Base URL is invalid.", - "jvm.backend.connection_error.agent.base_url_invalid.help": "Enter a full http:// or https:// URL, for example http://127.0.0.1:19090/gonavi/agent/jvm.", - "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Agent connection failed: only HTTP or HTTPS is supported.", - "jvm.backend.connection_error.agent.scheme_unsupported.help": "Change Agent Base URL to an address that starts with http:// or https://.", - "jvm.backend.connection_error.agent.connection_refused.summary": "Agent connection failed: the target Agent management port is not listening, or the address is unreachable.", - "jvm.backend.connection_error.agent.connection_refused.help": "Confirm the Java service started GoNavi Agent with `-javaagent`, and check Base URL, port mapping, and firewall rules.", - "jvm.backend.connection_error.agent.unauthorized.summary": "Agent connection failed: Agent responded, but the API Key is missing or invalid.", - "jvm.backend.connection_error.agent.unauthorized.help": "Check whether the Agent API Key in the connection matches the target service startup parameters.", - "jvm.backend.connection_error.agent.forbidden.summary": "Agent connection failed: Agent rejected this request.", - "jvm.backend.connection_error.agent.forbidden.help": "Confirm that client source, authentication settings, and Agent access policy allow GoNavi to access it.", - "jvm.backend.connection_error.agent.timeout.summary": "Agent connection failed: timed out while accessing the Agent management port.", - "jvm.backend.connection_error.agent.timeout.help": "Confirm the target address is reachable, the Agent has started, and increase the connection timeout if needed.", - "jvm.backend.connection_error.jmx.host_required": "JMX connection failed: host is missing.", - "jvm.backend.connection_error.jmx.port_invalid": "JMX connection failed: port is invalid. Enter a valid port from 1 to 65535.", - "jvm.backend.connection_error.jmx.java_missing.summary": "JMX connection failed: the current machine cannot find the `java` runtime, so GoNavi cannot start the JMX helper.", - "jvm.backend.connection_error.jmx.java_missing.help": "Install JRE/JDK first, or point the GONAVI_JMX_JAVA_BIN environment variable to the correct `java` executable.", - "jvm.backend.connection_error.jmx.non_jrmp.summary": "JMX connection failed: {{target}} is not a standard JMX remote management port; it looks like a business or HTTP port.", - "jvm.backend.connection_error.jmx.non_jrmp.help": "Use the actual JMX port exposed by the application, not the business `server.port`. If the service only enables `-Dcom.sun.management.jmxremote` without `jmxremote.port`, it cannot be connected remotely.", - "jvm.backend.connection_error.jmx.no_such_object.summary": "JMX connection failed: {{target}} has an RMI service, but it is not a usable JMX RMIServer port.", - "jvm.backend.connection_error.jmx.no_such_object.help": "This usually means the port is an RMI registry, debug port, or another Java service port. Check the `jmxremote.port` and `jmxremote.rmi.port` settings.", - "jvm.backend.connection_error.jmx.connection_reset.summary": "JMX connection failed: the service on {{target}} closed the connection; the port is not a compatible standard JMX RMI port.", - "jvm.backend.connection_error.jmx.connection_reset.help": "Confirm the configured port is the JVM's exposed JMX port, not a business port, debug port, or proxied port.", - "jvm.backend.connection_error.jmx.connection_refused.summary": "JMX connection failed: cannot connect to {{target}} because the port is not listening or the network is unreachable.", - "jvm.backend.connection_error.jmx.connection_refused.help": "Confirm remote JMX is enabled on the target JVM, and check host, firewall, port mapping, SSH, and proxy settings.", - "jvm.backend.connection_error.jmx.auth.summary": "JMX connection failed: {{target}} requires authentication, or the current credentials are invalid.", - "jvm.backend.connection_error.jmx.auth.help": "Confirm whether target JMX disables authentication. If authentication is required, provide username and password before connecting.", - "jvm.backend.connection_error.jmx.timeout.summary": "JMX connection failed: connection to {{target}} timed out.", - "jvm.backend.connection_error.jmx.timeout.help": "Confirm the port is reachable, the network is not blocked, and increase the connection timeout if needed.", - "jvm.backend.diagnostic.error.disabled": "JVM diagnostic enhancement is not enabled for this connection", - "jvm.backend.diagnostic.error.session_id_required": "Diagnostic session ID is required. Create a session first.", - "jvm.backend.diagnostic.error.command_required": "Diagnostic command cannot be empty", - "jvm.backend.diagnostic.error.cancel_identifiers_required": "Cancel command requires sessionId and commandId", - "jvm.backend.diagnostic.error.audit_write_blocked": "Failed to write diagnostic audit record, command execution was blocked: {{detail}}", - "jvm.backend.diagnostic.error.execute_canceled": "Diagnostic execute request was canceled: {{detail}}", - "jvm.backend.diagnostic.error.transport_unsupported": "Unsupported JVM diagnostic transport: {{transport}}", - "jvm.backend.diagnostic.warning.audit_write_failed": "Failed to write audit record: {{detail}}", - "jvm.backend.diagnostic.message.command_completed": "Diagnostic command completed", - "jvm.backend.diagnostic.message.cancel_requested": "Cancel request sent; waiting for the diagnostic bridge to stop the command", - "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas command completed", - "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas command canceled", - "jvm.backend.diagnostic.policy.observe_not_allowed": "Observe diagnostic commands are not enabled for this connection: {{command}}", - "jvm.backend.diagnostic.policy.trace_not_allowed": "Trace diagnostic commands are not enabled for this connection: {{command}}", - "jvm.backend.diagnostic.policy.mutating_not_allowed": "High-risk diagnostic commands are not enabled for this connection: {{command}}", - "jvm.backend.diagnostic.policy.read_only_observe_only": "Current connection is read-only. Only observe diagnostic commands are allowed", - "jvm.backend.diagnostic.policy.multiline_not_supported": "Diagnostic command does not support newlines or multiple commands", - "jvm.backend.diagnostic.arthas.base_url_required": "Arthas Tunnel address is required", - "jvm.backend.diagnostic.arthas.base_url_invalid": "Arthas Tunnel address is invalid: {{detail}}", - "jvm.backend.diagnostic.arthas.target_id_required": "Arthas Tunnel target ID is required (targetId / agentId)", - "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel only supports http/https/ws/wss addresses: {{scheme}}", - "jvm.backend.diagnostic.arthas.session_missing": "Diagnostic session does not exist. Create the Arthas Tunnel session again.", - "jvm.backend.diagnostic.arthas.session_config_changed": "Arthas Tunnel session configuration changed. Create the diagnostic session again.", - "jvm.backend.diagnostic.arthas.command_already_running": "This Arthas Tunnel session already has a running command. Wait for it to finish or cancel it first.", - "jvm.backend.diagnostic.arthas.no_running_command": "This Arthas Tunnel session has no running command.", - "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "The active command in this Arthas Tunnel session does not match the command to cancel.", - "jvm.backend.diagnostic.arthas.connection_not_ready": "Arthas Tunnel connection is not ready. Try again later.", - "jvm.backend.diagnostic.arthas.http_failed": "Arthas Tunnel connection failed: HTTP {{status}}", - "jvm.backend.diagnostic.arthas.connect_timeout": "Arthas Tunnel WebSocket connection timed out after {{timeout}} without a response", - "jvm.backend.diagnostic.arthas.connect_canceled": "Arthas Tunnel WebSocket connection was canceled", - "jvm.backend.diagnostic.arthas.connect_failed": "Arthas Tunnel WebSocket connection failed: {{detail}}", - "jvm.backend.diagnostic.arthas.request_encode_failed": "Failed to encode Arthas Tunnel request: {{detail}}", - "jvm.backend.diagnostic.arthas.write_deadline_failed": "Failed to set Arthas Tunnel write deadline: {{detail}}", - "jvm.backend.diagnostic.arthas.send_timeout": "Sending the Arthas Tunnel terminal command timed out after {{timeout}} without a response", - "jvm.backend.diagnostic.arthas.send_canceled": "Sending the Arthas Tunnel terminal command was canceled", - "jvm.backend.diagnostic.arthas.send_failed": "Failed to send Arthas Tunnel terminal command: {{detail}}", - "jvm.backend.diagnostic.arthas.read_deadline_failed": "Failed to set Arthas Tunnel read deadline: {{detail}}", - "jvm.backend.diagnostic.arthas.read_timeout": "Reading Arthas Tunnel output timed out after {{timeout}} without a response", - "jvm.backend.diagnostic.arthas.read_canceled": "Reading Arthas Tunnel output was canceled", - "jvm.backend.diagnostic.arthas.read_failed": "Failed to read Arthas Tunnel output: {{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed": "Arthas Tunnel connection closed: {{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed_code": "Arthas Tunnel connection closed: code={{code}}", - "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel command timed out after {{timeout}}", - "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel command was canceled", - "jvm.backend.diagnostic.arthas.target_not_found": "Target instance was not found. Check targetId / agentId and make sure the tunnel client is online.", - "jvm.backend.diagnostic.arthas.target_not_found_with_id": "Target instance {{target}} was not found. Check targetId / agentId and make sure the tunnel client is online.", - "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Failed to encode Arthas Tunnel terminal command: {{detail}}", - "jvm_resource.error.connection_missing": "The connection does not exist or has been deleted.", - "jvm_resource.error.resource_path_empty": "Resource path is empty.", - "jvm_resource.error.get_value_unavailable": "JVM value reading is not available in this build.", - "jvm_resource.error.read_failed": "Failed to read JVM resource.", - "jvm_resource.error.ai_plan_missing_context": "The AI plan is missing its source context. Regenerate it from the target JVM resource page before applying it.", - "jvm_resource.error.ai_plan_context_mismatch": "The current JVM tab does not match the source context of the AI plan, so automatic application was rejected.", - "jvm_resource.error.ai_plan_to_draft_failed": "The AI plan cannot be converted into a JVM preview draft right now.", - "jvm_resource.message.ai_plan_draft_filled": "The draft was filled from the AI plan for {{resourceId}}. Preview the change before confirming the write.", - "jvm_ai_plan.error.resource_locator_missing": "The AI plan is missing usable resource locator information.", - "jvm_ai_plan.error.reason_missing": "The AI plan is missing a change reason.", - "jvm_ai_plan.error.action_missing": "The AI plan is missing an executable action.", - "jvm_ai_plan.error.payload_json_object_required": "The current JVM preview requires payload to remain a JSON object.", - "jvm_ai_plan.snapshot.unavailable": "The current resource snapshot has not loaded successfully.", - "jvm_ai_plan.actions.none": "The current resource does not declare supported actions. If you generate a plan, provide an action only when it can be clearly inferred from the snapshot, and keep payload as a JSON object.", - "jvm_ai_plan.actions.label": " ({{label}})", - "jvm_ai_plan.actions.description": ": {{description}}", - "jvm_ai_plan.actions.payload_fields": "; payload fields: {{fields}}", - "jvm_ai_plan.actions.field_separator": ", ", - "jvm_ai_plan.actions.required_suffix": "(required)", - "jvm_ai_plan.prompt.resource_path_missing": "(resource path not provided)", - "jvm_ai_plan.prompt.environment_unknown": "unknown", - "jvm_ai_plan.prompt.intro": "Analyze the following JVM resource and generate a structured modification plan for GoNavi \"Preview Change\".", - "jvm_ai_plan.prompt.connection_name": "Connection name: {{connectionName}}", - "jvm_ai_plan.prompt.target_host": "Target host: {{host}}", - "jvm_ai_plan.prompt.provider_mode": "Provider mode: {{providerMode}}", - "jvm_ai_plan.prompt.environment": "Environment: {{environmentLabel}}", - "jvm_ai_plan.prompt.connection_policy.read_only": "Read-only connection. You may only generate a plan and risk analysis, and must not assume execution has happened.", - "jvm_ai_plan.prompt.connection_policy.writable": "Writable connection, but the change must still be previewed first and manually confirmed.", - "jvm_ai_plan.prompt.connection_policy": "Connection policy: {{policy}}", - "jvm_ai_plan.prompt.resource_path": "Current resource path: {{resourcePath}}", - "jvm_ai_plan.prompt.snapshot_title": "Current resource snapshot:", - "jvm_ai_plan.prompt.supported_actions_title": "Supported actions for the current resource:", - "jvm_ai_plan.prompt.output_requirements_title": "Output requirements:", - "jvm_ai_plan.prompt.requirement.single_json_block": "1. You may include a short analysis first, but the answer must contain exactly one ```json code block.", - "jvm_ai_plan.prompt.requirement.fields": "2. The JSON fields inside the code block must be exactly: targetType, selector, action, payload, reason.", - "jvm_ai_plan.prompt.requirement.resource_path": "3. Prefer selector.resourcePath with the current resource path {{resourcePath}}. Do not invent another path.", - "jvm_ai_plan.prompt.requirement.action": "4. Prefer choosing action from \"Supported actions for the current resource\"; infer from the snapshot only when no supported actions are declared.", - "jvm_ai_plan.prompt.requirement.payload": "5. payload must be wrapped as a JSON object. Do not output scripts, commands, or raw binary. If a plain text value is needed, wrap it as {\"format\":\"text\",\"value\":\"...\"}.", - "jvm_ai_plan.prompt.requirement.no_execute": "6. Do not claim the modification has already been executed, and do not output scripts or commands.", - "jvm_ai_plan.prompt.example_title": "JSON example:", - "jvm_ai_plan.prompt.example_reason": "Fix a dirty cache value", - "jvm_resource.error.reason_required": "Enter a change reason.", - "jvm_resource.error.payload_object_required": "Payload must be a JSON object.", - "jvm_resource.error.resource_id_empty": "Resource ID is empty, so a change draft cannot be created.", - "jvm_resource.error.preview_unavailable": "JVM change preview is not available in this build.", - "jvm_resource.error.draft_invalid": "The change draft is invalid.", - "jvm_resource.error.preview_failed": "Failed to preview JVM change.", - "jvm_resource.error.preview_result_invalid": "The preview result has an invalid format.", - "jvm_resource.error.apply_unavailable": "JVM change execution is not available in this build.", - "jvm_resource.error.preview_required": "Preview the change before confirming execution.", - "jvm_resource.error.context_changed": "Resource context changed. Preview again before executing.", - "jvm_resource.error.confirmation_missing": "Confirmation token is missing. Preview again before executing.", - "jvm_resource.presentation.action.set.label": "Set property", - "jvm_resource.presentation.action.set.description": "Update a writable property exposed by the current resource.", - "jvm_resource.presentation.action.invoke.label": "Invoke operation", - "jvm_resource.presentation.action.invoke.description": "Invoke a management operation exposed by the current resource.", - "jvm_resource.presentation.action.put.label": "Write resource", - "jvm_resource.presentation.action.put.description": "Write the payload content to the current JVM resource.", - "jvm_resource.presentation.action.clear.label": "Clear resource", - "jvm_resource.presentation.action.clear.description": "Clear data or state from the current JVM resource.", - "jvm_resource.presentation.action.evict.label": "Evict cache", - "jvm_resource.presentation.action.evict.description": "Evict the target cache item from the current JVM runtime.", - "jvm_resource.presentation.action.remove.label": "Remove entry", - "jvm_resource.presentation.action.remove.description": "Remove the specified entry from the current resource.", - "jvm_resource.presentation.action.delete.label": "Delete resource", - "jvm_resource.presentation.action.delete.description": "Delete or unregister the current resource.", - "jvm_resource.presentation.action.refresh.label": "Refresh resource", - "jvm_resource.presentation.action.refresh.description": "Refresh the runtime state of the current resource.", - "jvm_resource.presentation.action.reload.label": "Reload", - "jvm_resource.presentation.action.reload.description": "Reload the current resource or its configuration.", - "jvm_resource.presentation.action.reset.label": "Reset state", - "jvm_resource.presentation.action.reset.description": "Restore the current resource to its initial or default state.", - "jvm_resource.presentation.unnamed_action": "Unnamed action", - "jvm_resource.presentation.risk.low": "Low", - "jvm_resource.presentation.risk.medium": "Medium", - "jvm_resource.presentation.risk.high": "High", - "jvm_resource.presentation.risk.unknown": "Unknown", - "jvm_resource.presentation.audit_result.unknown": "Unknown", - "jvm_resource.presentation.audit_result.applied": "Applied", - "jvm_resource.presentation.audit_result.success": "Success", - "jvm_resource.presentation.audit_result.warning": "Warning", - "jvm_resource.presentation.audit_result.blocked": "Blocked", - "jvm_resource.presentation.audit_result.failed": "Failed", - "jvm_resource.error.apply_failed": "Failed to execute JVM change.", - "jvm_resource.message.apply_success": "JVM change executed.", - "jvm_resource.title": "JVM Resource Workbench", - "jvm_resource.badge.read_only": "Read-only connection", - "jvm_resource.badge.writable": "Writable connection", - "jvm_resource.action.audit": "Audit log", - "jvm_resource.action.generate_ai_plan": "Generate AI plan", - "jvm_resource.action.ask_ai_plan": "Ask AI for a plan", - "jvm_resource.card.snapshot": "Resource snapshot", - "jvm_resource.field.resource_id": "Resource ID", - "jvm_resource.field.resource_type": "Resource type", - "jvm_resource.field.format": "Format", - "jvm_resource.field.version": "Version", - "jvm_resource.field.available_actions": "Available actions", - "jvm_resource.section.resource_value": "Resource value", - "jvm_resource.section.metadata": "Metadata", - "jvm_resource.empty.no_resource_data": "No resource data", - "jvm_resource.card.change_draft": "Change draft", - "jvm_resource.field.resource_path": "Resource path", - "jvm_resource.field.target_resource": "Target resource", - "jvm_resource.field.resource_version": "Resource version", - "jvm_resource.field.draft_source": "Draft source", - "jvm_resource.draft_source.ai_plan": "AI-assisted draft", - "jvm_resource.draft_source.manual": "Manual edit", - "jvm_resource.section.supported_actions": "Supported resource actions", - "jvm_resource.field.payload_fields": "Payload fields: ", - "jvm_resource.marker.required_suffix": " (required)", - "jvm_resource.list_separator": ", ", - "jvm_resource.field.action": "Action", - "jvm_resource.placeholder.action_jmx": "For example, set or invoke", - "jvm_resource.placeholder.action_default": "For example, put / clear / evict", - "jvm_resource.message.current_action": "Current action: ", - "jvm_resource.field.reason": "Change reason", - "jvm_resource.placeholder.reason": "Enter the reason for this JVM resource change", - "jvm_resource.field.payload": "Payload (JSON)", - "jvm_resource.message.payload_hint": "Preview uses the current draft. Confirming execution uses the most recent successful preview request. Preview again after editing the draft.", - "jvm_resource.message.payload_template_applied": "A recommended template has been filled for the current action.", - "jvm_resource.action.preview_change": "Preview change", - "jvm_overview.connection_missing.message": "Connection does not exist or has been deleted", - "jvm_overview.error.capability_load_failed": "Failed to read JVM mode capabilities", - "jvm_overview.eyebrow": "JVM Runtime", - "jvm_overview.title": "JVM runtime overview", - "jvm_overview.badge.read_only": "Read-only connection", - "jvm_overview.badge.writable": "Writable connection", - "jvm_overview.card.connection_summary": "Connection summary", - "jvm_overview.card.mode_capability": "Mode capabilities", - "jvm_overview.field.current_mode": "Current mode", - "jvm_overview.field.allowed_modes": "Allowed modes", - "jvm_overview.field.jmx_address": "JMX address", - "jvm_overview.field.endpoint": "Endpoint", - "jvm_overview.field.agent": "Agent", - "jvm_overview.field.resource_browse": "Resource browsing", - "jvm_overview.value.enabled": "Enabled", - "jvm_overview.value.not_configured": "Not configured", - "jvm_overview.value.resource_browse_lazy_load": "Lazy-loads after expanding a mode node in the sidebar", - "jvm_overview.empty.capabilities": "No mode capability data", - "jvm_overview.capability.can_browse": "Browsable", - "jvm_overview.capability.cannot_browse": "Not browsable", - "jvm_overview.capability.writable": "Writable", - "jvm_overview.capability.read_only": "Read-only", - "jvm_overview.capability.preview_supported": "Preview supported", - "jvm_overview.capability.preview_unsupported": "Preview unsupported", - "jvm_monitoring_dashboard.connection_missing.message": "Connection does not exist or has been deleted", - "jvm_monitoring_dashboard.error.history_unavailable": "JVMGetMonitoringHistory backend method is unavailable", - "jvm_monitoring_dashboard.error.history_load_failed": "Failed to load monitoring history", - "jvm_monitoring_dashboard.error.start_unavailable": "JVMStartMonitoring backend method is unavailable", - "jvm_monitoring_dashboard.error.start_failed": "Failed to start monitoring", - "jvm_monitoring_dashboard.error.stop_unavailable": "JVMStopMonitoring backend method is unavailable", - "jvm_monitoring_dashboard.error.stop_failed": "Failed to stop monitoring", - "jvm_monitoring_dashboard.title": "Continuous JVM monitoring", - "jvm_monitoring_dashboard.status.sampling": "Sampling", - "jvm_monitoring_dashboard.status.stopped": "Stopped", - "jvm_monitoring_dashboard.action.refresh": "Refresh", - "jvm_monitoring_dashboard.action.start": "Start monitoring", - "jvm_monitoring_dashboard.action.stop": "Stop monitoring", - "jvm_monitoring_dashboard.degraded.message": "Monitoring capability is degraded", - "jvm_monitoring_dashboard.empty.title": "Continuous monitoring has not started yet", - "jvm_monitoring_dashboard.empty.description": "After you click \"Start monitoring\", GoNavi keeps sampling results for this connection in the current session; switching tabs does not stop sampling.", - "jvm_diagnostic.workbench.eyebrow": "JVM diagnostics", - "jvm_diagnostic.workbench.title": "JVM diagnostic workbench", - "jvm_diagnostic.workbench.status.session_established": "Session established", - "jvm_diagnostic.workbench.status.no_session": "No session", - "jvm_diagnostic.workbench.status.command_running": "Command running", - "jvm_diagnostic.workbench.action.probe": "Check capabilities", - "jvm_diagnostic.workbench.action.restart_session": "Restart session", - "jvm_diagnostic.workbench.action.start_session": "Start session", - "jvm_diagnostic.workbench.action.execute_command": "Execute command", - "jvm_diagnostic.workbench.action.cancel_command": "Cancel command", - "jvm_diagnostic.connection_missing.message": "Connection does not exist or has been deleted", - "jvm_diagnostic.error.probe_unavailable": "JVMProbeDiagnosticCapabilities backend method is unavailable", - "jvm_diagnostic.error.probe_failed": "Failed to check diagnostic capabilities", - "jvm_diagnostic.error.start_unavailable": "JVMStartDiagnosticSession backend method is unavailable", - "jvm_diagnostic.error.start_failed": "Failed to create diagnostic session", - "jvm_diagnostic.error.history_load_failed": "Failed to load diagnostic history", - "jvm_diagnostic.error.execute_unavailable": "JVMExecuteDiagnosticCommand backend method is unavailable", - "jvm_diagnostic.error.execute_session_required": "Create a diagnostic session before running a command", - "jvm_diagnostic.error.execute_command_required": "Diagnostic command is required", - "jvm_diagnostic.error.execute_failed": "Failed to execute diagnostic command", - "jvm_diagnostic.error.cancel_unavailable": "JVMCancelDiagnosticCommand backend method is unavailable", - "jvm_diagnostic.error.cancel_failed": "Failed to cancel diagnostic command", - "jvm_diagnostic.message.cancel_sent": "Cancel request sent", - "jvm_diagnostic.session.default_title": "JVM diagnostic console", - "jvm_diagnostic.session.default_reason": "Session started from the console", - "jvm_diagnostic.ai_plan.error.transport_mismatch": "The AI plan diagnostic transport is {{planTransport}}, which does not match the current console {{currentTransport}}. Regenerate the plan before applying it.", - "jvm_diagnostic.ai_plan.message.filled": "AI diagnostic plan filled into the console", - "jvm_diagnostic.session_capability.title": "Session and capabilities", - "jvm_diagnostic.session_capability.description": "Current transport, permissions, and quick maintenance", - "jvm_diagnostic.session_capability.status.session_established": "Session established", - "jvm_diagnostic.session_capability.status.no_session": "No session", - "jvm_diagnostic.session_capability.status.command_running": "Command running", - "jvm_diagnostic.session_capability.status.idle": "Idle", - "jvm_diagnostic.session_capability.session_id_hint": "Session ID appears here after a session is created.", - "jvm_diagnostic.session_capability.note": "Capability checks do not run commands; create a session before running commands. Audit history shows recent command records and can include records from past sessions even when no session exists.", - "jvm_diagnostic.session_capability.action.clear_output": "Clear output", - "jvm_diagnostic.session_capability.action.refresh_history": "Refresh history", - "jvm_diagnostic.workflow.probe.title": "Check capabilities", - "jvm_diagnostic.workflow.probe.description": "Read diagnostic transport, streaming output, and command permissions without creating a session.", - "jvm_diagnostic.workflow.session.title": "Start session", - "jvm_diagnostic.workflow.session.description": "Create a diagnostic context so subsequent commands are bound to this session.", - "jvm_diagnostic.workflow.command.title": "Run command", - "jvm_diagnostic.workflow.command.description": "After a session is created, show the command editor, reason input, and templates.", - "jvm_diagnostic.capability.empty.title": "No capability check yet", - "jvm_diagnostic.capability.empty.description": "Capability checks only read transport permissions and command policy. They do not create a session or run commands.", - "jvm_diagnostic.capability_result.title": "Capability check results", - "jvm_diagnostic.capability_result.session_allowed": "Can start sessions", - "jvm_diagnostic.capability_result.session_denied": "Cannot start sessions", - "jvm_diagnostic.capability_result.streaming_supported": "Streaming output", - "jvm_diagnostic.capability_result.streaming_unsupported": "Streaming unsupported", - "jvm_diagnostic.capability_result.observe_allowed": "Observe commands", - "jvm_diagnostic.capability_result.observe_denied": "Observe disabled", - "jvm_diagnostic.capability_result.trace_allowed": "Trace commands", - "jvm_diagnostic.capability_result.mutating_allowed": "High-risk commands", - "jvm_diagnostic.no_session.title": "Start a diagnostic session", - "jvm_diagnostic.no_session.description": "Create a session first, then show the command editor and templates", - "jvm_diagnostic.no_session.alert.title": "Command input appears after a session is created", - "jvm_diagnostic.no_session.alert.description": "This prevents users from thinking commands can run before a session is bound, and keeps audit records, output streams, and cancellation tied to the same session.", - "jvm_diagnostic.no_session.action.start": "Start diagnostic session", - "jvm_diagnostic.no_session.action.probe": "Check capabilities first", - "jvm_diagnostic.command_input.title": "Command input", - "jvm_diagnostic.command_input.description": "Supports autocomplete. Press Ctrl/Cmd + Enter to run.", - "jvm_diagnostic.command_input.command_label": "Diagnostic command", - "jvm_diagnostic.command_input.command_description": "Enter an Arthas/diagnostic command, for example thread -n 5, dashboard, or jvm; templates below can fill this in with one click.", - "jvm_diagnostic.command_input.reason_label": "Reason (optional)", - "jvm_diagnostic.command_input.reason_placeholder": "For example: investigate high CPU, confirm blocked threads, or locate a slow method", - "jvm_diagnostic.command_input.reason_help": "Used for audit records and AI context. It is not sent to the target JVM as an Arthas command.", - "jvm_diagnostic.command_templates.title": "Command templates", - "jvm_diagnostic.output.title": "Live output", - "jvm_diagnostic.output.description": "Appended from backend event stream", - "jvm_diagnostic.output.empty.description": "No live output yet. Backend output will appear here in chronological order after a command runs.", - "jvm_diagnostic.output.local_pending": "Diagnostic command submitted; waiting for backend output: {{command}}", - "jvm_diagnostic.output.frontend_completed_fallback": "The diagnostic command call returned, but no terminal backend event was received. The frontend ended the waiting state as a fallback.", - "jvm_diagnostic.presentation.category.observe": "Observation commands", - "jvm_diagnostic.presentation.category.trace": "Trace commands", - "jvm_diagnostic.presentation.category.mutating": "High-risk commands", - "jvm_diagnostic.presentation.phase.running": "Running", - "jvm_diagnostic.presentation.phase.completed": "Completed", - "jvm_diagnostic.presentation.phase.failed": "Failed", - "jvm_diagnostic.presentation.phase.canceling": "Canceling", - "jvm_diagnostic.presentation.phase.diagnostic": "Diagnostic event", - "jvm_diagnostic.presentation.event.diagnostic": "Diagnostic output", - "jvm_diagnostic.presentation.event.chunk": "Output chunk", - "jvm_diagnostic.presentation.event.done": "Execution finished", - "jvm_diagnostic.presentation.chunk.empty_event": "Empty event", - "jvm_diagnostic.history.title": "Audit history", - "jvm_diagnostic.history.description": "Recent commands and execution status", - "jvm_diagnostic.history.current_session": "Current session", - "jvm_diagnostic.history.no_session": "No diagnostic session yet", - "jvm_diagnostic.history.recent_records": "Recent records", - "jvm_diagnostic.history.reason_missing": "No diagnostic reason provided", - "jvm_diagnostic.history.no_records": "No diagnostic history", - "jvm_audit.eyebrow": "JVM Audit", - "jvm_audit.title": "JVM change audit", - "jvm_audit.card.records": "Audit records", - "jvm_audit.description.current_range": "Current range: last {{limit}} records", - "jvm_audit.option.last_records": "Last {{limit}} records", - "jvm_audit.action.refresh": "Refresh", - "jvm_audit.column.time": "Time", - "jvm_audit.column.mode": "Mode", - "jvm_audit.column.action": "Action", - "jvm_audit.column.resource": "Resource", - "jvm_audit.column.reason": "Reason", - "jvm_audit.column.source": "Source", - "jvm_audit.column.result": "Result", - "jvm_audit.source.ai_plan": "AI assisted", - "jvm_audit.source.manual": "Manual", - "jvm_audit.error.connection_missing": "The connection does not exist or has been deleted.", - "jvm_audit.error.backend_unavailable": "JVMListAuditRecords backend method is unavailable.", - "jvm_audit.error.load_failed": "Failed to load JVM audit records{{separator}}{{detail}}", - "jvm_audit.empty.load_failed": "Audit records are unavailable right now", - "jvm_audit.empty.no_records": "No audit records", - "query_editor.placeholder.connection": "Select connection", - "query_editor.placeholder.database": "Select database", - "query_editor.max_rows.tooltip": "Maximum returned rows. SELECT statements get an automatic LIMIT to prevent very large result sets from freezing the UI.", - "query_editor.max_rows.option_500": "Max rows: 500", - "query_editor.max_rows.option_1000": "Max rows: 1000", - "query_editor.max_rows.option_5000": "Max rows: 5000", - "query_editor.max_rows.option_20000": "Max rows: 20000", - "query_editor.max_rows.option_unlimited": "Max rows: unlimited", - "query_editor.action.run": "Run", - "query_editor.action.run_with_shortcut": "Run ({{shortcut}})", - "query_editor.action.stop": "Stop", - "query_editor.action.save": "Save", - "query_editor.action.save_with_shortcut": "Save ({{shortcut}})", - "query_editor.completion.documentation.comment": "Comment: {{comment}}", - "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + click to switch to this database", - "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + click to open this table", - "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + click to open this view", - "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + click to open this materialized view", - "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + click to open this trigger", - "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + click to open this stored procedure", - "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + click to open this function", - "query_editor.object_info.database": "Database", - "query_editor.object_info.table": "Table", - "query_editor.object_info.column": "Column", - "query_editor.object_info.materialized_view": "Materialized view", - "query_editor.object_info.label.database": "Database", - "query_editor.object_info.label.table": "Table", - "query_editor.object_info.label.type": "Type", - "query_editor.object_info.label.schema": "Schema", - "query_editor.object_info.label.separator": ": ", - "query_editor.action.more": "More", - "query_editor.action.format": "Format", - "query_editor.action.format_sql": "Format SQL", - "query_editor.action.resize_editor": "Drag to resize height", - "query_editor.action.ai_generate_sql": "AI Generate SQL", - "query_editor.action.ai_explain_sql": "AI Explain SQL", - "query_editor.action.ai_optimize_sql": "AI Optimize SQL", - "query_editor.action.ai_generate_sql_menu": "Generate SQL", - "query_editor.action.ai_explain_sql_menu": "Explain SQL", - "query_editor.action.ai_optimize_sql_menu": "Optimize SQL", - "query_editor.action.ai_schema_analysis": "Schema analysis", - "query_editor.action.show_results_panel": "Show results panel", - "query_editor.action.hide_results_panel": "Hide results panel", - "query_editor.action.show_results_panel_with_shortcut": "Show results panel ({{shortcut}})", - "query_editor.action.hide_results_panel_with_shortcut": "Hide results panel ({{shortcut}})", - "query_editor.action.results": "Results", - "query_editor.transaction.delay.immediate": "Immediately", - "query_editor.transaction.mode.tooltip": "Like DBeaver: when the SQL editor runs DML such as INSERT/UPDATE/DELETE/MERGE/REPLACE, GoNavi first opens a managed transaction. Manual mode requires commit/rollback; auto mode automatically runs COMMIT after successful execution.", - "query_editor.transaction.mode.manual": "Manual", - "query_editor.transaction.mode.auto": "Auto", - "query_editor.transaction.status.auto_commit_countdown": "Auto commit in {{seconds}}s", - "query_editor.transaction.status.auto_committing": "Auto committing", - "query_editor.transaction.action.commit": "Commit", - "query_editor.transaction.action.commit_with_count": "Commit ({{count}})", - "query_editor.transaction.action.rollback": "Rollback", - "query_editor.transaction.message.pending_managed_transaction": "The SQL editor already has a pending transaction. Commit or roll it back before running another DML statement.", - "query_editor.action.show_object_info": "Show Object Info", - "query_editor.action.rename_query": "Rename query", - "query_editor.action.export_sql_file": "Export SQL file", - "query_editor.format.keyword_upper": "Uppercase keywords", - "query_editor.format.keyword_lower": "Lowercase keywords", - "query_editor.format.restore_last_format": "Restore last format", - "query_editor.format.snippet_settings": "Snippet settings...", - "query_editor.format.shortcut_settings": "Shortcut settings...", - "query_editor.message.format_failed": "Format failed: SQL syntax may be invalid.", - "query_editor.message.no_format_restore_snapshot": "No pre-format SQL snapshot is available to restore.", - "query_editor.message.format_restore_success": "Restored the pre-format SQL snapshot.", - "query_editor.message.page_query_failed": "Page query failed: {{error}}", - "query_editor.message.page_query_empty": "The page query returned no result set.", - "query_editor.message.refresh_failed": "Refresh failed: {{error}}", - "query_editor.message.select_database_first": "Select a database first.", - "query_editor.message.connection_not_found": "Connection not found.", - "query_editor.message.unsupported_source": "This data source does not support the SQL query editor. Use its dedicated page instead.", - "query_editor.message.no_executable_sql": "No executable SQL.", - "query_editor.message.no_selectable_sql": "No selectable SQL statement.", - "query_editor.message.statement_failed_prefix": "Statement {{index}} failed: ", - "query_editor.message.execution_success": "Execution succeeded.", - "query_editor.message.execution_multi_success": "Executed {{statements}} statements and produced {{results}} result sets.", - "query_editor.message.execution_result_sets_success": "Execution finished and produced {{results}} result sets.", - "query_editor.message.execution_failed_with_error": "Query execution failed: {{error}}", - "query_editor.message.cancel_no_running": "No running query to cancel.", - "query_editor.message.cancel_success": "Query canceled.", - "query_editor.message.cancel_failed": "Failed to cancel query: {{error}}", - "query_editor.message.read_only_no_safe_locator": "No primary key or usable unique index was detected, so changes cannot be committed safely.", - "query_editor.message.read_only_index_metadata_unavailable": "Unable to load unique index metadata, so changes cannot be committed safely.", - "query_editor.message.read_only_table_locator_metadata_unavailable": "Unable to load primary key/unique index metadata for {{table}}, so changes cannot be committed safely.", - "query_editor.message.read_only_system_metadata": "System metadata query results remain read-only.", - "query_editor.message.read_only_oracle_rowid_injection_unavailable": "The Oracle query uses *, so the ROWID locator column could not be injected automatically. Results remain read-only.", - "query_editor.message.read_only_warning_with_detail": "Query results remain read-only: {{detail}}", - "query_editor.message.object_info_target_not_found": "The cursor is not on a recognized table or column.", - "query_editor.message.insert_success": "Code inserted at the current cursor.", - "query_editor.message.append_success": "Code appended.", - "query_editor.message.saved": "Query saved.", - "query_editor.message.sql_file_saved": "SQL file saved.", - "query_editor.message.save_sql_file_failed": "Failed to save SQL file: {{error}}", - "query_editor.message.save_query_failed": "Failed to save query: {{error}}", - "query_editor.message.export_sql_file_success": "SQL file exported.", - "query_editor.message.export_sql_file_failed": "Export SQL file failed: {{error}}", - "query_editor.message.save_first_before_rename": "Save the query before renaming it.", - "query_editor.message.renamed": "Query renamed.", - "query_editor.empty_state.title": "Awaiting SQL execution", - "query_editor.empty_state.description": "Run a query to display results below in the new data grid.", - "query_editor.result.tab_title": "Result {{index}} ({{count}})", - "query_editor.result.tab_title_success": "Result {{index}} ✓", - "query_editor.result.close": "Close result", - "query_editor.result.execution_success": "Execution succeeded", - "query_editor.result.affected_rows": "Affected rows: {{count}}", - "query_editor.result.execution_failed": "Execution failed", - "query_editor.result.ai_diagnose": "AI diagnose", - "query_editor.results_panel.tooltip.hide": "Hide results panel", - "query_editor.results_panel.tooltip.hide_with_shortcut": "Hide results panel ({{shortcut}})", - "query_editor.results_panel.menu.close_other": "Close other tabs", - "query_editor.results_panel.menu.close_left": "Close tabs to the left", - "query_editor.results_panel.menu.close_right": "Close tabs to the right", - "query_editor.results_panel.menu.close_all": "Close all tabs", - "query_editor.results_panel.action.hide": "Hide", - "query_editor.results_panel.aria.hide": "Hide results panel", - "query_editor.results_panel.tab.message": "Message {{index}}", - "query_editor.results_panel.tab.result": "Result {{index}}", - "query_editor.results_panel.message.title": "Execution messages", - "query_editor.results_panel.panel.title": "Results panel", - "query_editor.save_modal.title": "Save query", - "query_editor.save_modal.rename_title": "Rename query", - "query_editor.save_modal.rename_ok": "Rename", - "query_editor.save_modal.name_label": "Query name", - "query_editor.save_modal.name_required": "Enter a query name.", - "query_editor.save_modal.name_placeholder": "Example: query all users", - "query_editor.save_modal.unnamed": "Untitled query", - "query_editor.ai_prompt.default_source": "Database", - "query_editor.ai_prompt.default_database": "Default", - "query_editor.ai_prompt.context": "Context: {{type}} {{name}}, selected database {{database}}.\n", - "query_editor.ai_prompt.generate": "Generate a query based on the current database schema.", - "query_editor.ai_prompt.explain": "Explain the execution logic of this SQL statement:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.optimize": "Analyze this SQL statement for performance issues and suggest optimizations:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.schema": "Analyze the current database schema and suggest performance and design improvements.", - "query_editor.ai_prompt.diagnose": "I got an error while executing this SQL:\n```sql\n{{sql}}\n```\n\nThe database returned this error:\n```text\n{{error}}\n```\n\nAnalyze the cause and suggest a fix.", - "query_editor.slash_command.query.label": "Natural language query", - "query_editor.slash_command.query.description": "Describe what you want to query", - "query_editor.slash_command.query.prompt": "Write an SQL query for this request:", - "query_editor.slash_command.sql.label": "Generate SQL", - "query_editor.slash_command.sql.description": "Describe the requirement and generate a statement", - "query_editor.slash_command.sql.prompt": "Generate SQL for this requirement:", - "query_editor.slash_command.explain.label": "Explain SQL", - "query_editor.slash_command.explain.description": "Explain the selected SQL logic", - "query_editor.slash_command.explain.prompt": "Explain the execution logic of this SQL statement:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.optimize.label": "Optimize analysis", - "query_editor.slash_command.optimize.description": "Analyze SQL performance bottlenecks", - "query_editor.slash_command.optimize.prompt": "Analyze this SQL statement for performance issues and suggest optimizations:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.schema.label": "Table design review", - "query_editor.slash_command.schema.description": "Review table structure design quality", - "query_editor.slash_command.schema.prompt": "Review the related table design, including field types, normalization, indexes, and improvement suggestions.", - "query_editor.slash_command.index.label": "Index advice", - "query_editor.slash_command.index.description": "Recommend an index strategy", - "query_editor.slash_command.index.prompt": "Recommend an index strategy based on the current table structure and common query patterns, and include SQL where useful.", - "query_editor.slash_command.diff.label": "Table comparison", - "query_editor.slash_command.diff.description": "Compare table differences and generate changes", - "query_editor.slash_command.diff.prompt": "Compare these two table structures and generate ALTER statements to migrate from the old version to the new version.", - "query_editor.slash_command.mock.label": "Mock data", - "query_editor.slash_command.mock.description": "Generate INSERT test data", - "query_editor.slash_command.mock.prompt": "Generate 10 business-meaningful INSERT test rows for the related table.", - "query_editor.completion.detail.aggregate": "Aggregate function", - "query_editor.completion.detail.string": "String function", - "query_editor.completion.detail.math": "Math function", - "query_editor.completion.detail.date_time": "Date and time function", - "query_editor.completion.detail.conditional": "Conditional function", - "query_editor.completion.detail.conversion": "Type conversion function", - "query_editor.completion.detail.json": "JSON function", - "query_editor.completion.detail.utility": "Utility function", - "query_editor.completion.detail.info": "Information function", - "query_editor.completion.detail.window": "Window function", - "query_editor.completion.detail.sql_function": "SQL function", - "query_editor.completion.detail.aggregate_count": "Aggregate - count", - "query_editor.completion.detail.string_concat": "String - concatenate", - "query_editor.completion.detail.math_abs": "Math - absolute value", - "query_editor.completion.detail.date_now": "Date - current date and time", - "query_editor.completion.detail.conditional_if": "Conditional - if", - "query_editor.completion.detail.conversion_cast": "Conversion - type cast", - "query_editor.completion.detail.json_extract": "JSON - extract value", - "query_editor.completion.detail.crypto_md5": "Hash - MD5", - "query_editor.completion.detail.info_database": "Info - current database", - "query_editor.completion.detail.window_row_number": "Window - row number", - "query_editor.completion.detail.modifier_distinct": "Modifier - distinct", - "query_editor.completion.action.absolute_value": "absolute value", - "query_editor.completion.action.approximate_distinct": "approximate distinct", - "query_editor.completion.action.approximate_distinct_count": "approximate distinct count", - "query_editor.completion.action.approximate_percentile": "approximate percentile", - "query_editor.completion.action.approximate_quantile": "approximate quantile", - "query_editor.completion.action.array_aggregation": "array aggregation", - "query_editor.completion.action.array_length": "array length", - "query_editor.completion.action.average": "average", - "query_editor.completion.action.bitmap_aggregation": "bitmap aggregation", - "query_editor.completion.action.bitmap_construction": "build bitmap", - "query_editor.completion.action.bitmap_count": "bitmap count", - "query_editor.completion.action.boolean_and_aggregation": "boolean AND aggregation", - "query_editor.completion.action.boolean_or_aggregation": "boolean OR aggregation", - "query_editor.completion.action.character_length": "character length", - "query_editor.completion.action.concat_with_separator": "concatenate with separator", - "query_editor.completion.action.concatenation": "concatenate", - "query_editor.completion.action.condition_mapping": "condition mapping", - "query_editor.completion.action.conditional_check": "conditional check", - "query_editor.completion.action.count": "count", - "query_editor.completion.action.current_database": "current database", - "query_editor.completion.action.current_date": "current date", - "query_editor.completion.action.current_date_time": "current date and time", - "query_editor.completion.action.current_time": "current time", - "query_editor.completion.action.current_timestamp": "current timestamp", - "query_editor.completion.action.current_user": "current user", - "query_editor.completion.action.database_current_time": "database current time", - "query_editor.completion.action.date_addition": "date addition", - "query_editor.completion.action.date_conversion": "convert to date", - "query_editor.completion.action.date_difference": "date difference", - "query_editor.completion.action.date_field_extraction": "extract date field", - "query_editor.completion.action.date_formatting": "date formatting", - "query_editor.completion.action.date_subtraction": "date subtraction", - "query_editor.completion.action.date_truncation": "date truncation", - "query_editor.completion.action.date_value": "date", - "query_editor.completion.action.datetime_conversion": "convert to date and time", - "query_editor.completion.action.datetime_value": "date and time", - "query_editor.completion.action.decimal_truncation": "truncate decimals", - "query_editor.completion.action.dense_rank": "dense rank", - "query_editor.completion.action.distinct_array_aggregation": "distinct array aggregation", - "query_editor.completion.action.e_power": "power of e", - "query_editor.completion.action.elapsed_time": "elapsed time", - "query_editor.completion.action.epoch_seconds": "epoch seconds", - "query_editor.completion.action.exact_distinct": "exact distinct", - "query_editor.completion.action.first_non_null": "return first non-NULL", - "query_editor.completion.action.first_value": "first value", - "query_editor.completion.action.format_as_text": "format as text", - "query_editor.completion.action.group_concatenation": "grouped concatenation", - "query_editor.completion.action.guid_generation": "generate GUID", - "query_editor.completion.action.hexadecimal": "hexadecimal", - "query_editor.completion.action.high_precision_current_time": "high-precision current time", - "query_editor.completion.action.hll_aggregation": "HLL aggregation", - "query_editor.completion.action.hll_hash": "HLL hash", - "query_editor.completion.action.instant_rate_of_change": "instant rate of change", - "query_editor.completion.action.int64_conversion": "convert to Int64", - "query_editor.completion.action.interpolation": "interpolation", - "query_editor.completion.action.json_string_extraction": "JSON string extraction", - "query_editor.completion.action.json_unquote": "remove JSON quotes", - "query_editor.completion.action.json_value_extraction": "JSON value extraction", - "query_editor.completion.action.json_value_set": "set JSON value", - "query_editor.completion.action.jsonb_path_extraction": "JSONB path extraction", - "query_editor.completion.action.julian_day": "Julian day", - "query_editor.completion.action.last_insert_id": "last insert ID", - "query_editor.completion.action.last_row": "last row", - "query_editor.completion.action.last_value": "last value", - "query_editor.completion.action.least_squares": "least squares", - "query_editor.completion.action.left_padding": "left padding", - "query_editor.completion.action.left_space_trimming": "trim left spaces", - "query_editor.completion.action.left_substring": "extract from left", - "query_editor.completion.action.length": "length", - "query_editor.completion.action.list_aggregation": "list aggregation", - "query_editor.completion.action.list_unnest": "unnest list", - "query_editor.completion.action.log_base_10": "base-10 logarithm", - "query_editor.completion.action.log_base_2": "base-2 logarithm", - "query_editor.completion.action.logarithm": "logarithm", - "query_editor.completion.action.lowercase": "convert to lowercase", - "query_editor.completion.action.maximum": "maximum", - "query_editor.completion.action.md5_hash": "MD5 hash", - "query_editor.completion.action.minimum": "minimum", - "query_editor.completion.action.modulo": "modulo", - "query_editor.completion.action.month_addition": "add months", - "query_editor.completion.action.month_difference": "month difference", - "query_editor.completion.action.month_end_date": "month-end date", - "query_editor.completion.action.next_row": "next row", - "query_editor.completion.action.null_branch": "NULL branch", - "query_editor.completion.action.null_if_equal": "return NULL if equal", - "query_editor.completion.action.null_replacement": "null replacement", - "query_editor.completion.action.number_conversion": "convert to number", - "query_editor.completion.action.number_formatting": "number formatting", - "query_editor.completion.action.position_lookup": "find position", - "query_editor.completion.action.power_operation": "power operation", - "query_editor.completion.action.previous_row": "previous row", - "query_editor.completion.action.quantile": "quantile", - "query_editor.completion.action.random_number": "random number", - "query_editor.completion.action.rank": "rank", - "query_editor.completion.action.rate_of_change": "rate of change", - "query_editor.completion.action.regex_match": "regex match", - "query_editor.completion.action.regex_replace": "regex replace", - "query_editor.completion.action.replacement": "replace", - "query_editor.completion.action.right_padding": "right padding", - "query_editor.completion.action.right_space_trimming": "trim right spaces", - "query_editor.completion.action.right_substring": "extract from right", - "query_editor.completion.action.round_down": "round down", - "query_editor.completion.action.round_up": "round up", - "query_editor.completion.action.rounding": "round", - "query_editor.completion.action.row_number": "row number", - "query_editor.completion.action.set_lookup": "set lookup", - "query_editor.completion.action.sha1_hash": "SHA1 hash", - "query_editor.completion.action.sha2_hash": "SHA2 hash", - "query_editor.completion.action.space_trimming": "trim spaces", - "query_editor.completion.action.spread": "spread", - "query_editor.completion.action.sql_literal": "SQL literal", - "query_editor.completion.action.square_root": "square root", - "query_editor.completion.action.string_aggregation": "string aggregation", - "query_editor.completion.action.string_conversion": "convert to string", - "query_editor.completion.action.string_repetition": "repeat string", - "query_editor.completion.action.string_reversal": "reverse string", - "query_editor.completion.action.string_to_date": "string to date", - "query_editor.completion.action.string_to_timestamp": "string to timestamp", - "query_editor.completion.action.struct_construction": "build struct", - "query_editor.completion.action.substring_extraction": "extract substring", - "query_editor.completion.action.sum": "sum", - "query_editor.completion.action.time_difference": "time difference", - "query_editor.completion.action.time_value": "time", - "query_editor.completion.action.time_weighted_average": "time-weighted average", - "query_editor.completion.action.timestamp_difference": "timestamp difference", - "query_editor.completion.action.truncate_date_or_number": "truncate date or number", - "query_editor.completion.action.try_conversion": "try conversion", - "query_editor.completion.action.type_conversion": "type conversion", - "query_editor.completion.action.unix_time_to_datetime": "Unix time to date and time", - "query_editor.completion.action.unix_timestamp": "Unix timestamp", - "query_editor.completion.action.uppercase": "convert to uppercase", - "query_editor.completion.action.uuid_generation": "generate UUID", - "query_editor.completion.action.value_formatting": "format value", - "query_editor.completion.action.version": "version", - "data_grid.action.apply": "Apply", - "data_grid.ai_prompt.analyze_page": "Please analyze the following query result data (first {{count}} sample rows):\n```json\n{{json}}\n```\n\nPlease analyze data characteristics, find patterns, or provide business insights.", - "data_grid.batch_fill.set_null": "Set to NULL", - "data_grid.batch_fill.title": "Batch fill ({{count}} cells)", - "data_grid.batch_fill.value_placeholder": "Enter the value to fill", - "data_grid.cell_editor.now": "Now", - "data_grid.cell_editor.title": "Edit cell", - "data_grid.cell_editor.title_with_column": "Edit cell: {{column}}", - "data_grid.column.comment_tooltip": "Comment: {{comment}}", - "data_grid.column.drag_tooltip": "Drag to reorder columns", - "data_grid.column.foreign_key_jump_title": "Open foreign key table: {{tableName}}", - "data_grid.column.foreign_key_tooltip": "Foreign key: {{target}}", - "data_grid.column.resize_tooltip": "Drag to resize column, double-click to auto fit", - "data_grid.column.type_tooltip": "Type: {{type}}", - "data_grid.column_quick_find.placeholder": "Jump to column...", - "data_grid.column_quick_find.tooltip": "Type a column name, then press Enter or the locate button to jump to that column", - "data_grid.ai_insight.prompt": "Please analyze the following query result data (first {{count}} sample rows):\n```json\n{{json}}\n```\n\nAnalyze data characteristics, find patterns, or provide business insights.", - "data_grid.datetime_picker.now": "Now", - "data_grid.column_settings.column_visibility": "Column visibility", - "data_grid.column_settings.display_settings": "Display settings", - "data_grid.column_settings.field_info": "Field info", - "data_grid.column_settings.hide_all": "Hide all", - "data_grid.column_settings.remember_column_order": "Remember custom column order", - "data_grid.column_settings.remember_hidden_columns": "Remember hidden column settings", - "data_grid.column_settings.reset_hidden": "Reset hidden", - "data_grid.column_settings.reset_hidden_success": "All columns are visible again", - "data_grid.column_settings.reset_order": "Reset order", - "data_grid.column_settings.reset_order_success": "Default column order restored", - "data_grid.column_settings.search_columns_placeholder": "Search column names...", - "data_grid.column_settings.show_all": "Show all", - "data_grid.column_settings.show_comments": "Show column comments in header", - "data_grid.column_settings.show_types": "Show column types in header", - "data_grid.context_menu.auto_fit_column": "Auto-fit column width to content", - "data_grid.context_menu.clear_column_sort": "Clear sort for this field", - "data_grid.context_menu.column_display_section": "Field display", - "data_grid.context_menu.column_no_comment": "No comment", - "data_grid.context_menu.column_unknown_type": "Unknown type", - "data_grid.context_menu.column_unnamed_field": "Unnamed field", - "data_grid.context_menu.copy_as_csv": "Copy as CSV", - "data_grid.context_menu.copy_as_delete": "Copy as DELETE", - "data_grid.context_menu.copy_as_insert": "Copy as INSERT", - "data_grid.context_menu.copy_as_json": "Copy as JSON", - "data_grid.context_menu.copy_as_markdown": "Copy as Markdown", - "data_grid.context_menu.copy_as_update": "Copy as UPDATE", - "data_grid.context_menu.copy_column_data": "Copy column data", - "data_grid.context_menu.copy_field_name": "Copy field name", - "data_grid.context_menu.copy_row_data": "Copy row data", - "data_grid.context_menu.current_marker": "Current", - "data_grid.context_menu.current_row": "Current row", - "data_grid.context_menu.current_cell": "Current cell", - "data_grid.context_menu.edit_section": "Edit", - "data_grid.context_menu.edit_row": "Edit this row", - "data_grid.context_menu.copy_row_as_new": "Copy this row as a new row", - "data_grid.context_menu.undo_cell_change": "Undo this cell change", - "data_grid.context_menu.export_as_csv": "Export as CSV", - "data_grid.context_menu.export_as_excel": "Export as Excel", - "data_grid.context_menu.export_as_html": "Export as HTML", - "data_grid.context_menu.export_as_json": "Export as JSON", - "data_grid.context_menu.export_selected": "Export selected data", - "data_grid.context_menu.fill_to_selected_rows": "Fill to selected rows ({{count}})", - "data_grid.context_menu.hide_column": "Hide this field", - "data_grid.context_menu.hide_column_comment": "Hide field comment", - "data_grid.context_menu.hide_column_type": "Hide field type", - "data_grid.context_menu.paste_copied_columns": "Paste copied columns (same names)", - "data_grid.context_menu.paste_row_as_new": "Paste as new row", - "data_grid.context_menu.paste_row_as_new_count": "Paste as new row ({{count}})", - "data_grid.context_menu.show_column_comment": "Show field comment", - "data_grid.context_menu.show_column_type": "Show field type", - "data_grid.context_menu.sort_ascending": "Sort ascending", - "data_grid.context_menu.sort_descending": "Sort descending", - "data_grid.context_menu.sort_section": "Sort", - "data_grid.copy_sql.error.missing_safe_where": "The current result set lacks a primary key or unique key that can safely locate the row, and it does not cover every table column, so a WHERE condition cannot be generated.", - "data_grid.copy_sql.error.missing_table_name": "The current result set is not associated with a clear table name, so {{mode}} SQL cannot be generated.", - "data_grid.copy_sql.error.no_copyable_fields": "The current result set has no copyable fields, so SQL cannot be generated.", - "data_grid.data_panel.click_cell_description": "Click a cell in the table to preview full data", - "data_grid.data_panel.click_cell_title": "Click a cell to view data", - "data_grid.data_panel.title": "Data preview", - "data_grid.ddl.copy": "Copy DDL", - "data_grid.ddl.layout_bottom": "Bottom", - "data_grid.ddl.layout_side": "Side", - "data_grid.ddl.loading": "Loading DDL...", - "data_grid.ddl.reload": "Reload", - "data_grid.ddl.sidebar_aria": "Table DDL sidebar", - "data_grid.ddl.view": "View DDL", - "data_grid.error_boundary.description": "An error occurred while rendering the data grid. The data format may be invalid.", - "data_grid.error_boundary.retry": "Retry", - "data_grid.error_boundary.title": "Render error", - "data_grid.export.all_data": "Export all data", - "data_grid.export.all_rows": "Export all rows ({{count}} rows)", - "data_grid.export.all_rows_requery": "Export all (rerun query)", - "data_grid.export.current_page": "Export current page ({{count}} rows)", - "data_grid.export.current_page_rows": "Export current page ({{count}} rows)", - "data_grid.export.group_filtered_results": "Filtered results", - "data_grid.export.group_full_table": "Full table", - "data_grid.export.no_selection_prompt": "No rows are selected. Choose an export scope:", - "data_grid.export.options_title": "Export options", - "data_grid.export.query_result_title": "Export query results", - "data_grid.export.scope_prompt": "Choose export scope:", - "data_grid.export.selected_rows": "Export selected rows ({{count}} rows)", - "data_grid.table_fallback.query_result": "Query result", - "data_grid.metadata_view.fields_badge": "Fields", - "data_grid.metadata_view.er_table_badge": "Table", - "data_grid.metadata_view.er_field_badge": "Field", - "data_grid.metadata_view.er_current_badge": "Current", - "data_grid.metadata_view.er_reference_badge": "References", - "data_grid.metadata_view.er_referenced_by_badge": "Referenced by", - "data_grid.metadata_view.er_related_table_count": "{{count}} related tables", - "data_grid.metadata_view.er_relation_count": "{{count}} relations", - "data_grid.metadata_view.er_hidden_columns": "{{count}} more fields", - "data_grid.metadata_view.er_expand_hidden_columns": "Show {{count}} more fields", - "data_grid.metadata_view.er_expand_fields": "Expand all fields", - "data_grid.metadata_view.er_collapse_fields": "Collapse field summary", - "data_grid.metadata_view.er_relation_depth": "Depth {{count}}", - "data_grid.metadata_view.er_expand_relations": "Expand next layer", - "data_grid.metadata_view.er_reset_relations": "Reset to one hop", - "data_grid.metadata_view.er_empty": "No foreign key relations were found for this table", - "data_grid.metadata_view.er_partial_warning": "Some relations could not be loaded. The diagram may be incomplete.", - "data_grid.metadata_view.er_open_table": "Open table", - "data_grid.metadata_view.field_count": "{{count}} fields", - "data_grid.metadata_view.column_name": "Name", - "data_grid.metadata_view.column_type": "Type", - "data_grid.metadata_view.default_value": "Default", - "data_grid.metadata_view.comment": "Comment", - "data_grid.filter.add_condition": "Add condition", - "data_grid.filter.add_sort": "Add sort", - "data_grid.filter.apply": "Apply", - "data_grid.filter.apply_where": "Apply WHERE", - "data_grid.filter.clear": "Clear", - "data_grid.filter.custom_where_placeholder": "Enter a custom WHERE expression (without WHERE), for example: status IN ('A','B')", - "data_grid.filter.disable_all": "Disable all", - "data_grid.filter.enable_all": "Enable all", - "data_grid.filter.enabled": "Enabled", - "data_grid.filter.end_value_placeholder": "End value", - "data_grid.filter.first_condition": "First", - "data_grid.filter.invalid_quick_where": "WHERE condition cannot contain semicolons or SQL comments", - "data_grid.filter.list_values_placeholder": "Separate multiple values with commas or line breaks", - "data_grid.filter.logic.and": "And (AND)", - "data_grid.filter.logic.or": "Or (OR)", - "data_grid.filter.mongodb_query_placeholder": "Enter a MongoDB JSON query object, for example {\"status\":\"A\"}", - "data_grid.filter.no_value_placeholder": "No value required", - "data_grid.filter.op.between": "Between", - "data_grid.filter.op.contains": "Contains", - "data_grid.filter.op.custom": "[Custom]", - "data_grid.filter.op.ends_with": "Ends with", - "data_grid.filter.op.in_list": "In list", - "data_grid.filter.op.is_empty": "Is empty", - "data_grid.filter.op.is_not_empty": "Is not empty", - "data_grid.filter.op.is_not_null": "Is not NULL", - "data_grid.filter.op.is_null": "Is NULL", - "data_grid.filter.op.not_between": "Not between", - "data_grid.filter.op.not_contains": "Does not contain", - "data_grid.filter.op.not_ends_with": "Does not end with", - "data_grid.filter.op.not_in_list": "Not in list", - "data_grid.filter.op.not_starts_with": "Does not start with", - "data_grid.filter.op.starts_with": "Starts with", - "data_grid.filter.quick_where_placeholder": "Enter the condition after WHERE, for example status = 1 AND name LIKE 'A%'", - "data_grid.filter.search_field_placeholder": "Search field names", - "data_grid.filter.select_sort_field_placeholder": "Select sort field", - "data_grid.filter.sort_asc": "Ascending", - "data_grid.filter.sort_desc": "Descending", - "data_grid.filter.sort_label": "Sort", - "data_grid.filter.start_value_placeholder": "Start value", - "data_grid.filter.suggestion.column": "Column", - "data_grid.filter.suggestion.keyword": "Keyword", - "data_grid.filter.suggestion.operator": "Operator", - "data_grid.filter.then_label": "Then", - "data_grid.json_editor.apply_changes": "Apply changes", - "data_grid.json_editor.description": "Edit in the current result order. JSON mode does not support adding or deleting records. Use table mode for that.", - "data_grid.json_editor.format": "Format JSON", - "data_grid.json_editor.invalid_format": "Invalid JSON format: {{error}}", - "data_grid.json_editor.title": "Edit JSON result set", - "data_grid.message.cell_edit_mode_entered": "Cell edit mode enabled. Drag to select multiple cells.", - "data_grid.message.cell_edit_mode_exited": "Cell edit mode disabled.", - "data_grid.message.change_set_build_failed": "Failed to build change set", - "data_grid.message.change_set_build_failed_detail": "Failed to build change set: {{detail}}", - "data_grid.message.column_order_reset": "Default column order restored", - "data_grid.message.column_quick_find_not_found": "Field column not found: {{query}}", - "data_grid.message.column_quick_find_not_rendered": "Field column \"{{column}}\" is not currently rendered, so it cannot be located.", - "data_grid.message.column_visibility_reset": "All columns restored", - "data_grid.message.auto_commit_failed": "Auto commit failed: {{detail}}", - "data_grid.message.auto_commit_success": "Auto commit succeeded", - "data_grid.message.commit_failed": "Commit failed: {{detail}}", - "data_grid.message.undo_added_row_hint": "For new rows, use Delete selected or full-table rollback to undo.", - "data_grid.message.undo_cell_original_missing": "The original data for this cell was not found, so it cannot be undone.", - "data_grid.message.undo_cell_success": "Cell change undone", - "data_grid.message.copied_columns": "Copied {{count}} columns. You can paste them to target rows.", - "data_grid.message.copied_rows": "Copied {{count}} rows. You can paste them as new rows.", - "data_grid.message.copied_to_clipboard": "Copied to clipboard", - "data_grid.message.copy_columns_first": "Copy column values first", - "data_grid.message.copy_columns_same_row_only": "Select cells from only one row when copying column values", - "data_grid.message.copy_rows_first": "Copy rows first", - "data_grid.message.copy_sql_not_supported": "This data source does not support copying SQL. Use JSON/CSV/Markdown copy instead.", - "data_grid.message.current_record_not_editable": "The current record is not editable", - "data_grid.message.current_row_no_copyable_content": "The current row has no copyable content", - "data_grid.message.ddl_copied": "DDL copied to clipboard", - "data_grid.message.ddl_copy_failed": "Failed to copy DDL", - "data_grid.message.ddl_load_failed": "Failed to load DDL", - "data_grid.message.ddl_missing_context": "The current table is missing a connection or table name, so DDL cannot be viewed", - "data_grid.message.drag_select_cells_to_copy": "Drag to select cells to copy first", - "data_grid.message.export_failed": "Export failed: {{detail}}", - "data_grid.message.export_success": "Export completed", - "data_grid.message.export_with_uncommitted_changes": "There are uncommitted changes. Export will use the visible grid data. Commit first if you need full long-field data.", - "data_grid.message.exporting": "Exporting...", - "data_grid.message.exporting_all": "Exporting all data...", - "data_grid.message.exporting_rows": "Exporting {{count}} rows...", - "data_grid.message.filled_cells": "Filled {{count}} cells", - "data_grid.message.filled_rows": "Filled {{count}} rows", - "data_grid.message.current_field_not_editable": "The current field is not editable", - "data_grid.message.filtered_export_not_supported": "This data source does not support exporting filtered results", - "data_grid.message.filtered_export_uses_committed_data": "There are uncommitted changes. Filtered result export uses committed database data.", - "data_grid.message.import_done": "Import completed", - "data_grid.message.json_applied": "JSON changes were applied to the current result set. You can continue with Commit transaction.", - "data_grid.message.json_invalid": "Invalid JSON: {{detail}}", - "data_grid.message.json_parse_failed": "JSON parse failed: {{detail}}", - "data_grid.message.json_record_count_mismatch": "Record count mismatch: current {{current}} rows, JSON has {{json}} rows. Do not add or delete records in this mode.", - "data_grid.message.json_record_missing_row_key": "Record {{index}} is missing the row identifier and cannot be applied", - "data_grid.message.json_record_not_object": "Record {{index}} is not an object and cannot be applied", - "data_grid.message.json_view_must_be_array": "JSON view must be an array, with each item corresponding to one record", - "data_grid.message.keep_one_visible_column": "Keep at least one visible column", - "data_grid.message.locate_record_to_edit": "Locate the record to edit first", - "data_grid.message.locator_column_value_empty": "Locator column {{column}} is empty, so changes cannot be submitted safely.", - "data_grid.message.no_changes_to_commit": "No changes to commit", - "data_grid.message.no_copyable_cells": "No copyable cells were recognized", - "data_grid.message.no_copyable_columns": "No copyable columns were recognized", - "data_grid.message.no_copyable_rows": "No copyable rows were recognized", - "data_grid.message.no_data_changes": "No data changed", - "data_grid.message.no_ddl_to_copy": "No DDL to copy", - "data_grid.message.no_field_name": "Field name not recognized", - "data_grid.message.no_safe_locator": "No safe row locator is available for this result set.", - "data_grid.message.no_filter_applied": "No filter condition is currently applied", - "data_grid.message.no_rows_selected": "No rows are selected", - "data_grid.message.no_other_rows_to_fill": "No other selected rows can be filled", - "data_grid.message.no_pasteable_editable_fields": "No editable fields can be pasted", - "data_grid.message.no_pasteable_rows": "No rows can be pasted", - "data_grid.message.pasted_columns_to_rows": "Pasted to {{rows}} rows, {{cells}} cells total", - "data_grid.message.pasted_rows_as_new": "Pasted {{count}} rows as new rows. Review them before committing.", - "data_grid.message.preview_sql_failed": "Failed to generate preview SQL", - "data_grid.message.preview_sql_failed_detail": "Failed to generate preview SQL: {{detail}}", - "data_grid.preview_sql.copied": "Copied", - "data_grid.preview_sql.no_changes": "No changes", - "data_grid.preview_sql.summary": "{{deletes}} DELETE, {{updates}} UPDATE, {{inserts}} INSERT", - "data_grid.preview_sql.title": "Change preview", - "data_grid.message.result_set_no_copyable_content": "The current result set has no copyable content", - "data_grid.message.saved": "Saved", - "data_grid.message.select_cells_to_fill": "Select cells to fill first", - "data_grid.message.select_file_failed": "Failed to select file: {{detail}}", - "data_grid.message.select_rows_to_copy": "Select rows to copy first", - "data_grid.message.select_rows_to_fill": "Select rows to fill first", - "data_grid.message.select_same_row_cells_to_copy": "Select cells in the same row to copy first", - "data_grid.message.select_target_rows": "Select target rows first", - "data_grid.message.selected_cells_no_update": "Selected cells do not need updates", - "data_grid.message.selection_no_copyable_content": "The current selection has no copyable content", - "data_grid.message.target_row_not_found": "Target row not found. Refresh and try again.", - "data_grid.message.target_rows_cannot_only_source": "Target rows cannot be only the source row. Select another row.", - "data_grid.message.target_rows_no_update": "Target rows do not need updates", - "data_grid.message.transaction_committed": "Transaction committed", - "data_viewer.message.result_not_ready": "Current result set is not ready. Load data once first.", - "data_viewer.message.query_failed": "Query failed", - "data_viewer.message.query_timeout": "Query exceeded the connection timeout and was interrupted. Increase the connection timeout, or reduce the query scope and retry.", - "data_viewer.message.duckdb_query_timeout": "DuckDB query exceeded the connection timeout and was interrupted. Increase the connection timeout, or reduce the sort/filter scope and retry.", - "data_viewer.message.connection_not_found": "Connection not found", - "data_viewer.message.fetch_data_failed_detail": "Error fetching data: {{detail}}", - "data_viewer.message.total_count_failed": "Failed to count total rows", - "data_viewer.message.total_count_failed_detail": "Failed to count total rows: {{detail}}", - "data_viewer.message.total_count_parse_failed": "Failed to parse total count result", - "data_viewer.message.mongo_filter_invalid_detail": "MongoDB filter condition is invalid: {{detail}}", - "data_viewer.message.mongo_filter_parse_failed": "Failed to parse", - "data_viewer.message.sort_buffer_retry_succeeded": "Increased the sort buffer automatically, and the query succeeded.", - "data_viewer.read_only.reason.mongo_id_missing": "MongoDB result set is missing _id, so changes cannot be submitted safely.", - "data_viewer.read_only.reason.metadata_unavailable": "Primary key or unique index metadata could not be loaded, so changes cannot be submitted safely.", - "data_viewer.read_only.reason.index_metadata_unavailable": "Unique index metadata could not be loaded, so changes cannot be submitted safely.", - "data_viewer.read_only.reason.no_safe_locator": "No primary key or usable unique index was found, so changes cannot be submitted safely.", - "data_viewer.read_only.reason.oracle_rowid_missing": "No primary key or usable unique index was found, and Oracle ROWID is missing from the result set, so changes cannot be submitted safely.", - "data_viewer.read_only.reason.primary_key_column_missing": "The result set is missing primary key column {{columns}}, so changes cannot be submitted safely.", - "data_viewer.read_only.warning.table": "Table {{target}} remains read-only: {{reason}}", - "data_viewer.read_only.warning.collection": "Collection {{target}} remains read-only: {{reason}}", - "data_viewer.sql_log.phase.main_query": "Main query", - "data_viewer.sql_log.phase.complex_type_fallback_retry": "Complex type fallback retry", - "data_viewer.sql_log.phase.sort_buffer_retry": "Retry ({{size}} sort_buffer)", - "definition_viewer.object.view": "View", - "definition_viewer.object.materialized_view": "Materialized view", - "definition_viewer.object.routine": "Function/procedure", - "definition_viewer.object.event": "Event", - "definition_viewer.loading.view_definition": "Loading view definition...", - "definition_viewer.loading.routine_definition": "Loading function/procedure definition...", - "definition_viewer.loading.event_definition": "Loading event definition...", - "definition_viewer.error.load_failed": "Load failed", - "definition_viewer.error.connection_not_found": "Database connection not found", - "definition_viewer.error.view_name_empty": "View name is empty", - "definition_viewer.error.event_name_empty": "Event name is empty", - "definition_viewer.error.routine_name_empty": "Function/procedure name is empty", - "definition_viewer.error.query_failed": "Failed to query definition", - "definition_viewer.error.query_failed_detail": "Failed to query definition: {{detail}}", - "definition_viewer.field.database": "Database", - "definition_viewer.field.type": "Type", - "definition_viewer.editor.unsupported_view_definition": "This database type does not support viewing view definitions", - "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite does not support function/procedure definition management", - "definition_viewer.editor.unsupported_routine_definition": "This database type does not support viewing function/procedure definitions", - "definition_viewer.editor.unsupported_event_definition": "This database type does not support viewing event definitions", - "definition_viewer.editor.unsupported_object_definition": "This object definition is not supported", - "definition_viewer.editor.view_definition_not_found": "View definition not found", - "definition_viewer.editor.routine_definition_not_found": "Function/procedure definition not found", - "definition_viewer.editor.event_definition_not_found": "Event definition not found", - "definition_viewer.editor.object_definition_not_found": "{{object}} definition not found", - "definition_viewer.editor.metadata_fallback.header": "The current data source did not return executable definition text; metadata was returned", - "definition_viewer.editor.metadata_fallback.name_label": "Name", - "definition_viewer.editor.metadata_fallback.type_label": "Type", - "definition_viewer.editor.event_fragment_fallback.header": "The current data source did not return a complete CREATE EVENT statement; an event definition fragment was returned", - "definition_viewer.editor.sphinx.empty_result": "Current Sphinx instance{{version}} returned no {{object}} definition.", - "definition_viewer.editor.sphinx.compat_queries_hint": "Multiple compatibility queries were executed. This may be due to version capability limits or an unsupported object type.", - "definition_viewer.editor.sphinx.unsupported_query": "Current Sphinx instance{{version}} does not support querying {{object}} definitions.", - "definition_viewer.editor.sphinx.failed_message_label": "Returned failure message", - "definition_viewer.editor.sphinx.failed_message_unknown": "Returned failure message: Unknown error", - "definition_viewer.editor.sphinx.version_suffix": " (version: {{version}})", - "trigger_viewer.loading.definition": "Loading trigger definition...", - "trigger_viewer.error.load_failed": "Load failed", - "trigger_viewer.error.connection_not_found": "Database connection not found", - "trigger_viewer.error.trigger_name_empty": "Trigger name is empty", - "trigger_viewer.error.query_failed": "Failed to query trigger definition", - "trigger_viewer.error.query_failed_detail": "Failed to query trigger definition: {{detail}}", - "trigger_viewer.field.trigger": "Trigger", - "trigger_viewer.field.database": "Database", - "trigger_viewer.editor.unsupported.duckdb": "DuckDB does not support triggers", - "trigger_viewer.editor.unsupported.tdengine": "TDengine does not support triggers", - "trigger_viewer.editor.unsupported.mongodb": "MongoDB does not support triggers", - "trigger_viewer.editor.unsupported.generic": "This database type does not support viewing trigger definitions", - "trigger_viewer.editor.definition_not_found": "Trigger definition not found", - "trigger_viewer.editor.sphinx.version_suffix": " (version: {{version}})", - "trigger_viewer.editor.sphinx.empty_result": "Current Sphinx instance{{version}} returned no trigger definition.", - "trigger_viewer.editor.sphinx.compat_queries_hint": "Multiple compatibility queries were executed. This may be due to version capability limits or an unsupported object type.", - "trigger_viewer.editor.sphinx.unsupported_query": "Current Sphinx instance{{version}} does not support querying trigger definitions.", - "trigger_viewer.editor.sphinx.failed_message_label": "Returned failure message", - "trigger_viewer.editor.sphinx.failed_message_unknown": "Returned failure message: Unknown error", - "data_grid.modal.export_options.all_data": "Export all data", - "data_grid.modal.export_options.current_page": "Export current page ({{count}} rows)", - "data_grid.modal.export_options.filtered_results": "Filtered results", - "data_grid.modal.export_options.no_rows_selected": "No rows are selected. Choose an export scope:", - "data_grid.modal.export_options.title": "Export options", - "data_grid.modal.export_options.whole_table": "Whole table", - "data_grid.page_find.next": "Next", - "data_grid.page_find.placeholder": "Find in current page...", - "data_grid.page_find.previous": "Previous", - "data_grid.page_find.summary": "{{occurrences}} matches / {{cells}} cells", - "data_grid.page_find.tooltip": "Find only in loaded rows on the current page. WHERE conditions are not changed.", - "data_grid.preview_panel.no_cell_description": "Click a table cell to preview the full data", - "data_grid.preview_panel.no_cell_title": "Click a cell to view data", - "data_grid.record_view.edit_current": "Edit current record", - "data_grid.record_view.edit_json": "Edit JSON", - "data_grid.record_view.empty": "No data in the current result set", - "data_grid.record_view.json_record_count": "Current result set: {{count}} records", - "data_grid.record_view.next": "Next", - "data_grid.record_view.previous": "Previous", - "data_grid.record_view.record_position": "Record {{current}} / {{total}}", - "data_grid.pagination.jump_action": "Go", - "data_grid.pagination.jump_aria": "Jump to page", - "data_grid.pagination.jump_label": "Jump", - "data_grid.pagination.page.current": "Page {{current}}", - "data_grid.pagination.page.known": "Page {{current}} / {{totalPages}}", - "data_grid.pagination.page_size_aria": "Rows per page", - "data_grid.pagination.page_size_option": "{{count}} rows / page", - "data_grid.pagination.result_set": "Result set", - "data_grid.pagination.summary.approximate": "Current {{current}} rows / about {{total}} rows", - "data_grid.pagination.summary.cancelled": "Current {{current}} rows / count cancelled", - "data_grid.pagination.summary.counting": "Current {{current}} rows / counting total...", - "data_grid.pagination.summary.counting_exact": "Current {{current}} rows / counting exact total...", - "data_grid.pagination.summary.empty": "Current 0 rows / 0 rows total", - "data_grid.pagination.summary.known": "Current {{current}} rows / {{total}} rows total", - "data_grid.pagination.summary.not_counted": "Current {{current}} rows / total not counted", - "data_grid.secondary.column_display": "Column display", - "data_grid.secondary.data_preview": "Data preview", - "data_grid.secondary.er_diagram": "ER diagram", - "data_grid.secondary.jump_column": "Jump column", - "data_grid.secondary.live": "live", - "data_grid.secondary.object_design": "Object design", - "data_grid.embedded_designer.title": "Design table ({{tableName}})", - "data_grid.secondary.pending_changes": "Pending {{count}}", - "data_grid.secondary.row_count": "{{count}} rows", - "data_grid.secondary.view_ddl": "View DDL", - "data_grid.row_editor.popup_edit": "Edit in popup", - "data_grid.row_editor.title": "Edit row", - "data_grid.toolbar.add_row": "Add row", - "data_grid.toolbar.ai_insight": "AI data insight", - "data_grid.toolbar.ai_insight_short": "AI insight", - "data_grid.toolbar.ai_insight_tooltip": "Ask AI to analyze the current query page data", - "data_grid.toolbar.batch_fill": "Batch fill ({{count}})", - "data_grid.toolbar.cancel_count": "Cancel count", - "data_grid.toolbar.cancel_count_tooltip": "Cancel this exact total count. Current browsing is not affected.", - "data_grid.toolbar.cell_editor": "Cell editor", - "data_grid.toolbar.commit": "Commit transaction ({{count}})", - "data_grid.toolbar.commit_label": "Commit transaction", - "data_grid.toolbar.commit_delay.seconds": "{{seconds}}s", - "data_grid.toolbar.commit_mode.auto": "Auto commit", - "data_grid.toolbar.commit_mode.auto_countdown": "Commit in {{seconds}}s", - "data_grid.toolbar.commit_mode.manual": "Manual commit", - "data_grid.toolbar.commit_mode.tooltip": "Controls how table edits are committed. Manual commit is safer; auto commit runs after the selected delay following the last edit.", - "data_grid.toolbar.copied_columns_count": "{{count}} copied columns", - "data_grid.toolbar.copy": "Copy", - "data_grid.toolbar.copy_row": "Copy row", - "data_grid.toolbar.copy_selection": "Copy selection ({{count}})", - "data_grid.toolbar.copy_selection_columns": "Copy selection column values ({{count}})", - "data_grid.toolbar.count_total": "Count total", - "data_grid.toolbar.count_total_tooltip": "Count the exact total with the current filter", - "data_grid.toolbar.delete_selected": "Delete selected", - "data_grid.toolbar.export": "Export", - "data_grid.toolbar.filter": "Filter", - "data_grid.toolbar.import": "Import", - "data_grid.toolbar.paste_row": "Paste row", - "data_grid.toolbar.paste_row_count": "Paste row ({{count}})", - "data_grid.toolbar.paste_to_selected_rows": "Paste to selected rows ({{count}})", - "data_grid.toolbar.preview_sql": "Preview SQL", - "data_grid.toolbar.preview_sql_generate": "Generate preview SQL", - "data_grid.toolbar.refresh": "Refresh", - "data_grid.toolbar.rollback": "Rollback", - "data_grid.toolbar.selected_count": "{{count}} selected", - "data_grid.toolbar.undo_delete": "Undo delete", - "data_grid.view.edit_current_record": "Edit current record", - "data_grid.view.edit_json": "Edit JSON", - "data_grid.view.empty_result": "Current result set has no data", - "data_grid.view.next_record": "Next record", - "data_grid.view.previous_record": "Previous record", - "data_grid.view.record_count": "Current result set: {{count}} records", - "data_grid.view.record_position": "Record {{current}} / {{total}}", - "data_grid.view.result_view": "Result view", - "data_grid.view.table": "Table", - "data_grid.view.text": "Text", - "table_designer.action.add": "Add", - "table_designer.action.add_after_selected": "Add after selected column", - "table_designer.action.add_column": "Add column", - "table_designer.action.apply": "Apply", - "table_designer.action.cancel": "Cancel", - "table_designer.action.copy_selected_to_new_table": "Copy selected to new table", - "table_designer.action.create": "Create", - "table_designer.action.create_table": "Create table", - "table_designer.action.delete": "Delete", - "table_designer.action.edit": "Edit", - "table_designer.action.execute": "Execute", - "table_designer.action.refresh": "Refresh", - "table_designer.action.refresh_anyway": "Refresh anyway", - "table_designer.action.save": "Save", - "table_designer.action.table_comment": "Table comment", - "table_designer.action.view_statement": "View statement", - "table_designer.column.actions": "Actions", - "table_designer.column.auto_increment": "Auto increment", - "table_designer.column.comment": "Comment", - "table_designer.column.default": "Default", - "table_designer.column.name": "Name", - "table_designer.column.not_null": "Not NULL", - "table_designer.column.primary_key": "Primary key", - "table_designer.column.type": "Type", - "table_designer.empty.triggers": "This table has no triggers", - "table_designer.fallback.empty": "(empty)", - "table_designer.fallback.unknown_error": "Unknown error", - "table_designer.fallback.unnamed_foreign_key": "(unnamed foreign key)", - "table_designer.fallback.unnamed_index": "(unnamed index)", - "table_designer.foreign_key.column.constraint_name": "Constraint name", - "table_designer.foreign_key.column.fields": "Fields", - "table_designer.foreign_key.column.ref_fields": "Referenced fields", - "table_designer.foreign_key.column.ref_table": "Referenced table", - "table_designer.index.column.fields": "Fields", - "table_designer.index.column.name": "Index name", - "table_designer.index.column.type": "Index type", - "table_designer.index.column.uniqueness": "Uniqueness", - "table_designer.index.kind.fulltext": "Full-text index", - "table_designer.index.kind.normal": "Normal index", - "table_designer.index.kind.normal_nonclustered": "Normal index (non-clustered)", - "table_designer.index.kind.primary_clustered": "Primary key index (clustered)", - "table_designer.index.kind.spatial": "Spatial index", - "table_designer.index.kind.unique": "Unique index", - "table_designer.index.uniqueness.normal": "Normal", - "table_designer.index.uniqueness.unique": "Unique", - "table_designer.label.create_statement": "Create statement for {{name}}", - "table_designer.label.create_statement_plain": "Create statement", - "table_designer.message.add_at_least_one_column": "Add at least one column", - "table_designer.message.columns_copied_to_new_table": "Copied {{count}} columns to new table {{table}}", - "table_designer.message.connection_not_found": "Connection not found", - "table_designer.message.delete_failed": "Delete failed: {{detail}}", - "table_designer.message.drop_old_trigger_failed": "Failed to drop the old trigger: {{detail}}", - "table_designer.message.execution_failed": "Execution failed: {{detail}}", - "table_designer.message.execution_failed_plain": "Execution failed", - "table_designer.message.execution_failed_prefix": "Execution failed: ", - "table_designer.message.foreign_key_column_count_mismatch": "The number of local fields must match the number of referenced fields", - "table_designer.message.foreign_key_created": "Foreign key created", - "table_designer.message.foreign_key_delete_unsupported": "This database does not support deleting this foreign key here", - "table_designer.message.foreign_key_deleted": "Foreign key deleted", - "table_designer.message.foreign_key_maintenance_unsupported": "This database does not support foreign key maintenance here", - "table_designer.message.foreign_key_name_exists": "Foreign key constraint already exists: {{name}}", - "table_designer.message.foreign_key_name_required": "Enter a foreign key constraint name", - "table_designer.message.foreign_key_updated": "Foreign key updated", - "table_designer.message.index_created": "Index created", - "table_designer.message.index_create_sql_unavailable": "Unable to generate index creation SQL", - "table_designer.message.index_create_sql_placeholder": "Index creation SQL is unavailable", - "table_designer.message.index_delete_named_unsupported": "This database does not support deleting index \"{{name}}\"", - "table_designer.message.index_delete_unsupported": "This database does not support deleting this index", - "table_designer.message.index_deleted": "Index deleted", - "table_designer.message.index_kind_unsupported": "This database does not support this index type", - "table_designer.message.index_maintenance_unsupported": "This database does not support index maintenance here", - "table_designer.message.index_name_exists": "Index name already exists: {{name}}", - "table_designer.message.index_name_required": "Enter an index name", - "table_designer.message.index_restore_failed": "{{detail}}; failed to restore the original index: {{restoreDetail}}", - "table_designer.message.index_restore_unavailable": "{{detail}}; the original index could not be restored automatically. Check it as soon as possible.", - "table_designer.message.index_restored_after_failure": "{{detail}}; the original index was restored automatically.", - "table_designer.message.index_updated": "Index updated", - "table_designer.message.indexes_deleted": "{{count}} indexes deleted", - "table_designer.message.load_columns_failed": "Failed to load columns: {{detail}}", - "table_designer.message.no_changes_detected": "No changes detected", - "table_designer.message.no_copyable_columns": "No copyable columns selected", - "table_designer.message.no_index_changes": "No index changes detected", - "table_designer.message.only_normal_unique_index_supported": "This database only supports maintaining normal and unique indexes", - "table_designer.message.ref_columns_required": "Enter at least one referenced field", - "table_designer.message.ref_table_required": "Enter a referenced table", - "table_designer.message.relational_index_unsupported": "This data source does not support relational index maintenance", - "table_designer.message.schema_saved_alter": "Table structure updated.", - "table_designer.message.schema_saved_create": "Table created.", - "table_designer.message.select_at_least_one_column": "Select at least one column", - "table_designer.message.select_column_before_insert": "Select a column before inserting.", - "table_designer.message.select_columns_to_copy": "Select columns to copy first", - "table_designer.message.select_index_to_delete": "Select an index to delete first", - "table_designer.message.select_local_columns": "Select at least one local field", - "table_designer.message.select_one_foreign_key": "Select one foreign key first", - "table_designer.message.select_one_index": "Select one index first", - "table_designer.message.statement_execution_failed_prefix": "Statement {{current}}/{{total}} failed: ", - "table_designer.message.switch_index_kind": "Switch Index category to {{kind}} index", - "table_designer.message.table_comment_unsupported": "This database does not support editing table comments here", - "table_designer.message.table_comment_updated": "Table comment updated", - "table_designer.message.table_name_required": "Enter a table name", - "table_designer.message.target_table_required": "Enter a target table name", - "table_designer.message.trigger_created": "Trigger created", - "table_designer.message.trigger_deleted": "Trigger deleted", - "table_designer.message.trigger_updated": "Trigger updated", - "table_designer.modal.column_comment_title": "Column comment", - "table_designer.modal.column_comment_title_named": "Column comment - {{name}}", - "table_designer.modal.confirm_sql_title": "Confirm SQL changes", - "table_designer.modal.copy_columns_title": "Copy selected columns to new table", - "table_designer.modal.delete_foreign_key_content": "Delete foreign key constraint \"{{name}}\"?", - "table_designer.modal.delete_foreign_key_title": "Delete foreign key", - "table_designer.modal.delete_index_many": "Delete these {{count}} indexes?\n{{names}}", - "table_designer.modal.delete_index_one": "Delete index {{names}}?", - "table_designer.modal.delete_index_title": "Delete index", - "table_designer.modal.delete_trigger_content": "Delete trigger \"{{name}}\"? This cannot be undone.", - "table_designer.modal.delete_trigger_title": "Delete trigger", - "table_designer.modal.foreign_key_create_title": "Add foreign key", - "table_designer.modal.foreign_key_edit_title": "Edit foreign key", - "table_designer.modal.index_create_title": "Add index", - "table_designer.modal.index_edit_title": "Edit index", - "table_designer.modal.table_comment_title": "Edit table comment", - "table_designer.modal.trigger_create_title": "Add trigger", - "table_designer.modal.trigger_detail_title": "Trigger details", - "table_designer.modal.trigger_detail_title_named": "Trigger: {{name}}", - "table_designer.modal.trigger_edit_title": "Edit trigger", - "table_designer.modal.unsaved_changes_content": "Refreshing will discard the unsaved column changes in the current draft. Refresh and overwrite the draft anyway?", - "table_designer.modal.unsaved_changes_title": "Unsaved column changes", - "table_designer.notice.foreign_key_readonly": "This database does not support foreign key editing here. View only.", - "table_designer.notice.foreign_key_replace_hint": "Editing a foreign key drops the old foreign key first, then creates the new one.", - "table_designer.notice.index_readonly": "This database does not support index editing here. View only.", - "table_designer.notice.index_restore_hint": "When editing an index, the system will try to restore the original index if creating the new one fails.", - "table_designer.notice.sql_irreversible": "Review the SQL carefully. Execution cannot be undone.", - "table_designer.notice.sql_statement_irreversible": "Review the SQL statement carefully. Execution cannot be undone.", - "table_designer.notice.trigger_replace_hint": "Editing a trigger drops the original trigger first, then creates a new trigger.", - "table_designer.option.default": "Default", - "table_designer.option.recommended_suffix": "(Recommended)", - "table_designer.placeholder.column_comment": "Enter a column comment", - "table_designer.placeholder.foreign_key_name": "Foreign key constraint name, for example fk_order_user", - "table_designer.placeholder.index_columns": "Select index columns; selection order is used", - "table_designer.placeholder.index_name": "Index name, for example idx_user_name", - "table_designer.placeholder.local_columns": "Select local fields; order must match referenced fields", - "table_designer.placeholder.primary_index_name": "Primary key index uses fixed name: PRIMARY", - "table_designer.placeholder.ref_columns": "Enter referenced fields; multiple values supported", - "table_designer.placeholder.ref_table": "Referenced table; db.table is supported", - "table_designer.placeholder.table_comment": "Enter a table comment", - "table_designer.placeholder.table_name": "Enter a table name", - "table_designer.placeholder.target_table_name": "Enter a target table name", - "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB cannot persist column comments through COMMENT ON COLUMN. The comment for column {{column}} remains only in the designer preview.", - "table_designer.schema_sql.limited_column_hint": "-- {{dialect}} column constraint, default, and comment syntax differs from MySQL. MySQL-only clauses were skipped; add dialect-specific SQL before running.", - "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite cannot alter column properties directly. Rebuild the table, migrate data, and replace the old table for column {{column}}.", - "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server requires the original constraint name to drop the old primary key. Confirm it on the indexes tab before deleting.", - "table_designer.schema_sql.tdengine.timestamp_hint": "-- TDengine regular tables usually require a TIMESTAMP column. Confirm the table model before running.", - "table_designer.starrocks.table_kind.olap": "OLAP table", - "table_designer.starrocks.table_kind.external": "External table", - "table_designer.starrocks.key_model.duplicate": "Duplicate key", - "table_designer.starrocks.key_model.unique": "Unique key", - "table_designer.starrocks.key_model.aggregate": "Aggregate key", - "table_designer.starrocks.placeholder.key_columns": "Key columns, for example id, date", - "table_designer.starrocks.placeholder.partition_clause": "Partition clause, for example PARTITION BY RANGE(date_col)(...)", - "table_designer.starrocks.distribution.hash": "Hash distribution", - "table_designer.starrocks.distribution.random": "Random distribution", - "table_designer.starrocks.distribution.none": "No distribution", - "table_designer.starrocks.placeholder.distribution_columns": "Distribution columns, for example user_id", - "table_designer.starrocks.bucket_mode.auto": "Auto buckets", - "table_designer.starrocks.bucket_mode.number": "Fixed bucket count", - "table_designer.starrocks.placeholder.bucket_count": "Buckets", - "table_designer.selection.columns_selected": "{{count}} columns selected", - "table_designer.selection.foreign_key_selected": "Selected: {{name}}", - "table_designer.selection.indexes_selected": "{{count}} indexes selected", - "table_designer.selection.trigger_prompt": "Click to select a trigger", - "table_designer.selection.trigger_selected": "Selected: {{name}}", - "table_designer.sql_preview.change.add": "Add change", - "table_designer.sql_preview.change.comment": "Comment change", - "table_designer.sql_preview.change.constraint": "Constraint change", - "table_designer.sql_preview.change.create": "New table structure", - "table_designer.sql_preview.change.drop": "Drop change", - "table_designer.sql_preview.change.modify": "Column property change", - "table_designer.sql_preview.change.rename": "Rename change", - "table_designer.summary.indexes": "Indexes: {{count}}, indexed fields: {{fields}}", - "table_designer.summary.columns": "{{count}} columns", - "table_designer.status.read_only": "Read only", - "table_designer.title.untitled_table": "Untitled table", - "table_designer.title.default_database": "Default database", - "table_designer.title.schema_designer": "Schema designer", - "table_designer.tab.columns": "Columns", - "table_designer.tab.foreign_keys": "Foreign keys", - "table_designer.tab.indexes": "Indexes", - "table_designer.tab.triggers": "Triggers", - "table_designer.table_comment.current": "Current comment: {{comment}}", - "table_designer.tooltip.edit_comment_popup": "Edit comment in popup", - "table_designer.trigger.column.event": "Event", - "table_designer.trigger.column.name": "Name", - "table_designer.trigger.column.timing": "Timing", - "table_designer.trigger.definition_unavailable": "Unable to get the full trigger definition", - "table_designer.trigger.field.event": "Event", - "table_designer.trigger.field.timing": "Timing", - "table_designer.trigger.template.body_comment": "Trigger logic", - "table_designer.trigger.template.enter_create": "Enter a CREATE TRIGGER statement", - "redis_command.action.clear_console": "Clear console", - "redis_command.action.execute": "Run (Cmd+Enter)", - "redis_command.completion.detail": "Redis command", - "redis_command.message.command_required": "Enter a command to run", - "redis_command.output.empty_hint": "Run commands in this console; results are shown as returned.", - "redis_command.output.selection_tip": "Tip: select any lines and press Ctrl + Enter to run only that selection.", - "redis_command.output.title": "Execution output", - "redis_command.state.connection_not_found": "Connection not found", - "redis_command.title.console": "Redis Console", - "redis.backend.message.connect_success": "Connection succeeded", - "redis.backend.message.set_success": "Set succeeded", - "redis.backend.message.select_db_success": "Database switched", - "redis.backend.message.rename_success": "Rename succeeded", - "redis.backend.message.delete_success": "Delete succeeded", - "redis.backend.message.add_success": "Add succeeded", - "redis.backend.message.flush_success": "Flush succeeded", - "redis.backend.error.command_required": "Command cannot be empty", - "redis.backend.error.argument_required": "{{name}} is required", - "redis.backend.error.argument_invalid_type": "{{name}} has an invalid type", - "redis.backend.error.address_required": "Redis connection address cannot be empty", - "redis.backend.error.node_address_required": "Redis node address cannot be empty", - "redis.backend.error.invalid_node_address": "Invalid Redis node address: {{address}}", - "redis.backend.error.invalid_port": "Invalid Redis port: {{address}}", - "redis_monitor.action.pause_refresh": "Pause refresh", - "redis_monitor.action.refresh_now": "Refresh now", - "redis_monitor.action.resume_refresh": "Resume refresh", - "redis_monitor.chart.clients_keys": "Connection info (Clients & Keys)", - "redis_monitor.chart.cpu_usage": "CPU usage", - "redis_monitor.chart.memory": "Memory overhead", - "redis_monitor.chart.qps": "Request throughput (QPS)", - "redis_monitor.message.fetch_failed": "Failed to fetch Redis info: {{detail}}", - "redis_monitor.metric.blocked_clients": "Blocked: {{value}}", - "redis_monitor.metric.clients": "Clients", - "redis_monitor.metric.days": "Days: {{value}}", - "redis_monitor.metric.memory_peak": "Peak: {{value}}", - "redis_monitor.metric.memory_used": "Used memory", - "redis_monitor.metric.ops": "Throughput (OPS)", - "redis_monitor.metric.uptime": "Uptime", - "redis_monitor.series.clients": "Clients", - "redis_monitor.series.rss_memory": "RSS memory", - "redis_monitor.series.system": "System", - "redis_monitor.series.total_keys": "Total Keys", - "redis_monitor.series.used_memory": "Used memory", - "redis_monitor.series.user": "User", - "redis_monitor.server_details.title": "Detailed server parameters", - "redis_monitor.state.connection_not_found": "Connection not found", - "redis_monitor.title.instance": "Redis instance monitor", - "redis_viewer.action.add_field": "Add field", - "redis_viewer.action.add_list_head": "Push to head", - "redis_viewer.action.add_list_tail": "Push to tail", - "redis_viewer.action.add_member": "Add member", - "redis_viewer.action.add_stream_entry": "Add entry", - "redis_viewer.action.clear_group_selection": "Clear selection", - "redis_viewer.action.clear_selection": "Clear selection", - "redis_viewer.action.copy": "Copy", - "redis_viewer.action.copy_key_name": "Copy Key name", - "redis_viewer.action.copy_value": "Copy value", - "redis_viewer.action.delete_key": "Delete Key", - "redis_viewer.action.delete_selected": "Delete selected ({{count}})", - "redis_viewer.action.edit": "Edit", - "redis_viewer.action.load_more": "Load more", - "redis_viewer.action.new_key": "New", - "redis_viewer.action.refresh": "Refresh", - "redis_viewer.action.rename_key": "Rename Key", - "redis_viewer.action.select_all_loaded": "Select all loaded", - "redis_viewer.action.select_group": "Select", - "redis_viewer.action.set_ttl": "Set TTL", - "redis_viewer.aria.collapse_group": "Collapse group", - "redis_viewer.aria.expand_group": "Expand group", - "redis_viewer.confirm.delete_field": "Delete this field?", - "redis_viewer.confirm.delete_key": "Delete Key \"{{key}}\"?", - "redis_viewer.confirm.delete_member": "Delete this member?", - "redis_viewer.confirm.delete_selected": "Delete the selected {{count}} Keys?", - "redis_viewer.confirm.delete_stream_entry": "Delete this Stream entry?", - "redis_viewer.field.field_name": "Field name", - "redis_viewer.field.fields_json": "Fields JSON:", - "redis_viewer.field.key": "Key", - "redis_viewer.field.member": "Member:", - "redis_viewer.field.new_key_name": "New Key name", - "redis_viewer.field.new_score": "New score:", - "redis_viewer.field.score": "Score:", - "redis_viewer.field.stream_id": "ID (optional, default *):", - "redis_viewer.field.ttl_seconds": "TTL (seconds)", - "redis_viewer.field.value": "Value", - "redis_viewer.help.ttl_forever": "-1 means no expiration", - "redis_viewer.hint.binary_readonly": "Binary data cannot be edited", - "redis_viewer.hint.switch_auto_to_edit": "Switch to Auto mode to edit", - "redis_viewer.label.encoding": "Encoding: {{encoding}}", - "redis_viewer.label.keys_count": "{{count}} Keys", - "redis_viewer.label.node_count": "{{count}} nodes", - "redis_viewer.label.length": "Length: {{count}}", - "redis_viewer.label.original_key": "Original Key: {{key}}", - "redis_viewer.message.add_failed": "Add failed: {{detail}}", - "redis_viewer.message.add_success": "Added", - "redis_viewer.message.add_success_with_id": "Added{{id}}", - "redis_viewer.message.copied": "Copied", - "redis_viewer.message.copy_failed": "Copy failed", - "redis_viewer.message.create_failed": "Create failed: {{detail}}", - "redis_viewer.message.create_success": "Created", - "redis_viewer.message.delete_failed": "Delete failed: {{detail}}", - "redis_viewer.message.delete_success": "Deleted", - "redis_viewer.message.deleted_keys": "Deleted {{count}} Keys", - "redis_viewer.message.fields_json_invalid": "Fields JSON is invalid", - "redis_viewer.message.fields_must_be_json_object": "Fields must be a JSON object", - "redis_viewer.message.fields_required": "Provide at least one field", - "redis_viewer.message.key_check_failed": "Failed to check target Key: {{detail}}", - "redis_viewer.message.key_missing_removed": "Key no longer exists or has expired, and was removed from the list", - "redis_viewer.message.key_name_copied": "Key name copied", - "redis_viewer.message.load_keys_failed": "Failed to load Keys: {{detail}}", - "redis_viewer.message.new_key_name_required": "Enter the new Key name", - "redis_viewer.message.rename_failed": "Rename failed: {{detail}}", - "redis_viewer.message.rename_same_key": "The new Key name must differ from the original", - "redis_viewer.message.rename_success": "Key renamed", - "redis_viewer.message.save_failed": "Save failed: {{detail}}", - "redis_viewer.message.save_success": "Saved", - "redis_viewer.message.set_failed": "Set failed: {{detail}}", - "redis_viewer.message.stream_entry_not_deleted": "No Stream entry was deleted; it may no longer exist", - "redis_viewer.message.target_key_exists": "Target Key already exists: {{key}}", - "redis_viewer.message.ttl_set_success": "TTL updated", - "redis_viewer.message.update_failed": "Update failed: {{detail}}", - "redis_viewer.message.update_success": "Updated", - "redis_viewer.message.value_load_failed": "Failed to get value: {{detail}}", - "redis_viewer.modal.add_element": "Add element", - "redis_viewer.modal.add_element_head": "Add element to head", - "redis_viewer.modal.add_field": "Add field", - "redis_viewer.modal.add_member": "Add member", - "redis_viewer.modal.add_stream_entry": "Add Stream entry", - "redis_viewer.modal.edit_field": "Edit field: {{field}}", - "redis_viewer.modal.edit_index": "Edit index {{index}}", - "redis_viewer.modal.edit_value": "Edit value", - "redis_viewer.modal.new_key": "New Key", - "redis_viewer.modal.rename_key": "Rename Key", - "redis_viewer.modal.set_ttl": "Set TTL", - "redis_viewer.modal.update_score": "Update score", - "redis_viewer.notice.large_keyspace_mode": "Large keyspace performance mode is enabled. Node rendering is simplified and up to {{count}} expanded groups are kept.", - "redis_viewer.placeholder.key_name": "Key name", - "redis_viewer.placeholder.member_value": "Enter member value", - "redis_viewer.placeholder.new_element_value": "Enter new element value", - "redis_viewer.placeholder.new_key_name": "new:key:name", - "redis_viewer.placeholder.new_member_value": "Enter new member value", - "redis_viewer.placeholder.search_exact": "Enter full Key or namespace for exact search", - "redis_viewer.placeholder.search_fuzzy": "Search Keys (fuzzy match)", - "redis_viewer.placeholder.stream_id": "For example: * or 1723110000000-0", - "redis_viewer.placeholder.value": "Value", - "redis_viewer.search.exact": "Exact", - "redis_viewer.search.fuzzy": "Fuzzy", - "redis_viewer.topology.cluster": "Cluster", - "redis_viewer.topology.sentinel": "Sentinel", - "redis_viewer.topology.single": "Single", - "redis_viewer.state.connection_not_found": "Connection not found", - "redis_viewer.state.empty_selection": "Select a Key to view details", - "redis_viewer.table.action": "Actions", - "redis_viewer.table.field": "Field", - "redis_viewer.table.fields": "Fields", - "redis_viewer.table.index": "Index", - "redis_viewer.table.member": "Member", - "redis_viewer.table.score": "Score", - "redis_viewer.table.value": "Value", - "redis_viewer.title.active_key": "Active Key", - "redis_viewer.title.key_explorer": "Key Explorer", - "redis_viewer.title.namespace_key": "Namespace / Key", - "redis_viewer.title.type_ttl": "Type / TTL", - "redis_viewer.tooltip.copy_fields_json": "Copy fields JSON", - "redis_viewer.tooltip.copy_id": "Copy ID", - "redis_viewer.tooltip.copy_key_name": "Copy Key name", - "redis_viewer.tooltip.copy_value": "Copy value", - "redis_viewer.tooltip.resize_panels": "Drag to resize", - "redis_viewer.ttl.days_hours": "{{days}}d {{hours}}h", - "redis_viewer.ttl.expired": "Expired", - "redis_viewer.ttl.forever": "Persistent", - "redis_viewer.ttl.hours_minutes": "{{hours}}h {{minutes}}m", - "redis_viewer.ttl.minutes_seconds": "{{minutes}}m {{seconds}}s", - "redis_viewer.ttl.seconds": "{{seconds}}s", - "redis_viewer.validation.key_required": "Enter a Key", - "redis_viewer.validation.new_key_name_required": "Enter the new Key name", - "redis_viewer.validation.value_required": "Enter a value", - "redis_viewer.view.auto": "Auto", - "redis_viewer.view.hex": "Hex", - "redis_viewer.view.text": "Raw text", - "redis_viewer.view.title": "View mode", - "ai_chat.header.default_session_title": "New chat", - "ai_chat.header.export_time": "Exported at:", - "ai_chat.header.export_user": "You", - "ai_chat.header.tooltip.close": "Close panel", - "ai_chat.header.tooltip.export_markdown": "Export as Markdown", - "ai_chat.header.tooltip.history": "Chat history", - "ai_chat.header.tooltip.new_chat": "New chat", - "ai_chat.header.tooltip.new_chat_clear": "New chat (clear current)", - "ai_chat.header.tooltip.settings": "AI settings", - "ai_chat.header.session.connected": "{{title}} · Connected", - "ai_chat.header.mode_tabs.aria_label": "AI work mode", - "ai_chat.header.mode.chat": "Chat", - "ai_chat.header.mode.insights": "Auto insights", - "ai_chat.header.mode.history": "History", - "ai_chat.header.action.export": "Export", - "ai_chat.history.action.new_chat": "Start new chat", - "ai_chat.history.default_session_title": "New chat", - "ai_chat.history.empty.no_matches": "No matching chats", - "ai_chat.history.search.placeholder": "Search history...", - "ai_chat.history.title": "Chat history", - "ai_chat.history.tooltip.collapse": "Collapse", - "ai_chat.history.tooltip.delete": "Delete", - "ai_chat.welcome.description.default": "I am your database assistant. I can help generate SQL queries, analyze schemas, explain execution logic, and optimize database performance.", - "ai_chat.welcome.description.with_context": "{{count}} table structures are linked. Use the quick actions below to start analysis.", - "ai_chat.welcome.title": "Hi, I am GoNavi AI", - "ai_chat.quick_action.explain_schema": "🔍 Explain schema", - "ai_chat.quick_action.explain_schema.hint.with_context": "Explain fields and constraints", - "ai_chat.quick_action.explain_schema.prompt.with_context": "Explain the design intent and field meanings of these tables in detail: {{tables}}", - "ai_chat.quick_action.explain_schema.title": "Explain schema", - "ai_chat.quick_action.explain_sql": "🔍 Explain SQL", - "ai_chat.quick_action.explain_sql.hint.default": "Explain execution logic", - "ai_chat.quick_action.explain_sql.prompt.default": "Explain how this SQL statement runs:\n```sql\n\n```", - "ai_chat.quick_action.explain_sql.title": "Explain SQL", - "ai_chat.quick_action.generate_sql": "📝 Generate SQL", - "ai_chat.quick_action.generate_sql.hint.default": "Generate a query from natural language", - "ai_chat.quick_action.generate_sql.hint.with_context": "Generate a query from natural language", - "ai_chat.quick_action.generate_sql.prompt.default": "Generate a query from the current database table structure:", - "ai_chat.quick_action.generate_sql.prompt.with_context": "Generate a commonly used query for these table structures: {{tables}}", - "ai_chat.quick_action.generate_sql.title": "Generate SQL", - "ai_chat.quick_action.optimize": "⚡ Optimization tips", - "ai_chat.quick_action.optimize.hint.default": "Performance and index suggestions", - "ai_chat.quick_action.optimize.hint.with_context": "Indexes, normalization, and risk checks", - "ai_chat.quick_action.optimize.prompt.default": "Analyze the performance of this SQL statement and suggest optimizations:\n```sql\n\n```", - "ai_chat.quick_action.optimize.prompt.with_context": "Analyze the structure design of these tables and suggest index and query performance optimizations: {{tables}}", - "ai_chat.quick_action.optimize.title": "Optimization tips", - "ai_chat.quick_action.schema_analysis": "🏗️ Schema analysis", - "ai_chat.quick_action.schema_analysis.hint.default": "Analyze structural quality", - "ai_chat.quick_action.schema_analysis.hint.with_context": "Table relationships and dependency graph", - "ai_chat.quick_action.schema_analysis.prompt.default": "Analyze the current database table structure and suggest optimizations.", - "ai_chat.quick_action.schema_analysis.prompt.with_context": "Run a full Schema analysis for these tables, including data type choices, normalization review, and improvement suggestions: {{tables}}", - "ai_chat.quick_action.schema_analysis.title": "Schema analysis", - "ai_chat.quick_action.table_separator": ", ", - "ai_chat.welcome.suggestion.channel_distribution.default": "Order channel distribution for the past 7 days", - "ai_chat.welcome.suggestion.channel_distribution.with_context": "Key channel distribution for the past 7 days", - "ai_chat.welcome.suggestion.cleanup.default": "Help me write SQL to clean abnormal data", - "ai_chat.welcome.suggestion.cleanup.with_context": "Help me write SQL to disable abnormal channels", - "ai_chat.welcome.suggestion.divider": "Or ask directly", - "ai_chat.welcome.suggestion.low_rows.default": "Why does the current result have so few rows?", - "ai_chat.welcome.suggestion.low_rows.with_context": "Why does {{table}} have only a few rows?", - "ai_chat.input.action.send": "Send", - "ai_chat.input.action.stop": "Stop generating", - "ai_chat.input.context.connection_tooltip": "Current data query context", - "ai_chat.input.context.memory_tooltip": "Current session memory usage. Auto-compression starts when it reaches the {{limit}} limit.", - "ai_chat.input.context.tag_label": "Linked context ({{count}})", - "ai_chat.input.message.context_added": "Added {{count}} table structures to the context", - "ai_chat.input.message.context_load_failed": "Failed to load table context: {{detail}}", - "ai_chat.input.message.context_removed": "Removed {{count}} table structures from the context", - "ai_chat.input.message.context_synced": "Context synced: added {{added}}, removed {{removed}}", - "ai_chat.input.message.fetch_table_schema_failed": "Failed to load structure for {{table}}: {{detail}}", - "ai_chat.input.message.fetch_tables_failed": "Failed to load tables: {{detail}}", - "ai_chat.input.message.select_database_context_first": "Select a database on the left before attaching chat context", - "ai_chat.input.message.selection_unchanged": "Selected tables did not change", - "ai_chat.input.modal.empty_tables": "No tables match '{{query}}'", - "ai_chat.input.modal.invert_matching": "Invert matching results", - "ai_chat.input.modal.ok": "Sync selected tables to context", - "ai_chat.input.modal.search_table.placeholder": "Search tables in the current database...", - "ai_chat.input.modal.select_all_matching": "Select all matching tables ({{count}})", - "ai_chat.input.modal.switch_database.placeholder": "Switch database", - "ai_chat.input.modal.title": "Attach database table schema context", - "ai_chat.input.model.placeholder": "Select model", - "ai_chat.input.placeholder": "Type a message... ({{shortcut}}, Shift+Enter for newline, / for commands)", - "ai_chat.input.slash.diff.desc": "Compare two tables and generate changes", - "ai_chat.input.slash.diff.label": "🔄 Table diff", - "ai_chat.input.slash.diff.prompt": "Compare the structure differences between these two tables and generate ALTER statements to migrate from the old version to the new version:", - "ai_chat.input.slash.explain.desc": "Explain the selected SQL logic", - "ai_chat.input.slash.explain.label": "💡 Explain SQL", - "ai_chat.input.slash.explain.prompt": "Explain the execution logic of this SQL and what each step does:\n```sql\n\n```", - "ai_chat.input.slash.index.desc": "Recommend the best index plan", - "ai_chat.input.slash.index.label": "📊 Index suggestions", - "ai_chat.input.slash.index.prompt": "Recommend the best index plan based on the current table structure and common query scenarios, and provide the table DDL:", - "ai_chat.input.slash.mock.desc": "Generate INSERT test data", - "ai_chat.input.slash.mock.label": "🎲 Mock test data", - "ai_chat.input.slash.mock.prompt": "Generate 10 business-realistic INSERT test data statements for the current linked tables:", - "ai_chat.input.slash.optimize.desc": "Analyze SQL performance bottlenecks", - "ai_chat.input.slash.optimize.label": "⚡ Optimization analysis", - "ai_chat.input.slash.optimize.prompt": "Analyze this SQL for performance issues and provide an optimized version:\n```sql\n\n```", - "ai_chat.input.slash.query.desc": "Describe what you want to query", - "ai_chat.input.slash.query.label": "🔍 Natural language query", - "ai_chat.input.slash.query.prompt": "Write a SQL query for me:", - "ai_chat.input.slash.schema.desc": "Review table design quality", - "ai_chat.input.slash.schema.label": "🏗️ Table design review", - "ai_chat.input.slash.schema.prompt": "Review the current linked table design, including field types, normalization, index strategy, and improvement suggestions:", - "ai_chat.input.slash.sql.desc": "Describe requirements and generate statements", - "ai_chat.input.slash.sql.label": "📝 Generate SQL", - "ai_chat.input.slash.sql.prompt": "Generate SQL from the following requirements:", - "ai_chat.input.tooltip.attach_table_context": "Attach database table context", - "ai_chat.input.tooltip.upload_image": "Upload image or screenshot", - "ai_chat.tools.mcp_fallback_description": "MCP tool {{toolName}} provided by {{serverName}}", - "ai_chat.composer_notice.missing_model.description": "Open the model dropdown below and select a model. If the list is empty, check the provider endpoint and API Key.", - "ai_chat.composer_notice.missing_model.title": "Select a model first", - "ai_chat.composer_notice.missing_provider.description": "Add and enable a model provider in AI settings first.", - "ai_chat.composer_notice.missing_provider.title": "No provider available", - "ai_chat.composer_notice.model_fetch_failed.default_description": "Check the provider endpoint, API Key, or account permissions, then reopen the model dropdown.", - "ai_chat.composer_notice.model_fetch_failed.detail_description": "Provider detail: {{detail}}", - "ai_chat.composer_notice.model_fetch_failed.title": "Model list failed to load", - "ai_chat.message.action.copy_full": "Copy full text", - "ai_chat.message.action.copied": "Copied", - "ai_chat.message.action.delete": "Delete message", - "ai_chat.message.action.edit": "Edit this message, remove later records, and resend", - "ai_chat.message.action.retry": "Regenerate from the previous user message", - "ai_chat.message.action.copy_error_raw": "Copy raw error", - "ai_chat.message.action.copied_error_raw": "Raw error copied", - "ai_chat.message.role.user": "You", - "ai_chat.message.image_alt": "Attached image {{index}}", - "ai_chat.message.code.copy": "Copy code", - "ai_chat.message.code.copied": "Copied", - "ai_chat.message.code.insert": "Insert", - "ai_chat.message.code.insert_tooltip": "Insert this SQL into the query workspace for quick edits or execution", - "ai_chat.message.code.execute": "Execute", - "ai_chat.message.code.execute_tooltip": "Execute now, subject to the AI safety policy", - "ai_chat.message.code.executing": "Executing...", - "ai_chat.message.code.preview": "Preview", - "ai_chat.message.code.preview_tooltip": "Preview query results in chat, up to 20 rows", - "ai_chat.message.code.expand_all": "Expand all code", - "ai_chat.message.code.collapse": "Collapse code", - "ai_chat.message.code.preview_result": "Preview result ({{rows}} rows x {{columns}} columns)", - "ai_chat.message.code.preview_collapse": "Collapse", - "ai_chat.message.code.view_result": "View result ({{rows}} rows)", - "ai_chat.message.code.query_no_result": "Query returned no results", - "ai_chat.message.code.execute_failed": "Execution failed", - "ai_chat.message.security.blocked": "🔒 Safety policy blocked this SQL: the current safety level does not allow {{operationType}} operations. Adjust the safety level in AI settings.", - "ai_chat.message.security.confirm_title": "⚠️ Safety confirmation", - "ai_chat.message.security.default_warning": "This SQL is a {{operationType}} operation. Execute it?", - "ai_chat.message.security.confirm_execute": "Execute", - "ai_chat.message.thinking.title": "Thinking process", - "ai_chat.message.thinking.active": "Thinking...", - "ai_chat.message.thinking.count": "({{count}} chars)", - "ai_chat.message.tool_result.title": "Probe result ({{name}})", - "ai_chat.message.tool_result.char_count": "{{count}} chars", - "ai_chat.message.tool_result.no_data": "No data", - "ai_chat.message.tool_call.get_connections": "Load available connection info", - "ai_chat.message.tool_call.get_databases": "Scan database list", - "ai_chat.message.tool_call.get_tables": "Analyze table structure info", - "ai_chat.message.tool_call.get_columns": "Read column list", - "ai_chat.message.tool_call.get_table_ddl": "Read CREATE TABLE statement", - "ai_chat.message.tool_call.execute_sql": "Execute SQL query", - "ai_chat.message.tool_call.running": "Running data probes...", - "ai_chat.message.tool_call.done": "Data probes completed ({{count}} items)", - "ai_chat.message.wait.connecting": "Connecting", - "ai_chat.message.jvm.apply_preview": "Apply to JVM preview", - "ai_chat.message.jvm.apply_diagnostic": "Apply to diagnostic console", - "ai_chat.message.jvm.missing_plan_context": "This JVM plan is missing source tab context. Regenerate it from the target JVM resource page.", - "ai_chat.message.jvm.plan_target_not_found": "No resource tab matches this JVM plan. Open the original target resource before applying it.", - "ai_chat.message.jvm.missing_diagnostic_context": "This diagnostic plan is missing source tab context. Regenerate it from the target diagnostic console.", - "ai_chat.message.jvm.diagnostic_target_not_found": "No diagnostic console tab matches this plan. Open the original target console before applying it.", - "ai_chat.message.mermaid.parse_failed": "Mermaid parse failed: {{detail}}", - "ai_chat.message.mermaid.render_failed": "Mermaid render failed: {{detail}}", - "ai_chat.panel.history.empty": "No chat history yet", - "ai_chat.panel.insight.context.linked_title": "{{count}} linked tables", - "ai_chat.panel.insight.context.empty_title": "No table structure linked yet", - "ai_chat.panel.insight.context.linked_body": "This conversation includes structure context for {{tables}}.", - "ai_chat.panel.insight.context.empty_body": "Opening AI from a table page links the current table automatically. You can also add context manually above the input.", - "ai_chat.panel.insight.context.table_separator": ", ", - "ai_chat.panel.insight.context.more_tables_suffix": " and more tables", - "ai_chat.panel.insight.query.slowest_title": "Slowest recent query {{duration}}ms", - "ai_chat.panel.insight.query.empty_title": "No query duration samples yet", - "ai_chat.panel.insight.query.empty_body": "After a query runs, SQL clues for optimization analysis appear here.", - "ai_chat.panel.insight.status.failed_title": "{{count}} recent query failures", - "ai_chat.panel.insight.status.ok_title": "Recent query status normal", - "ai_chat.panel.insight.status.recent_body": "Recorded {{count}} recent SQL entries. You can ask AI to explain or optimize them.", - "ai_chat.panel.insight.status.empty_body": "No SQL logs yet.", - "ai_chat.panel.insight.write.detected_title": "Detected {{count}} write operations", - "ai_chat.panel.insight.write.readonly_title": "Currently focused on read-only analysis", - "ai_chat.panel.insight.write.detected_body": "For SQL involving writes, generate a preview and rollback statements before committing.", - "ai_chat.panel.insight.write.readonly_body": "AI defaults to explaining, generating SELECT, analyzing Schema, and optimizing indexes.", - "ai_chat.panel.render_error.title": "This AI message failed to render and was isolated", - "ai_chat.panel.render_error.description": "The rest of the conversation remains usable. You can delete this broken message before continuing.", - "ai_chat.panel.render_error.unknown": "Unknown render error", - "ai_chat.panel.render_error.retry": "Retry render", - "ai_chat.panel.render_error.delete": "Delete this message", - "ai_chat.panel.status.memory_compressing": "⚙️ Conversation is overloaded. Starting memory compression...", - "ai_chat.panel.status.memory_compress_failed": "❌ Memory compression failed. Continuing with the original context...", - "ai_chat.panel.status.memory_summary": "[Automatic memory reshape] Long history has been compressed into a summary:\n\n{{summary}}", - "ai_chat.panel.status.memory_probe_summary": "[Automatic memory reshape] Long probe history and chat have been compressed into a summary:\n\n{{summary}}", - "ai_chat.panel.prompt.memory_summary": "This is the history of an overlong conversation. To free context space while preserving the core memory, read it carefully and produce a highly condensed structured summary based on technical facts, explored data-structure state, the user's central request, and current progress.\nNotes:\n1. Be objective and accurate; do not omit key business logic or discovered table names/fields.\n2. Remove ineffective execution process, pleasantries, and the JSON return values themselves.\n3. Keep it around 1000-2000 words and output concise Markdown only.\n4. Start directly with the summary; do not include greetings.", - "ai_chat.panel.prompt.jvm_diagnostic": "You are GoNavi's JVM diagnostic assistant. The current tab is an Arthas-compatible diagnostic workbench, and the goal is to produce a structured diagnostic plan that can be pasted back into the diagnostic console.\n\nCurrent connection: {{connectionName}}\nTarget host: {{host}}\nDiagnostic transport: {{transport}}\nEnvironment: {{environment}}\nConnection policy: {{readOnlyPolicy}}\nCommand permissions: observe={{observePolicy}}, trace={{tracePolicy}}, mutating={{mutatingPolicy}}\n\nResponse rules:\n1. You may start with a short analysis, but the response must contain exactly one ```json code block.\n2. JSON fields are strictly limited to intent, transport, command, riskLevel, reason, expectedSignals.\n3. The transport field must match the diagnostic transport shown above; do not invent another transport.\n4. command must be a single diagnostic command, with no shell prompt, newline concatenation, multiple commands, or code fence.\n5. riskLevel must be one of low, medium, high.\n6. expectedSignals must be a string array describing signals to watch after execution.\n7. If permissions disallow an operation category, do not output that command category; explain the limitation directly if the request cannot be satisfied.", - "ai_chat.panel.jvm_diagnostic.policy.read_only": "Answer with read-only diagnostics by default; generate only observe, trace, and troubleshooting commands, and do not assume anything has already executed.", - "ai_chat.panel.jvm_diagnostic.policy.plan_first": "Diagnostic commands may be generated, but always provide the plan first and let the user decide whether to execute.", - "ai_chat.panel.jvm_diagnostic.permission.allowed": "allowed", - "ai_chat.panel.jvm_diagnostic.permission.forbidden": "forbidden", - "ai_chat.panel.prompt.jvm_runtime": "You are GoNavi's JVM runtime analysis assistant. The current context is not SQL; it is the JVM resource workbench.\n\nCurrent connection: {{connectionName}}\nTarget host: {{host}}\nProvider mode: {{providerMode}}\nEnvironment: {{environment}}\nConnection policy: {{connectionPolicy}}\nResource path status: {{resourcePathStatus}}\n\nResponse rules:\n1. You may explain resource structure, risks, modification advice, and rollback advice.\n2. If the user asks for a JVM modification plan, output exactly one ```json code block, and strictly limit JSON fields to targetType, selector, action, payload, reason.\n3. Prefer action values already declared in the current resource snapshot or metadata as supportedActions; if the current resource does not declare them, infer cautiously from the snapshot content.\n4. Prefer the current resourcePath for selector.resourcePath; if the current path is unknown, clearly say precise targeting is not possible and do not invent a path.\n5. payload must use only {\"format\":\"json\",\"value\":{...}} or {\"format\":\"text\",\"value\":\"...\"}; do not output scripts, commands, or bare values.\n6. Do not output scripts, commands, or claims such as already executed successfully.", - "ai_chat.panel.jvm_runtime.policy.read_only": "Read-only connection; only analyze and generate change plans, and never assume writes have already executed.", - "ai_chat.panel.jvm_runtime.policy.preview_required": "Writable connection, but every modification must generate a preview first and wait for human confirmation.", - "ai_chat.panel.jvm_runtime.resource_path.current": "Current resourcePath: {{resourcePath}}", - "ai_chat.panel.jvm_runtime.resource_path.missing": "No specific resourcePath is currently selected.", - "ai_chat.panel.prompt.sql.context_tables": "You are a professional database assistant. The current database type is {{dbDisplayType}}. Generate SQL using that dialect. The following linked table DDL is provided by the user; prioritize it when answering:\n\n{{ddlChunks}}", - "ai_chat.panel.prompt.sql.current_database": "You are a professional database assistant. The current database type is {{dbDisplayType}}, and the current database name is {{targetDbName}}. If the user needs information about a specific table or the current database, you can proactively call the provided get_tables tool to fetch table information.", - "ai_chat.panel.prompt.sql.no_context": "You are a professional database assistant. The user has not selected any specific database or table in the UI as context.\n\nImportant rules:\n1. If you need to help the user find a target table, never guess table names. You must call tools to fetch real data.\n2. Complete workflow: get_connections → get_databases → get_tables → get_columns → generate SQL. Do not skip any step.\n3. [Connection priority - critical] After getting the connection list, search in this order:\n - First priority: connections whose host is localhost, 127.0.0.1, or contains local-machine wording\n - Second priority: connections whose name or host contains dev or local, or whose host is an internal IP such as 10.x, 192.168.x, or 172.16-31.x\n - Third priority: other connections such as test or production\n If you find the target table in a higher-priority connection, use that connection directly and do not continue to lower-priority connections.\n4. If the target table is not found in the current database, continue checking other databases; do not give up.\n5. Stop only after every possible database has been checked, or after the target table has clearly been found.\n6. For general questions that do not involve database querying, answer normally.\n\nSQL generation rules (critical, follow strictly):\n7. [Field accuracy - absolute rule] Before generating SQL, you must call get_columns to fetch the real field list for the target table. Every field name in SQL must exactly match the field value returned by get_columns, including case. Do not invent, abbreviate, or infer field names. For example, if the field is channel, write channel, not pay_channel.\n8. Do not use a \"database.table\" qualified prefix when generating SQL; write only the table name itself.\n9. When reporting results, the connection name/ID and database name must strictly come from the actual parameters of the same get_tables call. Do not mix connectionId from one connection with dbName from another.\n10. If multiple databases have similar names, clearly tell the user which database contains the target table.\n11. [Required] The first line of every SQL code block must add a context declaration comment in exactly this format: -- @context connectionId= dbName=. connectionId and dbName must come from the same successful get_tables call, namely the actual parameter values you passed in that call. Example:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\nCurrent available connections: [{{connList}}]", - "ai_chat.panel.prompt.sql.no_connections": "You are a professional database assistant. There are currently no available database connections in the app.\n\nIf the user's question needs database structure or SQL, first explain that get_connections, get_databases, get_tables, and get_columns cannot fetch real database information until a connection exists, then ask the user to create a connection and retry. Do not guess connectionId, dbName, table names, or field names.\n\nFor general questions that do not involve database querying, answer normally.", - "ai_chat.panel.model_control.force_tool_call": "Use a function call directly to invoke the tool and perform the operation; do not only describe the plan in text.", - "ai_chat.panel.model_control.continue_after_summary": "Based on the latest status and exploration results above, continue the analysis you had not finished or perform the next step.", - "ai_chat.panel.local_tool.get_connections.description": "When the user needs to query or operate on a database but no connection context is selected, get all database connections available in the app. The returned data includes connection ID (id) and name (name).", - "ai_chat.panel.local_tool.get_databases.description": "Get all database (Database/Schema) names under the specified connection (connectionId).", - "ai_chat.panel.local_tool.get_tables.description": "After the target connection and dbName are known, if the user asks about or implicitly mentions a table and you do not know the exact tableName, call this tool to get all table names in that database (table names only) to infer the target table.", - "ai_chat.panel.local_tool.get_columns.description": "Get the field list for the specified table, including field names, types, nullable status, default values, comments, and related metadata. Before generating SQL, call this tool to confirm real field names and do not guess field names.", - "ai_chat.panel.local_tool.get_table_ddl.description": "Get the complete CREATE TABLE DDL for the specified table, including fields, indexes, constraints, and the full structure.", - "ai_chat.panel.local_tool.execute_sql.description": "Execute a SQL query on the specified connection and database, then return the result. Controlled by the safety level: in read-only mode, only SELECT/SHOW/DESCRIBE and similar query operations are allowed. Returns at most 50 rows.", - "ai_chat.panel.local_tool.param.connection_id": "connectionId", - "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId (from get_connections)", - "ai_chat.panel.local_tool.param.db_name": "dbName", - "ai_chat.panel.local_tool.param.table_name": "tableName", - "ai_chat.panel.local_tool.param.sql": "SQL statement to execute", - "ai_chat.panel.tool_error.connection_not_found": "Connection not found", - "ai_chat.panel.tool_error.unknown_function": "Unknown function: {{functionName}}", - "ai_chat.panel.tool_error.fetch_databases_failed": "Failed to fetch database list: {{detail}}", - "ai_chat.panel.tool_error.fetch_tables_failed": "Failed to fetch table list: {{detail}}", - "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ The following is the exact field list for table {{tableName}}. When generating SQL, use only these field values as column names, exactly as shown. Do not change, abbreviate, or invent field names.\nAvailable fields: {{fieldNames}}\nDetails: {{detailJson}}", - "ai_chat.panel.tool_error.fetch_columns_failed": "Failed to fetch column list: {{detail}}", - "ai_chat.panel.tool_error.fetch_table_ddl_failed": "Failed to fetch CREATE TABLE statement: {{detail}}", - "ai_chat.panel.tool_error.sql_blocked": "Security policy blocked this request: the current safety level does not allow {{operationType}} SQL. Show the SQL to the user and ask them to run it manually.", - "ai_chat.panel.tool_error.sql_execute_failed": "SQL execution failed", - "ai_chat.panel.tool_error.sql_execute_exception": "SQL execution exception: {{detail}}", - "ai_chat.panel.error.unknown": "Unknown error", - "ai_chat.panel.error.http_server": "HTTP {{code}} server error", - "ai_chat.panel.error.html_response": "The server returned an abnormal HTML response, possibly a gateway timeout or unavailable service", - "ai_chat.panel.error.truncated_suffix": "...(truncated)", - "ai_chat.panel.notice.fetch_models_failed": "Failed to fetch model list: {{detail}}", - "ai_chat.panel.message.error": "❌ Error: {{detail}}", - "ai_chat.panel.message.empty_response": "❌ The model did not return any content. It may have hit rate limits, context overload, or a refusal.", - "ai_chat.panel.message.request_interrupted": "❌ Request interrupted: no concrete reply was received.", - "ai_chat.panel.message.service_not_ready": "❌ AI Service is not ready", - "ai_chat.panel.message.send_failed": "❌ Send failed: {{detail}}", - "ai_chat.panel.probe.max_rounds": "⚠️ Tool calls reached the {{count}} round limit and were stopped. Send a new message to continue exploring.", - "ai_chat.panel.probe.consecutive_failed": "⚠️ Probes failed for 3 consecutive rounds and were stopped. Check the connection status and retry.", - "ai_chat.panel.status.summarizing_probe": "Summarizing probe results", - "ai_chat.panel.status.returning_runtime_data": "Returning runtime data to the model", - "ai_chat.panel.status.deep_reasoning": "Model is reasoning deeply", - "ai_chat.panel.status.waiting_instruction": "Waiting for operation instructions", - "ai_chat.panel.status.analyzing_chain": "Analyzing chain and logic deeply", - "ai_chat.panel.status.model_connecting": "Connecting to model", - "ai_chat.panel.status.waking_engine": "Waking reasoning engine", - "ai_chat.panel.status.waiting_response": "Waiting for model response", - "ai_chat.panel.session.default_title": "New chat", - "ai_settings.title": "AI settings", - "ai_settings.subtitle": "Configure AI models, safety level, and context options", - "ai_settings.nav.title": "Settings navigation", - "ai_settings.nav.providers.title": "Model providers", - "ai_settings.nav.providers.description": "Configure model endpoints and secrets", - "ai_settings.nav.safety.title": "Safety control", - "ai_settings.nav.safety.description": "Limit AI operation risk level", - "ai_settings.nav.context.title": "Context", - "ai_settings.nav.context.description": "Configure database schema context", - "ai_settings.nav.tools.title": "Built-in tools", - "ai_settings.nav.tools.description": "View data probes available to AI", - "ai_settings.nav.prompts.title": "Built-in prompts", - "ai_settings.nav.prompts.description": "View system-level preset requirements", - "ai_settings.provider.empty.title": "No model provider configured", - "ai_settings.provider.empty.description": "Add one to start using the AI assistant", - "ai_settings.provider.no_model": "No model selected", - "ai_settings.provider.next_provider": "next provider", - "ai_settings.provider.action.add": "Add model provider", - "ai_settings.provider.action.edit": "Edit", - "ai_settings.provider.action.delete": "Delete", - "ai_settings.provider.confirm_delete": "Delete this provider?", - "ai_settings.provider.editor.add_title": "Add model provider", - "ai_settings.provider.editor.edit_title": "Edit model provider", - "ai_settings.provider_preset.openai.label": "OpenAI", - "ai_settings.provider_preset.openai.desc": "GPT-5.4 / 5.3 series", - "ai_settings.provider_preset.deepseek.label": "DeepSeek", - "ai_settings.provider_preset.deepseek.desc": "DeepSeek-V4 / R1", - "ai_settings.provider_preset.qwen_bailian.label": "Qwen (Bailian General)", - "ai_settings.provider_preset.qwen_bailian.desc": "Bailian Anthropic-compatible endpoint / remote model list", - "ai_settings.provider_preset.qwen_coding_plan.label": "Qwen (Coding Plan)", - "ai_settings.provider_preset.qwen_coding_plan.desc": "Claude Code CLI proxy chain / official supported model list", - "ai_settings.provider_preset.zhipu.label": "Zhipu GLM", - "ai_settings.provider_preset.zhipu.desc": "GLM-5 / GLM-5-Turbo", - "ai_settings.provider_preset.moonshot.label": "Kimi", - "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5 (Anthropic-compatible)", - "ai_settings.provider_preset.anthropic.label": "Claude", - "ai_settings.provider_preset.anthropic.desc": "Claude Opus/Sonnet", - "ai_settings.provider_preset.gemini.label": "Gemini", - "ai_settings.provider_preset.gemini.desc": "Gemini 3.1 / 2.5 series", - "ai_settings.provider_preset.volcengine_ark.label": "Volcengine Ark", - "ai_settings.provider_preset.volcengine_ark.desc": "Ark general inference / Doubao models", - "ai_settings.provider_preset.volcengine_coding.label": "Volcengine Coding Plan", - "ai_settings.provider_preset.volcengine_coding.desc": "Ark Code / Coding Plan", - "ai_settings.provider_preset.minimax.label": "MiniMax", - "ai_settings.provider_preset.minimax.desc": "M3 / M2.7 series (Anthropic-compatible)", - "ai_settings.provider_preset.ollama.label": "Ollama", - "ai_settings.provider_preset.ollama.desc": "Locally deployed open-source models", - "ai_settings.provider_preset.custom.label": "Custom", - "ai_settings.provider_preset.custom.desc": "Custom API endpoint", - "ai_settings.form.section.service_type": "Service type", - "ai_settings.form.section.basic": "Basic information", - "ai_settings.form.section.auth_connection": "Authentication & connection", - "ai_settings.form.provider_name": "Provider name", - "ai_settings.form.provider_name_required": "Enter a name", - "ai_settings.form.provider_name_placeholder": "Example: My OpenAI-compatible endpoint / private model", - "ai_settings.form.api_format": "API format", - "ai_settings.form.model_list": "Available model list (optional)", - "ai_settings.form.model_list_placeholder": "Configure model IDs; leave blank to fetch them from the server", - "ai_settings.form.api_key": "API Key", - "ai_settings.form.api_key_required": "Enter an API Key", - "ai_settings.form.api_key_keep_placeholder": "Leave blank to keep using the saved secret", - "ai_settings.form.api_key_placeholder": "sk-... / your API Key", - "ai_settings.form.api_key_saved_hint": "An API Key is already saved. Leave blank to keep it, or enter a new value to replace it.", - "ai_settings.form.clear_saved_api_key": "Clear saved API Key", - "ai_settings.form.api_endpoint": "API Endpoint (URL)", - "ai_settings.form.api_endpoint_required": "Enter a valid endpoint URL", - "ai_settings.action.back": "Back", - "ai_settings.action.save": "Save", - "ai_settings.action.test": "Test connection", - "ai_settings.action.retest": "Test again", - "ai_settings.action.connection_ok": "Connection OK", - "ai_settings.message.deleted": "Deleted", - "ai_settings.message.deleted_and_switched": "Deleted and automatically switched to \"{{name}}\"", - "ai_settings.message.delete_failed": "Delete failed", - "ai_settings.message.delete_failed_detail": "Delete failed: {{detail}}", - "ai_settings.message.saved": "Saved", - "ai_settings.message.save_failed": "Save failed", - "ai_settings.message.save_failed_detail": "Save failed: {{detail}}", - "ai_settings.message.switched": "Switched", - "ai_settings.message.switch_failed": "Switch failed", - "ai_settings.message.switch_failed_detail": "Switch failed: {{detail}}", - "ai_settings.message.test_requires_new_api_key": "Enter a new API Key before testing, or cancel clearing the saved secret", - "ai_settings.message.test_success": "Connection succeeded", - "ai_settings.message.test_failed": "Test failed", - "ai_settings.message.test_failed_detail": "Test failed: {{detail}}", - "ai_settings.message.unknown_error": "Unknown error", - "ai_settings.safety.description": "Control which SQL operation types AI may execute to protect data safety", - "ai_settings.safety.readonly.label": "Read-only mode", - "ai_settings.safety.readonly.desc": "AI may only run SELECT and similar query operations. This is the safest mode.", - "ai_settings.safety.readwrite.label": "Read/write mode", - "ai_settings.safety.readwrite.desc": "AI may run INSERT/UPDATE/DELETE. Risky operations require confirmation.", - "ai_settings.safety.full.label": "Full mode", - "ai_settings.safety.full.desc": "AI may run all operations, including DDL. High-risk operations show warnings automatically.", - "ai_settings.context.description": "Control how much database context is sent to AI", - "ai_settings.context.schema_only.label": "Schema only", - "ai_settings.context.schema_only.desc": "Only table and column structure is sent to AI", - "ai_settings.context.with_samples.label": "With samples", - "ai_settings.context.with_samples.desc": "Include a small amount of sample data to help AI understand data patterns", - "ai_settings.context.with_results.label": "With query results", - "ai_settings.context.with_results.desc": "Send recent query results as context", - "ai_settings.prompts.description": "These are the read-only system prompts preset by the current GoNavi version. They are injected dynamically into request context for matching scenarios.", - "ai_settings.prompts.message.saved": "Custom prompts saved", - "ai_settings.prompts.message.save_failed": "Failed to save custom prompts", - "ai_settings.mcp_server.message.saved": "MCP server saved", - "ai_settings.mcp_server.message.save_failed": "Failed to save MCP server", - "ai_settings.mcp_server.message.deleted": "MCP server deleted", - "ai_settings.mcp_server.message.delete_failed": "Failed to delete MCP server", - "ai_settings.mcp_server.message.test_success": "MCP server connection succeeded", - "ai_settings.mcp_server.message.test_failed": "MCP server test failed", - "ai_settings.mcp_server.message.test_request_failed": "Failed to test MCP server", - "ai_settings.clipboard.error.unsupported": "Copying to the clipboard is not supported in this environment", - "ai_settings.mcp_http.error.control_unsupported_runtime": "The current runtime does not support MCP HTTP server control", - "ai_settings.mcp_http.error.start_unsupported_version": "This version does not support starting the MCP HTTP server", - "ai_settings.mcp_http.error.stop_unsupported_version": "This version does not support stopping the MCP HTTP server", - "ai_settings.mcp_http.message.started": "GoNavi MCP HTTP server started", - "ai_settings.mcp_http.message.stopped": "GoNavi MCP HTTP server stopped", - "ai_settings.mcp_http.message.toggle_failed": "Failed to switch GoNavi MCP HTTP server", - "ai_settings.mcp_http.message.url_unavailable": "No MCP HTTP URL is available to copy", - "ai_settings.mcp_http.message.url_copied": "MCP HTTP URL copied", - "ai_settings.mcp_http.message.authorization_header_required": "Start the MCP HTTP server first to generate the Authorization Header", - "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header copied", - "ai_settings.mcp_http.status.not_running": "GoNavi MCP HTTP server is not running", - "ai_settings.skill.message.saved": "Skill saved", - "ai_settings.skill.message.save_failed": "Failed to save Skill", - "ai_settings.skill.message.deleted": "Skill deleted", - "ai_settings.skill.message.delete_failed": "Failed to delete Skill", - "ai_settings.tools.description": "When handling database questions, the AI assistant can call these built-in tools automatically to fetch real data without manual intervention.", - "ai_settings.tools.workflow": "💡 Workflow: get_connections -> get_databases -> get_tables -> get_columns -> generate SQL", - "ai_settings.tools.params_label": "Parameters:", - "ai_settings.tools.builtin_tool_label": "Built-in tool", - "ai_settings.tools.search.aria_label": "Search built-in tools", - "ai_settings.tools.search.placeholder": "Search tools, flows, or parameters, for example mcp / lineLimit / allowMutating / transaction", - "ai_settings.tools.search.clear": "Clear", - "ai_settings.tools.summary": "Showing {{flowVisible}}/{{flowTotal}} recommended flows and {{toolVisible}}/{{toolTotal}} built-in tools.", - "ai_settings.tools.empty.no_matches": "No matching built-in tools. Try broader keywords such as mcp, logs, connection, transaction, shortcuts, or schema.", - "ai_settings.tools.parameters.hint_title": "Parameter hints", - "ai_settings.tools.parameters.type_label": "Type: {{type}}", - "ai_settings.tools.parameters.required": "Required", - "ai_settings.tools.parameters.optional": "Optional", - "ai_settings.tools.parameters.enum_values": "Allowed values: {{values}}", - "ai_settings.tools.parameters.default_value": "Default: {{value}}", - "ai_settings.tools.parameters.example": "Example:", - "ai_settings.tools.params.none": "None", - "ai_settings.tools.get_connections.desc": "Get all available database connections", - "ai_settings.tools.get_connections.detail": "Returns connection ID, name, type (MySQL/PostgreSQL, etc.), and Host address. AI uses the returned information to decide which connection to explore first.", - "ai_settings.tools.get_databases.desc": "Get all databases under a connection", - "ai_settings.tools.get_databases.detail": "Pass connectionId to return database or Schema names under that connection.", - "ai_settings.tools.get_tables.desc": "Get all table names under a database", - "ai_settings.tools.get_tables.detail": "Pass connectionId and dbName to return table names. AI uses this to locate the target table mentioned by the user.", - "ai_settings.tools.get_columns.desc": "Get table column structure", - "ai_settings.tools.get_columns.detail": "Pass connectionId, dbName, and tableName to return each column's name, type, nullability, default value, and comment. AI must call this tool before generating SQL to confirm real column names.", - "ai_settings.tools.get_table_ddl.desc": "Get table DDL", - "ai_settings.tools.get_table_ddl.detail": "Pass connectionId, dbName, and tableName to return the full CREATE TABLE statement, including column definitions, indexes, constraints, and related metadata.", - "ai_settings.tools.execute_sql.desc": "Execute SQL query and return results", - "ai_settings.tools.execute_sql.detail": "Pass connectionId, dbName, and sql to execute SQL on the target database and return results, up to 50 rows. Safety level applies; read-only mode only allows SELECT/SHOW/DESCRIBE.", - "driver_manager.title": "Driver Manager", - "driver_manager.action.refresh": "Refresh", - "driver_manager.action.network_check": "Network Check", - "driver_manager.action.close": "Close", - "driver_manager.action.open_global_proxy_settings": "Open Global Proxy Settings", - "driver_manager.action.open_directory": "Open Driver Directory", - "driver_manager.action.import_directory": "Import Driver Directory", - "driver_manager.action.import_package": "Import Driver Package", - "driver_manager.action.install_enable": "Install and Enable", - "driver_manager.action.remove": "Remove", - "driver_manager.action.logs": "Logs", - "driver_manager.column.data_source": "Data Source", - "driver_manager.column.package_size": "Package Size", - "driver_manager.column.status": "Status", - "driver_manager.column.progress": "Install Progress", - "driver_manager.column.version": "Driver Version", - "driver_manager.column.actions": "Actions", - "driver_manager.description.install_required": "Except for MySQL / Redis / Oracle / PostgreSQL, data sources must be installed and enabled before connecting.", - "driver_manager.directory_info.title": "Driver Directory and Reuse Notes", - "driver_manager.directory_info.details_label": "View driver directory and reuse notes", - "driver_manager.directory_info.reuse_help": "Automatically downloaded and manually imported drivers are stored in this directory. Downloaded drivers can be reused for later version upgrades.", - "driver_manager.directory_info.root_dir": "Driver root directory: {{path}}", - "driver_manager.directory_info.log_file": "Runtime log file: {{path}}", - "driver_manager.empty.default": "No driver data", - "driver_manager.empty.search": "No driver matches \"{{keyword}}\"", - "driver_manager.filter_summary.match": "Matched {{filtered}} / {{total}}", - "driver_manager.filter_summary.total": "{{total}} drivers", - "driver_manager.import.directory_help": "If the in-app download route fails, manually download the driver package to this directory first, then use \"Import driver package\" or \"Import driver directory\" to complete installation.", - "driver_manager.import.single_file_help": "Inline \"Import Driver Package\" only supports a single driver file or bundle, such as `mariadb-driver-agent`, `mariadb-driver-agent.exe`, or `GoNavi-DriverAgents.zip`. It does not import a JDBC Jar directly; use \"Import Driver Directory\" above for batch import.", - "driver.guidance.customConnectionDriverHelp": "Supported: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase; aliases include postgresql/pgx, open_gauss/open-gauss, dm8, kingbase8/kingbasees/kingbasev8. Enter a Go database/sql driver name already registered by GoNavi. Do not enter a system ODBC/JDBC driver name directly or import a JDBC Jar.", - "driver_manager.local_source.file": "file", - "driver_manager.local_source.directory": "directory", - "driver_manager.log.start_auto_install": "Starting automatic installation", - "driver_manager.log.done_auto_install": "Automatic installation completed{{version}}", - "driver_manager.log.start_local_import": "Starting local import{{version}} ({{source}}): {{path}}", - "driver_manager.log.done_local_import": "Local import installation completed{{version}}", - "driver_manager.log.skip_installed_dedupe": "Driver is already installed; skipped by directory import dedupe", - "driver_manager.log.force_overwrite_reinstall": "Overwrite installed mode is enabled; reinstall import will run", - "driver_manager.log.skip_slim_build": "Current release package is a slim build; directory import skipped", - "driver_manager.log.start_remove": "Starting driver removal", - "driver_manager.log.done_remove": "Driver removal completed", - "driver_manager.log.progress_line": "[{{status}}] {{message}} ({{percent}}%)", - "driver_manager.log_modal.title": "Driver Logs - {{name}}", - "driver_manager.log_modal.install_dir": "Install directory: {{path}}", - "driver_manager.log_modal.executable_path": "Driver executable: {{path}}", - "driver_manager.log_modal.empty": "This driver has no operation logs yet.", - "driver_manager.message.load_status_failed": "Failed to load driver status", - "driver_manager.message.load_status_failed_detail": "Failed to load driver status: {{detail}}", - "driver_manager.message.network_check_failed": "Driver network check failed", - "driver_manager.message.network_check_failed_detail": "Driver network check failed: {{detail}}", - "driver_manager.message.network_check_completed": "Driver network check completed", - "driver_manager.message.load_version_failed": "Failed to load version list for {{name}}", - "driver_manager.message.load_version_failed_detail": "Failed to load version list for {{name}}: {{detail}}", - "driver_manager.message.install_start": "Starting installation", - "driver_manager.message.install_failed": "Failed to install {{name}}", - "driver_manager.message.install_failed_detail": "Failed to install {{name}}: {{detail}}", - "driver_manager.message.install_success": "{{name}}{{version}} installed and enabled", - "driver_manager.message.local_path_required": "Select a valid local import {{source}}", - "driver_manager.message.local_import_start": "Starting local driver package import", - "driver_manager.message.local_import_failed": "Failed to import local driver package for {{name}}", - "driver_manager.message.local_import_failed_detail": "Failed to import local driver package for {{name}}: {{detail}}", - "driver_manager.message.local_import_success": "{{name}}{{version}} local driver package installed and enabled", - "driver_manager.message.select_local_file_failed": "Failed to select local driver package file", - "driver_manager.message.select_local_file_failed_detail": "Failed to select local driver package file: {{detail}}", - "driver_manager.message.local_file_required": "Select a valid driver package file", - "driver_manager.message.select_local_directory_failed": "Failed to select local driver package directory", - "driver_manager.message.select_local_directory_failed_detail": "Failed to select local driver package directory: {{detail}}", - "driver_manager.message.local_directory_required": "Select a valid driver package directory", - "driver_manager.message.no_external_drivers_to_import": "There are no external drivers to import", - "driver_manager.message.skip.dedupe": "{{count}} dedupe skipped", - "driver_manager.message.skip.slim": "{{count}} slim-build skipped", - "driver_manager.message.skip_suffix": ", {{items}}", - "driver_manager.message.overwrite_suffix": " (overwrite installed)", - "driver_manager.message.directory_import_completed": "Directory import completed{{mode}}: {{success}} succeeded{{skip}}", - "driver_manager.message.directory_import_completed_with_failure": "Directory import completed{{mode}}: {{success}} succeeded, {{failed}} failed{{skip}}", - "driver_manager.message.directory_import_failed": "Directory import failed{{mode}}: {{failed}} failed{{skip}}", - "driver_manager.message.open_directory_failed": "Failed to open driver directory", - "driver_manager.message.open_directory_failed_detail": "Failed to open driver directory: {{detail}}", - "driver_manager.message.remove_failed": "Failed to remove {{name}}", - "driver_manager.message.remove_failed_detail": "Failed to remove {{name}}: {{detail}}", - "driver_manager.message.remove_success": "{{name}} removed", - "driver_manager.network.alert.download_chain_unreachable": "Important: driver download route domains are unreachable", - "driver_manager.network.alert.download_network_unreachable": "Important: driver download network is unreachable", - "driver_manager.network.summary.download_chain_unreachable": "GitHub API is reachable, but driver download asset domains are not reachable.", - "driver_manager.network.summary.unreachable_proxy_configured": "Some driver download endpoints are unreachable. Check that the configured proxy is working and retry.", - "driver_manager.network.summary.proxy_recommended": "Some driver download endpoints are unreachable. Configure an HTTP/HTTPS/SOCKS5 proxy before installing drivers.", - "driver_manager.network.summary.unreachable": "Some driver download endpoints are unreachable. Check your network and retry.", - "driver_manager.network.summary.reachable_with_proxy": "Driver download network is available through the configured proxy.", - "driver_manager.network.summary.reachable": "Driver download network is available. You can install drivers directly.", - "driver_manager.network.chain_alert.description": "You may be able to open GitHub pages, but driver package downloads redirect to asset domains. Enable the global proxy from the GoNavi top \"Proxy\" entry first, using the local address and port of your proxy app.", - "driver_manager.network.chain_alert.allow_hosts": "If it still fails, allow these hosts in the proxy rules: {{hosts}}. If the rules cannot be adjusted, consider enabling TUN mode.", - "driver_manager.network.proxy_env_detected": "Detected proxy environment variables: {{keys}}", - "driver_manager.network.details_label": "View network check details", - "driver_manager.network.github_latency": "Proxy route to GitHub connectivity latency: {{status}}{{latency}}{{detail}}", - "driver_manager.network.reachable": "reachable", - "driver_manager.network.unreachable": "unreachable", - "driver_manager.network.no_result": "no result", - "driver_manager.network.latency_value": ", {{latency}}ms", - "driver_manager.network.error_value": ", {{detail}}", - "driver_manager.network.no_proxy_env": "No system proxy environment variables detected.", - "driver_manager.network.checking": "Checking driver download network...", - "driver_manager.network.not_checked": "Network check has not completed", - "driver_manager.progress.local_package_start": "Starting local driver package installation", - "driver_manager.progress.metadata_write": "Writing driver metadata", - "driver_manager.progress.local_package_done": "Local driver package import completed", - "driver_manager.progress.install_start": "Starting installation", - "driver_manager.progress.pure_go_enabled": "Installation completed; pure Go driver enabled", - "driver_manager.progress.agent_install_start": "Starting {{name}} driver agent installation", - "driver_manager.progress.agent_install_done": "{{name}} driver agent installation completed", - "driver_manager.progress.download_prebuilt_agent": "Downloading prebuilt {{name}} driver agent", - "driver_manager.progress.download_bundle": "Downloading {{name}} driver bundle", - "driver_manager.progress.extract_agent_from_bundle": "Extracting {{name}} agent from driver bundle", - "driver_manager.progress.unzip_agent": "Extracting {{name}} driver agent", - "driver_manager.progress.source_build_preferred": "Using local source build first for {{name}} driver agent", - "driver_manager.progress.dev_build_fallback": "No prebuilt package matched; trying development local build", - "driver_manager.progress.plan.source_only": "Preparing {{name}} driver agent installation (version {{version}}); this version only allows local source builds", - "driver_manager.progress.plan.source_first": "Preparing {{name}} driver agent installation (version {{version}}); trying local source build first, then download fallback", - "driver_manager.progress.plan.direct_then_bundle": "Preparing {{name}} driver agent installation (version {{version}}); trying {{direct}} prebuilt direct links, then {{bundle}} driver bundle sources", - "driver_manager.progress.plan.explicit_direct": "Preparing {{name}} driver agent installation (version {{version}}); explicit version assets only, trying {{direct}} prebuilt direct links", - "driver_manager.progress.plan.direct_only": "Preparing {{name}} driver agent installation (version {{version}}); trying {{direct}} prebuilt direct links", - "driver_manager.progress.plan.bundle_only": "Preparing {{name}} driver agent installation (version {{version}}); no prebuilt direct links, trying {{bundle}} driver bundle sources", - "driver_manager.progress.plan.source_fallback": "Preparing {{name}} driver agent installation (version {{version}}); will fall back to local source build if release assets do not match", - "driver_manager.progress.fallback.direct_to_bundle": "Prebuilt direct links did not match; switching to driver bundle fallback ({{name}}, {{bundle}} bundle sources remaining)", - "driver_manager.progress.fallback.explicit_skip_bundle": "Prebuilt direct links did not match; explicit assets only, skipping driver bundles ({{name}})", - "driver_manager.progress.fallback.bundle_available": "Direct link unavailable; switching to driver bundle fallback ({{name}}, {{bundle}} bundle sources remaining)", - "driver_manager.progress.fallback.source_build": "Release assets did not match; preparing local source build fallback ({{name}})", - "driver_manager.progress.backend_empty": "No backend progress detail", - "driver_manager.progress.backend_detail": "Backend detail: {{detail}}", - "driver_manager.progress.status.start": "START", - "driver_manager.progress.status.downloading": "DOWNLOADING", - "driver_manager.progress.status.done": "DONE", - "driver_manager.progress.status.error": "ERROR", - "driver_manager.progress.status.unknown": "UNKNOWN", - "driver_manager.option.force_overwrite_installed": "Overwrite installed", - "driver_manager.punctuation.list_separator": ", ", - "driver_manager.search.placeholder": "Search driver name/type, such as DuckDB or clickhouse", - "driver_manager.search.built_in": "built-in", - "driver_manager.search.external": "external", - "driver_manager.status.calculating": "Calculating...", - "driver_manager.status.built_in_available": "Built-in available", - "driver_manager.status.installing_percent": "Installing {{percent}}%", - "driver_manager.status.enabled": "Enabled", - "driver_manager.status.installed": "Installed", - "driver_manager.status.disabled": "Disabled", - "driver_manager.status.full_required": "Full edition required", - "driver_manager.version.default": "Default version", - "driver_manager.version.inline_suffix": " ({{version}})", - "driver_manager.version.group.year": "{{year}}", - "driver_manager.version.group.other": "Other", - "driver_manager.version.placeholder.select": "Select driver version", - "driver_manager.version.placeholder.load_on_expand": "Expand to load versions", - "driver_manager.version.installed_locked_with_version": "{{version}} (installed; remove it to change)", - "driver_manager.version.installed_locked": "Installed (remove it to change)", - "driver_manager.version.mongodb_hint": "Currently only MongoDB 1.17.x and 2.x are supported. Older 1.x versions are not available for installation.", - "driver_manager.backend.dialog.select_download_directory": "Select driver download directory", - "driver_manager.backend.dialog.select_package_file": "Select driver package file (not a JDBC Jar)", - "driver_manager.backend.dialog.select_package_directory": "Select driver package directory", - "driver_manager.backend.driver_fallback_name": "driver", - "driver_manager.backend.package_size.built_in": "Built-in", - "driver_manager.backend.package_size.to_be_published": "To be published", - "driver_manager.backend.version.unlabeled": "Unlabeled version", - "driver_manager.backend.version.latest_suffix": " (latest)", - "driver_manager.backend.version.recommended_suffix": " (recommended)", - "driver_manager.backend.message.unsupported_builtin_manifest_url": "Unsupported built-in driver manifest URL: {{url}}", - "driver_manager.backend.message.jdbc_jar_unsupported": "Importing JDBC Jar files directly is not supported. GoNavi uses Go drivers and optional driver-agent packages; use a driver package or driver directory instead. To connect to Kingbase, prefer the Kingbase connection type or enter kingbase / kingbase8 in a custom connection.", - "driver_manager.backend.message.runtime_directory_configured": "Driver runtime directory is configured", - "driver_manager.backend.message.opened_directory": "Opened driver directory: {{path}}", - "driver_manager.backend.message.log_hint": " (detail log: {{path}})", - "driver_manager.backend.message.local_import_failed_detail": "Failed to import local driver package: {{detail}}", - "driver_manager.backend.message.metadata_write_failed_detail": "Failed to write driver metadata: {{detail}}", - "driver_manager.backend.message.driver_install_success": "Driver installed successfully", - "driver_manager.backend.message.download_failed_detail": "Failed to download and install driver: {{detail}}", - "driver_manager.backend.message.package_removed": "Driver package removed", - "driver_manager.backend.error.unknown": "Unknown error", - "driver_manager.backend.error.unsupported_driver_type": "Unsupported driver type", - "driver_manager.backend.error.builtin_download_not_required": "Built-in drivers do not need extension package downloads", - "driver_manager.backend.error.builtin_install_not_required": "Built-in drivers do not need extension package installation", - "driver_manager.backend.error.builtin_version_not_required": "Built-in drivers do not need version selection", - "driver_manager.backend.error.builtin_package_not_required": "Built-in drivers do not have install packages", - "driver_manager.backend.error.builtin_remove_not_allowed": "Built-in drivers cannot be removed", - "driver_manager.backend.error.optional_go_only": "Only optional Go drivers can be installed and enabled here", - "driver_manager.backend.error.package_size_unsupported": "This driver does not support install package size queries", - "driver_manager.backend.error.version_empty": "Version is empty", - "driver_manager.backend.error.asset_name_empty": "Driver asset name is empty", - "driver_manager.backend.error.mongo_version_unsupported": "MongoDB version {{version}} is not supported; only 1.17.x and 2.x are supported", - "driver_manager.backend.error.open_directory_unsupported": "Opening directories is not supported on this platform: {{platform}}", - "driver_manager.backend.error.open_directory_failed": "Failed to open driver directory: {{detail}}", - "driver_manager.backend.error.create_directory_failed": "Failed to create driver directory: {{detail}}", - "driver_manager.backend.error.remove_package_failed": "Failed to remove driver package: {{detail}}", - "driver_manager.backend.error.manifest_scheme_unsupported": "Unsupported driver manifest URL scheme: {{scheme}}", - "driver_manager.backend.error.manifest_fetch_failed": "Failed to fetch driver manifest: {{detail}}", - "driver_manager.backend.error.manifest_parse_failed": "Failed to parse driver manifest: {{detail}}", - "driver_manager.backend.error.manifest_url_empty": "Driver manifest URL is empty", - "driver_manager.backend.error.manifest_too_large": "Driver manifest exceeds the size limit", - "driver_manager.backend.error.local_manifest_url_invalid": "Invalid local driver manifest URL", - "driver_manager.backend.error.file_manifest_url_invalid": "Invalid file driver manifest URL", - "driver_manager.backend.error.driver_type_empty": "Driver type is empty", - "driver_manager.backend.error.no_driver_versions": "No available driver versions were found", - "driver_manager.backend.error.module_path_empty": "Module path is empty", - "driver_manager.backend.error.module_version_list_empty": "Module version list is empty", - "driver_manager.backend.error.module_version_list_fetch_failed": "Failed to fetch module version list: {{detail}}", - "driver_manager.backend.error.module_version_list_read_failed": "Failed to read module version list: {{detail}}", - "driver_manager.backend.error.driver_version_list_fetch_failed": "Failed to fetch driver version list: {{detail}}", - "driver_manager.backend.error.driver_version_list_parse_failed": "Failed to parse driver version list: {{detail}}", - "driver_manager.backend.error.cache_key_empty": "Cache key is empty", - "driver_manager.backend.error.release_empty": "Release is empty", - "driver_manager.backend.error.bundle_index_asset_missing": "Driver bundle index asset was not found", - "driver_manager.backend.error.bundle_index_empty": "Driver bundle index is empty", - "driver_manager.backend.error.bundle_index_fetch_failed": "Failed to fetch driver bundle index: {{detail}}", - "driver_manager.backend.error.bundle_index_parse_failed": "Failed to parse driver bundle index: {{detail}}", - "driver_manager.backend.error.tag_empty": "Tag is empty", - "driver_manager.backend.error.api_url_empty": "API URL is empty", - "driver_manager.backend.error.release_info_fetch_failed": "Failed to fetch Release information: {{detail}}", - "driver_manager.backend.error.local_package_path_empty": "Local driver package path is empty", - "driver_manager.backend.error.local_directory_path_empty": "Local driver directory path is empty", - "driver_manager.backend.error.file_path_empty": "File path is empty", - "driver_manager.backend.error.download_url_empty": "Download URL is empty", - "driver_manager.backend.error.bundle_url_empty": "Driver bundle download URL is empty", - "driver_manager.backend.error.read_local_package_failed": "Failed to read local driver package: {{detail}}", - "driver_manager.backend.error.read_local_directory_failed": "Failed to read local driver directory: {{detail}}", - "driver_manager.backend.error.scan_local_directory_failed": "Failed to scan local driver directory: {{detail}}", - "driver_manager.backend.error.open_local_package_failed": "Failed to open local driver package: {{detail}}", - "driver_manager.backend.error.read_local_package_entry_failed": "Failed to read local driver package entry: {{detail}}", - "driver_manager.backend.error.download_failed": "Download failed: {{detail}}", - "driver_manager.backend.error.bundle_download_failed": "Failed to download driver bundle: {{detail}}", - "driver_manager.backend.error.open_bundle_failed": "Failed to open driver bundle: {{detail}}", - "driver_manager.backend.error.read_bundle_entry_failed": "Failed to read driver bundle entry: {{detail}}", - "driver_manager.backend.error.source_build_failed": "Local source build failed: {{detail}}", - "driver_manager.backend.error.prebuilt_downloads_failed": "Prebuilt package download failed: {{detail}}", - "driver_manager.backend.status.built_in_available": "Built-in driver is ready to connect", - "driver_manager.backend.status.optional_enabled": "Go driver is enabled and ready to connect", - "driver_manager.backend.status.installed_pending_with_version": "Driver is installed (version: {{version}}) and pending activation", - "driver_manager.backend.status.installed_pending": "Driver is installed and pending activation", - "driver_manager.backend.status.optional_disabled_with_version": "Not enabled (version: {{version}})", - "driver_manager.backend.status.optional_disabled_generic": "Not enabled", - "driver_manager.backend.status.needs_update": "Reinstall required to apply driver updates.", - "driver_manager.backend.status.installed_revision": "installed revision {{revision}}.", - "driver_manager.backend.status.expected_revision": "expected revision {{revision}}.", - "driver_manager.backend.status.affected_connections": "Affects {{count}} saved connections", - "driver_manager.backend.status.unrecognized_driver_type": "Unrecognized data source type", - "driver_manager.backend.status.slim_build_required": "{{name}} is not included in the current slim build. Install the Full edition to use this driver.", - "driver_manager.backend.status.agent_path_failed": "{{name}} driver agent path could not be resolved; reinstall and enable it in Driver Manager.", - "driver_manager.backend.status.agent_missing": "{{name}} driver agent is missing; reinstall and enable it in Driver Manager.", - "driver_manager.backend.status.optional_disabled": "{{name}} Go driver is not enabled; install and enable it in Driver Manager.", - "driver_manager.backend.status.agent_unavailable_reinstall": "{{name}} driver agent is unavailable: {{detail}}; reinstall and enable it in Driver Manager.", - "driver_manager.backend.status.agent_arch_incompatible_detail": "{{name}} driver agent architecture is incompatible: file={{file}}, current process={{process}}; reinstall and enable it in Driver Manager.", - "driver_manager.backend.network.probe.github_driver_release": "GitHub driver releases", - "driver_manager.backend.network.probe.github_release_asset_domain": "GitHub Release asset domain", - "driver_manager.backend.network.probe.go_module_proxy": "Go module proxy", - "driver_manager.backend.network.error.probe_url_empty": "Probe URL is empty", - "driver_manager.backend.network.error.probe_host_missing": "Probe URL is missing a host", - "driver_manager.backend.network.summary.download_chain_unreachable": "GitHub API is reachable, but the driver download chain is unreachable. Enable GoNavi global proxy first, allow github.com, api.github.com, release-assets.githubusercontent.com, objects.githubusercontent.com, and raw.githubusercontent.com in proxy rules, then consider TUN mode if it still fails.", - "driver_manager.backend.progress.plan.source_only": "Preparing to install {{name}} driver agent (version {{version}}); this version only allows local source builds", - "driver_manager.backend.progress.plan.source_first": "Preparing to install {{name}} driver agent (version {{version}}); try a local source build first, then continue with download fallback if it fails", - "driver_manager.backend.progress.plan.direct_then_bundle": "Preparing to install {{name}} driver agent (version {{version}}); try {{direct}} prebuilt direct link first, then use {{bundle}} driver bundle source", - "driver_manager.backend.progress.plan.explicit_direct": "Preparing to install {{name}} driver agent (version {{version}}); only explicit version assets are allowed, trying {{direct}} prebuilt direct link first", - "driver_manager.backend.progress.plan.direct_only": "Preparing to install {{name}} driver agent (version {{version}}); try {{direct}} prebuilt direct link first", - "driver_manager.backend.progress.plan.bundle_only": "Preparing to install {{name}} driver agent (version {{version}}); no prebuilt direct link is available, trying {{bundle}} driver bundle source", - "driver_manager.backend.progress.plan.source_fallback": "Preparing to install {{name}} driver agent (version {{version}}); fall back to a local source build if release assets do not match", - "driver_manager.backend.progress.fallback.direct_to_bundle": "Prebuilt direct links did not match; falling back to driver bundles ({{name}}, {{bundle}} bundle source remaining)", - "driver_manager.backend.progress.fallback.explicit_skip_bundle": "Prebuilt direct links did not match; this version only allows explicit assets, skipping driver bundles ({{name}})", - "driver_manager.backend.progress.fallback.bundle_available": "Direct links are unavailable; falling back to driver bundles ({{name}}, {{bundle}} bundle source remaining)", - "driver_manager.backend.progress.fallback.source_build": "Release assets did not match; preparing to fall back to a local source build ({{name}})", - "data_sync.action.analyze_diff": "Analyze Differences", - "data_sync.action.cancel": "Cancel", - "data_sync.action.close": "Close", - "data_sync.action.continue_sync": "Continue Sync", - "data_sync.action.next": "Next", - "data_sync.action.previous": "Previous", - "data_sync.action.start_sync": "Start Sync", - "data_sync.action.view": "View", - "data_sync.compare_entry.action.return_to_compare": "Back to Comparison", - "data_sync.compare_entry.alert.data": "You are in Data Compare. It only analyzes row-level differences by primary key and does not write data.", - "data_sync.compare_entry.alert.schema": "You are in Schema Compare. It only analyzes schema differences and generates reviewable SQL without applying changes.", - "data_sync.compare_entry.option.auto_add_columns": "Generate compatible change SQL for missing target columns (preview only, not executed)", - "data_sync.compare_entry.option.source_dataset.query": "Compare by SQL Result Set", - "data_sync.compare_entry.option.source_dataset.table": "Compare by Table", - "data_sync.compare_entry.preview.selection_hint": "Row selection only affects the SQL preview scope and does not write data.", - "data_sync.compare_entry.preview.sql.data_help": "SQL preview is generated from the selected insert, update, delete, and row ranges for difference review only.", - "data_sync.compare_entry.preview.sql.schema_help": "SQL preview shows suggested schema-difference statements for review only.", - "data_sync.compare_entry.result.completed": "Comparison Completed", - "data_sync.compare_entry.result.failed": "Comparison Failed", - "data_sync.compare_entry.result.running": "Comparing", - "data_sync.compare_entry.result.running_description": "Current stage: {{stage}}{{table}}", - "data_sync.compare_entry.result.stage_fallback": "Running", - "data_sync.compare_entry.result.success_summary": "Successfully compared {{tables}} tables.", - "data_sync.compare_entry.result.table_suffix": ", table: {{table}}", - "data_sync.compare_entry.title.analysis_log": "Analysis Log", - "data_sync.compare_entry.workflow_help": "This entry only analyzes differences and previews results. It does not sync, create tables, add columns, or delete data.", - "data_sync.entry_mode.compare.action.start": "Start Comparison", - "data_sync.entry_mode.compare.option_title": "Comparison Options", - "data_sync.entry_mode.compare.result_title": "Comparison Result", - "data_sync.entry_mode.data_compare.badge": "Data Compare", - "data_sync.entry_mode.data_compare.description": "Compare source and target table data by primary key, including inserts, updates, and deletes.", - "data_sync.entry_mode.data_compare.hero_description": "Use this to verify data consistency. It only analyzes differences and previews rows without writing data.", - "data_sync.entry_mode.data_compare.table_select_label": "Select tables to compare data:", - "data_sync.entry_mode.data_compare.title": "Data Compare", - "data_sync.entry_mode.schema_compare.badge": "Schema Compare", - "data_sync.entry_mode.schema_compare.description": "Generate schema differences, compatibility risks, and reviewable SQL between source and target tables.", - "data_sync.entry_mode.schema_compare.hero_description": "Use this before release to check schema differences. It only analyzes and previews without applying schema changes.", - "data_sync.entry_mode.schema_compare.table_select_label": "Select tables to compare schema:", - "data_sync.entry_mode.schema_compare.title": "Schema Compare", - "data_sync.entry_mode.sync.hero_description": "Use this when target tables already exist. Analyze differences first, then apply selected inserts, updates, or deletes.", - "data_sync.alert.auto_create_scope": "Automatic table creation currently supports only MySQL to Kingbase. It migrates columns, primary keys, regular indexes, unique indexes, and composite indexes, and skips full-text, spatial, prefix, and function indexes explicitly.", - "data_sync.alert.auto_create_planner_scope": "Automatic table creation currently supports only MySQL to Kingbase. It migrates columns, primary keys, regular indexes, unique indexes, and composite indexes, and skips full-text, spatial, prefix, and function indexes explicitly.", - "data_sync.alert.existing_target_only": "Data sync runs against existing target tables by default. Switch to cross-database migration when you need table creation and import.", - "data_sync.alert.full_overwrite": "Full overwrite clears target table data. Use it carefully.", - "data_sync.alert.migration_mode": "Cross-database migration is active. Use it to move tables to another data source with automatic table creation and import.", - "data_sync.alert.query_mode": "SQL result-set sync currently supports custom source SQL to one existing target table. The query result must include the target table primary-key column.", - "data_sync.alert.sync_mode": "Data sync is active. Use it for incremental sync or overwrite import when target tables already exist.", - "data_sync.badge.migration_mode": "Migration Mode", - "data_sync.badge.source_pending": "Source Pending", - "data_sync.badge.source_selected": "Source Selected", - "data_sync.badge.sync_mode": "Sync Mode", - "data_sync.badge.table_count": "{{count}} tables", - "data_sync.backend.error.restore_source_secret_failed": "Failed to restore source database connection secret: {{detail}}", - "data_sync.backend.error.restore_target_secret_failed": "Failed to restore target database connection secret: {{detail}}", - "data_sync.backend.error.connect_source_failed": "Source database connection failed: {{detail}}", - "data_sync.backend.error.connect_target_failed": "Target database connection failed: {{detail}}", - "data_sync.backend.error.init_source_driver_failed": "Failed to initialize source database driver: {{detail}}", - "data_sync.backend.error.init_target_driver_failed": "Failed to initialize target database driver: {{detail}}", - "data_sync.backend.error.preview_composite_pk_unsupported": "Composite primary key ({{columns}}) is not supported for data preview", - "data_sync.backend.error.preview_pk_required": "No primary key, data preview is not supported", - "data_sync.backend.error.target_pk_required_for_query_diff": "The target table has no primary key, so SQL result-set difference analysis is not supported", - "data_sync.backend.result.analyzed_tables": "Analyzed {{count}} table(s)", - "data_sync.backend.result.analyzed_target_tables": "Analyzed {{count}} target table(s)", - "data_sync.backend.summary.diff_completed": "Difference analysis completed", - "data_sync.backend.summary.source_query_diff_completed": "SQL result-set difference analysis completed", - "data_sync.backend.validation.query_mode_data_only": "SQL result-set sync currently supports data-only sync", - "data_sync.backend.validation.single_target_table_required": "SQL result-set sync requires exactly one target table", - "data_sync.backend.validation.source_query_required": "Source query SQL is required", - "data_sync.backend.validation.target_table_required": "Target table is required", - "data_sync.backend.warning.index_columns_missing": "Index {{name}} has no column definition and was skipped", - "data_sync.backend.warning.index_prefix_length_unsupported": "Index {{name}} uses a prefix length and cannot be migrated automatically yet", - "data_sync.backend.warning.index_type_unsupported": "Index {{name}} type={{type}} cannot be migrated automatically yet", - "data_sync.confirm.full_overwrite.content": "Full overwrite clears target table data before inserting rows. Confirm that the target database has been backed up.", - "data_sync.confirm.full_overwrite.ok": "Continue", - "data_sync.confirm.full_overwrite.title": "Confirm Full Overwrite", - "data_sync.modal.full_overwrite_title": "Confirm Full Overwrite", - "data_sync.modal.full_overwrite_content": "Full overwrite clears target table data before inserting rows. Confirm that the target database has been backed up.", - "data_sync.modal.full_overwrite_ok": "Continue", - "data_sync.diff.column.delete": "Delete", - "data_sync.diff.column.insert": "Insert", - "data_sync.diff.column.plan": "Plan", - "data_sync.diff.column.preview": "Preview", - "data_sync.diff.column.risk": "Risk", - "data_sync.diff.column.same": "Same", - "data_sync.diff.column.table": "Table", - "data_sync.diff.column.target_table": "Target Table", - "data_sync.diff.column.update": "Update", - "data_sync.diff.more_warnings": "{{count}} more not shown", - "data_sync.diff.target_exists": "Exists", - "data_sync.diff.target_missing": "Missing", - "data_sync.diff.title": "Comparison Result", - "data_sync.diff.warning_title": "Precheck found risks or degraded items. Review them before execution.", - "data_sync.message.precheck_warnings": "Precheck found risks or degraded items. Review them before execution.", - "data_sync.message.more_items_collapsed": "{{count}} more not shown", - "data_sync.table.table_name": "Table", - "data_sync.table.target_table": "Target Table", - "data_sync.table.target_exists": "Exists", - "data_sync.table.target_missing": "Missing", - "data_sync.table.plan": "Plan", - "data_sync.table.insert": "Insert", - "data_sync.table.update": "Update", - "data_sync.table.delete": "Delete", - "data_sync.table.same": "Same", - "data_sync.table.risk": "Risk", - "data_sync.table.preview": "Preview", - "data_sync.title.compare_result": "Comparison Result", - "data_sync.field.connection": "Connection", - "data_sync.field.database": "Database", - "data_sync.field.migration_content": "Migration Content", - "data_sync.field.migration_mode": "Migration Mode", - "data_sync.field.mongo_collection_name": "Mongo Collection Name (optional)", - "data_sync.field.source_dataset_mode": "Source Dataset Mode", - "data_sync.field.source_query_sql": "Source Query SQL", - "data_sync.field.sync_content": "Sync Content", - "data_sync.field.sync_mode": "Sync Mode", - "data_sync.field.target_table": "Target Table", - "data_sync.field.target_table_requirement": "Target Table Requirement", - "data_sync.field.target_table_strategy": "Target Table Strategy", - "data_sync.field.workflow_type": "Workflow Type", - "data_sync.help.mongo_collection_mongo_to_redis": "For MongoDB to Redis, select the source collection directly in most cases. Leave this blank unless an explicit fallback collection name is needed.", - "data_sync.help.mongo_collection_redis_to_mongo": "Leave blank to use the default collection name. When filled, this Redis keyspace writes to that Mongo collection for this run.", - "data_sync.help.workflow_type": "Choose whether this run syncs existing target tables or performs cross-database migration. The page adjusts safer defaults by workflow type.", - "data_sync.help.select_tables": "Select tables to sync:", - "data_sync.help.source_query_mode": "Enter source query SQL and select one target table. Difference analysis compares this result set directly with the target table.", - "data_sync.hero.migration_description": "Move source tables to another database, create tables by policy, import data, and add compatible indexes.", - "data_sync.hero.migration_title": "Cross-Database Migration", - "data_sync.hero.sync_description": "Use existing target tables, compare differences first, then execute selected inserts, updates, or deletes.", - "data_sync.hero.sync_title": "Data Sync", - "data_sync.log.level.error": "Error", - "data_sync.log.level.info": "Info", - "data_sync.log.level.warn": "Warning", - "data_sync.log.title": "Execution Log", - "data_sync.message.analysis_complete": "Difference analysis completed", - "data_sync.message.analysis_failed": "Difference analysis failed", - "data_sync.message.analysis_failed_detail": "Difference analysis failed: {{detail}}", - "data_sync.message.analyze_before_sync": "Analyze differences before starting sync", - "data_sync.message.close_blocked_running": "Sync is running. The window cannot be closed yet.", - "data_sync.message.fetch_source_databases_failed": "Failed to fetch source databases", - "data_sync.message.fetch_source_databases_failed_detail": "Failed to fetch source databases: {{detail}}", - "data_sync.message.fetch_tables_failed": "Failed to fetch tables", - "data_sync.message.fetch_tables_failed_detail": "Failed to fetch tables: {{detail}}", - "data_sync.message.fetch_target_databases_failed": "Failed to fetch target databases", - "data_sync.message.fetch_target_databases_failed_detail": "Failed to fetch target databases: {{detail}}", - "data_sync.message.preview_load_failed": "Failed to load difference preview", - "data_sync.message.preview_load_failed_detail": "Failed to load difference preview: {{detail}}", - "data_sync.message.select_connections_first": "Select connections first", - "data_sync.message.select_databases_first": "Select databases first", - "data_sync.message.select_source_database": "Select source database", - "data_sync.message.select_target_database": "Select target database", - "data_sync.message.sync_execution_failed": "Sync execution failed", - "data_sync.message.sync_execution_failed_detail": "Sync execution failed: {{detail}}", - "data_sync.option.auto_add_columns": "Add missing target columns automatically (currently supports MySQL targets and MySQL to Kingbase; SQL result-set mode is not supported)", - "data_sync.option.content.both": "Sync Schema + Data", - "data_sync.option.content.data": "Data Only", - "data_sync.option.content.schema": "Schema Only", - "data_sync.option.create_indexes": "Migrate compatible regular and unique indexes automatically (only for automatic table creation)", - "data_sync.option.source_dataset.query": "Sync by SQL Result Set", - "data_sync.option.source_dataset.table": "Sync by Table", - "data_sync.option.show_same_tables": "Show Same Tables", - "data_sync.option.sync_mode.full_overwrite": "Full Overwrite (clear target table before insert)", - "data_sync.option.sync_mode.insert_only": "Insert Only (no target comparison; tables without primary keys are skipped)", - "data_sync.option.sync_mode.insert_update": "Incremental Sync (compare differences, then select inserts, updates, and deletes)", - "data_sync.option.target_strategy.auto_create_if_missing": "Create target table automatically when missing", - "data_sync.option.target_strategy.existing_only": "Use existing target tables only", - "data_sync.option.target_strategy.smart": "Smart Mode (import directly when present, create automatically when missing)", - "data_sync.option.workflow.migration": "Cross-Database Migration (create tables automatically and import)", - "data_sync.option.workflow.sync": "Data Sync (compare and sync against existing target tables)", - "data_sync.placeholder.mongo_collection_name": "Enter Mongo collection name", - "data_sync.placeholder.source_query_sql": "Example: SELECT id, name, email FROM users WHERE status = 'active'", - "data_sync.placeholder.target_table": "Select one target table", - "data_sync.preview.action.copy_sql": "Copy SQL", - "data_sync.preview.column.changed_columns": "Changed Columns", - "data_sync.preview.column.data": "Data", - "data_sync.preview.column.detail": "Details", - "data_sync.preview.column.primary_key": "Primary Key", - "data_sync.preview.data_summary": "Insert {{inserts}}, update {{updates}}, delete {{deletes}} (preview shows up to 200 rows per type)", - "data_sync.preview.delete_warning": "Delete is not selected by default. Enable delete only after confirming business impact.", - "data_sync.preview.loading": "Loading difference preview...", - "data_sync.preview.message.copy_failed": "Copy failed. Copy manually.", - "data_sync.preview.message.sql_copied": "SQL copied", - "data_sync.preview.schema_plan_help": "Statements planned for this schema sync run are shown below.", - "data_sync.preview.schema_statement_count": "{{count}} schema change statements detected", - "data_sync.preview.schema_warning_title": "Schema preview contains risks or degraded items", - "data_sync.preview.selection_hint.delete": "When no rows are selected, all delete differences are synced. Clear Delete in the comparison result to skip deletes.", - "data_sync.preview.selection_hint.insert": "When no rows are selected, all insert differences are synced. Clear Insert in the comparison result to skip inserts.", - "data_sync.preview.selection_hint.update": "When no rows are selected, all update differences are synced. Clear Update in the comparison result to skip updates.", - "data_sync.preview.side.source": "Source", - "data_sync.preview.side.target": "Target", - "data_sync.preview.sql.data_help": "SQL preview is generated from the selected insert, update, delete, and row ranges for review.", - "data_sync.preview.sql.no_data_sql": "-- No SQL available for the current selection", - "data_sync.preview.sql.no_schema_changes": "-- No executable schema changes for the current table", - "data_sync.preview.sql.schema_help": "SQL preview shows the schema change statements that will be executed for review.", - "data_sync.preview.sql.schema_statement_count": "{{count}} schema change statements", - "data_sync.preview.sql.statement_count": "{{count}} statements (preview data shows up to 200 rows per type)", - "data_sync.preview.tab.delete": "Delete({{count}})", - "data_sync.preview.tab.insert": "Insert({{count}})", - "data_sync.preview.tab.schema": "Schema({{count}})", - "data_sync.preview.tab.sql": "SQL({{count}})", - "data_sync.preview.tab.update": "Update({{count}})", - "data_sync.preview.title": "Difference Preview: {{table}}", - "data_sync.preview.update_detail_title": "Update Details: {{table}} / {{pk}}", - "data_sync.plan.use_existing_target": "Import into existing target table", - "data_sync.plan.target_missing_manual_create": "Target table is missing. Create it manually first.", - "data_sync.plan.target_missing_auto_create": "Target table is missing. It will be created automatically before import.", - "data_sync.plan.target_missing_cannot_sync": "Target table is missing. Sync cannot run.", - "data_sync.plan.target_missing_auto_create_all": "Target table is missing. It will be created automatically at execution and all source data will be imported.", - "data_sync.plan.schema_changes_detected": "{{count}} schema changes detected", - "data_sync.plan.add_missing_columns_before_import": "Add {{count}} missing columns before import", - "data_sync.plan.missing_columns_no_executable_sql": "Target table is missing {{count}} columns, but no executable add-column SQL was generated", - "data_sync.plan.missing_columns_auto_add_unsupported": "Target table is missing {{count}} columns, and automatic column completion is not supported for this database pair", - "data_sync.plan.missing_columns_auto_add_disabled": "Target table is missing {{count}} columns, and automatic column completion is disabled", - "data_sync.plan.schema_only_no_data_diff": "Schema-only sync. Data difference analysis was not run.", - "data_sync.plan.schema_only": "Schema-only sync", - "data_sync.plan.schema_preview": "Schema preview", - "data_sync.plan.schema_aligned": "Table schema is already aligned", - "data_sync.plan.auto_create_unsupported": "Automatic table creation is not supported for this database pair", - "data_sync.plan.tdengine_time_column_missing": "No source time column can be mapped to the first TDengine column, so automatic table creation cannot run", - "data_sync.plan.use_existing_target_collection": "Import into existing target collection", - "data_sync.plan.target_collection_missing_manual_create": "Target collection is missing. Create it manually first.", - "data_sync.plan.target_collection_missing_auto_create": "Target collection is missing. It will be created automatically before import.", - "data_sync.plan.redis_key_to_mongodb_document": "Generate MongoDB documents from Redis Keys and import them", - "data_sync.plan.migrate_to_collection": "Migrate to collection {{collection}}", - "data_sync.plan.migrate_to_target": "Migrate to {{target}}", - "data_sync.plan.source_query_preview": "SQL result-set sync preview", - "data_sync.plan.migration_kernel_planning": "This database pair is in migration planning and is waiting for structure analysis and target dialect generation", - "data_sync.plan.backend_summary": "Plan summary", - "data_sync.progress.stage.analysis_started": "Difference analysis started", - "data_sync.progress.stage.analysis_completed": "Difference analysis completed", - "data_sync.progress.stage.sync_started": "Sync started", - "data_sync.progress.stage.connecting_source": "Connecting to source database", - "data_sync.progress.stage.connecting_target": "Connecting to target database", - "data_sync.progress.stage.analyzing_table": "Analyzing table ({{current}}/{{total}})", - "data_sync.progress.stage.syncing_table": "Syncing table ({{current}}/{{total}})", - "data_sync.progress.stage.table_completed": "Table processing completed", - "data_sync.progress.stage.creating_target_table": "Creating target table", - "data_sync.progress.stage.syncing_schema": "Syncing table schema", - "data_sync.progress.stage.creating_indexes": "Creating indexes", - "data_sync.progress.stage.reading_source": "Reading source table data", - "data_sync.progress.stage.reading_target": "Reading target table data", - "data_sync.progress.stage.comparing_diff": "Comparing differences", - "data_sync.progress.stage.clearing_target": "Clearing target table", - "data_sync.progress.stage.checking_columns": "Checking column consistency", - "data_sync.progress.stage.applying_changes": "Applying changes", - "data_sync.progress.stage.completed": "Sync completed", - "data_sync.progress.stage.failed": "Sync failed", - "data_sync.progress.stage.redis_keyspace_started": "Redis keyspace migration started", - "data_sync.progress.stage.creating_target_collection": "Creating target collection", - "data_sync.progress.stage.migrating_key": "Migrating Key ({{current}}/{{total}})", - "data_sync.progress.stage.mongodb_keyspace_started": "MongoDB keyspace migration started", - "data_sync.progress.stage.migrating_collection": "Migrating collection ({{current}}/{{total}})", - "data_sync.progress.stage.collection_completed": "Collection processing completed", - "data_sync.progress.stage.backend_update": "Progress update", - "data_sync.progress.stage.analyzing_diff": "Analyzing differences", - "data_sync.progress.stage.executing": "Executing", - "data_sync.progress.stage.preparing": "Preparing", - "data_sync.query_mode.help": "Enter source query SQL and select one target table. Difference analysis compares this result set directly with the target table.", - "data_sync.result.completed": "Sync Completed", - "data_sync.result.failed": "Sync Failed", - "data_sync.result.failed_description": "Sync did not complete.", - "data_sync.result.failed_detail": "Sync failed: {{detail}}", - "data_sync.result.running": "Sync Running", - "data_sync.result.running_description": "Current stage: {{stage}}{{table}}", - "data_sync.result.success_summary": "Successfully synced {{tables}} tables. Inserted: {{inserted}}, updated: {{updated}}", - "data_sync.result.table_suffix": ", table: {{table}}", - "data_sync.section.migration_options": "Migration Options", - "data_sync.section.source_database": "Source Database", - "data_sync.section.sync_options": "Sync Options", - "data_sync.section.target_database": "Target Database", - "data_sync.title.source_database": "Source Database", - "data_sync.title.target_database": "Target Database", - "data_sync.title.migration_options": "Migration Options", - "data_sync.title.sync_options": "Sync Options", - "data_sync.title.execution_log": "Execution Log", - "data_sync.step.configure": "Configure Source and Target", - "data_sync.step.result": "Execution Result", - "data_sync.step.select_tables": "Select Tables", - "data_sync.table_picker.help": "Select tables to sync:", - "data_sync.table_picker.item_unit": "item", - "data_sync.table_picker.items_unit": "items", - "data_sync.table_picker.not_found": "No data", - "data_sync.table_picker.search_placeholder": "Search tables...", - "data_sync.table_picker.selected_title": "Selected Tables", - "data_sync.table_picker.show_same": "Show Same Tables", - "data_sync.table_picker.source_title": "Source Tables", - "data_sync.transfer.source_tables": "Source Tables", - "data_sync.transfer.selected_tables": "Selected Tables", - "data_sync.transfer.item_unit": "item", - "data_sync.transfer.items_unit": "items", - "data_sync.transfer.search_placeholder": "Search tables...", - "data_sync.transfer.empty": "No data", - "data_sync.title.migration_description": "Create tables, import data, and run risk prechecks from source to target.", - "data_sync.title.migration_workbench": "Cross-Database Migration Workbench", - "data_sync.title.sync_description": "Compare differences, execute sync, and confirm results against existing target tables.", - "data_sync.title.sync_workbench": "Data Sync Workbench", - "data_sync.title.migration": "Cross-Database Migration", - "data_sync.title.sync": "Data Sync", - "data_sync.validation.query_mode_data_only": "SQL result-set sync supports data-only sync", - "data_sync.validation.single_target_table_required": "SQL result-set sync requires exactly one target table", - "data_sync.validation.source_query_required": "Enter source query SQL", - "data_sync.validation.table_required": "Select at least one table", - "data_sync.plan.use_existing_target_table": "Import into existing target table", - "data_sync.plan.missing_columns_auto_add": "Add {{count}} missing columns before import", - "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "No source time column can be mapped to the first TDengine column, so automatic table creation cannot run", - "data_sync.plan.redis_mongo_keyspace_import": "Generate MongoDB documents from Redis Keys and import them", - "data_sync.plan.redis_mongo_target_collection_missing_manual": "Target collection is missing. Create it manually first.", - "data_sync.plan.redis_mongo_target_collection_auto_create": "Target collection is missing. It will be created automatically before import.", - "data_sync.backend.summary.redis_mongo_planned_action": "Migrate to collection {{collection}}", - "data_sync.backend.summary.mongo_redis_planned_action": "Migrate to {{target}}", - "data_sync.plan.mongo_relational_kernel_planned": "This database pair is in migration planning and is waiting for structure analysis and target dialect generation", - "data_sync.progress.stage.redis_mongo_creating_collection": "Creating target collection", - "data_sync.progress.stage.redis_mongo_migrating_key": "Migrating Key ({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_migrating_collection": "Migrating collection ({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_collection_completed": "Collection processing completed", - "data_sync.backend.error.apply_changes_unsupported": "The target driver does not support applying data changes", - "data_sync.backend.error.apply_source_query_changes_failed": "Failed to apply SQL result-set changes: {{detail}}", - "data_sync.backend.error.clear_target_failed": "Failed to clear target table: {{detail}}", - "data_sync.backend.error.connect_source_mongodb_failed": "Source MongoDB connection failed: {{detail}}", - "data_sync.backend.error.connect_source_redis_failed": "Source Redis connection failed: {{detail}}", - "data_sync.backend.error.connect_target_mongodb_failed": "Target MongoDB connection failed: {{detail}}", - "data_sync.backend.error.connect_target_redis_failed": "Target Redis connection failed: {{detail}}", - "data_sync.backend.error.diff_composite_pk_unsupported": "Composite primary key ({{columns}}) is not supported for difference comparison sync", - "data_sync.backend.error.diff_pk_required": "No primary key. Difference comparison sync is not supported; use insert-only or full-overwrite mode for direct import.", - "data_sync.backend.error.execute_source_query_failed": "Failed to execute source query: {{detail}}", - "data_sync.backend.error.init_source_mongodb_driver_failed": "Failed to initialize source MongoDB driver: {{detail}}", - "data_sync.backend.error.init_target_mongodb_driver_failed": "Failed to initialize target MongoDB driver: {{detail}}", - "data_sync.backend.error.inspect_mongodb_collection_failed": "Failed to inspect target MongoDB collection: {{detail}}", - "data_sync.backend.error.list_mongodb_collections_failed": "Failed to list MongoDB collections: {{detail}}", - "data_sync.backend.error.load_target_columns_failed": "Failed to load target table columns: {{detail}}", - "data_sync.backend.error.mongo_document_write_unsupported": "The target driver does not support MongoDB document writes", - "data_sync.backend.error.mongo_redis_analyze_collection_failed": "Failed to analyze MongoDB collection {{collection}}: {{detail}}", - "data_sync.backend.error.mongo_redis_document_key_missing": "MongoDB document is missing the key field", - "data_sync.backend.error.mongo_redis_document_type_missing": "MongoDB document for Redis Key {{key}} is missing field {{field}}", - "data_sync.backend.error.mongo_redis_empty_target_value": "Redis target value is empty for key {{key}}", - "data_sync.backend.error.mongo_redis_unsupported_type": "Redis type {{type}} is not supported for key {{key}}", - "data_sync.backend.error.mongo_redis_value_invalid": "Redis value for key {{key}} has invalid {{type}} payload; actual type={{actual}}", - "data_sync.backend.error.mongo_redis_write_key_failed": "Failed to write Redis Key {{key}}: {{detail}}", - "data_sync.backend.error.read_redis_key_failed": "Failed to read Redis Key {{key}}: {{detail}}", - "data_sync.backend.error.read_source_table_failed": "Failed to read source table: {{detail}}", - "data_sync.backend.error.read_target_redis_key_failed": "Failed to read target Redis Key {{key}}: {{detail}}", - "data_sync.backend.error.read_target_table_failed": "Failed to read target table: {{detail}}", - "data_sync.backend.error.redis_mongo_analyze_changes_failed": "Failed to analyze Redis migration changes: {{detail}}", - "data_sync.backend.error.redis_mongo_apply_changes_failed": "Failed to apply Redis migration changes: {{detail}}", - "data_sync.backend.error.redis_mongo_build_changes_failed": "Failed to build Redis migration changes: {{detail}}", - "data_sync.backend.error.redis_mongo_create_collection_failed": "Failed to create target MongoDB collection: {{detail}}", - "data_sync.backend.error.scan_redis_keys_failed": "Failed to scan Redis Keys: {{detail}}", - "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "Target table has composite primary key ({{columns}}), so SQL result-set difference analysis is not supported", - "data_sync.backend.error.target_table_columns_missing": "Target table {{table}} is missing or its column definitions could not be read", - "data_sync.backend.result.mongo_redis_analyzed_collections": "Analyzed {{count}} MongoDB collection(s) for Redis migration", - "data_sync.backend.result.mongo_redis_completed": "MongoDB keyspace migration completed; processed {{collections}} collection(s) and {{keys}} Redis Key(s)", - "data_sync.backend.result.mongo_redis_no_collections": "No MongoDB collections available for migration", - "data_sync.backend.result.mongo_redis_no_documents": "No MongoDB Redis documents available for migration", - "data_sync.backend.result.redis_mongo_analyzed_keys": "Analyzed {{count}} Redis Key(s) for MongoDB migration", - "data_sync.backend.result.redis_mongo_completed": "Redis keyspace migration completed; processed {{count}} Redis Key(s)", - "data_sync.backend.result.redis_mongo_no_keys": "No Redis Keys available for migration", - "data_sync.backend.summary.mongo_redis_diff": "Execution will insert {{inserts}} Redis Key(s) and update {{updates}} Redis Key(s)", - "data_sync.backend.summary.mongo_redis_empty_collection": "No migratable documents were found in the collection", - "data_sync.backend.summary.mongo_redis_same_keys": "The matching Redis Keys are already up to date", - "data_sync.backend.summary.mongo_redis_warning_document_format": "Only documents with key/type/ttl/value fields are supported", - "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB to Redis downgrades full overwrite to incremental sync to avoid deleting other Redis Keys in the DB", - "data_sync.backend.summary.mongo_redis_warning_keyspace": "Documents in the MongoDB collection will be written to Redis by keyspace semantics", - "data_sync.backend.summary.redis_mongo_insert_document": "Execution will insert a new MongoDB document", - "data_sync.backend.summary.redis_mongo_same_document": "The matching MongoDB document is already up to date", - "data_sync.backend.summary.redis_mongo_update_document": "Execution will update the existing MongoDB document", - "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key will be written as a MongoDB document", - "data_sync.plan.data_import_without_diff": "The current mode imports source table data without difference comparison.", - "data_sync.plan.mongo_relational_entry_warning": "The {{objectKind}} migration from {{sourceType}} to {{targetType}} currently only has a structure-analysis planning notice", - "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis to MongoDB migrates by keyspace semantics and does not run table schema checks", - "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Redis TTL and collection ordering semantics are preserved as document fields and may not be fully equivalent", - "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "Current strategy requires an existing target MongoDB collection; execution will not create it automatically", - "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state are not migrated yet", - "data_sync.plan.target_missing_preview_unavailable": "The target table is missing. Difference preview is unavailable.", - "data_sync.progress.stage.redis_mongo_started": "Redis to MongoDB keyspace migration started", - "data_sync.progress.stage.mongo_redis_started": "MongoDB to Redis keyspace migration started", - "data_sync.schema_inference.mongo_relational_issue": "Structure analysis for {{sourceType}} -> {{targetType}} is still under development; only a migration-planning notice is available now.", - "data_sync.schema_inference.mongo_relational_resolution": "Future iterations will generate column definitions and type-degradation policies from sampled data.", - "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view semantics are not automatically migrated to PG-like targets yet", - "data_sync.backend.warning.auto_create_pair_unsupported": "Automatic table creation currently supports only MySQL -> Kingbase; current pair={{sourceType}} -> {{targetType}}", - "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "Column {{column}} type {{type}} was degraded to json", - "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "Column {{column}} type {{type}} was degraded to jsonb", - "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "Column {{column}} enum type {{type}} was degraded to varchar(255)", - "data_sync.backend.warning.clickhouse_order_by_tuple_used": "No source primary key was detected, so ClickHouse will use ORDER BY tuple(); query performance may be affected", - "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse does not preserve relational foreign-key or unique-constraint semantics; only columns and data are migrated", - "data_sync.backend.warning.clickhouse_source_metadata_limited": "ClickHouse source metadata for indexes and constraints is limited; reverse migration focuses on columns and data", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "ClickHouse source did not return primary-key information, so the target MySQL table will not create a primary key automatically", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "ClickHouse source did not return primary-key information, so the target PG-like table will not create a primary key automatically", - "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "For ClickHouse targets, insert-only or full-overwrite is recommended; update/delete semantics differ from traditional relational databases", - "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "Column {{column}} type {{type}} has no dedicated MySQL mapping and was degraded to text", - "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "Column {{column}} type {{type}} has no dedicated PG-like mapping and was degraded to text", - "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "Column {{column}} type {{type}} was mapped to numeric(20,0) to avoid unsigned overflow", - "data_sync.backend.warning.column_type_degraded_clickhouse_string": "Column {{column}} type {{type}} was degraded to String", - "data_sync.backend.warning.column_type_empty_clickhouse_string": "Column {{column}} type is empty and was degraded to String", - "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "Column {{column}} is a user-defined type and was degraded to String", - "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "Column {{column}} AUTO_INCREMENT is not preserved as auto-increment semantics in ClickHouse", - "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "Column {{column}} binary type was degraded to String", - "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "Column {{column}} type {{type}} was degraded to String", - "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "Column {{column}} type {{type}} has no dedicated ClickHouse mapping and was degraded to String", - "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "Column {{column}} identity/auto-increment semantics are not preserved in ClickHouse", - "data_sync.backend.warning.target_existing_only_required": "The current strategy requires the target table to exist, so it will not be created automatically at execution.", - "data_sync.backend.warning.target_exists_data_only_no_indexes": "The target table already exists. Only data import will run; existing indexes and constraints will not be rebuilt automatically.", - "data_sync.backend.warning.target_missing_columns": "Target table is missing {{count}} column(s): {{columns}}", - "data_sync.backend.warning.target_table_existing_only_required": "The current strategy requires the target table to exist, so it will not be created automatically at execution.", - "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "Source ORDER BY/PARTITION/TTL/Projection/materialized-view semantics are not automatically migrated to TDengine yet", - "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "Source indexes, foreign keys, triggers, unique constraints, and auto-increment semantics are not automatically migrated to TDengine yet", - "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "Source indexes, foreign keys, triggers, unique constraints, identity, and sequence semantics are not automatically migrated to TDengine yet", - "data_sync.unsupported.tdengine_source_relational_semantics": "TDengine indexes, foreign keys, triggers, supertables, TTL, and other time-series semantics are not automatically migrated yet", - "data_sync.unsupported.tdengine_target_missing_timestamp": "TDengine regular table first column must be TIMESTAMP; the current source table has no directly mappable time column", - "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "Source supertable, TAGS, TTL, retention policy, and index semantics are not automatically migrated to TDengine regular table yet", - "data_sync.warning.target_exists_strategy_no_auto_create": "The current strategy requires the target table to exist, so it will not be created automatically at execution.", - "data_sync.warning.target_missing_columns": "Target table is missing {{count}} column(s): {{columns}}", - "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "TDengine sources do not automatically add columns to an existing target table yet; confirm the target schema first", - "data_sync.warning.tdengine_source_mysql_type_fallback": "Column {{column}} type {{type}} has no dedicated MySQL mapping and was degraded to {{targetType}}", - "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "Column {{column}} type {{type}} was mapped to {{targetType}} to avoid unsigned overflow", - "data_sync.warning.tdengine_source_pglike_type_fallback": "Column {{column}} type {{type}} has no dedicated PG-like mapping and was degraded to {{targetType}}", - "data_sync.warning.tdengine_source_semantics_degraded": "TDengine to relational targets currently migrates only columns and data; supertable, TAG association, retention policy, and other time-series semantics may be degraded or lost", - "data_sync.warning.tdengine_source_tag_column_degraded": "Column {{column}} is a TDengine TAG column and will be degraded to a regular column in the relational target", - "data_sync.warning.tdengine_source_tag_column_mapped": "Column {{column}} is a TDengine TAG column and was mapped as a regular column", - "data_sync.warning.tdengine_target_auto_create_basic_table_only": "TDengine target auto-create currently creates only a basic table; indexes, foreign keys, triggers, supertable/TAGS/TTL are not migrated automatically", - "data_sync.warning.tdengine_target_auto_increment_not_migrated": "Column {{column}} auto-increment semantics are not migrated to TDengine", - "data_sync.warning.tdengine_target_binary_type_fallback": "Column {{column}} type {{type}} was degraded to {{targetType}} by string semantics", - "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "Column {{column}} type {{type}} was promoted to the first TDengine TIMESTAMP column", - "data_sync.warning.tdengine_target_empty_type_fallback": "Column {{column}} type is empty and was degraded to {{targetType}}", - "data_sync.warning.tdengine_target_enum_type_fallback": "Column {{column}} enum type {{type}} was degraded to {{targetType}}", - "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "TDengine targets do not automatically add columns to an existing target table yet; confirm the target schema first", - "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "Column {{column}} FixedString length could not be parsed and was degraded to {{targetType}}", - "data_sync.warning.tdengine_target_identity_not_migrated": "Column {{column}} auto-increment/identity semantics are not migrated to TDengine", - "data_sync.warning.tdengine_target_insert_only": "TDengine targets currently support only INSERT writes; update/delete differences will be rejected at execution", - "data_sync.warning.tdengine_target_json_regular_table_fallback": "Column {{column}} type {{type}} does not preserve TAG semantics in TDengine regular table and was degraded to {{targetType}}", - "data_sync.warning.tdengine_target_json_tag_only_fallback": "Column {{column}} type {{type}} was degraded to {{targetType}} because TDengine JSON applies only to TAG", - "data_sync.warning.tdengine_target_missing_time_column": "The source table has no mappable time column, so automatic table creation is unavailable. Prepare the TDengine target table and time column manually before continuing.", - "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "Column {{column}} primary-key semantics are not migrated to TDengine as relational constraints", - "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "Column {{column}} type {{type}} has no dedicated TDengine same-database mapping and was degraded to {{targetType}}", - "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "Column {{column}} is a TDengine TAG column and will be degraded to a regular column after migration to regular table", - "data_sync.warning.tdengine_target_time_only_type_fallback": "Column {{column}} type {{type}} has no stable TDengine time-only mapping and was degraded to {{targetType}}", - "data_sync.warning.tdengine_target_timestamp_column_reordered": "TDengine base tables require the time column first; column {{column}} was moved to the first position", - "data_sync.warning.tdengine_target_type_fallback": "Column {{column}} type {{type}} was degraded to {{targetType}}", - "data_sync.warning.tdengine_target_type_no_mapping_fallback": "Column {{column}} type {{type}} has no dedicated TDengine mapping and was degraded to {{targetType}}", - "data_sync.warning.tdengine_target_user_defined_type_fallback": "Column {{column}} is a user-defined type and was degraded to {{targetType}}", - "data_sync.backend.error.analyze_prepare_secrets_failed": "Failed to prepare data sync analysis secrets: {{detail}}", - "data_sync.backend.error.apply_changes_failed": "Failed to apply changes: {{detail}}", - "data_sync.backend.error.auto_add_column_failed": "Failed to add column automatically: column={{column}}, error={{detail}}", - "data_sync.backend.error.build_migration_plan_failed": "Failed to build migration plan: table={{table}}, error={{detail}}", - "data_sync.backend.error.create_indexes_failed": "Failed to create indexes: table={{table}}, error={{detail}}", - "data_sync.backend.error.create_table_sql_empty": "Automatic table creation failed for table {{table}}: create-table SQL is empty", - "data_sync.backend.error.create_target_table_failed": "Failed to create target table: table={{table}}, error={{detail}}", - "data_sync.backend.error.exec_ddl_statement_failed": "{{stage}} failed: SQL={{sql}}, error={{detail}}", - "data_sync.backend.error.mongo_read_source_samples_failed": "Failed to read source MongoDB collection samples: {{detail}}", - "data_sync.backend.error.pre_create_table_sql_failed": "Failed to pre-execute create-table SQL: table={{table}}, error={{detail}}", - "data_sync.backend.error.prepare_secrets_failed": "Failed to prepare data sync secrets: {{detail}}", - "data_sync.backend.error.preview_failed": "Data sync preview failed: {{detail}}", - "data_sync.backend.error.preview_prepare_secrets_failed": "Failed to prepare data sync preview secrets: {{detail}}", - "data_sync.backend.error.read_source_table_failed_with_table": "Failed to read source table {{table}}: {{detail}}", - "data_sync.backend.error.read_target_table_failed_with_table": "Failed to read target table {{table}}: {{detail}}", - "data_sync.backend.error.refresh_columns_after_create_failed": "Failed to load columns after creating target table: table={{table}}, error={{detail}}", - "data_sync.backend.error.source_collection_no_migratable_fields": "No migratable fields could be inferred from source MongoDB collection: {{collection}}", - "data_sync.backend.error.source_table_columns_failed": "Failed to get source table columns: {{detail}}", - "data_sync.backend.error.source_table_missing_or_no_columns": "Source table is missing or has no column definitions: {{table}}", - "data_sync.backend.error.sync_table_schema_failed": "Failed to sync table schema: table={{table}}, error={{detail}}", - "data_sync.backend.error.target_collection_check_failed": "Failed to check target MongoDB collection: {{detail}}", - "data_sync.backend.error.target_table_columns_failed": "Failed to get target table columns: {{detail}}", - "data_sync.backend.label.content_data_only": "Data only", - "data_sync.backend.label.content_schema_and_data": "Schema + data", - "data_sync.backend.label.content_schema_only": "Schema only", - "data_sync.backend.label.mode_full_overwrite": "full overwrite", - "data_sync.backend.label.mode_insert_only": "insert only", - "data_sync.backend.label.mode_insert_update": "incremental sync", - "data_sync.backend.label.target_strategy_auto_create_if_missing": "create target automatically when missing", - "data_sync.backend.label.target_strategy_existing_only": "require existing target", - "data_sync.backend.label.target_strategy_smart": "smart target handling", - "data_sync.backend.log.auto_add_columns_completed": "Automatic column completion finished: succeeded={{succeeded}}, failed={{failed}}", - "data_sync.backend.log.change_counts": "Rows to insert: {{inserts}}, update: {{updates}}, delete: {{deletes}}", - "data_sync.backend.log.connecting_source": "Connecting to source database: {{host}}...", - "data_sync.backend.log.connecting_target": "Connecting to target database: {{host}}...", - "data_sync.backend.log.data_already_consistent": "Data is already consistent; no changes are needed.", - "data_sync.backend.log.ddl_statement_succeeded": "Table {{table}} {{stage}} succeeded: {{sql}}", - "data_sync.backend.log.fatal_error": "Fatal error: {{message}}", - "data_sync.backend.log.missing_columns_auto_add_disabled": "Target table is missing {{count}} column(s), but automatic completion is disabled; they will be ignored: {{columns}}", - "data_sync.backend.log.missing_columns_auto_add_started": "Target table is missing {{count}} column(s); starting automatic completion: {{columns}}", - "data_sync.backend.log.mongo_redis_keyspace_options": "MongoDB to Redis keyspace migration; mode={{mode}}; target={{target}}", - "data_sync.backend.log.mongo_redis_migrating_key": "Writing Redis Key {{key}}", - "data_sync.backend.log.mongo_redis_syncing_collection": "Syncing MongoDB collection {{collection}}", - "data_sync.backend.log.redis_mongo_keyspace_options": "Redis to MongoDB keyspace migration; mode={{mode}}; target strategy={{strategy}}", - "data_sync.backend.log.redis_mongo_migrating_key": "Migrating Redis Key {{key}}", - "data_sync.backend.log.source_query_no_changes": "SQL result set and target table are consistent; no changes need to be applied", - "data_sync.backend.log.source_query_sync_completed": "SQL result-set sync completed: inserts={{inserts}}, updates={{updates}}, deletes={{deletes}}", - "data_sync.backend.log.source_query_sync_source": "Sync source: SQL result set -> target table {{table}}; mode: {{mode}}", - "data_sync.backend.log.sync_options": "Sync content: {{content}}; mode: {{mode}}; auto-add columns: {{autoAddColumns}}; target table strategy: {{targetTableStrategy}}; create indexes: {{createIndexes}}", - "data_sync.backend.log.syncing_table": "Syncing table: {{table}}", - "data_sync.backend.log.table_no_operations_skipped": "Table {{table}} has no selected operations and was skipped", - "data_sync.backend.log.target_table_created": "Target table created successfully: {{table}}", - "data_sync.backend.log.target_table_no_operations": "Target table {{table}} has no selected operations and was skipped", - "data_sync.backend.log.unknown_sync_content_data_only": "Unknown sync content {{content}}; data-only sync was selected automatically", - "data_sync.backend.result.preview_ready": "Data sync preview is ready", - "data_sync.backend.result.sync_completed": "Sync completed: tables={{tables}}, inserted={{rowsInserted}}, updated={{rowsUpdated}}, deleted={{rowsDeleted}}", - "data_sync.backend.warning.apply_changes_unsupported": "The target driver does not support applying data changes.", - "data_sync.backend.warning.auto_add_column_sql_generation_failed": "Failed to generate auto-add-column SQL for column {{column}}: {{detail}}", - "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "Column {{column}} is an auto-increment column; {{feature}} will not be recreated automatically when adding it to an existing target table", - "data_sync.backend.warning.column_default_expression_skipped": "Column {{column}} default value {{default}} contains an expression and is not migrated automatically yet", - "data_sync.backend.warning.column_empty_string_default_not_preserved": "Column {{column}} empty-string default value was not preserved", - "data_sync.backend.warning.column_type_degraded": "Column {{column}} type {{sourceType}} was degraded to {{targetType}}", - "data_sync.backend.warning.column_type_empty_degraded": "Column {{column}} type is empty and was degraded to {{targetType}}", - "data_sync.backend.warning.column_type_mapped": "Column {{column}} type {{sourceType}} was mapped to {{targetType}}", - "data_sync.backend.warning.column_type_no_mapping_degraded": "Column {{column}} type {{sourceType}} has no dedicated mapping and was degraded to {{targetType}}", - "data_sync.backend.warning.column_user_defined_degraded": "Column {{column}} is a user-defined type and was degraded to {{targetType}}", - "data_sync.backend.warning.composite_pk_skipped": "Table {{table}} has composite primary key ({{columns}}); difference sync is not supported yet and was skipped", - "data_sync.backend.warning.full_overwrite_clearing_target": "Full overwrite mode: target table {{table}} will be cleared", - "data_sync.backend.warning.load_target_columns_skip_check_failed": "Failed to get target table columns; column consistency check was skipped: {{detail}}", - "data_sync.backend.warning.mongo_redis_document_format": "MongoDB to Redis currently supports documents with key/type/ttl/value fields only", - "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "MongoDB to Redis downgrades full overwrite to incremental sync during this migration", - "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "Column {{column}} is unsigned bigint auto_increment; it was degraded to {{targetType}} and auto-increment semantics were not preserved", - "data_sync.backend.warning.refresh_columns_after_add_failed": "Failed to refresh target columns after adding columns: table={{table}}, error={{detail}}", - "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "Redis to MongoDB downgrades full overwrite to incremental sync during this migration", - "data_sync.backend.warning.source_indexes_read_failed": "Failed to read source table indexes; index migration was skipped: {{detail}}", - "data_sync.backend.warning.table_pk_required_skipped": "Table {{table}} has no primary key; the current mode requires difference comparison and was skipped", - "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "Target table for {{table}} is missing; the current strategy does not allow automatic table creation, so it was skipped", - "data_sync.backend.warning.unknown_content_default_data": "Unknown sync content {{content}}; data-only sync was selected automatically", - "data_sync.backend.warning.unknown_mode_default_insert_update": "Unknown sync mode {{mode}}; incremental sync was selected automatically", - "data_sync.plan.mongo_target_collection_missing_auto_create": "Target MongoDB collection {{collection}} is missing. It will be created automatically before import.", - "data_sync.plan.mongo_target_collection_missing_manual_create": "Target MongoDB collection {{collection}} is missing. Create it manually first.", - "data_sync.schema_sync.error.create_statement_empty": "Create-table statement is empty", - "data_sync.schema_sync.error.create_target_table_failed": "Failed to create target table {{table}}: {{detail}}", - "data_sync.schema_sync.error.get_columns_after_create_failed": "Failed to get columns after creating target table {{table}}: {{detail}}", - "data_sync.schema_sync.error.get_create_statement_failed": "Failed to get create-table statement for source table {{table}}: {{detail}}", - "data_sync.schema_sync.error.get_source_columns_failed": "Failed to get source table {{table}} columns: {{detail}}", - "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "Target table {{table}} is missing, and source type {{sourceType}} does not support automatic table creation yet: {{detail}}", - "data_sync.schema_sync.log.add_column_failed": "Failed to add column: table={{table}}, column={{column}}, error={{detail}}", - "data_sync.schema_sync.log.column_added": "Column added: table={{table}}, column={{column}}, type={{type}}", - "data_sync.schema_sync.log.completed": "Schema sync completed for {{table}}; added {{count}} column(s)", - "data_sync.schema_sync.log.schema_aligned": "Table schema is aligned: {{table}}", - "data_sync.schema_sync.log.target_created": "Target table created successfully: {{table}}", - "data_sync.schema_sync.log.target_missing_create": "Target table {{table}} is missing; attempting to create table schema", - "data_sync.schema_sync.warning.target_unsupported": "Target database type={{targetType}} does not support schema sync yet; table {{table}} was skipped", - "data_sync.unsupported.mongo_index_columns_missing": "Index {{name}} has no column definition and was skipped", - "data_sync.unsupported.mongo_index_create_command_failed": "Failed to generate MongoDB createIndexes command for index {{name}}: {{detail}}", - "data_sync.unsupported.mongo_index_prefix_length": "Index {{name}} uses a prefix length; equivalent migration to MongoDB is not supported yet", - "data_sync.warning.mongo_field_mixed_bson_types": "Field {{field}} contains multiple BSON value types and was degraded to a compatible type", - "data_sync.warning.mongo_index_type_normalized": "Index {{name}} type={{type}} will be migrated to MongoDB as a regular index", - "data_sync.warning.mongo_source_collection_index_read_failed": "Failed to read source MongoDB collection indexes; index migration was skipped: {{detail}}", - "data_sync.warning.mongo_source_empty_sample_id_only": "The source MongoDB collection has no sample data; only a basic primary-key column is generated from `_id`", - "data_sync.warning.mongo_source_primary_key_missing": "No stable primary key was inferred from the source MongoDB collection; the target table will not create a primary key automatically", - "data_sync.warning.mongo_source_table_index_read_failed": "Failed to read source table indexes; index migration was skipped: {{detail}}", - "data_sync.warning.mongo_target_collection_existing_only_required": "The current strategy requires the target MongoDB collection to exist, so it will not be created automatically at execution", - "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB is a weak-schema target; field structure follows written documents, and target column checks are not run", - "file.backend.dialog.export_connections": "Export connections", - "file.backend.dialog.export_data": "Export data", - "file.backend.dialog.export_database_sql": "Export {{database}} (SQL)", - "file.backend.dialog.export_query_result": "Export query result", - "file.backend.dialog.export_table": "Export {{table}}", - "file.backend.dialog.export_tables_sql": "Export tables (SQL)", - "file.backend.dialog.import_data": "Import into {{table}}", - "file.backend.dialog.select_config_file": "Select config file", - "file.backend.dialog.select_database_file": "Select database file", - "file.backend.dialog.select_duckdb_file": "Select DuckDB data file", - "file.backend.dialog.select_sql_directory": "Select SQL directory", - "file.backend.dialog.select_sql_file": "Select SQL file", - "file.backend.dialog.select_sqlite_file": "Select SQLite data file", - "file.backend.dialog.select_ssh_key_file": "Select SSH private key file", - "file.backend.html_export.document_title": "GoNavi Export", - "file.backend.html_export.empty_rows": "(0 rows)", - "file.backend.html_export.heading": "GoNavi Data Export", - "file.backend.html_export.meta": "Rows: {{rowCount}} · Columns: {{columnCount}} · Generated: {{generatedAt}}", - "file.backend.sql_dump.database": "Database: {{database}}", - "file.backend.sql_dump.empty_rows": "(0 rows)", - "file.backend.sql_dump.generated_at": "Time: {{generatedAt}}", - "file.backend.sql_dump.table": "Table: {{objectName}}", - "file.backend.sql_dump.title": "GoNavi SQL Export", - "file.backend.sql_dump.view": "View: {{objectName}}", - "file.backend.sql_dump.view_data_skipped": "View data export skipped (INSERT for views is not emitted).", - "file.backend.error.batch_commit_unsupported": "Current database type does not support batch commit", - "file.backend.error.connection_export_file_too_large": "Connection export file is too large", - "file.backend.error.connection_import_file_too_large": "Connection import file is too large", - "file.backend.error.connection_package_decrypt_failed": "File password is incorrect or the file is corrupted", - "file.backend.error.connection_package_password_required": "Connection package password cannot be empty", - "file.backend.error.connection_package_payload_too_large": "Connection package payload is too large", - "file.backend.error.connection_package_unsupported": "Unsupported connection package format", - "file.backend.error.database_name_required": "Database name cannot be empty", - "file.backend.error.directory_path_required": "Directory path cannot be empty", - "file.backend.error.export_unsupported_format": "Unsupported export format: {{format}}", - "file.backend.error.file_path_empty": "File path is empty", - "file.backend.error.file_path_required": "File path cannot be empty", - "file.backend.error.import_file_empty": "File path cannot be empty", - "file.backend.error.import_csv_empty_or_missing_header": "CSV is empty or missing a header", - "file.backend.error.import_csv_open_failed": "Unable to open CSV: {{detail}}", - "file.backend.error.import_csv_read_failed": "Unable to read CSV: {{detail}}", - "file.backend.error.import_excel_empty_or_missing_header": "Excel is empty or missing a header", - "file.backend.error.import_excel_no_sheets": "Excel file has no sheets", - "file.backend.error.import_excel_parse_failed": "Unable to parse Excel: {{detail}}", - "file.backend.error.import_excel_read_failed": "Unable to read Excel: {{detail}}", - "file.backend.error.import_json_parse_failed": "Unable to parse JSON: {{detail}}", - "file.backend.error.import_json_root_not_array": "JSON root must be array", - "file.backend.error.import_unsupported_format": "Unsupported file format", - "file.backend.error.invalid_export_mode": "Invalid export mode", - "file.backend.error.mysql_workbench_no_connections": "No valid connection profiles were found in the XML", - "file.backend.error.mysql_workbench_parse_failed": "Failed to parse MySQL Workbench XML: {{detail}}", - "file.backend.error.open_file_failed": "Unable to open file: {{detail}}", - "file.backend.error.query_required": "Query statement cannot be empty", - "file.backend.error.read_file_error_summary": "File read error: {{detail}}. Executed {{count}}.", - "file.backend.error.read_file_info_failed": "Unable to read file info: {{detail}}", - "file.backend.error.selected_path_not_directory": "Selected path is not a directory", - "file.backend.error.selected_path_not_sql_file": "Selected path is not a SQL file", - "file.backend.error.select_with_query_required": "Only SELECT/WITH query export is supported", - "file.backend.error.task_not_found": "Task not found", - "file.backend.error.table_data_batch_limit": "You can process at most {{max}} tables at once; currently selected {{count}}", - "file.backend.error.table_data_clear_failed": "Failed to clear {{table}}: {{detail}}", - "file.backend.error.table_data_clear_failed_partial": "Failed to clear {{table}}: {{detail}}. Warning: the first {{count}} tables have been cleared and cannot be restored", - "file.backend.error.table_data_mode_unsupported": "Unsupported table data cleanup mode: {{mode}}", - "file.backend.error.table_data_no_tables": "No tables selected", - "file.backend.error.table_data_truncate_failed": "Failed to truncate {{table}}: {{detail}}", - "file.backend.error.table_data_truncate_failed_partial": "Failed to truncate {{table}}: {{detail}}. Warning: the first {{count}} tables have been truncated and cannot be restored", - "file.backend.error.table_data_truncate_unsupported": "Current database type {{type}} does not support truncating tables. Use clearing instead", - "file.backend.error.write_failed": "Write failed: {{detail}}", - "file.backend.message.cancel_requested": "Cancellation request sent", - "file.backend.message.execution_cancelled": "Execution canceled. Executed {{executed}}, failed {{failed}}, duration {{duration}}.", - "file.backend.message.execution_completed": "Execution completed. Succeeded {{success}}, failed {{failed}}, duration {{duration}}.", - "file.backend.message.execution_error_detail_header": "Error details (first {{count}}):", - "file.backend.message.execution_more_errors": "...{{count}} more errors are not shown", - "file.backend.message.export_completed": "Export completed", - "file.backend.message.import_no_data": "No data to import", - "file.backend.message.import_row_failed": "Import row {{index}} failed: {{detail}}", - "file.backend.message.import_summary": "Imported: {{imported}}, Failed: {{failed}}", - "file.backend.message.statement_failed": "Statement {{index}} failed: {{detail}}\n SQL: {{sql}}", - "file.backend.message.table_data_clear_succeeded": "Clearing succeeded", - "file.backend.message.table_data_truncate_succeeded": "Truncation succeeded", - "file.backend.message.transaction_committed": "Transaction committed successfully", - "file.backend.message.user_cancelled": "User canceled execution", - "file.backend.filter.all_files": "All files", - "file.backend.filter.all_files_pattern": "All files (*.*)", - "file.backend.filter.connection_package": "GoNavi Connection Package (*.gonavi-conn)", - "file.backend.filter.database_files": "Database files", - "file.backend.filter.data_files": "Data files", - "file.backend.filter.duckdb_files": "DuckDB files", - "file.backend.filter.json_files": "JSON Files (*.json)", - "file.backend.filter.mysql_workbench_connections": "MySQL Workbench Connections (*.xml)", - "file.backend.filter.private_key_files": "Private key files", - "file.backend.filter.sql_files": "SQL files (*.sql)", - "file.backend.filter.sqlite_files": "SQLite files", - "ai_service.backend.message.provider_test_success": "Endpoint connectivity test succeeded", - "ai_service.backend.error.provider_test_failed": "Connection test failed: {{detail}}", - "ai_service.backend.error.provider_auth_failed": "API key is invalid or the request was rejected (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_status_failed": "Endpoint returned an unexpected status (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_server_error": "Upstream server returned an internal error (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_request_create_failed": "Failed to create request: {{detail}}", - "ai_service.backend.error.provider_request_serialize_failed": "Failed to serialize request: {{detail}}", - "ai_service.backend.error.provider_secret_read_failed": "Failed to read Provider secret: {{detail}}", - "ai_service.backend.error.provider_secret_save_failed": "Failed to save Provider secret: {{detail}}", - "ai_service.backend.error.provider_secret_saved_read_failed": "Failed to read saved Provider secret: {{detail}}", - "ai_service.backend.error.provider_secret_delete_failed": "Failed to delete Provider secret: {{detail}}", - "ai_service.backend.error.provider_secret_load_failed": "Failed to load AI Provider secret (provider={{provider}}): {{detail}}", - "ai_service.backend.error.config_rewrite_failed": "Failed to rewrite AI configuration: {{detail}}", - "ai_service.backend.error.config_read_failed": "Failed to read AI configuration: {{detail}}", - "ai_service.backend.error.config_load_failed": "Failed to load AI configuration: {{detail}}", - "ai_service.backend.error.config_serialize_failed": "Failed to serialize AI configuration: {{detail}}", - "ai_service.backend.error.config_dir_create_failed": "Failed to create configuration directory: {{detail}}", - "ai_service.backend.error.config_write_failed": "Failed to write AI configuration: {{detail}}", - "ai_service.backend.error.daily_secret_store_unavailable": "Daily secret store is unavailable: {{detail}}", - "ai_service.backend.error.secret_store_unavailable": "Secret store is unavailable: {{detail}}", - "ai_service.backend.error.provider_secret_bundle_parse_failed": "Failed to parse provider secret bundle: {{detail}}", - "ai_service.backend.error.models_request_create_failed": "Failed to create model list request: {{detail}}", - "ai_service.backend.error.models_request_failed": "Failed to request model list: {{detail}}", - "ai_service.backend.error.models_http_status_failed": "Model list endpoint returned an unexpected status (HTTP {{status}}){{body}}", - "ai_service.backend.error.models_parse_failed": "Failed to parse model list: {{detail}}", - "ai_service.backend.error.active_provider_not_found": "Active AI Provider was not found", - "ai_service.backend.error.editable_provider_not_found": "AI Provider to edit was not found: {{detail}}", - "ai_service.backend.error.provider_not_configured": "AI Provider is not configured. Configure one in Settings first.", - "ai_service.backend.error.volcengine_coding_models_empty": "The current endpoint did not return any available Volcengine Coding Plan models. Check account access or switch to the \"Volcengine Ark\" provider", - "ai_service.backend.error.session_missing": "Session does not exist", - "ai_service.backend.error.session_corrupt": "Session data is corrupted", - "ai_service.backend.error.sessions_dir_create_failed": "Failed to create sessions directory: {{detail}}", - "ai_service.backend.error.session_serialize_failed": "Failed to serialize session data: {{detail}}", - "ai_service.backend.error.session_write_failed": "Failed to save session: {{detail}}", - "ai_service.backend.error.session_delete_failed": "Failed to delete session: {{detail}}", - "ai_service.backend.warning.sql_drop": "High-risk SQL: DROP permanently deletes database objects", - "ai_service.backend.warning.sql_truncate": "High-risk SQL: TRUNCATE removes all rows from the table", - "ai_service.backend.warning.sql_delete_without_where": "High-risk SQL: DELETE without WHERE will delete all rows", - "ai_service.backend.warning.sql_update_without_where": "High-risk SQL: UPDATE without WHERE will update all rows", - "jvm_monitoring_charts.title.heap": "Heap memory", - "jvm_monitoring_charts.title.gc": "Garbage collection", - "jvm_monitoring_charts.title.threads": "Threads", - "jvm_monitoring_charts.title.classes": "Class loading", - "jvm_monitoring_charts.empty.heap.no_samples": "No heap memory samples yet.", - "jvm_monitoring_charts.empty.heap.metric_unavailable": "Current monitoring source does not provide heap memory metrics.", - "jvm_monitoring_charts.empty.gc.no_samples": "No garbage collection samples yet.", - "jvm_monitoring_charts.empty.gc.metric_unavailable": "Current monitoring source does not provide garbage collection metrics.", - "jvm_monitoring_charts.empty.threads.no_samples": "No thread samples yet.", - "jvm_monitoring_charts.empty.threads.metric_unavailable": "Current monitoring source does not provide thread metrics.", - "jvm_monitoring_charts.empty.classes.no_samples": "No class loading samples yet.", - "jvm_monitoring_charts.empty.classes.metric_unavailable": "Current monitoring source does not provide class loading metrics.", - "jvm_monitoring_charts.legend.heap_used": "Heap used", - "jvm_monitoring_charts.legend.heap_committed": "Heap committed", - "jvm_monitoring_charts.legend.gc_count": "GC count", - "jvm_monitoring_charts.legend.gc_time_ms": "GC time (ms)", - "jvm_monitoring_charts.legend.thread_count": "Thread count", - "jvm_monitoring_charts.legend.daemon_thread_count": "Daemon threads", - "jvm_monitoring_charts.legend.peak_thread_count": "Peak threads", - "jvm_monitoring_charts.legend.loaded_classes": "Loaded classes", - "jvm_monitoring_charts.legend.unloaded_classes": "Unloaded classes", - "jvm_monitoring_status_cards.title.heap": "Heap memory", - "jvm_monitoring_status_cards.title.gc_pressure": "Garbage collection pressure", - "jvm_monitoring_status_cards.title.threads": "Threads", - "jvm_monitoring_status_cards.title.classes": "Class loading", - "jvm_monitoring_status_cards.meta.heap_committed": "Committed {{value}}", - "jvm_monitoring_status_cards.meta.waiting_samples": "Waiting for samples", - "jvm_monitoring_status_cards.meta.gc_total_time": "Total {{value}}", - "jvm_monitoring_status_cards.meta.thread_peak": "Peak {{value}}", - "jvm_monitoring_status_cards.status.sampling": "Sampling", - "jvm_monitoring_status_cards.status.stopped": "Stopped", - "jvm_monitoring_status_cards.thread_state.runnable_count": "Runnable {{count}}", - "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "Troubleshooting metrics", - "jvm_monitoring_detail_panel.title.thread_state_distribution": "Thread state distribution", - "jvm_monitoring_detail_panel.title.recent_gc_details": "Recent garbage collection details", - "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "Capabilities and degradation", - "jvm_monitoring_detail_panel.field.process_cpu": "Process CPU", - "jvm_monitoring_detail_panel.field.system_cpu": "System CPU", - "jvm_monitoring_detail_panel.field.process_physical_memory": "Process physical memory", - "jvm_monitoring_detail_panel.field.process_virtual_memory": "Process virtual memory", - "jvm_monitoring_detail_panel.memory_missing.title": "Why process physical memory is missing", - "jvm_monitoring_detail_panel.memory_missing.jmx": "JMX connection does not expose process resident physical memory, so only process virtual memory metrics can be read right now. To collect process physical memory, switch to the HTTP endpoint or enhanced agent.", - "jvm_monitoring_detail_panel.memory_missing.default": "The current monitoring source did not return process resident physical memory metrics. Check that the HTTP endpoint or enhanced agent collects and reports process physical memory.", - "jvm_monitoring_detail_panel.empty.thread_states": "No thread state samples yet.", - "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "Current monitoring source does not provide event-level garbage collection data.", - "jvm_monitoring_detail_panel.empty.recent_gc_events": "No garbage collection events in the recent window.", - "jvm_monitoring_detail_panel.gc.before": "Before collection", - "jvm_monitoring_detail_panel.gc.after": "After collection", - "jvm_monitoring_presentation.metric.heap_used": "Heap memory", - "jvm_monitoring_presentation.metric.heap_non_heap": "Non-heap memory", - "jvm_monitoring_presentation.metric.gc_count": "Garbage collection count", - "jvm_monitoring_presentation.metric.gc_time": "Garbage collection time", - "jvm_monitoring_presentation.metric.gc_events": "Recent garbage collection events", - "jvm_monitoring_presentation.metric.thread_count": "Thread count", - "jvm_monitoring_presentation.metric.thread_states": "Thread states", - "jvm_monitoring_presentation.metric.class_loading": "Class loading", - "jvm_monitoring_presentation.metric.cpu_process": "Process CPU", - "jvm_monitoring_presentation.metric.cpu_system": "System CPU", - "jvm_monitoring_presentation.metric.memory_rss": "Process physical memory", - "jvm_monitoring_presentation.metric.memory_virtual": "Process virtual memory", - "jvm_monitoring_presentation.thread_state.new": "New", - "jvm_monitoring_presentation.thread_state.runnable": "Runnable", - "jvm_monitoring_presentation.thread_state.blocked": "Blocked", - "jvm_monitoring_presentation.thread_state.waiting": "Waiting", - "jvm_monitoring_presentation.thread_state.timed_waiting": "Timed waiting", - "jvm_monitoring_presentation.thread_state.terminated": "Terminated", - "jvm_monitoring_presentation.availability.missing_metrics": "Missing metrics: {{metrics}}", - "jvm_monitoring_presentation.availability.provider_warnings": "Monitoring source warning: {{warnings}}", - "jvm_monitoring_presentation.availability.no_obvious_degradation": "No obvious degradation was found in the current monitoring session.", - "jvm_change_preview_modal.title": "JVM change preview", - "jvm_change_preview_modal.status.no_preview": "No preview result", - "jvm_change_preview_modal.status.generated": "Preview generated", - "jvm_change_preview_modal.action.confirm_execute": "Confirm execution", - "jvm_change_preview_modal.action.close": "Close", - "jvm_change_preview_modal.section.summary": "Change summary", - "jvm_change_preview_modal.section.before": "Before", - "jvm_change_preview_modal.section.after": "After", - "jvm_change_preview_modal.field.resource_id": "Resource ID", - "jvm_change_preview_modal.field.version": "Version", - "jvm_change_preview_modal.field.format": "Format", - "jvm_change_preview_modal.risk.label": "Risk {{level}}", - "jvm_change_preview_modal.risk.low": "Low", - "jvm_change_preview_modal.risk.medium": "Medium", - "jvm_change_preview_modal.risk.high": "High", - "jvm_change_preview_modal.risk.unknown": "Unknown", - "jvm_change_preview_modal.permission.requires_confirmation": "Confirmation required", - "jvm_change_preview_modal.permission.allowed": "Allowed", - "jvm_change_preview_modal.permission.forbidden": "Forbidden", - "jvm_change_preview_modal.blocking.label": "Blocking reason", - "jvm_change_preview_modal.blocking.alert_message": "Current change cannot be executed", - "jvm_diagnostic.completion.category.observe": "observation command", - "jvm_diagnostic.completion.category.trace": "trace command", - "jvm_diagnostic.completion.category.mutating": "high-risk command", - "jvm_diagnostic.completion.category.control": "control command", - "jvm_diagnostic.completion.preset.category.observe": "observation command", - "jvm_diagnostic.completion.preset.category.trace": "trace command", - "jvm_diagnostic.completion.preset.category.mutating": "high-risk command", - "jvm_diagnostic.completion.preset.thread-top.documentation": "View the busiest threads to quickly locate blocked or high-CPU threads.", - "jvm_diagnostic.completion.preset.dashboard.documentation": "View the JVM runtime overview.", - "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "Trace slow method call paths.", - "jvm_diagnostic.completion.preset.watch-return.documentation": "Observe parameters and return values.", - "jvm_diagnostic.completion.preset.ognl-sample.documentation": "High-risk expression command, shown as an example by default.", - "jvm_diagnostic.completion.command.dashboard.documentation": "View the JVM runtime overview.", - "jvm_diagnostic.completion.command.jvm.documentation": "View JVM memory, threads, class loading, GC, and runtime arguments.", - "jvm_diagnostic.completion.command.thread.documentation": "View hot threads, thread stacks, and blocked threads.", - "jvm_diagnostic.completion.command.sc.documentation": "Search matching class information.", - "jvm_diagnostic.completion.command.sm.documentation": "View method signatures for a class.", - "jvm_diagnostic.completion.command.jad.documentation": "Decompile the specified class.", - "jvm_diagnostic.completion.command.sysprop.documentation": "View system properties.", - "jvm_diagnostic.completion.command.sysenv.documentation": "View environment variables.", - "jvm_diagnostic.completion.command.classloader.documentation": "View class loader information.", - "jvm_diagnostic.completion.command.trace.documentation": "Trace method call time paths.", - "jvm_diagnostic.completion.command.watch.documentation": "Observe parameters, return values, or exceptions.", - "jvm_diagnostic.completion.command.stack.documentation": "Print method call stacks.", - "jvm_diagnostic.completion.command.monitor.documentation": "Periodically collect method call statistics.", - "jvm_diagnostic.completion.command.tt.documentation": "Method time tunnel for recording and replaying calls.", - "jvm_diagnostic.completion.command.ognl.documentation": "Execute an OGNL expression; extra authorization is required by default.", - "jvm_diagnostic.completion.command.vmtool.documentation": "Directly operate JVM objects or execute VMTool actions.", - "jvm_diagnostic.completion.command.redefine.documentation": "Redefine class bytecode.", - "jvm_diagnostic.completion.command.retransform.documentation": "Trigger class retransformation.", - "jvm_diagnostic.completion.command.stop.documentation": "Stop the current background task.", - "jvm_diagnostic.completion.detail.execute_directly": "execute directly", - "jvm_diagnostic.completion.detail.thread_option": "thread option", - "jvm_diagnostic.completion.detail.class_search_template": "class search template", - "jvm_diagnostic.completion.detail.method_search_template": "method search template", - "jvm_diagnostic.completion.detail.decompile_template": "decompile template", - "jvm_diagnostic.completion.detail.system_property_template": "system property template", - "jvm_diagnostic.completion.detail.environment_variable_template": "environment variable template", - "jvm_diagnostic.completion.detail.classloader_template": "class loader template", - "jvm_diagnostic.completion.detail.trace_template": "trace template", - "jvm_diagnostic.completion.detail.trace_option": "trace option", - "jvm_diagnostic.completion.detail.watch_template": "watch template", - "jvm_diagnostic.completion.detail.watch_option": "watch option", - "jvm_diagnostic.completion.detail.stack_template": "stack template", - "jvm_diagnostic.completion.detail.monitor_template": "monitor template", - "jvm_diagnostic.completion.detail.time_tunnel_template": "time tunnel template", - "jvm_diagnostic.completion.detail.high_risk_template": "high-risk template", - "jvm_diagnostic.completion.argument.command_template.label": "{{command}} template", - "jvm_diagnostic.completion.argument.detail_mode_d.label": "Detail mode (-d)", - "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", - "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "View the current JVM runtime overview.", - "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", - "jvm_diagnostic.completion.argument.jvm.direct.documentation": "View JVM memory, threads, class loading, GC, and runtime arguments.", - "jvm_diagnostic.completion.argument.thread.busy_top.label": "Busy threads TOP N (-n)", - "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "View the top N CPU-busiest threads.", - "jvm_diagnostic.completion.argument.thread.blocking.label": "Blocked threads (-b)", - "jvm_diagnostic.completion.argument.thread.blocking.documentation": "Find threads that are currently blocking other threads.", - "jvm_diagnostic.completion.argument.thread.thread_id.label": "Specified thread ID", - "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "View detailed stack information for a specified thread.", - "jvm_diagnostic.completion.argument.sc.class_pattern.label": "Class pattern template", - "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "Search by class name pattern.", - "jvm_diagnostic.completion.argument.sc.detail.documentation": "Output detailed class information.", - "jvm_diagnostic.completion.argument.sm.method_signature.label": "Method signature template", - "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "View method signatures for a class.", - "jvm_diagnostic.completion.argument.sm.detail.documentation": "Output detailed method signatures.", - "jvm_diagnostic.completion.argument.jad.template.label": "Decompile template", - "jvm_diagnostic.completion.argument.jad.template.documentation": "Decompile the specified class.", - "jvm_diagnostic.completion.argument.sysprop.property.label": "View property", - "jvm_diagnostic.completion.argument.sysprop.property.documentation": "Read the specified system property.", - "jvm_diagnostic.completion.argument.sysenv.variable.label": "View environment variable", - "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "Read the specified environment variable.", - "jvm_diagnostic.completion.argument.classloader.tree.label": "Tree view (-t)", - "jvm_diagnostic.completion.argument.classloader.tree.documentation": "Output the class loader tree.", - "jvm_diagnostic.completion.argument.classloader.url_stat.label": "All URL statistics (--url-stat)", - "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "View class loader URL statistics.", - "jvm_diagnostic.completion.argument.classloader.hash.label": "Specified class loader Hash", - "jvm_diagnostic.completion.argument.classloader.hash.documentation": "View details for a specified class loader.", - "jvm_diagnostic.completion.argument.trace.template.documentation": "Trace slow method call chains.", - "jvm_diagnostic.completion.argument.trace.condition.label": "Condition filter '#cost > 100'", - "jvm_diagnostic.completion.argument.trace.condition.documentation": "Append a trace condition expression.", - "jvm_diagnostic.completion.argument.watch.template.documentation": "Observe parameters, return values, or exceptions.", - "jvm_diagnostic.completion.argument.watch.expand_depth.label": "Expansion depth -x 2", - "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "Set object expansion depth.", - "jvm_diagnostic.completion.argument.stack.template.documentation": "Print method call stacks.", - "jvm_diagnostic.completion.argument.monitor.template.documentation": "Collect method call statistics at intervals.", - "jvm_diagnostic.completion.argument.tt.record.label": "tt recording template", - "jvm_diagnostic.completion.argument.tt.record.documentation": "Record calls to the specified method.", - "jvm_diagnostic.completion.argument.tt.list.label": "View record list (-l)", - "jvm_diagnostic.completion.argument.tt.list.documentation": "View the current recording list.", - "jvm_diagnostic.completion.argument.tt.replay.label": "Replay record (-i)", - "jvm_diagnostic.completion.argument.tt.replay.documentation": "View details for a specified record.", - "jvm_diagnostic.completion.argument.ognl.template.documentation": "Execute an OGNL expression; high-risk commands are restricted by policy by default.", - "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", - "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "Get instances of the specified class; high-risk commands are restricted by policy by default.", - "jvm_diagnostic.completion.argument.redefine.template.documentation": "Redefine the class bytecode file path.", - "jvm_diagnostic.completion.argument.retransform.template.documentation": "Retransform the specified class.", - "jvm_diagnostic.completion.argument.stop.direct.label": "stop", - "jvm_diagnostic.completion.argument.stop.direct.documentation": "Stop the current background task.", - "app.about.action.open_install_directory": "Open Install Directory", - "app.about.action.install_update": "Install Update", - "app.about.action.hide_to_background": "Hide to Background", - "app.about.download_progress.title": "Download Update", - "app.about.download_progress.title_with_version": "Download Update {{version}}", - "app.about.update_status.not_checked": "Not checked", - "app.about.update_status.checking": "Checking for updates...", - "app.about.update_status.check_failed": "Update check failed: {{error}}", - "app.about.update_status.new_version_downloaded": "New version {{version}} found (downloaded; open Download Progress to install)", - "app.about.update_status.new_version_not_downloaded": "New version {{version}} found (not downloaded)", - "app.about.update_status.latest": "You are on the latest version ({{version}})", - "app.about.message.update_package_ready": "Update package is ready ({{version}})", - "app.about.message.update_package_ready_with_path": "Update package is ready ({{version}}), path: {{path}}", - "app.about.message.download_completed": "Update download completed", - "app.about.message.download_completed_with_path": "Update download completed. Package path: {{path}}", - "app.about.message.download_failed_with_error": "Update download failed: {{error}}", - "app.about.message.install_directory_opened_manual_replace": "Install directory opened. Complete the replacement manually.", - "app.about.message.open_install_directory_failed_with_error": "Failed to open install directory: {{error}}", - "app.about.message.install_failed_with_error": "Update installation failed: {{error}}", - "app.about.message.check_failed_with_error": "Update check failed: {{error}}", - "app.about.message.new_version_found": "New version {{version}} found", - "app.theme.font_family.title": "Font Family", - "app.theme.font_family.ui_title": "UI Font Family", - "app.theme.font_family.mono_title": "Mono Font Family", - "app.theme.font_family.load_failed": "Failed to load system fonts", - "app.theme.font_family.load_failed_fallback": "Failed to load system fonts. Common font presets are being used: {{error}}", - "app.theme.font_family.loaded_ui_hint": "Read {{count}} font families from this system. Type to search and match. Clear the field to fall back to the default UI font.", - "app.theme.font_family.loading_ui_hint": "Loads installed fonts from the current system in real time. Type to search and match. Clear the field to fall back to the default UI font.", - "app.theme.font_family.mono_fallback_hint": "Common code font presets are being used. Applies to monospace content such as the SQL editor, AI code blocks, logs, DDL, and data tables.", - "app.theme.font_family.mono_hint": "Installed system fonts are shown first, with names close to Mono/Code/Console ranked earlier. Applies to monospace content such as the SQL editor, AI code blocks, logs, DDL, and data tables.", - "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux did not detect Chinese CJK fonts, so the interface may show missing glyph boxes. Install: ", - "app.theme.font_family.linux_cjk_install_suffix": ", then restart GoNavi.", - "app.linux_cjk_font_banner.title": "Linux CJK fonts missing", - "app.linux_cjk_font_banner.description": "Chinese text may render as missing glyph boxes. Install fonts, then restart GoNavi: ", - "app.linux_cjk_font_banner.action.open_font_settings": "Font Settings", - "app.theme.data_table.density": "Table Density", - "app.theme.data_table.density.comfortable": "Comfortable", - "app.theme.data_table.density.standard": "Standard", - "app.theme.data_table.density.compact": "Compact", - "app.theme.data_table.density_hint": "Controls row height, column width, and padding. Comfortable is better for large-screen review; compact maximizes information density. Manually dragged column widths are preserved first.", - "app.theme.data_table.font_size": "Data Table Font Size", - "app.theme.data_table.sidebar_tree_font_size": "Sidebar Schema Tree Font Size", - "app.theme.data_table.follow_global": "Follow Global", - "ai_settings.message.load_provider_failed": "Failed to read provider configuration", - "data_sync.field.schema": "Schema", - "data_sync.message.fetch_target_schemas_failed_detail": "Failed to fetch target schemas: {{detail}}", - "data_sync.message.select_target_schema": "Select target schema", - "connection_modal.field.readOnly.label": "Production guard", - "connection_modal.field.readOnly.help": "When enabled, this connection only allows queries. Import, schema changes, data writes, and sync target operations are blocked.", - "connection_modal.field.readOnly.checkbox": "Mark this as a production connection and allow queries only", - "query_editor.message.connection_readonly_blocked": "This connection has production guard enabled and only allows query operations.", - "query_editor.results_panel.message.action.copy": "Copy", - "query_editor.results_panel.message.copy_unsupported": "Clipboard is not available in the current environment", - "query_editor.results_panel.message.copy_failed": "Failed to copy message: {{detail}}", "ai_chat.builtin_tools.database.execute_sql.desc": "Execute a SQL query and return results", "ai_chat.builtin_tools.database.execute_sql.detail": "Pass connectionId, dbName, and sql, then execute SQL on the target database and return results (up to 50 rows). Controlled by safety level; read-only mode only allows SELECT/SHOW/DESCRIBE.", "ai_chat.builtin_tools.database.execute_sql.parameters.connectionId.description": "Connection ID", @@ -5037,7 +178,38 @@ "ai_chat.builtin_tools.flows.upstream_request.title": "Trace AI upstream requests", "ai_chat.builtin_tools.flows.workspace_tabs.description": "See which SQL, table, or command tabs are open, then inspect the target tab for field checks, comparisons, and read-only validation.", "ai_chat.builtin_tools.flows.workspace_tabs.title": "Inventory the current workspace", + "ai_chat.composer_notice.missing_model.description": "Open the model dropdown below and select a model. If the list is empty, check the provider endpoint and API Key.", + "ai_chat.composer_notice.missing_model.title": "Select a model first", + "ai_chat.composer_notice.missing_provider.description": "Add and enable a model provider in AI settings first.", + "ai_chat.composer_notice.missing_provider.title": "No provider available", + "ai_chat.composer_notice.model_fetch_failed.default_description": "Check the provider endpoint, API Key, or account permissions, then reopen the model dropdown.", + "ai_chat.composer_notice.model_fetch_failed.detail_description": "Provider detail: {{detail}}", + "ai_chat.composer_notice.model_fetch_failed.title": "Model list failed to load", + "ai_chat.header.action.export": "Export", + "ai_chat.header.default_session_title": "New chat", + "ai_chat.header.export_time": "Exported at:", + "ai_chat.header.export_user": "You", + "ai_chat.header.mode_tabs.aria_label": "AI work mode", + "ai_chat.header.mode.chat": "Chat", + "ai_chat.header.mode.history": "History", + "ai_chat.header.mode.insights": "Auto insights", + "ai_chat.header.session.connected": "{{title}} · Connected", + "ai_chat.header.tooltip.close": "Close panel", + "ai_chat.header.tooltip.export_markdown": "Export as Markdown", + "ai_chat.header.tooltip.history": "Chat history", + "ai_chat.header.tooltip.new_chat": "New chat", + "ai_chat.header.tooltip.new_chat_clear": "New chat (clear current)", + "ai_chat.header.tooltip.settings": "AI settings", + "ai_chat.history.action.new_chat": "Start new chat", + "ai_chat.history.default_session_title": "New chat", "ai_chat.history.empty.no_history": "No history yet", + "ai_chat.history.empty.no_matches": "No matching chats", + "ai_chat.history.search.placeholder": "Search history...", + "ai_chat.history.title": "Chat history", + "ai_chat.history.tooltip.collapse": "Collapse", + "ai_chat.history.tooltip.delete": "Delete", + "ai_chat.input.action.send": "Send", + "ai_chat.input.action.stop": "Stop generating", "ai_chat.input.attachment.excel.worksheet_header": "[Worksheet: {{sheetName}}]", "ai_chat.input.attachment.kind.document": "File", "ai_chat.input.attachment.kind.excel": "Excel", @@ -5069,8 +241,10 @@ "ai_chat.input.attachment.warning.too_large": "File exceeds {{size}}; file metadata was attached but the body was not read.", "ai_chat.input.attachment.warning.unsupported_type": "This file type was attached, but body text was not extracted yet; use markdown, txt, docx, xlsx, or pdf if the model needs the content.", "ai_chat.input.context.add": "Add", + "ai_chat.input.context.connection_tooltip": "Current data query context", "ai_chat.input.context.current_count": "Current context · {{count}}", "ai_chat.input.context.label": "Attached context", + "ai_chat.input.context.memory_tooltip": "Current session memory usage. Auto-compression starts when it reaches the {{limit}} limit.", "ai_chat.input.context.selector.cancel": "Cancel", "ai_chat.input.context.selector.confirm": "Sync selected tables to context", "ai_chat.input.context.selector.database_placeholder": "Switch database", @@ -5080,7 +254,25 @@ "ai_chat.input.context.selector.search_placeholder": "Search table names in the current database...", "ai_chat.input.context.selector.select_all": "Select all matching tables ({{count}})", "ai_chat.input.context.selector.title": "Attach table schemas as context", + "ai_chat.input.context.tag_label": "Linked context ({{count}})", + "ai_chat.input.message.context_added": "Added {{count}} table structures to the context", + "ai_chat.input.message.context_load_failed": "Failed to load table context: {{detail}}", + "ai_chat.input.message.context_removed": "Removed {{count}} table structures from the context", "ai_chat.input.message.context_sync_failed": "Failed to sync AI context: {{detail}}", + "ai_chat.input.message.context_synced": "Context synced: added {{added}}, removed {{removed}}", + "ai_chat.input.message.fetch_table_schema_failed": "Failed to load structure for {{table}}: {{detail}}", + "ai_chat.input.message.fetch_tables_failed": "Failed to load tables: {{detail}}", + "ai_chat.input.message.select_database_context_first": "Select a database on the left before attaching chat context", + "ai_chat.input.message.selection_unchanged": "Selected tables did not change", + "ai_chat.input.modal.empty_tables": "No tables match '{{query}}'", + "ai_chat.input.modal.invert_matching": "Invert matching results", + "ai_chat.input.modal.ok": "Sync selected tables to context", + "ai_chat.input.modal.search_table.placeholder": "Search tables in the current database...", + "ai_chat.input.modal.select_all_matching": "Select all matching tables ({{count}})", + "ai_chat.input.modal.switch_database.placeholder": "Switch database", + "ai_chat.input.modal.title": "Attach database table schema context", + "ai_chat.input.model.placeholder": "Select model", + "ai_chat.input.placeholder": "Type a message... ({{shortcut}}, Shift+Enter for newline, / for commands)", "ai_chat.input.placeholder_compact": "Type a message... {{shortcut}} · / commands", "ai_chat.input.shortcut.disabled": "Shortcut sending disabled", "ai_chat.input.shortcut.send_with_combo": "{{shortcut}} to send", @@ -5110,11 +302,17 @@ "ai_chat.input.slash.connfail.keywords": "connection failure|cooldown|validation failure|ssh|mysql", "ai_chat.input.slash.connfail.label": "🧯 Connection failure probe", "ai_chat.input.slash.connfail.prompt": "Call inspect_recent_connection_failures first. Summarize the real log conclusions for recent database connection failures, connection cooldowns, validation failures, and SSH tunnel exceptions; if there is already a clear address or type, then use inspect_current_connection or inspect_saved_connections to narrow it further.", + "ai_chat.input.slash.diff.desc": "Compare two tables and generate changes", "ai_chat.input.slash.diff.keywords": "diff|migration|alter", + "ai_chat.input.slash.diff.label": "🔄 Table diff", + "ai_chat.input.slash.diff.prompt": "Compare the structure differences between these two tables and generate ALTER statements to migrate from the old version to the new version:", "ai_chat.input.slash.empty.description": "Try these common entries first to jump into SQL generation, AI health checks, or MCP diagnostics.", "ai_chat.input.slash.empty.summary": "There are {{count}} slash commands available. Search by command name, description, or keyword.", "ai_chat.input.slash.empty.title": "No matching slash commands", + "ai_chat.input.slash.explain.desc": "Explain the selected SQL logic", "ai_chat.input.slash.explain.keywords": "explain|sql|logic", + "ai_chat.input.slash.explain.label": "💡 Explain SQL", + "ai_chat.input.slash.explain.prompt": "Explain the execution logic of this SQL and what each step does:\n```sql\n\n```", "ai_chat.input.slash.health.desc": "Run health probes for the current AI setup", "ai_chat.input.slash.health.keywords": "health|ai config|probe", "ai_chat.input.slash.health.label": "🩺 AI health check", @@ -5123,7 +321,10 @@ "ai_chat.input.slash.hotspots.keywords": "large file|bloated|split|refactor|hotspots|code hotspots|thousands of lines", "ai_chat.input.slash.hotspots.label": "🧱 Code hotspots", "ai_chat.input.slash.hotspots.prompt": "Call inspect_codebase_hotspots first. Read the current GoNavi frontend large-file hotspots, suggested split slices, and testing targets, then tell me which file is the best next split candidate, what boundary to use, and which verification to run. Keywords:", + "ai_chat.input.slash.index.desc": "Recommend the best index plan", "ai_chat.input.slash.index.keywords": "index|slow query|performance", + "ai_chat.input.slash.index.label": "📊 Index suggestions", + "ai_chat.input.slash.index.prompt": "Recommend the best index plan based on the current table structure and common query scenarios, and provide the table DDL:", "ai_chat.input.slash.mcp.desc": "Check MCP services and external client status", "ai_chat.input.slash.mcp.keywords": "mcp|codex|claude|openclaw|hermans|external client", "ai_chat.input.slash.mcp.label": "🪛 Troubleshoot MCP setup", @@ -5144,19 +345,34 @@ "ai_chat.input.slash.mcptool.keywords": "mcp tool|mcp tool arguments|schema|arguments|parameters|tool call|inputschema", "ai_chat.input.slash.mcptool.label": "🧩 MCP tool arguments", "ai_chat.input.slash.mcptool.prompt": "Call inspect_mcp_setup first to find the currently discovered MCP tool alias. If I already gave a tool name or keyword, also call inspect_mcp_tool_schema to read the matching inputSchema, then tell me the required parameters, field types, enum values, nested paths, and how the arguments JSON should be written.", + "ai_chat.input.slash.mock.desc": "Generate INSERT test data", "ai_chat.input.slash.mock.keywords": "mock|test data|insert", + "ai_chat.input.slash.mock.label": "🎲 Mock test data", + "ai_chat.input.slash.mock.prompt": "Generate 10 business-realistic INSERT test data statements for the current linked tables:", + "ai_chat.input.slash.optimize.desc": "Analyze SQL performance bottlenecks", "ai_chat.input.slash.optimize.keywords": "optimize|index|performance", + "ai_chat.input.slash.optimize.label": "⚡ Optimization analysis", + "ai_chat.input.slash.optimize.prompt": "Analyze this SQL for performance issues and provide an optimized version:\n```sql\n\n```", + "ai_chat.input.slash.query.desc": "Describe what you want to query", "ai_chat.input.slash.query.keywords": "query|natural language|data lookup", + "ai_chat.input.slash.query.label": "🔍 Natural language query", + "ai_chat.input.slash.query.prompt": "Write a SQL query for me:", "ai_chat.input.slash.safety.desc": "Confirm read-only vs write boundaries and allowMutating", "ai_chat.input.slash.safety.keywords": "safety|read-only|allowmutating|ddl|dml", "ai_chat.input.slash.safety.label": "🛡️ Write safety", "ai_chat.input.slash.safety.prompt": "Call inspect_ai_safety first. Tell me the current write boundaries for AI and GoNavi MCP, whether they are read-only, and whether execute_sql requires allowMutating.", + "ai_chat.input.slash.schema.desc": "Review table design quality", "ai_chat.input.slash.schema.keywords": "schema|table structure|design", + "ai_chat.input.slash.schema.label": "🏗️ Table design review", + "ai_chat.input.slash.schema.prompt": "Review the current linked table design, including field types, normalization, index strategy, and improvement suggestions:", "ai_chat.input.slash.shortcuts.desc": "Read the current Win/Mac shortcut configuration", "ai_chat.input.slash.shortcuts.keywords": "shortcuts|result area|mac|windows", "ai_chat.input.slash.shortcuts.label": "⌨️ Shortcut probe", "ai_chat.input.slash.shortcuts.prompt": "Call inspect_shortcuts first. Tell me the current GoNavi shortcut configuration, especially how to execute SQL, switch the results area, open the AI panel, and send AI messages on the current platform and the other platform, and whether any defaults were changed.", + "ai_chat.input.slash.sql.desc": "Describe requirements and generate statements", "ai_chat.input.slash.sql.keywords": "sql|generate|query statement", + "ai_chat.input.slash.sql.label": "📝 Generate SQL", + "ai_chat.input.slash.sql.prompt": "Generate SQL from the following requirements:", "ai_chat.input.slash.tools.desc": "Pick the right built-in probe by keyword", "ai_chat.input.slash.tools.keywords": "tool catalog|built-in tools|toolcatalog|parameter hints|arguments|probe route", "ai_chat.input.slash.tools.label": "🧰 Tool catalog", @@ -5194,8 +410,10 @@ "ai_chat.input.status.ready.description.with_context": "{{count}} table schema contexts are attached. You can send now.", "ai_chat.input.status.ready.auto_model": "Auto-selected", "ai_chat.input.status.ready.title": "AI is ready: {{provider}} / {{model}}", + "ai_chat.input.tooltip.attach_table_context": "Attach database table context", "ai_chat.input.tooltip.slash_command": "Slash commands", "ai_chat.input.tooltip.upload_attachment": "Upload attachment (images, Markdown, Word, Excel, PDF, text)", + "ai_chat.input.tooltip.upload_image": "Upload image or screenshot", "ai_chat.inspection.ai_config.error.inspect_ai_chat_readiness": "Failed to read AI chat prerequisites", "ai_chat.inspection.ai_config.error.inspect_ai_guidance": "Failed to read current AI prompts and Skills configuration", "ai_chat.inspection.ai_config.error.inspect_ai_providers": "Failed to read current AI provider configuration", @@ -6022,14 +1240,61 @@ "ai_chat.mcp_client.install.summary.missing": "This GoNavi MCP is not connected to {{label}} yet.", "ai_chat.mcp_client.install.summary.remote": "{{label}} usually runs in the cloud or on another machine and needs a remote MCP bridge to call this GoNavi.", "ai_chat.mcp_client.install.summary.stale": "{{label}} already has an old GoNavi entry. Updating will point it to this GoNavi.", + "ai_chat.message.action.copied": "Copied", + "ai_chat.message.action.copied_error_raw": "Raw error copied", + "ai_chat.message.action.copy_error_raw": "Copy raw error", + "ai_chat.message.action.copy_full": "Copy full text", + "ai_chat.message.action.delete": "Delete message", + "ai_chat.message.action.edit": "Edit this message, remove later records, and resend", + "ai_chat.message.action.retry": "Regenerate from the previous user message", + "ai_chat.message.code.collapse": "Collapse code", + "ai_chat.message.code.copied": "Copied", + "ai_chat.message.code.copy": "Copy code", + "ai_chat.message.code.execute": "Execute", + "ai_chat.message.code.execute_failed": "Execution failed", + "ai_chat.message.code.execute_tooltip": "Execute now, subject to the AI safety policy", + "ai_chat.message.code.executing": "Executing...", + "ai_chat.message.code.expand_all": "Expand all code", + "ai_chat.message.code.insert": "Insert", + "ai_chat.message.code.insert_tooltip": "Insert this SQL into the query workspace for quick edits or execution", + "ai_chat.message.code.preview": "Preview", + "ai_chat.message.code.preview_collapse": "Collapse", + "ai_chat.message.code.preview_result": "Preview result ({{rows}} rows x {{columns}} columns)", + "ai_chat.message.code.preview_tooltip": "Preview query results in chat, up to 20 rows", + "ai_chat.message.code.query_no_result": "Query returned no results", + "ai_chat.message.code.view_result": "View result ({{rows}} rows)", + "ai_chat.message.image_alt": "Attached image {{index}}", + "ai_chat.message.jvm.apply_diagnostic": "Apply to diagnostic console", + "ai_chat.message.jvm.apply_preview": "Apply to JVM preview", + "ai_chat.message.jvm.diagnostic_target_not_found": "No diagnostic console tab matches this plan. Open the original target console before applying it.", + "ai_chat.message.jvm.missing_diagnostic_context": "This diagnostic plan is missing source tab context. Regenerate it from the target diagnostic console.", + "ai_chat.message.jvm.missing_plan_context": "This JVM plan is missing source tab context. Regenerate it from the target JVM resource page.", + "ai_chat.message.jvm.plan_target_not_found": "No resource tab matches this JVM plan. Open the original target resource before applying it.", + "ai_chat.message.mermaid.parse_failed": "Mermaid parse failed: {{detail}}", + "ai_chat.message.mermaid.render_failed": "Mermaid render failed: {{detail}}", "ai_chat.message.render_error.body": "The rest of the conversation is still available. You can delete this broken message before continuing.", "ai_chat.message.render_error.delete": "Delete this message", "ai_chat.message.render_error.retry": "Retry render", "ai_chat.message.render_error.title": "This AI message failed to render and has been isolated", "ai_chat.message.render_error.unknown": "Unknown render error", + "ai_chat.message.role.user": "You", + "ai_chat.message.security.blocked": "🔒 Safety policy blocked this SQL: the current safety level does not allow {{operationType}} operations. Adjust the safety level in AI settings.", + "ai_chat.message.security.confirm_execute": "Execute", + "ai_chat.message.security.confirm_title": "⚠️ Safety confirmation", + "ai_chat.message.security.default_warning": "This SQL is a {{operationType}} operation. Execute it?", + "ai_chat.message.thinking.active": "Thinking...", + "ai_chat.message.thinking.count": "({{count}} chars)", + "ai_chat.message.thinking.title": "Thinking process", + "ai_chat.message.tool_call.done": "Data probes completed ({{count}} items)", + "ai_chat.message.tool_call.execute_sql": "Execute SQL query", "ai_chat.message.tool_call.get_all_columns": "Summarize columns across tables", + "ai_chat.message.tool_call.get_columns": "Read column list", + "ai_chat.message.tool_call.get_connections": "Load available connection info", + "ai_chat.message.tool_call.get_databases": "Scan database list", "ai_chat.message.tool_call.get_foreign_keys": "Map foreign key relationships", "ai_chat.message.tool_call.get_indexes": "Inspect index definitions", + "ai_chat.message.tool_call.get_table_ddl": "Read CREATE TABLE statement", + "ai_chat.message.tool_call.get_tables": "Analyze table structure info", "ai_chat.message.tool_call.get_triggers": "Inspect trigger logic", "ai_chat.message.tool_call.inspect_active_tab": "Read current active tab", "ai_chat.message.tool_call.inspect_ai_chat_readiness": "Read current AI chat preflight status", @@ -6067,14 +1332,132 @@ "ai_chat.message.tool_call.inspect_table_bundle": "Fetch full table structure snapshot", "ai_chat.message.tool_call.inspect_workspace_tabs": "Review current workspace tabs", "ai_chat.message.tool_call.preview_table_rows": "Preview real sample rows", + "ai_chat.message.tool_call.running": "Running data probes...", + "ai_chat.message.tool_result.char_count": "{{count}} chars", + "ai_chat.message.tool_result.no_data": "No data", + "ai_chat.message.tool_result.title": "Probe result ({{name}})", + "ai_chat.message.wait.connecting": "Connecting", + "ai_chat.panel.error.html_response": "The server returned an abnormal HTML response, possibly a gateway timeout or unavailable service", + "ai_chat.panel.error.http_server": "HTTP {{code}} server error", + "ai_chat.panel.error.truncated_suffix": "...(truncated)", + "ai_chat.panel.error.unknown": "Unknown error", + "ai_chat.panel.history.empty": "No chat history yet", + "ai_chat.panel.insight.context.empty_body": "Opening AI from a table page links the current table automatically. You can also add context manually above the input.", + "ai_chat.panel.insight.context.empty_title": "No table structure linked yet", + "ai_chat.panel.insight.context.linked_body": "This conversation includes structure context for {{tables}}.", + "ai_chat.panel.insight.context.linked_title": "{{count}} linked tables", + "ai_chat.panel.insight.context.more_tables_suffix": " and more tables", + "ai_chat.panel.insight.context.table_separator": ", ", + "ai_chat.panel.insight.query.empty_body": "After a query runs, SQL clues for optimization analysis appear here.", + "ai_chat.panel.insight.query.empty_title": "No query duration samples yet", + "ai_chat.panel.insight.query.slowest_title": "Slowest recent query {{duration}}ms", + "ai_chat.panel.insight.status.empty_body": "No SQL logs yet.", + "ai_chat.panel.insight.status.failed_title": "{{count}} recent query failures", + "ai_chat.panel.insight.status.ok_title": "Recent query status normal", + "ai_chat.panel.insight.status.recent_body": "Recorded {{count}} recent SQL entries. You can ask AI to explain or optimize them.", + "ai_chat.panel.insight.write.detected_body": "For SQL involving writes, generate a preview and rollback statements before committing.", + "ai_chat.panel.insight.write.detected_title": "Detected {{count}} write operations", + "ai_chat.panel.insight.write.readonly_body": "AI defaults to explaining, generating SELECT, analyzing Schema, and optimizing indexes.", + "ai_chat.panel.insight.write.readonly_title": "Currently focused on read-only analysis", + "ai_chat.panel.jvm_diagnostic.permission.allowed": "allowed", + "ai_chat.panel.jvm_diagnostic.permission.forbidden": "forbidden", + "ai_chat.panel.jvm_diagnostic.policy.plan_first": "Diagnostic commands may be generated, but always provide the plan first and let the user decide whether to execute.", + "ai_chat.panel.jvm_diagnostic.policy.read_only": "Answer with read-only diagnostics by default; generate only observe, trace, and troubleshooting commands, and do not assume anything has already executed.", + "ai_chat.panel.jvm_runtime.policy.preview_required": "Writable connection, but every modification must generate a preview first and wait for human confirmation.", + "ai_chat.panel.jvm_runtime.policy.read_only": "Read-only connection; only analyze and generate change plans, and never assume writes have already executed.", + "ai_chat.panel.jvm_runtime.resource_path.current": "Current resourcePath: {{resourcePath}}", + "ai_chat.panel.jvm_runtime.resource_path.missing": "No specific resourcePath is currently selected.", + "ai_chat.panel.local_tool.execute_sql.description": "Execute a SQL query on the specified connection and database, then return the result. Controlled by the safety level: in read-only mode, only SELECT/SHOW/DESCRIBE and similar query operations are allowed. Returns at most 50 rows.", + "ai_chat.panel.local_tool.get_columns.description": "Get the field list for the specified table, including field names, types, nullable status, default values, comments, and related metadata. Before generating SQL, call this tool to confirm real field names and do not guess field names.", + "ai_chat.panel.local_tool.get_connections.description": "When the user needs to query or operate on a database but no connection context is selected, get all database connections available in the app. The returned data includes connection ID (id) and name (name).", + "ai_chat.panel.local_tool.get_databases.description": "Get all database (Database/Schema) names under the specified connection (connectionId).", + "ai_chat.panel.local_tool.get_table_ddl.description": "Get the complete CREATE TABLE DDL for the specified table, including fields, indexes, constraints, and the full structure.", + "ai_chat.panel.local_tool.get_tables.description": "After the target connection and dbName are known, if the user asks about or implicitly mentions a table and you do not know the exact tableName, call this tool to get all table names in that database (table names only) to infer the target table.", + "ai_chat.panel.local_tool.param.connection_id": "connectionId", + "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId (from get_connections)", + "ai_chat.panel.local_tool.param.db_name": "dbName", + "ai_chat.panel.local_tool.param.sql": "SQL statement to execute", + "ai_chat.panel.local_tool.param.table_name": "tableName", + "ai_chat.panel.message.empty_response": "❌ The model did not return any content. It may have hit rate limits, context overload, or a refusal.", + "ai_chat.panel.message.error": "❌ Error: {{detail}}", + "ai_chat.panel.message.request_interrupted": "❌ Request interrupted: no concrete reply was received.", + "ai_chat.panel.message.send_failed": "❌ Send failed: {{detail}}", + "ai_chat.panel.message.service_not_ready": "❌ AI Service is not ready", + "ai_chat.panel.model_control.continue_after_summary": "Based on the latest status and exploration results above, continue the analysis you had not finished or perform the next step.", + "ai_chat.panel.model_control.force_tool_call": "Use a function call directly to invoke the tool and perform the operation; do not only describe the plan in text.", + "ai_chat.panel.notice.fetch_models_failed": "Failed to fetch model list: {{detail}}", + "ai_chat.panel.probe.consecutive_failed": "⚠️ Probes failed for 3 consecutive rounds and were stopped. Check the connection status and retry.", + "ai_chat.panel.probe.max_rounds": "⚠️ Tool calls reached the {{count}} round limit and were stopped. Send a new message to continue exploring.", + "ai_chat.panel.prompt.jvm_diagnostic": "You are GoNavi's JVM diagnostic assistant. The current tab is an Arthas-compatible diagnostic workbench, and the goal is to produce a structured diagnostic plan that can be pasted back into the diagnostic console.\n\nCurrent connection: {{connectionName}}\nTarget host: {{host}}\nDiagnostic transport: {{transport}}\nEnvironment: {{environment}}\nConnection policy: {{readOnlyPolicy}}\nCommand permissions: observe={{observePolicy}}, trace={{tracePolicy}}, mutating={{mutatingPolicy}}\n\nResponse rules:\n1. You may start with a short analysis, but the response must contain exactly one ```json code block.\n2. JSON fields are strictly limited to intent, transport, command, riskLevel, reason, expectedSignals.\n3. The transport field must match the diagnostic transport shown above; do not invent another transport.\n4. command must be a single diagnostic command, with no shell prompt, newline concatenation, multiple commands, or code fence.\n5. riskLevel must be one of low, medium, high.\n6. expectedSignals must be a string array describing signals to watch after execution.\n7. If permissions disallow an operation category, do not output that command category; explain the limitation directly if the request cannot be satisfied.", + "ai_chat.panel.prompt.jvm_runtime": "You are GoNavi's JVM runtime analysis assistant. The current context is not SQL; it is the JVM resource workbench.\n\nCurrent connection: {{connectionName}}\nTarget host: {{host}}\nProvider mode: {{providerMode}}\nEnvironment: {{environment}}\nConnection policy: {{connectionPolicy}}\nResource path status: {{resourcePathStatus}}\n\nResponse rules:\n1. You may explain resource structure, risks, modification advice, and rollback advice.\n2. If the user asks for a JVM modification plan, output exactly one ```json code block, and strictly limit JSON fields to targetType, selector, action, payload, reason.\n3. Prefer action values already declared in the current resource snapshot or metadata as supportedActions; if the current resource does not declare them, infer cautiously from the snapshot content.\n4. Prefer the current resourcePath for selector.resourcePath; if the current path is unknown, clearly say precise targeting is not possible and do not invent a path.\n5. payload must use only {\"format\":\"json\",\"value\":{...}} or {\"format\":\"text\",\"value\":\"...\"}; do not output scripts, commands, or bare values.\n6. Do not output scripts, commands, or claims such as already executed successfully.", + "ai_chat.panel.prompt.memory_summary": "This is the history of an overlong conversation. To free context space while preserving the core memory, read it carefully and produce a highly condensed structured summary based on technical facts, explored data-structure state, the user's central request, and current progress.\nNotes:\n1. Be objective and accurate; do not omit key business logic or discovered table names/fields.\n2. Remove ineffective execution process, pleasantries, and the JSON return values themselves.\n3. Keep it around 1000-2000 words and output concise Markdown only.\n4. Start directly with the summary; do not include greetings.", + "ai_chat.panel.prompt.sql.context_tables": "You are a professional database assistant. The current database type is {{dbDisplayType}}. Generate SQL using that dialect. The following linked table DDL is provided by the user; prioritize it when answering:\n\n{{ddlChunks}}", + "ai_chat.panel.prompt.sql.current_database": "You are a professional database assistant. The current database type is {{dbDisplayType}}, and the current database name is {{targetDbName}}. If the user needs information about a specific table or the current database, you can proactively call the provided get_tables tool to fetch table information.", + "ai_chat.panel.prompt.sql.no_connections": "You are a professional database assistant. There are currently no available database connections in the app.\n\nIf the user's question needs database structure or SQL, first explain that get_connections, get_databases, get_tables, and get_columns cannot fetch real database information until a connection exists, then ask the user to create a connection and retry. Do not guess connectionId, dbName, table names, or field names.\n\nFor general questions that do not involve database querying, answer normally.", + "ai_chat.panel.prompt.sql.no_context": "You are a professional database assistant. The user has not selected any specific database or table in the UI as context.\n\nImportant rules:\n1. If you need to help the user find a target table, never guess table names. You must call tools to fetch real data.\n2. Complete workflow: get_connections → get_databases → get_tables → get_columns → generate SQL. Do not skip any step.\n3. [Connection priority - critical] After getting the connection list, search in this order:\n - First priority: connections whose host is localhost, 127.0.0.1, or contains local-machine wording\n - Second priority: connections whose name or host contains dev or local, or whose host is an internal IP such as 10.x, 192.168.x, or 172.16-31.x\n - Third priority: other connections such as test or production\n If you find the target table in a higher-priority connection, use that connection directly and do not continue to lower-priority connections.\n4. If the target table is not found in the current database, continue checking other databases; do not give up.\n5. Stop only after every possible database has been checked, or after the target table has clearly been found.\n6. For general questions that do not involve database querying, answer normally.\n\nSQL generation rules (critical, follow strictly):\n7. [Field accuracy - absolute rule] Before generating SQL, you must call get_columns to fetch the real field list for the target table. Every field name in SQL must exactly match the field value returned by get_columns, including case. Do not invent, abbreviate, or infer field names. For example, if the field is channel, write channel, not pay_channel.\n8. Do not use a \"database.table\" qualified prefix when generating SQL; write only the table name itself.\n9. When reporting results, the connection name/ID and database name must strictly come from the actual parameters of the same get_tables call. Do not mix connectionId from one connection with dbName from another.\n10. If multiple databases have similar names, clearly tell the user which database contains the target table.\n11. [Required] The first line of every SQL code block must add a context declaration comment in exactly this format: -- @context connectionId= dbName=. connectionId and dbName must come from the same successful get_tables call, namely the actual parameter values you passed in that call. Example:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\nCurrent available connections: [{{connList}}]", + "ai_chat.panel.render_error.delete": "Delete this message", + "ai_chat.panel.render_error.description": "The rest of the conversation remains usable. You can delete this broken message before continuing.", + "ai_chat.panel.render_error.retry": "Retry render", + "ai_chat.panel.render_error.title": "This AI message failed to render and was isolated", + "ai_chat.panel.render_error.unknown": "Unknown render error", + "ai_chat.panel.session.default_title": "New chat", + "ai_chat.panel.status.analyzing_chain": "Analyzing chain and logic deeply", + "ai_chat.panel.status.deep_reasoning": "Model is reasoning deeply", + "ai_chat.panel.status.memory_compress_failed": "❌ Memory compression failed. Continuing with the original context...", + "ai_chat.panel.status.memory_compressing": "⚙️ Conversation is overloaded. Starting memory compression...", + "ai_chat.panel.status.memory_probe_summary": "[Automatic memory reshape] Long probe history and chat have been compressed into a summary:\n\n{{summary}}", + "ai_chat.panel.status.memory_summary": "[Automatic memory reshape] Long history has been compressed into a summary:\n\n{{summary}}", + "ai_chat.panel.status.model_connecting": "Connecting to model", + "ai_chat.panel.status.returning_runtime_data": "Returning runtime data to the model", + "ai_chat.panel.status.summarizing_probe": "Summarizing probe results", + "ai_chat.panel.status.waiting_instruction": "Waiting for operation instructions", + "ai_chat.panel.status.waiting_response": "Waiting for model response", + "ai_chat.panel.status.waking_engine": "Waking reasoning engine", + "ai_chat.panel.tool_error.connection_not_found": "Connection not found", "ai_chat.panel.tool_error.fetch_all_columns_failed": "Failed to fetch database column summary: {{detail}}", + "ai_chat.panel.tool_error.fetch_columns_failed": "Failed to fetch column list: {{detail}}", + "ai_chat.panel.tool_error.fetch_databases_failed": "Failed to fetch database list: {{detail}}", "ai_chat.panel.tool_error.fetch_foreign_keys_failed": "Failed to fetch foreign key relationships: {{detail}}", "ai_chat.panel.tool_error.fetch_indexes_failed": "Failed to fetch index definitions: {{detail}}", + "ai_chat.panel.tool_error.fetch_table_ddl_failed": "Failed to fetch CREATE TABLE statement: {{detail}}", + "ai_chat.panel.tool_error.fetch_tables_failed": "Failed to fetch table list: {{detail}}", "ai_chat.panel.tool_error.fetch_triggers_failed": "Failed to fetch trigger definitions: {{detail}}", "ai_chat.panel.tool_error.mcp_failed": "MCP tool call failed", "ai_chat.panel.tool_error.mcp_failed_with_detail": "MCP tool call failed: {{detail}}", "ai_chat.panel.tool_error.preview_table_rows_failed": "Failed to preview table rows: {{detail}}", + "ai_chat.panel.tool_error.sql_blocked": "Security policy blocked this request: the current safety level does not allow {{operationType}} SQL. Show the SQL to the user and ask them to run it manually.", + "ai_chat.panel.tool_error.sql_execute_exception": "SQL execution exception: {{detail}}", + "ai_chat.panel.tool_error.sql_execute_failed": "SQL execution failed", "ai_chat.panel.tool_error.table_name_required": "tableName cannot be empty", + "ai_chat.panel.tool_error.unknown_function": "Unknown function: {{functionName}}", + "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ The following is the exact field list for table {{tableName}}. When generating SQL, use only these field values as column names, exactly as shown. Do not change, abbreviate, or invent field names.\nAvailable fields: {{fieldNames}}\nDetails: {{detailJson}}", + "ai_chat.quick_action.explain_schema": "🔍 Explain schema", + "ai_chat.quick_action.explain_schema.hint.with_context": "Explain fields and constraints", + "ai_chat.quick_action.explain_schema.prompt.with_context": "Explain the design intent and field meanings of these tables in detail: {{tables}}", + "ai_chat.quick_action.explain_schema.title": "Explain schema", + "ai_chat.quick_action.explain_sql": "🔍 Explain SQL", + "ai_chat.quick_action.explain_sql.hint.default": "Explain execution logic", + "ai_chat.quick_action.explain_sql.prompt.default": "Explain how this SQL statement runs:\n```sql\n\n```", + "ai_chat.quick_action.explain_sql.title": "Explain SQL", + "ai_chat.quick_action.generate_sql": "📝 Generate SQL", + "ai_chat.quick_action.generate_sql.hint.default": "Generate a query from natural language", + "ai_chat.quick_action.generate_sql.hint.with_context": "Generate a query from natural language", + "ai_chat.quick_action.generate_sql.prompt.default": "Generate a query from the current database table structure:", + "ai_chat.quick_action.generate_sql.prompt.with_context": "Generate a commonly used query for these table structures: {{tables}}", + "ai_chat.quick_action.generate_sql.title": "Generate SQL", + "ai_chat.quick_action.optimize": "⚡ Optimization tips", + "ai_chat.quick_action.optimize.hint.default": "Performance and index suggestions", + "ai_chat.quick_action.optimize.hint.with_context": "Indexes, normalization, and risk checks", + "ai_chat.quick_action.optimize.prompt.default": "Analyze the performance of this SQL statement and suggest optimizations:\n```sql\n\n```", + "ai_chat.quick_action.optimize.prompt.with_context": "Analyze the structure design of these tables and suggest index and query performance optimizations: {{tables}}", + "ai_chat.quick_action.optimize.title": "Optimization tips", + "ai_chat.quick_action.schema_analysis": "🏗️ Schema analysis", + "ai_chat.quick_action.schema_analysis.hint.default": "Analyze structural quality", + "ai_chat.quick_action.schema_analysis.hint.with_context": "Table relationships and dependency graph", + "ai_chat.quick_action.schema_analysis.prompt.default": "Analyze the current database table structure and suggest optimizations.", + "ai_chat.quick_action.schema_analysis.prompt.with_context": "Run a full Schema analysis for these tables, including data type choices, normalization review, and improvement suggestions: {{tables}}", + "ai_chat.quick_action.schema_analysis.title": "Schema analysis", + "ai_chat.quick_action.table_separator": ", ", "ai_chat.system.context.custom_prompt.database": "The user has provided an additional database-session prompt. Follow it when it does not conflict with safety rules or factual constraints:\n{{content}}", "ai_chat.system.context.custom_prompt.global": "The user has provided an additional global prompt. Follow it when it does not conflict with safety rules or factual constraints:\n{{content}}", "ai_chat.system.context.custom_prompt.jvm": "The user has provided an additional JVM resource-analysis prompt. Follow it when it does not conflict with safety rules or factual constraints:\n{{content}}", @@ -6131,6 +1514,17 @@ "ai_chat.system.inspection_guidance.inspect_sql_editor_transaction": "When the user asks about SQL editor manual commit/autocommit, uncommitted transactions, whether DML auto-commits, or transaction semantics, call inspect_sql_editor_transaction first to read the real commit settings and pending transactions.", "ai_chat.system.inspection_guidance.inspect_sql_risk": "When the user asks you to execute, delete, update, run DDL, run bulk SQL, or asks whether a SQL statement can run / is dangerous, call inspect_sql_risk first to check statement count, write/DDL risk, WHERE conditions, and safety policy; explain and confirm high risk first.", "ai_chat.system.inspection_guidance.inspect_sql_snippets": "When the user mentions SQL snippets, snippet templates, template prefixes, or common templates, call inspect_sql_snippets first to read the local SQL snippet library instead of inventing existing templates from memory.", + "ai_chat.tools.mcp_fallback_description": "MCP tool {{toolName}} provided by {{serverName}}", + "ai_chat.welcome.description.default": "I am your database assistant. I can help generate SQL queries, analyze schemas, explain execution logic, and optimize database performance.", + "ai_chat.welcome.description.with_context": "{{count}} table structures are linked. Use the quick actions below to start analysis.", + "ai_chat.welcome.suggestion.channel_distribution.default": "Order channel distribution for the past 7 days", + "ai_chat.welcome.suggestion.channel_distribution.with_context": "Key channel distribution for the past 7 days", + "ai_chat.welcome.suggestion.cleanup.default": "Help me write SQL to clean abnormal data", + "ai_chat.welcome.suggestion.cleanup.with_context": "Help me write SQL to disable abnormal channels", + "ai_chat.welcome.suggestion.divider": "Or ask directly", + "ai_chat.welcome.suggestion.low_rows.default": "Why does the current result have so few rows?", + "ai_chat.welcome.suggestion.low_rows.with_context": "Why does {{table}} have only a few rows?", + "ai_chat.welcome.title": "Hi, I am GoNavi AI", "ai_service.backend.builtin_prompt.body.data_analyze": "You are the GoNavi AI assistant, a senior data analysis expert with sharp business instincts. Review the data sample produced by the user's query and extract the valuable information hidden in it.\n\nInsight goals:\n1. Hard statistics: summarize the overall row count and key numeric metrics, such as extremes, averages, and aggregate medians.\n2. Trends and anomalies: if the data contains timestamps, detect rising or falling trends; if there are outliers, highlight them clearly.\n3. Business value mining: do not merely translate the data. Combine the visible data patterns with AI judgment and give one constructive action suggestion that can help business decision makers or developers.\n4. Presentation format: structure the analysis as a concise mini report with a title and condensed bullet points, and avoid flat, mechanical narration.", "ai_service.backend.builtin_prompt.body.general_chat": "You are the GoNavi AI assistant, a dedicated expert system deeply integrated into the GoNavi database and cache client.\nYour goal is to be the most useful second brain for developers, DBAs, and data scientists by providing professional, precise, and forward-looking data-side solutions.\n\nCore persona and interaction tone:\n- Professionally grounded: make sound judgments about database products such as MySQL, PostgreSQL, DuckDB, and Redis, including execution plans, indexing, and storage behavior.\n- Direct and practical: avoid empty chatter. When the user's intent is clear, lead with elegant code or steps they can use directly.\n- Structured and readable: use Markdown headings, emphasis, and fenced code blocks with the correct language identifier, such as sql, json, or bash.\n- Production safety first: if a SQL statement may create serious risk, such as DELETE or UPDATE without a WHERE clause or a query that can lock a large production table, raise a clear warning before proceeding.\n\nCapability map:\n1. Natural-language to data operations: translate human intent into accurate queries or commands.\n2. Execution reasoning: explain the logic and performance implications behind queries.\n3. Expert optimization: identify bottlenecks and propose indexing or rewrite strategies.\n4. Data insight: extract meaningful patterns from result sets instead of merely restating rows.\n5. Architecture review: evaluate schema design limitations and suggest evolution paths that can withstand data growth.\n\nInteraction rules:\n- Use professional, collaborative language and adapt to the user's selected interface language.\n- When asked for database code, combine the answer with the relevant engine's best practices. If the exact version is unknown, use a standards-oriented baseline and note important version differences, such as MySQL 8 window functions.\n- Do not refuse too quickly: if the user asks for SQL but no detailed DDL is attached, use the conversation context and any plain table-name list to infer the likely target table. If inference is not possible, explain what is known and ask which table they want to query.", "ai_service.backend.builtin_prompt.body.schema_insight": "You are the GoNavi AI assistant, a chief database architect responsible for the full database lifecycle. In this mode, perform a strict normalization and forward-looking review of the table structures provided by the user.\n\nReview lens:\n1. Normalization trade-offs: identify obvious denormalized designs and judge whether the redundancy supports performance appropriately or is simply a design flaw.\n2. Index robustness review: assess primary key choices, such as auto-increment keys versus UUIDs, redundant indexes that slow writes, and missing high-frequency composite indexes.\n3. Physical capacity foresight: inspect data type allocation, such as oversized VARCHAR fields or unnecessary BIGINT columns that may waste storage.\n4. Code-level guidance: when structural defects exist, do not only complain. Provide concrete ALTER TABLE improvement scripts where appropriate.", @@ -6159,6 +1553,15 @@ "ai_service.backend.database_context.unique_index": " (unique)", "ai_service.backend.database_context.value_no": "No", "ai_service.backend.database_context.value_yes": "Yes", + "ai_service.backend.error.active_provider_not_found": "Active AI Provider was not found", + "ai_service.backend.error.config_dir_create_failed": "Failed to create configuration directory: {{detail}}", + "ai_service.backend.error.config_load_failed": "Failed to load AI configuration: {{detail}}", + "ai_service.backend.error.config_read_failed": "Failed to read AI configuration: {{detail}}", + "ai_service.backend.error.config_rewrite_failed": "Failed to rewrite AI configuration: {{detail}}", + "ai_service.backend.error.config_serialize_failed": "Failed to serialize AI configuration: {{detail}}", + "ai_service.backend.error.config_write_failed": "Failed to write AI configuration: {{detail}}", + "ai_service.backend.error.daily_secret_store_unavailable": "Daily secret store is unavailable: {{detail}}", + "ai_service.backend.error.editable_provider_not_found": "AI Provider to edit was not found: {{detail}}", "ai_service.backend.error.mcp_command_required": "MCP command cannot be empty", "ai_service.backend.error.mcp_http_executable_resolve_failed": "Failed to resolve the GoNavi executable: {{detail}}", "ai_service.backend.error.mcp_http_health_status_failed": "Healthz returned HTTP {{statusCode}}", @@ -6172,16 +1575,86 @@ "ai_service.backend.error.mcp_tool_alias_invalid": "Invalid MCP tool alias: {{alias}}", "ai_service.backend.error.mcp_tool_arguments_parse_failed": "Failed to parse MCP tool arguments: {{detail}}", "ai_service.backend.error.mcp_transport_unsupported": "Unsupported MCP transport: {{transport}}", + "ai_service.backend.error.models_http_status_failed": "Model list endpoint returned an unexpected status (HTTP {{status}}){{body}}", + "ai_service.backend.error.models_parse_failed": "Failed to parse model list: {{detail}}", + "ai_service.backend.error.models_request_create_failed": "Failed to create model list request: {{detail}}", + "ai_service.backend.error.models_request_failed": "Failed to request model list: {{detail}}", + "ai_service.backend.error.provider_auth_failed": "API key is invalid or the request was rejected (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_server_error": "Upstream server returned an internal error (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_status_failed": "Endpoint returned an unexpected status (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_not_configured": "AI Provider is not configured. Configure one in Settings first.", + "ai_service.backend.error.provider_request_create_failed": "Failed to create request: {{detail}}", + "ai_service.backend.error.provider_request_serialize_failed": "Failed to serialize request: {{detail}}", + "ai_service.backend.error.provider_secret_bundle_parse_failed": "Failed to parse provider secret bundle: {{detail}}", + "ai_service.backend.error.provider_secret_delete_failed": "Failed to delete Provider secret: {{detail}}", + "ai_service.backend.error.provider_secret_load_failed": "Failed to load AI Provider secret (provider={{provider}}): {{detail}}", + "ai_service.backend.error.provider_secret_read_failed": "Failed to read Provider secret: {{detail}}", + "ai_service.backend.error.provider_secret_save_failed": "Failed to save Provider secret: {{detail}}", + "ai_service.backend.error.provider_secret_saved_read_failed": "Failed to read saved Provider secret: {{detail}}", + "ai_service.backend.error.provider_test_failed": "Connection test failed: {{detail}}", + "ai_service.backend.error.secret_store_unavailable": "Secret store is unavailable: {{detail}}", + "ai_service.backend.error.session_corrupt": "Session data is corrupted", + "ai_service.backend.error.session_delete_failed": "Failed to delete session: {{detail}}", + "ai_service.backend.error.session_missing": "Session does not exist", + "ai_service.backend.error.session_serialize_failed": "Failed to serialize session data: {{detail}}", + "ai_service.backend.error.session_write_failed": "Failed to save session: {{detail}}", + "ai_service.backend.error.sessions_dir_create_failed": "Failed to create sessions directory: {{detail}}", + "ai_service.backend.error.volcengine_coding_models_empty": "The current endpoint did not return any available Volcengine Coding Plan models. Check account access or switch to the \"Volcengine Ark\" provider", "ai_service.backend.message.mcp_test_success": "MCP server connection succeeded; discovered {{count}} tools", + "ai_service.backend.message.provider_test_success": "Endpoint connectivity test succeeded", "ai_service.backend.message.skill_unnamed": "Unnamed Skill", "ai_service.backend.provider.image_fallback_prompt": "Please describe and analyze this image.", "ai_service.backend.provider.image_omitted_notice": "[Image omitted: the current model or upstream API does not support image input. Switch to a vision-capable model and resend the image.]", + "ai_service.backend.warning.sql_delete_without_where": "High-risk SQL: DELETE without WHERE will delete all rows", + "ai_service.backend.warning.sql_drop": "High-risk SQL: DROP permanently deletes database objects", + "ai_service.backend.warning.sql_truncate": "High-risk SQL: TRUNCATE removes all rows from the table", + "ai_service.backend.warning.sql_update_without_where": "High-risk SQL: UPDATE without WHERE will update all rows", + "ai_settings.action.back": "Back", + "ai_settings.action.connection_ok": "Connection OK", + "ai_settings.action.retest": "Test again", + "ai_settings.action.save": "Save", + "ai_settings.action.test": "Test connection", + "ai_settings.clipboard.error.unsupported": "Copying to the clipboard is not supported in this environment", + "ai_settings.context.description": "Control how much database context is sent to AI", + "ai_settings.context.schema_only.desc": "Only table and column structure is sent to AI", + "ai_settings.context.schema_only.label": "Schema only", + "ai_settings.context.with_results.desc": "Send recent query results as context", + "ai_settings.context.with_results.label": "With query results", + "ai_settings.context.with_samples.desc": "Include a small amount of sample data to help AI understand data patterns", + "ai_settings.context.with_samples.label": "With samples", + "ai_settings.form.api_endpoint": "API Endpoint (URL)", + "ai_settings.form.api_endpoint_required": "Enter a valid endpoint URL", "ai_settings.form.api_endpoint_placeholder.codebuddy": "Leave blank to use the default CodeBuddy CLI gateway", + "ai_settings.form.api_format": "API format", + "ai_settings.form.api_key": "API Key", "ai_settings.form.api_key.codebuddy_optional": "API Key / Auth Token (optional)", "ai_settings.form.api_key.codebuddy_hint": "Leave blank to use the signed-in CodeBuddy CLI account on this machine; if filled, the current credential overrides it.", + "ai_settings.form.api_key_keep_placeholder": "Leave blank to keep using the saved secret", + "ai_settings.form.api_key_placeholder": "sk-... / your API Key", "ai_settings.form.api_key_placeholder.codebuddy": "Leave blank to use the local sign-in, or enter API Key / Token to override", + "ai_settings.form.api_key_required": "Enter an API Key", + "ai_settings.form.api_key_saved_hint": "An API Key is already saved. Leave blank to keep it, or enter a new value to replace it.", + "ai_settings.form.clear_saved_api_key": "Clear saved API Key", + "ai_settings.form.model_list": "Available model list (optional)", + "ai_settings.form.model_list_placeholder": "Configure model IDs; leave blank to fetch them from the server", "ai_settings.form.model_list_placeholder.codebuddy": "Optional: prefill common models; leave blank to let CodeBuddy CLI or the service choose automatically", "ai_settings.form.model_list_placeholder.cursor": "Optional: prefill common Cursor model IDs; leave blank to use Cursor's default model automatically", + "ai_settings.form.provider_name": "Provider name", + "ai_settings.form.provider_name_placeholder": "Example: My OpenAI-compatible endpoint / private model", + "ai_settings.form.provider_name_required": "Enter a name", + "ai_settings.form.section.auth_connection": "Authentication & connection", + "ai_settings.form.section.basic": "Basic information", + "ai_settings.form.section.service_type": "Service type", + "ai_settings.mcp_http.error.control_unsupported_runtime": "The current runtime does not support MCP HTTP server control", + "ai_settings.mcp_http.error.start_unsupported_version": "This version does not support starting the MCP HTTP server", + "ai_settings.mcp_http.error.stop_unsupported_version": "This version does not support stopping the MCP HTTP server", + "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header copied", + "ai_settings.mcp_http.message.authorization_header_required": "Start the MCP HTTP server first to generate the Authorization Header", + "ai_settings.mcp_http.message.started": "GoNavi MCP HTTP server started", + "ai_settings.mcp_http.message.stopped": "GoNavi MCP HTTP server stopped", + "ai_settings.mcp_http.message.toggle_failed": "Failed to switch GoNavi MCP HTTP server", + "ai_settings.mcp_http.message.url_copied": "MCP HTTP URL copied", + "ai_settings.mcp_http.message.url_unavailable": "No MCP HTTP URL is available to copy", "ai_settings.mcp_http.panel.addr_label": "Listen address / port", "ai_settings.mcp_http.panel.authorization_placeholder": "Bearer gnv_xxx (leave empty to generate automatically)", "ai_settings.mcp_http.panel.copy_authorization": "Copy Authorization", @@ -6194,6 +1667,7 @@ "ai_settings.mcp_http.panel.switch.off": "Off", "ai_settings.mcp_http.panel.switch.on": "On", "ai_settings.mcp_http.panel.title": "GoNavi MCP HTTP service", + "ai_settings.mcp_http.status.not_running": "GoNavi MCP HTTP server is not running", "ai_settings.mcp_server.argument_hints.action_separator": "; ", "ai_settings.mcp_server.argument_hints.argument_details": "Argument details", "ai_settings.mcp_server.argument_hints.business_arguments": "Detected business arguments", @@ -6628,6 +2102,13 @@ "ai_settings.mcp_server.help.field_state.fixed": "Fixed", "ai_settings.mcp_server.help.field_state.optional": "Optional", "ai_settings.mcp_server.help.field_state.required": "Required", + "ai_settings.mcp_server.message.delete_failed": "Failed to delete MCP server", + "ai_settings.mcp_server.message.deleted": "MCP server deleted", + "ai_settings.mcp_server.message.save_failed": "Failed to save MCP server", + "ai_settings.mcp_server.message.saved": "MCP server saved", + "ai_settings.mcp_server.message.test_failed": "MCP server test failed", + "ai_settings.mcp_server.message.test_request_failed": "Failed to test MCP server", + "ai_settings.mcp_server.message.test_success": "MCP server connection succeeded", "ai_settings.mcp_server.quick_add.action.parse_and_add": "Parse and add draft", "ai_settings.mcp_server.quick_add.description": "Choose the closest template, or paste a full startup command from the README. GoNavi will split it into command, args, and env, then create an editable MCP draft.", "ai_settings.mcp_server.quick_add.templates_description": "If you are not sure how to split command and args, click a template to create a draft. Each card shows the command GoNavi will actually launch.", @@ -6752,12 +2233,40 @@ "ai_settings.mcp_server.validation.summary.ready": "The current configuration can be tested and saved.", "ai_settings.mcp_server.validation.summary.warnings": "Found {{count}} item to check. You can still test and save.", "ai_settings.mcp_server.validation.title": "Configuration check", + "ai_settings.message.delete_failed": "Delete failed", + "ai_settings.message.delete_failed_detail": "Delete failed: {{detail}}", + "ai_settings.message.deleted": "Deleted", + "ai_settings.message.deleted_and_switched": "Deleted and automatically switched to \"{{name}}\"", + "ai_settings.message.load_provider_failed": "Failed to read provider configuration", + "ai_settings.message.save_failed": "Save failed", + "ai_settings.message.save_failed_detail": "Save failed: {{detail}}", + "ai_settings.message.saved": "Saved", + "ai_settings.message.switch_failed": "Switch failed", + "ai_settings.message.switch_failed_detail": "Switch failed: {{detail}}", + "ai_settings.message.switched": "Switched", + "ai_settings.message.test_failed": "Test failed", + "ai_settings.message.test_failed_detail": "Test failed: {{detail}}", + "ai_settings.message.test_requires_new_api_key": "Enter a new API Key before testing, or cancel clearing the saved secret", + "ai_settings.message.test_success": "Connection succeeded", + "ai_settings.message.unknown_error": "Unknown error", + "ai_settings.nav.context.description": "Configure database schema context", + "ai_settings.nav.context.title": "Context", "ai_settings.nav.mcp.description": "Connect GoNavi to external clients and manage tool sources", "ai_settings.nav.mcp.title": "MCP services", + "ai_settings.nav.prompts.description": "View system-level preset requirements", + "ai_settings.nav.prompts.title": "Built-in prompts", + "ai_settings.nav.providers.description": "Configure model endpoints and secrets", + "ai_settings.nav.providers.title": "Model providers", + "ai_settings.nav.safety.description": "Limit AI operation risk level", + "ai_settings.nav.safety.title": "Safety control", "ai_settings.nav.skills.description": "Configure reusable prompt modules", "ai_settings.nav.skills.title": "Skills", + "ai_settings.nav.title": "Settings navigation", + "ai_settings.nav.tools.description": "View data probes available to AI", + "ai_settings.nav.tools.title": "Built-in tools", "ai_settings.prompts.action.save": "Save custom prompts", "ai_settings.prompts.builtin.description": "These are the read-only low-level AI prompts preset by the current GoNavi version. They are injected before the user-level prompts above in the matching request context.", + "ai_settings.prompts.description": "These are the read-only system prompts preset by the current GoNavi version. They are injected dynamically into request context for matching scenarios.", "ai_settings.prompts.field.database.description": "Applies only to database and SQL scenarios, such as \"confirm field names before generating SQL\".", "ai_settings.prompts.field.database.title": "Database session extra prompt", "ai_settings.prompts.field.global.description": "Applies to all AI sessions, such as \"state the conclusion first\" or \"keep answers concise\".", @@ -6766,16 +2275,65 @@ "ai_settings.prompts.field.jvm_diagnostic.title": "JVM diagnostics extra prompt", "ai_settings.prompts.field.jvm.description": "Applies only to JVM resource browsing and analysis scenarios.", "ai_settings.prompts.field.jvm.title": "JVM resource analysis extra prompt", + "ai_settings.prompts.message.save_failed": "Failed to save custom prompts", + "ai_settings.prompts.message.saved": "Custom prompts saved", "ai_settings.prompts.placeholder.empty": "Leave empty to add nothing extra", "ai_settings.prompts.user.description": "This content is appended as a system message after the built-in system prompts. Use it for personal style preferences, output constraints, or team rules. System rules still take precedence for safety boundaries.", "ai_settings.prompts.user.title": "User-level custom prompts", + "ai_settings.provider_preset.anthropic.desc": "Claude Opus/Sonnet", + "ai_settings.provider_preset.anthropic.label": "Claude", + "ai_settings.provider_preset.custom.desc": "Custom API endpoint", + "ai_settings.provider_preset.custom.label": "Custom", + "ai_settings.provider_preset.deepseek.desc": "DeepSeek-V4 / R1", + "ai_settings.provider_preset.deepseek.label": "DeepSeek", + "ai_settings.provider_preset.gemini.desc": "Gemini 3.1 / 2.5 series", + "ai_settings.provider_preset.gemini.label": "Gemini", + "ai_settings.provider_preset.minimax.desc": "M3 / M2.7 series (Anthropic-compatible)", + "ai_settings.provider_preset.minimax.label": "MiniMax", + "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5 (Anthropic-compatible)", + "ai_settings.provider_preset.moonshot.label": "Kimi", + "ai_settings.provider_preset.ollama.desc": "Locally deployed open-source models", + "ai_settings.provider_preset.ollama.label": "Ollama", + "ai_settings.provider_preset.openai.desc": "GPT-5.4 / 5.3 series", + "ai_settings.provider_preset.openai.label": "OpenAI", + "ai_settings.provider_preset.qwen_bailian.desc": "Bailian Anthropic-compatible endpoint / remote model list", + "ai_settings.provider_preset.qwen_bailian.label": "Qwen (Bailian General)", + "ai_settings.provider_preset.qwen_coding_plan.desc": "Claude Code CLI proxy chain / official supported model list", + "ai_settings.provider_preset.qwen_coding_plan.label": "Qwen (Coding Plan)", + "ai_settings.provider_preset.volcengine_ark.desc": "Ark general inference / Doubao models", + "ai_settings.provider_preset.volcengine_ark.label": "Volcengine Ark", + "ai_settings.provider_preset.volcengine_coding.desc": "Ark Code / Coding Plan", + "ai_settings.provider_preset.volcengine_coding.label": "Volcengine Coding Plan", + "ai_settings.provider_preset.zhipu.desc": "GLM-5 / GLM-5-Turbo", + "ai_settings.provider_preset.zhipu.label": "Zhipu GLM", + "ai_settings.provider.action.add": "Add model provider", + "ai_settings.provider.action.delete": "Delete", + "ai_settings.provider.action.edit": "Edit", + "ai_settings.provider.confirm_delete": "Delete this provider?", + "ai_settings.provider.editor.add_title": "Add model provider", + "ai_settings.provider.editor.edit_title": "Edit model provider", + "ai_settings.provider.empty.description": "Add one to start using the AI assistant", + "ai_settings.provider.empty.title": "No model provider configured", + "ai_settings.provider.next_provider": "next provider", + "ai_settings.provider.no_model": "No model selected", "ai_settings.provider.auto_model": "Auto-selected", + "ai_settings.safety.description": "Control which SQL operation types AI may execute to protect data safety", + "ai_settings.safety.full.desc": "AI may run all operations, including DDL. High-risk operations show warnings automatically.", + "ai_settings.safety.full.label": "Full mode", + "ai_settings.safety.readonly.desc": "AI may only run SELECT and similar query operations. This is the safest mode.", + "ai_settings.safety.readonly.label": "Read-only mode", + "ai_settings.safety.readwrite.desc": "AI may run INSERT/UPDATE/DELETE. Risky operations require confirmation.", + "ai_settings.safety.readwrite.label": "Read/write mode", "ai_settings.skill.action.add": "Add Skill", "ai_settings.skill.confirm_delete": "Delete this Skill?", "ai_settings.skill.description": "A Skill is not another large prompt. It is a named prompt module + scope + tool dependencies. At this stage, keep it in the main repository. You do not need a separate GitHub repository unless you later distribute a shared skill pack.", "ai_settings.skill.description_placeholder": "Private note, for example: confirm field names and risks before outputting SQL", "ai_settings.skill.empty": "No Skills yet. You can define dedicated system prompts for database, JVM, and diagnostic scenarios.", "ai_settings.skill.hint": "When enabled, it is injected by scope. If a required tool is missing, this Skill is skipped automatically.", + "ai_settings.skill.message.delete_failed": "Failed to delete Skill", + "ai_settings.skill.message.deleted": "Skill deleted", + "ai_settings.skill.message.save_failed": "Failed to save Skill", + "ai_settings.skill.message.saved": "Skill saved", "ai_settings.skill.name_placeholder": "Skill name, for example: SQL review / JVM diagnostic plan", "ai_settings.skill.required_tools_placeholder": "Optional: declare which tools this Skill depends on", "ai_settings.skill.scope.database.desc": "Only enabled for SQL / database scenarios", @@ -6790,6 +2348,37 @@ "ai_settings.skill.status.disabled": "Disabled", "ai_settings.skill.status.enabled": "Enabled", "ai_settings.skill.system_prompt_placeholder": "Enter the system prompt this Skill should append. Keep it focused on one clear capability and avoid duplicating global prompts.", + "ai_settings.subtitle": "Configure AI models, safety level, and context options", + "ai_settings.title": "AI settings", + "ai_settings.tools.builtin_tool_label": "Built-in tool", + "ai_settings.tools.description": "When handling database questions, the AI assistant can call these built-in tools automatically to fetch real data without manual intervention.", + "ai_settings.tools.empty.no_matches": "No matching built-in tools. Try broader keywords such as mcp, logs, connection, transaction, shortcuts, or schema.", + "ai_settings.tools.execute_sql.desc": "Execute SQL query and return results", + "ai_settings.tools.execute_sql.detail": "Pass connectionId, dbName, and sql to execute SQL on the target database and return results, up to 50 rows. Safety level applies; read-only mode only allows SELECT/SHOW/DESCRIBE.", + "ai_settings.tools.get_columns.desc": "Get table column structure", + "ai_settings.tools.get_columns.detail": "Pass connectionId, dbName, and tableName to return each column's name, type, nullability, default value, and comment. AI must call this tool before generating SQL to confirm real column names.", + "ai_settings.tools.get_connections.desc": "Get all available database connections", + "ai_settings.tools.get_connections.detail": "Returns connection ID, name, type (MySQL/PostgreSQL, etc.), and Host address. AI uses the returned information to decide which connection to explore first.", + "ai_settings.tools.get_databases.desc": "Get all databases under a connection", + "ai_settings.tools.get_databases.detail": "Pass connectionId to return database or Schema names under that connection.", + "ai_settings.tools.get_table_ddl.desc": "Get table DDL", + "ai_settings.tools.get_table_ddl.detail": "Pass connectionId, dbName, and tableName to return the full CREATE TABLE statement, including column definitions, indexes, constraints, and related metadata.", + "ai_settings.tools.get_tables.desc": "Get all table names under a database", + "ai_settings.tools.get_tables.detail": "Pass connectionId and dbName to return table names. AI uses this to locate the target table mentioned by the user.", + "ai_settings.tools.parameters.default_value": "Default: {{value}}", + "ai_settings.tools.parameters.enum_values": "Allowed values: {{values}}", + "ai_settings.tools.parameters.example": "Example:", + "ai_settings.tools.parameters.hint_title": "Parameter hints", + "ai_settings.tools.parameters.optional": "Optional", + "ai_settings.tools.parameters.required": "Required", + "ai_settings.tools.parameters.type_label": "Type: {{type}}", + "ai_settings.tools.params_label": "Parameters:", + "ai_settings.tools.params.none": "None", + "ai_settings.tools.search.aria_label": "Search built-in tools", + "ai_settings.tools.search.clear": "Clear", + "ai_settings.tools.search.placeholder": "Search tools, flows, or parameters, for example mcp / lineLimit / allowMutating / transaction", + "ai_settings.tools.summary": "Showing {{flowVisible}}/{{flowTotal}} recommended flows and {{toolVisible}}/{{toolTotal}} built-in tools.", + "ai_settings.tools.workflow": "💡 Workflow: get_connections -> get_databases -> get_tables -> get_columns -> generate SQL", "ai.service.mcp_client.claude_code.config_dir_create_failed": "Failed to create Claude Code configuration directory: {{detail}}", "ai.service.mcp_client.claude_code.config_format_invalid": "Claude Code configuration format is invalid: {{path}} should be {{expected}}", "ai.service.mcp_client.claude_code.config_parse_failed": "Failed to parse Claude Code configuration: {{detail}}", @@ -6816,12 +2405,111 @@ "ai.service.mcp_client.executable_path_failed": "Failed to locate the current GoNavi executable: {{detail}}", "ai.service.mcp_client.remote.status.message": "{{label}} usually runs in the cloud or a remote environment. Connect it to Windows GoNavi through a remote MCP bridge; database passwords remain on this GoNavi machine.", "ai.service.mcp_client.user_home_dir_unavailable": "Unable to determine the current user home directory", + "app.about.action.check_updates": "Check for Updates", + "app.about.action.download_progress": "Download Progress", + "app.about.action.download_update": "Download Update", + "app.about.action.hide_to_background": "Hide to Background", + "app.about.action.install_update": "Install Update", + "app.about.action.mute_this_version": "Do Not Remind This Time", + "app.about.action.open_install_directory": "Open Install Directory", + "app.about.community.ai_book": "AI全书", + "app.about.description": "View version information, repository links, update status, and downloads.", + "app.about.download_progress.title": "Download Update", + "app.about.download_progress.title_with_version": "Download Update {{version}}", + "app.about.field.author": "Author", + "app.about.field.community": "Community", + "app.about.field.update_status": "Update Status", + "app.about.field.version": "Version", + "app.about.message.check_failed_with_error": "Update check failed: {{error}}", + "app.about.message.download_completed": "Update download completed", + "app.about.message.download_completed_with_path": "Update download completed. Package path: {{path}}", + "app.about.message.download_failed_with_error": "Update download failed: {{error}}", + "app.about.message.install_directory_opened_manual_replace": "Install directory opened. Complete the replacement manually.", + "app.about.message.install_failed_with_error": "Update installation failed: {{error}}", + "app.about.message.load_failed": "Failed to get app info: {{error}}", + "app.about.message.new_version_found": "New version {{version}} found", + "app.about.message.open_install_directory_failed_with_error": "Failed to open install directory: {{error}}", + "app.about.message.update_package_ready": "Update package is ready ({{version}})", + "app.about.message.update_package_ready_with_path": "Update package is ready ({{version}}), path: {{path}}", + "app.about.project_links": "Project Links", + "app.about.title": "About GoNavi", + "app.about.update_status.check_failed": "Update check failed: {{error}}", + "app.about.update_status.checking": "Checking for updates...", + "app.about.update_status.latest": "You are on the latest version ({{version}})", + "app.about.update_status.new_version_downloaded": "New version {{version}} found (downloaded; open Download Progress to install)", + "app.about.update_status.new_version_not_downloaded": "New version {{version}} found (not downloaded)", + "app.about.update_status.not_checked": "Not checked", + "app.ai_panel.action.close": "Close Panel", + "app.ai_panel.action.reload": "Reload", + "app.ai_panel.aria.close": "Close AI Panel", + "app.ai_panel.error.description": "This usually happens after hot reload invalidates lazy-loaded assets in development. The full-page white screen was prevented, and you can retry immediately.", + "app.ai_panel.error.title": "AI Panel Failed to Load", "app.backend.error.reset_webview_zoom_failed": "Failed to reset WebView2 zoom: {{detail}}", + "app.browser_mock.export_connection_package_unsupported": "Browser mock does not support recovery package export", + "app.browser_mock.export_sql_unsupported": "Browser mock does not support SQL file export", + "app.browser_mock.import_connection_package_unsupported": "Browser mock does not support recovery package import; only legacy JSON connection arrays are supported", + "app.browser_mock.mcp_client.claude_code.installed": "Claude Code user-level MCP configuration has been written. Restart Claude CLI, then GoNavi will appear under User MCPs in /mcp.", + "app.browser_mock.mcp_client.claude_code.not_detected": "No Claude Code user-level GoNavi MCP configuration was detected", + "app.browser_mock.mcp_client.codex.installed": "Codex user-level MCP configuration has been written. Restart Codex CLI or the desktop app to see GoNavi.", + "app.browser_mock.mcp_client.codex.path_mismatch": "A GoNavi MCP record was detected in Codex, but it does not match the current GoNavi installation path. Updating is recommended.", + "app.browser_mock.mcp_http.not_running": "GoNavi MCP HTTP service is not running", + "app.browser_mock.mcp_http.started": "GoNavi MCP HTTP service has started", + "app.browser_mock.mcp_http.stopped": "GoNavi MCP HTTP service has stopped", + "app.browser_mock.mcp_server.command_required": "MCP command cannot be empty", + "app.browser_mock.mcp_server.test_success": "MCP mock test succeeded", + "app.browser_mock.mcp_tool.unavailable": "Browser mock is not connected to a real MCP service", + "app.browser_mock.provider.test_failed_detail": "Connection test failed: {{detail}}", + "app.browser_mock.provider.test_success": "Endpoint connectivity test succeeded", + "app.connection_package.action.start_export": "Start Export", + "app.connection_package.action.start_import": "Start Import", + "app.connection_package.dialog.export_title": "Export Connections", + "app.connection_package.dialog.file_password_placeholder": "Enter file protection password (optional)", + "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "Passwords are encrypted. For public transfer, set a file protection password.", + "app.connection_package.dialog.help.exclude_passwords": "Only connection settings will be exported. Passwords are not included.", + "app.connection_package.dialog.help.share_file_password_separately": "Share the password through a separate channel. Do not send it with the file.", + "app.connection_package.dialog.import_password_title": "Enter Import Password", + "app.connection_package.dialog.option.include_passwords": "Export connection passwords", + "app.connection_package.dialog.option.use_file_password": "Set file protection password", + "app.connection_package.dialog.restore_password_placeholder": "Enter recovery package password", + "app.connection_package.error.export_capability_unavailable": "Export failed: the current backend does not provide the new export capability", + "app.connection_package.error.file_password_required": "File protection password cannot be empty", + "app.connection_package.error.import_capability_unavailable": "Import failed: the current backend does not provide the new import capability", + "app.connection_package.error.import_no_connections": "Import failed: the backend did not return a connection list", + "app.connection_package.error.missing_import_payload": "Import failed: recovery package content to import was not found", + "app.connection_package.error.refresh_failed_no_connections": "Import succeeded, but refreshing the connection list failed: the backend did not return a connection list", + "app.connection_package.error.restore_password_required": "Recovery package password cannot be empty", + "app.connection_package.message.export_failed": "Export failed", + "app.connection_package.message.export_succeeded": "Export succeeded", + "app.connection_package.message.import_failed": "Import failed", + "app.connection_package.message.import_failed_with_error": "Import failed: {{error}}", + "app.connection_package.message.imported_connections": "Imported {{count}} connections", + "app.connection_package.message.imported_with_missing_passwords": "Imported {{count}} connections. Some connections do not include passwords; edit those connections and enter passwords before saving.", + "app.connection_package.message.no_connections_to_export": "No connections to export", + "app.connection_package.message.unsupported_file_format": "File format error: only GoNavi recovery packages, legacy JSON connection arrays, or MySQL Workbench XML are supported", + "app.connection.message.editable_load_failed": "Failed to load the saved connection details. The masked configuration will be opened instead.", + "app.connection.message.editable_load_failed_with_detail": "Failed to load the saved connection details: {{detail}}. The masked configuration will be opened instead.", + "app.data_root.action.migrate_and_switch": "Migrate Existing Data and Switch", + "app.data_root.action.open_current": "Open Current Directory", + "app.data_root.action.restore_default_directory": "Restore Default Directory", + "app.data_root.action.select": "Select Directory", + "app.data_root.action.switch_only": "Switch to Selected Directory Only", + "app.data_root.apply_method": "Apply Method", + "app.data_root.backend.dialog.select_directory": "Select GoNavi Data Directory", + "app.data_root.backend.error.create_bootstrap_directory_failed": "Failed to create default bootstrap directory: {{detail}}", + "app.data_root.backend.error.create_data_directory_failed": "Failed to create data directory: {{detail}}", + "app.data_root.backend.error.create_target_failed": "Unable to create target data directory: {{detail}}", + "app.data_root.backend.error.directory_empty": "Data directory cannot be empty", + "app.data_root.backend.error.directory_unavailable": "Data directory does not exist or is not accessible", + "app.data_root.backend.error.migrate_directory_failed": "Unable to migrate directory ({{entry}}): {{detail}}", + "app.data_root.backend.error.migrate_file_failed": "Unable to migrate file ({{entry}}): {{detail}}", + "app.data_root.backend.error.open_directory_failed": "Failed to open data directory: {{detail}}", + "app.data_root.backend.error.open_directory_unsupported": "Opening directories is not supported on this platform: {{platform}}", "app.data_root.backend.error.parse_migrated_security_update_manifest_failed": "Failed to parse migrated security update manifest: {{detail}}", "app.data_root.backend.error.parse_migrated_security_update_result_failed": "Failed to parse migrated security update result: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_manifest_failed": "Failed to read migrated security update manifest: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_result_failed": "Failed to read migrated security update result: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_state_failed": "Failed to read migrated security update state: {{detail}}", + "app.data_root.backend.error.read_source_failed": "Unable to read source data ({{entry}}): {{detail}}", "app.data_root.backend.error.read_source_root_failed": "Failed to read source data directory: {{detail}}", "app.data_root.backend.error.resolve_source_failed": "Failed to resolve source data directory: {{detail}}", "app.data_root.backend.error.resolve_target_failed": "Failed to resolve target data directory: {{detail}}", @@ -6829,11 +2517,539 @@ "app.data_root.backend.error.write_migrated_security_update_manifest_failed": "Failed to write migrated security update manifest: {{detail}}", "app.data_root.backend.error.write_migrated_security_update_result_failed": "Failed to write migrated security update result: {{detail}}", "app.data_root.backend.error.write_migrated_security_update_state_failed": "Failed to write migrated security update state: {{detail}}", + "app.data_root.backend.message.migrated_restart": "Data migrated and switched to the new directory. Restart the app to finish switching all modules.", + "app.data_root.backend.message.opened": "Data directory opened", + "app.data_root.backend.message.unchanged": "Data directory is unchanged", + "app.data_root.backend.message.updated_restart": "Data directory updated. Restart the app so AI and other runtime modules fully switch to the new directory.", + "app.data_root.current_directory": "Current Directory", + "app.data_root.default_directory": "Default Directory", + "app.data_root.description": "Manage the root directory for file-based data such as connections, proxy, AI settings, and drivers.", + "app.data_root.driver_directory": "Driver Directory", + "app.data_root.message.apply_failed": "Failed to apply data directory", + "app.data_root.message.apply_failed_with_error": "Failed to apply data directory: {{error}}", + "app.data_root.message.load_failed": "Failed to load data directory info", + "app.data_root.message.load_failed_with_error": "Failed to load data directory info: {{error}}", + "app.data_root.message.open_failed": "Failed to open data directory", + "app.data_root.message.open_failed_with_error": "Failed to open data directory: {{error}}", + "app.data_root.message.select_failed": "Failed to select data directory", + "app.data_root.message.select_failed_with_error": "Failed to select data directory: {{error}}", + "app.data_root.message.select_valid_first": "Select a valid data directory first", + "app.data_root.message.updated": "Data directory updated", + "app.data_root.placeholder.select_new_directory": "Select a new data directory", + "app.data_root.restart_hint": "Restarting the app after switching is recommended so AI and other long-lived modules fully move to the new directory. Sensitive passwords remain in the system secret store and are not migrated with file directories.", + "app.data_root.switch_target": "Switch Target", + "app.data_root.title": "Data Storage Location", + "app.linux_cjk_font_banner.action.open_font_settings": "Font Settings", + "app.linux_cjk_font_banner.description": "Chinese text may render as missing glyph boxes. Install fonts, then restart GoNavi: ", + "app.linux_cjk_font_banner.title": "Linux CJK fonts missing", + "app.proxy.description": "Configure update checks, driver management, and connection network access that has no separate proxy.", + "app.proxy.enable": "Enable Global Proxy", + "app.proxy.host": "Proxy Host", + "app.proxy.host_placeholder": "Example: 127.0.0.1", "app.proxy.message.config_applied": "Global proxy configuration has been applied", + "app.proxy.message.invalid_enabled": "Global proxy is enabled, but the host or port is invalid. It is currently treated as disabled.", + "app.proxy.message.save_failed": "Global proxy configuration failed: {{error}}", + "app.proxy.password_optional": "Password (optional)", + "app.proxy.port": "Port", + "app.proxy.scope_hint": "* Applies to update checks, driver management network requests, and database connections without a separate proxy", + "app.proxy.section_title": "Global Proxy", + "app.proxy.title": "Global Proxy Settings", + "app.proxy.type": "Proxy Type", + "app.proxy.username_optional": "Username (optional)", + "app.security_update.error.capability_unavailable": "Security update capability is unavailable", + "app.security_update.message.completed": "Saved configurations have completed the security update", + "app.security_update.message.needs_attention": "The update is not complete yet. A few configurations need your attention.", + "app.security_update.message.not_finished_retry_later": "Security update is not complete. Try again later.", + "app.security_update.message.postpone_failed": "Unable to postpone this security update right now", + "app.security_update.message.rolled_back": "This update did not complete. The system kept the currently usable configuration.", + "app.security_update.stage.checking_saved_config": "Checking saved configurations", + "app.security_update.stage.updating_secure_storage": "Updating secure storage", + "app.security_update.stage.verifying_result": "Verifying update result", + "app.settings.description": "Manage general settings such as language, proxy, theme, AI, and about.", + "app.settings.entry.about.description": "View version information, repository links, and update status.", + "app.settings.entry.about.title": "About GoNavi", + "app.settings.entry.ai.description": "Manage model providers, keys, and default behavior.", + "app.settings.entry.ai.title": "AI Settings", + "app.settings.entry.proxy.description": "Configure update checks, driver management, and public network access.", + "app.settings.entry.proxy.title": "Global Proxy", + "app.settings.entry.theme.description": "Switch light or dark theme and adjust interface appearance.", + "app.settings.entry.theme.title": "Theme and Appearance", + "app.settings.title": "Settings Center", + "app.shortcuts.action.diagnoseQuery.description": "Run EXPLAIN on the current SQL and visualize the execution plan with index suggestions", + "app.shortcuts.action.diagnoseQuery.label": "SQL Diagnose", + "app.shortcuts.action.focusSidebarSearch.description": "Focus the left connection tree search box", + "app.shortcuts.action.focusSidebarSearch.label": "Focus Sidebar Search", + "app.shortcuts.action.newConnection.description": "Create a new database, runtime, or other data source connection", + "app.shortcuts.action.newConnection.label": "New Data Source", + "app.shortcuts.action.newQueryTab.description": "Create a new SQL query tab", + "app.shortcuts.action.newQueryTab.label": "New Query Tab", + "app.shortcuts.action.openShortcutManager.description": "Open the shortcut settings panel", + "app.shortcuts.action.openShortcutManager.label": "Open Shortcut Manager", + "app.shortcuts.action.record": "Record", + "app.shortcuts.action.resetWindowZoom.description": "Manually trigger when the font becomes abnormally large after restoring from the Windows taskbar; toggles maximized state once so WebView2 recalculates font metrics", + "app.shortcuts.action.resetWindowZoom.label": "Reset Window Zoom", + "app.shortcuts.action.restore_defaults": "Restore Defaults", + "app.shortcuts.action.runQuery.description": "Run SQL in the current query page", + "app.shortcuts.action.runQuery.label": "Run SQL", + "app.shortcuts.action.saveQuery.description": "Save the current query tab; unnamed queries open the save dialog", + "app.shortcuts.action.saveQuery.label": "Save Query", + "app.shortcuts.action.selectCurrentStatement.description": "Select the SQL statement at the cursor in the query editor", + "app.shortcuts.action.selectCurrentStatement.label": "Select Current Statement", + "app.shortcuts.action.sendAIChatMessage.description": "Send the current message from the AI input; Shift+Enter always inserts a new line", + "app.shortcuts.action.sendAIChatMessage.label": "Send AI Chat", + "app.shortcuts.action.showSlowQueries.description": "View slow SQL history for the current connection (default threshold 500ms)", + "app.shortcuts.action.showSlowQueries.label": "Slow SQL History", + "app.shortcuts.action.switchToNextTab.description": "Move right among open tabs", + "app.shortcuts.action.switchToNextTab.label": "Switch to Next Tab", + "app.shortcuts.action.switchToPreviousTab.description": "Move left among open tabs", + "app.shortcuts.action.switchToPreviousTab.label": "Switch to Previous Tab", + "app.shortcuts.action.toggleAIPanel.description": "Open the right AI data insights panel", + "app.shortcuts.action.toggleAIPanel.label": "Open AI Data Insights", + "app.shortcuts.action.toggleLogPanel.description": "Open or close the SQL execution log panel", + "app.shortcuts.action.toggleLogPanel.label": "Toggle Log Panel", + "app.shortcuts.action.toggleMacFullscreen.description": "Native fullscreen toggle in macOS native window control mode", + "app.shortcuts.action.toggleMacFullscreen.label": "Toggle Native Fullscreen", "app.shortcuts.action.toggleQueryResultsPanel.description": "Show or hide the results area below the query editor", "app.shortcuts.action.toggleQueryResultsPanel.label": "Toggle Results Panel", + "app.shortcuts.action.toggleTheme.description": "Switch between light and dark themes", + "app.shortcuts.action.toggleTheme.label": "Toggle Theme", + "app.shortcuts.capture_hint": "Press the shortcut after clicking \"Record\". Press Esc to cancel recording. Global shortcuts should include a modifier; AI chat send only supports Enter-related combinations, and Shift+Enter keeps inserting a new line.", + "app.shortcuts.capture_waiting": "Press a shortcut...", + "app.shortcuts.context.datagrid": "Data Grid", + "app.shortcuts.context.global": "Browser", + "app.shortcuts.context.monaco": "Editor", + "app.shortcuts.description": "View, record, and enable common global shortcuts in one place.", + "app.shortcuts.message.ai_send_limit": "AI chat send shortcut only supports Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter; Shift+Enter keeps inserting a new line", + "app.shortcuts.message.conflict": "Conflicts with \"{{action}}\". Choose another shortcut.", + "app.shortcuts.message.modifier_required": "Shortcut must include at least one of Ctrl / Alt / Shift / Meta", + "app.shortcuts.message.reserved_conflict_info": "Overrides the editor default shortcut \"{{labels}}\"", + "app.shortcuts.message.reserved_conflict_warning": "Conflicts with {{contexts}} \"{{labels}}\" and may not work", + "app.shortcuts.message.restored_defaults": "Default shortcuts restored", + "app.shortcuts.reserved.browser_close_tab": "Browser Close Tab", + "app.shortcuts.reserved.browser_new_incognito_window": "Browser New Incognito Window", + "app.shortcuts.reserved.browser_new_tab": "Browser New Tab", + "app.shortcuts.reserved.browser_new_window": "Browser New Window", + "app.shortcuts.reserved.browser_print": "Browser Print", + "app.shortcuts.reserved.browser_save": "Browser Save", + "app.shortcuts.reserved.datagrid_copy": "Data Grid Copy", + "app.shortcuts.reserved.editor_add_selection": "Editor Add Selection", + "app.shortcuts.reserved.editor_delete_line": "Editor Delete Line", + "app.shortcuts.reserved.editor_find": "Editor Find", + "app.shortcuts.reserved.editor_find_global": "Editor Global Find", + "app.shortcuts.reserved.editor_goto_line": "Editor Go to Line", + "app.shortcuts.reserved.editor_insert_line_after": "Editor Insert Line Below", + "app.shortcuts.reserved.editor_insert_line_before": "Editor Insert Line Above", + "app.shortcuts.reserved.editor_quick_open": "Editor Quick Open", + "app.shortcuts.reserved.editor_rename_symbol": "Editor Rename Symbol", + "app.shortcuts.reserved.editor_replace": "Editor Replace", + "app.shortcuts.title": "Shortcut Manager", + "app.sidebar.ai_assistant": "AI Assistant", + "app.sidebar.resize_width": "Drag to resize width", + "app.sidebar.settings": "Settings", + "app.sidebar.sql_execution_log": "SQL Execution Log", + "app.sidebar.tools": "Tools", + "app.startup_readiness.loading_local_config": "Loading local configuration...", + "app.startup_readiness.loading_security_config": "Loading security configuration...", + "app.theme.action.restore_defaults": "Restore Defaults", + "app.theme.appearance_settings_description": "Adjust scale, font size, transparency, and blur effects in one place.", + "app.theme.appearance_settings_title": "Appearance Settings", + "app.theme.appearance.blur_hint": "* Only controls blur for in-app overlay layers", + "app.theme.appearance.blur_title": "Gaussian Blur (Blur)", + "app.theme.appearance.enable_transparency_blur": "Enable Transparency and Blur", + "app.theme.appearance.enable_transparency_blur_hint": "When disabled, the current thresholds are retained and restored directly when re-enabled.", + "app.theme.appearance.font_size_title": "Base Font Size (Font Size)", + "app.theme.appearance.opacity_title": "Background Opacity (Opacity)", + "app.theme.appearance.transparency_blur_title": "Transparency and Blur Effects", + "app.theme.appearance.ui_scale_hint": "* Recommended for small screens: 85%-95%", + "app.theme.appearance.ui_scale_title": "UI Scale (UI Scale)", + "app.theme.appearance.windows_acrylic_hint": "Windows uses the system Acrylic effect. Blur intensity is controlled by the system.", + "app.theme.data_table.column_width_hint": "Standard mode defaults to 200px; compact mode defaults to 140px. Manually adjusted column widths are preserved first.", + "app.theme.data_table.column_width_mode": "Data Table Column Width Mode", + "app.theme.data_table.column_width_mode.compact": "Compact 140px", + "app.theme.data_table.column_width_mode.standard": "Standard 200px", + "app.theme.data_table.density": "Table Density", + "app.theme.data_table.density_hint": "Controls row height, column width, and padding. Comfortable is better for large-screen review; compact maximizes information density. Manually dragged column widths are preserved first.", + "app.theme.data_table.density.comfortable": "Comfortable", + "app.theme.data_table.density.compact": "Compact", + "app.theme.data_table.density.standard": "Standard", + "app.theme.data_table.follow_global": "Follow Global", + "app.theme.data_table.font_size": "Data Table Font Size", + "app.theme.data_table.sidebar_tree_font_size": "Sidebar Schema Tree Font Size", + "app.theme.data_table.title": "Data Table Display", + "app.theme.data_table.vertical_borders": "Show Data Table Vertical Separators", + "app.theme.data_table.vertical_borders_hint": "Only affects DataGrid on data table pages, not other table components.", "app.theme.font_family.default_mono_option": "Default code font", "app.theme.font_family.default_ui_option": "Default UI font", + "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux did not detect Chinese CJK fonts, so the interface may show missing glyph boxes. Install: ", + "app.theme.font_family.linux_cjk_install_suffix": ", then restart GoNavi.", + "app.theme.font_family.load_failed": "Failed to load system fonts", + "app.theme.font_family.load_failed_fallback": "Failed to load system fonts. Common font presets are being used: {{error}}", + "app.theme.font_family.loaded_ui_hint": "Read {{count}} font families from this system. Type to search and match. Clear the field to fall back to the default UI font.", + "app.theme.font_family.loading_ui_hint": "Loads installed fonts from the current system in real time. Type to search and match. Clear the field to fall back to the default UI font.", + "app.theme.font_family.mono_fallback_hint": "Common code font presets are being used. Applies to monospace content such as the SQL editor, AI code blocks, logs, DDL, and data tables.", + "app.theme.font_family.mono_hint": "Installed system fonts are shown first, with names close to Mono/Code/Console ranked earlier. Applies to monospace content such as the SQL editor, AI code blocks, logs, DDL, and data tables.", + "app.theme.font_family.mono_title": "Mono Font Family", + "app.theme.font_family.title": "Font Family", + "app.theme.font_family.ui_title": "UI Font Family", + "app.theme.mac_window.restart_hint": "* Custom top-right buttons are hidden; restart the app if the system window style does not refresh immediately", + "app.theme.mac_window.title": "macOS Window Controls", + "app.theme.mac_window.use_native_controls": "Use macOS Native Window Controls", + "app.theme.mac_window.use_native_controls_hint": "Shows the red/yellow/green buttons in the top-left and prioritizes native macOS fullscreen behavior.", + "app.theme.mode_title": "Theme Mode", + "app.theme.mode.dark.description": "Better for low-light environments with a calmer visual weight.", + "app.theme.mode.dark.label": "Dark Theme", + "app.theme.mode.light.description": "Better for bright environments with lighter visual hierarchy.", + "app.theme.mode.light.label": "Light Theme", + "app.theme.nav.appearance.description": "Scale, font, and transparency", + "app.theme.nav.appearance.title": "Appearance Parameters", + "app.theme.nav.theme.description": "Light and dark switching", + "app.theme.nav.theme.title": "Theme Mode", + "app.theme.navigation_title": "Settings Navigation", + "app.theme.startup_window.fullscreen": "Fullscreen on startup", + "app.theme.startup_window.fullscreen_windows": "Fullscreen on startup (Windows treats this as maximize)", + "app.theme.startup_window.hint": "* Takes effect on next startup", + "app.theme.startup_window.title": "Startup Window", + "app.theme.startup_window.windows_hint": "* On Windows this option is treated as \"maximize on startup\" and takes effect on next startup", + "app.theme.tab_display.action.move_down": "Move down", + "app.theme.tab_display.action.move_up": "Move up", + "app.theme.tab_display.badge.current": "Current", + "app.theme.tab_display.description": "Customize the display order for connection name, object type, object name, database, Schema, and Host/IP. In double-line mode, context can be placed on the secondary row.", + "app.theme.tab_display.element.connection.description": "Connection alias or environment name, for example DEV", + "app.theme.tab_display.element.connection.label": "Connection", + "app.theme.tab_display.element.database.description": "Current DB / catalog name", + "app.theme.tab_display.element.database.label": "Database", + "app.theme.tab_display.element.host.description": "Connection target address summary", + "app.theme.tab_display.element.host.label": "Host/IP", + "app.theme.tab_display.element.kind.description": "Type labels such as SQL / TABLE / VIEW", + "app.theme.tab_display.element.kind.label": "Object type", + "app.theme.tab_display.element.object.description": "Core names such as table, query, or resource names", + "app.theme.tab_display.element.object.label": "Object name", + "app.theme.tab_display.element.schema.description": "schema / owner prefix", + "app.theme.tab_display.element.schema.label": "Schema", + "app.theme.tab_display.layout.double": "Double line", + "app.theme.tab_display.layout.single": "Single line", + "app.theme.tab_display.preview.default_label": "Default label", + "app.theme.tab_display.preview.focused": "; selected {{label}}", + "app.theme.tab_display.preview.prefix": "Current preview: ", + "app.theme.tab_display.preview.secondary": ", secondary row {{labels}}", + "app.theme.tab_display.row.primary": "Primary row", + "app.theme.tab_display.row.secondary": "Secondary row", + "app.theme.tab_display.title": "Tab Label Display", + "app.theme.theme_settings_description": "Switch light and dark themes while keeping the overall visual style consistent.", + "app.theme.theme_settings_title": "Theme Settings", + "app.theme.ui_version.badge.new": "NEW", + "app.theme.ui_version.beta_warning": "The new UI is still in Beta, so some screens may look different from the old UI. You can switch back at any time if needed.", + "app.theme.ui_version.description": "Switch the overall appearance while keeping all features available. The new version uses a more compact information hierarchy and a more modern visual language.", + "app.theme.ui_version.legacy.badge": "Default", + "app.theme.ui_version.legacy.description": "The current stable interface with all features fully available.", + "app.theme.ui_version.legacy.label": "Old UI", + "app.theme.ui_version.platform_hint": "Windows, macOS, and Linux can all switch versions. Changes take effect immediately, and some modals use the new style the next time they open.", + "app.theme.ui_version.sidebar_search.command": "New Command Search", + "app.theme.ui_version.sidebar_search.filter": "Legacy Sidebar Filter", + "app.theme.ui_version.sidebar_search.hint": "New Command Search is better for jumping to connections, tables, and actions. Enable sync in the panel to keep filtering the left tree; Legacy Sidebar Filter shows the input directly and keeps the filter text.", + "app.theme.ui_version.sidebar_search.title": "New Left Sidebar Search Mode", + "app.theme.ui_version.title": "Interface Version", + "app.theme.ui_version.v2.badge": "Beta", + "app.theme.ui_version.v2.description": "A redesigned compact interface with stronger AI entry points and table overview.", + "app.theme.ui_version.v2.label": "New UI", + "app.tools.description": "Manage connection configuration, sync, drivers, and shortcuts.", + "app.tools.entry.data_compare.description": "Analyze inserted, updated, deleted, and unchanged rows by primary key.", + "app.tools.entry.data_compare.title": "Data Compare", + "app.tools.entry.data_root.description": "View, switch, or migrate the local data storage location.", + "app.tools.entry.data_root.title": "Data Directory", + "app.tools.entry.drivers.description": "Install, update, or remove database drivers.", + "app.tools.entry.drivers.title": "Driver Manager", + "app.tools.entry.export.description": "Export current connections and visible configuration fields.", + "app.tools.entry.export.title": "Export Connection Configuration", + "app.tools.entry.import.description": "Restore the connection list from a local file.", + "app.tools.entry.import.title": "Import Connection Configuration", + "app.tools.entry.schema_compare.description": "Compare structural differences between source and target tables, preview only without execution.", + "app.tools.entry.schema_compare.title": "Schema Compare", + "app.tools.entry.security_update.description": "View the security update status of saved configurations.", + "app.tools.entry.security_update.status_description": "Current status: {{status}}", + "app.tools.entry.security_update.title": "Security Update", + "app.tools.entry.shortcuts.description": "View and adjust global shortcut bindings.", + "app.tools.entry.shortcuts.title": "Shortcut Manager", + "app.tools.entry.snippets.description": "Manage SQL snippets and prefix completion.", + "app.tools.entry.snippets.title": "Snippet Management", + "app.tools.entry.sync.description": "Open the cross-source sync workflow.", + "app.tools.entry.sync.title": "Data Sync", + "app.tools.group.config.description": "Import/export, data root, and saved configuration maintenance.", + "app.tools.group.config.title": "Connections and Config", + "app.tools.group.workflow.description": "Compare structure, inspect differences, and start sync tasks.", + "app.tools.group.workflow.title": "Data Workflows", + "app.tools.group.workspace.description": "Drivers, code snippets, and global shortcuts.", + "app.tools.group.workspace.title": "Editor and Drivers", + "app.tools.title": "Tools Center", + "app.update.action.hide_to_background": "Hide to Background", + "app.update.action.install_update": "Install Update", + "app.update.action.open_install_directory": "Open Install Directory", + "app.update.backend.error.check_failed": "Check for updates failed: {{detail}}", + "app.update.backend.error.check_http_status": "Check for updates failed: HTTP {{status}}", + "app.update.backend.error.download_failed": "Update download failed: {{detail}}", + "app.update.backend.error.install_unsupported": "Update installation is not supported on this platform: {{platform}}", + "app.update.backend.error.latest_version_unparseable": "Unable to parse the latest version", + "app.update.backend.error.online_update_unsupported": "Online update is not supported on this platform: {{platform}}", + "app.update.backend.error.package_download_http_failed": "Failed to download update package: HTTP {{status}}", + "app.update.backend.error.package_file_busy": "Update download failed because the file is busy: {{detail}}", + "app.update.backend.error.release_version_unparseable": "Unable to parse release version", + "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS does not include the current platform update package", + "app.update.backend.error.sha256sums_download_failed": "Failed to download SHA256SUMS: HTTP {{status}}", + "app.update.backend.error.sha256sums_missing": "Release did not provide SHA256SUMS", + "app.update.backend.error.update_package_not_found": "Update package not found: {{name}}", + "app.update.backend.message.app_directory_unavailable": "Cannot access app directory: {{path}}", + "app.update.backend.message.app_directory_unresolved_download": "Cannot determine the current app directory, so the update cannot be downloaded", + "app.update.backend.message.check_first": "Check for updates first", + "app.update.backend.message.checksum_failed": "Update package checksum failed. Try again.", + "app.update.backend.message.checksum_missing": "Update package checksum is missing (SHA256SUMS)", + "app.update.backend.message.create_workspace_failed": "Cannot create update workspace directory in the app directory: {{path}}", + "app.update.backend.message.download_in_progress": "Update package is downloading. Try again later.", + "app.update.backend.message.install_launch_failed": "Failed to start update installer: {{detail}}", + "app.update.backend.message.install_launch_failed_with_log": "Failed to start update installer: {{detail}} (update log: {{path}})", + "app.update.backend.message.install_started": "Update installation has started", + "app.update.backend.message.install_started_with_log": "Update installation has started. Log path: {{path}}", + "app.update.backend.message.latest": "Already on the latest version", + "app.update.backend.message.no_downloaded_package": "No downloaded update package was found", + "app.update.backend.message.no_update_package": "No update package is available", + "app.update.backend.message.open_directory_failed": "Failed to open update directory: {{detail}}", + "app.update.backend.message.open_directory_unsupported": "Opening directories is not supported on this platform: {{platform}}", + "app.update.backend.message.opened_install_directory": "Opened install directory: {{path}}", + "app.update.backend.message.package_already_downloaded": "Update package is already downloaded", + "app.update.backend.message.package_directory_unavailable": "Update directory does not exist or is not accessible", + "app.update.backend.message.package_directory_unresolved": "Unable to resolve update directory", + "app.update.backend.message.package_downloaded": "Update package downloaded", + "app.update.backend.message.package_path_empty": "Update package path is empty", + "app.update.backend.message.update_found": "New version found: {{version}}", + "app.update.download_title": "Download Update", + "app.update.download_title_with_version": "Download Update {{version}}", + "app.update.message.check_failed": "Check for updates failed: {{error}}", + "app.update.message.download_completed": "Update download completed", + "app.update.message.download_completed_with_path": "Update download completed. Package path: {{path}}", + "app.update.message.download_failed": "Update download failed: {{error}}", + "app.update.message.install_failed": "Update installation failed: {{error}}", + "app.update.message.open_install_directory_failed": "Failed to open install directory: {{error}}", + "app.update.message.opened_install_directory": "Install directory opened. Please finish replacement manually.", + "app.update.message.package_ready": "Update package is ready ({{version}})", + "app.update.message.package_ready_with_path": "Update package is ready ({{version}}), path: {{path}}", + "app.update.message.update_found": "New version found: {{version}}", + "app.update.status.available_downloaded": "New version {{version}} found (downloaded; click \"Download Progress\" to install)", + "app.update.status.available_not_downloaded": "New version {{version}} found (not downloaded)", + "app.update.status.check_failed": "Check for updates failed: {{error}}", + "app.update.status.checking": "Checking for updates...", + "app.update.status.latest": "Already on the latest version ({{version}})", + "app.update.status.not_checked": "Not checked", + "app.window_zoom.message.fullscreen_exit_first": "Window zoom cannot be reset in fullscreen. Exit fullscreen first.", + "app.window_zoom.message.reset_failed": "Failed to reset window zoom", + "app.window_zoom.message.reset_success": "Window zoom reset", + "app.window_zoom.message.reset_success_fallback": "Window zoom reset (fallback)", + "app.window_zoom.message.windows_only": "This feature is only available on Windows", + "common.back_to_previous": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.confirm": "Confirm", + "common.continue": "Continue", + "common.delete": "Delete", + "common.edit": "Edit", + "common.error": "Error", + "common.loading": "Loading", + "common.named_item": "{{name}}", + "common.ok": "OK", + "common.refresh": "Refresh", + "common.save": "Save", + "common.search": "Search", + "common.success": "Success", + "common.unknown": "Unknown", + "common.warning": "Warning", + "connection_modal.action.browse": "Browse...", + "connection_modal.action.cancel": "Cancel", + "connection_modal.action.close": "Close", + "connection_modal.action.copy_uri": "Copy URI", + "connection_modal.action.disable": "Disable", + "connection_modal.action.discover_members": "Discover members", + "connection_modal.action.enable_and_prefer": "Enable and prefer", + "connection_modal.action.generate_uri": "Generate URI", + "connection_modal.action.open_driver_manager": "Open Driver Manager", + "connection_modal.action.parse_uri": "Parse URI", + "connection_modal.action.previous_step": "Previous", + "connection_modal.action.reset_default": "Reset default", + "connection_modal.action.save": "Save", + "connection_modal.action.test": "Test connection", + "connection_modal.action.view_reason": "View reason", + "connection_modal.appearance.color": "Color", + "connection_modal.appearance.current_icon": "Current icon: {{icon}}", + "connection_modal.appearance.custom_color": "Custom color", + "connection_modal.appearance.icon": "Icon", + "connection_modal.appearance.preview": "Preview", + "connection_modal.badge.current": "Current", + "connection_modal.badge.current_editing": "Editing", + "connection_modal.badge.preferred": "Preferred", + "connection_modal.config_section.connectionMode.description": "Configure standalone, primary/replica, cluster, or Replica Set mode.", + "connection_modal.config_section.connectionMode.title": "Connection mode", + "connection_modal.config_section.credentials.description": "Configure username, password, and saved credentials.", + "connection_modal.config_section.credentials.title": "Credentials", + "connection_modal.config_section.customDriver.description": "Configure the custom driver name.", + "connection_modal.config_section.customDriver.title": "Custom driver", + "connection_modal.config_section.customDsn.description": "Configure a driver-specific DSN.", + "connection_modal.config_section.customDsn.title": "Custom DSN", + "connection_modal.config_section.databaseScope.description": "Choose which databases are shown after connecting.", + "connection_modal.config_section.databaseScope.title": "Database scope", + "connection_modal.config_section.fileTarget.description": "Select a local database file.", + "connection_modal.config_section.fileTarget.title": "File database", + "connection_modal.config_section.identity.description": "Configure the connection name, icon, and basic identity.", + "connection_modal.config_section.identity.title": "Identity", + "connection_modal.config_section.jvmRuntime.description": "Configure JVM access modes and diagnostics.", + "connection_modal.config_section.jvmRuntime.title": "JVM runtime", + "connection_modal.config_section.mongoDiscovery.description": "Discover and manage MongoDB members.", + "connection_modal.config_section.mongoDiscovery.title": "MongoDB discovery", + "connection_modal.config_section.mongoPolicy.description": "Configure MongoDB authentication, readPreference, and save policy.", + "connection_modal.config_section.mongoPolicy.title": "MongoDB policy", + "connection_modal.config_section.replica.description": "Configure replica or additional nodes.", + "connection_modal.config_section.replica.title": "Replica nodes", + "connection_modal.config_section.service.description": "Configure service name, default database, and visible database scope.", + "connection_modal.config_section.service.title": "Service and database", + "connection_modal.config_section.target.description": "Configure the host, port, and connection target.", + "connection_modal.config_section.target.title": "Target address", + "connection_modal.config_section.uri.description": "Enter, generate, or parse a connection URI.", + "connection_modal.config_section.uri.title": "Connection URI", + "connection_modal.db_icon_label.custom": "Custom", + "connection_modal.db_type_hint.custom": "Connect with a custom driver and DSN.", + "connection_modal.db_type_hint.file": "Select a local SQLite or DuckDB database file.", + "connection_modal.db_type_hint.mongodb": "Connect to MongoDB standalone, Replica Set, or SRV addresses.", + "connection_modal.db_type_hint.redis": "Connect to Redis standalone or Redis Cluster.", + "connection_modal.db_type_hint.standard": "Enter host, port, authentication details, and an optional database.", + "connection_modal.db_type.custom": "Custom", + "connection_modal.driver.current": "Current", + "connection_modal.error.unknown": "Unknown error", + "connection_modal.error.unknown_exception": "Unknown error", + "connection_modal.field.additional_hosts": "Additional hosts", + "connection_modal.field.additional_srv_hosts_optional": "Additional SRV hosts (optional)", + "connection_modal.field.auth_source": "Authentication database (authSource)", + "connection_modal.field.clickHouseProtocol.auto": "Auto", + "connection_modal.field.cluster_additional_hosts": "Cluster additional hosts", + "connection_modal.field.connection_name": "Connection name", + "connection_modal.field.connection_timeout_seconds": "Connection timeout (seconds)", + "connection_modal.field.connection_timeout_seconds_ascii": "Connection timeout (seconds)", + "connection_modal.field.default_database_optional": "Default database (optional)", + "connection_modal.field.defaultDatabase.placeholder": "For example: appdb", + "connection_modal.field.display_databases_optional": "Display databases (optional)", + "connection_modal.field.driver_name": "Driver name", + "connection_modal.field.driver.placeholder": "For example: mysql, postgres", + "connection_modal.field.dsn": "DSN", + "connection_modal.field.dsn.placeholder": "For example: user:pass@tcp(localhost:3306)/dbname?charset=utf8", + "connection_modal.field.file_path_absolute": "File path (absolute path)", + "connection_modal.field.host": "Host", + "connection_modal.field.host_address": "Host address", + "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "If an Oracle tenant connection reports \"Error 1235\" or an OBClient handshake failure, use {{attributes}} in the \"Connection parameters\" field to override the OBClient capability injected by GoNavi by default.", + "connection_modal.field.oceanBaseProtocol.help.primary": "Choose MySQL for MySQL tenants and Oracle for Oracle tenants. GoNavi selects automatically by port: OB MySQL wire ports use OBClient capability injection (the same path as Navicat), while OBProxy Oracle listener ports use standard TNS.", + "connection_modal.field.oceanBaseProtocol.label": "OceanBase protocol", + "connection_modal.field.password": "Password", + "connection_modal.field.password_optional": "Password (optional)", + "connection_modal.field.port": "Port", + "connection_modal.field.port_plain": "Port", + "connection_modal.field.primary_port": "Primary port", + "connection_modal.field.private_key_path_optional": "Private key path (optional)", + "connection_modal.field.proxy_host": "Proxy host", + "connection_modal.field.proxy_password_optional": "Proxy password (optional)", + "connection_modal.field.proxy_type": "Proxy type", + "connection_modal.field.proxy_username_optional": "Proxy username (optional)", + "connection_modal.field.replica_hosts": "Replica host list", + "connection_modal.field.replica_password_optional": "Replica password (optional)", + "connection_modal.field.replica_set_optional": "Replica set (optional)", + "connection_modal.field.replica_set_password_optional": "Replica set password (optional)", + "connection_modal.field.replica_set_username_optional": "Replica set username (optional)", + "connection_modal.field.replica_username_optional": "Replica username (optional)", + "connection_modal.field.save_password": "Save password", + "connection_modal.field.service_name": "Service name", + "connection_modal.field.serviceName.placeholder": "For example: ORCLPDB1", + "connection_modal.field.ssh_host": "SSH host", + "connection_modal.field.ssh_password": "SSH password", + "connection_modal.field.ssh_user": "SSH user", + "connection_modal.field.ssl_cert_path": "SSL certificate path", + "connection_modal.field.ssl_key_path": "SSL key path", + "connection_modal.field.tunnel_host": "HTTP Tunnel host", + "connection_modal.field.tunnel_password_optional": "HTTP Tunnel password (optional)", + "connection_modal.field.tunnel_username_optional": "HTTP Tunnel username (optional)", + "connection_modal.field.uri": "URI", + "connection_modal.field.username": "Username", + "connection_modal.field.username.optional_placeholder": "Leave empty when authentication is disabled", + "connection_modal.group.chinese_databases": "Chinese databases", + "connection_modal.group.other": "Other", + "connection_modal.group.relational": "Relational databases", + "connection_modal.group.time_series": "Time-series databases", + "connection_modal.help.additional_hosts": "Optional MongoDB members, separated by comma, semicolon, or space.", + "connection_modal.help.additional_srv_hosts": "Optional additional SRV hosts for MongoDB discovery.", + "connection_modal.help.connection_timeout": "Applies to connection tests and metadata loading. Range: 1-300 seconds.", + "connection_modal.help.custom_driver": "Supported: mysql, postgres, sqlite, oracle, dm, kingbase. Aliases: postgresql/pgx, dm8, kingbase8/kingbasees/kingbasev8. Extending drivers through JDBC Jar is not currently supported.", + "connection_modal.help.default_database": "Leave empty to use the server default database.", + "connection_modal.help.oracle_service_name": "Oracle service name, for example ORCLPDB1.", + "connection_modal.help.private_key_path": "Use a private key for SSH authentication. Leave password empty if the key is not encrypted.", + "connection_modal.help.redis_cluster_hosts": "Additional Redis cluster nodes, separated by comma, semicolon, or space.", + "connection_modal.help.replica_hosts": "Replica host list in host:port format, separated by comma, semicolon, or space.", + "connection_modal.help.select_after_test": "Run a connection test first to load selectable databases.", + "connection_modal.help.uri": "Paste a full connection URI or generate one from the current form.", + "connection_modal.jvm.access_mode_description": "Choose which JVM access modes this connection can use and which one is preferred.", + "connection_modal.jvm.access_mode_title": "Access modes", + "connection_modal.jvm.agent_api_key_optional": "Agent API key (optional)", + "connection_modal.jvm.agent_description": "Connect through a GoNavi Agent when direct network access is restricted.", + "connection_modal.jvm.agent_help": "Base URL of the GoNavi Agent service.", + "connection_modal.jvm.agent_url": "Agent URL", + "connection_modal.jvm.diagnostic_api_key_optional": "Diagnostic API key (optional)", + "connection_modal.jvm.diagnostic_description": "Enable optional diagnostic commands for JVM troubleshooting.", + "connection_modal.jvm.diagnostic_disabled_hint": "Diagnostic enhancement is disabled. Enable it only when you need runtime troubleshooting.", + "connection_modal.jvm.diagnostic_timeout_seconds": "Diagnostic timeout (seconds)", + "connection_modal.jvm.diagnostic_title": "Diagnostic enhancement", + "connection_modal.jvm.diagnostic_transport": "Diagnostic transport", + "connection_modal.jvm.diagnostic.agent_bridge_description": "Use the GoNavi Agent Bridge diagnostic endpoint.", + "connection_modal.jvm.diagnostic.arthas_tunnel_description": "Use Arthas Tunnel to reach the target JVM.", + "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Base URL of the Arthas Tunnel server.", + "connection_modal.jvm.diagnostic.arthas_tunnel_url": "Arthas Tunnel URL", + "connection_modal.jvm.diagnostic.bridge_help": "Base URL of the GoNavi diagnostic bridge.", + "connection_modal.jvm.diagnostic.bridge_url": "Diagnostic bridge URL", + "connection_modal.jvm.diagnostic.mutating_commands": "Mutating commands", + "connection_modal.jvm.diagnostic.mutating_commands_description": "Allow commands that may change runtime state. Use only in controlled environments.", + "connection_modal.jvm.diagnostic.observe_commands": "Observe commands", + "connection_modal.jvm.diagnostic.observe_commands_description": "Allow read-only commands such as dashboard, thread, and JVM info.", + "connection_modal.jvm.diagnostic.target_agent_id": "Target Agent ID", + "connection_modal.jvm.diagnostic.target_agent_id_help": "Agent ID registered in Arthas Tunnel.", + "connection_modal.jvm.diagnostic.target_id": "Target ID", + "connection_modal.jvm.diagnostic.target_id_help": "Target identifier understood by the diagnostic bridge. Leave empty if the bridge selects the default target.", + "connection_modal.jvm.diagnostic.trace_commands": "Trace commands", + "connection_modal.jvm.diagnostic.trace_commands_description": "Allow tracing and watch commands that add runtime overhead.", + "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", + "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", + "connection_modal.jvm.endpoint_api_key_optional": "Endpoint API key (optional)", + "connection_modal.jvm.endpoint_description": "Connect to a service-provided Endpoint instead of direct JMX.", + "connection_modal.jvm.endpoint_help": "Base URL of the JVM management Endpoint.", + "connection_modal.jvm.endpoint_url": "Endpoint URL", + "connection_modal.jvm.environment": "Environment", + "connection_modal.jvm.environment.dev": "Development", + "connection_modal.jvm.environment.dev_description": "Lower risk test environment.", + "connection_modal.jvm.environment.prod": "Production", + "connection_modal.jvm.environment.prod_description": "Production environment; read-only first is recommended.", + "connection_modal.jvm.environment.uat": "UAT", + "connection_modal.jvm.environment.uat_description": "Pre-production validation environment.", + "connection_modal.jvm.jmx_description": "Connect through JMX using host, port, and optional credentials.", + "connection_modal.jvm.jmx_host_override_optional": "JMX host override (optional)", + "connection_modal.jvm.jmx_password_optional": "JMX password (optional)", + "connection_modal.jvm.jmx_port": "JMX port", + "connection_modal.jvm.jmx_username_optional": "JMX username (optional)", + "connection_modal.jvm.mode.agent_description": "Go through GoNavi Agent for environments behind firewalls or NAT.", + "connection_modal.jvm.mode.endpoint_description": "Use an HTTP Endpoint exposed by the target service.", + "connection_modal.jvm.mode.jmx_description": "Use standard JMX remote access.", + "connection_modal.jvm.preferred_mode_hint": "Current preferred mode: {{mode}}", + "connection_modal.jvm.read_only_first": "Prefer read-only operations", + "connection_modal.jvm.security_policy": "Security policy", + "connection_modal.jvm.target_description": "Configure the host, port, and access method for the JVM management endpoint.", + "connection_modal.jvm.target_title": "JVM target", + "connection_modal.layout.custom": "Custom driver connection", + "connection_modal.layout.file": "File database connection", + "connection_modal.layout.generic_sql": "Generic SQL connection", + "connection_modal.layout.jvm": "JVM runtime connection", + "connection_modal.layout.mongodb": "MongoDB connection", + "connection_modal.layout.mysql_compatible": "MySQL-compatible connection", + "connection_modal.layout.oracle": "Oracle connection", + "connection_modal.layout.postgres_compatible": "PostgreSQL-compatible connection", + "connection_modal.layout.redis": "Redis connection", "connection_modal.layoutKind.custom": "Custom driver", "connection_modal.layoutKind.file": "File databases", "connection_modal.layoutKind.genericSql": "Standard SQL", @@ -6846,18 +3062,1308 @@ "connection_modal.layoutKind.search": "Search engines", "connection_modal.layoutKind.timeseries": "Time-series databases", "connection_modal.layoutKind.vector": "Vector databases", + "connection_modal.message.connection_failed": "Connection failed", + "connection_modal.message.connection_params_incomplete": "Connection parameters are incomplete", + "connection_modal.message.connection_rejected": "Connection rejected", + "connection_modal.message.connection_success": "Connection succeeded", + "connection_modal.message.copy_failed": "Copy failed", + "connection_modal.message.current_driver_not_enabled": "The current driver is not installed or enabled", + "connection_modal.message.dameng_ssl_cert_required": "Dameng SSL requires certificate and private key paths", + "connection_modal.message.database_list_failed": "Failed to load database list: {{error}}", + "connection_modal.message.database_list_timeout": "Operation timed out after {{seconds}} seconds", + "connection_modal.message.driver_not_enabled": "Driver is not installed or enabled", + "connection_modal.message.driver_not_enabled_with_name": "{{name}} driver is not installed or enabled. Install or enable it in Driver Manager first.", + "connection_modal.message.driver_not_enabled_with_name_short": "{{name}} driver is not installed or enabled. Open Driver Manager first.", + "connection_modal.message.driver_unavailable_title": "{{name}} driver unavailable", + "connection_modal.message.http_tunnel_host_required": "Enter the HTTP Tunnel host", + "connection_modal.message.http_tunnel_port_invalid": "HTTP Tunnel port is invalid", + "connection_modal.message.member_discovery_failed": "Failed to discover MongoDB members", + "connection_modal.message.member_discovery_success": "Discovered {{count}} members", + "connection_modal.message.no_visible_databases": "No visible databases were returned", + "connection_modal.message.no_visible_schema": "No visible schema was returned", + "connection_modal.message.required_fields_before_test": "Fill in the required fields before testing", + "connection_modal.message.save_backend_unavailable": "Save is unavailable because the backend API is not ready", + "connection_modal.message.save_created_disconnected": "Configuration saved (not connected)", + "connection_modal.message.save_failed": "Failed to save connection", + "connection_modal.message.save_security_refresh_failed": "Configuration saved, but security metadata could not be refreshed", + "connection_modal.message.save_updated_disconnected": "Configuration saved (not connected)", + "connection_modal.message.select_database_file_failed": "Failed to select database file: {{error}}", + "connection_modal.message.select_ssh_key_failed": "Failed to select SSH private key: {{error}}", + "connection_modal.message.srv_with_ssh_dns_warning": "SRV with SSH Tunnel may depend on local DNS resolution. If resolution fails, use standard hosts.", + "connection_modal.message.test_failed_detail": "Test failed: {{detail}}", + "connection_modal.message.test_requires_new_mongo_replica_password": "Enter the new MongoDB Replica Set password before testing.", + "connection_modal.message.test_requires_new_mongodb_password": "Enter the new MongoDB password before testing.", + "connection_modal.message.test_requires_new_password": "Enter the new connection password before testing.", + "connection_modal.message.test_requires_new_proxy_password": "Enter the new proxy password before testing.", + "connection_modal.message.test_requires_new_replica_password": "Enter the new replica password before testing.", + "connection_modal.message.test_requires_new_ssh_password": "Enter the new SSH password before testing.", + "connection_modal.message.test_requires_new_tunnel_password": "Enter the new HTTP Tunnel password before testing.", + "connection_modal.message.test_timeout": "Operation timed out after {{seconds}} seconds", + "connection_modal.message.unsupported_jvm_diagnostic_transport": "The selected JVM diagnostic transport is not supported", + "connection_modal.message.unsupported_jvm_modes": "The selected JVM access mode is not supported", + "connection_modal.message.unsupported_jvm_modes_current": "This connection contains unsupported JVM access modes", + "connection_modal.message.unsupported_jvm_modes_detected": "Unsupported JVM access modes detected", + "connection_modal.message.uri_copied": "URI copied", + "connection_modal.message.uri_empty_copy": "No URI to copy", + "connection_modal.message.uri_generate_failed": "Failed to generate URI", + "connection_modal.message.uri_generated": "URI generated", + "connection_modal.message.uri_parse_failed": "Failed to parse URI", + "connection_modal.message.uri_parsed": "URI parsed into the form", + "connection_modal.message.uri_required": "Enter a URI first", + "connection_modal.message.uri_type_mismatch": "URI type does not match the selected data source", + "connection_modal.messageQueue.kafka.defaultTopic.help": "Specify a Topic in SQL when this is empty. After it is set, SHOW, CONSUME, or SELECT can preview data directly.", + "connection_modal.messageQueue.kafka.defaultTopic.label": "Default Topic (optional)", + "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "For example: orders.events", + "connection_modal.messageQueue.kafka.extraBrokers.help": "Enter multiple broker addresses in host:port format and press Enter to confirm.", + "connection_modal.messageQueue.kafka.extraBrokers.label": "Additional Broker addresses", + "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "For example: 10.10.0.12:9092, 10.10.0.13:9092", + "connection_modal.messageQueue.kafka.topology.cluster.description": "Configure multiple bootstrap brokers to improve discovery and failover success.", + "connection_modal.messageQueue.kafka.topology.single.description": "Configure one bootstrap broker for local or simple environments.", + "connection_modal.messageQueue.kafka.topology.single.label": "Single Broker", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "Specify a Topic in SQL when this is empty. After it is set, SHOW, CONSUME, or SELECT can preview data directly. Supports /, +, and #.", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "Default Topic / Filter (optional)", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "For example: devices/+/telemetry", + "connection_modal.messageQueue.mqtt.extraBrokers.help": "Enter multiple broker addresses in host:port format and press Enter to confirm.", + "connection_modal.messageQueue.mqtt.extraBrokers.label": "Additional Broker addresses", + "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "For example: 10.10.0.12:1883, 10.10.0.13:1883", + "connection_modal.messageQueue.mqtt.topology.cluster.description": "Configure multiple brokers to improve connection discovery and failover success.", + "connection_modal.messageQueue.mqtt.topology.single.description": "Configure one broker for local or simple environments.", + "connection_modal.messageQueue.mqtt.topology.single.label": "Single Broker", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "When empty, / is used by default. After it is set, the query editor uses the current vhost as the Queue browsing and test publishing context.", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "Default Virtual Host (optional)", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "For example: / or orders-vhost", + "connection_modal.messageQueue.rocketmq.defaultTopic.help": "Specify a Topic in SQL when this is empty. Connection parameters can still add groupId, namespace, tag, pullBatchSize, and startOffset.", + "connection_modal.messageQueue.rocketmq.defaultTopic.label": "Default Topic (optional)", + "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "For example: orders.events", + "connection_modal.messageQueue.rocketmq.extraNameServers.help": "Enter multiple NameServer addresses in host:port format and press Enter to confirm.", + "connection_modal.messageQueue.rocketmq.extraNameServers.label": "Additional NameServer addresses", + "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "For example: 10.10.0.12:9876, 10.10.0.13:9876", + "connection_modal.messageQueue.rocketmq.topology.cluster.description": "Configure multiple NameServers to improve route discovery and failover success.", + "connection_modal.messageQueue.rocketmq.topology.single.description": "Configure one NameServer for local or simple environments.", + "connection_modal.messageQueue.rocketmq.topology.single.label": "Single NameServer", + "connection_modal.messageQueue.topology.cluster.label": "Cluster mode", + "connection_modal.mongodb.auth_mechanism": "Authentication mechanism", + "connection_modal.mongodb.auth.auto": "Auto", + "connection_modal.mongodb.auth.auto_description": "Let the driver choose the authentication mechanism.", + "connection_modal.mongodb.auth.aws_iam_description": "Use AWS IAM authentication. Keep AWS IAM credentials in the runtime environment.", + "connection_modal.mongodb.auth.none": "No auth", + "connection_modal.mongodb.auth.none_description": "Connect without MongoDB authentication.", + "connection_modal.mongodb.auth.scram_sha1_description": "Use SCRAM-SHA-1 authentication.", + "connection_modal.mongodb.auth.scram_sha256_description": "Use SCRAM-SHA-256 authentication.", + "connection_modal.mongodb.discovery.current": "Current", + "connection_modal.mongodb.discovery.srv_ssh_warning": "When SRV and SSH tunnel are both enabled, local DNS resolution may be required.", + "connection_modal.mongodb.discovery.srv.description": "Use mongodb+srv and let DNS discover target nodes.", + "connection_modal.mongodb.discovery.srv.label": "SRV address", + "connection_modal.mongodb.discovery.standard.description": "Connect directly with host:port or use a replica set node list.", + "connection_modal.mongodb.discovery.standard.label": "Standard address", + "connection_modal.mongodb.members.health": "Health", + "connection_modal.mongodb.members.health.error": "Unhealthy", + "connection_modal.mongodb.members.health.ok": "Healthy", + "connection_modal.mongodb.members.role": "Role", + "connection_modal.mongodb.policy.auth_source.label": "Auth database (authSource)", + "connection_modal.mongodb.policy.auth_source.placeholder": "Defaults to database or admin", + "connection_modal.mongodb.read_preference": "readPreference", + "connection_modal.mongodb.read_preference.nearest": "Route reads to the nearest member.", + "connection_modal.mongodb.read_preference.primary": "Read only from the primary.", + "connection_modal.mongodb.read_preference.primary_preferred": "Prefer primary, fall back to secondaries.", + "connection_modal.mongodb.read_preference.secondary": "Read only from secondaries.", + "connection_modal.mongodb.read_preference.secondary_preferred": "Prefer secondaries, fall back to primary.", + "connection_modal.mongodb.replica.hosts.srv.help": "Enter multiple candidate host names in host format. Leave empty to use only the host above.", + "connection_modal.mongodb.replica.hosts.srv.label": "Additional SRV hosts (optional)", + "connection_modal.mongodb.replica.hosts.srv.placeholder": "For example: cluster-a.example.com, cluster-b.example.com", + "connection_modal.mongodb.replica.hosts.standard.help": "Enter multiple node addresses in host:port format and press Enter to confirm.", + "connection_modal.mongodb.replica.hosts.standard.label": "Additional node addresses", + "connection_modal.mongodb.replica.hosts.standard.placeholder": "For example: 10.10.0.12:27017, 10.10.0.13:27017", + "connection_modal.mongodb.replica.password.clear": "Clear saved replica set password", + "connection_modal.mongodb.replica.password.description": "A replica set password is currently saved. Leave this empty to keep it, or enter a new value to replace it.", + "connection_modal.mongodb.replica.password.label": "Replica set password (optional)", + "connection_modal.mongodb.replica.password.placeholder.empty": "Leave empty to reuse the primary password", + "connection_modal.mongodb.replica.password.placeholder.retained": "Saved replica set password", + "connection_modal.mongodb.replica.set.label": "Replica set name (optional)", + "connection_modal.mongodb.replica.set.placeholder": "For example: rs0", + "connection_modal.mongodb.replica.user.label": "Replica set username (optional)", + "connection_modal.mongodb.replica.user.placeholder": "Leave empty to reuse the primary username", + "connection_modal.mongodb.srv_address": "SRV address", + "connection_modal.mongodb.srv_address_description": "Use a MongoDB SRV record to discover hosts.", + "connection_modal.mongodb.standard_address": "Standard address", + "connection_modal.mongodb.standard_address_description": "Use host and port plus optional member list.", + "connection_modal.mongodb.topology.replica.label": "Replica set / multi-node", + "connection_modal.mongodb.topology.single.label": "Standalone mode", + "connection_modal.network.http_tunnel": "HTTP Tunnel", + "connection_modal.network.http_tunnel_description": "Forward database traffic through an HTTP Tunnel.", + "connection_modal.network.http_tunnel_disabled_hint": "Enable HTTP Tunnel to configure tunnel host, port, and credentials.", + "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel cannot be used together with SSH Tunnel or proxy.", + "connection_modal.network.http_tunnel_panel_description": "Configure an HTTP Tunnel gateway for this connection.", + "connection_modal.network.proxy": "Proxy", + "connection_modal.network.proxy_disabled_hint": "Enable proxy to route this connection through SOCKS5 or HTTP CONNECT.", + "connection_modal.network.proxy_panel_description": "Configure per-connection proxy settings.", + "connection_modal.network.proxy_type.http_description": "Use HTTP CONNECT proxying.", + "connection_modal.network.proxy_type.socks5_description": "Use SOCKS5 proxying.", + "connection_modal.network.ssh_disabled_hint": "Enable SSH Tunnel to connect through a bastion host.", + "connection_modal.network.ssh_panel_description": "Configure SSH Tunnel host, credentials, and optional private key.", + "connection_modal.network.ssh_tunnel": "SSH Tunnel", + "connection_modal.network.ssh_tunnel_description": "Connect through an SSH Tunnel before reaching the database.", + "connection_modal.network.ssl_description": "Encrypt the database connection with SSL/TLS.", + "connection_modal.network.ssl_disabled_hint": "Enable SSL/TLS to configure certificate policy.", + "connection_modal.network.ssl_mode": "SSL mode", + "connection_modal.network.ssl_mode.preferred": "Preferred", + "connection_modal.network.ssl_mode.preferred_description": "Try SSL first and fall back if the server does not require it.", + "connection_modal.network.ssl_mode.required": "Required", + "connection_modal.network.ssl_mode.required_description": "Require SSL and fail if encrypted connection cannot be established.", + "connection_modal.network.ssl_mode.skip_verify": "Skip Verify", + "connection_modal.network.ssl_mode.skip_verify_description": "Use SSL but skip certificate verification. Use only for testing or self-signed certificates.", + "connection_modal.network.ssl_panel_description": "Configure SSL/TLS policy for this connection.", + "connection_modal.network.ssl_tls": "SSL/TLS", + "connection_modal.placeholder.absolute_path": "/absolute/path/to/file", + "connection_modal.placeholder.agent_api_key": "Optional Agent API key", + "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", + "connection_modal.placeholder.connection_name": "Connection name", + "connection_modal.placeholder.connection_name_fallback": "Connection name", + "connection_modal.placeholder.custom_dsn_example": "Example: driver-specific DSN", + "connection_modal.placeholder.default_database_or_admin": "default database or admin", + "connection_modal.placeholder.diagnostic_api_key": "Optional diagnostic API key", + "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", + "connection_modal.placeholder.diagnostic_target_id": "Target ID", + "connection_modal.placeholder.driver_name": "Driver name", + "connection_modal.placeholder.empty_without_auth": "Leave empty for no authentication", + "connection_modal.placeholder.endpoint_api_key": "Optional Endpoint API key", + "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", + "connection_modal.placeholder.example_appdb": "appdb", + "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", + "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", + "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", + "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", + "connection_modal.placeholder.example_rs0": "rs0", + "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", + "connection_modal.placeholder.jvm_name": "JVM connection name", + "connection_modal.placeholder.no_auth": "No authentication", + "connection_modal.placeholder.proxy_host": "127.0.0.1", + "connection_modal.placeholder.redis_password": "Redis password", + "connection_modal.placeholder.select_databases": "Select databases to display", + "connection_modal.placeholder.select_redis_databases": "Select Redis databases to display", + "connection_modal.placeholder.ssh_host": "bastion.example.com", + "connection_modal.placeholder.ssl_cert_path": "/absolute/path/client.crt", + "connection_modal.placeholder.ssl_key_path": "/absolute/path/client.key", + "connection_modal.placeholder.tunnel_host": "tunnel.example.com", + "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", + "connection_modal.placeholder.use_primary_host": "Use primary host", + "connection_modal.placeholder.use_primary_password": "Use primary password", + "connection_modal.placeholder.use_primary_password_short": "Use primary password", + "connection_modal.placeholder.use_primary_port": "Use primary port", + "connection_modal.placeholder.use_primary_username": "Use primary username", + "connection_modal.placeholder.use_primary_username_short": "Use primary username", + "connection_modal.redis.credentials.primary.label": "Password (optional)", + "connection_modal.redis.credentials.primary.placeholder.empty": "Redis password if requirepass is set", + "connection_modal.redis.credentials.primary.placeholder.retained": "Saved Redis password", + "connection_modal.redis.credentials.sentinelPassword.clear": "Clear saved Sentinel password", + "connection_modal.redis.credentials.sentinelPassword.description": "A Sentinel password is currently saved. Leave this empty to keep it, or enter a new value to replace it.", + "connection_modal.redis.credentials.sentinelPassword.label": "Sentinel password (optional)", + "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Sentinel authentication password. Leave empty to send none.", + "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "Saved Sentinel password", + "connection_modal.redis.credentials.sentinelUser.label": "Sentinel username (optional)", + "connection_modal.redis.credentials.sentinelUser.placeholder": "Leave empty when Sentinel does not use an ACL username", + "connection_modal.redis.databaseScope.help": "Selectable after the connection test succeeds", + "connection_modal.redis.databaseScope.label": "Databases to show (empty shows all)", + "connection_modal.redis.databaseScope.placeholder": "Select databases to show", + "connection_modal.redis.hosts.cluster.help": "The host above is used as the primary node. Enter other seed nodes here in host:port format.", + "connection_modal.redis.hosts.cluster.label": "Additional cluster node addresses", + "connection_modal.redis.hosts.cluster.placeholder": "For example: 10.10.0.12:6379, 10.10.0.13:6379", + "connection_modal.redis.hosts.sentinel.help": "The host above is used as the first Sentinel. Enter other Sentinel nodes here in host:port format.", + "connection_modal.redis.hosts.sentinel.label": "Additional Sentinel node addresses", + "connection_modal.redis.hosts.sentinel.placeholder": "For example: 10.10.0.12:26379, 10.10.0.13:26379", + "connection_modal.redis.sentinel.master.help": "Enter the monitor name from the Sentinel configuration, for example mymaster.", + "connection_modal.redis.sentinel.master.label": "Sentinel master name", + "connection_modal.redis.sentinel.master.placeholder": "For example: mymaster", + "connection_modal.redis.sentinel.master.required": "Enter the Sentinel master name", + "connection_modal.redis.topology.cluster.description": "Redis Cluster with multiple seed nodes.", + "connection_modal.redis.topology.cluster.label": "Cluster mode", + "connection_modal.redis.topology.sentinel.description": "Discover the primary node through Sentinel for primary-replica high availability.", + "connection_modal.redis.topology.sentinel.label": "Sentinel mode", + "connection_modal.redis.topology.single.description": "Connect to one Redis node.", + "connection_modal.redis.topology.single.label": "Standalone mode", + "connection_modal.secret.blocking.redis_sentinel": "Enter a new Sentinel password before testing, or cancel clearing the saved Sentinel password", + "connection_modal.secret.clear_saved_dsn": "Clear saved DSN", + "connection_modal.secret.clear_saved_mongo_replica_password": "Clear saved MongoDB replica password", + "connection_modal.secret.clear_saved_password": "Clear saved password", + "connection_modal.secret.clear_saved_proxy_password": "Clear saved proxy password", + "connection_modal.secret.clear_saved_replica_password": "Clear saved replica password", + "connection_modal.secret.clear_saved_ssh_password": "Clear saved SSH password", + "connection_modal.secret.clear_saved_tunnel_password": "Clear saved HTTP Tunnel password", + "connection_modal.secret.clear_saved_uri": "Clear saved URI", "connection_modal.secret.error.saved_connection_deleted": "The saved connection was not found. It may have been deleted. Refresh and try again.", + "connection_modal.secret.error.saved_connection_missing": "The saved secret for the current connection was not found. Re-enter the password, save, and try again.", + "connection_modal.secret.error.store_unavailable": "Secure secret storage is currently unavailable. Check the system keychain or credential manager, then try again.", + "connection_modal.secret.new_value_replaces_saved": "New value will replace the saved secret.", + "connection_modal.secret.saved_dsn_description": "A DSN is already stored securely. Leave this empty to keep using it.", + "connection_modal.secret.saved_mongo_replica_password": "Saved MongoDB replica password", + "connection_modal.secret.saved_mongo_replica_password_description": "A MongoDB replica password is already saved in secure storage. Leave this field empty to keep it.", + "connection_modal.secret.saved_password": "Saved password", + "connection_modal.secret.saved_placeholder": "•••••• (leave empty to keep using {{label}})", + "connection_modal.secret.saved_primary_password_description": "A primary connection password is already saved in secure storage. Leave this field empty to keep it.", + "connection_modal.secret.saved_proxy_password": "Saved proxy password", + "connection_modal.secret.saved_proxy_password_description": "A proxy password is already saved in secure storage. Leave this field empty to keep it.", + "connection_modal.secret.saved_redis_password": "Saved Redis password", + "connection_modal.secret.saved_redis_password_description": "A Redis password is already saved in secure storage. Leave this field empty to keep it.", + "connection_modal.secret.saved_replica_password": "Saved replica password", + "connection_modal.secret.saved_replica_password_description": "A replica password is already saved in secure storage. Leave this field empty to keep it.", + "connection_modal.secret.saved_ssh_password": "Saved SSH password", + "connection_modal.secret.saved_ssh_password_description": "An SSH password is already saved in secure storage. Leave this field empty to keep it.", + "connection_modal.secret.saved_tunnel_password": "Saved HTTP Tunnel password", + "connection_modal.secret.saved_tunnel_password_description": "An HTTP Tunnel password is already saved in secure storage. Leave this field empty to keep it.", + "connection_modal.secret.saved_uri_description": "A connection URI is already stored securely. Leave this empty to keep using it.", + "connection_modal.section.advanced_connection": "Advanced connection", + "connection_modal.section.appearance.description": "Set the icon and color shown for this connection in the sidebar.", + "connection_modal.section.appearance.title": "Appearance", + "connection_modal.section.basic.description": "Name the connection and enter the target, driver, and authentication details.", + "connection_modal.section.basic.jvm_description": "Configure the JVM target, access modes, and credentials.", + "connection_modal.section.basic.sql_description": "Configure the target, driver, credentials, and database scope.", + "connection_modal.section.basic.title": "Basic information", + "connection_modal.section.config_sections": "Configuration sections", + "connection_modal.section.network.description": "Configure SSL/TLS, SSH Tunnel, proxy, and HTTP Tunnel options.", + "connection_modal.section.network.nav_description": "Configure network and security options for this connection.", + "connection_modal.section.network.title": "Network and security", + "connection_modal.ssl_hint.dameng": "Choose the SSL/TLS mode required by the database security policy.", + "connection_modal.ssl_hint.default": "Choose the SSL/TLS mode required by the database security policy.", + "connection_modal.ssl_hint.mongodb": "Choose the SSL/TLS mode required by the database security policy.", + "connection_modal.ssl_hint.mysql_like": "Choose the SSL/TLS mode required by the database security policy.", + "connection_modal.ssl_hint.sqlserver": "Choose the SSL/TLS mode required by the database security policy.", + "connection_modal.status.disabled": "Disabled", + "connection_modal.status.enabled": "Enabled", + "connection_modal.status.healthy": "Healthy", + "connection_modal.status.unhealthy": "Unhealthy", + "connection_modal.step.select_source": "Select data source", + "connection_modal.step.select_source_description": "Choose the connection type to create.", + "connection_modal.step1.group.domestic": "Domestic databases", "connection_modal.step1.group.message_queue": "Message queues", + "connection_modal.step1.group.nosql": "NoSQL databases", + "connection_modal.step1.group.other": "Other", + "connection_modal.step1.group.relational": "Relational databases", + "connection_modal.step1.group.timeseries": "Time-series databases", "connection_modal.step1.group.vector": "Vector databases", "connection_modal.step1.hint.chroma": "Collection browsing, vector retrieval, and metadata filtering", + "connection_modal.step1.hint.custom": "Custom driver and DSN", "connection_modal.step1.hint.elasticsearch": "Index browsing, Mapping inspection, JSON DSL, and query_string queries", + "connection_modal.step1.hint.file": "Local file connection", "connection_modal.step1.hint.goldendb": "MySQL compatible / distributed transactions", + "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", + "connection_modal.step1.hint.mongodb": "Single node / replica set", + "connection_modal.step1.hint.oceanBase": "MySQL / Oracle tenant", "connection_modal.step1.hint.qdrant": "Collection browsing, vector search, and Payload filtering", + "connection_modal.step1.hint.redis": "Single node / cluster", + "connection_modal.step1.hint.standard": "Standard connection configuration", + "connection_modal.switch.off": "Off", + "connection_modal.switch.on": "On", + "connection_modal.table.health": "Health", + "connection_modal.table.role": "Role", + "connection_modal.test_error.description": "View the full error returned by the backend.", + "connection_modal.test_error.empty": "No error details", + "connection_modal.test_error.title": "Connection test failure details", + "connection_modal.test.redis_database_list_failure": "Connected, but failed to load the Redis database list: {{detail}}", + "connection_modal.test.redis_database_list_timeout": "Connected, but loading the Redis database list timed out (>{{seconds}} seconds)", + "connection_modal.title.create": "New {{type}} connection", + "connection_modal.title.create_description": "Enter and save the connection configuration.", + "connection_modal.title.edit": "Edit connection", + "connection_modal.title.edit_description": "Edit the {{type}} connection configuration.", + "connection_modal.title.select_type": "Select data source type", + "connection_modal.title.select_type_description": "Choose one of the supported data source types.", + "connection_modal.topology.cluster": "Cluster", + "connection_modal.topology.mongodb_replica": "Replica set", + "connection_modal.topology.mongodb_replica_description": "Connect to a MongoDB replica set and optionally discover members.", + "connection_modal.topology.mongodb_single_description": "Connect to one MongoDB host.", + "connection_modal.topology.mysql_replica_description": "Use a primary connection plus optional replica hosts.", + "connection_modal.topology.mysql_single_description": "Connect to a single MySQL-compatible node.", + "connection_modal.topology.primary_replica": "Primary/replica", + "connection_modal.topology.redis_cluster_description": "Connect to a Redis Cluster and list additional nodes.", + "connection_modal.topology.redis_single_description": "Connect to a single Redis node.", + "connection_modal.topology.single": "Single node", + "connection_modal.validation.address_or_path_required": "Enter a host address or file path", + "connection_modal.validation.agent_url_required": "Enter the Agent URL", + "connection_modal.validation.arthas_tunnel_url_required": "Enter the Arthas Tunnel URL", + "connection_modal.validation.custom_dsn_required": "Enter the connection string", + "connection_modal.validation.custom_dsn_required_when_clearing_saved": "Enter a new connection string, or cancel clearing the saved DSN", + "connection_modal.validation.dameng_ssl_cert_path_required": "Enter the Dameng SSL certificate path", + "connection_modal.validation.dameng_ssl_key_path_required": "Enter the Dameng SSL key path", + "connection_modal.validation.diagnostic_bridge_url_required": "Enter the diagnostic bridge URL", + "connection_modal.validation.diagnostic_target_required": "Enter the diagnostic target", + "connection_modal.validation.diagnostic_timeout_range_1_300": "Diagnostic timeout must be between 1 and 300 seconds", + "connection_modal.validation.driver_name_required": "This field is required", + "connection_modal.validation.endpoint_url_required": "Enter the Endpoint URL", + "connection_modal.validation.jvm_access_mode_required": "Select at least one JVM access mode", + "connection_modal.validation.jvm_host_required": "This field is required", + "connection_modal.validation.jvm_port_required": "This field is required", + "connection_modal.validation.jvm_preferred_mode_required": "Select a preferred JVM access mode", + "connection_modal.validation.oracle_service_required": "Enter the Oracle service name", + "connection_modal.validation.port_required": "Enter the port", + "connection_modal.validation.proxy_host_required": "Enter the proxy host", + "connection_modal.validation.proxy_port_required": "Enter the proxy port", + "connection_modal.validation.ssh_host_required": "Enter the SSH host", + "connection_modal.validation.ssh_port_required": "Enter the SSH port", + "connection_modal.validation.ssh_user_required": "Enter the SSH user", + "connection_modal.validation.timeout_range_1_300": "Timeout must be between 1 and 300 seconds", + "connection_modal.validation.tunnel_host_required": "Enter the HTTP Tunnel host", + "connection_modal.validation.tunnel_port_required": "Enter the HTTP Tunnel port", + "connection_modal.validation.username_required": "Enter the username", + "connection.copy_suffix": " - Copy", + "connection.delete": "Delete Connection", + "connection.edit": "Edit Connection", + "connection.new": "New Connection", "connection.oceanbase.error.unsupported_protocol": "OceanBase only supports MySQL/Oracle tenant protocols; \"{{value}}\" is not supported. Switch to MySQL or Oracle.", + "connection.sidebar.delete.backendUnavailable": "Failed to delete connection: backend interface unavailable", + "connection.sidebar.delete.confirmContent": "Are you sure you want to delete connection \"{{name}}\"?", + "connection.sidebar.delete.confirmTitle": "Confirm deletion", + "connection.sidebar.delete.failureFallback": "Failed to delete connection", + "connection.sidebar.delete.success": "Connection deleted", + "connection.sidebar.disconnect.success": "Disconnected", + "connection.sidebar.duplicate.backendUnavailable": "Failed to copy connection: backend interface unavailable", + "connection.sidebar.duplicate.failureFallback": "Failed to copy connection", + "connection.sidebar.duplicate.noResult": "Failed to copy connection: backend returned no result", + "connection.sidebar.duplicate.success": "Connection copied: {{name}}", + "connection.sidebar.group.badge": "GROUP", + "connection.sidebar.group.collapseAria": "Collapse connection group {{name}}", + "connection.sidebar.group.delete": "Delete group", + "connection.sidebar.group.deleteConfirmContent": "Delete group \"{{name}}\"? Connections inside it will not be removed.", + "connection.sidebar.group.deleteConfirmTitle": "Confirm deletion", + "connection.sidebar.group.edit": "Edit group", + "connection.sidebar.group.expandAria": "Expand connection group {{name}}", + "connection.sidebar.group.meta": "{{count}} connections · Connection group", + "connection.sidebar.group.untitled": "Untitled group", + "connection.sidebar.menu.copy": "Copy connection", + "connection.sidebar.menu.createDatabase": "New database", + "connection.sidebar.menu.current": "Current", + "connection.sidebar.menu.delete": "Delete connection", + "connection.sidebar.menu.disconnect": "Disconnect", + "connection.sidebar.menu.groupSection": "Connection groups", + "connection.sidebar.menu.hostBadge": "HOST", + "connection.sidebar.menu.hostFallback": "Address not configured", + "connection.sidebar.menu.moveOutTag": "Remove from tag", + "connection.sidebar.menu.moveToTag": "Move to tag", + "connection.sidebar.menu.moveToUngrouped": "Remove from group", + "connection.sidebar.menu.refresh": "Refresh connection", + "connection.sidebar.menu.section": "Connection", + "connection.test": "Test Connection", + "connection.unnamed": "Unnamed Connection", + "data_grid.action.apply": "Apply", + "data_grid.ai_insight.prompt": "Please analyze the following query result data (first {{count}} sample rows):\n```json\n{{json}}\n```\n\nAnalyze data characteristics, find patterns, or provide business insights.", + "data_grid.ai_prompt.analyze_page": "Please analyze the following query result data (first {{count}} sample rows):\n```json\n{{json}}\n```\n\nPlease analyze data characteristics, find patterns, or provide business insights.", "data_grid.aria.row_number": "Row number", + "data_grid.batch_fill.set_null": "Set to NULL", + "data_grid.batch_fill.title": "Batch fill ({{count}} cells)", + "data_grid.batch_fill.value_placeholder": "Enter the value to fill", + "data_grid.cell_editor.now": "Now", + "data_grid.cell_editor.title": "Edit cell", + "data_grid.cell_editor.title_with_column": "Edit cell: {{column}}", + "data_grid.column_quick_find.placeholder": "Jump to column...", + "data_grid.column_quick_find.tooltip": "Type a column name, then press Enter or the locate button to jump to that column", + "data_grid.column_settings.column_visibility": "Column visibility", + "data_grid.column_settings.display_settings": "Display settings", + "data_grid.column_settings.field_info": "Field info", + "data_grid.column_settings.hide_all": "Hide all", + "data_grid.column_settings.remember_column_order": "Remember custom column order", + "data_grid.column_settings.remember_hidden_columns": "Remember hidden column settings", + "data_grid.column_settings.reset_hidden": "Reset hidden", + "data_grid.column_settings.reset_hidden_success": "All columns are visible again", + "data_grid.column_settings.reset_order": "Reset order", + "data_grid.column_settings.reset_order_success": "Default column order restored", + "data_grid.column_settings.search_columns_placeholder": "Search column names...", + "data_grid.column_settings.show_all": "Show all", + "data_grid.column_settings.show_comments": "Show column comments in header", + "data_grid.column_settings.show_types": "Show column types in header", + "data_grid.column.comment_tooltip": "Comment: {{comment}}", + "data_grid.column.drag_tooltip": "Drag to reorder columns", + "data_grid.column.foreign_key_jump_title": "Open foreign key table: {{tableName}}", + "data_grid.column.foreign_key_tooltip": "Foreign key: {{target}}", + "data_grid.column.resize_tooltip": "Drag to resize column, double-click to auto fit", + "data_grid.column.type_tooltip": "Type: {{type}}", + "data_grid.context_menu.auto_fit_column": "Auto-fit column width to content", + "data_grid.context_menu.clear_column_sort": "Clear sort for this field", + "data_grid.context_menu.column_display_section": "Field display", + "data_grid.context_menu.column_no_comment": "No comment", + "data_grid.context_menu.column_unknown_type": "Unknown type", + "data_grid.context_menu.column_unnamed_field": "Unnamed field", + "data_grid.context_menu.copy_as_csv": "Copy as CSV", + "data_grid.context_menu.copy_as_delete": "Copy as DELETE", + "data_grid.context_menu.copy_as_insert": "Copy as INSERT", + "data_grid.context_menu.copy_as_json": "Copy as JSON", + "data_grid.context_menu.copy_as_markdown": "Copy as Markdown", + "data_grid.context_menu.copy_as_update": "Copy as UPDATE", + "data_grid.context_menu.copy_column_data": "Copy column data", + "data_grid.context_menu.copy_field_name": "Copy field name", + "data_grid.context_menu.copy_row_as_new": "Copy this row as a new row", + "data_grid.context_menu.copy_row_data": "Copy row data", + "data_grid.context_menu.current_cell": "Current cell", + "data_grid.context_menu.current_marker": "Current", + "data_grid.context_menu.current_row": "Current row", + "data_grid.context_menu.edit_row": "Edit this row", + "data_grid.context_menu.edit_section": "Edit", + "data_grid.context_menu.export_as_csv": "Export as CSV", + "data_grid.context_menu.export_as_excel": "Export as Excel", + "data_grid.context_menu.export_as_html": "Export as HTML", + "data_grid.context_menu.export_as_json": "Export as JSON", + "data_grid.context_menu.export_selected": "Export selected data", + "data_grid.context_menu.fill_to_selected_rows": "Fill to selected rows ({{count}})", + "data_grid.context_menu.hide_column": "Hide this field", + "data_grid.context_menu.hide_column_comment": "Hide field comment", + "data_grid.context_menu.hide_column_type": "Hide field type", + "data_grid.context_menu.paste_copied_columns": "Paste copied columns (same names)", + "data_grid.context_menu.paste_row_as_new": "Paste as new row", + "data_grid.context_menu.paste_row_as_new_count": "Paste as new row ({{count}})", + "data_grid.context_menu.show_column_comment": "Show field comment", + "data_grid.context_menu.show_column_type": "Show field type", + "data_grid.context_menu.sort_ascending": "Sort ascending", + "data_grid.context_menu.sort_descending": "Sort descending", + "data_grid.context_menu.sort_section": "Sort", + "data_grid.context_menu.undo_cell_change": "Undo this cell change", + "data_grid.copy_sql.error.missing_safe_where": "The current result set lacks a primary key or unique key that can safely locate the row, and it does not cover every table column, so a WHERE condition cannot be generated.", + "data_grid.copy_sql.error.missing_table_name": "The current result set is not associated with a clear table name, so {{mode}} SQL cannot be generated.", + "data_grid.copy_sql.error.no_copyable_fields": "The current result set has no copyable fields, so SQL cannot be generated.", + "data_grid.data_panel.click_cell_description": "Click a cell in the table to preview full data", + "data_grid.data_panel.click_cell_title": "Click a cell to view data", + "data_grid.data_panel.title": "Data preview", + "data_grid.datetime_picker.now": "Now", + "data_grid.ddl.copy": "Copy DDL", + "data_grid.ddl.layout_bottom": "Bottom", + "data_grid.ddl.layout_side": "Side", + "data_grid.ddl.loading": "Loading DDL...", + "data_grid.ddl.reload": "Reload", + "data_grid.ddl.sidebar_aria": "Table DDL sidebar", + "data_grid.ddl.view": "View DDL", + "data_grid.embedded_designer.title": "Design table ({{tableName}})", + "data_grid.error_boundary.description": "An error occurred while rendering the data grid. The data format may be invalid.", + "data_grid.error_boundary.retry": "Retry", + "data_grid.error_boundary.title": "Render error", + "data_grid.export.all_data": "Export all data", + "data_grid.export.all_rows": "Export all rows ({{count}} rows)", + "data_grid.export.all_rows_requery": "Export all (rerun query)", + "data_grid.export.current_page": "Export current page ({{count}} rows)", + "data_grid.export.current_page_rows": "Export current page ({{count}} rows)", + "data_grid.export.group_filtered_results": "Filtered results", + "data_grid.export.group_full_table": "Full table", + "data_grid.export.no_selection_prompt": "No rows are selected. Choose an export scope:", + "data_grid.export.options_title": "Export options", + "data_grid.export.query_result_title": "Export query results", + "data_grid.export.scope_prompt": "Choose export scope:", + "data_grid.export.selected_rows": "Export selected rows ({{count}} rows)", + "data_grid.filter.add_condition": "Add condition", + "data_grid.filter.add_sort": "Add sort", + "data_grid.filter.apply": "Apply", + "data_grid.filter.apply_where": "Apply WHERE", + "data_grid.filter.clear": "Clear", + "data_grid.filter.custom_where_placeholder": "Enter a custom WHERE expression (without WHERE), for example: status IN ('A','B')", + "data_grid.filter.disable_all": "Disable all", + "data_grid.filter.enable_all": "Enable all", + "data_grid.filter.enabled": "Enabled", + "data_grid.filter.end_value_placeholder": "End value", + "data_grid.filter.first_condition": "First", + "data_grid.filter.invalid_quick_where": "WHERE condition cannot contain semicolons or SQL comments", + "data_grid.filter.list_values_placeholder": "Separate multiple values with commas or line breaks", + "data_grid.filter.logic.and": "And (AND)", + "data_grid.filter.logic.or": "Or (OR)", + "data_grid.filter.mongodb_query_placeholder": "Enter a MongoDB JSON query object, for example {\"status\":\"A\"}", + "data_grid.filter.no_value_placeholder": "No value required", + "data_grid.filter.op.between": "Between", + "data_grid.filter.op.contains": "Contains", + "data_grid.filter.op.custom": "[Custom]", + "data_grid.filter.op.ends_with": "Ends with", + "data_grid.filter.op.in_list": "In list", + "data_grid.filter.op.is_empty": "Is empty", + "data_grid.filter.op.is_not_empty": "Is not empty", + "data_grid.filter.op.is_not_null": "Is not NULL", + "data_grid.filter.op.is_null": "Is NULL", + "data_grid.filter.op.not_between": "Not between", + "data_grid.filter.op.not_contains": "Does not contain", + "data_grid.filter.op.not_ends_with": "Does not end with", + "data_grid.filter.op.not_in_list": "Not in list", + "data_grid.filter.op.not_starts_with": "Does not start with", + "data_grid.filter.op.starts_with": "Starts with", + "data_grid.filter.quick_where_placeholder": "Enter the condition after WHERE, for example status = 1 AND name LIKE 'A%'", + "data_grid.filter.search_field_placeholder": "Search field names", + "data_grid.filter.select_sort_field_placeholder": "Select sort field", + "data_grid.filter.sort_asc": "Ascending", + "data_grid.filter.sort_desc": "Descending", + "data_grid.filter.sort_label": "Sort", + "data_grid.filter.start_value_placeholder": "Start value", + "data_grid.filter.suggestion.column": "Column", + "data_grid.filter.suggestion.keyword": "Keyword", + "data_grid.filter.suggestion.operator": "Operator", + "data_grid.filter.then_label": "Then", + "data_grid.json_editor.apply_changes": "Apply changes", + "data_grid.json_editor.description": "Edit in the current result order. JSON mode does not support adding or deleting records. Use table mode for that.", + "data_grid.json_editor.format": "Format JSON", + "data_grid.json_editor.invalid_format": "Invalid JSON format: {{error}}", + "data_grid.json_editor.title": "Edit JSON result set", + "data_grid.message.auto_commit_failed": "Auto commit failed: {{detail}}", + "data_grid.message.auto_commit_success": "Auto commit succeeded", + "data_grid.message.cell_edit_mode_entered": "Cell edit mode enabled. Drag to select multiple cells.", + "data_grid.message.cell_edit_mode_exited": "Cell edit mode disabled.", + "data_grid.message.change_set_build_failed": "Failed to build change set", + "data_grid.message.change_set_build_failed_detail": "Failed to build change set: {{detail}}", + "data_grid.message.column_order_reset": "Default column order restored", + "data_grid.message.column_quick_find_not_found": "Field column not found: {{query}}", + "data_grid.message.column_quick_find_not_rendered": "Field column \"{{column}}\" is not currently rendered, so it cannot be located.", + "data_grid.message.column_visibility_reset": "All columns restored", + "data_grid.message.commit_failed": "Commit failed: {{detail}}", + "data_grid.message.copied_columns": "Copied {{count}} columns. You can paste them to target rows.", + "data_grid.message.copied_rows": "Copied {{count}} rows. You can paste them as new rows.", + "data_grid.message.copied_to_clipboard": "Copied to clipboard", + "data_grid.message.copy_columns_first": "Copy column values first", + "data_grid.message.copy_columns_same_row_only": "Select cells from only one row when copying column values", + "data_grid.message.copy_rows_first": "Copy rows first", + "data_grid.message.copy_sql_not_supported": "This data source does not support copying SQL. Use JSON/CSV/Markdown copy instead.", + "data_grid.message.current_field_not_editable": "The current field is not editable", + "data_grid.message.current_record_not_editable": "The current record is not editable", + "data_grid.message.current_row_no_copyable_content": "The current row has no copyable content", + "data_grid.message.ddl_copied": "DDL copied to clipboard", + "data_grid.message.ddl_copy_failed": "Failed to copy DDL", + "data_grid.message.ddl_load_failed": "Failed to load DDL", + "data_grid.message.ddl_missing_context": "The current table is missing a connection or table name, so DDL cannot be viewed", + "data_grid.message.drag_select_cells_to_copy": "Drag to select cells to copy first", + "data_grid.message.export_failed": "Export failed: {{detail}}", + "data_grid.message.export_success": "Export completed", + "data_grid.message.export_with_uncommitted_changes": "There are uncommitted changes. Export will use the visible grid data. Commit first if you need full long-field data.", + "data_grid.message.exporting": "Exporting...", + "data_grid.message.exporting_all": "Exporting all data...", + "data_grid.message.exporting_rows": "Exporting {{count}} rows...", + "data_grid.message.filled_cells": "Filled {{count}} cells", + "data_grid.message.filled_rows": "Filled {{count}} rows", + "data_grid.message.filtered_export_not_supported": "This data source does not support exporting filtered results", + "data_grid.message.filtered_export_uses_committed_data": "There are uncommitted changes. Filtered result export uses committed database data.", + "data_grid.message.import_done": "Import completed", + "data_grid.message.json_applied": "JSON changes were applied to the current result set. You can continue with Commit transaction.", + "data_grid.message.json_invalid": "Invalid JSON: {{detail}}", + "data_grid.message.json_parse_failed": "JSON parse failed: {{detail}}", + "data_grid.message.json_record_count_mismatch": "Record count mismatch: current {{current}} rows, JSON has {{json}} rows. Do not add or delete records in this mode.", + "data_grid.message.json_record_missing_row_key": "Record {{index}} is missing the row identifier and cannot be applied", + "data_grid.message.json_record_not_object": "Record {{index}} is not an object and cannot be applied", + "data_grid.message.json_view_must_be_array": "JSON view must be an array, with each item corresponding to one record", + "data_grid.message.keep_one_visible_column": "Keep at least one visible column", + "data_grid.message.locate_record_to_edit": "Locate the record to edit first", + "data_grid.message.locator_column_value_empty": "Locator column {{column}} is empty, so changes cannot be submitted safely.", + "data_grid.message.no_changes_to_commit": "No changes to commit", + "data_grid.message.no_copyable_cells": "No copyable cells were recognized", + "data_grid.message.no_copyable_columns": "No copyable columns were recognized", + "data_grid.message.no_copyable_rows": "No copyable rows were recognized", + "data_grid.message.no_data_changes": "No data changed", + "data_grid.message.no_ddl_to_copy": "No DDL to copy", + "data_grid.message.no_field_name": "Field name not recognized", + "data_grid.message.no_filter_applied": "No filter condition is currently applied", + "data_grid.message.no_other_rows_to_fill": "No other selected rows can be filled", + "data_grid.message.no_pasteable_editable_fields": "No editable fields can be pasted", + "data_grid.message.no_pasteable_rows": "No rows can be pasted", + "data_grid.message.no_rows_selected": "No rows are selected", + "data_grid.message.no_safe_locator": "No safe row locator is available for this result set.", + "data_grid.message.pasted_columns_to_rows": "Pasted to {{rows}} rows, {{cells}} cells total", + "data_grid.message.pasted_rows_as_new": "Pasted {{count}} rows as new rows. Review them before committing.", + "data_grid.message.preview_sql_failed": "Failed to generate preview SQL", + "data_grid.message.preview_sql_failed_detail": "Failed to generate preview SQL: {{detail}}", + "data_grid.message.result_set_no_copyable_content": "The current result set has no copyable content", "data_grid.message.rollback_failed": "Rollback failed: {{detail}}", + "data_grid.message.saved": "Saved", + "data_grid.message.select_cells_to_fill": "Select cells to fill first", + "data_grid.message.select_file_failed": "Failed to select file: {{detail}}", + "data_grid.message.select_rows_to_copy": "Select rows to copy first", + "data_grid.message.select_rows_to_fill": "Select rows to fill first", + "data_grid.message.select_same_row_cells_to_copy": "Select cells in the same row to copy first", + "data_grid.message.select_target_rows": "Select target rows first", + "data_grid.message.selected_cells_no_update": "Selected cells do not need updates", + "data_grid.message.selection_no_copyable_content": "The current selection has no copyable content", + "data_grid.message.target_row_not_found": "Target row not found. Refresh and try again.", + "data_grid.message.target_rows_cannot_only_source": "Target rows cannot be only the source row. Select another row.", + "data_grid.message.target_rows_no_update": "Target rows do not need updates", + "data_grid.message.transaction_committed": "Transaction committed", "data_grid.message.transaction_rolled_back": "Transaction rolled back", + "data_grid.message.undo_added_row_hint": "For new rows, use Delete selected or full-table rollback to undo.", + "data_grid.message.undo_cell_original_missing": "The original data for this cell was not found, so it cannot be undone.", + "data_grid.message.undo_cell_success": "Cell change undone", + "data_grid.metadata_view.column_name": "Name", + "data_grid.metadata_view.column_type": "Type", + "data_grid.metadata_view.comment": "Comment", + "data_grid.metadata_view.default_value": "Default", + "data_grid.metadata_view.er_collapse_fields": "Collapse field summary", + "data_grid.metadata_view.er_current_badge": "Current", + "data_grid.metadata_view.er_empty": "No foreign key relations were found for this table", + "data_grid.metadata_view.er_expand_fields": "Expand all fields", + "data_grid.metadata_view.er_expand_hidden_columns": "Show {{count}} more fields", + "data_grid.metadata_view.er_expand_relations": "Expand next layer", + "data_grid.metadata_view.er_field_badge": "Field", + "data_grid.metadata_view.er_hidden_columns": "{{count}} more fields", + "data_grid.metadata_view.er_open_table": "Open table", + "data_grid.metadata_view.er_partial_warning": "Some relations could not be loaded. The diagram may be incomplete.", + "data_grid.metadata_view.er_reference_badge": "References", + "data_grid.metadata_view.er_referenced_by_badge": "Referenced by", + "data_grid.metadata_view.er_related_table_count": "{{count}} related tables", + "data_grid.metadata_view.er_relation_count": "{{count}} relations", + "data_grid.metadata_view.er_relation_depth": "Depth {{count}}", + "data_grid.metadata_view.er_reset_relations": "Reset to one hop", + "data_grid.metadata_view.er_table_badge": "Table", + "data_grid.metadata_view.field_count": "{{count}} fields", + "data_grid.metadata_view.fields_badge": "Fields", + "data_grid.modal.export_options.all_data": "Export all data", + "data_grid.modal.export_options.current_page": "Export current page ({{count}} rows)", + "data_grid.modal.export_options.filtered_results": "Filtered results", + "data_grid.modal.export_options.no_rows_selected": "No rows are selected. Choose an export scope:", + "data_grid.modal.export_options.title": "Export options", + "data_grid.modal.export_options.whole_table": "Whole table", + "data_grid.page_find.next": "Next", + "data_grid.page_find.placeholder": "Find in current page...", + "data_grid.page_find.previous": "Previous", + "data_grid.page_find.summary": "{{occurrences}} matches / {{cells}} cells", + "data_grid.page_find.tooltip": "Find only in loaded rows on the current page. WHERE conditions are not changed.", + "data_grid.pagination.jump_action": "Go", + "data_grid.pagination.jump_aria": "Jump to page", + "data_grid.pagination.jump_label": "Jump", + "data_grid.pagination.page_size_aria": "Rows per page", + "data_grid.pagination.page_size_option": "{{count}} rows / page", + "data_grid.pagination.page.current": "Page {{current}}", + "data_grid.pagination.page.known": "Page {{current}} / {{totalPages}}", + "data_grid.pagination.result_set": "Result set", + "data_grid.pagination.summary.approximate": "Current {{current}} rows / about {{total}} rows", + "data_grid.pagination.summary.cancelled": "Current {{current}} rows / count cancelled", + "data_grid.pagination.summary.counting": "Current {{current}} rows / counting total...", + "data_grid.pagination.summary.counting_exact": "Current {{current}} rows / counting exact total...", + "data_grid.pagination.summary.empty": "Current 0 rows / 0 rows total", + "data_grid.pagination.summary.known": "Current {{current}} rows / {{total}} rows total", + "data_grid.pagination.summary.not_counted": "Current {{current}} rows / total not counted", + "data_grid.preview_panel.no_cell_description": "Click a table cell to preview the full data", + "data_grid.preview_panel.no_cell_title": "Click a cell to view data", + "data_grid.preview_sql.copied": "Copied", + "data_grid.preview_sql.no_changes": "No changes", + "data_grid.preview_sql.summary": "{{deletes}} DELETE, {{updates}} UPDATE, {{inserts}} INSERT", + "data_grid.preview_sql.title": "Change preview", + "data_grid.record_view.edit_current": "Edit current record", + "data_grid.record_view.edit_json": "Edit JSON", + "data_grid.record_view.empty": "No data in the current result set", + "data_grid.record_view.json_record_count": "Current result set: {{count}} records", + "data_grid.record_view.next": "Next", + "data_grid.record_view.previous": "Previous", + "data_grid.record_view.record_position": "Record {{current}} / {{total}}", + "data_grid.row_editor.popup_edit": "Edit in popup", + "data_grid.row_editor.title": "Edit row", + "data_grid.secondary.column_display": "Column display", + "data_grid.secondary.data_preview": "Data preview", + "data_grid.secondary.er_diagram": "ER diagram", + "data_grid.secondary.jump_column": "Jump column", + "data_grid.secondary.live": "live", + "data_grid.secondary.object_design": "Object design", + "data_grid.secondary.pending_changes": "Pending {{count}}", + "data_grid.secondary.row_count": "{{count}} rows", + "data_grid.secondary.view_ddl": "View DDL", + "data_grid.table_fallback.query_result": "Query result", + "data_grid.toolbar.add_row": "Add row", + "data_grid.toolbar.ai_insight": "AI data insight", + "data_grid.toolbar.ai_insight_short": "AI insight", + "data_grid.toolbar.ai_insight_tooltip": "Ask AI to analyze the current query page data", + "data_grid.toolbar.batch_fill": "Batch fill ({{count}})", + "data_grid.toolbar.cancel_count": "Cancel count", + "data_grid.toolbar.cancel_count_tooltip": "Cancel this exact total count. Current browsing is not affected.", + "data_grid.toolbar.cell_editor": "Cell editor", + "data_grid.toolbar.commit": "Commit transaction ({{count}})", + "data_grid.toolbar.commit_delay.seconds": "{{seconds}}s", + "data_grid.toolbar.commit_label": "Commit transaction", + "data_grid.toolbar.commit_mode.auto": "Auto commit", + "data_grid.toolbar.commit_mode.auto_countdown": "Commit in {{seconds}}s", + "data_grid.toolbar.commit_mode.manual": "Manual commit", + "data_grid.toolbar.commit_mode.tooltip": "Controls how table edits are committed. Manual commit is safer; auto commit runs after the selected delay following the last edit.", + "data_grid.toolbar.copied_columns_count": "{{count}} copied columns", + "data_grid.toolbar.copy": "Copy", + "data_grid.toolbar.copy_row": "Copy row", + "data_grid.toolbar.copy_selection": "Copy selection ({{count}})", + "data_grid.toolbar.copy_selection_columns": "Copy selection column values ({{count}})", + "data_grid.toolbar.count_total": "Count total", + "data_grid.toolbar.count_total_tooltip": "Count the exact total with the current filter", + "data_grid.toolbar.delete_selected": "Delete selected", + "data_grid.toolbar.export": "Export", + "data_grid.toolbar.filter": "Filter", + "data_grid.toolbar.import": "Import", + "data_grid.toolbar.paste_row": "Paste row", + "data_grid.toolbar.paste_row_count": "Paste row ({{count}})", + "data_grid.toolbar.paste_to_selected_rows": "Paste to selected rows ({{count}})", + "data_grid.toolbar.preview_sql": "Preview SQL", + "data_grid.toolbar.preview_sql_generate": "Generate preview SQL", + "data_grid.toolbar.refresh": "Refresh", + "data_grid.toolbar.rollback": "Rollback", + "data_grid.toolbar.selected_count": "{{count}} selected", + "data_grid.toolbar.undo_delete": "Undo delete", + "data_grid.view.edit_current_record": "Edit current record", + "data_grid.view.edit_json": "Edit JSON", + "data_grid.view.empty_result": "Current result set has no data", + "data_grid.view.next_record": "Next record", + "data_grid.view.previous_record": "Previous record", + "data_grid.view.record_count": "Current result set: {{count}} records", + "data_grid.view.record_position": "Record {{current}} / {{total}}", + "data_grid.view.result_view": "Result view", + "data_grid.view.table": "Table", + "data_grid.view.text": "Text", + "data_sync.action.analyze_diff": "Analyze Differences", + "data_sync.action.cancel": "Cancel", + "data_sync.action.close": "Close", + "data_sync.action.continue_sync": "Continue Sync", + "data_sync.action.next": "Next", + "data_sync.action.previous": "Previous", + "data_sync.action.start_sync": "Start Sync", + "data_sync.action.view": "View", + "data_sync.alert.auto_create_planner_scope": "Automatic table creation currently supports only MySQL to Kingbase. It migrates columns, primary keys, regular indexes, unique indexes, and composite indexes, and skips full-text, spatial, prefix, and function indexes explicitly.", + "data_sync.alert.auto_create_scope": "Automatic table creation currently supports only MySQL to Kingbase. It migrates columns, primary keys, regular indexes, unique indexes, and composite indexes, and skips full-text, spatial, prefix, and function indexes explicitly.", + "data_sync.alert.existing_target_only": "Data sync runs against existing target tables by default. Switch to cross-database migration when you need table creation and import.", + "data_sync.alert.full_overwrite": "Full overwrite clears target table data. Use it carefully.", + "data_sync.alert.migration_mode": "Cross-database migration is active. Use it to move tables to another data source with automatic table creation and import.", + "data_sync.alert.query_mode": "SQL result-set sync currently supports custom source SQL to one existing target table. The query result must include the target table primary-key column.", + "data_sync.alert.sync_mode": "Data sync is active. Use it for incremental sync or overwrite import when target tables already exist.", + "data_sync.backend.error.analyze_prepare_secrets_failed": "Failed to prepare data sync analysis secrets: {{detail}}", + "data_sync.backend.error.apply_changes_failed": "Failed to apply changes: {{detail}}", + "data_sync.backend.error.apply_changes_unsupported": "The target driver does not support applying data changes", + "data_sync.backend.error.apply_source_query_changes_failed": "Failed to apply SQL result-set changes: {{detail}}", + "data_sync.backend.error.auto_add_column_failed": "Failed to add column automatically: column={{column}}, error={{detail}}", + "data_sync.backend.error.build_migration_plan_failed": "Failed to build migration plan: table={{table}}, error={{detail}}", + "data_sync.backend.error.clear_target_failed": "Failed to clear target table: {{detail}}", + "data_sync.backend.error.connect_source_failed": "Source database connection failed: {{detail}}", + "data_sync.backend.error.connect_source_mongodb_failed": "Source MongoDB connection failed: {{detail}}", + "data_sync.backend.error.connect_source_redis_failed": "Source Redis connection failed: {{detail}}", + "data_sync.backend.error.connect_target_failed": "Target database connection failed: {{detail}}", + "data_sync.backend.error.connect_target_mongodb_failed": "Target MongoDB connection failed: {{detail}}", + "data_sync.backend.error.connect_target_redis_failed": "Target Redis connection failed: {{detail}}", + "data_sync.backend.error.create_indexes_failed": "Failed to create indexes: table={{table}}, error={{detail}}", + "data_sync.backend.error.create_table_sql_empty": "Automatic table creation failed for table {{table}}: create-table SQL is empty", + "data_sync.backend.error.create_target_table_failed": "Failed to create target table: table={{table}}, error={{detail}}", + "data_sync.backend.error.diff_composite_pk_unsupported": "Composite primary key ({{columns}}) is not supported for difference comparison sync", + "data_sync.backend.error.diff_pk_required": "No primary key. Difference comparison sync is not supported; use insert-only or full-overwrite mode for direct import.", + "data_sync.backend.error.exec_ddl_statement_failed": "{{stage}} failed: SQL={{sql}}, error={{detail}}", + "data_sync.backend.error.execute_source_query_failed": "Failed to execute source query: {{detail}}", + "data_sync.backend.error.init_source_driver_failed": "Failed to initialize source database driver: {{detail}}", + "data_sync.backend.error.init_source_mongodb_driver_failed": "Failed to initialize source MongoDB driver: {{detail}}", + "data_sync.backend.error.init_target_driver_failed": "Failed to initialize target database driver: {{detail}}", + "data_sync.backend.error.init_target_mongodb_driver_failed": "Failed to initialize target MongoDB driver: {{detail}}", + "data_sync.backend.error.inspect_mongodb_collection_failed": "Failed to inspect target MongoDB collection: {{detail}}", + "data_sync.backend.error.list_mongodb_collections_failed": "Failed to list MongoDB collections: {{detail}}", + "data_sync.backend.error.load_target_columns_failed": "Failed to load target table columns: {{detail}}", + "data_sync.backend.error.mongo_document_write_unsupported": "The target driver does not support MongoDB document writes", + "data_sync.backend.error.mongo_read_source_samples_failed": "Failed to read source MongoDB collection samples: {{detail}}", + "data_sync.backend.error.mongo_redis_analyze_collection_failed": "Failed to analyze MongoDB collection {{collection}}: {{detail}}", + "data_sync.backend.error.mongo_redis_document_key_missing": "MongoDB document is missing the key field", + "data_sync.backend.error.mongo_redis_document_type_missing": "MongoDB document for Redis Key {{key}} is missing field {{field}}", + "data_sync.backend.error.mongo_redis_empty_target_value": "Redis target value is empty for key {{key}}", + "data_sync.backend.error.mongo_redis_unsupported_type": "Redis type {{type}} is not supported for key {{key}}", + "data_sync.backend.error.mongo_redis_value_invalid": "Redis value for key {{key}} has invalid {{type}} payload; actual type={{actual}}", + "data_sync.backend.error.mongo_redis_write_key_failed": "Failed to write Redis Key {{key}}: {{detail}}", + "data_sync.backend.error.pre_create_table_sql_failed": "Failed to pre-execute create-table SQL: table={{table}}, error={{detail}}", + "data_sync.backend.error.prepare_secrets_failed": "Failed to prepare data sync secrets: {{detail}}", + "data_sync.backend.error.preview_composite_pk_unsupported": "Composite primary key ({{columns}}) is not supported for data preview", + "data_sync.backend.error.preview_failed": "Data sync preview failed: {{detail}}", + "data_sync.backend.error.preview_pk_required": "No primary key, data preview is not supported", + "data_sync.backend.error.preview_prepare_secrets_failed": "Failed to prepare data sync preview secrets: {{detail}}", + "data_sync.backend.error.read_redis_key_failed": "Failed to read Redis Key {{key}}: {{detail}}", + "data_sync.backend.error.read_source_table_failed": "Failed to read source table: {{detail}}", + "data_sync.backend.error.read_source_table_failed_with_table": "Failed to read source table {{table}}: {{detail}}", + "data_sync.backend.error.read_target_redis_key_failed": "Failed to read target Redis Key {{key}}: {{detail}}", + "data_sync.backend.error.read_target_table_failed": "Failed to read target table: {{detail}}", + "data_sync.backend.error.read_target_table_failed_with_table": "Failed to read target table {{table}}: {{detail}}", + "data_sync.backend.error.redis_mongo_analyze_changes_failed": "Failed to analyze Redis migration changes: {{detail}}", + "data_sync.backend.error.redis_mongo_apply_changes_failed": "Failed to apply Redis migration changes: {{detail}}", + "data_sync.backend.error.redis_mongo_build_changes_failed": "Failed to build Redis migration changes: {{detail}}", + "data_sync.backend.error.redis_mongo_create_collection_failed": "Failed to create target MongoDB collection: {{detail}}", + "data_sync.backend.error.refresh_columns_after_create_failed": "Failed to load columns after creating target table: table={{table}}, error={{detail}}", + "data_sync.backend.error.restore_source_secret_failed": "Failed to restore source database connection secret: {{detail}}", + "data_sync.backend.error.restore_target_secret_failed": "Failed to restore target database connection secret: {{detail}}", + "data_sync.backend.error.scan_redis_keys_failed": "Failed to scan Redis Keys: {{detail}}", + "data_sync.backend.error.source_collection_no_migratable_fields": "No migratable fields could be inferred from source MongoDB collection: {{collection}}", + "data_sync.backend.error.source_table_columns_failed": "Failed to get source table columns: {{detail}}", + "data_sync.backend.error.source_table_missing_or_no_columns": "Source table is missing or has no column definitions: {{table}}", + "data_sync.backend.error.sync_table_schema_failed": "Failed to sync table schema: table={{table}}, error={{detail}}", + "data_sync.backend.error.target_collection_check_failed": "Failed to check target MongoDB collection: {{detail}}", + "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "Target table has composite primary key ({{columns}}), so SQL result-set difference analysis is not supported", + "data_sync.backend.error.target_pk_required_for_query_diff": "The target table has no primary key, so SQL result-set difference analysis is not supported", + "data_sync.backend.error.target_table_columns_failed": "Failed to get target table columns: {{detail}}", + "data_sync.backend.error.target_table_columns_missing": "Target table {{table}} is missing or its column definitions could not be read", + "data_sync.backend.label.content_data_only": "Data only", + "data_sync.backend.label.content_schema_and_data": "Schema + data", + "data_sync.backend.label.content_schema_only": "Schema only", + "data_sync.backend.label.mode_full_overwrite": "full overwrite", + "data_sync.backend.label.mode_insert_only": "insert only", + "data_sync.backend.label.mode_insert_update": "incremental sync", + "data_sync.backend.label.target_strategy_auto_create_if_missing": "create target automatically when missing", + "data_sync.backend.label.target_strategy_existing_only": "require existing target", + "data_sync.backend.label.target_strategy_smart": "smart target handling", + "data_sync.backend.log.auto_add_columns_completed": "Automatic column completion finished: succeeded={{succeeded}}, failed={{failed}}", + "data_sync.backend.log.change_counts": "Rows to insert: {{inserts}}, update: {{updates}}, delete: {{deletes}}", + "data_sync.backend.log.connecting_source": "Connecting to source database: {{host}}...", + "data_sync.backend.log.connecting_target": "Connecting to target database: {{host}}...", + "data_sync.backend.log.data_already_consistent": "Data is already consistent; no changes are needed.", + "data_sync.backend.log.ddl_statement_succeeded": "Table {{table}} {{stage}} succeeded: {{sql}}", + "data_sync.backend.log.fatal_error": "Fatal error: {{message}}", + "data_sync.backend.log.missing_columns_auto_add_disabled": "Target table is missing {{count}} column(s), but automatic completion is disabled; they will be ignored: {{columns}}", + "data_sync.backend.log.missing_columns_auto_add_started": "Target table is missing {{count}} column(s); starting automatic completion: {{columns}}", + "data_sync.backend.log.mongo_redis_keyspace_options": "MongoDB to Redis keyspace migration; mode={{mode}}; target={{target}}", + "data_sync.backend.log.mongo_redis_migrating_key": "Writing Redis Key {{key}}", + "data_sync.backend.log.mongo_redis_syncing_collection": "Syncing MongoDB collection {{collection}}", + "data_sync.backend.log.redis_mongo_keyspace_options": "Redis to MongoDB keyspace migration; mode={{mode}}; target strategy={{strategy}}", + "data_sync.backend.log.redis_mongo_migrating_key": "Migrating Redis Key {{key}}", + "data_sync.backend.log.source_query_no_changes": "SQL result set and target table are consistent; no changes need to be applied", + "data_sync.backend.log.source_query_sync_completed": "SQL result-set sync completed: inserts={{inserts}}, updates={{updates}}, deletes={{deletes}}", + "data_sync.backend.log.source_query_sync_source": "Sync source: SQL result set -> target table {{table}}; mode: {{mode}}", + "data_sync.backend.log.sync_options": "Sync content: {{content}}; mode: {{mode}}; auto-add columns: {{autoAddColumns}}; target table strategy: {{targetTableStrategy}}; create indexes: {{createIndexes}}", + "data_sync.backend.log.syncing_table": "Syncing table: {{table}}", + "data_sync.backend.log.table_no_operations_skipped": "Table {{table}} has no selected operations and was skipped", + "data_sync.backend.log.target_table_created": "Target table created successfully: {{table}}", + "data_sync.backend.log.target_table_no_operations": "Target table {{table}} has no selected operations and was skipped", + "data_sync.backend.log.unknown_sync_content_data_only": "Unknown sync content {{content}}; data-only sync was selected automatically", + "data_sync.backend.result.analyzed_tables": "Analyzed {{count}} table(s)", + "data_sync.backend.result.analyzed_target_tables": "Analyzed {{count}} target table(s)", + "data_sync.backend.result.mongo_redis_analyzed_collections": "Analyzed {{count}} MongoDB collection(s) for Redis migration", + "data_sync.backend.result.mongo_redis_completed": "MongoDB keyspace migration completed; processed {{collections}} collection(s) and {{keys}} Redis Key(s)", + "data_sync.backend.result.mongo_redis_no_collections": "No MongoDB collections available for migration", + "data_sync.backend.result.mongo_redis_no_documents": "No MongoDB Redis documents available for migration", + "data_sync.backend.result.preview_ready": "Data sync preview is ready", + "data_sync.backend.result.redis_mongo_analyzed_keys": "Analyzed {{count}} Redis Key(s) for MongoDB migration", + "data_sync.backend.result.redis_mongo_completed": "Redis keyspace migration completed; processed {{count}} Redis Key(s)", + "data_sync.backend.result.redis_mongo_no_keys": "No Redis Keys available for migration", + "data_sync.backend.result.sync_completed": "Sync completed: tables={{tables}}, inserted={{rowsInserted}}, updated={{rowsUpdated}}, deleted={{rowsDeleted}}", + "data_sync.backend.summary.diff_completed": "Difference analysis completed", + "data_sync.backend.summary.mongo_redis_diff": "Execution will insert {{inserts}} Redis Key(s) and update {{updates}} Redis Key(s)", + "data_sync.backend.summary.mongo_redis_empty_collection": "No migratable documents were found in the collection", + "data_sync.backend.summary.mongo_redis_planned_action": "Migrate to {{target}}", + "data_sync.backend.summary.mongo_redis_same_keys": "The matching Redis Keys are already up to date", + "data_sync.backend.summary.mongo_redis_warning_document_format": "Only documents with key/type/ttl/value fields are supported", + "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB to Redis downgrades full overwrite to incremental sync to avoid deleting other Redis Keys in the DB", + "data_sync.backend.summary.mongo_redis_warning_keyspace": "Documents in the MongoDB collection will be written to Redis by keyspace semantics", + "data_sync.backend.summary.redis_mongo_insert_document": "Execution will insert a new MongoDB document", + "data_sync.backend.summary.redis_mongo_planned_action": "Migrate to collection {{collection}}", + "data_sync.backend.summary.redis_mongo_same_document": "The matching MongoDB document is already up to date", + "data_sync.backend.summary.redis_mongo_update_document": "Execution will update the existing MongoDB document", + "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key will be written as a MongoDB document", + "data_sync.backend.summary.source_query_diff_completed": "SQL result-set difference analysis completed", + "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view semantics are not automatically migrated to PG-like targets yet", + "data_sync.backend.validation.query_mode_data_only": "SQL result-set sync currently supports data-only sync", + "data_sync.backend.validation.single_target_table_required": "SQL result-set sync requires exactly one target table", + "data_sync.backend.validation.source_query_required": "Source query SQL is required", + "data_sync.backend.validation.target_table_required": "Target table is required", + "data_sync.backend.warning.apply_changes_unsupported": "The target driver does not support applying data changes.", + "data_sync.backend.warning.auto_add_column_sql_generation_failed": "Failed to generate auto-add-column SQL for column {{column}}: {{detail}}", + "data_sync.backend.warning.auto_create_pair_unsupported": "Automatic table creation currently supports only MySQL -> Kingbase; current pair={{sourceType}} -> {{targetType}}", + "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "Column {{column}} is an auto-increment column; {{feature}} will not be recreated automatically when adding it to an existing target table", + "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "Column {{column}} type {{type}} was degraded to json", + "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "Column {{column}} type {{type}} was degraded to jsonb", + "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "Column {{column}} enum type {{type}} was degraded to varchar(255)", + "data_sync.backend.warning.clickhouse_order_by_tuple_used": "No source primary key was detected, so ClickHouse will use ORDER BY tuple(); query performance may be affected", + "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse does not preserve relational foreign-key or unique-constraint semantics; only columns and data are migrated", + "data_sync.backend.warning.clickhouse_source_metadata_limited": "ClickHouse source metadata for indexes and constraints is limited; reverse migration focuses on columns and data", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "ClickHouse source did not return primary-key information, so the target MySQL table will not create a primary key automatically", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "ClickHouse source did not return primary-key information, so the target PG-like table will not create a primary key automatically", + "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "For ClickHouse targets, insert-only or full-overwrite is recommended; update/delete semantics differ from traditional relational databases", + "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "Column {{column}} type {{type}} has no dedicated MySQL mapping and was degraded to text", + "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "Column {{column}} type {{type}} has no dedicated PG-like mapping and was degraded to text", + "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "Column {{column}} type {{type}} was mapped to numeric(20,0) to avoid unsigned overflow", + "data_sync.backend.warning.column_default_expression_skipped": "Column {{column}} default value {{default}} contains an expression and is not migrated automatically yet", + "data_sync.backend.warning.column_empty_string_default_not_preserved": "Column {{column}} empty-string default value was not preserved", + "data_sync.backend.warning.column_type_degraded": "Column {{column}} type {{sourceType}} was degraded to {{targetType}}", + "data_sync.backend.warning.column_type_degraded_clickhouse_string": "Column {{column}} type {{type}} was degraded to String", + "data_sync.backend.warning.column_type_empty_clickhouse_string": "Column {{column}} type is empty and was degraded to String", + "data_sync.backend.warning.column_type_empty_degraded": "Column {{column}} type is empty and was degraded to {{targetType}}", + "data_sync.backend.warning.column_type_mapped": "Column {{column}} type {{sourceType}} was mapped to {{targetType}}", + "data_sync.backend.warning.column_type_no_mapping_degraded": "Column {{column}} type {{sourceType}} has no dedicated mapping and was degraded to {{targetType}}", + "data_sync.backend.warning.column_user_defined_degraded": "Column {{column}} is a user-defined type and was degraded to {{targetType}}", + "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "Column {{column}} is a user-defined type and was degraded to String", + "data_sync.backend.warning.composite_pk_skipped": "Table {{table}} has composite primary key ({{columns}}); difference sync is not supported yet and was skipped", + "data_sync.backend.warning.full_overwrite_clearing_target": "Full overwrite mode: target table {{table}} will be cleared", + "data_sync.backend.warning.index_columns_missing": "Index {{name}} has no column definition and was skipped", + "data_sync.backend.warning.index_prefix_length_unsupported": "Index {{name}} uses a prefix length and cannot be migrated automatically yet", + "data_sync.backend.warning.index_type_unsupported": "Index {{name}} type={{type}} cannot be migrated automatically yet", + "data_sync.backend.warning.load_target_columns_skip_check_failed": "Failed to get target table columns; column consistency check was skipped: {{detail}}", + "data_sync.backend.warning.mongo_redis_document_format": "MongoDB to Redis currently supports documents with key/type/ttl/value fields only", + "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "MongoDB to Redis downgrades full overwrite to incremental sync during this migration", + "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "Column {{column}} AUTO_INCREMENT is not preserved as auto-increment semantics in ClickHouse", + "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "Column {{column}} binary type was degraded to String", + "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "Column {{column}} type {{type}} was degraded to String", + "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "Column {{column}} type {{type}} has no dedicated ClickHouse mapping and was degraded to String", + "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "Column {{column}} is unsigned bigint auto_increment; it was degraded to {{targetType}} and auto-increment semantics were not preserved", + "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "Column {{column}} identity/auto-increment semantics are not preserved in ClickHouse", + "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "Redis to MongoDB downgrades full overwrite to incremental sync during this migration", + "data_sync.backend.warning.refresh_columns_after_add_failed": "Failed to refresh target columns after adding columns: table={{table}}, error={{detail}}", + "data_sync.backend.warning.source_indexes_read_failed": "Failed to read source table indexes; index migration was skipped: {{detail}}", + "data_sync.backend.warning.table_pk_required_skipped": "Table {{table}} has no primary key; the current mode requires difference comparison and was skipped", + "data_sync.backend.warning.target_existing_only_required": "The current strategy requires the target table to exist, so it will not be created automatically at execution.", + "data_sync.backend.warning.target_exists_data_only_no_indexes": "The target table already exists. Only data import will run; existing indexes and constraints will not be rebuilt automatically.", + "data_sync.backend.warning.target_missing_columns": "Target table is missing {{count}} column(s): {{columns}}", + "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "Target table for {{table}} is missing; the current strategy does not allow automatic table creation, so it was skipped", + "data_sync.backend.warning.target_table_existing_only_required": "The current strategy requires the target table to exist, so it will not be created automatically at execution.", + "data_sync.backend.warning.unknown_content_default_data": "Unknown sync content {{content}}; data-only sync was selected automatically", + "data_sync.backend.warning.unknown_mode_default_insert_update": "Unknown sync mode {{mode}}; incremental sync was selected automatically", + "data_sync.badge.migration_mode": "Migration Mode", + "data_sync.badge.source_pending": "Source Pending", + "data_sync.badge.source_selected": "Source Selected", + "data_sync.badge.sync_mode": "Sync Mode", + "data_sync.badge.table_count": "{{count}} tables", + "data_sync.compare_entry.action.return_to_compare": "Back to Comparison", + "data_sync.compare_entry.alert.data": "You are in Data Compare. It only analyzes row-level differences by primary key and does not write data.", + "data_sync.compare_entry.alert.schema": "You are in Schema Compare. It only analyzes schema differences and generates reviewable SQL without applying changes.", + "data_sync.compare_entry.option.auto_add_columns": "Generate compatible change SQL for missing target columns (preview only, not executed)", + "data_sync.compare_entry.option.source_dataset.query": "Compare by SQL Result Set", + "data_sync.compare_entry.option.source_dataset.table": "Compare by Table", + "data_sync.compare_entry.preview.selection_hint": "Row selection only affects the SQL preview scope and does not write data.", + "data_sync.compare_entry.preview.sql.data_help": "SQL preview is generated from the selected insert, update, delete, and row ranges for difference review only.", + "data_sync.compare_entry.preview.sql.schema_help": "SQL preview shows suggested schema-difference statements for review only.", + "data_sync.compare_entry.result.completed": "Comparison Completed", + "data_sync.compare_entry.result.failed": "Comparison Failed", + "data_sync.compare_entry.result.running": "Comparing", + "data_sync.compare_entry.result.running_description": "Current stage: {{stage}}{{table}}", + "data_sync.compare_entry.result.stage_fallback": "Running", + "data_sync.compare_entry.result.success_summary": "Successfully compared {{tables}} tables.", + "data_sync.compare_entry.result.table_suffix": ", table: {{table}}", + "data_sync.compare_entry.title.analysis_log": "Analysis Log", + "data_sync.compare_entry.workflow_help": "This entry only analyzes differences and previews results. It does not sync, create tables, add columns, or delete data.", + "data_sync.confirm.full_overwrite.content": "Full overwrite clears target table data before inserting rows. Confirm that the target database has been backed up.", + "data_sync.confirm.full_overwrite.ok": "Continue", + "data_sync.confirm.full_overwrite.title": "Confirm Full Overwrite", + "data_sync.diff.column.delete": "Delete", + "data_sync.diff.column.insert": "Insert", + "data_sync.diff.column.plan": "Plan", + "data_sync.diff.column.preview": "Preview", + "data_sync.diff.column.risk": "Risk", + "data_sync.diff.column.same": "Same", + "data_sync.diff.column.table": "Table", + "data_sync.diff.column.target_table": "Target Table", + "data_sync.diff.column.update": "Update", + "data_sync.diff.more_warnings": "{{count}} more not shown", + "data_sync.diff.target_exists": "Exists", + "data_sync.diff.target_missing": "Missing", + "data_sync.diff.title": "Comparison Result", + "data_sync.diff.warning_title": "Precheck found risks or degraded items. Review them before execution.", + "data_sync.entry_mode.compare.action.start": "Start Comparison", + "data_sync.entry_mode.compare.option_title": "Comparison Options", + "data_sync.entry_mode.compare.result_title": "Comparison Result", + "data_sync.entry_mode.data_compare.badge": "Data Compare", + "data_sync.entry_mode.data_compare.description": "Compare source and target table data by primary key, including inserts, updates, and deletes.", + "data_sync.entry_mode.data_compare.hero_description": "Use this to verify data consistency. It only analyzes differences and previews rows without writing data.", + "data_sync.entry_mode.data_compare.table_select_label": "Select tables to compare data:", + "data_sync.entry_mode.data_compare.title": "Data Compare", + "data_sync.entry_mode.schema_compare.badge": "Schema Compare", + "data_sync.entry_mode.schema_compare.description": "Generate schema differences, compatibility risks, and reviewable SQL between source and target tables.", + "data_sync.entry_mode.schema_compare.hero_description": "Use this before release to check schema differences. It only analyzes and previews without applying schema changes.", + "data_sync.entry_mode.schema_compare.table_select_label": "Select tables to compare schema:", + "data_sync.entry_mode.schema_compare.title": "Schema Compare", + "data_sync.entry_mode.sync.hero_description": "Use this when target tables already exist. Analyze differences first, then apply selected inserts, updates, or deletes.", + "data_sync.field.connection": "Connection", + "data_sync.field.database": "Database", + "data_sync.field.migration_content": "Migration Content", + "data_sync.field.migration_mode": "Migration Mode", + "data_sync.field.mongo_collection_name": "Mongo Collection Name (optional)", + "data_sync.field.schema": "Schema", + "data_sync.field.source_dataset_mode": "Source Dataset Mode", + "data_sync.field.source_query_sql": "Source Query SQL", + "data_sync.field.sync_content": "Sync Content", + "data_sync.field.sync_mode": "Sync Mode", + "data_sync.field.target_table": "Target Table", + "data_sync.field.target_table_requirement": "Target Table Requirement", + "data_sync.field.target_table_strategy": "Target Table Strategy", + "data_sync.field.workflow_type": "Workflow Type", + "data_sync.help.mongo_collection_mongo_to_redis": "For MongoDB to Redis, select the source collection directly in most cases. Leave this blank unless an explicit fallback collection name is needed.", + "data_sync.help.mongo_collection_redis_to_mongo": "Leave blank to use the default collection name. When filled, this Redis keyspace writes to that Mongo collection for this run.", + "data_sync.help.select_tables": "Select tables to sync:", + "data_sync.help.source_query_mode": "Enter source query SQL and select one target table. Difference analysis compares this result set directly with the target table.", + "data_sync.help.workflow_type": "Choose whether this run syncs existing target tables or performs cross-database migration. The page adjusts safer defaults by workflow type.", + "data_sync.hero.migration_description": "Move source tables to another database, create tables by policy, import data, and add compatible indexes.", + "data_sync.hero.migration_title": "Cross-Database Migration", + "data_sync.hero.sync_description": "Use existing target tables, compare differences first, then execute selected inserts, updates, or deletes.", + "data_sync.hero.sync_title": "Data Sync", + "data_sync.log.level.error": "Error", + "data_sync.log.level.info": "Info", + "data_sync.log.level.warn": "Warning", + "data_sync.log.title": "Execution Log", + "data_sync.message.analysis_complete": "Difference analysis completed", + "data_sync.message.analysis_failed": "Difference analysis failed", + "data_sync.message.analysis_failed_detail": "Difference analysis failed: {{detail}}", + "data_sync.message.analyze_before_sync": "Analyze differences before starting sync", + "data_sync.message.close_blocked_running": "Sync is running. The window cannot be closed yet.", + "data_sync.message.fetch_source_databases_failed": "Failed to fetch source databases", + "data_sync.message.fetch_source_databases_failed_detail": "Failed to fetch source databases: {{detail}}", + "data_sync.message.fetch_tables_failed": "Failed to fetch tables", + "data_sync.message.fetch_tables_failed_detail": "Failed to fetch tables: {{detail}}", + "data_sync.message.fetch_target_databases_failed": "Failed to fetch target databases", + "data_sync.message.fetch_target_databases_failed_detail": "Failed to fetch target databases: {{detail}}", + "data_sync.message.fetch_target_schemas_failed_detail": "Failed to fetch target schemas: {{detail}}", + "data_sync.message.more_items_collapsed": "{{count}} more not shown", + "data_sync.message.precheck_warnings": "Precheck found risks or degraded items. Review them before execution.", + "data_sync.message.preview_load_failed": "Failed to load difference preview", + "data_sync.message.preview_load_failed_detail": "Failed to load difference preview: {{detail}}", + "data_sync.message.select_connections_first": "Select connections first", + "data_sync.message.select_databases_first": "Select databases first", + "data_sync.message.select_source_database": "Select source database", + "data_sync.message.select_target_database": "Select target database", + "data_sync.message.select_target_schema": "Select target schema", + "data_sync.message.sync_execution_failed": "Sync execution failed", + "data_sync.message.sync_execution_failed_detail": "Sync execution failed: {{detail}}", + "data_sync.modal.full_overwrite_content": "Full overwrite clears target table data before inserting rows. Confirm that the target database has been backed up.", + "data_sync.modal.full_overwrite_ok": "Continue", + "data_sync.modal.full_overwrite_title": "Confirm Full Overwrite", + "data_sync.option.auto_add_columns": "Add missing target columns automatically (currently supports MySQL targets and MySQL to Kingbase; SQL result-set mode is not supported)", + "data_sync.option.content.both": "Sync Schema + Data", + "data_sync.option.content.data": "Data Only", + "data_sync.option.content.schema": "Schema Only", + "data_sync.option.create_indexes": "Migrate compatible regular and unique indexes automatically (only for automatic table creation)", + "data_sync.option.show_same_tables": "Show Same Tables", + "data_sync.option.source_dataset.query": "Sync by SQL Result Set", + "data_sync.option.source_dataset.table": "Sync by Table", + "data_sync.option.sync_mode.full_overwrite": "Full Overwrite (clear target table before insert)", + "data_sync.option.sync_mode.insert_only": "Insert Only (no target comparison; tables without primary keys are skipped)", + "data_sync.option.sync_mode.insert_update": "Incremental Sync (compare differences, then select inserts, updates, and deletes)", + "data_sync.option.target_strategy.auto_create_if_missing": "Create target table automatically when missing", + "data_sync.option.target_strategy.existing_only": "Use existing target tables only", + "data_sync.option.target_strategy.smart": "Smart Mode (import directly when present, create automatically when missing)", + "data_sync.option.workflow.migration": "Cross-Database Migration (create tables automatically and import)", + "data_sync.option.workflow.sync": "Data Sync (compare and sync against existing target tables)", + "data_sync.placeholder.mongo_collection_name": "Enter Mongo collection name", + "data_sync.placeholder.source_query_sql": "Example: SELECT id, name, email FROM users WHERE status = 'active'", + "data_sync.placeholder.target_table": "Select one target table", + "data_sync.plan.add_missing_columns_before_import": "Add {{count}} missing columns before import", + "data_sync.plan.auto_create_unsupported": "Automatic table creation is not supported for this database pair", + "data_sync.plan.backend_summary": "Plan summary", + "data_sync.plan.data_import_without_diff": "The current mode imports source table data without difference comparison.", + "data_sync.plan.migrate_to_collection": "Migrate to collection {{collection}}", + "data_sync.plan.migrate_to_target": "Migrate to {{target}}", + "data_sync.plan.migration_kernel_planning": "This database pair is in migration planning and is waiting for structure analysis and target dialect generation", + "data_sync.plan.missing_columns_auto_add": "Add {{count}} missing columns before import", + "data_sync.plan.missing_columns_auto_add_disabled": "Target table is missing {{count}} columns, and automatic column completion is disabled", + "data_sync.plan.missing_columns_auto_add_unsupported": "Target table is missing {{count}} columns, and automatic column completion is not supported for this database pair", + "data_sync.plan.missing_columns_no_executable_sql": "Target table is missing {{count}} columns, but no executable add-column SQL was generated", + "data_sync.plan.mongo_relational_entry_warning": "The {{objectKind}} migration from {{sourceType}} to {{targetType}} currently only has a structure-analysis planning notice", + "data_sync.plan.mongo_relational_kernel_planned": "This database pair is in migration planning and is waiting for structure analysis and target dialect generation", + "data_sync.plan.mongo_target_collection_missing_auto_create": "Target MongoDB collection {{collection}} is missing. It will be created automatically before import.", + "data_sync.plan.mongo_target_collection_missing_manual_create": "Target MongoDB collection {{collection}} is missing. Create it manually first.", + "data_sync.plan.redis_key_to_mongodb_document": "Generate MongoDB documents from Redis Keys and import them", + "data_sync.plan.redis_mongo_keyspace_import": "Generate MongoDB documents from Redis Keys and import them", + "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis to MongoDB migrates by keyspace semantics and does not run table schema checks", + "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Redis TTL and collection ordering semantics are preserved as document fields and may not be fully equivalent", + "data_sync.plan.redis_mongo_target_collection_auto_create": "Target collection is missing. It will be created automatically before import.", + "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "Current strategy requires an existing target MongoDB collection; execution will not create it automatically", + "data_sync.plan.redis_mongo_target_collection_missing_manual": "Target collection is missing. Create it manually first.", + "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state are not migrated yet", + "data_sync.plan.schema_aligned": "Table schema is already aligned", + "data_sync.plan.schema_changes_detected": "{{count}} schema changes detected", + "data_sync.plan.schema_only": "Schema-only sync", + "data_sync.plan.schema_only_no_data_diff": "Schema-only sync. Data difference analysis was not run.", + "data_sync.plan.schema_preview": "Schema preview", + "data_sync.plan.source_query_preview": "SQL result-set sync preview", + "data_sync.plan.target_collection_missing_auto_create": "Target collection is missing. It will be created automatically before import.", + "data_sync.plan.target_collection_missing_manual_create": "Target collection is missing. Create it manually first.", + "data_sync.plan.target_missing_auto_create": "Target table is missing. It will be created automatically before import.", + "data_sync.plan.target_missing_auto_create_all": "Target table is missing. It will be created automatically at execution and all source data will be imported.", + "data_sync.plan.target_missing_cannot_sync": "Target table is missing. Sync cannot run.", + "data_sync.plan.target_missing_manual_create": "Target table is missing. Create it manually first.", + "data_sync.plan.target_missing_preview_unavailable": "The target table is missing. Difference preview is unavailable.", + "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "No source time column can be mapped to the first TDengine column, so automatic table creation cannot run", + "data_sync.plan.tdengine_time_column_missing": "No source time column can be mapped to the first TDengine column, so automatic table creation cannot run", + "data_sync.plan.use_existing_target": "Import into existing target table", + "data_sync.plan.use_existing_target_collection": "Import into existing target collection", + "data_sync.plan.use_existing_target_table": "Import into existing target table", + "data_sync.preview.action.copy_sql": "Copy SQL", + "data_sync.preview.column.changed_columns": "Changed Columns", + "data_sync.preview.column.data": "Data", + "data_sync.preview.column.detail": "Details", + "data_sync.preview.column.primary_key": "Primary Key", + "data_sync.preview.data_summary": "Insert {{inserts}}, update {{updates}}, delete {{deletes}} (preview shows up to 200 rows per type)", + "data_sync.preview.delete_warning": "Delete is not selected by default. Enable delete only after confirming business impact.", + "data_sync.preview.loading": "Loading difference preview...", + "data_sync.preview.message.copy_failed": "Copy failed. Copy manually.", + "data_sync.preview.message.sql_copied": "SQL copied", + "data_sync.preview.schema_plan_help": "Statements planned for this schema sync run are shown below.", + "data_sync.preview.schema_statement_count": "{{count}} schema change statements detected", + "data_sync.preview.schema_warning_title": "Schema preview contains risks or degraded items", + "data_sync.preview.selection_hint.delete": "When no rows are selected, all delete differences are synced. Clear Delete in the comparison result to skip deletes.", + "data_sync.preview.selection_hint.insert": "When no rows are selected, all insert differences are synced. Clear Insert in the comparison result to skip inserts.", + "data_sync.preview.selection_hint.update": "When no rows are selected, all update differences are synced. Clear Update in the comparison result to skip updates.", + "data_sync.preview.side.source": "Source", + "data_sync.preview.side.target": "Target", + "data_sync.preview.sql.data_help": "SQL preview is generated from the selected insert, update, delete, and row ranges for review.", + "data_sync.preview.sql.no_data_sql": "-- No SQL available for the current selection", + "data_sync.preview.sql.no_schema_changes": "-- No executable schema changes for the current table", + "data_sync.preview.sql.schema_help": "SQL preview shows the schema change statements that will be executed for review.", + "data_sync.preview.sql.schema_statement_count": "{{count}} schema change statements", + "data_sync.preview.sql.statement_count": "{{count}} statements (preview data shows up to 200 rows per type)", + "data_sync.preview.tab.delete": "Delete({{count}})", + "data_sync.preview.tab.insert": "Insert({{count}})", + "data_sync.preview.tab.schema": "Schema({{count}})", + "data_sync.preview.tab.sql": "SQL({{count}})", + "data_sync.preview.tab.update": "Update({{count}})", + "data_sync.preview.title": "Difference Preview: {{table}}", + "data_sync.preview.update_detail_title": "Update Details: {{table}} / {{pk}}", + "data_sync.progress.stage.analysis_completed": "Difference analysis completed", + "data_sync.progress.stage.analysis_started": "Difference analysis started", + "data_sync.progress.stage.analyzing_diff": "Analyzing differences", + "data_sync.progress.stage.analyzing_table": "Analyzing table ({{current}}/{{total}})", + "data_sync.progress.stage.applying_changes": "Applying changes", + "data_sync.progress.stage.backend_update": "Progress update", + "data_sync.progress.stage.checking_columns": "Checking column consistency", + "data_sync.progress.stage.clearing_target": "Clearing target table", + "data_sync.progress.stage.collection_completed": "Collection processing completed", + "data_sync.progress.stage.comparing_diff": "Comparing differences", + "data_sync.progress.stage.completed": "Sync completed", + "data_sync.progress.stage.connecting_source": "Connecting to source database", + "data_sync.progress.stage.connecting_target": "Connecting to target database", + "data_sync.progress.stage.creating_indexes": "Creating indexes", + "data_sync.progress.stage.creating_target_collection": "Creating target collection", + "data_sync.progress.stage.creating_target_table": "Creating target table", + "data_sync.progress.stage.executing": "Executing", + "data_sync.progress.stage.failed": "Sync failed", + "data_sync.progress.stage.migrating_collection": "Migrating collection ({{current}}/{{total}})", + "data_sync.progress.stage.migrating_key": "Migrating Key ({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_collection_completed": "Collection processing completed", + "data_sync.progress.stage.mongo_redis_migrating_collection": "Migrating collection ({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_started": "MongoDB to Redis keyspace migration started", + "data_sync.progress.stage.mongodb_keyspace_started": "MongoDB keyspace migration started", + "data_sync.progress.stage.preparing": "Preparing", + "data_sync.progress.stage.reading_source": "Reading source table data", + "data_sync.progress.stage.reading_target": "Reading target table data", + "data_sync.progress.stage.redis_keyspace_started": "Redis keyspace migration started", + "data_sync.progress.stage.redis_mongo_creating_collection": "Creating target collection", + "data_sync.progress.stage.redis_mongo_migrating_key": "Migrating Key ({{current}}/{{total}})", + "data_sync.progress.stage.redis_mongo_started": "Redis to MongoDB keyspace migration started", + "data_sync.progress.stage.sync_started": "Sync started", + "data_sync.progress.stage.syncing_schema": "Syncing table schema", + "data_sync.progress.stage.syncing_table": "Syncing table ({{current}}/{{total}})", + "data_sync.progress.stage.table_completed": "Table processing completed", + "data_sync.query_mode.help": "Enter source query SQL and select one target table. Difference analysis compares this result set directly with the target table.", + "data_sync.result.completed": "Sync Completed", + "data_sync.result.failed": "Sync Failed", + "data_sync.result.failed_description": "Sync did not complete.", + "data_sync.result.failed_detail": "Sync failed: {{detail}}", + "data_sync.result.running": "Sync Running", + "data_sync.result.running_description": "Current stage: {{stage}}{{table}}", + "data_sync.result.success_summary": "Successfully synced {{tables}} tables. Inserted: {{inserted}}, updated: {{updated}}", + "data_sync.result.table_suffix": ", table: {{table}}", + "data_sync.schema_inference.mongo_relational_issue": "Structure analysis for {{sourceType}} -> {{targetType}} is still under development; only a migration-planning notice is available now.", + "data_sync.schema_inference.mongo_relational_resolution": "Future iterations will generate column definitions and type-degradation policies from sampled data.", + "data_sync.schema_sync.error.create_statement_empty": "Create-table statement is empty", + "data_sync.schema_sync.error.create_target_table_failed": "Failed to create target table {{table}}: {{detail}}", + "data_sync.schema_sync.error.get_columns_after_create_failed": "Failed to get columns after creating target table {{table}}: {{detail}}", + "data_sync.schema_sync.error.get_create_statement_failed": "Failed to get create-table statement for source table {{table}}: {{detail}}", + "data_sync.schema_sync.error.get_source_columns_failed": "Failed to get source table {{table}} columns: {{detail}}", + "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "Target table {{table}} is missing, and source type {{sourceType}} does not support automatic table creation yet: {{detail}}", + "data_sync.schema_sync.log.add_column_failed": "Failed to add column: table={{table}}, column={{column}}, error={{detail}}", + "data_sync.schema_sync.log.column_added": "Column added: table={{table}}, column={{column}}, type={{type}}", + "data_sync.schema_sync.log.completed": "Schema sync completed for {{table}}; added {{count}} column(s)", + "data_sync.schema_sync.log.schema_aligned": "Table schema is aligned: {{table}}", + "data_sync.schema_sync.log.target_created": "Target table created successfully: {{table}}", + "data_sync.schema_sync.log.target_missing_create": "Target table {{table}} is missing; attempting to create table schema", + "data_sync.schema_sync.warning.target_unsupported": "Target database type={{targetType}} does not support schema sync yet; table {{table}} was skipped", + "data_sync.section.migration_options": "Migration Options", + "data_sync.section.source_database": "Source Database", + "data_sync.section.sync_options": "Sync Options", + "data_sync.section.target_database": "Target Database", + "data_sync.step.configure": "Configure Source and Target", + "data_sync.step.result": "Execution Result", + "data_sync.step.select_tables": "Select Tables", + "data_sync.table_picker.help": "Select tables to sync:", + "data_sync.table_picker.item_unit": "item", + "data_sync.table_picker.items_unit": "items", + "data_sync.table_picker.not_found": "No data", + "data_sync.table_picker.search_placeholder": "Search tables...", + "data_sync.table_picker.selected_title": "Selected Tables", + "data_sync.table_picker.show_same": "Show Same Tables", + "data_sync.table_picker.source_title": "Source Tables", + "data_sync.table.delete": "Delete", + "data_sync.table.insert": "Insert", + "data_sync.table.plan": "Plan", + "data_sync.table.preview": "Preview", + "data_sync.table.risk": "Risk", + "data_sync.table.same": "Same", + "data_sync.table.table_name": "Table", + "data_sync.table.target_exists": "Exists", + "data_sync.table.target_missing": "Missing", + "data_sync.table.target_table": "Target Table", + "data_sync.table.update": "Update", + "data_sync.title.compare_result": "Comparison Result", + "data_sync.title.execution_log": "Execution Log", + "data_sync.title.migration": "Cross-Database Migration", + "data_sync.title.migration_description": "Create tables, import data, and run risk prechecks from source to target.", + "data_sync.title.migration_options": "Migration Options", + "data_sync.title.migration_workbench": "Cross-Database Migration Workbench", + "data_sync.title.source_database": "Source Database", + "data_sync.title.sync": "Data Sync", + "data_sync.title.sync_description": "Compare differences, execute sync, and confirm results against existing target tables.", + "data_sync.title.sync_options": "Sync Options", + "data_sync.title.sync_workbench": "Data Sync Workbench", + "data_sync.title.target_database": "Target Database", + "data_sync.transfer.empty": "No data", + "data_sync.transfer.item_unit": "item", + "data_sync.transfer.items_unit": "items", + "data_sync.transfer.search_placeholder": "Search tables...", + "data_sync.transfer.selected_tables": "Selected Tables", + "data_sync.transfer.source_tables": "Source Tables", + "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "Source ORDER BY/PARTITION/TTL/Projection/materialized-view semantics are not automatically migrated to TDengine yet", + "data_sync.unsupported.mongo_index_columns_missing": "Index {{name}} has no column definition and was skipped", + "data_sync.unsupported.mongo_index_create_command_failed": "Failed to generate MongoDB createIndexes command for index {{name}}: {{detail}}", + "data_sync.unsupported.mongo_index_prefix_length": "Index {{name}} uses a prefix length; equivalent migration to MongoDB is not supported yet", + "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "Source indexes, foreign keys, triggers, unique constraints, and auto-increment semantics are not automatically migrated to TDengine yet", + "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "Source indexes, foreign keys, triggers, unique constraints, identity, and sequence semantics are not automatically migrated to TDengine yet", + "data_sync.unsupported.tdengine_source_relational_semantics": "TDengine indexes, foreign keys, triggers, supertables, TTL, and other time-series semantics are not automatically migrated yet", + "data_sync.unsupported.tdengine_target_missing_timestamp": "TDengine regular table first column must be TIMESTAMP; the current source table has no directly mappable time column", + "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "Source supertable, TAGS, TTL, retention policy, and index semantics are not automatically migrated to TDengine regular table yet", + "data_sync.validation.query_mode_data_only": "SQL result-set sync supports data-only sync", + "data_sync.validation.single_target_table_required": "SQL result-set sync requires exactly one target table", + "data_sync.validation.source_query_required": "Enter source query SQL", + "data_sync.validation.table_required": "Select at least one table", + "data_sync.warning.mongo_field_mixed_bson_types": "Field {{field}} contains multiple BSON value types and was degraded to a compatible type", + "data_sync.warning.mongo_index_type_normalized": "Index {{name}} type={{type}} will be migrated to MongoDB as a regular index", + "data_sync.warning.mongo_source_collection_index_read_failed": "Failed to read source MongoDB collection indexes; index migration was skipped: {{detail}}", + "data_sync.warning.mongo_source_empty_sample_id_only": "The source MongoDB collection has no sample data; only a basic primary-key column is generated from `_id`", + "data_sync.warning.mongo_source_primary_key_missing": "No stable primary key was inferred from the source MongoDB collection; the target table will not create a primary key automatically", + "data_sync.warning.mongo_source_table_index_read_failed": "Failed to read source table indexes; index migration was skipped: {{detail}}", + "data_sync.warning.mongo_target_collection_existing_only_required": "The current strategy requires the target MongoDB collection to exist, so it will not be created automatically at execution", + "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB is a weak-schema target; field structure follows written documents, and target column checks are not run", + "data_sync.warning.target_exists_strategy_no_auto_create": "The current strategy requires the target table to exist, so it will not be created automatically at execution.", + "data_sync.warning.target_missing_columns": "Target table is missing {{count}} column(s): {{columns}}", + "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "TDengine sources do not automatically add columns to an existing target table yet; confirm the target schema first", + "data_sync.warning.tdengine_source_mysql_type_fallback": "Column {{column}} type {{type}} has no dedicated MySQL mapping and was degraded to {{targetType}}", + "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "Column {{column}} type {{type}} was mapped to {{targetType}} to avoid unsigned overflow", + "data_sync.warning.tdengine_source_pglike_type_fallback": "Column {{column}} type {{type}} has no dedicated PG-like mapping and was degraded to {{targetType}}", + "data_sync.warning.tdengine_source_semantics_degraded": "TDengine to relational targets currently migrates only columns and data; supertable, TAG association, retention policy, and other time-series semantics may be degraded or lost", + "data_sync.warning.tdengine_source_tag_column_degraded": "Column {{column}} is a TDengine TAG column and will be degraded to a regular column in the relational target", + "data_sync.warning.tdengine_source_tag_column_mapped": "Column {{column}} is a TDengine TAG column and was mapped as a regular column", + "data_sync.warning.tdengine_target_auto_create_basic_table_only": "TDengine target auto-create currently creates only a basic table; indexes, foreign keys, triggers, supertable/TAGS/TTL are not migrated automatically", + "data_sync.warning.tdengine_target_auto_increment_not_migrated": "Column {{column}} auto-increment semantics are not migrated to TDengine", + "data_sync.warning.tdengine_target_binary_type_fallback": "Column {{column}} type {{type}} was degraded to {{targetType}} by string semantics", + "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "Column {{column}} type {{type}} was promoted to the first TDengine TIMESTAMP column", + "data_sync.warning.tdengine_target_empty_type_fallback": "Column {{column}} type is empty and was degraded to {{targetType}}", + "data_sync.warning.tdengine_target_enum_type_fallback": "Column {{column}} enum type {{type}} was degraded to {{targetType}}", + "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "TDengine targets do not automatically add columns to an existing target table yet; confirm the target schema first", + "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "Column {{column}} FixedString length could not be parsed and was degraded to {{targetType}}", + "data_sync.warning.tdengine_target_identity_not_migrated": "Column {{column}} auto-increment/identity semantics are not migrated to TDengine", + "data_sync.warning.tdengine_target_insert_only": "TDengine targets currently support only INSERT writes; update/delete differences will be rejected at execution", + "data_sync.warning.tdengine_target_json_regular_table_fallback": "Column {{column}} type {{type}} does not preserve TAG semantics in TDengine regular table and was degraded to {{targetType}}", + "data_sync.warning.tdengine_target_json_tag_only_fallback": "Column {{column}} type {{type}} was degraded to {{targetType}} because TDengine JSON applies only to TAG", + "data_sync.warning.tdengine_target_missing_time_column": "The source table has no mappable time column, so automatic table creation is unavailable. Prepare the TDengine target table and time column manually before continuing.", + "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "Column {{column}} primary-key semantics are not migrated to TDengine as relational constraints", + "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "Column {{column}} type {{type}} has no dedicated TDengine same-database mapping and was degraded to {{targetType}}", + "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "Column {{column}} is a TDengine TAG column and will be degraded to a regular column after migration to regular table", + "data_sync.warning.tdengine_target_time_only_type_fallback": "Column {{column}} type {{type}} has no stable TDengine time-only mapping and was degraded to {{targetType}}", + "data_sync.warning.tdengine_target_timestamp_column_reordered": "TDengine base tables require the time column first; column {{column}} was moved to the first position", + "data_sync.warning.tdengine_target_type_fallback": "Column {{column}} type {{type}} was degraded to {{targetType}}", + "data_sync.warning.tdengine_target_type_no_mapping_fallback": "Column {{column}} type {{type}} has no dedicated TDengine mapping and was degraded to {{targetType}}", + "data_sync.warning.tdengine_target_user_defined_type_fallback": "Column {{column}} is a user-defined type and was degraded to {{targetType}}", + "data_viewer.message.connection_not_found": "Connection not found", + "data_viewer.message.duckdb_query_timeout": "DuckDB query exceeded the connection timeout and was interrupted. Increase the connection timeout, or reduce the sort/filter scope and retry.", + "data_viewer.message.fetch_data_failed_detail": "Error fetching data: {{detail}}", + "data_viewer.message.mongo_filter_invalid_detail": "MongoDB filter condition is invalid: {{detail}}", + "data_viewer.message.mongo_filter_parse_failed": "Failed to parse", + "data_viewer.message.query_failed": "Query failed", + "data_viewer.message.query_timeout": "Query exceeded the connection timeout and was interrupted. Increase the connection timeout, or reduce the query scope and retry.", + "data_viewer.message.result_not_ready": "Current result set is not ready. Load data once first.", + "data_viewer.message.sort_buffer_retry_succeeded": "Increased the sort buffer automatically, and the query succeeded.", + "data_viewer.message.total_count_failed": "Failed to count total rows", + "data_viewer.message.total_count_failed_detail": "Failed to count total rows: {{detail}}", + "data_viewer.message.total_count_parse_failed": "Failed to parse total count result", "data_viewer.read_only.reason.duckdb_rowid_missing": "No primary key, usable unique index, or DuckDB rowid was found, so changes cannot be submitted safely.", + "data_viewer.read_only.reason.index_metadata_unavailable": "Unique index metadata could not be loaded, so changes cannot be submitted safely.", + "data_viewer.read_only.reason.metadata_unavailable": "Primary key or unique index metadata could not be loaded, so changes cannot be submitted safely.", + "data_viewer.read_only.reason.mongo_id_missing": "MongoDB result set is missing _id, so changes cannot be submitted safely.", + "data_viewer.read_only.reason.no_safe_locator": "No primary key or usable unique index was found, so changes cannot be submitted safely.", + "data_viewer.read_only.reason.oracle_rowid_missing": "No primary key or usable unique index was found, and Oracle ROWID is missing from the result set, so changes cannot be submitted safely.", + "data_viewer.read_only.reason.primary_key_column_missing": "The result set is missing primary key column {{columns}}, so changes cannot be submitted safely.", + "data_viewer.read_only.warning.collection": "Collection {{target}} remains read-only: {{reason}}", + "data_viewer.read_only.warning.table": "Table {{target}} remains read-only: {{reason}}", + "data_viewer.sql_log.phase.complex_type_fallback_retry": "Complex type fallback retry", + "data_viewer.sql_log.phase.main_query": "Main query", + "data_viewer.sql_log.phase.sort_buffer_retry": "Retry ({{size}} sort_buffer)", + "database.label": "Database", + "database.unnamed": "Unnamed Database", "db.backend.action.delete": "Delete", "db.backend.action.update": "Update", "db.backend.error.batch_insert_exec_required": "Execution function is required", @@ -6979,6 +4485,41 @@ "definition_viewer.edit.comment_empty_definition": "The current object definition is empty. Complete the DDL for {{name}} before running it", "definition_viewer.edit.comment_title": "Edit {{object}}: {{name}}", "definition_viewer.edit.tab_title": "Edit {{object}}: {{name}}", + "definition_viewer.editor.event_definition_not_found": "Event definition not found", + "definition_viewer.editor.event_fragment_fallback.header": "The current data source did not return a complete CREATE EVENT statement; an event definition fragment was returned", + "definition_viewer.editor.metadata_fallback.header": "The current data source did not return executable definition text; metadata was returned", + "definition_viewer.editor.metadata_fallback.name_label": "Name", + "definition_viewer.editor.metadata_fallback.type_label": "Type", + "definition_viewer.editor.object_definition_not_found": "{{object}} definition not found", + "definition_viewer.editor.routine_definition_not_found": "Function/procedure definition not found", + "definition_viewer.editor.sphinx.compat_queries_hint": "Multiple compatibility queries were executed. This may be due to version capability limits or an unsupported object type.", + "definition_viewer.editor.sphinx.empty_result": "Current Sphinx instance{{version}} returned no {{object}} definition.", + "definition_viewer.editor.sphinx.failed_message_label": "Returned failure message", + "definition_viewer.editor.sphinx.failed_message_unknown": "Returned failure message: Unknown error", + "definition_viewer.editor.sphinx.unsupported_query": "Current Sphinx instance{{version}} does not support querying {{object}} definitions.", + "definition_viewer.editor.sphinx.version_suffix": " (version: {{version}})", + "definition_viewer.editor.unsupported_event_definition": "This database type does not support viewing event definitions", + "definition_viewer.editor.unsupported_object_definition": "This object definition is not supported", + "definition_viewer.editor.unsupported_routine_definition": "This database type does not support viewing function/procedure definitions", + "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite does not support function/procedure definition management", + "definition_viewer.editor.unsupported_view_definition": "This database type does not support viewing view definitions", + "definition_viewer.editor.view_definition_not_found": "View definition not found", + "definition_viewer.error.connection_not_found": "Database connection not found", + "definition_viewer.error.event_name_empty": "Event name is empty", + "definition_viewer.error.load_failed": "Load failed", + "definition_viewer.error.query_failed": "Failed to query definition", + "definition_viewer.error.query_failed_detail": "Failed to query definition: {{detail}}", + "definition_viewer.error.routine_name_empty": "Function/procedure name is empty", + "definition_viewer.error.view_name_empty": "View name is empty", + "definition_viewer.field.database": "Database", + "definition_viewer.field.type": "Type", + "definition_viewer.loading.event_definition": "Loading event definition...", + "definition_viewer.loading.routine_definition": "Loading function/procedure definition...", + "definition_viewer.loading.view_definition": "Loading view definition...", + "definition_viewer.object.event": "Event", + "definition_viewer.object.materialized_view": "Materialized view", + "definition_viewer.object.routine": "Function/procedure", + "definition_viewer.object.view": "View", "definition_viewer.warning.refresh_latest_failed": "Failed to refresh the latest definition", "dev.perf_data_grid.columns": "Columns", "dev.perf_data_grid.density.comfortable": "Comfortable", @@ -6993,41 +4534,106 @@ "dev.perf_data_grid.ui_version.legacy_short": "Legacy", "dev.perf_data_grid.ui_version.v2": "New UI", "dev.perf_data_grid.ui_version.v2_short": "New", + "driver_manager.action.close": "Close", + "driver_manager.action.import_directory": "Import Driver Directory", + "driver_manager.action.import_package": "Import Driver Package", + "driver_manager.action.install_enable": "Install and Enable", + "driver_manager.action.logs": "Logs", + "driver_manager.action.network_check": "Network Check", + "driver_manager.action.open_directory": "Open Driver Directory", + "driver_manager.action.open_global_proxy_settings": "Open Global Proxy Settings", + "driver_manager.action.refresh": "Refresh", + "driver_manager.action.remove": "Remove", "driver_manager.action.switch_version": "Switch version", + "driver_manager.backend.dialog.select_download_directory": "Select driver download directory", + "driver_manager.backend.dialog.select_package_directory": "Select driver package directory", + "driver_manager.backend.dialog.select_package_file": "Select driver package file (not a JDBC Jar)", + "driver_manager.backend.driver_fallback_name": "driver", "driver_manager.backend.error.agent_hash_failed": "Failed to calculate driver agent checksum: {{detail}}", "driver_manager.backend.error.agent_metadata_unavailable": "{{name}} driver-agent version metadata is unavailable. Install the driver-agent that matches the current version: {{detail}}", "driver_manager.backend.error.agent_path_occupied_by_directory": "{{name}} driver-agent path is occupied by a directory: {{path}}", "driver_manager.backend.error.agent_revision_mismatch": "{{name}} driver-agent revision does not match (installed: {{actual}}, required: {{expected}}). Install the driver-agent that matches the current version.", "driver_manager.backend.error.agent_revision_mismatch_empty_actual": "{{name}} driver-agent revision does not match (installed: empty, required: {{expected}}). Install the driver-agent that matches the current version.", + "driver_manager.backend.error.api_url_empty": "API URL is empty", + "driver_manager.backend.error.asset_name_empty": "Driver asset name is empty", + "driver_manager.backend.error.builtin_download_not_required": "Built-in drivers do not need extension package downloads", + "driver_manager.backend.error.builtin_install_not_required": "Built-in drivers do not need extension package installation", + "driver_manager.backend.error.builtin_package_not_required": "Built-in drivers do not have install packages", + "driver_manager.backend.error.builtin_remove_not_allowed": "Built-in drivers cannot be removed", + "driver_manager.backend.error.builtin_version_not_required": "Built-in drivers do not need version selection", + "driver_manager.backend.error.bundle_download_failed": "Failed to download driver bundle: {{detail}}", "driver_manager.backend.error.bundle_entry_missing": "{{name}} was not found in the driver bundle (expected path: {{path}})", + "driver_manager.backend.error.bundle_index_asset_missing": "Driver bundle index asset was not found", + "driver_manager.backend.error.bundle_index_empty": "Driver bundle index is empty", + "driver_manager.backend.error.bundle_index_fetch_failed": "Failed to fetch driver bundle index: {{detail}}", + "driver_manager.backend.error.bundle_index_parse_failed": "Failed to parse driver bundle index: {{detail}}", + "driver_manager.backend.error.bundle_url_empty": "Driver bundle download URL is empty", "driver_manager.backend.error.bundled_agent_hash_failed": "Failed to calculate bundled {{name}} driver-agent checksum: {{detail}}", + "driver_manager.backend.error.cache_key_empty": "Cache key is empty", "driver_manager.backend.error.chmod_agent_failed": "Failed to set driver agent permissions: {{detail}}", "driver_manager.backend.error.close_agent_file_failed": "Failed to close driver agent file: {{detail}}", "driver_manager.backend.error.copy_bundled_agent_failed": "Failed to copy bundled {{name}} driver-agent: {{detail}}", "driver_manager.backend.error.copy_runtime_dependency_entry_failed": "Failed to copy runtime dependency {{name}}: {{detail}}", "driver_manager.backend.error.copy_runtime_dependency_failed": "Failed to copy {{name}} runtime dependencies: {{detail}}", "driver_manager.backend.error.create_agent_temp_file_failed": "Failed to create driver agent temporary file: {{detail}}", + "driver_manager.backend.error.create_directory_failed": "Failed to create driver directory: {{detail}}", "driver_manager.backend.error.create_named_directory_failed": "Failed to create {{name}} driver directory: {{detail}}", + "driver_manager.backend.error.download_failed": "Download failed: {{detail}}", + "driver_manager.backend.error.download_url_empty": "Download URL is empty", + "driver_manager.backend.error.driver_type_empty": "Driver type is empty", + "driver_manager.backend.error.driver_version_list_fetch_failed": "Failed to fetch driver version list: {{detail}}", + "driver_manager.backend.error.driver_version_list_parse_failed": "Failed to parse driver version list: {{detail}}", "driver_manager.backend.error.driver_version_unsupported": "{{name}} version {{version}} is not supported", "driver_manager.backend.error.extract_runtime_dependency_failed": "Failed to extract runtime dependency {{name}}: {{detail}}", + "driver_manager.backend.error.file_manifest_url_invalid": "Invalid file driver manifest URL", + "driver_manager.backend.error.file_path_empty": "File path is empty", "driver_manager.backend.error.go_not_found_prebuilt_missing": "Go is not installed in the current environment, and no available prebuilt {{name}} agent package was found", "driver_manager.backend.error.import_local_agent_failed": "Failed to import local driver agent: {{detail}}", "driver_manager.backend.error.import_local_agent_runtime_failed": "Failed to import local driver agent runtime dependencies: {{detail}}", "driver_manager.backend.error.install_prebuilt_package_failed": "Failed to install prebuilt driver package: {{detail}}", "driver_manager.backend.error.local_directory_entry_missing": "{{name}} agent file was not found in the directory (preferred path: {{path}}, candidate file names: {{assetCandidates}} / {{baseCandidates}})", "driver_manager.backend.error.local_directory_not_directory": "Local driver directory path is not a directory: {{path}}", + "driver_manager.backend.error.local_directory_path_empty": "Local driver directory path is empty", "driver_manager.backend.error.local_directory_scan_limit": "Local driver directory has too many entries (over {{max}}). Narrow the directory or choose a zip/single file directly.", + "driver_manager.backend.error.local_manifest_url_invalid": "Invalid local driver manifest URL", "driver_manager.backend.error.local_package_entry_missing": "{{name}} agent file was not found in the local driver package (expected path: {{path}})", + "driver_manager.backend.error.local_package_path_empty": "Local driver package path is empty", + "driver_manager.backend.error.manifest_fetch_failed": "Failed to fetch driver manifest: {{detail}}", + "driver_manager.backend.error.manifest_parse_failed": "Failed to parse driver manifest: {{detail}}", + "driver_manager.backend.error.manifest_scheme_unsupported": "Unsupported driver manifest URL scheme: {{scheme}}", + "driver_manager.backend.error.manifest_too_large": "Driver manifest exceeds the size limit", + "driver_manager.backend.error.manifest_url_empty": "Driver manifest URL is empty", "driver_manager.backend.error.metadata_file_write_failed": "Failed to write driver metadata file: {{detail}}", "driver_manager.backend.error.metadata_payload_encode_failed": "Failed to encode driver metadata: {{detail}}", + "driver_manager.backend.error.module_path_empty": "Module path is empty", + "driver_manager.backend.error.module_version_list_empty": "Module version list is empty", + "driver_manager.backend.error.module_version_list_fetch_failed": "Failed to fetch module version list: {{detail}}", + "driver_manager.backend.error.module_version_list_read_failed": "Failed to read module version list: {{detail}}", + "driver_manager.backend.error.mongo_version_unsupported": "MongoDB version {{version}} is not supported; only 1.17.x and 2.x are supported", "driver_manager.backend.error.named_agent_hash_failed": "Failed to calculate {{name}} driver agent checksum: {{detail}}", "driver_manager.backend.error.named_chmod_agent_failed": "Failed to set {{name}} driver agent permissions: {{detail}}", + "driver_manager.backend.error.no_driver_versions": "No available driver versions were found", + "driver_manager.backend.error.open_bundle_failed": "Failed to open driver bundle: {{detail}}", + "driver_manager.backend.error.open_directory_failed": "Failed to open driver directory: {{detail}}", + "driver_manager.backend.error.open_directory_unsupported": "Opening directories is not supported on this platform: {{platform}}", + "driver_manager.backend.error.open_local_package_failed": "Failed to open local driver package: {{detail}}", + "driver_manager.backend.error.optional_go_only": "Only optional Go drivers can be installed and enabled here", + "driver_manager.backend.error.package_size_unsupported": "This driver does not support install package size queries", + "driver_manager.backend.error.prebuilt_downloads_failed": "Prebuilt package download failed: {{detail}}", + "driver_manager.backend.error.read_bundle_entry_failed": "Failed to read driver bundle entry: {{detail}}", + "driver_manager.backend.error.read_local_directory_failed": "Failed to read local driver directory: {{detail}}", + "driver_manager.backend.error.read_local_package_entry_failed": "Failed to read local driver package entry: {{detail}}", + "driver_manager.backend.error.read_local_package_failed": "Failed to read local driver package: {{detail}}", + "driver_manager.backend.error.release_empty": "Release is empty", + "driver_manager.backend.error.release_info_fetch_failed": "Failed to fetch Release information: {{detail}}", "driver_manager.backend.error.remove_installed_agent_failed": "Failed to remove installed {{name}} driver-agent: {{detail}}", + "driver_manager.backend.error.remove_package_failed": "Failed to remove driver package: {{detail}}", "driver_manager.backend.error.replace_agent_failed": "Failed to replace driver agent: {{detail}}", "driver_manager.backend.error.runtime_dependency_directory_empty": "Runtime dependency directory is empty", "driver_manager.backend.error.runtime_dependency_entry_missing": "Driver package is missing runtime dependency: {{name}}", "driver_manager.backend.error.runtime_dependency_required": "{{name}} requires bundled runtime dependencies on the current platform ({{files}}); single-file agent installation is not supported. Use the driver bundle, a dedicated driver zip, or a local source build.", "driver_manager.backend.error.runtime_dependency_target_directory_empty": "Runtime dependency target directory is empty", + "driver_manager.backend.error.scan_local_directory_failed": "Failed to scan local driver directory: {{detail}}", "driver_manager.backend.error.source_build_command_failed": "Failed to build the {{name}} driver agent: {{detail}}; output: {{output}}", "driver_manager.backend.error.source_build_duckdb_windows_cgo_toolchain_prepare_failed": "Failed to prepare DuckDB Windows CGO toolchain: {{detail}}", "driver_manager.backend.error.source_build_duckdb_windows_dlltool_resolve_failed": "Failed to locate DuckDB Windows dlltool: {{detail}}", @@ -7036,6 +4642,7 @@ "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found": "No usable gcc.exe/g++.exe was found; {{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found_with_checked": "No usable gcc.exe/g++.exe was found. Checked: {{checked}}; {{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_toolchain_install_hint": "Please install the MSYS2 UCRT64 toolchain first: winget install --id MSYS2.MSYS2 -e; then run C:\\msys64\\usr\\bin\\bash.exe -lc \"pacman -S --needed --noconfirm mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-binutils\"", + "driver_manager.backend.error.source_build_failed": "Local source build failed: {{detail}}", "driver_manager.backend.error.source_build_go_mod_read_failed": "Failed to read go.mod: {{detail}}", "driver_manager.backend.error.source_build_module_dependency_missing": "Driver dependency was not found in go.mod: {{modulePath}}", "driver_manager.backend.error.source_build_module_or_version_empty": "Driver module path or version is empty", @@ -7047,53 +4654,297 @@ "driver_manager.backend.error.source_build_timeout": "Building the {{name}} driver agent timed out (over {{timeout}}). Prefer a prebuilt driver package or local driver package import.", "driver_manager.backend.error.source_build_workdir_unavailable": "Failed to get current directory: {{detail}}", "driver_manager.backend.error.sync_agent_failed": "Failed to flush driver agent to disk: {{detail}}", + "driver_manager.backend.error.tag_empty": "Tag is empty", + "driver_manager.backend.error.unknown": "Unknown error", + "driver_manager.backend.error.unsupported_driver_type": "Unsupported driver type", + "driver_manager.backend.error.version_empty": "Version is empty", "driver_manager.backend.error.write_agent_failed": "Failed to write driver agent: {{detail}}", "driver_manager.backend.error.zip_entry_empty": "Zip entry is empty", + "driver_manager.backend.message.download_failed_detail": "Failed to download and install driver: {{detail}}", + "driver_manager.backend.message.driver_install_success": "Driver installed successfully", + "driver_manager.backend.message.jdbc_jar_unsupported": "Importing JDBC Jar files directly is not supported. GoNavi uses Go drivers and optional driver-agent packages; use a driver package or driver directory instead. To connect to Kingbase, prefer the Kingbase connection type or enter kingbase / kingbase8 in a custom connection.", + "driver_manager.backend.message.local_import_failed_detail": "Failed to import local driver package: {{detail}}", + "driver_manager.backend.message.log_hint": " (detail log: {{path}})", + "driver_manager.backend.message.metadata_write_failed_detail": "Failed to write driver metadata: {{detail}}", + "driver_manager.backend.message.opened_directory": "Opened driver directory: {{path}}", + "driver_manager.backend.message.package_removed": "Driver package removed", + "driver_manager.backend.message.runtime_directory_configured": "Driver runtime directory is configured", + "driver_manager.backend.message.unsupported_builtin_manifest_url": "Unsupported built-in driver manifest URL: {{url}}", + "driver_manager.backend.network.error.probe_host_missing": "Probe URL is missing a host", + "driver_manager.backend.network.error.probe_url_empty": "Probe URL is empty", "driver_manager.backend.network.error.timeout": "Network connection timed out", + "driver_manager.backend.network.probe.github_driver_release": "GitHub driver releases", + "driver_manager.backend.network.probe.github_release_asset_domain": "GitHub Release asset domain", + "driver_manager.backend.network.probe.go_module_proxy": "Go module proxy", + "driver_manager.backend.network.summary.download_chain_unreachable": "GitHub API is reachable, but the driver download chain is unreachable. Enable GoNavi global proxy first, allow github.com, api.github.com, release-assets.githubusercontent.com, objects.githubusercontent.com, and raw.githubusercontent.com in proxy rules, then consider TUN mode if it still fails.", + "driver_manager.backend.package_size.built_in": "Built-in", + "driver_manager.backend.package_size.to_be_published": "To be published", + "driver_manager.backend.progress.fallback.bundle_available": "Direct links are unavailable; falling back to driver bundles ({{name}}, {{bundle}} bundle source remaining)", + "driver_manager.backend.progress.fallback.direct_to_bundle": "Prebuilt direct links did not match; falling back to driver bundles ({{name}}, {{bundle}} bundle source remaining)", + "driver_manager.backend.progress.fallback.explicit_skip_bundle": "Prebuilt direct links did not match; this version only allows explicit assets, skipping driver bundles ({{name}})", + "driver_manager.backend.progress.fallback.source_build": "Release assets did not match; preparing to fall back to a local source build ({{name}})", + "driver_manager.backend.progress.plan.bundle_only": "Preparing to install {{name}} driver agent (version {{version}}); no prebuilt direct link is available, trying {{bundle}} driver bundle source", + "driver_manager.backend.progress.plan.direct_only": "Preparing to install {{name}} driver agent (version {{version}}); try {{direct}} prebuilt direct link first", + "driver_manager.backend.progress.plan.direct_then_bundle": "Preparing to install {{name}} driver agent (version {{version}}); try {{direct}} prebuilt direct link first, then use {{bundle}} driver bundle source", + "driver_manager.backend.progress.plan.explicit_direct": "Preparing to install {{name}} driver agent (version {{version}}); only explicit version assets are allowed, trying {{direct}} prebuilt direct link first", + "driver_manager.backend.progress.plan.source_fallback": "Preparing to install {{name}} driver agent (version {{version}}); fall back to a local source build if release assets do not match", + "driver_manager.backend.progress.plan.source_first": "Preparing to install {{name}} driver agent (version {{version}}); try a local source build first, then continue with download fallback if it fails", + "driver_manager.backend.progress.plan.source_only": "Preparing to install {{name}} driver agent (version {{version}}); this version only allows local source builds", + "driver_manager.backend.status.affected_connections": "Affects {{count}} saved connections", + "driver_manager.backend.status.agent_arch_incompatible_detail": "{{name}} driver agent architecture is incompatible: file={{file}}, current process={{process}}; reinstall and enable it in Driver Manager.", + "driver_manager.backend.status.agent_missing": "{{name}} driver agent is missing; reinstall and enable it in Driver Manager.", + "driver_manager.backend.status.agent_path_failed": "{{name}} driver agent path could not be resolved; reinstall and enable it in Driver Manager.", "driver_manager.backend.status.agent_revision_update_detail": "Reason: the current GoNavi version requires the updated {{name}} driver-agent (revision: {{expected}}). Impact: the driver-agent is a standalone binary and is not updated automatically with the main app. Without reinstalling, the old agent logic will continue to run, so driver-side fixes or optimizations will not take effect and old-version issues may continue. Strongly recommend reinstalling the matching driver-agent.", "driver_manager.backend.status.agent_revision_update_detail_with_actual": "Reason: the current GoNavi version requires the updated {{name}} driver-agent (revision: {{expected}}). Impact: the driver-agent is a standalone binary and is not updated automatically with the main app. Without reinstalling, the old agent logic will continue to run, so driver-side fixes or optimizations will not take effect and old-version issues may continue. Strongly recommend reinstalling the matching driver-agent (installed marker: {{actual}}, required: {{expected}}).", + "driver_manager.backend.status.agent_unavailable_reinstall": "{{name}} driver agent is unavailable: {{detail}}; reinstall and enable it in Driver Manager.", + "driver_manager.backend.status.built_in_available": "Built-in driver is ready to connect", + "driver_manager.backend.status.expected_revision": "expected revision {{revision}}.", + "driver_manager.backend.status.installed_pending": "Driver is installed and pending activation", + "driver_manager.backend.status.installed_pending_with_version": "Driver is installed (version: {{version}}) and pending activation", + "driver_manager.backend.status.installed_revision": "installed revision {{revision}}.", "driver_manager.backend.status.mongodb_compatibility_update_detail": "Reason: the recommended MongoDB compatibility driver version is {{recommended}}, and the installed version is {{installed}}. Impact: MongoDB 2.x driver-agent uses the official v2 driver and requires MongoDB server 4.2+; connecting to MongoDB 4.0 can hit the wire version 7 incompatibility. Strongly recommend reinstalling the matching driver-agent.", + "driver_manager.backend.status.needs_update": "Reinstall required to apply driver updates.", + "driver_manager.backend.status.optional_disabled": "{{name}} Go driver is not enabled; install and enable it in Driver Manager.", + "driver_manager.backend.status.optional_disabled_generic": "Not enabled", + "driver_manager.backend.status.optional_disabled_with_version": "Not enabled (version: {{version}})", + "driver_manager.backend.status.optional_enabled": "Go driver is enabled and ready to connect", + "driver_manager.backend.status.slim_build_required": "{{name}} is not included in the current slim build. Install the Full edition to use this driver.", + "driver_manager.backend.status.unrecognized_driver_type": "Unrecognized data source type", + "driver_manager.backend.version.latest_suffix": " (latest)", + "driver_manager.backend.version.recommended_suffix": " (recommended)", + "driver_manager.backend.version.unlabeled": "Unlabeled version", + "driver_manager.column.actions": "Actions", + "driver_manager.column.data_source": "Data Source", + "driver_manager.column.package_size": "Package Size", + "driver_manager.column.progress": "Install Progress", + "driver_manager.column.status": "Status", + "driver_manager.column.version": "Driver Version", + "driver_manager.description.install_required": "Except for MySQL / Redis / Oracle / PostgreSQL, data sources must be installed and enabled before connecting.", + "driver_manager.directory_info.details_label": "View driver directory and reuse notes", + "driver_manager.directory_info.log_file": "Runtime log file: {{path}}", + "driver_manager.directory_info.reuse_help": "Automatically downloaded and manually imported drivers are stored in this directory. Downloaded drivers can be reused for later version upgrades.", + "driver_manager.directory_info.root_dir": "Driver root directory: {{path}}", + "driver_manager.directory_info.title": "Driver Directory and Reuse Notes", + "driver_manager.empty.default": "No driver data", + "driver_manager.empty.search": "No driver matches \"{{keyword}}\"", + "driver_manager.filter_summary.match": "Matched {{filtered}} / {{total}}", + "driver_manager.filter_summary.total": "{{total}} drivers", + "driver_manager.import.directory_help": "If the in-app download route fails, manually download the driver package to this directory first, then use \"Import driver package\" or \"Import driver directory\" to complete installation.", + "driver_manager.import.single_file_help": "Inline \"Import Driver Package\" only supports a single driver file or bundle, such as `mariadb-driver-agent`, `mariadb-driver-agent.exe`, or `GoNavi-DriverAgents.zip`. It does not import a JDBC Jar directly; use \"Import Driver Directory\" above for batch import.", + "driver_manager.local_source.directory": "directory", + "driver_manager.local_source.file": "file", + "driver_manager.log_modal.empty": "This driver has no operation logs yet.", + "driver_manager.log_modal.executable_path": "Driver executable: {{path}}", + "driver_manager.log_modal.install_dir": "Install directory: {{path}}", + "driver_manager.log_modal.title": "Driver Logs - {{name}}", + "driver_manager.log.done_auto_install": "Automatic installation completed{{version}}", + "driver_manager.log.done_local_import": "Local import installation completed{{version}}", + "driver_manager.log.done_remove": "Driver removal completed", + "driver_manager.log.force_overwrite_reinstall": "Overwrite installed mode is enabled; reinstall import will run", + "driver_manager.log.progress_line": "[{{status}}] {{message}} ({{percent}}%)", + "driver_manager.log.skip_installed_dedupe": "Driver is already installed; skipped by directory import dedupe", + "driver_manager.log.skip_slim_build": "Current release package is a slim build; directory import skipped", + "driver_manager.log.start_auto_install": "Starting automatic installation", + "driver_manager.log.start_local_import": "Starting local import{{version}} ({{source}}): {{path}}", + "driver_manager.log.start_remove": "Starting driver removal", + "driver_manager.message.directory_import_completed": "Directory import completed{{mode}}: {{success}} succeeded{{skip}}", + "driver_manager.message.directory_import_completed_with_failure": "Directory import completed{{mode}}: {{success}} succeeded, {{failed}} failed{{skip}}", + "driver_manager.message.directory_import_failed": "Directory import failed{{mode}}: {{failed}} failed{{skip}}", + "driver_manager.message.install_failed": "Failed to install {{name}}", + "driver_manager.message.install_failed_detail": "Failed to install {{name}}: {{detail}}", "driver_manager.message.install_failed_fallback": "Failed to install {{name}}", + "driver_manager.message.install_start": "Starting installation", + "driver_manager.message.install_success": "{{name}}{{version}} installed and enabled", "driver_manager.message.install_watchdog_timeout": "Installing {{name}} has not completed after {{minutes}} minutes. The background task may still be downloading or building. Refresh the status later; if this repeats, check the proxy or import a local driver package.", + "driver_manager.message.load_status_failed": "Failed to load driver status", + "driver_manager.message.load_status_failed_detail": "Failed to load driver status: {{detail}}", + "driver_manager.message.load_version_failed": "Failed to load version list for {{name}}", + "driver_manager.message.load_version_failed_detail": "Failed to load version list for {{name}}: {{detail}}", + "driver_manager.message.local_directory_required": "Select a valid driver package directory", + "driver_manager.message.local_file_required": "Select a valid driver package file", + "driver_manager.message.local_import_failed": "Failed to import local driver package for {{name}}", + "driver_manager.message.local_import_failed_detail": "Failed to import local driver package for {{name}}: {{detail}}", + "driver_manager.message.local_import_start": "Starting local driver package import", + "driver_manager.message.local_import_success": "{{name}}{{version}} local driver package installed and enabled", + "driver_manager.message.local_path_required": "Select a valid local import {{source}}", + "driver_manager.message.network_check_completed": "Driver network check completed", + "driver_manager.message.network_check_failed": "Driver network check failed", + "driver_manager.message.network_check_failed_detail": "Driver network check failed: {{detail}}", + "driver_manager.message.no_external_drivers_to_import": "There are no external drivers to import", + "driver_manager.message.open_directory_failed": "Failed to open driver directory", + "driver_manager.message.open_directory_failed_detail": "Failed to open driver directory: {{detail}}", + "driver_manager.message.overwrite_suffix": " (overwrite installed)", + "driver_manager.message.remove_failed": "Failed to remove {{name}}", + "driver_manager.message.remove_failed_detail": "Failed to remove {{name}}: {{detail}}", + "driver_manager.message.remove_success": "{{name}} removed", + "driver_manager.message.select_local_directory_failed": "Failed to select local driver package directory", + "driver_manager.message.select_local_directory_failed_detail": "Failed to select local driver package directory: {{detail}}", + "driver_manager.message.select_local_file_failed": "Failed to select local driver package file", + "driver_manager.message.select_local_file_failed_detail": "Failed to select local driver package file: {{detail}}", + "driver_manager.message.skip_suffix": ", {{items}}", + "driver_manager.message.skip.dedupe": "{{count}} dedupe skipped", + "driver_manager.message.skip.slim": "{{count}} slim-build skipped", + "driver_manager.network.alert.download_chain_unreachable": "Important: driver download route domains are unreachable", + "driver_manager.network.alert.download_network_unreachable": "Important: driver download network is unreachable", + "driver_manager.network.chain_alert.allow_hosts": "If it still fails, allow these hosts in the proxy rules: {{hosts}}. If the rules cannot be adjusted, consider enabling TUN mode.", + "driver_manager.network.chain_alert.description": "You may be able to open GitHub pages, but driver package downloads redirect to asset domains. Enable the global proxy from the GoNavi top \"Proxy\" entry first, using the local address and port of your proxy app.", + "driver_manager.network.checking": "Checking driver download network...", + "driver_manager.network.details_label": "View network check details", + "driver_manager.network.error_value": ", {{detail}}", + "driver_manager.network.github_latency": "Proxy route to GitHub connectivity latency: {{status}}{{latency}}{{detail}}", + "driver_manager.network.latency_value": ", {{latency}}ms", + "driver_manager.network.no_proxy_env": "No system proxy environment variables detected.", + "driver_manager.network.no_result": "no result", + "driver_manager.network.not_checked": "Network check has not completed", + "driver_manager.network.proxy_env_detected": "Detected proxy environment variables: {{keys}}", + "driver_manager.network.reachable": "reachable", + "driver_manager.network.summary.download_chain_unreachable": "GitHub API is reachable, but driver download asset domains are not reachable.", + "driver_manager.network.summary.proxy_recommended": "Some driver download endpoints are unreachable. Configure an HTTP/HTTPS/SOCKS5 proxy before installing drivers.", + "driver_manager.network.summary.reachable": "Driver download network is available. You can install drivers directly.", + "driver_manager.network.summary.reachable_with_proxy": "Driver download network is available through the configured proxy.", + "driver_manager.network.summary.unreachable": "Some driver download endpoints are unreachable. Check your network and retry.", + "driver_manager.network.summary.unreachable_proxy_configured": "Some driver download endpoints are unreachable. Check that the configured proxy is working and retry.", + "driver_manager.network.unreachable": "unreachable", + "driver_manager.option.force_overwrite_installed": "Overwrite installed", "driver_manager.package_size.built_in": "Built-in", "driver_manager.package_size.pending_release": "Pending release", + "driver_manager.progress.agent_install_done": "{{name}} driver agent installation completed", + "driver_manager.progress.agent_install_start": "Starting {{name}} driver agent installation", + "driver_manager.progress.backend_detail": "Backend detail: {{detail}}", + "driver_manager.progress.backend_empty": "No backend progress detail", + "driver_manager.progress.dev_build_fallback": "No prebuilt package matched; trying development local build", + "driver_manager.progress.download_bundle": "Downloading {{name}} driver bundle", + "driver_manager.progress.download_prebuilt_agent": "Downloading prebuilt {{name}} driver agent", "driver_manager.progress.download_prebuilt_package": "Downloading prebuilt {{name}} driver package", + "driver_manager.progress.extract_agent_from_bundle": "Extracting {{name}} agent from driver bundle", + "driver_manager.progress.fallback.bundle_available": "Direct link unavailable; switching to driver bundle fallback ({{name}}, {{bundle}} bundle sources remaining)", + "driver_manager.progress.fallback.direct_to_bundle": "Prebuilt direct links did not match; switching to driver bundle fallback ({{name}}, {{bundle}} bundle sources remaining)", + "driver_manager.progress.fallback.explicit_skip_bundle": "Prebuilt direct links did not match; explicit assets only, skipping driver bundles ({{name}})", + "driver_manager.progress.fallback.source_build": "Release assets did not match; preparing local source build fallback ({{name}})", + "driver_manager.progress.install_start": "Starting installation", + "driver_manager.progress.local_package_done": "Local driver package import completed", + "driver_manager.progress.local_package_start": "Starting local driver package installation", + "driver_manager.progress.metadata_write": "Writing driver metadata", + "driver_manager.progress.plan.bundle_only": "Preparing {{name}} driver agent installation (version {{version}}); no prebuilt direct links, trying {{bundle}} driver bundle sources", + "driver_manager.progress.plan.direct_only": "Preparing {{name}} driver agent installation (version {{version}}); trying {{direct}} prebuilt direct links", + "driver_manager.progress.plan.direct_then_bundle": "Preparing {{name}} driver agent installation (version {{version}}); trying {{direct}} prebuilt direct links, then {{bundle}} driver bundle sources", + "driver_manager.progress.plan.explicit_direct": "Preparing {{name}} driver agent installation (version {{version}}); explicit version assets only, trying {{direct}} prebuilt direct links", "driver_manager.progress.plan.require_source_first": "Preparing {{name}} driver agent installation (version {{version}}); development build uses local source only and will not fall back to release packages", + "driver_manager.progress.plan.source_fallback": "Preparing {{name}} driver agent installation (version {{version}}); will fall back to local source build if release assets do not match", + "driver_manager.progress.plan.source_first": "Preparing {{name}} driver agent installation (version {{version}}); trying local source build first, then download fallback", + "driver_manager.progress.plan.source_only": "Preparing {{name}} driver agent installation (version {{version}}); this version only allows local source builds", + "driver_manager.progress.pure_go_enabled": "Installation completed; pure Go driver enabled", + "driver_manager.progress.source_build_preferred": "Using local source build first for {{name}} driver agent", + "driver_manager.progress.status.done": "DONE", + "driver_manager.progress.status.downloading": "DOWNLOADING", + "driver_manager.progress.status.error": "ERROR", + "driver_manager.progress.status.start": "START", + "driver_manager.progress.status.unknown": "UNKNOWN", + "driver_manager.progress.unzip_agent": "Extracting {{name}} driver agent", "driver_manager.progress.wait_bundle": "Waiting for {{name}} driver bundle download to finish", + "driver_manager.punctuation.list_separator": ", ", + "driver_manager.search.built_in": "built-in", + "driver_manager.search.external": "external", + "driver_manager.search.placeholder": "Search driver name/type, such as DuckDB or clickhouse", + "driver_manager.status.built_in_available": "Built-in available", + "driver_manager.status.calculating": "Calculating...", + "driver_manager.status.disabled": "Disabled", + "driver_manager.status.enabled": "Enabled", + "driver_manager.status.full_required": "Full edition required", + "driver_manager.status.installed": "Installed", + "driver_manager.status.installing_percent": "Installing {{percent}}%", + "driver_manager.title": "Driver Manager", "driver_manager.version.current_fallback": "current version", + "driver_manager.version.default": "Default version", + "driver_manager.version.group.other": "Other", + "driver_manager.version.group.year": "{{year}}", + "driver_manager.version.inline_suffix": " ({{version}})", "driver_manager.version.installed": "Installed{{suffix}}", + "driver_manager.version.installed_locked": "Installed (remove it to change)", + "driver_manager.version.installed_locked_with_version": "{{version}} (installed; remove it to change)", "driver_manager.version.installed_with_version": "{{version}} (installed{{suffix}})", "driver_manager.version.latest_suffix": " (latest)", + "driver_manager.version.mongodb_hint": "Currently only MongoDB 1.17.x and 2.x are supported. Older 1.x versions are not available for installation.", "driver_manager.version.needs_reinstall_suffix": ", reinstall required", + "driver_manager.version.placeholder.load_on_expand": "Expand to load versions", + "driver_manager.version.placeholder.select": "Select driver version", "driver_manager.version.recommended_suffix": " (recommended)", "driver_manager.version.switch_pending": "Currently installed {{installedVersion}}; selected {{targetVersion}}. Click \"Switch version\" to apply.", "driver_manager.version.target_fallback": "target version", "driver_manager.version.unlabeled": "Unlabeled version", + "driver.guidance.customConnectionDriverHelp": "Supported: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase; aliases include postgresql/pgx, open_gauss/open-gauss, dm8, kingbase8/kingbasees/kingbasev8. Enter a Go database/sql driver name already registered by GoNavi. Do not enter a system ODBC/JDBC driver name directly or import a JDBC Jar.", + "file.backend.dialog.export_connections": "Export connections", + "file.backend.dialog.export_data": "Export data", + "file.backend.dialog.export_database_sql": "Export {{database}} (SQL)", + "file.backend.dialog.export_query_result": "Export query result", + "file.backend.dialog.export_table": "Export {{table}}", + "file.backend.dialog.export_tables_sql": "Export tables (SQL)", + "file.backend.dialog.import_data": "Import into {{table}}", "file.backend.dialog.select_ca_server_certificate_file": "Select CA/server certificate file", "file.backend.dialog.select_client_certificate_file": "Select client certificate file", "file.backend.dialog.select_client_private_key_file": "Select client private key file", + "file.backend.dialog.select_config_file": "Select config file", + "file.backend.dialog.select_database_file": "Select database file", + "file.backend.dialog.select_duckdb_file": "Select DuckDB data file", + "file.backend.dialog.select_sql_directory": "Select SQL directory", + "file.backend.dialog.select_sql_file": "Select SQL file", + "file.backend.dialog.select_sqlite_file": "Select SQLite data file", + "file.backend.dialog.select_ssh_key_file": "Select SSH private key file", "file.backend.dialog.select_tls_certificate_file": "Select TLS certificate file", "file.backend.error.app_log_file_not_found": "GoNavi log file was not found", + "file.backend.error.batch_commit_unsupported": "Current database type does not support batch commit", + "file.backend.error.connection_export_file_too_large": "Connection export file is too large", + "file.backend.error.connection_import_file_too_large": "Connection import file is too large", + "file.backend.error.connection_package_decrypt_failed": "File password is incorrect or the file is corrupted", + "file.backend.error.connection_package_password_required": "Connection package password cannot be empty", + "file.backend.error.connection_package_payload_too_large": "Connection package payload is too large", + "file.backend.error.connection_package_unsupported": "Unsupported connection package format", "file.backend.error.create_directory_failed": "Unable to create directory: {{detail}}", "file.backend.error.create_sql_file_failed": "Unable to create SQL file: {{detail}}", + "file.backend.error.database_name_required": "Database name cannot be empty", "file.backend.error.delete_sql_directory_failed": "Unable to delete directory: {{detail}} (only empty directories can be deleted)", "file.backend.error.delete_sql_file_failed": "Unable to delete SQL file: {{detail}}", "file.backend.error.directory_exists": "Directory already exists", "file.backend.error.directory_name_no_separator": "Directory name cannot contain path separators", "file.backend.error.directory_name_required": "Directory name cannot be empty", + "file.backend.error.directory_path_required": "Directory path cannot be empty", + "file.backend.error.export_unsupported_format": "Unsupported export format: {{format}}", + "file.backend.error.file_path_empty": "File path is empty", + "file.backend.error.file_path_required": "File path cannot be empty", + "file.backend.error.import_csv_empty_or_missing_header": "CSV is empty or missing a header", + "file.backend.error.import_csv_open_failed": "Unable to open CSV: {{detail}}", + "file.backend.error.import_csv_read_failed": "Unable to read CSV: {{detail}}", + "file.backend.error.import_excel_empty_or_missing_header": "Excel is empty or missing a header", + "file.backend.error.import_excel_no_sheets": "Excel file has no sheets", + "file.backend.error.import_excel_parse_failed": "Unable to parse Excel: {{detail}}", + "file.backend.error.import_excel_read_failed": "Unable to read Excel: {{detail}}", + "file.backend.error.import_file_empty": "File path cannot be empty", + "file.backend.error.import_json_parse_failed": "Unable to parse JSON: {{detail}}", + "file.backend.error.import_json_root_not_array": "JSON root must be array", + "file.backend.error.import_unsupported_format": "Unsupported file format", + "file.backend.error.invalid_export_mode": "Invalid export mode", + "file.backend.error.mysql_workbench_no_connections": "No valid connection profiles were found in the XML", + "file.backend.error.mysql_workbench_parse_failed": "Failed to parse MySQL Workbench XML: {{detail}}", "file.backend.error.navicat_connection_password_parse_failed": "Failed to parse password for connection {{name}}", "file.backend.error.navicat_connection_proxy_password_parse_failed": "Failed to parse proxy password for connection {{name}}", "file.backend.error.navicat_connection_ssh_password_parse_failed": "Failed to parse SSH password for connection {{name}}", "file.backend.error.navicat_ncx_no_connections": "No valid GoNavi-supported connection configuration was found in Navicat NCX", "file.backend.error.navicat_ncx_parse_failed": "Failed to parse Navicat NCX", "file.backend.error.navicat_secret_decrypt_failed": "Failed to decrypt Navicat password", + "file.backend.error.open_file_failed": "Unable to open file: {{detail}}", + "file.backend.error.query_required": "Query statement cannot be empty", "file.backend.error.read_directory_info_failed": "Unable to read directory info: {{detail}}", + "file.backend.error.read_file_error_summary": "File read error: {{detail}}. Executed {{count}}.", + "file.backend.error.read_file_info_failed": "Unable to read file info: {{detail}}", "file.backend.error.read_target_directory_info_failed": "Unable to read target directory info: {{detail}}", "file.backend.error.read_target_file_info_failed": "Unable to read target file info: {{detail}}", "file.backend.error.rename_directory_failed": "Unable to rename directory: {{detail}}", "file.backend.error.rename_sql_file_failed": "Unable to rename SQL file: {{detail}}", "file.backend.error.schema_export_no_objects": "No exportable tables or views were found in schema {{schema}}", "file.backend.error.schema_name_required": "Schema name cannot be empty", + "file.backend.error.select_with_query_required": "Only SELECT/WITH query export is supported", + "file.backend.error.selected_path_not_directory": "Selected path is not a directory", + "file.backend.error.selected_path_not_sql_file": "Selected path is not a SQL file", "file.backend.error.sql_file_batch_execution_failed": "Batch execution failed starting at statement {{index}}: {{detail}}", "file.backend.error.sql_file_batch_rollback_failed": "Batch execution failed: {{detail}}; rollback failed: {{rollbackDetail}}", "file.backend.error.sql_file_exists": "SQL file already exists", @@ -7101,15 +4952,338 @@ "file.backend.error.sql_file_name_no_separator": "SQL file name cannot contain path separators", "file.backend.error.sql_file_name_required": "SQL file name cannot be empty", "file.backend.error.sql_file_statement_execution_failed": "Statement {{index}} failed: {{detail}}", + "file.backend.error.table_data_batch_limit": "You can process at most {{max}} tables at once; currently selected {{count}}", + "file.backend.error.table_data_clear_failed": "Failed to clear {{table}}: {{detail}}", + "file.backend.error.table_data_clear_failed_partial": "Failed to clear {{table}}: {{detail}}. Warning: the first {{count}} tables have been cleared and cannot be restored", + "file.backend.error.table_data_mode_unsupported": "Unsupported table data cleanup mode: {{mode}}", + "file.backend.error.table_data_no_tables": "No tables selected", + "file.backend.error.table_data_truncate_failed": "Failed to truncate {{table}}: {{detail}}", + "file.backend.error.table_data_truncate_failed_partial": "Failed to truncate {{table}}: {{detail}}. Warning: the first {{count}} tables have been truncated and cannot be restored", + "file.backend.error.table_data_truncate_unsupported": "Current database type {{type}} does not support truncating tables. Use clearing instead", "file.backend.error.target_directory_exists": "Target directory already exists", "file.backend.error.target_sql_file_exists": "Target SQL file already exists", + "file.backend.error.task_not_found": "Task not found", + "file.backend.error.write_failed": "Write failed: {{detail}}", + "file.backend.filter.all_files": "All files", + "file.backend.filter.all_files_pattern": "All files (*.*)", "file.backend.filter.certificate_files": "Certificate files", + "file.backend.filter.connection_package": "GoNavi Connection Package (*.gonavi-conn)", + "file.backend.filter.data_files": "Data files", + "file.backend.filter.database_files": "Database files", + "file.backend.filter.duckdb_files": "DuckDB files", + "file.backend.filter.json_files": "JSON Files (*.json)", + "file.backend.filter.mysql_workbench_connections": "MySQL Workbench Connections (*.xml)", + "file.backend.filter.private_key_files": "Private key files", + "file.backend.filter.sql_files": "SQL files (*.sql)", + "file.backend.filter.sqlite_files": "SQLite files", + "file.backend.html_export.document_title": "GoNavi Export", + "file.backend.html_export.empty_rows": "(0 rows)", + "file.backend.html_export.heading": "GoNavi Data Export", + "file.backend.html_export.meta": "Rows: {{rowCount}} · Columns: {{columnCount}} · Generated: {{generatedAt}}", + "file.backend.message.cancel_requested": "Cancellation request sent", + "file.backend.message.execution_cancelled": "Execution canceled. Executed {{executed}}, failed {{failed}}, duration {{duration}}.", + "file.backend.message.execution_completed": "Execution completed. Succeeded {{success}}, failed {{failed}}, duration {{duration}}.", + "file.backend.message.execution_error_detail_header": "Error details (first {{count}}):", + "file.backend.message.execution_more_errors": "...{{count}} more errors are not shown", + "file.backend.message.export_completed": "Export completed", + "file.backend.message.import_no_data": "No data to import", + "file.backend.message.import_row_failed": "Import row {{index}} failed: {{detail}}", + "file.backend.message.import_summary": "Imported: {{imported}}, Failed: {{failed}}", + "file.backend.message.statement_failed": "Statement {{index}} failed: {{detail}}\n SQL: {{sql}}", + "file.backend.message.table_data_clear_succeeded": "Clearing succeeded", + "file.backend.message.table_data_truncate_succeeded": "Truncation succeeded", + "file.backend.message.transaction_committed": "Transaction committed successfully", + "file.backend.message.user_cancelled": "User canceled execution", + "file.backend.sql_dump.database": "Database: {{database}}", + "file.backend.sql_dump.empty_rows": "(0 rows)", + "file.backend.sql_dump.generated_at": "Time: {{generatedAt}}", + "file.backend.sql_dump.table": "Table: {{objectName}}", + "file.backend.sql_dump.title": "GoNavi SQL Export", + "file.backend.sql_dump.view": "View: {{objectName}}", + "file.backend.sql_dump.view_data_skipped": "View data export skipped (INSERT for views is not emitted).", + "find_in_database.column.action": "Actions", + "find_in_database.column.match_count": "Hit rows", + "find_in_database.column.matched_columns": "Matching columns", + "find_in_database.column.table_name": "Table", + "find_in_database.detail.row_count": "Rows: {{count}}", + "find_in_database.detail.title": "{{table}} - Matching row details", + "find_in_database.match.contains": "Contains", + "find_in_database.match.exact": "Exact match", + "find_in_database.message.connection_config_not_found": "Connection configuration not found", + "find_in_database.message.get_tables_failed": "Failed to get table list: {{detail}}", + "find_in_database.message.keyword_required": "Enter a search keyword", + "find_in_database.message.no_matches": "No matching data found", + "find_in_database.message.no_tables": "The current database has no tables", + "find_in_database.message.search_failed": "Search failed: {{detail}}", + "find_in_database.placeholder.keyword": "Enter the string to search for...", + "find_in_database.progress.searching_table": "Searching {{table}}... ({{current}}/{{total}})", + "find_in_database.summary.found_tables": "Matching tables: {{count}}", + "find_in_database.summary.searching": " (search in progress...)", + "find_in_database.title": "Search in database - {{dbName}}", + "find_in_database.tooltip.collapse_details": "Collapse details", + "find_in_database.tooltip.view_details": "View details", + "import_preview.action.start": "Start import", + "import_preview.error.connection_config_not_found": "Connection configuration not found", + "import_preview.error.import_failed": "Import failed", + "import_preview.error.import_failed_detail": "Import failed: {{detail}}", + "import_preview.error.preview_failed": "Preview failed", + "import_preview.error.preview_failed_detail": "Preview failed: {{detail}}", + "import_preview.preview.description": "The first 5 rows are shown below. Start the import after confirming the data.", + "import_preview.preview.field_list": "Field list:", + "import_preview.preview.summary": "{{rows}} rows and {{columns}} fields", + "import_preview.preview.table_title": "Data preview (first 5 rows):", + "import_preview.progress.error_count": "Failed {{count}}", + "import_preview.progress.processed_rows": "Processed {{current}} / {{total}} rows", + "import_preview.progress.success_count": "Success {{count}}", + "import_preview.result.completed": "Import completed", + "import_preview.result.error_logs": "Error logs:", + "import_preview.result.failed_rows": "Failed {{count}} rows", + "import_preview.result.success_rows": "Successfully imported {{count}} rows", + "import_preview.status.importing": "Importing data...", + "import_preview.status.loading_preview": "Loading preview data...", + "import_preview.title": "Import data preview", + "jvm_ai_plan.actions.description": ": {{description}}", + "jvm_ai_plan.actions.field_separator": ", ", + "jvm_ai_plan.actions.label": " ({{label}})", + "jvm_ai_plan.actions.none": "The current resource does not declare supported actions. If you generate a plan, provide an action only when it can be clearly inferred from the snapshot, and keep payload as a JSON object.", + "jvm_ai_plan.actions.payload_fields": "; payload fields: {{fields}}", + "jvm_ai_plan.actions.required_suffix": "(required)", + "jvm_ai_plan.error.action_missing": "The AI plan is missing an executable action.", + "jvm_ai_plan.error.payload_json_object_required": "The current JVM preview requires payload to remain a JSON object.", + "jvm_ai_plan.error.reason_missing": "The AI plan is missing a change reason.", + "jvm_ai_plan.error.resource_locator_missing": "The AI plan is missing usable resource locator information.", + "jvm_ai_plan.prompt.connection_name": "Connection name: {{connectionName}}", + "jvm_ai_plan.prompt.connection_policy": "Connection policy: {{policy}}", + "jvm_ai_plan.prompt.connection_policy.read_only": "Read-only connection. You may only generate a plan and risk analysis, and must not assume execution has happened.", + "jvm_ai_plan.prompt.connection_policy.writable": "Writable connection, but the change must still be previewed first and manually confirmed.", + "jvm_ai_plan.prompt.environment": "Environment: {{environmentLabel}}", + "jvm_ai_plan.prompt.environment_unknown": "unknown", + "jvm_ai_plan.prompt.example_reason": "Fix a dirty cache value", + "jvm_ai_plan.prompt.example_title": "JSON example:", + "jvm_ai_plan.prompt.intro": "Analyze the following JVM resource and generate a structured modification plan for GoNavi \"Preview Change\".", + "jvm_ai_plan.prompt.output_requirements_title": "Output requirements:", + "jvm_ai_plan.prompt.provider_mode": "Provider mode: {{providerMode}}", + "jvm_ai_plan.prompt.requirement.action": "4. Prefer choosing action from \"Supported actions for the current resource\"; infer from the snapshot only when no supported actions are declared.", + "jvm_ai_plan.prompt.requirement.fields": "2. The JSON fields inside the code block must be exactly: targetType, selector, action, payload, reason.", + "jvm_ai_plan.prompt.requirement.no_execute": "6. Do not claim the modification has already been executed, and do not output scripts or commands.", + "jvm_ai_plan.prompt.requirement.payload": "5. payload must be wrapped as a JSON object. Do not output scripts, commands, or raw binary. If a plain text value is needed, wrap it as {\"format\":\"text\",\"value\":\"...\"}.", + "jvm_ai_plan.prompt.requirement.resource_path": "3. Prefer selector.resourcePath with the current resource path {{resourcePath}}. Do not invent another path.", + "jvm_ai_plan.prompt.requirement.single_json_block": "1. You may include a short analysis first, but the answer must contain exactly one ```json code block.", + "jvm_ai_plan.prompt.resource_path": "Current resource path: {{resourcePath}}", + "jvm_ai_plan.prompt.resource_path_missing": "(resource path not provided)", + "jvm_ai_plan.prompt.snapshot_title": "Current resource snapshot:", + "jvm_ai_plan.prompt.supported_actions_title": "Supported actions for the current resource:", + "jvm_ai_plan.prompt.target_host": "Target host: {{host}}", + "jvm_ai_plan.snapshot.unavailable": "The current resource snapshot has not loaded successfully.", + "jvm_audit.action.refresh": "Refresh", + "jvm_audit.card.records": "Audit records", + "jvm_audit.column.action": "Action", + "jvm_audit.column.mode": "Mode", + "jvm_audit.column.reason": "Reason", + "jvm_audit.column.resource": "Resource", + "jvm_audit.column.result": "Result", + "jvm_audit.column.source": "Source", + "jvm_audit.column.time": "Time", + "jvm_audit.description.current_range": "Current range: last {{limit}} records", + "jvm_audit.empty.load_failed": "Audit records are unavailable right now", + "jvm_audit.empty.no_records": "No audit records", + "jvm_audit.error.backend_unavailable": "JVMListAuditRecords backend method is unavailable.", + "jvm_audit.error.connection_missing": "The connection does not exist or has been deleted.", + "jvm_audit.error.load_failed": "Failed to load JVM audit records{{separator}}{{detail}}", + "jvm_audit.eyebrow": "JVM Audit", + "jvm_audit.option.last_records": "Last {{limit}} records", + "jvm_audit.source.ai_plan": "AI assisted", + "jvm_audit.source.manual": "Manual", + "jvm_audit.title": "JVM change audit", + "jvm_change_preview_modal.action.close": "Close", + "jvm_change_preview_modal.action.confirm_execute": "Confirm execution", + "jvm_change_preview_modal.blocking.alert_message": "Current change cannot be executed", + "jvm_change_preview_modal.blocking.label": "Blocking reason", + "jvm_change_preview_modal.field.format": "Format", + "jvm_change_preview_modal.field.resource_id": "Resource ID", + "jvm_change_preview_modal.field.version": "Version", + "jvm_change_preview_modal.permission.allowed": "Allowed", + "jvm_change_preview_modal.permission.forbidden": "Forbidden", + "jvm_change_preview_modal.permission.requires_confirmation": "Confirmation required", + "jvm_change_preview_modal.risk.high": "High", + "jvm_change_preview_modal.risk.label": "Risk {{level}}", + "jvm_change_preview_modal.risk.low": "Low", + "jvm_change_preview_modal.risk.medium": "Medium", + "jvm_change_preview_modal.risk.unknown": "Unknown", + "jvm_change_preview_modal.section.after": "After", + "jvm_change_preview_modal.section.before": "Before", + "jvm_change_preview_modal.section.summary": "Change summary", + "jvm_change_preview_modal.status.generated": "Preview generated", + "jvm_change_preview_modal.status.no_preview": "No preview result", + "jvm_change_preview_modal.title": "JVM change preview", "jvm_diagnostic.ai_plan.default_reason": "AI diagnostic plan: {{intent}}", + "jvm_diagnostic.ai_plan.error.transport_mismatch": "The AI plan diagnostic transport is {{planTransport}}, which does not match the current console {{currentTransport}}. Regenerate the plan before applying it.", + "jvm_diagnostic.ai_plan.message.filled": "AI diagnostic plan filled into the console", + "jvm_diagnostic.capability_result.mutating_allowed": "High-risk commands", + "jvm_diagnostic.capability_result.observe_allowed": "Observe commands", + "jvm_diagnostic.capability_result.observe_denied": "Observe disabled", + "jvm_diagnostic.capability_result.session_allowed": "Can start sessions", + "jvm_diagnostic.capability_result.session_denied": "Cannot start sessions", + "jvm_diagnostic.capability_result.streaming_supported": "Streaming output", + "jvm_diagnostic.capability_result.streaming_unsupported": "Streaming unsupported", + "jvm_diagnostic.capability_result.title": "Capability check results", + "jvm_diagnostic.capability_result.trace_allowed": "Trace commands", + "jvm_diagnostic.capability.empty.description": "Capability checks only read transport permissions and command policy. They do not create a session or run commands.", + "jvm_diagnostic.capability.empty.title": "No capability check yet", + "jvm_diagnostic.command_input.command_description": "Enter an Arthas/diagnostic command, for example thread -n 5, dashboard, or jvm; templates below can fill this in with one click.", + "jvm_diagnostic.command_input.command_label": "Diagnostic command", + "jvm_diagnostic.command_input.description": "Supports autocomplete. Press Ctrl/Cmd + Enter to run.", + "jvm_diagnostic.command_input.reason_help": "Used for audit records and AI context. It is not sent to the target JVM as an Arthas command.", + "jvm_diagnostic.command_input.reason_label": "Reason (optional)", + "jvm_diagnostic.command_input.reason_placeholder": "For example: investigate high CPU, confirm blocked threads, or locate a slow method", + "jvm_diagnostic.command_input.title": "Command input", + "jvm_diagnostic.command_templates.title": "Command templates", + "jvm_diagnostic.completion.argument.classloader.hash.documentation": "View details for a specified class loader.", + "jvm_diagnostic.completion.argument.classloader.hash.label": "Specified class loader Hash", + "jvm_diagnostic.completion.argument.classloader.tree.documentation": "Output the class loader tree.", + "jvm_diagnostic.completion.argument.classloader.tree.label": "Tree view (-t)", + "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "View class loader URL statistics.", + "jvm_diagnostic.completion.argument.classloader.url_stat.label": "All URL statistics (--url-stat)", + "jvm_diagnostic.completion.argument.command_template.label": "{{command}} template", + "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "View the current JVM runtime overview.", + "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", + "jvm_diagnostic.completion.argument.detail_mode_d.label": "Detail mode (-d)", + "jvm_diagnostic.completion.argument.jad.template.documentation": "Decompile the specified class.", + "jvm_diagnostic.completion.argument.jad.template.label": "Decompile template", + "jvm_diagnostic.completion.argument.jvm.direct.documentation": "View JVM memory, threads, class loading, GC, and runtime arguments.", + "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", + "jvm_diagnostic.completion.argument.monitor.template.documentation": "Collect method call statistics at intervals.", + "jvm_diagnostic.completion.argument.ognl.template.documentation": "Execute an OGNL expression; high-risk commands are restricted by policy by default.", + "jvm_diagnostic.completion.argument.redefine.template.documentation": "Redefine the class bytecode file path.", + "jvm_diagnostic.completion.argument.retransform.template.documentation": "Retransform the specified class.", + "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "Search by class name pattern.", + "jvm_diagnostic.completion.argument.sc.class_pattern.label": "Class pattern template", + "jvm_diagnostic.completion.argument.sc.detail.documentation": "Output detailed class information.", + "jvm_diagnostic.completion.argument.sm.detail.documentation": "Output detailed method signatures.", + "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "View method signatures for a class.", + "jvm_diagnostic.completion.argument.sm.method_signature.label": "Method signature template", + "jvm_diagnostic.completion.argument.stack.template.documentation": "Print method call stacks.", + "jvm_diagnostic.completion.argument.stop.direct.documentation": "Stop the current background task.", + "jvm_diagnostic.completion.argument.stop.direct.label": "stop", + "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "Read the specified environment variable.", + "jvm_diagnostic.completion.argument.sysenv.variable.label": "View environment variable", + "jvm_diagnostic.completion.argument.sysprop.property.documentation": "Read the specified system property.", + "jvm_diagnostic.completion.argument.sysprop.property.label": "View property", + "jvm_diagnostic.completion.argument.thread.blocking.documentation": "Find threads that are currently blocking other threads.", + "jvm_diagnostic.completion.argument.thread.blocking.label": "Blocked threads (-b)", + "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "View the top N CPU-busiest threads.", + "jvm_diagnostic.completion.argument.thread.busy_top.label": "Busy threads TOP N (-n)", + "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "View detailed stack information for a specified thread.", + "jvm_diagnostic.completion.argument.thread.thread_id.label": "Specified thread ID", + "jvm_diagnostic.completion.argument.trace.condition.documentation": "Append a trace condition expression.", + "jvm_diagnostic.completion.argument.trace.condition.label": "Condition filter '#cost > 100'", + "jvm_diagnostic.completion.argument.trace.template.documentation": "Trace slow method call chains.", + "jvm_diagnostic.completion.argument.tt.list.documentation": "View the current recording list.", + "jvm_diagnostic.completion.argument.tt.list.label": "View record list (-l)", + "jvm_diagnostic.completion.argument.tt.record.documentation": "Record calls to the specified method.", + "jvm_diagnostic.completion.argument.tt.record.label": "tt recording template", + "jvm_diagnostic.completion.argument.tt.replay.documentation": "View details for a specified record.", + "jvm_diagnostic.completion.argument.tt.replay.label": "Replay record (-i)", + "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "Get instances of the specified class; high-risk commands are restricted by policy by default.", + "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", + "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "Set object expansion depth.", + "jvm_diagnostic.completion.argument.watch.expand_depth.label": "Expansion depth -x 2", + "jvm_diagnostic.completion.argument.watch.template.documentation": "Observe parameters, return values, or exceptions.", + "jvm_diagnostic.completion.category.control": "control command", + "jvm_diagnostic.completion.category.mutating": "high-risk command", + "jvm_diagnostic.completion.category.observe": "observation command", + "jvm_diagnostic.completion.category.trace": "trace command", + "jvm_diagnostic.completion.command.classloader.documentation": "View class loader information.", + "jvm_diagnostic.completion.command.dashboard.documentation": "View the JVM runtime overview.", + "jvm_diagnostic.completion.command.jad.documentation": "Decompile the specified class.", + "jvm_diagnostic.completion.command.jvm.documentation": "View JVM memory, threads, class loading, GC, and runtime arguments.", + "jvm_diagnostic.completion.command.monitor.documentation": "Periodically collect method call statistics.", + "jvm_diagnostic.completion.command.ognl.documentation": "Execute an OGNL expression; extra authorization is required by default.", + "jvm_diagnostic.completion.command.redefine.documentation": "Redefine class bytecode.", + "jvm_diagnostic.completion.command.retransform.documentation": "Trigger class retransformation.", + "jvm_diagnostic.completion.command.sc.documentation": "Search matching class information.", + "jvm_diagnostic.completion.command.sm.documentation": "View method signatures for a class.", + "jvm_diagnostic.completion.command.stack.documentation": "Print method call stacks.", + "jvm_diagnostic.completion.command.stop.documentation": "Stop the current background task.", + "jvm_diagnostic.completion.command.sysenv.documentation": "View environment variables.", + "jvm_diagnostic.completion.command.sysprop.documentation": "View system properties.", + "jvm_diagnostic.completion.command.thread.documentation": "View hot threads, thread stacks, and blocked threads.", + "jvm_diagnostic.completion.command.trace.documentation": "Trace method call time paths.", + "jvm_diagnostic.completion.command.tt.documentation": "Method time tunnel for recording and replaying calls.", + "jvm_diagnostic.completion.command.vmtool.documentation": "Directly operate JVM objects or execute VMTool actions.", + "jvm_diagnostic.completion.command.watch.documentation": "Observe parameters, return values, or exceptions.", + "jvm_diagnostic.completion.detail.class_search_template": "class search template", + "jvm_diagnostic.completion.detail.classloader_template": "class loader template", + "jvm_diagnostic.completion.detail.decompile_template": "decompile template", + "jvm_diagnostic.completion.detail.environment_variable_template": "environment variable template", + "jvm_diagnostic.completion.detail.execute_directly": "execute directly", + "jvm_diagnostic.completion.detail.high_risk_template": "high-risk template", + "jvm_diagnostic.completion.detail.method_search_template": "method search template", + "jvm_diagnostic.completion.detail.monitor_template": "monitor template", + "jvm_diagnostic.completion.detail.stack_template": "stack template", + "jvm_diagnostic.completion.detail.system_property_template": "system property template", + "jvm_diagnostic.completion.detail.thread_option": "thread option", + "jvm_diagnostic.completion.detail.time_tunnel_template": "time tunnel template", + "jvm_diagnostic.completion.detail.trace_option": "trace option", + "jvm_diagnostic.completion.detail.trace_template": "trace template", + "jvm_diagnostic.completion.detail.watch_option": "watch option", + "jvm_diagnostic.completion.detail.watch_template": "watch template", + "jvm_diagnostic.completion.preset.category.mutating": "high-risk command", + "jvm_diagnostic.completion.preset.category.observe": "observation command", + "jvm_diagnostic.completion.preset.category.trace": "trace command", + "jvm_diagnostic.completion.preset.dashboard.documentation": "View the JVM runtime overview.", + "jvm_diagnostic.completion.preset.ognl-sample.documentation": "High-risk expression command, shown as an example by default.", + "jvm_diagnostic.completion.preset.thread-top.documentation": "View the busiest threads to quickly locate blocked or high-CPU threads.", + "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "Trace slow method call paths.", + "jvm_diagnostic.completion.preset.watch-return.documentation": "Observe parameters and return values.", + "jvm_diagnostic.connection_missing.message": "Connection does not exist or has been deleted", + "jvm_diagnostic.error.cancel_failed": "Failed to cancel diagnostic command", + "jvm_diagnostic.error.cancel_unavailable": "JVMCancelDiagnosticCommand backend method is unavailable", + "jvm_diagnostic.error.execute_command_required": "Diagnostic command is required", + "jvm_diagnostic.error.execute_failed": "Failed to execute diagnostic command", + "jvm_diagnostic.error.execute_session_required": "Create a diagnostic session before running a command", + "jvm_diagnostic.error.execute_unavailable": "JVMExecuteDiagnosticCommand backend method is unavailable", + "jvm_diagnostic.error.history_load_failed": "Failed to load diagnostic history", + "jvm_diagnostic.error.probe_failed": "Failed to check diagnostic capabilities", + "jvm_diagnostic.error.probe_unavailable": "JVMProbeDiagnosticCapabilities backend method is unavailable", + "jvm_diagnostic.error.start_failed": "Failed to create diagnostic session", + "jvm_diagnostic.error.start_unavailable": "JVMStartDiagnosticSession backend method is unavailable", + "jvm_diagnostic.history.current_session": "Current session", + "jvm_diagnostic.history.description": "Recent commands and execution status", + "jvm_diagnostic.history.no_records": "No diagnostic history", + "jvm_diagnostic.history.no_session": "No diagnostic session yet", + "jvm_diagnostic.history.reason_missing": "No diagnostic reason provided", + "jvm_diagnostic.history.recent_records": "Recent records", + "jvm_diagnostic.history.title": "Audit history", + "jvm_diagnostic.message.cancel_sent": "Cancel request sent", + "jvm_diagnostic.no_session.action.probe": "Check capabilities first", + "jvm_diagnostic.no_session.action.start": "Start diagnostic session", + "jvm_diagnostic.no_session.alert.description": "This prevents users from thinking commands can run before a session is bound, and keeps audit records, output streams, and cancellation tied to the same session.", + "jvm_diagnostic.no_session.alert.title": "Command input appears after a session is created", + "jvm_diagnostic.no_session.description": "Create a session first, then show the command editor and templates", + "jvm_diagnostic.no_session.title": "Start a diagnostic session", + "jvm_diagnostic.output.description": "Appended from backend event stream", + "jvm_diagnostic.output.empty.description": "No live output yet. Backend output will appear here in chronological order after a command runs.", + "jvm_diagnostic.output.frontend_completed_fallback": "The diagnostic command call returned, but no terminal backend event was received. The frontend ended the waiting state as a fallback.", + "jvm_diagnostic.output.local_pending": "Diagnostic command submitted; waiting for backend output: {{command}}", + "jvm_diagnostic.output.title": "Live output", + "jvm_diagnostic.presentation.category.mutating": "High-risk commands", + "jvm_diagnostic.presentation.category.observe": "Observation commands", + "jvm_diagnostic.presentation.category.trace": "Trace commands", + "jvm_diagnostic.presentation.chunk.empty_event": "Empty event", "jvm_diagnostic.presentation.command_type.mutating": "High risk", "jvm_diagnostic.presentation.command_type.observe": "Observe", "jvm_diagnostic.presentation.command_type.trace": "Trace", + "jvm_diagnostic.presentation.event.chunk": "Output chunk", + "jvm_diagnostic.presentation.event.diagnostic": "Diagnostic output", + "jvm_diagnostic.presentation.event.done": "Execution finished", "jvm_diagnostic.presentation.fallback.unknown": "Unknown", "jvm_diagnostic.presentation.phase.canceled": "Canceled", + "jvm_diagnostic.presentation.phase.canceling": "Canceling", + "jvm_diagnostic.presentation.phase.completed": "Completed", + "jvm_diagnostic.presentation.phase.diagnostic": "Diagnostic event", + "jvm_diagnostic.presentation.phase.failed": "Failed", + "jvm_diagnostic.presentation.phase.running": "Running", "jvm_diagnostic.presentation.risk.high": "High risk", "jvm_diagnostic.presentation.risk.low": "Low risk", "jvm_diagnostic.presentation.risk.medium": "Medium risk", @@ -7117,6 +5291,734 @@ "jvm_diagnostic.presentation.source.manual": "Manual input", "jvm_diagnostic.presentation.transport.agent_bridge": "Agent Bridge", "jvm_diagnostic.presentation.transport.arthas_tunnel": "Arthas Tunnel", + "jvm_diagnostic.session_capability.action.clear_output": "Clear output", + "jvm_diagnostic.session_capability.action.refresh_history": "Refresh history", + "jvm_diagnostic.session_capability.description": "Current transport, permissions, and quick maintenance", + "jvm_diagnostic.session_capability.note": "Capability checks do not run commands; create a session before running commands. Audit history shows recent command records and can include records from past sessions even when no session exists.", + "jvm_diagnostic.session_capability.session_id_hint": "Session ID appears here after a session is created.", + "jvm_diagnostic.session_capability.status.command_running": "Command running", + "jvm_diagnostic.session_capability.status.idle": "Idle", + "jvm_diagnostic.session_capability.status.no_session": "No session", + "jvm_diagnostic.session_capability.status.session_established": "Session established", + "jvm_diagnostic.session_capability.title": "Session and capabilities", + "jvm_diagnostic.session.default_reason": "Session started from the console", + "jvm_diagnostic.session.default_title": "JVM diagnostic console", + "jvm_diagnostic.workbench.action.cancel_command": "Cancel command", + "jvm_diagnostic.workbench.action.execute_command": "Execute command", + "jvm_diagnostic.workbench.action.probe": "Check capabilities", + "jvm_diagnostic.workbench.action.restart_session": "Restart session", + "jvm_diagnostic.workbench.action.start_session": "Start session", + "jvm_diagnostic.workbench.eyebrow": "JVM diagnostics", + "jvm_diagnostic.workbench.status.command_running": "Command running", + "jvm_diagnostic.workbench.status.no_session": "No session", + "jvm_diagnostic.workbench.status.session_established": "Session established", + "jvm_diagnostic.workbench.title": "JVM diagnostic workbench", + "jvm_diagnostic.workflow.command.description": "After a session is created, show the command editor, reason input, and templates.", + "jvm_diagnostic.workflow.command.title": "Run command", + "jvm_diagnostic.workflow.probe.description": "Read diagnostic transport, streaming output, and command permissions without creating a session.", + "jvm_diagnostic.workflow.probe.title": "Check capabilities", + "jvm_diagnostic.workflow.session.description": "Create a diagnostic context so subsequent commands are bound to this session.", + "jvm_diagnostic.workflow.session.title": "Start session", + "jvm_monitoring_charts.empty.classes.metric_unavailable": "Current monitoring source does not provide class loading metrics.", + "jvm_monitoring_charts.empty.classes.no_samples": "No class loading samples yet.", + "jvm_monitoring_charts.empty.gc.metric_unavailable": "Current monitoring source does not provide garbage collection metrics.", + "jvm_monitoring_charts.empty.gc.no_samples": "No garbage collection samples yet.", + "jvm_monitoring_charts.empty.heap.metric_unavailable": "Current monitoring source does not provide heap memory metrics.", + "jvm_monitoring_charts.empty.heap.no_samples": "No heap memory samples yet.", + "jvm_monitoring_charts.empty.threads.metric_unavailable": "Current monitoring source does not provide thread metrics.", + "jvm_monitoring_charts.empty.threads.no_samples": "No thread samples yet.", + "jvm_monitoring_charts.legend.daemon_thread_count": "Daemon threads", + "jvm_monitoring_charts.legend.gc_count": "GC count", + "jvm_monitoring_charts.legend.gc_time_ms": "GC time (ms)", + "jvm_monitoring_charts.legend.heap_committed": "Heap committed", + "jvm_monitoring_charts.legend.heap_used": "Heap used", + "jvm_monitoring_charts.legend.loaded_classes": "Loaded classes", + "jvm_monitoring_charts.legend.peak_thread_count": "Peak threads", + "jvm_monitoring_charts.legend.thread_count": "Thread count", + "jvm_monitoring_charts.legend.unloaded_classes": "Unloaded classes", + "jvm_monitoring_charts.title.classes": "Class loading", + "jvm_monitoring_charts.title.gc": "Garbage collection", + "jvm_monitoring_charts.title.heap": "Heap memory", + "jvm_monitoring_charts.title.threads": "Threads", + "jvm_monitoring_dashboard.action.refresh": "Refresh", + "jvm_monitoring_dashboard.action.start": "Start monitoring", + "jvm_monitoring_dashboard.action.stop": "Stop monitoring", + "jvm_monitoring_dashboard.connection_missing.message": "Connection does not exist or has been deleted", + "jvm_monitoring_dashboard.degraded.message": "Monitoring capability is degraded", + "jvm_monitoring_dashboard.empty.description": "After you click \"Start monitoring\", GoNavi keeps sampling results for this connection in the current session; switching tabs does not stop sampling.", + "jvm_monitoring_dashboard.empty.title": "Continuous monitoring has not started yet", + "jvm_monitoring_dashboard.error.history_load_failed": "Failed to load monitoring history", + "jvm_monitoring_dashboard.error.history_unavailable": "JVMGetMonitoringHistory backend method is unavailable", + "jvm_monitoring_dashboard.error.start_failed": "Failed to start monitoring", + "jvm_monitoring_dashboard.error.start_unavailable": "JVMStartMonitoring backend method is unavailable", + "jvm_monitoring_dashboard.error.stop_failed": "Failed to stop monitoring", + "jvm_monitoring_dashboard.error.stop_unavailable": "JVMStopMonitoring backend method is unavailable", + "jvm_monitoring_dashboard.status.sampling": "Sampling", + "jvm_monitoring_dashboard.status.stopped": "Stopped", + "jvm_monitoring_dashboard.title": "Continuous JVM monitoring", + "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "Current monitoring source does not provide event-level garbage collection data.", + "jvm_monitoring_detail_panel.empty.recent_gc_events": "No garbage collection events in the recent window.", + "jvm_monitoring_detail_panel.empty.thread_states": "No thread state samples yet.", + "jvm_monitoring_detail_panel.field.process_cpu": "Process CPU", + "jvm_monitoring_detail_panel.field.process_physical_memory": "Process physical memory", + "jvm_monitoring_detail_panel.field.process_virtual_memory": "Process virtual memory", + "jvm_monitoring_detail_panel.field.system_cpu": "System CPU", + "jvm_monitoring_detail_panel.gc.after": "After collection", + "jvm_monitoring_detail_panel.gc.before": "Before collection", + "jvm_monitoring_detail_panel.memory_missing.default": "The current monitoring source did not return process resident physical memory metrics. Check that the HTTP endpoint or enhanced agent collects and reports process physical memory.", + "jvm_monitoring_detail_panel.memory_missing.jmx": "JMX connection does not expose process resident physical memory, so only process virtual memory metrics can be read right now. To collect process physical memory, switch to the HTTP endpoint or enhanced agent.", + "jvm_monitoring_detail_panel.memory_missing.title": "Why process physical memory is missing", + "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "Capabilities and degradation", + "jvm_monitoring_detail_panel.title.recent_gc_details": "Recent garbage collection details", + "jvm_monitoring_detail_panel.title.thread_state_distribution": "Thread state distribution", + "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "Troubleshooting metrics", + "jvm_monitoring_presentation.availability.missing_metrics": "Missing metrics: {{metrics}}", + "jvm_monitoring_presentation.availability.no_obvious_degradation": "No obvious degradation was found in the current monitoring session.", + "jvm_monitoring_presentation.availability.provider_warnings": "Monitoring source warning: {{warnings}}", + "jvm_monitoring_presentation.metric.class_loading": "Class loading", + "jvm_monitoring_presentation.metric.cpu_process": "Process CPU", + "jvm_monitoring_presentation.metric.cpu_system": "System CPU", + "jvm_monitoring_presentation.metric.gc_count": "Garbage collection count", + "jvm_monitoring_presentation.metric.gc_events": "Recent garbage collection events", + "jvm_monitoring_presentation.metric.gc_time": "Garbage collection time", + "jvm_monitoring_presentation.metric.heap_non_heap": "Non-heap memory", + "jvm_monitoring_presentation.metric.heap_used": "Heap memory", + "jvm_monitoring_presentation.metric.memory_rss": "Process physical memory", + "jvm_monitoring_presentation.metric.memory_virtual": "Process virtual memory", + "jvm_monitoring_presentation.metric.thread_count": "Thread count", + "jvm_monitoring_presentation.metric.thread_states": "Thread states", + "jvm_monitoring_presentation.thread_state.blocked": "Blocked", + "jvm_monitoring_presentation.thread_state.new": "New", + "jvm_monitoring_presentation.thread_state.runnable": "Runnable", + "jvm_monitoring_presentation.thread_state.terminated": "Terminated", + "jvm_monitoring_presentation.thread_state.timed_waiting": "Timed waiting", + "jvm_monitoring_presentation.thread_state.waiting": "Waiting", + "jvm_monitoring_status_cards.meta.gc_total_time": "Total {{value}}", + "jvm_monitoring_status_cards.meta.heap_committed": "Committed {{value}}", + "jvm_monitoring_status_cards.meta.thread_peak": "Peak {{value}}", + "jvm_monitoring_status_cards.meta.waiting_samples": "Waiting for samples", + "jvm_monitoring_status_cards.status.sampling": "Sampling", + "jvm_monitoring_status_cards.status.stopped": "Stopped", + "jvm_monitoring_status_cards.thread_state.runnable_count": "Runnable {{count}}", + "jvm_monitoring_status_cards.title.classes": "Class loading", + "jvm_monitoring_status_cards.title.gc_pressure": "Garbage collection pressure", + "jvm_monitoring_status_cards.title.heap": "Heap memory", + "jvm_monitoring_status_cards.title.threads": "Threads", + "jvm_overview.badge.read_only": "Read-only connection", + "jvm_overview.badge.writable": "Writable connection", + "jvm_overview.capability.can_browse": "Browsable", + "jvm_overview.capability.cannot_browse": "Not browsable", + "jvm_overview.capability.preview_supported": "Preview supported", + "jvm_overview.capability.preview_unsupported": "Preview unsupported", + "jvm_overview.capability.read_only": "Read-only", + "jvm_overview.capability.writable": "Writable", + "jvm_overview.card.connection_summary": "Connection summary", + "jvm_overview.card.mode_capability": "Mode capabilities", + "jvm_overview.connection_missing.message": "Connection does not exist or has been deleted", + "jvm_overview.empty.capabilities": "No mode capability data", + "jvm_overview.error.capability_load_failed": "Failed to read JVM mode capabilities", + "jvm_overview.eyebrow": "JVM Runtime", + "jvm_overview.field.agent": "Agent", + "jvm_overview.field.allowed_modes": "Allowed modes", + "jvm_overview.field.current_mode": "Current mode", + "jvm_overview.field.endpoint": "Endpoint", + "jvm_overview.field.jmx_address": "JMX address", + "jvm_overview.field.resource_browse": "Resource browsing", + "jvm_overview.title": "JVM runtime overview", + "jvm_overview.value.enabled": "Enabled", + "jvm_overview.value.not_configured": "Not configured", + "jvm_overview.value.resource_browse_lazy_load": "Lazy-loads after expanding a mode node in the sidebar", + "jvm_resource.action.ask_ai_plan": "Ask AI for a plan", + "jvm_resource.action.audit": "Audit log", + "jvm_resource.action.generate_ai_plan": "Generate AI plan", + "jvm_resource.action.preview_change": "Preview change", + "jvm_resource.badge.read_only": "Read-only connection", + "jvm_resource.badge.writable": "Writable connection", + "jvm_resource.card.change_draft": "Change draft", + "jvm_resource.card.snapshot": "Resource snapshot", + "jvm_resource.draft_source.ai_plan": "AI-assisted draft", + "jvm_resource.draft_source.manual": "Manual edit", + "jvm_resource.empty.no_resource_data": "No resource data", + "jvm_resource.error.ai_plan_context_mismatch": "The current JVM tab does not match the source context of the AI plan, so automatic application was rejected.", + "jvm_resource.error.ai_plan_missing_context": "The AI plan is missing its source context. Regenerate it from the target JVM resource page before applying it.", + "jvm_resource.error.ai_plan_to_draft_failed": "The AI plan cannot be converted into a JVM preview draft right now.", + "jvm_resource.error.apply_failed": "Failed to execute JVM change.", + "jvm_resource.error.apply_unavailable": "JVM change execution is not available in this build.", + "jvm_resource.error.confirmation_missing": "Confirmation token is missing. Preview again before executing.", + "jvm_resource.error.connection_missing": "The connection does not exist or has been deleted.", + "jvm_resource.error.context_changed": "Resource context changed. Preview again before executing.", + "jvm_resource.error.draft_invalid": "The change draft is invalid.", + "jvm_resource.error.get_value_unavailable": "JVM value reading is not available in this build.", + "jvm_resource.error.payload_object_required": "Payload must be a JSON object.", + "jvm_resource.error.preview_failed": "Failed to preview JVM change.", + "jvm_resource.error.preview_required": "Preview the change before confirming execution.", + "jvm_resource.error.preview_result_invalid": "The preview result has an invalid format.", + "jvm_resource.error.preview_unavailable": "JVM change preview is not available in this build.", + "jvm_resource.error.read_failed": "Failed to read JVM resource.", + "jvm_resource.error.reason_required": "Enter a change reason.", + "jvm_resource.error.resource_id_empty": "Resource ID is empty, so a change draft cannot be created.", + "jvm_resource.error.resource_path_empty": "Resource path is empty.", + "jvm_resource.field.action": "Action", + "jvm_resource.field.available_actions": "Available actions", + "jvm_resource.field.draft_source": "Draft source", + "jvm_resource.field.format": "Format", + "jvm_resource.field.payload": "Payload (JSON)", + "jvm_resource.field.payload_fields": "Payload fields: ", + "jvm_resource.field.reason": "Change reason", + "jvm_resource.field.resource_id": "Resource ID", + "jvm_resource.field.resource_path": "Resource path", + "jvm_resource.field.resource_type": "Resource type", + "jvm_resource.field.resource_version": "Resource version", + "jvm_resource.field.target_resource": "Target resource", + "jvm_resource.field.version": "Version", + "jvm_resource.list_separator": ", ", + "jvm_resource.marker.required_suffix": " (required)", + "jvm_resource.message.ai_plan_draft_filled": "The draft was filled from the AI plan for {{resourceId}}. Preview the change before confirming the write.", + "jvm_resource.message.apply_success": "JVM change executed.", + "jvm_resource.message.current_action": "Current action: ", + "jvm_resource.message.payload_hint": "Preview uses the current draft. Confirming execution uses the most recent successful preview request. Preview again after editing the draft.", + "jvm_resource.message.payload_template_applied": "A recommended template has been filled for the current action.", + "jvm_resource.placeholder.action_default": "For example, put / clear / evict", + "jvm_resource.placeholder.action_jmx": "For example, set or invoke", + "jvm_resource.placeholder.reason": "Enter the reason for this JVM resource change", + "jvm_resource.presentation.action.clear.description": "Clear data or state from the current JVM resource.", + "jvm_resource.presentation.action.clear.label": "Clear resource", + "jvm_resource.presentation.action.delete.description": "Delete or unregister the current resource.", + "jvm_resource.presentation.action.delete.label": "Delete resource", + "jvm_resource.presentation.action.evict.description": "Evict the target cache item from the current JVM runtime.", + "jvm_resource.presentation.action.evict.label": "Evict cache", + "jvm_resource.presentation.action.invoke.description": "Invoke a management operation exposed by the current resource.", + "jvm_resource.presentation.action.invoke.label": "Invoke operation", + "jvm_resource.presentation.action.put.description": "Write the payload content to the current JVM resource.", + "jvm_resource.presentation.action.put.label": "Write resource", + "jvm_resource.presentation.action.refresh.description": "Refresh the runtime state of the current resource.", + "jvm_resource.presentation.action.refresh.label": "Refresh resource", + "jvm_resource.presentation.action.reload.description": "Reload the current resource or its configuration.", + "jvm_resource.presentation.action.reload.label": "Reload", + "jvm_resource.presentation.action.remove.description": "Remove the specified entry from the current resource.", + "jvm_resource.presentation.action.remove.label": "Remove entry", + "jvm_resource.presentation.action.reset.description": "Restore the current resource to its initial or default state.", + "jvm_resource.presentation.action.reset.label": "Reset state", + "jvm_resource.presentation.action.set.description": "Update a writable property exposed by the current resource.", + "jvm_resource.presentation.action.set.label": "Set property", + "jvm_resource.presentation.audit_result.applied": "Applied", + "jvm_resource.presentation.audit_result.blocked": "Blocked", + "jvm_resource.presentation.audit_result.failed": "Failed", + "jvm_resource.presentation.audit_result.success": "Success", + "jvm_resource.presentation.audit_result.unknown": "Unknown", + "jvm_resource.presentation.audit_result.warning": "Warning", + "jvm_resource.presentation.risk.high": "High", + "jvm_resource.presentation.risk.low": "Low", + "jvm_resource.presentation.risk.medium": "Medium", + "jvm_resource.presentation.risk.unknown": "Unknown", + "jvm_resource.presentation.unnamed_action": "Unnamed action", + "jvm_resource.section.metadata": "Metadata", + "jvm_resource.section.resource_value": "Resource value", + "jvm_resource.section.supported_actions": "Supported resource actions", + "jvm_resource.title": "JVM Resource Workbench", + "jvm.backend.capability.reason.read_only": "Current connection is read-only", + "jvm.backend.connection_error.agent.base_url_invalid.help": "Enter a full http:// or https:// URL, for example http://127.0.0.1:19090/gonavi/agent/jvm.", + "jvm.backend.connection_error.agent.base_url_invalid.summary": "Agent connection failed: Agent Base URL is invalid.", + "jvm.backend.connection_error.agent.base_url_required": "Agent connection failed: Agent Base URL is missing.", + "jvm.backend.connection_error.agent.connection_refused.help": "Confirm the Java service started GoNavi Agent with `-javaagent`, and check Base URL, port mapping, and firewall rules.", + "jvm.backend.connection_error.agent.connection_refused.summary": "Agent connection failed: the target Agent management port is not listening, or the address is unreachable.", + "jvm.backend.connection_error.agent.forbidden.help": "Confirm that client source, authentication settings, and Agent access policy allow GoNavi to access it.", + "jvm.backend.connection_error.agent.forbidden.summary": "Agent connection failed: Agent rejected this request.", + "jvm.backend.connection_error.agent.scheme_unsupported.help": "Change Agent Base URL to an address that starts with http:// or https://.", + "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Agent connection failed: only HTTP or HTTPS is supported.", + "jvm.backend.connection_error.agent.timeout.help": "Confirm the target address is reachable, the Agent has started, and increase the connection timeout if needed.", + "jvm.backend.connection_error.agent.timeout.summary": "Agent connection failed: timed out while accessing the Agent management port.", + "jvm.backend.connection_error.agent.unauthorized.help": "Check whether the Agent API Key in the connection matches the target service startup parameters.", + "jvm.backend.connection_error.agent.unauthorized.summary": "Agent connection failed: Agent responded, but the API Key is missing or invalid.", + "jvm.backend.connection_error.endpoint.base_url_invalid.help": "Enter a full http:// or https:// URL that points to the management API root implementing the GoNavi JVM HTTP contract, for example http://127.0.0.1:19090/manage/jvm.", + "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Endpoint connection failed: Endpoint Base URL is invalid.", + "jvm.backend.connection_error.endpoint.base_url_required": "Endpoint connection failed: Endpoint Base URL is missing.", + "jvm.backend.connection_error.endpoint.connection_refused.help": "Confirm that Base URL points to the management API implementing the GoNavi JVM HTTP contract, and check service listening, port mapping, and firewall rules.", + "jvm.backend.connection_error.endpoint.connection_refused.summary": "Endpoint connection failed: the target management API is not listening, or the address is unreachable.", + "jvm.backend.connection_error.endpoint.forbidden.help": "Confirm that client source, authentication settings, and access policy allow GoNavi to access this management API.", + "jvm.backend.connection_error.endpoint.forbidden.summary": "Endpoint connection failed: the target management API rejected this request.", + "jvm.backend.connection_error.endpoint.not_found.help": "Confirm that Base URL points to the JVM management API root, not a business endpoint, health check, or gateway home page.", + "jvm.backend.connection_error.endpoint.not_found.summary": "Endpoint connection failed: the target responded, but the GoNavi JVM management API was not found.", + "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "Change Endpoint Base URL to an address that starts with http:// or https://.", + "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Endpoint connection failed: only HTTP or HTTPS is supported.", + "jvm.backend.connection_error.endpoint.timeout.help": "Confirm Base URL is reachable, the target service has started, and increase the connection timeout if needed.", + "jvm.backend.connection_error.endpoint.timeout.summary": "Endpoint connection failed: timed out while accessing the target management API.", + "jvm.backend.connection_error.endpoint.unauthorized.help": "Check whether the Endpoint API Key in the connection matches the target service configuration.", + "jvm.backend.connection_error.endpoint.unauthorized.summary": "Endpoint connection failed: the target management API responded, but the API Key is missing or invalid.", + "jvm.backend.connection_error.generic": "JVM connection failed", + "jvm.backend.connection_error.jmx.auth.help": "Confirm whether target JMX disables authentication. If authentication is required, provide username and password before connecting.", + "jvm.backend.connection_error.jmx.auth.summary": "JMX connection failed: {{target}} requires authentication, or the current credentials are invalid.", + "jvm.backend.connection_error.jmx.connection_refused.help": "Confirm remote JMX is enabled on the target JVM, and check host, firewall, port mapping, SSH, and proxy settings.", + "jvm.backend.connection_error.jmx.connection_refused.summary": "JMX connection failed: cannot connect to {{target}} because the port is not listening or the network is unreachable.", + "jvm.backend.connection_error.jmx.connection_reset.help": "Confirm the configured port is the JVM's exposed JMX port, not a business port, debug port, or proxied port.", + "jvm.backend.connection_error.jmx.connection_reset.summary": "JMX connection failed: the service on {{target}} closed the connection; the port is not a compatible standard JMX RMI port.", + "jvm.backend.connection_error.jmx.host_required": "JMX connection failed: host is missing.", + "jvm.backend.connection_error.jmx.java_missing.help": "Install JRE/JDK first, or point the GONAVI_JMX_JAVA_BIN environment variable to the correct `java` executable.", + "jvm.backend.connection_error.jmx.java_missing.summary": "JMX connection failed: the current machine cannot find the `java` runtime, so GoNavi cannot start the JMX helper.", + "jvm.backend.connection_error.jmx.no_such_object.help": "This usually means the port is an RMI registry, debug port, or another Java service port. Check the `jmxremote.port` and `jmxremote.rmi.port` settings.", + "jvm.backend.connection_error.jmx.no_such_object.summary": "JMX connection failed: {{target}} has an RMI service, but it is not a usable JMX RMIServer port.", + "jvm.backend.connection_error.jmx.non_jrmp.help": "Use the actual JMX port exposed by the application, not the business `server.port`. If the service only enables `-Dcom.sun.management.jmxremote` without `jmxremote.port`, it cannot be connected remotely.", + "jvm.backend.connection_error.jmx.non_jrmp.summary": "JMX connection failed: {{target}} is not a standard JMX remote management port; it looks like a business or HTTP port.", + "jvm.backend.connection_error.jmx.port_invalid": "JMX connection failed: port is invalid. Enter a valid port from 1 to 65535.", + "jvm.backend.connection_error.jmx.timeout.help": "Confirm the port is reachable, the network is not blocked, and increase the connection timeout if needed.", + "jvm.backend.connection_error.jmx.timeout.summary": "JMX connection failed: connection to {{target}} timed out.", + "jvm.backend.connection_error.suggestion": "Suggestion: {{detail}}", + "jvm.backend.connection_error.technical_detail": "Technical detail: {{detail}}", + "jvm.backend.diagnostic.arthas.base_url_invalid": "Arthas Tunnel address is invalid: {{detail}}", + "jvm.backend.diagnostic.arthas.base_url_required": "Arthas Tunnel address is required", + "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "The active command in this Arthas Tunnel session does not match the command to cancel.", + "jvm.backend.diagnostic.arthas.command_already_running": "This Arthas Tunnel session already has a running command. Wait for it to finish or cancel it first.", + "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel command was canceled", + "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel command timed out after {{timeout}}", + "jvm.backend.diagnostic.arthas.connect_canceled": "Arthas Tunnel WebSocket connection was canceled", + "jvm.backend.diagnostic.arthas.connect_failed": "Arthas Tunnel WebSocket connection failed: {{detail}}", + "jvm.backend.diagnostic.arthas.connect_timeout": "Arthas Tunnel WebSocket connection timed out after {{timeout}} without a response", + "jvm.backend.diagnostic.arthas.connection_closed": "Arthas Tunnel connection closed: {{detail}}", + "jvm.backend.diagnostic.arthas.connection_closed_code": "Arthas Tunnel connection closed: code={{code}}", + "jvm.backend.diagnostic.arthas.connection_not_ready": "Arthas Tunnel connection is not ready. Try again later.", + "jvm.backend.diagnostic.arthas.http_failed": "Arthas Tunnel connection failed: HTTP {{status}}", + "jvm.backend.diagnostic.arthas.no_running_command": "This Arthas Tunnel session has no running command.", + "jvm.backend.diagnostic.arthas.read_canceled": "Reading Arthas Tunnel output was canceled", + "jvm.backend.diagnostic.arthas.read_deadline_failed": "Failed to set Arthas Tunnel read deadline: {{detail}}", + "jvm.backend.diagnostic.arthas.read_failed": "Failed to read Arthas Tunnel output: {{detail}}", + "jvm.backend.diagnostic.arthas.read_timeout": "Reading Arthas Tunnel output timed out after {{timeout}} without a response", + "jvm.backend.diagnostic.arthas.request_encode_failed": "Failed to encode Arthas Tunnel request: {{detail}}", + "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel only supports http/https/ws/wss addresses: {{scheme}}", + "jvm.backend.diagnostic.arthas.send_canceled": "Sending the Arthas Tunnel terminal command was canceled", + "jvm.backend.diagnostic.arthas.send_failed": "Failed to send Arthas Tunnel terminal command: {{detail}}", + "jvm.backend.diagnostic.arthas.send_timeout": "Sending the Arthas Tunnel terminal command timed out after {{timeout}} without a response", + "jvm.backend.diagnostic.arthas.session_config_changed": "Arthas Tunnel session configuration changed. Create the diagnostic session again.", + "jvm.backend.diagnostic.arthas.session_missing": "Diagnostic session does not exist. Create the Arthas Tunnel session again.", + "jvm.backend.diagnostic.arthas.target_id_required": "Arthas Tunnel target ID is required (targetId / agentId)", + "jvm.backend.diagnostic.arthas.target_not_found": "Target instance was not found. Check targetId / agentId and make sure the tunnel client is online.", + "jvm.backend.diagnostic.arthas.target_not_found_with_id": "Target instance {{target}} was not found. Check targetId / agentId and make sure the tunnel client is online.", + "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Failed to encode Arthas Tunnel terminal command: {{detail}}", + "jvm.backend.diagnostic.arthas.write_deadline_failed": "Failed to set Arthas Tunnel write deadline: {{detail}}", + "jvm.backend.diagnostic.error.audit_write_blocked": "Failed to write diagnostic audit record, command execution was blocked: {{detail}}", + "jvm.backend.diagnostic.error.cancel_identifiers_required": "Cancel command requires sessionId and commandId", + "jvm.backend.diagnostic.error.command_required": "Diagnostic command cannot be empty", + "jvm.backend.diagnostic.error.disabled": "JVM diagnostic enhancement is not enabled for this connection", + "jvm.backend.diagnostic.error.execute_canceled": "Diagnostic execute request was canceled: {{detail}}", + "jvm.backend.diagnostic.error.session_id_required": "Diagnostic session ID is required. Create a session first.", + "jvm.backend.diagnostic.error.transport_unsupported": "Unsupported JVM diagnostic transport: {{transport}}", + "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas command canceled", + "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas command completed", + "jvm.backend.diagnostic.message.cancel_requested": "Cancel request sent; waiting for the diagnostic bridge to stop the command", + "jvm.backend.diagnostic.message.command_completed": "Diagnostic command completed", + "jvm.backend.diagnostic.policy.multiline_not_supported": "Diagnostic command does not support newlines or multiple commands", + "jvm.backend.diagnostic.policy.mutating_not_allowed": "High-risk diagnostic commands are not enabled for this connection: {{command}}", + "jvm.backend.diagnostic.policy.observe_not_allowed": "Observe diagnostic commands are not enabled for this connection: {{command}}", + "jvm.backend.diagnostic.policy.read_only_observe_only": "Current connection is read-only. Only observe diagnostic commands are allowed", + "jvm.backend.diagnostic.policy.trace_not_allowed": "Trace diagnostic commands are not enabled for this connection: {{command}}", + "jvm.backend.diagnostic.warning.audit_write_failed": "Failed to write audit record: {{detail}}", + "jvm.backend.error.audit_write_blocked": "Failed to write audit record, JVM change was blocked: {{detail}}", + "jvm.backend.error.change_action_required": "JVM change action is required", + "jvm.backend.error.change_blocked_by_guard": "The current change was blocked by Guard", + "jvm.backend.error.change_blocked_read_only": "Current connection is read-only, so writes are blocked", + "jvm.backend.error.change_confirmation_token_failed": "Failed to generate JVM change confirmation token: {{detail}}", + "jvm.backend.error.change_reason_required": "JVM change reason is required", + "jvm.backend.error.change_resource_id_required": "JVM resource ID is required", + "jvm.backend.error.confirmation_token_expired": "Confirmation token expired. Preview and confirm again.", + "jvm.backend.error.confirmation_token_invalid": "Confirmation token is invalid. Preview and confirm again.", + "jvm.backend.error.confirmation_token_missing": "Confirmation token is missing. Complete preview confirmation first.", + "jvm.backend.error.disallowed_mode": "Current connection does not allow {{mode}} mode", + "jvm.backend.error.preview_confirmation_missing": "Preview confirmation token is missing. Preview again before submitting.", + "jvm.backend.error.preview_context_hash_failed": "Failed to generate JVM preview context: {{detail}}", + "jvm.backend.error.preview_payload_hash_failed": "Failed to generate JVM preview payload digest: {{detail}}", + "jvm.backend.error.resource_path_invalid": "Invalid JVM resource path: {{detail}}", + "jvm.backend.message.connect_success": "JVM connection succeeded", + "jvm.backend.monitoring.error.session_not_found": "Monitoring session not found for {{connectionId}} {{providerMode}}", + "jvm.backend.monitoring.error.snapshot_unsupported": "{{provider}} monitoring snapshot is not supported yet", + "jvm.backend.monitoring.warning.sample_auto_stopped": "Monitoring sampling failed {{count}} consecutive times and this session was stopped automatically", + "jvm.backend.separator.message_warning": "; ", + "jvm.backend.warning.failed_audit_write_failed": "Failed to write failure audit record: {{detail}}", + "jvm.backend.warning.terminal_audit_write_failed": "Failed to write terminal audit record: {{detail}}", + "log_panel.action.clear": "Clear logs", + "log_panel.action.close": "Close panel", + "log_panel.affected_rows": "Affected: {{count}}", + "log_panel.column.duration": "Duration", + "log_panel.column.sql_message": "SQL / Message", + "log_panel.column.status": "Status", + "log_panel.column.time": "Time", + "log_panel.description": "Track execution status, duration, and errors for quick review.", + "log_panel.empty": "No SQL execution logs", + "log_panel.short_title": "Logs", + "log_panel.title": "SQL execution log", + "message_publish_modal.action.send": "Send", + "message_publish_modal.error.build_command_failed": "Failed to build the publish command", + "message_publish_modal.error.send_failed_detail": "Send failed: {{detail}}", + "message_publish_modal.error.unknown_error": "Unknown error", + "message_publish_modal.field.body_mode.label": "Message body type", + "message_publish_modal.field.body.extra": "JSON mode requires valid JSON. Text mode sends the content as-is.", + "message_publish_modal.field.body.label": "Message body", + "message_publish_modal.field.body.placeholder": "Enter the message body", + "message_publish_modal.field.body.required": "Enter the message body", + "message_publish_modal.field.delay_level.extra": "RocketMQ uses fixed delay levels. 0 sends immediately.", + "message_publish_modal.field.delay_level.label": "Delay Level (optional)", + "message_publish_modal.field.exchange.extra": "Leave empty to use the default exchange. If you enter a custom exchange, make sure the target Queue has a binding.", + "message_publish_modal.field.exchange.label": "Exchange (optional)", + "message_publish_modal.field.exchange.placeholder": "Example: events.topic", + "message_publish_modal.field.headers.extra": "Must be a JSON object, for example {{example}}.", + "message_publish_modal.field.headers.label": "Headers (optional)", + "message_publish_modal.field.properties.extra": "Must be a JSON object, for example {{example}}.", + "message_publish_modal.field.properties.label": "Properties (optional)", + "message_publish_modal.field.qos.extra": "0 is at most once, 1 is at least once, and 2 is exactly once.", + "message_publish_modal.field.retain.label": "Retain message", + "message_publish_modal.field.routing_key.extra": "Leave empty to use the current Queue name by default.", + "message_publish_modal.field.routing_key.label": "Routing Key (optional)", + "message_publish_modal.field.routing_key.placeholder": "Example: orders.queue", + "message_publish_modal.field.tag.extra": "Leave empty to skip filtering or writing a Tag.", + "message_publish_modal.field.tag.label": "Tag (optional)", + "message_publish_modal.footer.success_prefix": "A successful send returns", + "message_publish_modal.footer.success_suffix": " to confirm whether this test message was submitted.", + "message_publish_modal.option.no_delay": "No delay", + "message_publish_modal.option.text": "Text", + "message_publish_modal.title": "Test message publish", + "message_publish_modal.title_with_connection": "Test message publish · {{connectionName}}", + "message_publish.error.destination_required": "Enter a target Topic / Queue", + "message_publish.error.invalid_json_detail": "{{field}} is not valid JSON: {{detail}}", + "message_publish.error.json_object_required": "{{field}} must be a JSON object", + "message_publish.error.mqtt_wildcard_topic": "MQTT publish Topic cannot contain + or # wildcards", + "message_publish.error.required_field": "{{field}} is required", + "message_publish.error.unsupported_type": "The current data source does not support test message publishing: {{type}}", + "message_publish.field.body": "Message body", + "message_publish.field.message_key": "Message Key", + "message_publish.presentation.kafka.alert": "This form builds a Kafka publish JSON command and calls the backend to send a test message.", + "message_publish.presentation.kafka.destination_placeholder": "Example: orders.events", + "message_publish.presentation.kafka.key_placeholder": "Optional. In JSON mode, enter one valid JSON line.", + "message_publish.presentation.kafka.success_hint": "Headers are sent as Kafka Record Headers.", + "message_publish.presentation.key_label": "Message Key (optional)", + "message_publish.presentation.keys_label": "Message Keys (optional)", + "message_publish.presentation.mqtt.alert": "This form builds an MQTT publish JSON command and sends a test message directly through the broker.", + "message_publish.presentation.mqtt.destination_placeholder": "Example: devices/device-001/telemetry", + "message_publish.presentation.mqtt.success_hint": "QoS and retain can be set separately. Empty fields use the defaults from the current connection.", + "message_publish.presentation.rabbitmq.alert": "This form builds a RabbitMQ publish JSON command and sends a test message through the Management API.", + "message_publish.presentation.rabbitmq.destination_placeholder": "Example: orders.queue", + "message_publish.presentation.rabbitmq.destination_required": "Enter a Queue", + "message_publish.presentation.rabbitmq.success_hint": "When Exchange is empty, the default exchange is used and the Queue name is used as the routing key.", + "message_publish.presentation.rocketmq.alert": "This form builds a RocketMQ publish JSON command and sends a test message through the NameServer/Broker.", + "message_publish.presentation.rocketmq.destination_placeholder": "Example: orders.events", + "message_publish.presentation.rocketmq.key_placeholder": "Enter multiple Key values separated by commas", + "message_publish.presentation.rocketmq.success_hint": "Tag, Keys, Delay Level, and Properties are written into the RocketMQ message attributes.", + "message_publish.presentation.rocketmq.tag_placeholder": "Example: TagA", + "message_publish.presentation.topic_required": "Enter a Topic", + "proxy.backend.error.host_empty": "Proxy host is empty", + "proxy.backend.error.http_connect_failed": "Failed to connect to HTTP proxy: {{detail}}", + "proxy.backend.error.http_connect_read_failed": "Failed to read HTTP CONNECT response: {{detail}}", + "proxy.backend.error.http_connect_status_failed": "HTTP proxy CONNECT failed: {{status}}", + "proxy.backend.error.http_connect_write_failed": "Failed to send HTTP CONNECT request: {{detail}}", + "proxy.backend.error.listen_failed": "Failed to create local proxy listener: {{detail}}", + "proxy.backend.error.port_invalid": "Invalid proxy port: {{port}}", + "proxy.backend.error.remote_addr_invalid": "Invalid remote address: {{address}}", + "proxy.backend.error.socks5_connect_failed": "SOCKS5 proxy connection failed: {{detail}}", + "proxy.backend.error.socks5_dialer_failed": "Failed to create SOCKS5 proxy dialer: {{detail}}", + "proxy.backend.error.unsupported_type": "Unsupported proxy type: {{type}}", + "query_editor.action.ai_explain_sql": "AI Explain SQL", + "query_editor.action.ai_explain_sql_menu": "Explain SQL", + "query_editor.action.ai_generate_sql": "AI Generate SQL", + "query_editor.action.ai_generate_sql_menu": "Generate SQL", + "query_editor.action.ai_optimize_sql": "AI Optimize SQL", + "query_editor.action.ai_optimize_sql_menu": "Optimize SQL", + "query_editor.action.ai_schema_analysis": "Schema analysis", + "query_editor.action.export_sql_file": "Export SQL file", + "query_editor.action.format": "Format", + "query_editor.action.format_sql": "Format SQL", + "query_editor.action.hide_results_panel": "Hide results panel", + "query_editor.action.hide_results_panel_with_shortcut": "Hide results panel ({{shortcut}})", + "query_editor.action.more": "More", + "query_editor.action.rename_query": "Rename query", + "query_editor.action.resize_editor": "Drag to resize height", + "query_editor.action.results": "Results", + "query_editor.action.run": "Run", + "query_editor.action.run_with_shortcut": "Run ({{shortcut}})", + "query_editor.action.save": "Save", + "query_editor.action.save_with_shortcut": "Save ({{shortcut}})", + "query_editor.action.show_object_info": "Show Object Info", + "query_editor.action.show_results_panel": "Show results panel", + "query_editor.action.show_results_panel_with_shortcut": "Show results panel ({{shortcut}})", + "query_editor.action.stop": "Stop", + "query_editor.ai_prompt.context": "Context: {{type}} {{name}}, selected database {{database}}.\n", + "query_editor.ai_prompt.default_database": "Default", + "query_editor.ai_prompt.default_source": "Database", + "query_editor.ai_prompt.diagnose": "I got an error while executing this SQL:\n```sql\n{{sql}}\n```\n\nThe database returned this error:\n```text\n{{error}}\n```\n\nAnalyze the cause and suggest a fix.", + "query_editor.ai_prompt.explain": "Explain the execution logic of this SQL statement:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.generate": "Generate a query based on the current database schema.", + "query_editor.ai_prompt.optimize": "Analyze this SQL statement for performance issues and suggest optimizations:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.schema": "Analyze the current database schema and suggest performance and design improvements.", + "query_editor.completion.action.absolute_value": "absolute value", + "query_editor.completion.action.approximate_distinct": "approximate distinct", + "query_editor.completion.action.approximate_distinct_count": "approximate distinct count", + "query_editor.completion.action.approximate_percentile": "approximate percentile", + "query_editor.completion.action.approximate_quantile": "approximate quantile", + "query_editor.completion.action.array_aggregation": "array aggregation", + "query_editor.completion.action.array_length": "array length", + "query_editor.completion.action.average": "average", + "query_editor.completion.action.bitmap_aggregation": "bitmap aggregation", + "query_editor.completion.action.bitmap_construction": "build bitmap", + "query_editor.completion.action.bitmap_count": "bitmap count", + "query_editor.completion.action.boolean_and_aggregation": "boolean AND aggregation", + "query_editor.completion.action.boolean_or_aggregation": "boolean OR aggregation", + "query_editor.completion.action.character_length": "character length", + "query_editor.completion.action.concat_with_separator": "concatenate with separator", + "query_editor.completion.action.concatenation": "concatenate", + "query_editor.completion.action.condition_mapping": "condition mapping", + "query_editor.completion.action.conditional_check": "conditional check", + "query_editor.completion.action.count": "count", + "query_editor.completion.action.current_database": "current database", + "query_editor.completion.action.current_date": "current date", + "query_editor.completion.action.current_date_time": "current date and time", + "query_editor.completion.action.current_time": "current time", + "query_editor.completion.action.current_timestamp": "current timestamp", + "query_editor.completion.action.current_user": "current user", + "query_editor.completion.action.database_current_time": "database current time", + "query_editor.completion.action.date_addition": "date addition", + "query_editor.completion.action.date_conversion": "convert to date", + "query_editor.completion.action.date_difference": "date difference", + "query_editor.completion.action.date_field_extraction": "extract date field", + "query_editor.completion.action.date_formatting": "date formatting", + "query_editor.completion.action.date_subtraction": "date subtraction", + "query_editor.completion.action.date_truncation": "date truncation", + "query_editor.completion.action.date_value": "date", + "query_editor.completion.action.datetime_conversion": "convert to date and time", + "query_editor.completion.action.datetime_value": "date and time", + "query_editor.completion.action.decimal_truncation": "truncate decimals", + "query_editor.completion.action.dense_rank": "dense rank", + "query_editor.completion.action.distinct_array_aggregation": "distinct array aggregation", + "query_editor.completion.action.e_power": "power of e", + "query_editor.completion.action.elapsed_time": "elapsed time", + "query_editor.completion.action.epoch_seconds": "epoch seconds", + "query_editor.completion.action.exact_distinct": "exact distinct", + "query_editor.completion.action.first_non_null": "return first non-NULL", + "query_editor.completion.action.first_value": "first value", + "query_editor.completion.action.format_as_text": "format as text", + "query_editor.completion.action.group_concatenation": "grouped concatenation", + "query_editor.completion.action.guid_generation": "generate GUID", + "query_editor.completion.action.hexadecimal": "hexadecimal", + "query_editor.completion.action.high_precision_current_time": "high-precision current time", + "query_editor.completion.action.hll_aggregation": "HLL aggregation", + "query_editor.completion.action.hll_hash": "HLL hash", + "query_editor.completion.action.instant_rate_of_change": "instant rate of change", + "query_editor.completion.action.int64_conversion": "convert to Int64", + "query_editor.completion.action.interpolation": "interpolation", + "query_editor.completion.action.json_string_extraction": "JSON string extraction", + "query_editor.completion.action.json_unquote": "remove JSON quotes", + "query_editor.completion.action.json_value_extraction": "JSON value extraction", + "query_editor.completion.action.json_value_set": "set JSON value", + "query_editor.completion.action.jsonb_path_extraction": "JSONB path extraction", + "query_editor.completion.action.julian_day": "Julian day", + "query_editor.completion.action.last_insert_id": "last insert ID", + "query_editor.completion.action.last_row": "last row", + "query_editor.completion.action.last_value": "last value", + "query_editor.completion.action.least_squares": "least squares", + "query_editor.completion.action.left_padding": "left padding", + "query_editor.completion.action.left_space_trimming": "trim left spaces", + "query_editor.completion.action.left_substring": "extract from left", + "query_editor.completion.action.length": "length", + "query_editor.completion.action.list_aggregation": "list aggregation", + "query_editor.completion.action.list_unnest": "unnest list", + "query_editor.completion.action.log_base_10": "base-10 logarithm", + "query_editor.completion.action.log_base_2": "base-2 logarithm", + "query_editor.completion.action.logarithm": "logarithm", + "query_editor.completion.action.lowercase": "convert to lowercase", + "query_editor.completion.action.maximum": "maximum", + "query_editor.completion.action.md5_hash": "MD5 hash", + "query_editor.completion.action.minimum": "minimum", + "query_editor.completion.action.modulo": "modulo", + "query_editor.completion.action.month_addition": "add months", + "query_editor.completion.action.month_difference": "month difference", + "query_editor.completion.action.month_end_date": "month-end date", + "query_editor.completion.action.next_row": "next row", + "query_editor.completion.action.null_branch": "NULL branch", + "query_editor.completion.action.null_if_equal": "return NULL if equal", + "query_editor.completion.action.null_replacement": "null replacement", + "query_editor.completion.action.number_conversion": "convert to number", + "query_editor.completion.action.number_formatting": "number formatting", + "query_editor.completion.action.position_lookup": "find position", + "query_editor.completion.action.power_operation": "power operation", + "query_editor.completion.action.previous_row": "previous row", + "query_editor.completion.action.quantile": "quantile", + "query_editor.completion.action.random_number": "random number", + "query_editor.completion.action.rank": "rank", + "query_editor.completion.action.rate_of_change": "rate of change", + "query_editor.completion.action.regex_match": "regex match", + "query_editor.completion.action.regex_replace": "regex replace", + "query_editor.completion.action.replacement": "replace", + "query_editor.completion.action.right_padding": "right padding", + "query_editor.completion.action.right_space_trimming": "trim right spaces", + "query_editor.completion.action.right_substring": "extract from right", + "query_editor.completion.action.round_down": "round down", + "query_editor.completion.action.round_up": "round up", + "query_editor.completion.action.rounding": "round", + "query_editor.completion.action.row_number": "row number", + "query_editor.completion.action.set_lookup": "set lookup", + "query_editor.completion.action.sha1_hash": "SHA1 hash", + "query_editor.completion.action.sha2_hash": "SHA2 hash", + "query_editor.completion.action.space_trimming": "trim spaces", + "query_editor.completion.action.spread": "spread", + "query_editor.completion.action.sql_literal": "SQL literal", + "query_editor.completion.action.square_root": "square root", + "query_editor.completion.action.string_aggregation": "string aggregation", + "query_editor.completion.action.string_conversion": "convert to string", + "query_editor.completion.action.string_repetition": "repeat string", + "query_editor.completion.action.string_reversal": "reverse string", + "query_editor.completion.action.string_to_date": "string to date", + "query_editor.completion.action.string_to_timestamp": "string to timestamp", + "query_editor.completion.action.struct_construction": "build struct", + "query_editor.completion.action.substring_extraction": "extract substring", + "query_editor.completion.action.sum": "sum", + "query_editor.completion.action.time_difference": "time difference", + "query_editor.completion.action.time_value": "time", + "query_editor.completion.action.time_weighted_average": "time-weighted average", + "query_editor.completion.action.timestamp_difference": "timestamp difference", + "query_editor.completion.action.truncate_date_or_number": "truncate date or number", + "query_editor.completion.action.try_conversion": "try conversion", + "query_editor.completion.action.type_conversion": "type conversion", + "query_editor.completion.action.unix_time_to_datetime": "Unix time to date and time", + "query_editor.completion.action.unix_timestamp": "Unix timestamp", + "query_editor.completion.action.uppercase": "convert to uppercase", + "query_editor.completion.action.uuid_generation": "generate UUID", + "query_editor.completion.action.value_formatting": "format value", + "query_editor.completion.action.version": "version", + "query_editor.completion.detail.aggregate": "Aggregate function", + "query_editor.completion.detail.aggregate_count": "Aggregate - count", + "query_editor.completion.detail.conditional": "Conditional function", + "query_editor.completion.detail.conditional_if": "Conditional - if", + "query_editor.completion.detail.conversion": "Type conversion function", + "query_editor.completion.detail.conversion_cast": "Conversion - type cast", + "query_editor.completion.detail.crypto_md5": "Hash - MD5", + "query_editor.completion.detail.date_now": "Date - current date and time", + "query_editor.completion.detail.date_time": "Date and time function", + "query_editor.completion.detail.info": "Information function", + "query_editor.completion.detail.info_database": "Info - current database", + "query_editor.completion.detail.json": "JSON function", + "query_editor.completion.detail.json_extract": "JSON - extract value", + "query_editor.completion.detail.math": "Math function", + "query_editor.completion.detail.math_abs": "Math - absolute value", + "query_editor.completion.detail.modifier_distinct": "Modifier - distinct", + "query_editor.completion.detail.sql_function": "SQL function", + "query_editor.completion.detail.string": "String function", + "query_editor.completion.detail.string_concat": "String - concatenate", + "query_editor.completion.detail.utility": "Utility function", + "query_editor.completion.detail.window": "Window function", + "query_editor.completion.detail.window_row_number": "Window - row number", + "query_editor.completion.documentation.comment": "Comment: {{comment}}", + "query_editor.empty_state.description": "Run a query to display results below in the new data grid.", + "query_editor.empty_state.title": "Awaiting SQL execution", + "query_editor.format.keyword_lower": "Lowercase keywords", + "query_editor.format.keyword_upper": "Uppercase keywords", + "query_editor.format.restore_last_format": "Restore last format", + "query_editor.format.shortcut_settings": "Shortcut settings...", + "query_editor.format.snippet_settings": "Snippet settings...", + "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + click to open this function", + "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + click to open this materialized view", + "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + click to open this stored procedure", + "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + click to open this table", + "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + click to open this trigger", + "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + click to open this view", + "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + click to switch to this database", + "query_editor.max_rows.option_1000": "Max rows: 1000", + "query_editor.max_rows.option_20000": "Max rows: 20000", + "query_editor.max_rows.option_500": "Max rows: 500", + "query_editor.max_rows.option_5000": "Max rows: 5000", + "query_editor.max_rows.option_unlimited": "Max rows: unlimited", + "query_editor.max_rows.tooltip": "Maximum returned rows. SELECT statements get an automatic LIMIT to prevent very large result sets from freezing the UI.", + "query_editor.message.append_success": "Code appended.", + "query_editor.message.cancel_failed": "Failed to cancel query: {{error}}", + "query_editor.message.cancel_no_running": "No running query to cancel.", + "query_editor.message.cancel_success": "Query canceled.", + "query_editor.message.connection_not_found": "Connection not found.", + "query_editor.message.execution_failed_with_error": "Query execution failed: {{error}}", + "query_editor.message.execution_multi_success": "Executed {{statements}} statements and produced {{results}} result sets.", + "query_editor.message.execution_result_sets_success": "Execution finished and produced {{results}} result sets.", + "query_editor.message.execution_success": "Execution succeeded.", + "query_editor.message.export_sql_file_failed": "Export SQL file failed: {{error}}", + "query_editor.message.export_sql_file_success": "SQL file exported.", + "query_editor.message.format_failed": "Format failed: SQL syntax may be invalid.", + "query_editor.message.format_restore_success": "Restored the pre-format SQL snapshot.", + "query_editor.message.insert_success": "Code inserted at the current cursor.", + "query_editor.message.no_executable_sql": "No executable SQL.", + "query_editor.message.no_format_restore_snapshot": "No pre-format SQL snapshot is available to restore.", + "query_editor.message.no_selectable_sql": "No selectable SQL statement.", + "query_editor.message.object_info_target_not_found": "The cursor is not on a recognized table or column.", + "query_editor.message.page_query_empty": "The page query returned no result set.", + "query_editor.message.page_query_failed": "Page query failed: {{error}}", + "query_editor.message.read_only_index_metadata_unavailable": "Unable to load unique index metadata, so changes cannot be committed safely.", + "query_editor.message.read_only_no_safe_locator": "No primary key or usable unique index was detected, so changes cannot be committed safely.", + "query_editor.message.read_only_oracle_rowid_injection_unavailable": "The Oracle query uses *, so the ROWID locator column could not be injected automatically. Results remain read-only.", + "query_editor.message.read_only_system_metadata": "System metadata query results remain read-only.", + "query_editor.message.read_only_table_locator_metadata_unavailable": "Unable to load primary key/unique index metadata for {{table}}, so changes cannot be committed safely.", + "query_editor.message.read_only_warning_with_detail": "Query results remain read-only: {{detail}}", + "query_editor.message.refresh_failed": "Refresh failed: {{error}}", + "query_editor.message.renamed": "Query renamed.", + "query_editor.message.save_first_before_rename": "Save the query before renaming it.", + "query_editor.message.save_query_failed": "Failed to save query: {{error}}", + "query_editor.message.save_sql_file_failed": "Failed to save SQL file: {{error}}", + "query_editor.message.saved": "Query saved.", + "query_editor.message.select_database_first": "Select a database first.", + "query_editor.message.sql_file_saved": "SQL file saved.", + "query_editor.message.statement_failed_prefix": "Statement {{index}} failed: ", + "query_editor.message.unsupported_source": "This data source does not support the SQL query editor. Use its dedicated page instead.", + "query_editor.object_info.column": "Column", + "query_editor.object_info.database": "Database", + "query_editor.object_info.label.database": "Database", + "query_editor.object_info.label.schema": "Schema", + "query_editor.object_info.label.separator": ": ", + "query_editor.object_info.label.table": "Table", + "query_editor.object_info.label.type": "Type", + "query_editor.object_info.materialized_view": "Materialized view", + "query_editor.object_info.table": "Table", + "query_editor.placeholder.connection": "Select connection", + "query_editor.placeholder.database": "Select database", + "query_editor.result.affected_rows": "Affected rows: {{count}}", + "query_editor.result.ai_diagnose": "AI diagnose", + "query_editor.result.close": "Close result", + "query_editor.result.execution_failed": "Execution failed", + "query_editor.result.execution_success": "Execution succeeded", + "query_editor.result.tab_title": "Result {{index}} ({{count}})", + "query_editor.result.tab_title_success": "Result {{index}} ✓", + "query_editor.results_panel.action.hide": "Hide", + "query_editor.results_panel.aria.hide": "Hide results panel", + "query_editor.results_panel.menu.close_all": "Close all tabs", + "query_editor.results_panel.menu.close_left": "Close tabs to the left", + "query_editor.results_panel.menu.close_other": "Close other tabs", + "query_editor.results_panel.menu.close_right": "Close tabs to the right", + "query_editor.results_panel.message.title": "Execution messages", + "query_editor.results_panel.panel.title": "Results panel", + "query_editor.results_panel.tab.message": "Message {{index}}", + "query_editor.results_panel.tab.result": "Result {{index}}", + "query_editor.results_panel.tooltip.hide": "Hide results panel", + "query_editor.results_panel.tooltip.hide_with_shortcut": "Hide results panel ({{shortcut}})", + "query_editor.save_modal.name_label": "Query name", + "query_editor.save_modal.name_placeholder": "Example: query all users", + "query_editor.save_modal.name_required": "Enter a query name.", + "query_editor.save_modal.rename_ok": "Rename", + "query_editor.save_modal.rename_title": "Rename query", + "query_editor.save_modal.title": "Save query", + "query_editor.save_modal.unnamed": "Untitled query", + "query_editor.slash_command.diff.description": "Compare table differences and generate changes", + "query_editor.slash_command.diff.label": "Table comparison", + "query_editor.slash_command.diff.prompt": "Compare these two table structures and generate ALTER statements to migrate from the old version to the new version.", + "query_editor.slash_command.explain.description": "Explain the selected SQL logic", + "query_editor.slash_command.explain.label": "Explain SQL", + "query_editor.slash_command.explain.prompt": "Explain the execution logic of this SQL statement:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.index.description": "Recommend an index strategy", + "query_editor.slash_command.index.label": "Index advice", + "query_editor.slash_command.index.prompt": "Recommend an index strategy based on the current table structure and common query patterns, and include SQL where useful.", + "query_editor.slash_command.mock.description": "Generate INSERT test data", + "query_editor.slash_command.mock.label": "Mock data", + "query_editor.slash_command.mock.prompt": "Generate 10 business-meaningful INSERT test rows for the related table.", + "query_editor.slash_command.optimize.description": "Analyze SQL performance bottlenecks", + "query_editor.slash_command.optimize.label": "Optimize analysis", + "query_editor.slash_command.optimize.prompt": "Analyze this SQL statement for performance issues and suggest optimizations:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.query.description": "Describe what you want to query", + "query_editor.slash_command.query.label": "Natural language query", + "query_editor.slash_command.query.prompt": "Write an SQL query for this request:", + "query_editor.slash_command.schema.description": "Review table structure design quality", + "query_editor.slash_command.schema.label": "Table design review", + "query_editor.slash_command.schema.prompt": "Review the related table design, including field types, normalization, indexes, and improvement suggestions.", + "query_editor.slash_command.sql.description": "Describe the requirement and generate a statement", + "query_editor.slash_command.sql.label": "Generate SQL", + "query_editor.slash_command.sql.prompt": "Generate SQL for this requirement:", "query_editor.sql_error.rule.column_missing.explanation": "The SQL references a column that is not in the result set, is spelled differently, or does not exist on the current table.", "query_editor.sql_error.rule.column_missing.label": "Column does not exist", "query_editor.sql_error.rule.column_missing.suggestion": "Check column names, aliases, casing, table aliases, and whether the column belongs to the current FROM/JOIN object.", @@ -7151,10 +6053,198 @@ "query_editor.sql_error.wrapper.raw_line": "Raw error: {{error}}", "query_editor.sql_error.wrapper.semantic_line": "Semantic meaning: {{label}}. {{explanation}}", "query_editor.sql_error.wrapper.suggestion_line": "Suggestion: {{suggestion}}", + "query_editor.transaction.action.commit": "Commit", + "query_editor.transaction.action.commit_with_count": "Commit ({{count}})", + "query_editor.transaction.action.rollback": "Rollback", + "query_editor.transaction.delay.immediate": "Immediately", + "query_editor.transaction.message.pending_managed_transaction": "The SQL editor already has a pending transaction. Commit or roll it back before running another DML statement.", + "query_editor.transaction.mode.auto": "Auto", + "query_editor.transaction.mode.manual": "Manual", + "query_editor.transaction.mode.tooltip": "Like DBeaver: when the SQL editor runs DML such as INSERT/UPDATE/DELETE/MERGE/REPLACE, GoNavi first opens a managed transaction. Manual mode requires commit/rollback; auto mode automatically runs COMMIT after successful execution.", + "query_editor.transaction.status.auto_commit_countdown": "Auto commit in {{seconds}}s", + "query_editor.transaction.status.auto_committing": "Auto committing", + "query.format": "Format SQL", + "query.new": "New Query", + "query.run": "Run", + "query.save": "Save Query", + "query.stop": "Stop", + "redis_command.action.clear_console": "Clear console", + "redis_command.action.execute": "Run (Cmd+Enter)", + "redis_command.completion.detail": "Redis command", + "redis_command.message.command_required": "Enter a command to run", + "redis_command.output.empty_hint": "Run commands in this console; results are shown as returned.", + "redis_command.output.selection_tip": "Tip: select any lines and press Ctrl + Enter to run only that selection.", + "redis_command.output.title": "Execution output", + "redis_command.state.connection_not_found": "Connection not found", + "redis_command.title.console": "Redis Console", + "redis_monitor.action.pause_refresh": "Pause refresh", + "redis_monitor.action.refresh_now": "Refresh now", + "redis_monitor.action.resume_refresh": "Resume refresh", + "redis_monitor.chart.clients_keys": "Connection info (Clients & Keys)", + "redis_monitor.chart.cpu_usage": "CPU usage", + "redis_monitor.chart.memory": "Memory overhead", + "redis_monitor.chart.qps": "Request throughput (QPS)", + "redis_monitor.message.fetch_failed": "Failed to fetch Redis info: {{detail}}", + "redis_monitor.metric.blocked_clients": "Blocked: {{value}}", + "redis_monitor.metric.clients": "Clients", + "redis_monitor.metric.days": "Days: {{value}}", + "redis_monitor.metric.memory_peak": "Peak: {{value}}", + "redis_monitor.metric.memory_used": "Used memory", + "redis_monitor.metric.ops": "Throughput (OPS)", + "redis_monitor.metric.uptime": "Uptime", + "redis_monitor.series.clients": "Clients", + "redis_monitor.series.rss_memory": "RSS memory", + "redis_monitor.series.system": "System", + "redis_monitor.series.total_keys": "Total Keys", + "redis_monitor.series.used_memory": "Used memory", + "redis_monitor.series.user": "User", + "redis_monitor.server_details.title": "Detailed server parameters", + "redis_monitor.state.connection_not_found": "Connection not found", + "redis_monitor.title.instance": "Redis instance monitor", + "redis_viewer.action.add_field": "Add field", + "redis_viewer.action.add_list_head": "Push to head", + "redis_viewer.action.add_list_tail": "Push to tail", + "redis_viewer.action.add_member": "Add member", + "redis_viewer.action.add_stream_entry": "Add entry", + "redis_viewer.action.clear_group_selection": "Clear selection", + "redis_viewer.action.clear_selection": "Clear selection", + "redis_viewer.action.copy": "Copy", + "redis_viewer.action.copy_key_name": "Copy Key name", + "redis_viewer.action.copy_value": "Copy value", + "redis_viewer.action.delete_key": "Delete Key", + "redis_viewer.action.delete_selected": "Delete selected ({{count}})", + "redis_viewer.action.edit": "Edit", + "redis_viewer.action.load_more": "Load more", + "redis_viewer.action.new_key": "New", + "redis_viewer.action.refresh": "Refresh", + "redis_viewer.action.rename_key": "Rename Key", + "redis_viewer.action.select_all_loaded": "Select all loaded", + "redis_viewer.action.select_group": "Select", + "redis_viewer.action.set_ttl": "Set TTL", + "redis_viewer.aria.collapse_group": "Collapse group", + "redis_viewer.aria.expand_group": "Expand group", + "redis_viewer.confirm.delete_field": "Delete this field?", + "redis_viewer.confirm.delete_key": "Delete Key \"{{key}}\"?", + "redis_viewer.confirm.delete_member": "Delete this member?", + "redis_viewer.confirm.delete_selected": "Delete the selected {{count}} Keys?", + "redis_viewer.confirm.delete_stream_entry": "Delete this Stream entry?", + "redis_viewer.field.field_name": "Field name", + "redis_viewer.field.fields_json": "Fields JSON:", + "redis_viewer.field.key": "Key", + "redis_viewer.field.member": "Member:", + "redis_viewer.field.new_key_name": "New Key name", + "redis_viewer.field.new_score": "New score:", + "redis_viewer.field.score": "Score:", + "redis_viewer.field.stream_id": "ID (optional, default *):", + "redis_viewer.field.ttl_seconds": "TTL (seconds)", + "redis_viewer.field.value": "Value", + "redis_viewer.help.ttl_forever": "-1 means no expiration", + "redis_viewer.hint.binary_readonly": "Binary data cannot be edited", + "redis_viewer.hint.switch_auto_to_edit": "Switch to Auto mode to edit", + "redis_viewer.label.encoding": "Encoding: {{encoding}}", + "redis_viewer.label.keys_count": "{{count}} Keys", + "redis_viewer.label.length": "Length: {{count}}", + "redis_viewer.label.node_count": "{{count}} nodes", + "redis_viewer.label.original_key": "Original Key: {{key}}", + "redis_viewer.message.add_failed": "Add failed: {{detail}}", + "redis_viewer.message.add_success": "Added", + "redis_viewer.message.add_success_with_id": "Added{{id}}", + "redis_viewer.message.copied": "Copied", + "redis_viewer.message.copy_failed": "Copy failed", + "redis_viewer.message.create_failed": "Create failed: {{detail}}", + "redis_viewer.message.create_success": "Created", + "redis_viewer.message.delete_failed": "Delete failed: {{detail}}", + "redis_viewer.message.delete_success": "Deleted", + "redis_viewer.message.deleted_keys": "Deleted {{count}} Keys", + "redis_viewer.message.fields_json_invalid": "Fields JSON is invalid", + "redis_viewer.message.fields_must_be_json_object": "Fields must be a JSON object", + "redis_viewer.message.fields_required": "Provide at least one field", + "redis_viewer.message.key_check_failed": "Failed to check target Key: {{detail}}", + "redis_viewer.message.key_missing_removed": "Key no longer exists or has expired, and was removed from the list", + "redis_viewer.message.key_name_copied": "Key name copied", + "redis_viewer.message.load_keys_failed": "Failed to load Keys: {{detail}}", + "redis_viewer.message.new_key_name_required": "Enter the new Key name", + "redis_viewer.message.rename_failed": "Rename failed: {{detail}}", + "redis_viewer.message.rename_same_key": "The new Key name must differ from the original", + "redis_viewer.message.rename_success": "Key renamed", + "redis_viewer.message.save_failed": "Save failed: {{detail}}", + "redis_viewer.message.save_success": "Saved", + "redis_viewer.message.set_failed": "Set failed: {{detail}}", + "redis_viewer.message.stream_entry_not_deleted": "No Stream entry was deleted; it may no longer exist", + "redis_viewer.message.target_key_exists": "Target Key already exists: {{key}}", + "redis_viewer.message.ttl_set_success": "TTL updated", + "redis_viewer.message.update_failed": "Update failed: {{detail}}", + "redis_viewer.message.update_success": "Updated", + "redis_viewer.message.value_load_failed": "Failed to get value: {{detail}}", + "redis_viewer.modal.add_element": "Add element", + "redis_viewer.modal.add_element_head": "Add element to head", + "redis_viewer.modal.add_field": "Add field", + "redis_viewer.modal.add_member": "Add member", + "redis_viewer.modal.add_stream_entry": "Add Stream entry", + "redis_viewer.modal.edit_field": "Edit field: {{field}}", + "redis_viewer.modal.edit_index": "Edit index {{index}}", + "redis_viewer.modal.edit_value": "Edit value", + "redis_viewer.modal.new_key": "New Key", + "redis_viewer.modal.rename_key": "Rename Key", + "redis_viewer.modal.set_ttl": "Set TTL", + "redis_viewer.modal.update_score": "Update score", + "redis_viewer.notice.large_keyspace_mode": "Large keyspace performance mode is enabled. Node rendering is simplified and up to {{count}} expanded groups are kept.", + "redis_viewer.placeholder.key_name": "Key name", + "redis_viewer.placeholder.member_value": "Enter member value", + "redis_viewer.placeholder.new_element_value": "Enter new element value", + "redis_viewer.placeholder.new_key_name": "new:key:name", + "redis_viewer.placeholder.new_member_value": "Enter new member value", + "redis_viewer.placeholder.search_exact": "Enter full Key or namespace for exact search", + "redis_viewer.placeholder.search_fuzzy": "Search Keys (fuzzy match)", + "redis_viewer.placeholder.stream_id": "For example: * or 1723110000000-0", + "redis_viewer.placeholder.value": "Value", + "redis_viewer.search.exact": "Exact", + "redis_viewer.search.fuzzy": "Fuzzy", + "redis_viewer.state.connection_not_found": "Connection not found", + "redis_viewer.state.empty_selection": "Select a Key to view details", + "redis_viewer.table.action": "Actions", + "redis_viewer.table.field": "Field", + "redis_viewer.table.fields": "Fields", + "redis_viewer.table.index": "Index", + "redis_viewer.table.member": "Member", + "redis_viewer.table.score": "Score", + "redis_viewer.table.value": "Value", + "redis_viewer.title.active_key": "Active Key", + "redis_viewer.title.key_explorer": "Key Explorer", + "redis_viewer.title.namespace_key": "Namespace / Key", + "redis_viewer.title.type_ttl": "Type / TTL", + "redis_viewer.tooltip.copy_fields_json": "Copy fields JSON", + "redis_viewer.tooltip.copy_id": "Copy ID", + "redis_viewer.tooltip.copy_key_name": "Copy Key name", + "redis_viewer.tooltip.copy_value": "Copy value", + "redis_viewer.tooltip.resize_panels": "Drag to resize", + "redis_viewer.topology.cluster": "Cluster", + "redis_viewer.topology.sentinel": "Sentinel", + "redis_viewer.topology.single": "Single", + "redis_viewer.ttl.days_hours": "{{days}}d {{hours}}h", + "redis_viewer.ttl.expired": "Expired", + "redis_viewer.ttl.forever": "Persistent", + "redis_viewer.ttl.hours_minutes": "{{hours}}h {{minutes}}m", + "redis_viewer.ttl.minutes_seconds": "{{minutes}}m {{seconds}}s", + "redis_viewer.ttl.seconds": "{{seconds}}s", + "redis_viewer.validation.key_required": "Enter a Key", + "redis_viewer.validation.new_key_name_required": "Enter the new Key name", + "redis_viewer.validation.value_required": "Enter a value", + "redis_viewer.view.auto": "Auto", + "redis_viewer.view.hex": "Hex", + "redis_viewer.view.text": "Raw text", + "redis_viewer.view.title": "View mode", + "redis.backend.error.address_required": "Redis connection address cannot be empty", + "redis.backend.error.argument_invalid_type": "{{name}} has an invalid type", + "redis.backend.error.argument_required": "{{name}} is required", "redis.backend.error.cluster_connect_failed": "Redis Cluster connection failed: {{detail}}", + "redis.backend.error.command_required": "Command cannot be empty", "redis.backend.error.connect_attempt_failed": "Attempt {{attempt}} connection failed: {{detail}}", "redis.backend.error.connect_failed": "Redis connection failed: {{detail}}", "redis.backend.error.connect_tls_setup_failed": "Attempt {{attempt}} TLS setup failed: {{detail}}", + "redis.backend.error.invalid_node_address": "Invalid Redis node address: {{address}}", + "redis.backend.error.invalid_port": "Invalid Redis port: {{address}}", + "redis.backend.error.node_address_required": "Redis node address cannot be empty", "redis.backend.error.select_db_index_invalid": "Invalid database index: {{value}}", "redis.backend.error.select_db_index_out_of_range": "Database index must be between {{min}} and {{max}}", "redis.backend.error.select_db_index_required": "SELECT command requires a database index", @@ -7165,13 +6255,144 @@ "redis.backend.label.topology_cluster": "Cluster", "redis.backend.label.topology_multi_node": "multi-node", "redis.backend.label.topology_sentinel": "Sentinel", + "redis.backend.message.add_success": "Add succeeded", + "redis.backend.message.connect_success": "Connection succeeded", + "redis.backend.message.delete_success": "Delete succeeded", + "redis.backend.message.flush_success": "Flush succeeded", + "redis.backend.message.rename_success": "Rename succeeded", + "redis.backend.message.select_db_success": "Database switched", + "redis.backend.message.set_success": "Set succeeded", + "redis.db_alias.menu.set": "Set alias", + "redis.db_alias.modal.placeholder": "e.g. cache, sessions (leave empty to clear)", + "redis.db_alias.modal.title": "Alias for {{db}}", + "saved_query.default_name": "Query {{index}}", "saved_query.error.missing_context": "Saved query is missing SQL, connection, or database context", + "security_update.action.open_ai_settings": "AI Settings", + "security_update.action.open_connection": "Open Connection", + "security_update.action.open_proxy_settings": "Proxy Settings", + "security_update.action.retry_update": "Check Again", + "security_update.action.view_details": "View Details", + "security_update.backend.issue.ai_provider.migration_required": "AI provider configuration is still saved in the current app configuration. After the security update completes, it will be moved to the new secure storage.", + "security_update.backend.issue.ai_provider.missing_or_resave": "AI provider configuration no longer exists or still needs to be saved again before the security update can be completed.", + "security_update.backend.issue.ai_provider.secret_missing": "AI provider configuration needs more information before the security update can be completed.", + "security_update.backend.issue.connection.incomplete": "Connection configuration still needs more information before the security update can be completed.", + "security_update.backend.issue.connection.missing_or_resave": "Connection configuration no longer exists or still needs to be saved again before the security update can be completed.", + "security_update.backend.issue.connection.password_missing": "Connection password is missing. Save it again before continuing.", + "security_update.backend.issue.global_proxy.missing_or_resave": "Global proxy settings no longer exist or still need to be saved again before the security update can be completed.", + "security_update.backend.issue.global_proxy.password_incomplete": "Global proxy password still needs more information before the security update can be completed.", + "security_update.backend.issue.global_proxy.password_missing": "Global proxy password is missing. Save it again before continuing.", + "security_update.backend.issue.global_proxy.title": "Global Proxy", + "security_update.backend.issue.system.message": "The current environment could not complete this security update. Try again later.", + "security_update.backend.issue.system.title": "Security update was not completed", + "security_update.banner.action.restart_update": "Restart Update", + "security_update.banner.action.retry_check": "Check Again", + "security_update.banner.action.start_now": "Update Now", + "security_update.banner.action.view_details": "View Details", + "security_update.banner.title": "Saved configurations can be securely updated", + "security_update.bootstrap.legacy.connection.message": "This connection is still saved in the current app's local configuration. After the security update completes, it will be moved to the new secure storage.", + "security_update.bootstrap.legacy.global_proxy.message": "Global proxy settings are still saved in the current app's local configuration. After the security update completes, they will be moved to the new secure storage.", + "security_update.bootstrap.legacy.global_proxy.title": "Global Proxy", + "security_update.error.capability_unavailable": "Security update capability is unavailable", + "security_update.intro.action.details": "View Details", + "security_update.intro.action.later": "Remind Me Later", + "security_update.intro.action.start_now": "Update Now", + "security_update.intro.description": "To move saved connections, proxy settings, and related service configuration to the new secure storage, this update needs to run once locally. A local backup is created before the update. If it does not finish, the system keeps the currently usable configuration and you can continue later.", + "security_update.intro.subtitle": "Complete a local configuration update before using the new secure storage.", + "security_update.intro.title": "Saved Configuration Security Update", + "security_update.item_status.failed": "Failed", + "security_update.item_status.needs_attention": "Needs Attention", + "security_update.item_status.pending": "Pending", + "security_update.item_status.skipped": "Skipped", + "security_update.item_status.updated": "Updated", + "security_update.progress.default_detail": "The currently usable configuration will be kept during the update. Please wait.", + "security_update.repair.warning.connection_not_found": "The matching connection was not found. Check the latest status first.", + "security_update.settings.action.close": "Close", + "security_update.settings.action.restart_update": "Restart Update", + "security_update.settings.action.retry_check": "Check Again", + "security_update.settings.action.start": "Start Update", + "security_update.settings.backup_path": "Backup location: ", + "security_update.settings.current_status": "Current status: {{status}}", + "security_update.settings.empty_pending": "No pending items", + "security_update.settings.item_default_message": "This item needs more attention before the security update can be completed.", + "security_update.settings.item_severity": "Level: {{severity}}", + "security_update.settings.item_status": "Status: {{status}}", + "security_update.settings.last_error": "Latest error: ", + "security_update.settings.pending_list": "Pending Items", + "security_update.settings.recent_result": "Latest Result", + "security_update.settings.scope_title": "Affected Scope", + "security_update.settings.subtitle": "Manage the security update status and pending items for saved configurations.", + "security_update.settings.summary.failed": "Failed", + "security_update.settings.summary.pending": "Pending", + "security_update.settings.summary.skipped": "Skipped", + "security_update.settings.summary.total": "Total", + "security_update.settings.summary.updated": "Updated", + "security_update.settings.title": "Security Update", + "security_update.severity.high": "High Risk", + "security_update.severity.low": "Low Risk", + "security_update.severity.medium": "Medium Risk", + "security_update.status.completed.description": "Saved configurations have completed the security update.", + "security_update.status.completed.label": "Completed", + "security_update.status.in_progress.description": "Checking and updating secure storage for saved configurations.", + "security_update.status.in_progress.label": "Updating", + "security_update.status.needs_attention.description": "The update is not complete yet. A few configurations need your attention.", + "security_update.status.needs_attention.label": "Needs Attention", + "security_update.status.not_detected.description": "No security update needs attention right now.", + "security_update.status.not_detected.label": "Not Detected", + "security_update.status.pending.description": "A security update is available. You can start now or continue later.", + "security_update.status.pending.label": "Pending", + "security_update.status.postponed.description": "This security update has been postponed. The currently usable configuration is still kept.", + "security_update.status.postponed.label": "Pending", + "security_update.status.rolled_back.description": "This update did not complete. The system kept the currently usable configuration.", + "security_update.status.rolled_back.label": "Rolled Back", + "settings.language.description": "Choose the display language for GoNavi.", + "settings.language.english": "English", + "settings.language.follow_system": "Follow system", + "settings.language.german": "Deutsch", + "settings.language.japanese": "日本語", + "settings.language.restart_hint": "Some editors and system-level menus may require reopening the window to fully apply.", + "settings.language.russian": "Русский", + "settings.language.simplified_chinese": "Simplified Chinese", + "settings.language.title": "Language", + "settings.language.traditional_chinese": "繁體中文", + "settings.title": "Settings", + "sidebar.action.backup_database_count": "Back up databases ({{count}})", + "sidebar.action.backup_schema_data": "Back up (schema + data)", + "sidebar.action.batch_databases": "Batch databases", + "sidebar.action.batch_tables": "Batch tables", + "sidebar.action.cancel": "Cancel", + "sidebar.action.clear_selection": "Deselect all", + "sidebar.action.clear_tables": "Clear tables", + "sidebar.action.close": "Close", + "sidebar.action.continue": "Continue", + "sidebar.action.delete": "Delete", + "sidebar.action.export_data_only": "Data only (INSERT)", + "sidebar.action.export_database_schema_count": "Export database schemas ({{count}})", + "sidebar.action.export_schema": "Export schema", + "sidebar.action.invert_selection": "Invert selection", "sidebar.action.locate_current_tab": "Locate current tab", + "sidebar.action.locate_current_table": "Locate current open table", + "sidebar.action.new_group": "New group", + "sidebar.action.pin_table": "Pin table", + "sidebar.action.select_all": "Select all", + "sidebar.action.unpin_table": "Unpin table", + "sidebar.active_connection.actions": "Connection actions", + "sidebar.active_connection.current_host_database": "Current host and database", + "sidebar.active_connection.no_database_selected": "No database selected", + "sidebar.active_connection.no_host_selected": "No host selected", "sidebar.ai_prompt.explain.detail": "Focus on field meanings, primary keys/indexes, potential relationships, typical query scenarios, and risks.", "sidebar.ai_prompt.explain.intro": "Explain the structure and business meaning of table {{table}}.", "sidebar.ai_prompt.query.detail": "Include: a data preview query, a query filtered by key fields, and one aggregation or statistics query.", "sidebar.ai_prompt.query.intro": "Generate 3 common SQL queries for table {{table}}.", "sidebar.aria.switch_connection": "Switch to connection {{name}}", + "sidebar.badge.recommended": "Recommended", + "sidebar.batch_databases": "Batch database operations", + "sidebar.batch_tables": "Batch table operations", + "sidebar.batch.filtered_count": "Filtered {{filtered}} / {{total}} objects", + "sidebar.batch.group.tables": "Tables", + "sidebar.batch.group.views": "Views", + "sidebar.batch.no_matching_objects": "No matching objects", + "sidebar.batch.selected_databases": "Selected {{selected}} / {{total}} databases", + "sidebar.batch.selected_objects": "Selected {{selected}} / {{total}} objects", "sidebar.command_search.action.ask_ai.title": "Ask AI", "sidebar.command_search.action.new_connection.meta": "Create a database, runtime, or other data source connection", "sidebar.command_search.action.new_connection.title": "New data source", @@ -7187,49 +6408,480 @@ "sidebar.command_search.footer.navigate": "Navigate", "sidebar.command_search.footer.object_only": "Table objects only", "sidebar.command_search.footer.select": "Select", + "sidebar.command_search.label": "Search tables, connections, actions", + "sidebar.command_search.no_filter_content": "No filter text", + "sidebar.command_search.no_synced_filter": "No synced sidebar filter", + "sidebar.command_search.object_kind.all": "All", + "sidebar.command_search.object_kind.events": "Events", + "sidebar.command_search.object_kind.filter_aria": "Object filters", + "sidebar.command_search.object_kind.routines": "Routines", + "sidebar.command_search.object_kind.tables": "Tables", + "sidebar.command_search.object_kind.views": "Views", + "sidebar.command_search.placeholder": "Search tables, connections, actions... or ask AI", "sidebar.command_search.recent_sql_fallback": "SQL record", + "sidebar.command_search.reset_filter": "Reset sidebar filter", + "sidebar.command_search.scope.compact_smart": "Smart", + "sidebar.command_search.scope.database": "Database", + "sidebar.command_search.scope.description": "\"Smart\" automatically matches the most likely results; manual mode lets you combine filter dimensions.", + "sidebar.command_search.scope.host": "Host", + "sidebar.command_search.scope.manual_help": "Smart is mutually exclusive with other options. If you know you need objects, databases, Host, or tags, switch to manual scope to reduce noisy results.", + "sidebar.command_search.scope.manual_title": "Manual scope", + "sidebar.command_search.scope.multi_select": "Multiple selections supported", + "sidebar.command_search.scope.object": "Table objects", + "sidebar.command_search.scope.recommended": "Recommended", + "sidebar.command_search.scope.smart": "Smart", + "sidebar.command_search.scope.smart_help": "Best for everyday search; automatically covers common dimensions such as names, databases, Host, and tags.", + "sidebar.command_search.scope.summary_smart": "Smart", + "sidebar.command_search.scope.tag": "Tags", + "sidebar.command_search.scope.title": "Search scope", + "sidebar.command_search.scope.tooltip": "Search scope: {{scope}}", "sidebar.command_search.section.actions": "Actions", "sidebar.command_search.section.ai": "AI · Ask", "sidebar.command_search.section.goto": "Go to", "sidebar.command_search.section.recent": "Recent queries", + "sidebar.command_search.sync_to_filter_aria": "Sync to left-side filter", + "sidebar.command_search.sync_to_filter_tooltip": "Sync input to the left-side filter", + "sidebar.copy_object_name.copied": "{{label}} copied to clipboard", + "sidebar.copy_object_name.empty": "{{label}} is empty and cannot be copied", + "sidebar.copy_object_name.failed": "Failed to copy {{label}}: {{error}}", + "sidebar.copy_object_name.label.event": "Event name", + "sidebar.copy_object_name.label.materialized_view": "Materialized view name", + "sidebar.copy_object_name.label.table": "Table name", + "sidebar.copy_object_name.label.view": "View name", + "sidebar.error.unknown": "Unknown error", + "sidebar.external_sql_modal.action.create": "Create", + "sidebar.external_sql_modal.action.rename": "Rename", + "sidebar.external_sql_modal.field.directory_name": "Directory name", + "sidebar.external_sql_modal.field.sql_file_name": "SQL file name", + "sidebar.external_sql_modal.help.directory": "This directory only appears in the external SQL tree; non-SQL files still stay hidden", + "sidebar.external_sql_modal.help.sql_file": "The .sql suffix is added automatically when omitted", + "sidebar.external_sql_modal.placeholder.directory_name": "e.g. reports", + "sidebar.external_sql_modal.placeholder.sql_file_name": "e.g. report.sql", + "sidebar.external_sql_modal.title.create_directory": "New directory", + "sidebar.external_sql_modal.title.create_file": "New SQL file", + "sidebar.external_sql_modal.title.rename_directory": "Rename directory", + "sidebar.external_sql_modal.title.rename_file": "Rename SQL file", + "sidebar.external_sql_modal.validation.directory_name_no_separator": "Directory name cannot contain path separators", + "sidebar.external_sql_modal.validation.directory_name_required": "Enter a directory name", + "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "File name cannot contain path separators", + "sidebar.external_sql_modal.validation.sql_file_name_required": "Enter a SQL file name", + "sidebar.external_sql.directory_fallback": "SQL directory", + "sidebar.external_sql.root": "External SQL files", + "sidebar.field.database_name": "Database name", + "sidebar.field.new_database_name": "Replacement database name", + "sidebar.field.new_table_name": "Replacement table name", + "sidebar.field.new_view_name": "Replacement view name", + "sidebar.field.schema_name": "Schema name", + "sidebar.field.select_connection": "Select connection", + "sidebar.field.select_connections": "Select connections", + "sidebar.field.select_database": "Select database", + "sidebar.field.tag_name": "Group name", + "sidebar.filter.all_objects": "All objects", + "sidebar.filter.scope_all": "Apply selection to: all objects", + "sidebar.filter.scope_filtered": "Apply selection to: current filtered results", + "sidebar.filter.tables_only": "Tables only", + "sidebar.filter.views_only": "Views only", + "sidebar.jvm.action.diagnostic": "Diagnostic enhancement", + "sidebar.jvm.action.monitoring": "Continuous monitoring", + "sidebar.jvm.tab.audit": "JVM audit", + "sidebar.jvm.tab.diagnostic": "JVM diagnostics", + "sidebar.jvm.tab.monitoring": "JVM monitoring", + "sidebar.jvm.tab.overview": "JVM overview", + "sidebar.jvm.tab.resource": "JVM resources", + "sidebar.locate.object.materialized_view": "Materialized view", + "sidebar.locate.object.routine": "Function/procedure", + "sidebar.locate.object.table": "Table", + "sidebar.locate.object.trigger": "Trigger", + "sidebar.locate.object.view": "View", + "sidebar.menu.add_sql_directory": "Add SQL directory", + "sidebar.menu.backup_all_tables_sql": "Back up all tables (schema + data SQL)", "sidebar.menu.backup_current_schema_sql": "Back up all tables in current schema (schema and data SQL)", + "sidebar.menu.backup_table_sql": "Back up table (SQL)", "sidebar.menu.bind_to_connection": "Bind to connection", + "sidebar.menu.browse_keys": "Browse keys", + "sidebar.menu.browse_materialized_view_data": "Browse materialized view data", + "sidebar.menu.browse_view_data": "Browse view data", + "sidebar.menu.clear_table": "Clear table", + "sidebar.menu.close_database": "Close database", "sidebar.menu.copy_object_name": "Copy name", "sidebar.menu.copy_table_name": "Copy table name", + "sidebar.menu.copy_table_structure": "Copy table structure", + "sidebar.menu.create_database": "New database", "sidebar.menu.create_event": "New event", + "sidebar.menu.create_function": "New function", + "sidebar.menu.create_procedure": "New procedure", + "sidebar.menu.create_table": "New table", + "sidebar.menu.create_view": "New view", + "sidebar.menu.danger_operations": "Dangerous operations", + "sidebar.menu.delete_connection": "Delete connection", + "sidebar.menu.delete_database": "Delete database", + "sidebar.menu.delete_local_directory": "Delete local directory", + "sidebar.menu.delete_query": "Delete query", + "sidebar.menu.delete_routine": "Delete {{type}}", "sidebar.menu.delete_schema": "Delete schema", + "sidebar.menu.delete_sql_directory": "Delete directory", + "sidebar.menu.delete_sql_file": "Delete SQL file", + "sidebar.menu.delete_table": "Delete table", + "sidebar.menu.delete_tag": "Delete group", + "sidebar.menu.delete_view": "Delete view", + "sidebar.menu.design_table": "Design table", + "sidebar.menu.disconnect": "Disconnect", + "sidebar.menu.duplicate_connection": "Duplicate connection", + "sidebar.menu.edit_connection": "Edit connection", + "sidebar.menu.edit_definition": "Edit definition", "sidebar.menu.edit_schema": "Edit schema", + "sidebar.menu.edit_tag": "Edit group", + "sidebar.menu.edit_view": "Edit view", + "sidebar.menu.export_all_table_schema_sql": "Export all table schemas (SQL)", + "sidebar.menu.export_csv": "Export CSV", "sidebar.menu.export_current_schema_sql": "Export current schema table structures (SQL)", + "sidebar.menu.export_html": "Export HTML", + "sidebar.menu.export_json": "Export JSON", + "sidebar.menu.export_markdown": "Export Markdown", + "sidebar.menu.export_table_data": "Export table data", + "sidebar.menu.export_xlsx": "Export Excel (XLSX)", + "sidebar.menu.materialized_view_definition": "Materialized view definition", + "sidebar.menu.move_out_of_tag": "Remove from group", + "sidebar.menu.move_to_tag": "Move to group", + "sidebar.menu.new_command_window": "New command window", + "sidebar.menu.new_query": "New query", + "sidebar.menu.new_sql_directory": "New directory", + "sidebar.menu.new_sql_directory_in_directory": "New directory in this directory", + "sidebar.menu.new_sql_file": "New SQL file", + "sidebar.menu.new_sql_file_in_directory": "New SQL file in this directory", "sidebar.menu.new_table": "New table", + "sidebar.menu.open_query": "Open query", + "sidebar.menu.open_sql_file": "Open SQL file", + "sidebar.menu.redis_monitor": "Redis instance monitor", + "sidebar.menu.refresh": "Refresh", + "sidebar.menu.refresh_directory": "Refresh directory", + "sidebar.menu.remove_directory": "Remove directory", + "sidebar.menu.rename_database": "Rename database", + "sidebar.menu.rename_query": "Rename query", + "sidebar.menu.rename_sql_directory": "Rename directory", + "sidebar.menu.rename_sql_file": "Rename SQL file", + "sidebar.menu.rename_table": "Rename table", + "sidebar.menu.rename_view": "Rename view", + "sidebar.menu.sort_by_frequency": "Sort by usage frequency", + "sidebar.menu.sort_by_name": "Sort by name", "sidebar.menu.table_structure": "Table structure", + "sidebar.menu.truncate_table": "Truncate table", + "sidebar.menu.view_definition": "View definition", + "sidebar.menu.view_object_definition": "View definition", + "sidebar.menu.view_routine_definition": "View definition", + "sidebar.message.add_sql_directory_database_required": "Select a database before adding an SQL directory.", "sidebar.message.ai_table_context_missing": "The current table is missing connection context and cannot be sent to AI.", + "sidebar.message.backing_up_database": "Backing up {{database}}...", + "sidebar.message.backing_up_selected_objects": "Backing up {{count}} selected objects...", + "sidebar.message.backing_up_selected_tables": "Backing up {{count}} selected tables...", + "sidebar.message.clear_failed": "Clear failed: {{error}}", + "sidebar.message.clear_success": "Clear completed.", + "sidebar.message.clearing_selected_tables": "Clearing {{count}} selected tables...", + "sidebar.message.connection_config_not_found": "Connection configuration was not found.", + "sidebar.message.connection_deleted": "Connection deleted.", + "sidebar.message.connection_failed": "Connection failed: {{error}}", "sidebar.message.connection_release_failed": "Failed to release connection", "sidebar.message.connection_release_failed_from_sidebar": "The connection was disconnected from the sidebar, but backend connection release failed", + "sidebar.message.create_failed": "Create failed: {{error}}", + "sidebar.message.create_sql_directory_failed": "Failed to create directory: {{error}}", + "sidebar.message.create_sql_file_failed": "Failed to create SQL file: {{error}}", + "sidebar.message.database_closed": "Database closed.", + "sidebar.message.database_created": "Database created.", + "sidebar.message.database_deleted": "Database deleted.", + "sidebar.message.database_export_failed": "Failed to export {{database}}: {{error}}", + "sidebar.message.database_export_success": "Exported {{database}}.", + "sidebar.message.database_name_required": "Database name is required.", + "sidebar.message.database_name_unchanged": "Database name is unchanged.", + "sidebar.message.database_renamed": "Database renamed.", + "sidebar.message.delete_connection_backend_unavailable": "Delete connection is not available in this build.", + "sidebar.message.delete_connection_failed": "Failed to delete connection.", + "sidebar.message.delete_failed": "Delete failed: {{error}}", + "sidebar.message.delete_sql_directory_failed": "Failed to delete SQL directory: {{error}}", + "sidebar.message.delete_sql_file_failed": "Failed to delete SQL file: {{error}}", + "sidebar.message.disconnected": "Disconnected.", + "sidebar.message.duplicate_backend_unavailable": "Duplicate connection is not available in this build.", + "sidebar.message.duplicate_empty_result": "The duplicated connection was not returned.", + "sidebar.message.duplicate_failed": "Failed to duplicate connection.", + "sidebar.message.duplicated_connection": "Duplicated {{name}}.", + "sidebar.message.export_failed": "Export failed: {{error}}", + "sidebar.message.export_success": "Export succeeded.", + "sidebar.message.export_success_skipped_views": "Export succeeded. {{count}} views were skipped for data export.", + "sidebar.message.export_tables_same_database_required": "Select tables from the same database.", + "sidebar.message.exporting_database_backup": "Backing up {{database}} (schema and data)...", + "sidebar.message.exporting_database_schema": "Exporting schema for {{database}}...", + "sidebar.message.exporting_schema_backup": "Backing up schema {{schema}} (structure and data)...", + "sidebar.message.exporting_schema_structure": "Exporting structure for schema {{schema}}...", + "sidebar.message.exporting_selected_object_data": "Exporting {{format}} data for {{count}} selected objects...", + "sidebar.message.exporting_selected_object_schema": "Exporting schema for {{count}} selected objects...", + "sidebar.message.exporting_selected_table_schema": "Exporting schema for {{count}} selected tables...", + "sidebar.message.exporting_table_format": "Exporting {{table}} as {{format}}...", + "sidebar.message.external_sql_directory_added": "SQL directory added.", + "sidebar.message.external_sql_directory_context_missing": "SQL directory context is missing.", + "sidebar.message.external_sql_directory_delete_target_missing": "Could not find the SQL directory to delete.", + "sidebar.message.external_sql_directory_not_found": "SQL directory was not found.", + "sidebar.message.external_sql_directory_parent_missing": "Could not find the location for creating a directory.", + "sidebar.message.external_sql_directory_read_failed": "Failed to read SQL directory {{name}}: {{error}}", + "sidebar.message.external_sql_directory_refreshed": "SQL directory refreshed.", + "sidebar.message.external_sql_directory_removed": "SQL directory removed.", + "sidebar.message.external_sql_directory_rename_sync_failed": "Directory was renamed, but the external SQL directory list could not be synchronized. Add the directory again.", + "sidebar.message.external_sql_directory_rename_target_missing": "Could not find the directory to rename.", + "sidebar.message.external_sql_file_delete_target_missing": "Could not find the SQL file to delete.", + "sidebar.message.external_sql_file_parent_missing": "Could not find the directory for creating an SQL file.", + "sidebar.message.external_sql_file_rename_target_missing": "Could not find the SQL file to rename.", + "sidebar.message.jvm_provider_probe_exception": "JVM provider probe failed: {{error}}", + "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "JVM provider probe exception: {{error}}. Diagnostic enhancement entry remains available.", + "sidebar.message.jvm_provider_probe_failed": "Failed to probe JVM providers: {{error}}", + "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "JVM provider probe failed: {{error}}. Diagnostic enhancement entry remains available.", + "sidebar.message.jvm_resources_backend_unavailable": "JVM resource browsing is not available in this build.", + "sidebar.message.load_database_list_failed": "Failed to load databases: {{error}}", + "sidebar.message.load_jvm_resources_failed": "Failed to load JVM resources: {{error}}", + "sidebar.message.load_table_list_failed": "Failed to load tables: {{error}}", + "sidebar.message.load_tables_failed": "Failed to load objects: {{error}}", + "sidebar.message.locate_connection_not_found_for_object": "The connection for the current object was not found", + "sidebar.message.locate_connection_not_in_tree": "Current connection was not found in the left tree", "sidebar.message.locate_current_tab_unavailable": "The current tab has no locatable content", + "sidebar.message.locate_current_table_unavailable": "The current tab has no table to locate", + "sidebar.message.locate_database_loading": "Database node is still loading: {{database}}. Try again later", + "sidebar.message.locate_database_not_found": "Database was not found in the left tree: {{database}}", + "sidebar.message.locate_external_sql_file_not_found": "SQL file was not found in external SQL directories: {{path}}", + "sidebar.message.locate_object_loading": "Database objects for {{object}} are still loading in {{database}}. Try again later", + "sidebar.message.locate_object_not_found": "{{object}} was not found in the left tree: {{name}}. Refresh the database node and try again", "sidebar.message.message_publish_success": "Test message sent to {{destination}}", "sidebar.message.message_publish_success_with_count": "Test message sent to {{destination}} (submitted {{count}})", "sidebar.message.message_publish_target_fallback": "target", "sidebar.message.message_publish_unsupported": "The current object does not support test message sending", + "sidebar.message.no_visible_databases": "No visible databases or schemas were returned. Check account permissions or refresh from the context menu.", + "sidebar.message.operation_create_failed": "Create failed: {{error}}", + "sidebar.message.operation_drop_failed": "Drop failed: {{error}}", + "sidebar.message.operation_rename_failed": "Rename failed: {{error}}", + "sidebar.message.read_file_failed": "Failed to read file: {{error}}", + "sidebar.message.read_sql_file_failed": "Failed to read SQL file: {{error}}", + "sidebar.message.rename_failed": "Rename failed: {{error}}", + "sidebar.message.rename_sql_directory_failed": "Failed to rename directory: {{error}}", + "sidebar.message.rename_sql_file_failed": "Failed to rename SQL file: {{error}}", + "sidebar.message.routine_deleted": "{{type}} deleted.", "sidebar.message.saved_query_delete_failed": "Failed to delete query: {{error}}", + "sidebar.message.saved_query_deleted": "Query deleted.", + "sidebar.message.saved_query_name_unchanged": "Query name is unchanged.", "sidebar.message.saved_query_rebind_failed": "Failed to bind query: {{error}}", "sidebar.message.saved_query_rebind_success": "Query bound to {{name}}", "sidebar.message.saved_query_rename_failed": "Failed to rename query: {{error}}", + "sidebar.message.saved_query_renamed": "Query renamed.", + "sidebar.message.schema_create_unsupported": "Schema creation is not supported for this database.", + "sidebar.message.schema_created": "Schema created.", "sidebar.message.schema_deleted": "Schema deleted.", "sidebar.message.schema_edit_unsupported": "This node does not support schema editing from this entry.", + "sidebar.message.schema_export_target_missing": "Target schema was not found, so export cannot continue.", "sidebar.message.schema_name_unchanged": "Schema name is unchanged.", "sidebar.message.schema_renamed": "Schema renamed.", "sidebar.message.schema_target_delete_missing": "Target schema was not found, so it cannot be deleted.", "sidebar.message.schema_target_edit_missing": "Target schema was not found, so it cannot be edited.", + "sidebar.message.schema_target_missing": "Select a database for schema creation.", + "sidebar.message.select_connection_or_database_first": "Select a connection or database first.", + "sidebar.message.select_database_required": "Select at least one database.", + "sidebar.message.select_host_before_large_sql_file": "Select a Host before running a large SQL file.", + "sidebar.message.select_object_required": "Select at least one object.", + "sidebar.message.select_sql_directory_failed": "Failed to select SQL directory: {{error}}", + "sidebar.message.sidebar_filter_reset": "Sidebar filter reset.", + "sidebar.message.sidebar_filter_sync_disabled": "Left-side filter sync disabled.", + "sidebar.message.sidebar_filter_sync_enabled": "Left-side filter sync enabled.", + "sidebar.message.sphinx_unsupported_objects": "This Sphinx instance does not expose these object capabilities: {{objects}}. Compatibility mode was applied.", + "sidebar.message.sql_directory_created": "Directory created.", + "sidebar.message.sql_directory_deleted": "SQL directory deleted.", + "sidebar.message.sql_directory_name_required": "Directory name is required.", + "sidebar.message.sql_directory_path_invalid": "SQL directory path is invalid.", + "sidebar.message.sql_directory_renamed": "Directory renamed.", + "sidebar.message.sql_file_context_incomplete": "SQL file context is incomplete.", + "sidebar.message.sql_file_created": "SQL file created.", + "sidebar.message.sql_file_deleted": "SQL file deleted.", + "sidebar.message.sql_file_name_required": "SQL file name is required.", + "sidebar.message.sql_file_path_incomplete": "SQL file path is incomplete, so it cannot be opened.", + "sidebar.message.sql_file_renamed": "SQL file renamed.", + "sidebar.message.table_data_action_failed": "{{action}} failed: {{error}}", + "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", + "sidebar.message.table_data_action_success": "{{action}} completed.", + "sidebar.message.table_deleted": "Table deleted.", + "sidebar.message.table_name_required": "Table name is required.", + "sidebar.message.table_name_unchanged": "Table name is unchanged.", + "sidebar.message.table_pinned": "Table pinned", + "sidebar.message.table_renamed": "Table renamed.", + "sidebar.message.table_structure_copied": "Table structure copied.", + "sidebar.message.table_unpinned": "Table unpinned", + "sidebar.message.view_deleted": "View deleted.", + "sidebar.message.view_name_required": "View name is required.", + "sidebar.message.view_name_unchanged": "View name is unchanged.", + "sidebar.message.view_renamed": "View renamed.", + "sidebar.message.visual_new_table_unsupported": "This data source does not support visual table creation yet.", + "sidebar.modal.batch_databases.description": "Export schemas by database in batches, or generate backups that include both schema and data.", + "sidebar.modal.batch_databases.selection_hint": "After a connection is selected, the list of batch-exportable databases under that connection will be loaded.", + "sidebar.modal.batch_databases.title": "Batch database operations", + "sidebar.modal.batch_tables.description": "Export schemas, data, or full backups for objects in batches.", + "sidebar.modal.batch_tables.selection_hint": "Select a connection and database first, then decide the export scope and target objects.", + "sidebar.modal.batch_tables.title": "Batch object operations", + "sidebar.modal.confirm_clear_selected_tables.content": "Clear data in selected objects under {{connection}} / {{database}}? This cannot be undone.", + "sidebar.modal.confirm_clear_selected_tables.title": "Confirm clear selected tables", + "sidebar.modal.confirm_delete_connection.content": "Delete {{name}}?", + "sidebar.modal.confirm_delete_database.content": "Delete {{name}}? This cannot be undone.", + "sidebar.modal.confirm_delete_database.title": "Delete database", + "sidebar.modal.confirm_delete_routine.content": "Delete {{type}} {{name}}? This cannot be undone.", + "sidebar.modal.confirm_delete_routine.title": "Delete {{type}}", + "sidebar.modal.confirm_delete_saved_query.content": "Delete saved query \"{{name}}\"? This action cannot be undone.", "sidebar.modal.confirm_delete_schema.content": "Delete schema {{name}}? The schema and all objects inside it will be deleted. This cannot be undone.", "sidebar.modal.confirm_delete_schema.title": "Delete schema", + "sidebar.modal.confirm_delete_sql_directory.content": "Delete \"{{name}}\"? This will delete the local directory from disk, and only empty directories can be deleted.", + "sidebar.modal.confirm_delete_sql_directory.title": "Delete SQL directory", + "sidebar.modal.confirm_delete_sql_file.content": "Delete \"{{name}}\"? This will delete the local file from disk and cannot be undone.", + "sidebar.modal.confirm_delete_sql_file.title": "Delete SQL file", + "sidebar.modal.confirm_delete_table.content": "Delete {{name}}? This cannot be undone.", + "sidebar.modal.confirm_delete_table.title": "Delete table", + "sidebar.modal.confirm_delete_tag.content": "Delete group \"{{name}}\"? This will not delete the connections inside it.", + "sidebar.modal.confirm_delete_view.content": "Delete {{name}}? This cannot be undone.", + "sidebar.modal.confirm_delete_view.title": "Delete view", + "sidebar.modal.confirm_delete.title": "Confirm delete", + "sidebar.modal.confirm_table_data_action.content": "{{action}} {{table}}? This cannot be undone.", + "sidebar.modal.confirm_table_data_action.title": "Confirm {{action}}", + "sidebar.modal.create_database.title": "Create database", + "sidebar.modal.rename_database.title": "Rename database: {{name}}", "sidebar.modal.rename_schema.title": "Edit schema: {{name}}", + "sidebar.modal.rename_table.title": "Rename table: {{name}}", + "sidebar.modal.rename_view.title": "Rename view: {{name}}", + "sidebar.modal.tag.create_description": "Create a group to organize connections.", + "sidebar.modal.tag.create_title": "New group", + "sidebar.modal.tag.edit_description": "Update the group name and included connections.", + "sidebar.modal.tag.edit_title": "Edit group", + "sidebar.object_group.events": "Events", + "sidebar.object_group.materialized_views": "Materialized views", + "sidebar.object_group.routines": "Functions and procedures", + "sidebar.object_group.tables": "Tables", + "sidebar.object_group.triggers": "Triggers", + "sidebar.object_group.views": "Views", + "sidebar.object.function": "Function", + "sidebar.object.procedure": "Procedure", + "sidebar.object.view": "View", + "sidebar.placeholder.filter_table_view": "Filter tables and views", + "sidebar.placeholder.select_connection": "Select connection", + "sidebar.placeholder.select_connection_first": "Select a connection first", + "sidebar.placeholder.tag_name": "Group name", + "sidebar.punctuation.list_separator": ", ", + "sidebar.rail.object_actions": "Object area quick actions", + "sidebar.rail.system_actions": "System actions", + "sidebar.search.manual_scope": "Manual scope", + "sidebar.search.multi_select_supported": "Multiple scopes supported", + "sidebar.search.placeholder": "Search...", + "sidebar.search.scope_description": "Choose where the sidebar search should match.", + "sidebar.search.scope_hint": "Smart mode searches names, hosts, databases, and objects according to context.", + "sidebar.search.scope_title": "Search scope", + "sidebar.search.scope_tooltip": "Current search scope: {{scope}}", + "sidebar.search.scope.database": "Database", + "sidebar.search.scope.host": "Host", + "sidebar.search.scope.object": "Object", + "sidebar.search.scope.smart": "Smart", + "sidebar.search.scope.smart_description": "Automatically narrows search based on the selected node.", + "sidebar.search.scope.smart_short": "Smart", + "sidebar.search.scope.tag": "Tag", + "sidebar.sql_directory.default_name": "SQL directory", + "sidebar.sql_file_exec.cancel": "Cancel execution", + "sidebar.sql_file_exec.executed_label": "Executed: ", + "sidebar.sql_file_exec.file_size": "File size: ", + "sidebar.sql_file_exec.rows_separator": " rows | Failed: ", + "sidebar.sql_file_exec.rows_suffix": " rows", + "sidebar.sql_file_exec.status_label": "Status: ", + "sidebar.sql_file_exec.status.cancelled": "Cancelled", + "sidebar.sql_file_exec.status.done": "Done", + "sidebar.sql_file_exec.status.error": "Error", + "sidebar.sql_file_exec.status.running": "Running", + "sidebar.sql_file_exec.title": "Run external SQL file", + "sidebar.sql_file.default_name": "SQL file", + "sidebar.sql_template.duckdb_macro_hint": "Use SQL Macro for function-like behavior", + "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB does not support stored procedures yet", + "sidebar.sql_template.edit_routine": "Edit {{type}} {{name}}", + "sidebar.sql_template.edit_view": "Edit view {{name}}", + "sidebar.sql_template.modify_then_execute": "Modify and execute", + "sidebar.status.pinned": "Pinned", + "sidebar.tab.create_function": "New function", + "sidebar.tab.create_procedure": "New procedure", + "sidebar.tab.create_view": "New view", + "sidebar.tab.design_table": "Design table ({{table}})", + "sidebar.tab.edit_event": "Edit event: {{name}}", + "sidebar.tab.edit_routine": "Edit {{type}}: {{name}}", + "sidebar.tab.edit_view": "Edit view: {{name}}", + "sidebar.tab.event": "Event: {{name}}", + "sidebar.tab.materialized_view_definition": "Materialized view: {{name}}", "sidebar.tab.new_event": "New event", + "sidebar.tab.new_query": "New query", + "sidebar.tab.new_query_database": "New query ({{database}})", + "sidebar.tab.new_table": "New table - {{database}}", "sidebar.tab.recent_query": "Recent query", + "sidebar.tab.redis_command": "Command - {{database}}", + "sidebar.tab.redis_monitor": "Monitor - {{database}}", + "sidebar.tab.routine_definition": "{{type}}: {{name}}", + "sidebar.tab.table_overview": "Table overview - {{database}}{{schema}}", + "sidebar.tab.table_structure": "Table structure ({{table}})", + "sidebar.tab.trigger": "Trigger: {{name}}", + "sidebar.tab.view_definition": "View: {{name}}", + "sidebar.table_action.clear.label": "Clear table", + "sidebar.table_action.clear.progress": "Clearing", + "sidebar.table_action.truncate.label": "Truncate table", + "sidebar.table_action.truncate.progress": "Truncating", + "sidebar.table_folder.columns": "Columns", + "sidebar.table_folder.foreign_keys": "Foreign keys", + "sidebar.table_folder.indexes": "Indexes", + "sidebar.table_folder.triggers": "Triggers", + "sidebar.tree.all_saved_queries": "All saved queries", + "sidebar.tree.default_database": "Default database", + "sidebar.tree.default_schema": "Default schema", + "sidebar.tree.saved_queries": "Saved queries", + "sidebar.tree.unknown_connection": "Unknown connection", + "sidebar.tree.unmatched_saved_queries": "Unmatched", + "sidebar.tree.untitled_query": "Untitled query", + "sidebar.v2_database_menu.backup_all_tables_sql": "Back up all tables · schema + data SQL", + "sidebar.v2_database_menu.export_all_table_schema_sql": "Export all table schemas · SQL", + "sidebar.v2_database_menu.export_backup_section": "Export and backup", + "sidebar.v2_database_menu.meta": "{{dialect}} · Database actions", + "sidebar.v2_database_menu.new_external_catalog": "New external Catalog", + "sidebar.v2_database_menu.new_materialized_view": "New materialized view", + "sidebar.v2_database_menu.new_schema": "New schema", + "sidebar.v2_database_menu.refresh_object_tree": "Refresh object tree", "sidebar.v2_schema_menu.backup_current_schema_sql": "Back up all current schema tables · schema + data", "sidebar.v2_schema_menu.delete_schema_cascade": "Delete schema · DROP CASCADE", "sidebar.v2_schema_menu.edit_schema": "Edit schema", "sidebar.v2_schema_menu.export_current_schema_sql": "Export current schema table structures · SQL", "sidebar.v2_schema_menu.meta": "{{database}} · Schema actions", + "sidebar.v2_table_group_menu.current_database": "Current database", + "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} tables · sorted by {{sort}}", + "sidebar.v2_table_group_menu.sort_frequency": "usage frequency", + "sidebar.v2_table_group_menu.sort_name": "name", + "sidebar.v2_table_group_menu.title": "Tables", + "sidebar.v2_table_menu.ai_explain_table": "Use AI to explain this table", + "sidebar.v2_table_menu.ai_generate_query": "Use AI to generate a query", + "sidebar.v2_table_menu.backup_sql_dump": "Backup · {{keyword}}", + "sidebar.v2_table_menu.copy_section": "Copy", + "sidebar.v2_table_menu.copy_table_as_insert": "Copy entire table as {{keyword}}", + "sidebar.v2_table_menu.copy_table_name": "Copy table name", + "sidebar.v2_table_menu.design_table_detail": "columns / indexes / foreign keys", + "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", + "sidebar.v2_table_menu.maintenance_section": "Maintenance", + "sidebar.v2_table_menu.meta.idle": "Click refresh to load stats", + "sidebar.v2_table_menu.meta.loading": "Loading table stats...", + "sidebar.v2_table_menu.meta.rows": "{{count}} rows", + "sidebar.v2_table_menu.meta.rows_empty": "— rows", + "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} data · {{indexes}} indexes", + "sidebar.v2_table_menu.meta.unavailable": "Table stats unavailable", + "sidebar.v2_table_menu.metadata_section": "Metadata", + "sidebar.v2_table_menu.new_rollup": "New {{keyword}}", + "sidebar.v2_table_menu.open_data": "View data", + "sidebar.v2_table_menu.open_export_workbench": "Open export workbench...", + "sidebar.v2_table_menu.open_in_new_tab": "Open in new tab", + "sidebar.v2_table_menu.refresh_stats": "Refresh stats", + "sidebar.v2_table_menu.rename_compact": "Rename...", + "sidebar.v2_table_menu.truncate_table": "Truncate table", + "sidebar.v2_table_menu.view_in_er": "View in ER diagram", + "sidebar.validation.name_required": "Enter a name.", + "sidebar.validation.new_database_name_required": "Enter the replacement database name.", + "sidebar.validation.new_table_name_required": "Enter the replacement table name.", + "sidebar.validation.new_view_name_required": "Enter the replacement view name.", + "sidebar.validation.schema_name_required": "Enter the schema name.", + "sidebar.validation.tag_name_required": "Enter a group name.", "snippet_settings.action.close": "Close", "snippet_settings.action.delete": "Delete", "snippet_settings.action.new": "New Snippet", @@ -7307,6 +6959,66 @@ "store.fallback.connection_name": "Connection {{index}}", "store.fallback.connection_tag_name": "Tag {{index}}", "store.fallback.sql_snippet_name": "Snippet {{index}}", + "tab_manager.close_aria": "Close {{title}}", + "tab_manager.empty.action.open_ai": "Open AI", + "tab_manager.empty.aria.start_workbench": "GoNavi start workbench", + "tab_manager.empty.eyebrow.connections": "{{count}} connections", + "tab_manager.empty.eyebrow.workbench": "WORKBENCH", + "tab_manager.empty.hero.description": "Choose a data source, open the query editor, or continue with context in the AI panel.", + "tab_manager.empty.hero.title": "Connections, queries, and analysis start in one workbench.", + "tab_manager.empty.quick.ai_assist.description": "Explain SQL, generate queries, and review results", + "tab_manager.empty.quick.ai_assist.title": "Enter AI assistance", + "tab_manager.empty.quick.aria": "Quick workflow", + "tab_manager.empty.quick.configure_source.description": "Set URI, SSH, proxy, and driver in one place", + "tab_manager.empty.quick.configure_source.title": "Configure data source", + "tab_manager.empty.quick.heading": "Quick workflow", + "tab_manager.empty.quick.sql_workspace.description": "Open the query editor with the current context", + "tab_manager.empty.quick.sql_workspace.title": "Start SQL workspace", + "tab_manager.hover.fallback.database_not_specified": "Not specified", + "tab_manager.hover.fallback.host_not_configured": "Not configured", + "tab_manager.hover.fallback.unbound_connection": "Unbound connection", + "tab_manager.hover.kind.design": "Table design", + "tab_manager.hover.kind.event": "Event", + "tab_manager.hover.kind.fallback": "Tab", + "tab_manager.hover.kind.jvm_audit": "JVM audit", + "tab_manager.hover.kind.jvm_diagnostic": "JVM diagnostic", + "tab_manager.hover.kind.jvm_monitoring": "JVM monitoring", + "tab_manager.hover.kind.jvm_overview": "JVM overview", + "tab_manager.hover.kind.jvm_resource": "JVM resource", + "tab_manager.hover.kind.materialized_view": "Materialized view", + "tab_manager.hover.kind.query": "SQL query", + "tab_manager.hover.kind.redis_command": "Redis command", + "tab_manager.hover.kind.redis_keys": "Redis Key", + "tab_manager.hover.kind.redis_monitor": "Redis monitor", + "tab_manager.hover.kind.routine": "Function / procedure", + "tab_manager.hover.kind.sql_analysis": "SQL analysis workbench", + "tab_manager.hover.kind.table": "Table data", + "tab_manager.hover.kind.table_export": "Export workbench", + "tab_manager.hover.kind.table_overview": "Table overview", + "tab_manager.hover.kind.trigger": "Trigger", + "tab_manager.hover.kind.view": "View", + "tab_manager.hover.label.connection": "Connection", + "tab_manager.hover.label.database": "Database", + "tab_manager.hover.label.object": "Object", + "tab_manager.hover.label.type": "Type", + "tab_manager.kind_badge.design": "Design", + "tab_manager.kind_badge.event": "Event", + "tab_manager.kind_badge.fallback": "Tab", + "tab_manager.kind_badge.jvm": "JVM", + "tab_manager.kind_badge.materialized_view": "MV", + "tab_manager.kind_badge.query": "SQL", + "tab_manager.kind_badge.redis": "Redis", + "tab_manager.kind_badge.routine": "Func", + "tab_manager.kind_badge.sql_analysis": "Analyze", + "tab_manager.kind_badge.table": "Table", + "tab_manager.kind_badge.table_export": "Export", + "tab_manager.kind_badge.table_overview": "DB", + "tab_manager.kind_badge.trigger": "Trigger", + "tab_manager.kind_badge.view": "View", + "tab_manager.menu.close_all": "Close all tabs", + "tab_manager.menu.close_left": "Close tabs to the left", + "tab_manager.menu.close_other": "Close other tabs", + "tab_manager.menu.close_right": "Close tabs to the right", "tab_manager.menu.tab_display_settings": "Tab settings", "tab_manager.sql_file_close.close_tabs": "Close tabs", "tab_manager.sql_file_close.continue_close": "Continue closing", @@ -7324,24 +7036,305 @@ "tab_manager.sql_file_close.save_failed": "Failed to save {{title}}: {{detail}}", "tab_manager.sql_file_close.saved": "SQL file saved", "tab_manager.sql_file_close.unknown_error": "Unknown error", + "table_designer.action.add": "Add", + "table_designer.action.add_after_selected": "Add after selected column", + "table_designer.action.add_column": "Add column", + "table_designer.action.apply": "Apply", + "table_designer.action.cancel": "Cancel", + "table_designer.action.copy_selected_to_new_table": "Copy selected to new table", + "table_designer.action.create": "Create", + "table_designer.action.create_table": "Create table", + "table_designer.action.delete": "Delete", + "table_designer.action.edit": "Edit", + "table_designer.action.execute": "Execute", + "table_designer.action.refresh": "Refresh", + "table_designer.action.refresh_anyway": "Refresh anyway", + "table_designer.action.save": "Save", + "table_designer.action.table_comment": "Table comment", + "table_designer.action.view_statement": "View statement", + "table_designer.column.actions": "Actions", + "table_designer.column.auto_increment": "Auto increment", + "table_designer.column.comment": "Comment", + "table_designer.column.default": "Default", + "table_designer.column.name": "Name", + "table_designer.column.not_null": "Not NULL", + "table_designer.column.primary_key": "Primary key", + "table_designer.column.type": "Type", + "table_designer.empty.triggers": "This table has no triggers", + "table_designer.fallback.empty": "(empty)", + "table_designer.fallback.unknown_error": "Unknown error", + "table_designer.fallback.unnamed_foreign_key": "(unnamed foreign key)", + "table_designer.fallback.unnamed_index": "(unnamed index)", + "table_designer.foreign_key.column.constraint_name": "Constraint name", + "table_designer.foreign_key.column.fields": "Fields", + "table_designer.foreign_key.column.ref_fields": "Referenced fields", + "table_designer.foreign_key.column.ref_table": "Referenced table", + "table_designer.index.column.fields": "Fields", + "table_designer.index.column.name": "Index name", + "table_designer.index.column.type": "Index type", + "table_designer.index.column.uniqueness": "Uniqueness", + "table_designer.index.kind.fulltext": "Full-text index", + "table_designer.index.kind.normal": "Normal index", + "table_designer.index.kind.normal_nonclustered": "Normal index (non-clustered)", + "table_designer.index.kind.primary_clustered": "Primary key index (clustered)", + "table_designer.index.kind.spatial": "Spatial index", + "table_designer.index.kind.unique": "Unique index", + "table_designer.index.uniqueness.normal": "Normal", + "table_designer.index.uniqueness.unique": "Unique", + "table_designer.label.create_statement": "Create statement for {{name}}", + "table_designer.label.create_statement_plain": "Create statement", + "table_designer.message.add_at_least_one_column": "Add at least one column", + "table_designer.message.columns_copied_to_new_table": "Copied {{count}} columns to new table {{table}}", + "table_designer.message.connection_not_found": "Connection not found", + "table_designer.message.delete_failed": "Delete failed: {{detail}}", + "table_designer.message.drop_old_trigger_failed": "Failed to drop the old trigger: {{detail}}", "table_designer.message.duckdb_primary_key_change_unsupported": "DuckDB currently only supports adding a primary key to tables without one. Modifying or dropping an existing primary key requires rebuilding the table.", + "table_designer.message.execution_failed": "Execution failed: {{detail}}", + "table_designer.message.execution_failed_plain": "Execution failed", + "table_designer.message.execution_failed_prefix": "Execution failed: ", + "table_designer.message.foreign_key_column_count_mismatch": "The number of local fields must match the number of referenced fields", + "table_designer.message.foreign_key_created": "Foreign key created", + "table_designer.message.foreign_key_delete_unsupported": "This database does not support deleting this foreign key here", + "table_designer.message.foreign_key_deleted": "Foreign key deleted", + "table_designer.message.foreign_key_maintenance_unsupported": "This database does not support foreign key maintenance here", + "table_designer.message.foreign_key_name_exists": "Foreign key constraint already exists: {{name}}", + "table_designer.message.foreign_key_name_required": "Enter a foreign key constraint name", + "table_designer.message.foreign_key_updated": "Foreign key updated", + "table_designer.message.index_create_sql_placeholder": "Index creation SQL is unavailable", + "table_designer.message.index_create_sql_unavailable": "Unable to generate index creation SQL", + "table_designer.message.index_created": "Index created", + "table_designer.message.index_delete_named_unsupported": "This database does not support deleting index \"{{name}}\"", + "table_designer.message.index_delete_unsupported": "This database does not support deleting this index", + "table_designer.message.index_deleted": "Index deleted", + "table_designer.message.index_kind_unsupported": "This database does not support this index type", + "table_designer.message.index_maintenance_unsupported": "This database does not support index maintenance here", + "table_designer.message.index_name_exists": "Index name already exists: {{name}}", + "table_designer.message.index_name_required": "Enter an index name", + "table_designer.message.index_restore_failed": "{{detail}}; failed to restore the original index: {{restoreDetail}}", + "table_designer.message.index_restore_unavailable": "{{detail}}; the original index could not be restored automatically. Check it as soon as possible.", + "table_designer.message.index_restored_after_failure": "{{detail}}; the original index was restored automatically.", + "table_designer.message.index_updated": "Index updated", + "table_designer.message.indexes_deleted": "{{count}} indexes deleted", + "table_designer.message.load_columns_failed": "Failed to load columns: {{detail}}", + "table_designer.message.no_changes_detected": "No changes detected", + "table_designer.message.no_copyable_columns": "No copyable columns selected", + "table_designer.message.no_index_changes": "No index changes detected", + "table_designer.message.only_normal_unique_index_supported": "This database only supports maintaining normal and unique indexes", + "table_designer.message.ref_columns_required": "Enter at least one referenced field", + "table_designer.message.ref_table_required": "Enter a referenced table", + "table_designer.message.relational_index_unsupported": "This data source does not support relational index maintenance", + "table_designer.message.schema_saved_alter": "Table structure updated.", + "table_designer.message.schema_saved_create": "Table created.", + "table_designer.message.select_at_least_one_column": "Select at least one column", + "table_designer.message.select_column_before_insert": "Select a column before inserting.", + "table_designer.message.select_columns_to_copy": "Select columns to copy first", + "table_designer.message.select_index_to_delete": "Select an index to delete first", + "table_designer.message.select_local_columns": "Select at least one local field", + "table_designer.message.select_one_foreign_key": "Select one foreign key first", + "table_designer.message.select_one_index": "Select one index first", + "table_designer.message.statement_execution_failed_prefix": "Statement {{current}}/{{total}} failed: ", + "table_designer.message.switch_index_kind": "Switch Index category to {{kind}} index", + "table_designer.message.table_comment_unsupported": "This database does not support editing table comments here", + "table_designer.message.table_comment_updated": "Table comment updated", + "table_designer.message.table_name_required": "Enter a table name", + "table_designer.message.target_table_required": "Enter a target table name", + "table_designer.message.trigger_created": "Trigger created", + "table_designer.message.trigger_deleted": "Trigger deleted", + "table_designer.message.trigger_updated": "Trigger updated", + "table_designer.modal.column_comment_title": "Column comment", + "table_designer.modal.column_comment_title_named": "Column comment - {{name}}", + "table_designer.modal.confirm_sql_title": "Confirm SQL changes", + "table_designer.modal.copy_columns_title": "Copy selected columns to new table", + "table_designer.modal.delete_foreign_key_content": "Delete foreign key constraint \"{{name}}\"?", + "table_designer.modal.delete_foreign_key_title": "Delete foreign key", + "table_designer.modal.delete_index_many": "Delete these {{count}} indexes?\n{{names}}", + "table_designer.modal.delete_index_one": "Delete index {{names}}?", + "table_designer.modal.delete_index_title": "Delete index", + "table_designer.modal.delete_trigger_content": "Delete trigger \"{{name}}\"? This cannot be undone.", + "table_designer.modal.delete_trigger_title": "Delete trigger", + "table_designer.modal.foreign_key_create_title": "Add foreign key", + "table_designer.modal.foreign_key_edit_title": "Edit foreign key", + "table_designer.modal.index_create_title": "Add index", + "table_designer.modal.index_edit_title": "Edit index", + "table_designer.modal.table_comment_title": "Edit table comment", + "table_designer.modal.trigger_create_title": "Add trigger", + "table_designer.modal.trigger_detail_title": "Trigger details", + "table_designer.modal.trigger_detail_title_named": "Trigger: {{name}}", + "table_designer.modal.trigger_edit_title": "Edit trigger", + "table_designer.modal.unsaved_changes_content": "Refreshing will discard the unsaved column changes in the current draft. Refresh and overwrite the draft anyway?", + "table_designer.modal.unsaved_changes_title": "Unsaved column changes", + "table_designer.notice.foreign_key_readonly": "This database does not support foreign key editing here. View only.", + "table_designer.notice.foreign_key_replace_hint": "Editing a foreign key drops the old foreign key first, then creates the new one.", + "table_designer.notice.index_readonly": "This database does not support index editing here. View only.", + "table_designer.notice.index_restore_hint": "When editing an index, the system will try to restore the original index if creating the new one fails.", + "table_designer.notice.sql_irreversible": "Review the SQL carefully. Execution cannot be undone.", + "table_designer.notice.sql_statement_irreversible": "Review the SQL statement carefully. Execution cannot be undone.", + "table_designer.notice.trigger_replace_hint": "Editing a trigger drops the original trigger first, then creates a new trigger.", + "table_designer.option.default": "Default", + "table_designer.option.recommended_suffix": "(Recommended)", + "table_designer.placeholder.column_comment": "Enter a column comment", + "table_designer.placeholder.foreign_key_name": "Foreign key constraint name, for example fk_order_user", + "table_designer.placeholder.index_columns": "Select index columns; selection order is used", + "table_designer.placeholder.index_name": "Index name, for example idx_user_name", + "table_designer.placeholder.local_columns": "Select local fields; order must match referenced fields", + "table_designer.placeholder.primary_index_name": "Primary key index uses fixed name: PRIMARY", + "table_designer.placeholder.ref_columns": "Enter referenced fields; multiple values supported", + "table_designer.placeholder.ref_table": "Referenced table; db.table is supported", + "table_designer.placeholder.table_comment": "Enter a table comment", + "table_designer.placeholder.table_name": "Enter a table name", + "table_designer.placeholder.target_table_name": "Enter a target table name", "table_designer.schema_sql.doris.primary_key_hint": "-- Doris primary key/Key model changes require manual migration according to the table model. MySQL-only DROP/ADD PRIMARY KEY clauses were skipped.", + "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB cannot persist column comments through COMMENT ON COLUMN. The comment for column {{column}} remains only in the designer preview.", "table_designer.schema_sql.duckdb.primary_key_hint": "-- DuckDB currently only supports adding PRIMARY KEY to tables without an existing primary key. Changing or dropping an existing primary key requires rebuilding the table.", + "table_designer.schema_sql.limited_column_hint": "-- {{dialect}} column constraint, default, and comment syntax differs from MySQL. MySQL-only clauses were skipped; add dialect-specific SQL before running.", + "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite cannot alter column properties directly. Rebuild the table, migrate data, and replace the old table for column {{column}}.", + "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server requires the original constraint name to drop the old primary key. Confirm it on the indexes tab before deleting.", + "table_designer.schema_sql.tdengine.timestamp_hint": "-- TDengine regular tables usually require a TIMESTAMP column. Confirm the table model before running.", + "table_designer.selection.columns_selected": "{{count}} columns selected", + "table_designer.selection.foreign_key_selected": "Selected: {{name}}", + "table_designer.selection.indexes_selected": "{{count}} indexes selected", + "table_designer.selection.trigger_prompt": "Click to select a trigger", + "table_designer.selection.trigger_selected": "Selected: {{name}}", + "table_designer.sql_preview.change.add": "Add change", + "table_designer.sql_preview.change.comment": "Comment change", + "table_designer.sql_preview.change.constraint": "Constraint change", + "table_designer.sql_preview.change.create": "New table structure", "table_designer.sql_preview.change.create_index": "Create index", + "table_designer.sql_preview.change.drop": "Drop change", + "table_designer.sql_preview.change.modify": "Column property change", + "table_designer.sql_preview.change.rename": "Rename change", + "table_designer.starrocks.bucket_mode.auto": "Auto buckets", + "table_designer.starrocks.bucket_mode.number": "Fixed bucket count", + "table_designer.starrocks.distribution.hash": "Hash distribution", + "table_designer.starrocks.distribution.none": "No distribution", + "table_designer.starrocks.distribution.random": "Random distribution", + "table_designer.starrocks.key_model.aggregate": "Aggregate key", + "table_designer.starrocks.key_model.duplicate": "Duplicate key", + "table_designer.starrocks.key_model.unique": "Unique key", + "table_designer.starrocks.placeholder.bucket_count": "Buckets", + "table_designer.starrocks.placeholder.distribution_columns": "Distribution columns, for example user_id", + "table_designer.starrocks.placeholder.key_columns": "Key columns, for example id, date", + "table_designer.starrocks.placeholder.partition_clause": "Partition clause, for example PARTITION BY RANGE(date_col)(...)", + "table_designer.starrocks.table_kind.external": "External table", + "table_designer.starrocks.table_kind.olap": "OLAP table", + "table_designer.status.read_only": "Read only", + "table_designer.summary.columns": "{{count}} columns", + "table_designer.summary.indexes": "Indexes: {{count}}, indexed fields: {{fields}}", + "table_designer.tab.columns": "Columns", "table_designer.tab.edit_trigger_title": "Edit trigger: {{name}}", + "table_designer.tab.foreign_keys": "Foreign keys", + "table_designer.tab.indexes": "Indexes", + "table_designer.tab.triggers": "Triggers", + "table_designer.table_comment.current": "Current comment: {{comment}}", + "table_designer.title.default_database": "Default database", + "table_designer.title.schema_designer": "Schema designer", + "table_designer.title.untitled_table": "Untitled table", + "table_designer.tooltip.edit_comment_popup": "Edit comment in popup", + "table_designer.trigger.column.event": "Event", + "table_designer.trigger.column.name": "Name", + "table_designer.trigger.column.timing": "Timing", + "table_designer.trigger.definition_unavailable": "Unable to get the full trigger definition", + "table_designer.trigger.field.event": "Event", + "table_designer.trigger.field.timing": "Timing", + "table_designer.trigger.template.body_comment": "Trigger logic", + "table_designer.trigger.template.enter_create": "Enter a CREATE TRIGGER statement", + "table_overview.action.show_more": "Show more tables ({{count}} remaining)", + "table_overview.empty.no_matches": "No matches", + "table_overview.empty.no_tables": "No tables", + "table_overview.menu.backup_table_sql": "Back Up Table (SQL)", + "table_overview.menu.clear_table": "Clear Table", + "table_overview.menu.copy_structure": "Copy Table Structure", "table_overview.menu.copy_table_name": "Copy Table Name", + "table_overview.menu.danger_operations": "Danger Operations", + "table_overview.menu.delete_table": "Delete Table", + "table_overview.menu.design_table": "Design Table", + "table_overview.menu.export_csv": "Export CSV", + "table_overview.menu.export_html": "Export HTML", + "table_overview.menu.export_json": "Export JSON", + "table_overview.menu.export_markdown": "Export Markdown", + "table_overview.menu.export_table_data": "Export Table Data", + "table_overview.menu.export_xlsx": "Export XLSX", + "table_overview.menu.new_query": "New Query", + "table_overview.menu.rename_table": "Rename Table", "table_overview.menu.table_structure": "Table Structure", + "table_overview.menu.truncate_table": "Truncate Table", + "table_overview.message.copy_structure_failed": "Failed to copy table structure: {{detail}}", + "table_overview.message.copy_structure_success": "Table structure copied to clipboard", "table_overview.message.copy_table_name_empty": "Table name is empty and cannot be copied", "table_overview.message.copy_table_name_failed": "Failed to copy table name: {{detail}}", "table_overview.message.copy_table_name_success": "Table name copied to clipboard", + "table_overview.message.delete_table_failed": "Failed to delete table: {{detail}}", + "table_overview.message.delete_table_success": "Table deleted", + "table_overview.message.export_failed": "Export failed: {{detail}}", + "table_overview.message.export_success": "Export succeeded", + "table_overview.message.exporting_table_format": "Exporting {{table}} as {{format}}...", + "table_overview.message.load_tables_failed": "Failed to load table information: {{detail}}", + "table_overview.message.pinned": "Table pinned", + "table_overview.message.rename_table_failed": "Failed to rename table: {{detail}}", + "table_overview.message.rename_table_success": "Table renamed", + "table_overview.message.table_data_action_failed": "{{action}} failed: {{detail}}", + "table_overview.message.table_data_action_loading": "Running {{action}} on {{table}}...", + "table_overview.message.table_data_action_success": "{{action}} succeeded", + "table_overview.message.unknown_error": "Unknown error", + "table_overview.message.unpinned": "Table unpinned", + "table_overview.metric.data_size": "Data size", + "table_overview.metric.engine": "Engine", + "table_overview.metric.index_size": "Index size", + "table_overview.metric.relative_size": "Relative size", + "table_overview.modal.delete_table.content": "Delete table \"{{table}}\"? This action cannot be undone.", + "table_overview.modal.delete_table.title": "Delete Table", + "table_overview.modal.rename_table.placeholder": "Enter a new table name", + "table_overview.modal.rename_table.title": "Rename Table", + "table_overview.modal.table_data_action.content": "{{action}} will permanently delete all data in table \"{{table}}\". This action cannot be undone. Continue?", + "table_overview.modal.table_data_action.title": "Confirm {{action}}", + "table_overview.placeholder.search": "Search table names or comments...", + "table_overview.row.engine_table": "{{engine}} table", + "table_overview.row.open_hint": "Double-click to open data, right-click for more actions", + "table_overview.section.all": "All", + "table_overview.section.pinned": "Pinned", + "table_overview.sort.name": "Name", + "table_overview.sort.rows": "Rows", + "table_overview.sort.size": "Size", + "table_overview.status.hidden_count_hint": "{{count}} more not rendered. Load more or narrow the search.", + "table_overview.status.loading_tables": "Loading table information...", + "table_overview.status.matching_rendered": "Matching {{matched}} tables, rendering {{rendered}}", + "table_overview.status.updating_filter": "Updating filtered results...", "table_overview.tab.design_table_title": "Design Table ({{table}})", "table_overview.tab.table_structure_title": "Table Structure ({{table}})", + "table_overview.table_data_action.clear.label": "Clear Table", + "table_overview.table_data_action.truncate.label": "Truncate Table", + "table_overview.toolbar.summary": "{{count}} tables · {{rows}} rows · {{size}}", + "table_overview.tooltip.card_view": "Card view", + "table_overview.tooltip.list_view": "List view", + "table_overview.tooltip.refresh": "Refresh", + "table_overview.tooltip.sort": "Sort", + "table_overview.validation.table_name_required": "Table name is required", + "table_overview.validation.table_name_unchanged": "New table name is the same as the current name", "trigger_viewer.action.edit_object": "Edit object", "trigger_viewer.edit_sql.compatibility_hint": "Review compatibility with the current database before running.", "trigger_viewer.edit_sql.empty_definition": "The trigger definition is empty. Complete the CREATE TRIGGER statement before running.", "trigger_viewer.edit_sql.fragment_definition": "The current data source returned only a trigger definition fragment. Complete the CREATE TRIGGER statement before running.", "trigger_viewer.edit_sql.header": "Edit trigger: {{name}}", "trigger_viewer.edit_sql.replace_hint": "The table design change will drop the original trigger before creating a new one. Confirm before running.", + "trigger_viewer.editor.definition_not_found": "Trigger definition not found", + "trigger_viewer.editor.sphinx.compat_queries_hint": "Multiple compatibility queries were executed. This may be due to version capability limits or an unsupported object type.", + "trigger_viewer.editor.sphinx.empty_result": "Current Sphinx instance{{version}} returned no trigger definition.", + "trigger_viewer.editor.sphinx.failed_message_label": "Returned failure message", + "trigger_viewer.editor.sphinx.failed_message_unknown": "Returned failure message: Unknown error", + "trigger_viewer.editor.sphinx.unsupported_query": "Current Sphinx instance{{version}} does not support querying trigger definitions.", + "trigger_viewer.editor.sphinx.version_suffix": " (version: {{version}})", + "trigger_viewer.editor.unsupported.duckdb": "DuckDB does not support triggers", + "trigger_viewer.editor.unsupported.generic": "This database type does not support viewing trigger definitions", + "trigger_viewer.editor.unsupported.mongodb": "MongoDB does not support triggers", + "trigger_viewer.editor.unsupported.tdengine": "TDengine does not support triggers", + "trigger_viewer.error.connection_not_found": "Database connection not found", + "trigger_viewer.error.load_failed": "Load failed", + "trigger_viewer.error.query_failed": "Failed to query trigger definition", + "trigger_viewer.error.query_failed_detail": "Failed to query trigger definition: {{detail}}", + "trigger_viewer.error.trigger_name_empty": "Trigger name is empty", + "trigger_viewer.field.database": "Database", + "trigger_viewer.field.trigger": "Trigger", + "trigger_viewer.loading.definition": "Loading trigger definition...", "trigger_viewer.tab.edit_trigger_title": "Edit trigger: {{name}}", "trigger_viewer.warning.refresh_latest_failed": "Failed to refresh the latest definition", "data_export.dialog.action.start": "Start export", @@ -7455,5 +7448,133 @@ "data_export.workbench.target.batch_tables": "{{database}} · {{count}} objects", "data_export.workbench.target.current_database": "Current database", "data_export.workbench.task.export_target": "Export {{name}}", - "data_export.workbench.title": "Export Workbench" + "data_export.workbench.title": "Export Workbench", + "data_grid.export.scope.all_results_cached": "All results (current cache {{count}} rows)", + "data_grid.export.scope.all_results_cached_description": "Exports all results from the current cache when the current query cannot be replayed.", + "data_grid.export.scope.all_results_requery": "All results (rerun query)", + "data_grid.export.scope.all_results_requery_description": "Re-runs the SQL on the backend to avoid exporting only the current page or cache.", + "data_grid.export.scope.current_page": "Current page ({{count}} rows)", + "data_grid.export.scope.current_page_description": "Export directly from the current page cache.", + "data_grid.export.scope.current_page_requery_description": "Re-runs the current page on the backend using the current pagination settings before export.", + "data_grid.export.scope.current_page_unavailable_description": "The current page depends on temporary frontend state, so use quick export instead.", + "data_grid.export.scope.filtered_results_all": "Filtered results (all)", + "data_grid.export.scope.filtered_results_all_requery_description": "Re-queries the database with the current filters and exports all filtered results.", + "data_grid.export.scope.filtered_results_all_unavailable_description": "The current data source or state does not support replaying filtered exports in the workbench.", + "data_grid.export.scope.selected_rows": "Selected rows", + "data_grid.export.scope.selected_rows_count": "Selected rows ({{count}} rows)", + "data_grid.export.scope.selected_rows_description": "Export only the checked rows in the current result set.", + "sidebar.message.table_export_target_missing": "Table name could not be identified, so export cannot continue.", + "sidebar.tab.batch_export_databases": "Batch export databases", + "sidebar.tab.batch_export_objects": "Batch export objects", + "sidebar.tab.batch_export_objects_database": "Batch export {{database}} objects", + "data_export.message.already_running": "An export task is already running. Wait for it to finish before starting another export.", + "data_export.message.export_failed": "Export failed: {{error}}", + "data_export.message.export_success": "Export successful", + "data_export.progress.stage.waiting_file_selection": "Waiting to choose an export file", + "sql_analysis.workbench.validation.sql_required": "Enter the SQL to diagnose", + "sql_analysis.workbench.alert.connection_missing_title": "The connection for this workbench is no longer available", + "sql_analysis.workbench.alert.connection_missing_description": "Choose a valid connection again before reopening the SQL analysis workbench.", + "sql_analysis.workbench.title": "SQL analysis workbench", + "sql_analysis.workbench.view.slow_query": "Slow SQL", + "sql_analysis.workbench.view.diagnose": "SQL diagnosis", + "sql_analysis.workbench.editor.placeholder": "Enter the SQL to diagnose, or click an item in the slow SQL list to fill it in", + "sql_analysis.workbench.editor.hint": "You can click an item in the slow SQL list to fill it in directly", + "sql_analysis.workbench.action.run": "Run diagnosis", + "sql_analysis.explain.error.query_required": "SQL statement is empty", + "sql_analysis.explain.error.run_failed": "Diagnosis failed", + "sql_analysis.explain.loading": "Running EXPLAIN and parsing the plan...", + "sql_analysis.explain.error.title": "Diagnosis failed: ", + "sql_analysis.explain.empty": "Enter SQL and run diagnosis", + "sql_analysis.explain.view.plan": "Execution plan", + "sql_analysis.explain.view.raw": "Raw", + "sql_analysis.explain.meta.node_count": "{{count}} nodes", + "sql_analysis.explain.raw.empty": "(no raw output)", + "sql_analysis.explain_graph.label.table": "Table: ", + "sql_analysis.explain_graph.label.index": "Index: ", + "sql_analysis.explain_graph.metric.est_rows": "Est.", + "sql_analysis.explain_graph.metric.actual_rows": "Actual", + "sql_analysis.explain_graph.metric.cost": "Cost", + "sql_analysis.explain_graph.flag.full_scan": "Full scan", + "sql_analysis.explain_graph.flag.filesort": "Filesort", + "sql_analysis.explain_graph.flag.temp_table": "Temp table", + "sql_analysis.sidebar.stats.title": "Execution stats", + "sql_analysis.sidebar.stats.total_cost": "Total cost", + "sql_analysis.sidebar.stats.total_duration": "Total duration", + "sql_analysis.sidebar.stats.rows_read": "Rows read", + "sql_analysis.sidebar.stats.buffer_hit": "Buffer hit", + "sql_analysis.sidebar.stats.max_est_rows": "Max node rows", + "sql_analysis.sidebar.warning.full_scan": "Full table scan detected", + "sql_analysis.sidebar.warning.filesort": "Extra sort detected", + "sql_analysis.sidebar.warning.temp_table": "Temporary table used", + "sql_analysis.sidebar.node.title": "Node details", + "sql_analysis.sidebar.node.op_type": "Operation type", + "sql_analysis.sidebar.node.op_detail": "Operation detail", + "sql_analysis.sidebar.node.table": "Table", + "sql_analysis.sidebar.node.index": "Index", + "sql_analysis.sidebar.node.est_rows": "Estimated rows", + "sql_analysis.sidebar.node.actual_rows": "Actual rows", + "sql_analysis.sidebar.node.loops": "Loops", + "sql_analysis.sidebar.node.cost": "Cost", + "sql_analysis.sidebar.node.duration": "Duration", + "sql_analysis.sidebar.node.buffer_hit": "Buffer hit", + "sql_analysis.sidebar.node.flags": "Flags", + "sql_analysis.sidebar.node.extra": "Extra fields ({{count}})", + "sql_analysis.sidebar.suggestions.title": "Index suggestions ({{count}})", + "sql_analysis.sidebar.suggestions.empty": "No obvious performance issues found", + "sql_analysis.sidebar.suggestions.rows": "{{count}} rows", + "sql_analysis.sidebar.suggestions.table": "Table: {{table}}", + "sql_analysis.slow_query.error.load_failed": "Load failed", + "sql_analysis.slow_query.message.cleared": "Slow query history cleared", + "sql_analysis.slow_query.error.clear_failed": "Clear failed", + "sql_analysis.slow_query.sort.duration": "By duration", + "sql_analysis.slow_query.sort.rows_read": "By rows read", + "sql_analysis.slow_query.sort.recent": "By time", + "sql_analysis.slow_query.tooltip.clear_current": "Clear history for the current connection", + "sql_analysis.slow_query.loading": "Loading slow query history...", + "sql_analysis.slow_query.error.title": "Load failed: ", + "sql_analysis.slow_query.empty": "No slow query records yet (threshold {{threshold}}ms)", + "sql_analysis.slow_query.title": "Slow SQL history", + "sql_analysis.slow_query.current_connection": "(current connection)", + "sql_analysis.slow_query.metric.rows_read": "Read", + "sql_analysis.slow_query.metric.rows_returned": "Returned", + "sql_analysis.slow_query.preview.empty": "(no SQL preview)", + "sql_analysis.slow_query.relative.just_now": "Just now", + "sql_analysis.slow_query.relative.minutes_ago": "{{count}} minutes ago", + "sql_analysis.slow_query.relative.hours_ago": "{{count}} hours ago", + "sql_analysis.slow_query.relative.days_ago": "{{count}} days ago", + "sql_analysis.slow_query.rail.tooltip.no_connection": "Open a database connection tab first", + "sql_analysis.slow_query.rail.tooltip.open": "Open the SQL analysis workbench for the current connection", + "sql_analysis.slow_query.rail.aria_label": "Slow SQL workbench", + "sql_analysis.backend.error.query_required": "SQL statement cannot be empty", + "sql_analysis.backend.error.select_only": "Diagnosis only supports SELECT / WITH queries. Use EXPLAIN PLAN mode for write operations (PR2 support).", + "sql_analysis.backend.error.unsupported_db_type": "The current data source ({{dbType}}) does not support SQL diagnosis yet. Phase 1 supports MySQL/PostgreSQL/SQLite/ClickHouse/Oracle/SQLServer/OceanBase.", + "sql_analysis.backend.message.completed": "Diagnosis completed", + "query_history.backend.error.connection_fingerprint_invalid": "Unable to parse the connection fingerprint", + "query_history.backend.message.loaded": "Loaded", + "query_history.backend.message.cleared": "Slow query history cleared", + "connection.backend.error.readonly_action_blocked": "This connection has production guard enabled. {{action}} is not allowed.", + "connection.backend.action.create_database": "Create database", + "connection.backend.action.create_schema": "Create schema", + "connection.backend.action.rename_schema": "Rename schema", + "connection.backend.action.drop_schema": "Drop schema", + "connection.backend.action.rename_database": "Rename database", + "connection.backend.action.drop_database": "Drop database", + "connection.backend.action.rename_table": "Rename table", + "connection.backend.action.drop_table": "Drop table", + "connection.backend.action.drop_view": "Drop view", + "connection.backend.action.drop_function_or_procedure": "Drop function or stored procedure", + "connection.backend.action.rename_view": "Rename view", + "connection.backend.action.import_data": "Import data", + "connection.backend.action.apply_result_changes": "Apply result changes", + "connection.backend.action.preview_result_changes": "Preview result changes", + "connection.backend.action.clear_table": "Clear table data", + "connection.backend.action.truncate_table": "Truncate table", + "connection.backend.action.data_sync_write": "Write synchronized data", + "connection_modal.field.readOnly.label": "Production guard", + "connection_modal.field.readOnly.help": "When enabled, this connection only allows queries. Import, schema changes, data writes, and sync target operations are blocked.", + "connection_modal.field.readOnly.checkbox": "Mark this as a production connection and allow queries only", + "query_editor.message.connection_readonly_blocked": "This connection has production guard enabled and only allows query operations.", + "query_editor.results_panel.message.action.copy": "Copy", + "query_editor.results_panel.message.copy_unsupported": "Clipboard is not available in the current environment", + "query_editor.results_panel.message.copy_failed": "Failed to copy message: {{detail}}" } diff --git a/shared/i18n/ja-JP.json b/shared/i18n/ja-JP.json index c4c74d9..340a88c 100644 --- a/shared/i18n/ja-JP.json +++ b/shared/i18n/ja-JP.json @@ -1,4863 +1,4 @@ { - "common.cancel": "キャンセル", - "redis.db_alias.menu.set": "エイリアスを設定", - "redis.db_alias.modal.title": "{{db}} のエイリアス", - "redis.db_alias.modal.placeholder": "例: cache、sessions(空欄で解除)", - "common.back_to_previous": "前に戻る", - "common.close": "閉じる", - "common.confirm": "確認", - "common.continue": "続行", - "common.delete": "削除", - "common.edit": "編集", - "common.error": "エラー", - "common.loading": "読み込み中", - "common.named_item": "{{name}}", - "common.ok": "OK", - "common.refresh": "更新", - "common.save": "保存", - "common.search": "検索", - "common.success": "成功", - "common.unknown": "不明", - "common.warning": "警告", - "connection.sidebar.group.untitled": "無題のグループ", - "connection.sidebar.group.meta": "{{count}} 件の接続 · 接続グループ", - "connection.sidebar.group.badge": "グループ", - "connection.sidebar.group.edit": "グループを編集", - "connection.sidebar.group.delete": "グループを削除", - "connection.sidebar.group.deleteConfirmTitle": "削除の確認", - "connection.sidebar.group.deleteConfirmContent": "グループ「{{name}}」を削除しますか?中の接続は削除されません。", - "connection.sidebar.group.expandAria": "接続グループ {{name}} を展開", - "connection.sidebar.group.collapseAria": "接続グループ {{name}} を折りたたむ", - "connection.sidebar.menu.section": "接続", - "connection.sidebar.menu.groupSection": "接続グループ", - "connection.sidebar.menu.copy": "接続を複製", - "connection.sidebar.menu.disconnect": "接続を切断", - "connection.sidebar.menu.delete": "接続を削除", - "connection.sidebar.menu.hostFallback": "アドレス未設定", - "connection.sidebar.menu.hostBadge": "HOST", - "connection.sidebar.menu.moveToTag": "タグへ移動", - "connection.sidebar.menu.moveOutTag": "タグから外す", - "connection.sidebar.menu.moveToUngrouped": "グループから外す", - "connection.sidebar.menu.createDatabase": "新規データベース", - "connection.sidebar.menu.refresh": "接続を更新", - "connection.sidebar.menu.current": "現在", - "connection.sidebar.duplicate.backendUnavailable": "接続の複製に失敗しました:バックエンド API を利用できません", - "connection.sidebar.duplicate.noResult": "接続の複製に失敗しました:バックエンドから結果が返されませんでした", - "connection.sidebar.duplicate.success": "接続を複製しました: {{name}}", - "connection.sidebar.duplicate.failureFallback": "接続の複製に失敗しました", - "connection.sidebar.disconnect.success": "接続を切断しました", - "connection.sidebar.delete.confirmTitle": "削除の確認", - "connection.sidebar.delete.confirmContent": "接続「{{name}}」を削除しますか?", - "connection.sidebar.delete.backendUnavailable": "接続の削除に失敗しました:バックエンド API を利用できません", - "connection.sidebar.delete.success": "接続を削除しました", - "connection.sidebar.delete.failureFallback": "接続の削除に失敗しました", - "find_in_database.title": "データベース内を検索 - {{dbName}}", - "find_in_database.placeholder.keyword": "検索する文字列を入力...", - "find_in_database.match.contains": "含む", - "find_in_database.match.exact": "完全一致", - "find_in_database.message.keyword_required": "検索キーワードを入力してください", - "find_in_database.message.connection_config_not_found": "接続設定が見つかりません", - "find_in_database.message.get_tables_failed": "テーブル一覧の取得に失敗しました: {{detail}}", - "find_in_database.message.no_tables": "現在のデータベースにテーブルはありません", - "find_in_database.message.no_matches": "一致するデータが見つかりません", - "find_in_database.message.search_failed": "検索エラー: {{detail}}", - "find_in_database.column.table_name": "テーブル名", - "find_in_database.column.matched_columns": "一致した列", - "find_in_database.column.match_count": "ヒット行数", - "find_in_database.column.action": "操作", - "find_in_database.tooltip.collapse_details": "詳細を折りたたむ", - "find_in_database.tooltip.view_details": "詳細を表示", - "find_in_database.progress.searching_table": "{{table}} を検索中... ({{current}}/{{total}})", - "find_in_database.summary.found_tables": "一致するデータを含むテーブルが {{count}} 件見つかりました", - "find_in_database.summary.searching": "(検索中...)", - "find_in_database.detail.title": "{{table}} - 一致行の詳細", - "find_in_database.detail.row_count": "{{count}} 行", - "import_preview.title": "インポートデータのプレビュー", - "import_preview.action.start": "インポート開始", - "import_preview.status.loading_preview": "プレビューデータを読み込み中...", - "import_preview.status.importing": "データをインポート中...", - "import_preview.progress.processed_rows": "{{current}} / {{total}} 行を処理済み", - "import_preview.progress.success_count": "成功 {{count}}", - "import_preview.progress.error_count": "失敗 {{count}}", - "import_preview.preview.summary": "{{rows}} 行、{{columns}} フィールド", - "import_preview.preview.description": "最初の 5 行を表示しています。内容を確認してからインポートを開始してください。", - "import_preview.preview.field_list": "フィールド一覧:", - "import_preview.preview.table_title": "データプレビュー(最初の 5 行):", - "import_preview.error.preview_failed": "プレビューに失敗しました", - "import_preview.error.preview_failed_detail": "プレビューに失敗しました: {{detail}}", - "import_preview.error.connection_config_not_found": "接続設定が見つかりません", - "import_preview.error.import_failed": "インポートに失敗しました", - "import_preview.error.import_failed_detail": "インポートに失敗しました: {{detail}}", - "import_preview.result.completed": "インポートが完了しました", - "import_preview.result.success_rows": "{{count}} 行を正常にインポートしました", - "import_preview.result.failed_rows": "{{count}} 行が失敗しました", - "import_preview.result.error_logs": "エラーログ:", - "log_panel.title": "SQL 実行ログ", - "log_panel.short_title": "ログ", - "log_panel.description": "実行状態、所要時間、エラー情報を記録してすばやく確認できます。", - "log_panel.action.clear": "ログをクリア", - "log_panel.action.close": "パネルを閉じる", - "log_panel.empty": "SQL 実行ログはありません", - "log_panel.column.time": "時刻", - "log_panel.column.status": "状態", - "log_panel.column.duration": "所要時間", - "log_panel.column.sql_message": "SQL / メッセージ", - "log_panel.affected_rows": "影響行数: {{count}}", - "table_overview.status.loading_tables": "テーブル情報を読み込み中...", - "table_overview.message.load_tables_failed": "テーブル情報の読み込みに失敗しました: {{detail}}", - "table_overview.message.pinned": "テーブルをピン留めしました", - "table_overview.message.unpinned": "テーブルのピン留めを解除しました", - "table_overview.message.copy_structure_success": "テーブル構造をクリップボードにコピーしました", - "table_overview.message.copy_structure_failed": "テーブル構造のコピーに失敗しました: {{detail}}", - "table_overview.message.exporting_table_format": "{{table}} を {{format}} としてエクスポートしています...", - "table_overview.message.export_success": "エクスポートに成功しました", - "table_overview.message.export_failed": "エクスポートに失敗しました: {{detail}}", - "table_overview.message.delete_table_success": "テーブルを削除しました", - "table_overview.message.delete_table_failed": "テーブルの削除に失敗しました: {{detail}}", - "table_overview.table_data_action.truncate.label": "テーブルを切り捨て", - "table_overview.table_data_action.clear.label": "テーブルをクリア", - "table_overview.modal.table_data_action.title": "{{action}} の確認", - "table_overview.modal.table_data_action.content": "{{action}} はテーブル \"{{table}}\" のすべてのデータを完全に削除します。この操作は元に戻せません。続行しますか?", - "table_overview.message.table_data_action_loading": "{{table}} に {{action}} を実行しています...", - "table_overview.message.table_data_action_success": "{{action}} が成功しました", - "table_overview.message.table_data_action_failed": "{{action}} に失敗しました: {{detail}}", - "table_overview.message.rename_table_success": "テーブル名を変更しました", - "table_overview.message.rename_table_failed": "テーブル名の変更に失敗しました: {{detail}}", - "table_overview.message.unknown_error": "不明なエラー", - "table_overview.modal.delete_table.title": "テーブルを削除", - "table_overview.modal.delete_table.content": "テーブル \"{{table}}\" を削除しますか?この操作は元に戻せません。", - "table_overview.modal.rename_table.title": "テーブル名を変更", - "table_overview.modal.rename_table.placeholder": "新しいテーブル名を入力", - "table_overview.validation.table_name_required": "テーブル名は必須です", - "table_overview.validation.table_name_unchanged": "新しいテーブル名は現在の名前と同じです", - "table_overview.toolbar.summary": "{{count}} テーブル · {{rows}} 行 · {{size}}", - "table_overview.placeholder.search": "テーブル名またはコメントを検索...", - "table_overview.tooltip.sort": "並べ替え", - "table_overview.tooltip.card_view": "カード表示", - "table_overview.tooltip.list_view": "リスト表示", - "table_overview.tooltip.refresh": "更新", - "table_overview.sort.name": "名前", - "table_overview.sort.rows": "行数", - "table_overview.sort.size": "サイズ", - "table_overview.metric.data_size": "データサイズ", - "table_overview.metric.index_size": "インデックスサイズ", - "table_overview.metric.relative_size": "相対サイズ", - "table_overview.metric.engine": "エンジン", - "table_overview.section.all": "すべて", - "table_overview.section.pinned": "ピン留め", - "table_overview.row.engine_table": "{{engine}} テーブル", - "table_overview.row.open_hint": "ダブルクリックでデータを開き、右クリックでその他の操作を表示", - "table_overview.status.updating_filter": "絞り込み結果を更新中...", - "table_overview.status.matching_rendered": "{{matched}} テーブルに一致、{{rendered}} 件を描画中", - "table_overview.status.hidden_count_hint": "未描画が {{count}} 件あります。さらに読み込むか検索範囲を絞り込んでください。", - "table_overview.empty.no_matches": "一致する結果はありません", - "table_overview.empty.no_tables": "テーブルがありません", - "table_overview.action.show_more": "さらにテーブルを表示(残り {{count}})", - "table_overview.menu.new_query": "新規クエリ", - "table_overview.menu.design_table": "テーブルを設計", - "table_overview.menu.copy_structure": "テーブル構造をコピー", - "table_overview.menu.backup_table_sql": "テーブルをバックアップ (SQL)", - "table_overview.menu.rename_table": "テーブル名を変更", - "table_overview.menu.danger_operations": "危険な操作", - "table_overview.menu.truncate_table": "テーブルを切り詰め", - "table_overview.menu.clear_table": "テーブルを空にする", - "table_overview.menu.delete_table": "テーブルを削除", - "table_overview.menu.export_table_data": "テーブルデータをエクスポート", - "table_overview.menu.export_csv": "CSV をエクスポート", - "table_overview.menu.export_xlsx": "XLSX をエクスポート", - "table_overview.menu.export_json": "JSON をエクスポート", - "table_overview.menu.export_markdown": "Markdown をエクスポート", - "table_overview.menu.export_html": "HTML をエクスポート", - "settings.language.description": "GoNavi の表示言語を選択します。", - "settings.language.english": "English", - "settings.language.follow_system": "システムに従う", - "settings.language.german": "Deutsch", - "settings.language.japanese": "日本語", - "settings.language.restart_hint": "一部のエディターやシステムレベルのメニューでは、完全に反映するためにウィンドウを開き直す必要があります。", - "settings.language.russian": "Русский", - "settings.language.simplified_chinese": "简体中文", - "settings.language.title": "言語", - "settings.language.traditional_chinese": "繁體中文", - "settings.title": "設定", - "app.about.action.check_updates": "更新を確認", - "app.about.action.download_progress": "ダウンロード状況", - "app.about.action.download_update": "更新をダウンロード", - "app.about.action.mute_this_version": "今回は通知しない", - "app.about.community.ai_book": "AI全书", - "app.about.description": "バージョン情報、リポジトリ、更新状況、ダウンロード入口を確認します。", - "app.about.field.author": "作者", - "app.about.field.community": "コミュニティ", - "app.about.field.update_status": "更新状況", - "app.about.field.version": "バージョン", - "app.about.message.load_failed": "アプリ情報の取得に失敗しました: {{error}}", - "app.about.project_links": "プロジェクトリンク", - "app.about.title": "GoNavi について", - "app.ai_panel.action.close": "パネルを閉じる", - "app.ai_panel.action.reload": "再読み込み", - "app.ai_panel.aria.close": "AI パネルを閉じる", - "app.ai_panel.error.description": "これは通常、開発環境のホットリロード後に遅延読み込みリソースが無効になることで発生します。画面全体の白化は防止されているので、そのまま再試行できます。", - "app.ai_panel.error.title": "AI パネルの読み込みに失敗しました", - "app.data_root.action.migrate_and_switch": "既存データを移行して切り替え", - "app.data_root.action.open_current": "現在のディレクトリを開く", - "app.data_root.action.restore_default_directory": "既定のディレクトリに戻す", - "app.data_root.action.select": "ディレクトリを選択", - "app.data_root.action.switch_only": "選択したディレクトリへ切り替えのみ", - "app.data_root.apply_method": "適用方法", - "app.data_root.current_directory": "現在のディレクトリ", - "app.data_root.default_directory": "既定のディレクトリ", - "app.data_root.description": "接続、プロキシ、AI 設定、ドライバーなどのファイル型データのルートディレクトリを一元管理します。", - "app.data_root.driver_directory": "ドライバーディレクトリ", - "app.data_root.backend.dialog.select_directory": "GoNavi データディレクトリを選択", - "app.data_root.backend.error.create_target_failed": "移行先データディレクトリを作成できませんでした: {{detail}}", - "app.data_root.backend.error.create_bootstrap_directory_failed": "既定のブートストラップディレクトリを作成できませんでした: {{detail}}", - "app.data_root.backend.error.create_data_directory_failed": "データディレクトリを作成できませんでした: {{detail}}", - "app.data_root.backend.error.directory_empty": "データディレクトリは空にできません", - "app.data_root.backend.error.directory_unavailable": "データディレクトリが存在しないか、アクセスできません", - "app.data_root.backend.error.migrate_directory_failed": "ディレクトリを移行できませんでした ({{entry}}): {{detail}}", - "app.data_root.backend.error.migrate_file_failed": "ファイルを移行できませんでした ({{entry}}): {{detail}}", - "app.data_root.backend.error.open_directory_failed": "データディレクトリを開けませんでした: {{detail}}", - "app.data_root.backend.error.open_directory_unsupported": "このプラットフォームではディレクトリを開けません: {{platform}}", - "app.data_root.backend.error.read_source_failed": "元データを読み取れませんでした ({{entry}}): {{detail}}", - "app.data_root.backend.message.migrated_restart": "データを移行し、新しいディレクトリへ切り替えました。すべてのモジュールの切り替えを完了するにはアプリを再起動してください。", - "app.data_root.backend.message.opened": "データディレクトリを開きました", - "app.data_root.backend.message.unchanged": "データディレクトリは変更されていません", - "app.data_root.backend.message.updated_restart": "データディレクトリを更新しました。AI やその他の実行中モジュールを新しいディレクトリへ完全に切り替えるには、アプリを再起動してください。", - "app.data_root.message.apply_failed": "データディレクトリの適用に失敗しました", - "app.data_root.message.apply_failed_with_error": "データディレクトリの適用に失敗しました: {{error}}", - "app.data_root.message.load_failed": "データディレクトリ情報の読み込みに失敗しました", - "app.data_root.message.load_failed_with_error": "データディレクトリ情報の読み込みに失敗しました: {{error}}", - "app.data_root.message.open_failed": "データディレクトリを開けませんでした", - "app.data_root.message.open_failed_with_error": "データディレクトリを開けませんでした: {{error}}", - "app.data_root.message.select_failed": "データディレクトリの選択に失敗しました", - "app.data_root.message.select_failed_with_error": "データディレクトリの選択に失敗しました: {{error}}", - "app.data_root.message.select_valid_first": "先に有効なデータディレクトリを選択してください", - "app.data_root.message.updated": "データディレクトリを更新しました", - "app.data_root.placeholder.select_new_directory": "新しいデータディレクトリを選択", - "app.data_root.restart_hint": "切り替え後は、AI やその他の長時間動作するモジュールを新しいディレクトリへ完全に移すため、アプリの再起動を推奨します。機密パスワードはシステムの secret store に残り、ファイルディレクトリとは一緒に移行されません。", - "app.data_root.switch_target": "切り替え先", - "app.data_root.title": "データ保存場所", - "app.proxy.description": "更新確認、ドライバー管理、個別プロキシを指定していない接続のネットワーク出口を一元設定します。", - "app.proxy.enable": "グローバルプロキシを有効化", - "app.proxy.host": "プロキシホスト", - "app.proxy.host_placeholder": "例: 127.0.0.1", - "app.proxy.message.invalid_enabled": "グローバルプロキシは有効ですが、ホストまたはポートが無効なため、現在は無効として扱われます。", - "app.proxy.message.save_failed": "グローバルプロキシ設定に失敗しました: {{error}}", - "app.proxy.password_optional": "パスワード (任意)", - "app.proxy.port": "ポート", - "app.proxy.scope_hint": "* 更新確認、ドライバー管理のネットワークリクエスト、および個別プロキシ未設定のデータベース接続に適用されます", - "app.proxy.section_title": "グローバルプロキシ", - "app.proxy.title": "グローバルプロキシ設定", - "app.proxy.type": "プロキシ種別", - "app.proxy.username_optional": "ユーザー名 (任意)", - "proxy.backend.error.unsupported_type": "サポートされていないプロキシ種別: {{type}}", - "proxy.backend.error.host_empty": "プロキシホストが空です", - "proxy.backend.error.port_invalid": "プロキシポートが無効です: {{port}}", - "proxy.backend.error.remote_addr_invalid": "リモートアドレスが無効です: {{address}}", - "proxy.backend.error.listen_failed": "ローカルプロキシリスナーの作成に失敗しました: {{detail}}", - "proxy.backend.error.socks5_dialer_failed": "SOCKS5 プロキシダイヤラーの作成に失敗しました: {{detail}}", - "proxy.backend.error.socks5_connect_failed": "SOCKS5 プロキシ接続に失敗しました: {{detail}}", - "proxy.backend.error.http_connect_failed": "HTTP プロキシへの接続に失敗しました: {{detail}}", - "proxy.backend.error.http_connect_write_failed": "HTTP CONNECT リクエストの送信に失敗しました: {{detail}}", - "proxy.backend.error.http_connect_read_failed": "HTTP CONNECT レスポンスの読み取りに失敗しました: {{detail}}", - "proxy.backend.error.http_connect_status_failed": "HTTP プロキシ CONNECT に失敗しました: {{status}}", - "app.startup_readiness.loading_local_config": "ローカル設定を読み込んでいます...", - "app.startup_readiness.loading_security_config": "セキュリティ設定を読み込んでいます...", - "app.security_update.error.capability_unavailable": "安全更新機能は利用できません", - "app.security_update.message.completed": "保存済み設定の安全更新が完了しました", - "app.security_update.message.needs_attention": "更新はまだ完了していません。一部の設定に対応が必要です。", - "app.security_update.message.not_finished_retry_later": "安全更新は未完了です。後でもう一度お試しください。", - "app.security_update.message.postpone_failed": "現在、この安全更新を延期できません", - "app.security_update.message.rolled_back": "この更新は完了しませんでした。システムは現在利用可能な設定を保持しました。", - "app.security_update.stage.checking_saved_config": "保存済み設定を確認しています", - "app.security_update.stage.updating_secure_storage": "安全ストレージを更新しています", - "app.security_update.stage.verifying_result": "更新結果を検証しています", - "security_update.banner.title": "保存済み設定を安全に更新できます", - "security_update.banner.action.start_now": "今すぐ更新", - "security_update.banner.action.view_details": "詳細を表示", - "security_update.banner.action.restart_update": "更新を再開始", - "security_update.banner.action.retry_check": "再確認", - "security_update.backend.issue.ai_provider.migration_required": "AI プロバイダー設定はまだ現在のアプリ設定に保存されています。安全更新が完了すると、新しい安全ストレージへ移されます。", - "security_update.backend.issue.ai_provider.missing_or_resave": "AI プロバイダー設定が存在しないか、安全更新を完了する前に再保存が必要です。", - "security_update.backend.issue.ai_provider.secret_missing": "AI プロバイダー設定は、安全更新を完了する前に追加情報が必要です。", - "security_update.backend.issue.connection.incomplete": "接続設定は、安全更新を完了する前に追加情報が必要です。", - "security_update.backend.issue.connection.missing_or_resave": "接続設定が存在しないか、安全更新を完了する前に再保存が必要です。", - "security_update.backend.issue.connection.password_missing": "接続パスワードが失われています。続行する前に再保存してください。", - "security_update.backend.issue.global_proxy.missing_or_resave": "グローバルプロキシ設定が存在しないか、安全更新を完了する前に再保存が必要です。", - "security_update.backend.issue.global_proxy.password_incomplete": "グローバルプロキシのパスワードは、安全更新を完了する前に追加情報が必要です。", - "security_update.backend.issue.global_proxy.password_missing": "グローバルプロキシのパスワードが失われています。続行する前に再保存してください。", - "security_update.backend.issue.global_proxy.title": "グローバルプロキシ", - "security_update.backend.issue.system.message": "現在の環境ではこの安全更新を完了できませんでした。後でもう一度お試しください。", - "security_update.backend.issue.system.title": "安全更新は完了しませんでした", - "security_update.intro.title": "保存済み設定の安全更新", - "security_update.intro.subtitle": "新しい安全ストレージを使う前に、ローカル設定の更新が必要です。", - "security_update.intro.description": "保存済みの接続、プロキシ、関連サービス設定を新しい安全ストレージに移すため、この更新をローカルで一度実行します。更新前にローカルバックアップが自動作成されます。完了しなかった場合も、システムは現在利用可能な設定を保持し、後で続行できます。", - "security_update.intro.action.details": "詳細を表示", - "security_update.intro.action.later": "後で通知", - "security_update.intro.action.start_now": "今すぐ更新", - "security_update.progress.default_detail": "更新中も現在利用可能な設定は保持されます。しばらくお待ちください。", - "security_update.settings.title": "安全更新", - "security_update.settings.subtitle": "保存済み設定の安全更新状態と対応待ち項目を管理します。", - "security_update.settings.action.retry_check": "再確認", - "security_update.settings.action.restart_update": "更新を再開始", - "security_update.settings.action.start": "更新を開始", - "security_update.settings.action.close": "閉じる", - "security_update.settings.current_status": "現在の状態:{{status}}", - "security_update.settings.scope_title": "影響範囲", - "security_update.settings.summary.total": "合計", - "security_update.settings.summary.updated": "更新済み", - "security_update.settings.summary.pending": "対応待ち", - "security_update.settings.summary.skipped": "スキップ済み", - "security_update.settings.summary.failed": "失敗", - "security_update.settings.pending_list": "対応待ち一覧", - "security_update.settings.empty_pending": "現在、対応待ち項目はありません", - "security_update.settings.item_status": "状態:{{status}}", - "security_update.settings.item_severity": "レベル:{{severity}}", - "security_update.settings.item_default_message": "この項目は、安全更新を完了する前に追加対応が必要です。", - "security_update.settings.recent_result": "最新の結果", - "security_update.settings.backup_path": "バックアップ場所:", - "security_update.settings.last_error": "最新のエラー:", - "security_update.status.pending.label": "更新待ち", - "security_update.status.pending.description": "実行可能な安全更新があります。今すぐ開始するか、後で続行できます。", - "security_update.status.postponed.label": "更新待ち", - "security_update.status.postponed.description": "この安全更新は延期されています。現在利用可能な設定は引き続き保持されます。", - "security_update.status.in_progress.label": "更新中", - "security_update.status.in_progress.description": "保存済み設定の安全ストレージを確認し、更新しています。", - "security_update.status.needs_attention.label": "対応待ち", - "security_update.status.needs_attention.description": "更新はまだ完了していません。一部の設定に対応が必要です。", - "security_update.status.completed.label": "完了", - "security_update.status.completed.description": "保存済み設定の安全更新が完了しました。", - "security_update.status.rolled_back.label": "ロールバック済み", - "security_update.status.rolled_back.description": "この更新は完了しませんでした。システムは現在利用可能な設定を保持しました。", - "security_update.status.not_detected.label": "未検出", - "security_update.status.not_detected.description": "現在、対応が必要な安全更新はありません。", - "security_update.action.open_connection": "接続を開く", - "security_update.action.open_proxy_settings": "プロキシ設定", - "security_update.action.open_ai_settings": "AI 設定", - "security_update.action.retry_update": "再確認", - "security_update.action.view_details": "詳細を表示", - "security_update.item_status.pending": "更新待ち", - "security_update.item_status.updated": "更新済み", - "security_update.item_status.needs_attention": "対応待ち", - "security_update.item_status.skipped": "スキップ済み", - "security_update.item_status.failed": "失敗", - "security_update.severity.high": "高リスク", - "security_update.severity.medium": "中リスク", - "security_update.severity.low": "低リスク", - "security_update.repair.warning.connection_not_found": "該当する接続が見つかりません。先に最新状態を再確認してください。", - "security_update.bootstrap.legacy.connection.message": "この接続は、現在のアプリのローカル設定にまだ保存されています。安全更新の完了後、新しい安全ストレージへ移動されます。", - "security_update.bootstrap.legacy.global_proxy.title": "グローバルプロキシ", - "security_update.bootstrap.legacy.global_proxy.message": "グローバルプロキシ設定は、現在のアプリのローカル設定にまだ保存されています。安全更新の完了後、新しい安全ストレージへ移動されます。", - "security_update.error.capability_unavailable": "安全更新機能は利用できません", - "app.settings.description": "言語、プロキシ、テーマ、AI、アプリ情報などの共通設定をまとめて管理します。", - "app.settings.entry.about.description": "バージョン情報、リポジトリ、更新状況を確認します。", - "app.settings.entry.about.title": "GoNavi について", - "app.settings.entry.ai.description": "モデルプロバイダー、キー、既定の動作を管理します。", - "app.settings.entry.ai.title": "AI 設定", - "app.settings.entry.proxy.description": "更新確認、ドライバー管理、共通ネットワーク出口を設定します。", - "app.settings.entry.proxy.title": "グローバルプロキシ", - "app.settings.entry.theme.description": "ライト/ダークテーマを切り替え、表示の見た目を調整します。", - "app.settings.entry.theme.title": "テーマと外観", - "app.settings.title": "設定センター", - "app.shortcuts.action.focusSidebarSearch.description": "左側の接続ツリー検索ボックスにフォーカスします", - "app.shortcuts.action.focusSidebarSearch.label": "サイドバー検索にフォーカス", - "app.shortcuts.action.newConnection.description": "新しいデータベース、ランタイム、またはその他のデータソース接続を作成します", - "app.shortcuts.action.newConnection.label": "新規データソース", - "app.shortcuts.action.newQueryTab.description": "新しい SQL クエリタブを作成します", - "app.shortcuts.action.newQueryTab.label": "新規クエリタブ", - "app.shortcuts.action.openShortcutManager.description": "ショートカット設定パネルを開きます", - "app.shortcuts.action.openShortcutManager.label": "ショートカット管理を開く", - "app.shortcuts.action.record": "記録", - "app.shortcuts.action.resetWindowZoom.description": "Windows タスクバーから復元後にフォントが異常に大きくなった場合に手動で実行します。最大化状態を一度切り替えて WebView2 にフォントメトリクスを再計算させます", - "app.shortcuts.action.resetWindowZoom.label": "ウィンドウズームをリセット", - "app.shortcuts.action.restore_defaults": "既定に戻す", - "app.shortcuts.action.runQuery.description": "現在のクエリページで SQL を実行します", - "app.shortcuts.action.runQuery.label": "SQL を実行", - "app.shortcuts.action.saveQuery.description": "現在のクエリタブを保存します。名前のないクエリでは保存ダイアログを開きます", - "app.shortcuts.action.saveQuery.label": "クエリを保存", - "app.shortcuts.action.selectCurrentStatement.description": "クエリエディターでカーソル位置の SQL 文を選択します", - "app.shortcuts.action.selectCurrentStatement.label": "現在の文を選択", - "app.shortcuts.action.sendAIChatMessage.description": "AI 入力欄の現在のメッセージを送信します。Shift+Enter は常に改行します", - "app.shortcuts.action.sendAIChatMessage.label": "AI チャット送信", - "app.shortcuts.action.switchToNextTab.description": "開いているタブの中で右へ切り替えます", - "app.shortcuts.action.switchToNextTab.label": "次のタブへ切り替え", - "app.shortcuts.action.switchToPreviousTab.description": "開いているタブの中で左へ切り替えます", - "app.shortcuts.action.switchToPreviousTab.label": "前のタブへ切り替え", - "app.shortcuts.action.toggleAIPanel.description": "右側の AI データ洞察パネルを開きます", - "app.shortcuts.action.toggleAIPanel.label": "AI データ洞察を開く", - "app.shortcuts.action.toggleLogPanel.description": "SQL 実行ログパネルを開閉します", - "app.shortcuts.action.toggleLogPanel.label": "ログパネルを切り替え", - "app.shortcuts.action.toggleMacFullscreen.description": "macOS ネイティブウィンドウ制御モードでのネイティブフルスクリーン切り替え", - "app.shortcuts.action.toggleMacFullscreen.label": "ネイティブフルスクリーン切り替え", - "app.shortcuts.action.toggleTheme.description": "ライトテーマとダークテーマを切り替えます", - "app.shortcuts.action.toggleTheme.label": "テーマを切り替え", - "app.shortcuts.action.diagnoseQuery.description": "現在の SQL に対して EXPLAIN を実行し、実行計画図とインデックス提案を表示します", - "app.shortcuts.action.diagnoseQuery.label": "SQL 診断", - "app.shortcuts.action.showSlowQueries.description": "現在の接続のスロー SQL 履歴を表示(デフォルト閾値 500ms)", - "app.shortcuts.action.showSlowQueries.label": "スロー SQL 履歴", - "app.shortcuts.capture_hint": "「記録」をクリックした後にショートカットを押してください。Esc で記録をキャンセルできます。グローバルショートカットには修飾キーを含めることを推奨します。AI チャット送信は Enter 関連の組み合わせのみ対応し、Shift+Enter は改行のままです。", - "app.shortcuts.capture_waiting": "ショートカットを押してください...", - "app.shortcuts.context.datagrid": "データグリッド", - "app.shortcuts.context.global": "ブラウザー", - "app.shortcuts.context.monaco": "エディター", - "app.shortcuts.description": "よく使うグローバルショートカットの確認、記録、有効化を一か所で行います。", - "app.shortcuts.message.ai_send_limit": "AI チャット送信ショートカットは Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter のみ対応します。Shift+Enter は改行のままです", - "app.shortcuts.message.conflict": "「{{action}}」と競合しています。別のショートカットを選択してください。", - "app.shortcuts.message.modifier_required": "ショートカットには Ctrl / Alt / Shift / Meta のいずれかを少なくとも 1 つ含めてください", - "app.shortcuts.message.reserved_conflict_info": "エディターの既定ショートカット「{{labels}}」を上書きしました", - "app.shortcuts.message.reserved_conflict_warning": "{{contexts}}「{{labels}}」と競合しており、動作しない可能性があります", - "app.shortcuts.message.restored_defaults": "既定のショートカットに戻しました", - "app.shortcuts.reserved.browser_close_tab": "ブラウザーでタブを閉じる", - "app.shortcuts.reserved.browser_new_incognito_window": "ブラウザーでシークレットウィンドウを開く", - "app.shortcuts.reserved.browser_new_tab": "ブラウザーで新規タブ", - "app.shortcuts.reserved.browser_new_window": "ブラウザーで新規ウィンドウ", - "app.shortcuts.reserved.browser_print": "ブラウザー印刷", - "app.shortcuts.reserved.browser_save": "ブラウザー保存", - "app.shortcuts.reserved.datagrid_copy": "データグリッドコピー", - "app.shortcuts.reserved.editor_add_selection": "エディターで選択範囲を追加", - "app.shortcuts.reserved.editor_delete_line": "エディターで行を削除", - "app.shortcuts.reserved.editor_find": "エディター検索", - "app.shortcuts.reserved.editor_find_global": "エディター全体検索", - "app.shortcuts.reserved.editor_goto_line": "エディター行へ移動", - "app.shortcuts.reserved.editor_insert_line_after": "エディターで下に行を挿入", - "app.shortcuts.reserved.editor_insert_line_before": "エディターで上に行を挿入", - "app.shortcuts.reserved.editor_quick_open": "エディタークイックオープン", - "app.shortcuts.reserved.editor_rename_symbol": "エディターでシンボル名を変更", - "app.shortcuts.reserved.editor_replace": "エディター置換", - "app.shortcuts.title": "ショートカット管理", - "app.sidebar.ai_assistant": "AI アシスタント", - "app.sidebar.resize_width": "ドラッグして幅を変更", - "app.sidebar.settings": "設定", - "app.sidebar.sql_execution_log": "SQL 実行ログ", - "app.sidebar.tools": "ツール", - "app.tools.entry.snippets.description": "SQL コードスニペットとプレフィックス補完を管理します。", - "app.tools.entry.snippets.title": "コードスニペット管理", - "app.theme.action.restore_defaults": "既定に戻す", - "app.theme.appearance.blur_hint": "* アプリ内オーバーレイ層のぼかしのみを制御します", - "app.theme.appearance.blur_title": "ガウスぼかし (Blur)", - "app.theme.appearance.enable_transparency_blur": "透明度とぼかしを有効化", - "app.theme.appearance.enable_transparency_blur_hint": "無効にすると現在のしきい値は保持され、再度有効化したときにそのまま復元されます。", - "app.theme.appearance.font_size_title": "基本フォントサイズ (Font Size)", - "app.theme.appearance.opacity_title": "背景の不透明度 (Opacity)", - "app.theme.appearance.transparency_blur_title": "透明度とぼかし効果", - "app.theme.appearance.ui_scale_hint": "* 小さい画面では 85%-95% を推奨します", - "app.theme.appearance.ui_scale_title": "UI スケール (UI Scale)", - "app.theme.appearance.windows_acrylic_hint": "Windows ではシステムの Acrylic 効果を使用します。ぼかしの強さはシステムにより制御されます。", - "app.theme.appearance_settings_description": "スケール、フォントサイズ、透明度、ぼかし効果をまとめて調整します。", - "app.theme.appearance_settings_title": "外観設定", - "app.theme.data_table.column_width_hint": "標準モードの既定列幅は 200px、コンパクトモードの既定列幅は 140px です。手動で調整した列幅は優先して保持されます。", - "app.theme.data_table.column_width_mode": "データテーブル列幅モード", - "app.theme.data_table.column_width_mode.compact": "コンパクト 140px", - "app.theme.data_table.column_width_mode.standard": "標準 200px", - "app.theme.data_table.title": "データテーブル表示", - "app.theme.data_table.vertical_borders": "データテーブルの縦区切り線を表示", - "app.theme.data_table.vertical_borders_hint": "データテーブルページの DataGrid のみに作用し、他のテーブルコンポーネントには影響しません。", - "app.theme.mac_window.restart_hint": "* 右上のカスタムボタンは非表示に同期されています。システムウィンドウのスタイルがすぐに更新されない場合は、アプリを再起動して確認してください", - "app.theme.mac_window.title": "macOS ウィンドウ制御", - "app.theme.mac_window.use_native_controls": "macOS ネイティブウィンドウ制御を使用", - "app.theme.mac_window.use_native_controls_hint": "有効にすると左上に赤/黄/緑のボタンを表示し、macOS ネイティブのフルスクリーン動作を優先します。", - "app.theme.mode.dark.description": "暗い環境に適し、落ち着いた見た目になります。", - "app.theme.mode.dark.label": "ダークテーマ", - "app.theme.mode.light.description": "明るい環境に適し、軽やかな階層感になります。", - "app.theme.mode.light.label": "ライトテーマ", - "app.theme.mode_title": "テーマモード", - "app.theme.nav.appearance.description": "スケール、フォント、透明度", - "app.theme.nav.appearance.title": "外観パラメータ", - "app.theme.nav.theme.description": "ライト/ダーク切り替え", - "app.theme.nav.theme.title": "テーマモード", - "app.theme.navigation_title": "設定ナビゲーション", - "app.theme.startup_window.fullscreen": "起動時にフルスクリーン", - "app.theme.startup_window.fullscreen_windows": "起動時にフルスクリーン (Windows では最大化として扱います)", - "app.theme.startup_window.hint": "* 変更は次回起動時に有効になります", - "app.theme.startup_window.title": "起動ウィンドウ", - "app.theme.startup_window.windows_hint": "* Windows ではこのオプションは「起動時に最大化」として扱われ、次回起動時に有効になります", - "app.theme.theme_settings_description": "ライト/ダークテーマを切り替え、全体の視覚スタイルを統一します。", - "app.theme.theme_settings_title": "テーマ設定", - "app.theme.ui_version.badge.new": "NEW", - "app.theme.ui_version.beta_warning": "新しい UI はまだ Beta です。一部の画面スタイルは旧版と異なる場合があり、問題があればいつでも戻せます。", - "app.theme.ui_version.description": "すべての機能を維持したまま全体の外観を切り替えます。新しい版はよりコンパクトな情報階層と現代的なビジュアル言語を採用しています。", - "app.theme.ui_version.legacy.badge": "既定", - "app.theme.ui_version.legacy.description": "現在の安定版インターフェースで、すべての機能を完全に利用できます。", - "app.theme.ui_version.legacy.label": "旧版 UI", - "app.theme.ui_version.platform_hint": "Windows、macOS、Linux のいずれでも切り替えできます。変更はすぐに反映され、一部のモーダルは次回表示時に新しいスタイルを使用します。", - "app.theme.ui_version.sidebar_search.command": "新しいコマンド検索", - "app.theme.ui_version.sidebar_search.filter": "従来のサイドバーフィルター", - "app.theme.ui_version.sidebar_search.hint": "新しいコマンド検索は接続、テーブル、アクションへの移動に適しています。パネルで同期スイッチを有効にすると左側ツリーを継続的に絞り込めます。従来のサイドバーフィルターは入力欄を直接表示し、フィルター内容を保持します。", - "app.theme.ui_version.sidebar_search.title": "新しい左サイドバー検索モード", - "app.theme.tab_display.title": "Tab ラベル表示", - "app.theme.tab_display.description": "接続名、オブジェクト種別、オブジェクト名、データベース、Schema、Host/IP の表示順をカスタマイズします。2 行モードではコンテキストを副行に配置できます。", - "app.theme.tab_display.layout.single": "1 行", - "app.theme.tab_display.layout.double": "2 行", - "app.theme.tab_display.badge.current": "現在", - "app.theme.tab_display.row.primary": "主行", - "app.theme.tab_display.row.secondary": "副行", - "app.theme.tab_display.action.move_up": "上へ", - "app.theme.tab_display.action.move_down": "下へ", - "app.theme.tab_display.preview.prefix": "現在のプレビュー: ", - "app.theme.tab_display.preview.default_label": "既定ラベル", - "app.theme.tab_display.preview.secondary": "、副行 {{labels}}", - "app.theme.tab_display.preview.focused": "、現在選択中 {{label}}", - "app.theme.tab_display.element.connection.label": "接続名", - "app.theme.tab_display.element.connection.description": "接続の短縮名または環境名。例: DEV", - "app.theme.tab_display.element.kind.label": "オブジェクト種別", - "app.theme.tab_display.element.kind.description": "SQL / TABLE / VIEW などの種別ラベル", - "app.theme.tab_display.element.object.label": "オブジェクト名", - "app.theme.tab_display.element.object.description": "テーブル名、クエリ名、リソース名などの主要な名前", - "app.theme.tab_display.element.database.label": "データベース", - "app.theme.tab_display.element.database.description": "現在の DB / catalog 名", - "app.theme.tab_display.element.schema.label": "Schema", - "app.theme.tab_display.element.schema.description": "schema / owner プレフィックス", - "app.theme.tab_display.element.host.label": "Host/IP", - "app.theme.tab_display.element.host.description": "接続先アドレスの要約", - "app.theme.ui_version.title": "インターフェース版", - "app.theme.ui_version.v2.badge": "Beta", - "app.theme.ui_version.v2.description": "AI 入口とテーブル概要を強化した、再設計されたコンパクトなインターフェースです。", - "app.theme.ui_version.v2.label": "新版 UI", - "app.tools.description": "接続設定、同期、ドライバー、ショートカット関連の操作をまとめて扱います。", - "app.tools.group.config.description": "インポート/エクスポート、データディレクトリ、保存済み設定の保守。", - "app.tools.group.config.title": "接続と設定", - "app.tools.group.workflow.description": "構造比較、差分確認、同期開始をまとめて行います。", - "app.tools.group.workflow.title": "データワークフロー", - "app.tools.group.workspace.description": "ドライバー、コードスニペット、グローバルショートカット。", - "app.tools.group.workspace.title": "エディタとドライバー", - "app.tools.entry.data_root.description": "ローカルデータ保存場所の確認、切り替え、移行を行います。", - "app.tools.entry.data_root.title": "データディレクトリ", - "app.tools.entry.drivers.description": "データベースドライバーのインストール、更新、削除を行います。", - "app.tools.entry.drivers.title": "ドライバー管理", - "app.tools.entry.export.description": "現在の接続と表示可能な設定フィールドをエクスポートします。", - "app.tools.entry.export.title": "接続設定をエクスポート", - "app.tools.entry.import.description": "ローカルファイルから接続リストを復元します。", - "app.tools.entry.import.title": "接続設定をインポート", - "app.tools.entry.security_update.description": "保存済み設定の安全更新状況を確認します。", - "app.tools.entry.security_update.status_description": "現在の状態: {{status}}", - "app.tools.entry.security_update.title": "安全更新", - "app.window_zoom.message.fullscreen_exit_first": "全画面表示ではズームをリセットできません。先に全画面表示を終了してください。", - "app.window_zoom.message.reset_failed": "ウィンドウのズームのリセットに失敗しました", - "app.window_zoom.message.reset_success": "ウィンドウのズームをリセットしました", - "app.window_zoom.message.reset_success_fallback": "ウィンドウのズームをリセットしました(フォールバック)", - "app.window_zoom.message.windows_only": "この機能は Windows でのみ利用できます", - "app.tools.entry.shortcuts.description": "グローバルショートカットの割り当てを確認、調整します。", - "app.tools.entry.shortcuts.title": "ショートカット管理", - "app.tools.entry.schema_compare.description": "ソース表とターゲット表の構造差分を比較します。プレビューのみで実行はしません。", - "app.tools.entry.schema_compare.title": "表構造比較", - "app.tools.entry.data_compare.description": "主キーに基づいて追加、更新、削除、同一行を分析します。", - "app.tools.entry.data_compare.title": "データ比較", - "app.tools.entry.sync.description": "複数ソース間の同期ワークフローを開きます。", - "app.tools.entry.sync.title": "データ同期", - "app.tools.title": "ツールセンター", - "app.connection_package.action.start_export": "エクスポート開始", - "app.connection_package.action.start_import": "インポート開始", - "app.connection_package.dialog.export_title": "接続をエクスポート", - "app.connection_package.dialog.file_password_placeholder": "ファイル保護パスワードを入力(任意)", - "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "パスワードは暗号化されています。公開ネットワークで転送する場合は、ファイル保護パスワードの設定を推奨します。", - "app.connection_package.dialog.help.exclude_passwords": "接続設定のみをエクスポートし、パスワードは含めません。", - "app.connection_package.dialog.help.share_file_password_separately": "パスワードは別の経路で受信者に伝え、ファイルと一緒に送信しないでください。", - "app.connection_package.dialog.import_password_title": "インポートパスワードを入力", - "app.connection_package.dialog.option.include_passwords": "接続パスワードをエクスポート", - "app.connection_package.dialog.option.use_file_password": "ファイル保護パスワードを設定", - "app.connection_package.dialog.restore_password_placeholder": "復元パッケージのパスワードを入力", - "app.connection_package.error.export_capability_unavailable": "エクスポートに失敗しました: 現在のバックエンドは新しいエクスポート機能を提供していません", - "app.connection_package.error.file_password_required": "ファイル保護パスワードは空にできません", - "app.connection_package.error.import_capability_unavailable": "インポートに失敗しました: 現在のバックエンドは新しいインポート機能を提供していません", - "app.connection_package.error.import_no_connections": "インポートに失敗しました: バックエンドが接続リストを返しませんでした", - "app.connection_package.error.missing_import_payload": "インポートに失敗しました: インポートする復元パッケージの内容が見つかりません", - "app.connection_package.error.refresh_failed_no_connections": "インポートは成功しましたが、接続リストの更新に失敗しました: バックエンドが接続リストを返しませんでした", - "app.connection_package.error.restore_password_required": "復元パッケージのパスワードは空にできません", - "app.connection_package.message.export_failed": "エクスポートに失敗しました", - "app.connection_package.message.export_succeeded": "エクスポートしました", - "app.connection_package.message.import_failed": "インポートに失敗しました", - "app.connection_package.message.import_failed_with_error": "インポートに失敗しました: {{error}}", - "app.connection_package.message.imported_connections": "{{count}} 件の接続をインポートしました", - "app.connection_package.message.imported_with_missing_passwords": "{{count}} 件の接続をインポートしました。一部の接続にはパスワードが含まれていません。該当する接続を編集し、パスワードを入力して保存してください。", - "app.connection.message.editable_load_failed": "保存済み接続の詳細を読み込めませんでした。代わりにマスク済み設定を開きます。", - "app.connection.message.editable_load_failed_with_detail": "保存済み接続の詳細を読み込めませんでした: {{detail}}。代わりにマスク済み設定を開きます。", - "app.connection_package.message.no_connections_to_export": "エクスポートできる接続がありません", - "app.connection_package.message.unsupported_file_format": "ファイル形式エラー: GoNavi 復元パッケージ、履歴 JSON 接続配列、または MySQL Workbench XML のみ対応しています", - "app.browser_mock.export_sql_unsupported": "ブラウザ mock は SQL ファイルのエクスポートをサポートしていません", - "app.browser_mock.import_connection_package_unsupported": "ブラウザ mock はリカバリーパッケージのインポートをサポートしていません。履歴 JSON 接続配列のみ対応しています", - "app.browser_mock.export_connection_package_unsupported": "ブラウザ mock はリカバリーパッケージのエクスポートをサポートしていません", - "app.browser_mock.mcp_http.not_running": "GoNavi MCP HTTP サービスは起動していません", - "app.browser_mock.mcp_http.started": "GoNavi MCP HTTP サービスを起動しました", - "app.browser_mock.mcp_http.stopped": "GoNavi MCP HTTP サービスを停止しました", - "app.browser_mock.mcp_server.command_required": "MCP コマンドは空にできません", - "app.browser_mock.mcp_server.test_success": "MCP mock テストに成功しました", - "app.browser_mock.mcp_tool.unavailable": "ブラウザ mock は実際の MCP サービスに接続されていません", - "app.browser_mock.mcp_client.claude_code.installed": "Claude Code のユーザーレベル MCP 設定を書き込みました。Claude CLI を再起動すると、/mcp の User MCPs に GoNavi が表示されます。", - "app.browser_mock.mcp_client.claude_code.not_detected": "Claude Code のユーザーレベル GoNavi MCP 設定は検出されませんでした", - "app.browser_mock.mcp_client.codex.installed": "Codex のユーザーレベル MCP 設定を書き込みました。Codex CLI またはデスクトップアプリを再起動すると GoNavi が表示されます。", - "app.browser_mock.mcp_client.codex.path_mismatch": "Codex 内に GoNavi MCP レコードが検出されましたが、現在の GoNavi インストールパスと一致しません。更新を推奨します。", - "app.browser_mock.provider.test_failed_detail": "接続テストに失敗しました: {{detail}}", - "app.browser_mock.provider.test_success": "エンドポイント接続テストに成功しました", - "app.update.action.hide_to_background": "バックグラウンドに隠す", - "app.update.action.install_update": "更新をインストール", - "app.update.action.open_install_directory": "インストールディレクトリを開く", - "app.update.backend.error.check_failed": "更新確認に失敗しました: {{detail}}", - "app.update.backend.error.check_http_status": "更新確認に失敗しました: HTTP {{status}}", - "app.update.backend.error.download_failed": "更新のダウンロードに失敗しました: {{detail}}", - "app.update.backend.error.install_unsupported": "このプラットフォームでは更新のインストールに対応していません: {{platform}}", - "app.update.backend.error.latest_version_unparseable": "最新バージョン番号を解析できません", - "app.update.backend.error.online_update_unsupported": "このプラットフォームではオンライン更新に対応していません: {{platform}}", - "app.update.backend.error.package_download_http_failed": "更新パッケージのダウンロードに失敗しました: HTTP {{status}}", - "app.update.backend.error.package_file_busy": "ファイルが使用中のため、更新のダウンロードに失敗しました: {{detail}}", - "app.update.backend.error.release_version_unparseable": "リリースバージョン番号を解析できません", - "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS に現在のプラットフォーム用更新パッケージが含まれていません", - "app.update.backend.error.sha256sums_download_failed": "SHA256SUMS のダウンロードに失敗しました: HTTP {{status}}", - "app.update.backend.error.sha256sums_missing": "Release に SHA256SUMS が提供されていません", - "app.update.backend.error.update_package_not_found": "更新パッケージが見つかりません: {{name}}", - "app.update.backend.message.app_directory_unavailable": "アプリディレクトリにアクセスできません: {{path}}", - "app.update.backend.message.app_directory_unresolved_download": "現在のアプリディレクトリを特定できないため、更新をダウンロードできません", - "app.update.backend.message.check_first": "先に更新を確認してください", - "app.update.backend.message.checksum_failed": "更新パッケージのチェックサム検証に失敗しました。もう一度お試しください。", - "app.update.backend.message.checksum_missing": "更新パッケージのチェックサムがありません (SHA256SUMS)", - "app.update.backend.message.create_workspace_failed": "アプリディレクトリ内に更新作業ディレクトリを作成できません: {{path}}", - "app.update.backend.message.download_in_progress": "更新パッケージをダウンロード中です。後でもう一度お試しください。", - "app.update.backend.message.install_launch_failed": "更新インストーラーを開始できませんでした: {{detail}}", - "app.update.backend.message.install_launch_failed_with_log": "更新インストーラーを開始できませんでした: {{detail}} (更新ログ: {{path}})", - "app.update.backend.message.install_started": "更新のインストールを開始しました", - "app.update.backend.message.install_started_with_log": "更新のインストールを開始しました。ログパス: {{path}}", - "app.update.backend.message.latest": "すでに最新バージョンです", - "app.update.backend.message.no_downloaded_package": "ダウンロード済みの更新パッケージが見つかりません", - "app.update.backend.message.no_update_package": "利用可能な更新パッケージがありません", - "app.update.backend.message.open_directory_failed": "更新ディレクトリを開けませんでした: {{detail}}", - "app.update.backend.message.open_directory_unsupported": "このプラットフォームではディレクトリを開けません: {{platform}}", - "app.update.backend.message.opened_install_directory": "インストールディレクトリを開きました: {{path}}", - "app.update.backend.message.package_already_downloaded": "更新パッケージはすでにダウンロード済みです", - "app.update.backend.message.package_directory_unavailable": "更新ディレクトリが存在しないか、アクセスできません", - "app.update.backend.message.package_directory_unresolved": "更新ディレクトリを解決できません", - "app.update.backend.message.package_downloaded": "更新パッケージのダウンロードが完了しました", - "app.update.backend.message.package_path_empty": "更新パッケージのパスが空です", - "app.update.backend.message.update_found": "新しいバージョンが見つかりました: {{version}}", - "app.update.download_title": "更新をダウンロード", - "app.update.download_title_with_version": "更新をダウンロード {{version}}", - "app.update.message.check_failed": "更新確認に失敗しました: {{error}}", - "app.update.message.download_completed": "更新のダウンロードが完了しました", - "app.update.message.download_completed_with_path": "更新のダウンロードが完了しました。パッケージパス: {{path}}", - "app.update.message.download_failed": "更新のダウンロードに失敗しました: {{error}}", - "app.update.message.install_failed": "更新のインストールに失敗しました: {{error}}", - "app.update.message.open_install_directory_failed": "インストールディレクトリを開けませんでした: {{error}}", - "app.update.message.opened_install_directory": "インストールディレクトリを開きました。手動で置き換えを完了してください。", - "app.update.message.package_ready": "更新パッケージの準備ができました ({{version}})", - "app.update.message.package_ready_with_path": "更新パッケージの準備ができました ({{version}})、パス: {{path}}", - "app.update.message.update_found": "新しいバージョンが見つかりました: {{version}}", - "app.update.status.available_downloaded": "新しいバージョン {{version}} が見つかりました (ダウンロード済み。「ダウンロード状況」をクリックしてインストールしてください)", - "app.update.status.available_not_downloaded": "新しいバージョン {{version}} が見つかりました (未ダウンロード)", - "app.update.status.check_failed": "更新確認に失敗しました: {{error}}", - "app.update.status.checking": "更新を確認しています...", - "app.update.status.latest": "現在のバージョンは最新です ({{version}})", - "app.update.status.not_checked": "未確認", - "connection.delete": "接続を削除", - "connection.edit": "接続を編集", - "connection.new": "新規接続", - "connection.test": "接続をテスト", - "connection.unnamed": "名前なしの接続", - "database.unnamed": "名前なしのデータベース", - "database.label": "データベース", - "connection.copy_suffix": " - コピー", - "query.format": "SQL を整形", - "query.new": "新規クエリ", - "query.run": "実行", - "query.save": "クエリを保存", - "saved_query.default_name": "クエリ {{index}}", - "query.stop": "停止", - "message_publish_modal.title": "メッセージ送信テスト", - "message_publish_modal.title_with_connection": "メッセージ送信テスト · {{connectionName}}", - "message_publish_modal.action.send": "送信", - "message_publish_modal.error.build_command_failed": "送信コマンドの作成に失敗しました", - "message_publish_modal.error.send_failed_detail": "送信に失敗しました: {{detail}}", - "message_publish_modal.error.unknown_error": "不明なエラー", - "message_publish_modal.field.exchange.label": "Exchange(任意)", - "message_publish_modal.field.exchange.extra": "空のままにすると既定の exchange を使用します。カスタム exchange を入力する場合は、対象 Queue に binding があることを確認してください。", - "message_publish_modal.field.exchange.placeholder": "例:events.topic", - "message_publish_modal.field.routing_key.label": "Routing Key(任意)", - "message_publish_modal.field.routing_key.extra": "空のままにすると現在の Queue 名を既定で使用します。", - "message_publish_modal.field.routing_key.placeholder": "例:orders.queue", - "message_publish_modal.field.qos.extra": "0 は at most once、1 は at least once、2 は exactly once です。", - "message_publish_modal.field.retain.label": "Retain メッセージ", - "message_publish_modal.field.tag.label": "Tag(任意)", - "message_publish_modal.field.tag.extra": "空のままにすると Tag によるフィルタや書き込みを行いません。", - "message_publish_modal.field.delay_level.label": "Delay Level(任意)", - "message_publish_modal.field.delay_level.extra": "RocketMQ は固定の遅延レベルを使用します。0 は即時送信です。", - "message_publish_modal.field.body_mode.label": "メッセージ本文タイプ", - "message_publish_modal.field.body.label": "メッセージ本文", - "message_publish_modal.field.body.required": "メッセージ本文を入力してください", - "message_publish_modal.field.body.extra": "JSON モードでは有効な JSON が必要です。テキストモードでは内容をそのまま送信します。", - "message_publish_modal.field.body.placeholder": "メッセージ本文を入力してください", - "message_publish_modal.field.headers.label": "Headers(任意)", - "message_publish_modal.field.headers.extra": "JSON オブジェクトである必要があります。例:{{example}}。", - "message_publish_modal.field.properties.label": "Properties(任意)", - "message_publish_modal.field.properties.extra": "JSON オブジェクトである必要があります。例:{{example}}。", - "message_publish_modal.option.no_delay": "遅延なし", - "message_publish_modal.option.text": "テキスト", - "message_publish_modal.footer.success_prefix": "送信に成功すると", - "message_publish_modal.footer.success_suffix": " が返り、このテストメッセージが送信されたか確認できます。", - "message_publish.field.body": "メッセージ本文", - "message_publish.field.message_key": "メッセージ Key", - "message_publish.error.destination_required": "送信先 Topic / Queue を入力してください", - "message_publish.error.required_field": "{{field}}を入力してください", - "message_publish.error.invalid_json_detail": "{{field}} は有効な JSON ではありません:{{detail}}", - "message_publish.error.json_object_required": "{{field}} は JSON オブジェクトである必要があります", - "message_publish.error.mqtt_wildcard_topic": "MQTT 送信 Topic に + または # ワイルドカードは使用できません", - "message_publish.error.unsupported_type": "現在のデータソースはテストメッセージ送信に対応していません:{{type}}", - "message_publish.presentation.rabbitmq.destination_placeholder": "例:orders.queue", - "message_publish.presentation.rabbitmq.destination_required": "Queue を入力してください", - "message_publish.presentation.rabbitmq.alert": "このフォームは RabbitMQ publish JSON コマンドを自動生成し、Management API 経由でテスト送信します。", - "message_publish.presentation.rabbitmq.success_hint": "Exchange が空の場合は既定の exchange を使用し、Queue 名を routing key として使用します。", - "message_publish.presentation.rocketmq.destination_placeholder": "例:orders.events", - "message_publish.presentation.topic_required": "Topic を入力してください", - "message_publish.presentation.rocketmq.alert": "このフォームは RocketMQ publish JSON コマンドを自動生成し、NameServer/Broker 経由でテスト送信します。", - "message_publish.presentation.rocketmq.success_hint": "Tag、Keys、Delay Level、Properties は RocketMQ メッセージ属性に一緒に書き込まれます。", - "message_publish.presentation.keys_label": "メッセージ Keys(任意)", - "message_publish.presentation.rocketmq.key_placeholder": "複数の Key をカンマ区切りで入力できます", - "message_publish.presentation.rocketmq.tag_placeholder": "例:TagA", - "message_publish.presentation.mqtt.destination_placeholder": "例:devices/device-001/telemetry", - "message_publish.presentation.mqtt.alert": "このフォームは MQTT publish JSON コマンドを自動生成し、broker 経由で直接テスト送信します。", - "message_publish.presentation.mqtt.success_hint": "QoS と retain は個別に指定できます。未入力の場合は現在の接続の既定値を使用します。", - "message_publish.presentation.kafka.destination_placeholder": "例:orders.events", - "message_publish.presentation.kafka.alert": "このフォームは Kafka publish JSON コマンドを自動生成し、バックエンドを直接呼び出してテスト送信します。", - "message_publish.presentation.kafka.success_hint": "Headers は Kafka Record Headers として一緒に送信されます。", - "message_publish.presentation.key_label": "メッセージ Key(任意)", - "message_publish.presentation.kafka.key_placeholder": "空でもかまいません。JSON モードでは有効な JSON を 1 行で入力してください。", - "connection_modal.action.browse": "参照...", - "connection_modal.action.disable": "無効化", - "connection_modal.action.discover_members": "メンバーを自動検出", - "connection_modal.action.enable_and_prefer": "有効化して優先", - "connection_modal.badge.current_editing": "編集中", - "connection_modal.badge.preferred": "優先", - "connection_modal.field.additional_hosts": "追加ホスト", - "connection_modal.field.additional_srv_hosts_optional": "追加 SRV ホスト(任意)", - "connection_modal.field.auth_source": "認証データベース (authSource)", - "connection_modal.field.cluster_additional_hosts": "クラスタ追加ノード", - "connection_modal.field.connection_timeout_seconds": "接続タイムアウト(秒)", - "connection_modal.field.connection_timeout_seconds_ascii": "接続タイムアウト(秒)", - "connection_modal.field.default_database_optional": "既定の接続データベース(任意)", - "connection_modal.field.display_databases_optional": "表示するデータベース(任意)", - "connection_modal.field.file_path_absolute": "ファイルパス(絶対パス)", - "connection_modal.field.host_address": "ホストアドレス", - "connection_modal.field.password_optional": "パスワード(任意)", - "connection_modal.field.port": "ポート", - "connection_modal.field.port_plain": "ポート", - "connection_modal.field.private_key_path_optional": "秘密鍵パス(任意)", - "connection_modal.field.proxy_host": "プロキシホスト", - "connection_modal.field.proxy_password_optional": "プロキシパスワード(任意)", - "connection_modal.field.proxy_type": "プロキシ種別", - "connection_modal.field.proxy_username_optional": "プロキシユーザー名(任意)", - "connection_modal.field.replica_hosts": "レプリカホスト一覧", - "connection_modal.field.replica_password_optional": "レプリカパスワード(任意)", - "connection_modal.field.replica_set_optional": "Replica Set(任意)", - "connection_modal.field.replica_set_password_optional": "Replica Set パスワード(任意)", - "connection_modal.field.replica_set_username_optional": "Replica Set ユーザー名(任意)", - "connection_modal.field.replica_username_optional": "レプリカユーザー名(任意)", - "connection_modal.field.save_password": "パスワードを保存", - "connection_modal.field.service_name": "サービス名", - "connection_modal.field.defaultDatabase.placeholder": "例: appdb", - "connection_modal.field.serviceName.placeholder": "例: ORCLPDB1", - "connection_modal.field.clickHouseProtocol.auto": "自動", - "connection_modal.field.oceanBaseProtocol.label": "OceanBase プロトコル", - "connection_modal.field.oceanBaseProtocol.help.primary": "MySQL テナントには MySQL、Oracle テナントには Oracle を選択します。GoNavi はポートに応じて自動選択します。OB MySQL wire ポートでは OBClient capability injection(Navicat と同じ経路)を使い、OBProxy Oracle listener ポートでは標準 TNS を使います。", - "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "Oracle テナント接続で「Error 1235」または OBClient ハンドシェイク失敗が発生する場合は、「接続パラメータ」欄で {{attributes}} を使って GoNavi が既定で注入する OBClient capability を上書きできます。", - "connection_modal.field.ssh_host": "SSH ホスト", - "connection_modal.field.ssh_password": "SSH パスワード", - "connection_modal.field.ssh_user": "SSH ユーザー", - "connection_modal.field.ssl_cert_path": "SSL 証明書パス", - "connection_modal.field.ssl_key_path": "SSL 秘密鍵パス", - "connection_modal.field.tunnel_host": "HTTP Tunnel ホスト", - "connection_modal.field.tunnel_password_optional": "HTTP Tunnel パスワード(任意)", - "connection_modal.field.tunnel_username_optional": "HTTP Tunnel ユーザー名(任意)", - "connection_modal.field.username": "ユーザー名", - "connection_modal.field.username.optional_placeholder": "認証を有効にしていない場合は空のままにできます", - "connection_modal.help.additional_hosts": "任意の MongoDB メンバーをカンマ、セミコロン、空白で区切って入力します。", - "connection_modal.help.additional_srv_hosts": "MongoDB 検出に使う任意の追加 SRV ホストです。", - "connection_modal.help.connection_timeout": "接続テストとメタデータ読み込みに適用されます。範囲は 1-300 秒です。", - "connection_modal.help.custom_driver": "対応済み: mysql, postgres, sqlite, oracle, dm, kingbase。エイリアス: postgresql/pgx、dm8、kingbase8/kingbasees/kingbasev8。現在 JDBC Jar によるドライバー拡張には対応していません。", - "connection_modal.help.default_database": "空のままにするとサーバーの既定データベースを使用します。", - "connection_modal.help.oracle_service_name": "Oracle サービス名。例: ORCLPDB1。", - "connection_modal.help.private_key_path": "SSH 認証に秘密鍵を使用します。鍵が暗号化されていない場合はパスワードを空にできます。", - "connection_modal.help.redis_cluster_hosts": "追加 Redis Cluster ノードをカンマ、セミコロン、空白で区切って入力します。", - "connection_modal.help.replica_hosts": "レプリカホストは host:port 形式で、カンマ、セミコロン、空白で区切ります。", - "connection_modal.help.select_after_test": "先に接続テストを実行して選択可能なデータベースを読み込みます。", - "connection_modal.jvm.access_mode_description": "この JVM 接続で使用できる接続モードと優先モードを選択します。", - "connection_modal.jvm.access_mode_title": "接続モード", - "connection_modal.jvm.agent_api_key_optional": "Agent API キー(任意)", - "connection_modal.jvm.agent_description": "直接ネットワーク接続が制限される場合に GoNavi Agent 経由で接続します。", - "connection_modal.jvm.agent_help": "GoNavi Agent サービスのベース URL。", - "connection_modal.jvm.agent_url": "Agent URL", - "connection_modal.jvm.diagnostic.agent_bridge_description": "GoNavi Agent Bridge の診断 Endpoint を使用します。", - "connection_modal.jvm.diagnostic.arthas_tunnel_description": "Arthas Tunnel で対象 JVM に到達します。", - "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Arthas Tunnel サーバーのベース URL。", - "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", - "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", - "connection_modal.jvm.diagnostic.arthas_tunnel_url": "Arthas Tunnel URL", - "connection_modal.jvm.diagnostic.bridge_help": "GoNavi 診断ブリッジのベース URL。", - "connection_modal.jvm.diagnostic.bridge_url": "診断ブリッジ URL", - "connection_modal.jvm.diagnostic.mutating_commands": "変更系コマンド", - "connection_modal.jvm.diagnostic.mutating_commands_description": "実行時状態を変更する可能性のあるコマンドを許可します。管理された環境でのみ使用してください。", - "connection_modal.jvm.diagnostic.observe_commands": "観察系コマンド", - "connection_modal.jvm.diagnostic.observe_commands_description": "dashboard、thread、JVM 情報などの読み取り専用コマンドを許可します。", - "connection_modal.jvm.diagnostic.target_agent_id": "対象 Agent ID", - "connection_modal.jvm.diagnostic.target_agent_id_help": "Arthas Tunnel に登録された Agent ID。", - "connection_modal.jvm.diagnostic.target_id": "対象 ID", - "connection_modal.jvm.diagnostic.target_id_help": "診断ブリッジが解釈する対象 ID です。ブリッジが既定対象を選ぶ場合は空にします。", - "connection_modal.jvm.diagnostic.trace_commands": "トレース系コマンド", - "connection_modal.jvm.diagnostic.trace_commands_description": "実行時負荷を増やす trace や watch などのコマンドを許可します。", - "connection_modal.jvm.diagnostic_api_key_optional": "診断 API キー(任意)", - "connection_modal.jvm.diagnostic_description": "JVM トラブルシューティング用の任意診断コマンドを有効にします。", - "connection_modal.jvm.diagnostic_disabled_hint": "診断拡張は無効です。実行時調査が必要な場合のみ有効にしてください。", - "connection_modal.jvm.diagnostic_timeout_seconds": "診断タイムアウト(秒)", - "connection_modal.jvm.diagnostic_title": "診断拡張", - "connection_modal.jvm.diagnostic_transport": "診断トランスポート", - "connection_modal.jvm.endpoint_api_key_optional": "Endpoint API キー(任意)", - "connection_modal.jvm.endpoint_description": "直接 JMX ではなくサービスが公開する Endpoint に接続します。", - "connection_modal.jvm.endpoint_help": "JVM 管理 Endpoint のベース URL。", - "connection_modal.jvm.endpoint_url": "Endpoint URL", - "connection_modal.jvm.environment": "環境", - "connection_modal.jvm.environment.dev": "開発", - "connection_modal.jvm.environment.dev_description": "リスクの低いテスト環境です。", - "connection_modal.jvm.environment.prod": "本番", - "connection_modal.jvm.environment.prod_description": "本番環境です。読み取り専用を優先することを推奨します。", - "connection_modal.jvm.environment.uat": "UAT", - "connection_modal.jvm.environment.uat_description": "リリース前の検証環境です。", - "connection_modal.jvm.jmx_description": "JMX でホスト、ポート、任意の認証情報を使って接続します。", - "connection_modal.jvm.jmx_host_override_optional": "JMX ホスト上書き(任意)", - "connection_modal.jvm.jmx_password_optional": "JMX パスワード(任意)", - "connection_modal.jvm.jmx_port": "JMX ポート", - "connection_modal.jvm.jmx_username_optional": "JMX ユーザー名(任意)", - "connection_modal.jvm.mode.agent_description": "ファイアウォールや NAT 配下の環境では GoNavi Agent 経由でアクセスします。", - "connection_modal.jvm.mode.endpoint_description": "対象サービスが公開する HTTP Endpoint を使用します。", - "connection_modal.jvm.mode.jmx_description": "標準の JMX リモートアクセスを使用します。", - "connection_modal.jvm.preferred_mode_hint": "現在の優先モード: {{mode}}", - "connection_modal.jvm.read_only_first": "読み取り専用操作を優先", - "connection_modal.jvm.security_policy": "セキュリティポリシー", - "connection_modal.message.srv_with_ssh_dns_warning": "SRV と SSH Tunnel を同時に使う場合、ローカル DNS 解決に依存することがあります。解決できない場合は標準ホストを使用してください。", - "connection_modal.messageQueue.kafka.defaultTopic.label": "既定 Topic(任意)", - "connection_modal.messageQueue.kafka.defaultTopic.help": "空の場合は SQL 内で Topic を明示する必要があります。設定すると SHOW、CONSUME、SELECT で直接プレビューできます。", - "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "例:orders.events", - "connection_modal.messageQueue.rocketmq.defaultTopic.label": "既定 Topic(任意)", - "connection_modal.messageQueue.rocketmq.defaultTopic.help": "空の場合は SQL 内で Topic を明示する必要があります。接続パラメーターには groupId、namespace、tag、pullBatchSize、startOffset を追加できます。", - "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "例:orders.events", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "既定 Topic / Filter(任意)", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "空の場合は SQL 内で Topic を明示する必要があります。設定すると SHOW、CONSUME、SELECT で直接プレビューできます。/、+、# を使用できます。", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "例:devices/+/telemetry", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "既定 Virtual Host(任意)", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "空の場合は既定で / を使用します。設定すると、クエリエディターは現在の vhost を Queue 参照とテスト送信のコンテキストとして使用します。", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "例:/ または orders-vhost", - "connection_modal.messageQueue.topology.cluster.label": "クラスターモード", - "connection_modal.messageQueue.kafka.topology.single.label": "単一 Broker", - "connection_modal.messageQueue.kafka.topology.single.description": "ローカルまたは単純な環境向けに、bootstrap broker を 1 つだけ設定します。", - "connection_modal.messageQueue.kafka.topology.cluster.description": "複数の bootstrap broker を設定し、検出とフェイルオーバーの成功率を高めます。", - "connection_modal.messageQueue.rocketmq.topology.single.label": "単一 NameServer", - "connection_modal.messageQueue.rocketmq.topology.single.description": "ローカルまたは単純な環境向けに、NameServer を 1 つだけ設定します。", - "connection_modal.messageQueue.rocketmq.topology.cluster.description": "複数の NameServer を設定し、ルート検出とフェイルオーバーの成功率を高めます。", - "connection_modal.messageQueue.mqtt.topology.single.label": "単一 Broker", - "connection_modal.messageQueue.mqtt.topology.single.description": "ローカルまたは単純な環境向けに、broker を 1 つだけ設定します。", - "connection_modal.messageQueue.mqtt.topology.cluster.description": "複数の broker を設定し、接続検出とフェイルオーバーの成功率を高めます。", - "connection_modal.messageQueue.kafka.extraBrokers.label": "追加 Broker アドレス", - "connection_modal.messageQueue.kafka.extraBrokers.help": "複数の broker アドレスを host:port 形式で入力し、Enter で確定できます。", - "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "例:10.10.0.12:9092、10.10.0.13:9092", - "connection_modal.messageQueue.rocketmq.extraNameServers.label": "追加 NameServer アドレス", - "connection_modal.messageQueue.rocketmq.extraNameServers.help": "複数の NameServer アドレスを host:port 形式で入力し、Enter で確定できます。", - "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "例:10.10.0.12:9876、10.10.0.13:9876", - "connection_modal.messageQueue.mqtt.extraBrokers.label": "追加 Broker アドレス", - "connection_modal.messageQueue.mqtt.extraBrokers.help": "複数の broker アドレスを host:port 形式で入力し、Enter で確定できます。", - "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "例:10.10.0.12:1883、10.10.0.13:1883", - "connection_modal.redis.topology.single.label": "スタンドアロンモード", - "connection_modal.redis.topology.single.description": "1 つの Redis ノードに接続します。", - "connection_modal.redis.topology.cluster.label": "クラスターモード", - "connection_modal.redis.topology.cluster.description": "Redis Cluster として複数のシードノードを設定します。", - "connection_modal.redis.topology.sentinel.label": "Sentinel モード", - "connection_modal.redis.topology.sentinel.description": "Sentinel でプライマリノードを検出し、主従高可用性に適用します。", - "connection_modal.redis.hosts.sentinel.label": "追加 Sentinel ノードアドレス", - "connection_modal.redis.hosts.sentinel.help": "上のホストアドレスを最初の Sentinel として使用します。ここには他の Sentinel ノードを host:port 形式で入力します。", - "connection_modal.redis.hosts.sentinel.placeholder": "例:10.10.0.12:26379、10.10.0.13:26379", - "connection_modal.redis.hosts.cluster.label": "追加クラスターノードアドレス", - "connection_modal.redis.hosts.cluster.help": "上のホストアドレスを主ノードとして使用します。ここには他のシードノードを host:port 形式で入力します。", - "connection_modal.redis.hosts.cluster.placeholder": "例:10.10.0.12:6379、10.10.0.13:6379", - "connection_modal.redis.sentinel.master.label": "Sentinel master 名", - "connection_modal.redis.sentinel.master.help": "Sentinel 設定の monitor 名を入力します。例:mymaster。", - "connection_modal.redis.sentinel.master.required": "Sentinel master 名を入力してください", - "connection_modal.redis.sentinel.master.placeholder": "例:mymaster", - "connection_modal.redis.credentials.primary.label": "パスワード (任意)", - "connection_modal.redis.credentials.primary.placeholder.empty": "requirepass が設定されている場合の Redis パスワード", - "connection_modal.redis.credentials.primary.placeholder.retained": "保存済み Redis パスワード", - "connection_modal.redis.credentials.sentinelUser.label": "Sentinel ユーザー名(任意)", - "connection_modal.redis.credentials.sentinelUser.placeholder": "Sentinel が ACL ユーザー名を使わない場合は空のままにします", - "connection_modal.redis.credentials.sentinelPassword.label": "Sentinel パスワード(任意)", - "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Sentinel 自身の認証パスワード。空の場合は送信しません", - "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "保存済み Sentinel パスワード", - "connection_modal.redis.credentials.sentinelPassword.clear": "保存済み Sentinel パスワードをクリア", - "connection_modal.redis.credentials.sentinelPassword.description": "現在 Sentinel パスワードが保存されています。空のままなら継続使用し、新しい値を入力すると置き換えます。", - "connection_modal.redis.databaseScope.label": "表示するデータベース (空ならすべて表示)", - "connection_modal.redis.databaseScope.help": "接続テスト成功後に選択できます", - "connection_modal.redis.databaseScope.placeholder": "表示するデータベースを選択", - "connection_modal.mongodb.auth.auto": "自動", - "connection_modal.mongodb.auth.auto_description": "ドライバーに認証メカニズムを選択させます。", - "connection_modal.mongodb.auth.aws_iam_description": "AWS IAM 認証を使用します。AWS IAM 認証情報は実行環境に配置してください。", - "connection_modal.mongodb.auth.none": "認証なし", - "connection_modal.mongodb.auth.none_description": "MongoDB 認証なしで接続します。", - "connection_modal.mongodb.auth.scram_sha1_description": "SCRAM-SHA-1 認証を使用します。", - "connection_modal.mongodb.auth.scram_sha256_description": "SCRAM-SHA-256 認証を使用します。", - "connection_modal.mongodb.auth_mechanism": "認証メカニズム", - "connection_modal.mongodb.topology.single.label": "スタンドアロンモード", - "connection_modal.mongodb.topology.replica.label": "レプリカセット / 複数ノード", - "connection_modal.mongodb.discovery.standard.label": "標準アドレス", - "connection_modal.mongodb.discovery.standard.description": "host:port で直接接続するか、レプリカセットのノード一覧を使用します。", - "connection_modal.mongodb.discovery.srv.label": "SRV アドレス", - "connection_modal.mongodb.discovery.srv.description": "mongodb+srv を使用し、DNS で対象ノードを検出します。", - "connection_modal.mongodb.discovery.current": "現在", - "connection_modal.mongodb.discovery.srv_ssh_warning": "SRV と SSH Tunnel を同時に有効にすると、ローカル DNS 解決に依存する場合があります。", - "connection_modal.mongodb.replica.hosts.srv.label": "追加 SRV ホスト(任意)", - "connection_modal.mongodb.replica.hosts.srv.help": "複数の候補ホスト名を host 形式で入力できます。空の場合は上のホストのみを使用します。", - "connection_modal.mongodb.replica.hosts.srv.placeholder": "例:cluster-a.example.com、cluster-b.example.com", - "connection_modal.mongodb.replica.hosts.standard.label": "追加ノードアドレス", - "connection_modal.mongodb.replica.hosts.standard.help": "複数のノードアドレスを host:port 形式で入力し、Enter で確定できます。", - "connection_modal.mongodb.replica.hosts.standard.placeholder": "例:10.10.0.12:27017、10.10.0.13:27017", - "connection_modal.mongodb.replica.set.label": "レプリカセット名(任意)", - "connection_modal.mongodb.replica.set.placeholder": "例:rs0", - "connection_modal.mongodb.replica.user.label": "レプリカセットユーザー名(任意)", - "connection_modal.mongodb.replica.user.placeholder": "空の場合はメインユーザー名を再利用します", - "connection_modal.mongodb.replica.password.label": "レプリカセットパスワード(任意)", - "connection_modal.mongodb.replica.password.placeholder.empty": "空の場合はメインパスワードを再利用します", - "connection_modal.mongodb.replica.password.placeholder.retained": "保存済みレプリカセットパスワード", - "connection_modal.mongodb.replica.password.clear": "保存済みレプリカセットパスワードをクリア", - "connection_modal.mongodb.replica.password.description": "現在レプリカセットパスワードが保存されています。空のままなら継続使用し、新しい値を入力すると置き換えます。", - "connection_modal.mongodb.members.role": "ロール", - "connection_modal.mongodb.members.health": "ヘルス", - "connection_modal.mongodb.members.health.ok": "正常", - "connection_modal.mongodb.members.health.error": "異常", - "connection_modal.mongodb.policy.auth_source.label": "認証 DB (authSource)", - "connection_modal.mongodb.policy.auth_source.placeholder": "既定では database または admin を使用", - "connection_modal.mongodb.read_preference": "readPreference", - "connection_modal.mongodb.read_preference.nearest": "最も近いメンバーへ読み取りを送ります。", - "connection_modal.mongodb.read_preference.primary": "primary からのみ読み取ります。", - "connection_modal.mongodb.read_preference.primary_preferred": "primary を優先し、必要に応じて secondary にフォールバックします。", - "connection_modal.mongodb.read_preference.secondary": "secondary からのみ読み取ります。", - "connection_modal.mongodb.read_preference.secondary_preferred": "secondary を優先し、必要に応じて primary にフォールバックします。", - "connection_modal.mongodb.srv_address": "SRV アドレス", - "connection_modal.mongodb.srv_address_description": "MongoDB SRV レコードでホストを検出します。", - "connection_modal.mongodb.standard_address": "標準アドレス", - "connection_modal.mongodb.standard_address_description": "ホスト、ポート、任意のメンバー一覧を使用します。", - "connection_modal.network.http_tunnel": "HTTP Tunnel", - "connection_modal.network.http_tunnel_description": "HTTP Tunnel 経由でデータベース通信を転送します。", - "connection_modal.network.http_tunnel_disabled_hint": "HTTP Tunnel を有効にすると Tunnel ホスト、ポート、認証情報を設定できます。", - "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel は SSH Tunnel またはプロキシと同時に使用できません。", - "connection_modal.network.http_tunnel_panel_description": "この接続の HTTP Tunnel ゲートウェイを設定します。", - "connection_modal.network.proxy": "プロキシ", - "connection_modal.network.proxy_disabled_hint": "プロキシを有効にすると、この接続は SOCKS5 または HTTP CONNECT 経由で転送されます。", - "connection_modal.network.proxy_panel_description": "この接続専用のプロキシ設定を行います。", - "connection_modal.network.proxy_type.http_description": "HTTP CONNECT プロキシを使用します。", - "connection_modal.network.proxy_type.socks5_description": "SOCKS5 プロキシを使用します。", - "connection_modal.network.ssh_disabled_hint": "SSH Tunnel を有効にすると踏み台ホスト経由で接続できます。", - "connection_modal.network.ssh_panel_description": "SSH Tunnel のホスト、認証情報、任意の秘密鍵を設定します。", - "connection_modal.network.ssh_tunnel": "SSH Tunnel", - "connection_modal.network.ssh_tunnel_description": "データベースへ到達する前に SSH Tunnel 経由で接続します。", - "connection_modal.network.ssl_description": "SSL/TLS でデータベース接続を暗号化します。", - "connection_modal.network.ssl_tls": "SSL/TLS", - "connection_modal.network.ssl_disabled_hint": "SSL/TLS を有効にすると証明書ポリシーを設定できます。", - "connection_modal.network.ssl_mode": "SSL モード", - "connection_modal.network.ssl_mode.preferred_description": "まず SSL を試し、サーバーが暗号化を要求しない場合はフォールバックします。", - "connection_modal.network.ssl_mode.required_description": "SSL を必須にし、暗号化接続を確立できない場合は失敗します。", - "connection_modal.network.ssl_mode.skip_verify_description": "SSL を使用しますが証明書検証をスキップします。テストまたは自己署名証明書でのみ使用してください。", - "connection_modal.network.ssl_panel_description": "この接続の SSL/TLS ポリシーを設定します。", - "connection_modal.placeholder.absolute_path": "/absolute/path/to/file", - "connection_modal.placeholder.agent_api_key": "任意の Agent API キー", - "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", - "connection_modal.placeholder.custom_dsn_example": "例: ドライバー固有の DSN", - "connection_modal.placeholder.default_database_or_admin": "既定データベースまたは admin", - "connection_modal.placeholder.diagnostic_api_key": "任意の診断 API キー", - "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", - "connection_modal.placeholder.diagnostic_target_id": "対象 ID", - "connection_modal.placeholder.empty_without_auth": "認証なしの場合は空にします", - "connection_modal.placeholder.endpoint_api_key": "任意の Endpoint API キー", - "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", - "connection_modal.placeholder.example_appdb": "appdb", - "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", - "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", - "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", - "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", - "connection_modal.placeholder.example_rs0": "rs0", - "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", - "connection_modal.placeholder.no_auth": "認証なし", - "connection_modal.placeholder.proxy_host": "127.0.0.1", - "connection_modal.placeholder.redis_password": "Redis パスワード", - "connection_modal.placeholder.select_databases": "表示するデータベースを選択", - "connection_modal.placeholder.select_redis_databases": "表示する Redis データベースを選択", - "connection_modal.placeholder.ssh_host": "bastion.example.com", - "connection_modal.placeholder.ssl_cert_path": "/absolute/path/client.crt", - "connection_modal.placeholder.ssl_key_path": "/absolute/path/client.key", - "connection_modal.placeholder.tunnel_host": "tunnel.example.com", - "connection_modal.placeholder.use_primary_host": "主接続のホストを使用", - "connection_modal.placeholder.use_primary_password": "主接続のパスワードを使用", - "connection_modal.placeholder.use_primary_password_short": "主パスワードを使用", - "connection_modal.placeholder.use_primary_port": "主接続のポートを使用", - "connection_modal.placeholder.use_primary_username": "主接続のユーザー名を使用", - "connection_modal.placeholder.use_primary_username_short": "主ユーザー名を使用", - "connection_modal.secret.clear_saved_mongo_replica_password": "保存済み MongoDB レプリカパスワードをクリア", - "connection_modal.secret.clear_saved_password": "保存済みパスワードをクリア", - "connection_modal.secret.clear_saved_proxy_password": "保存済みプロキシパスワードをクリア", - "connection_modal.secret.clear_saved_replica_password": "保存済みレプリカパスワードをクリア", - "connection_modal.secret.clear_saved_ssh_password": "保存済み SSH パスワードをクリア", - "connection_modal.secret.clear_saved_tunnel_password": "保存済み HTTP Tunnel パスワードをクリア", - "connection_modal.secret.error.saved_connection_missing": "現在の接続に対応する保存済みシークレットが見つかりません。パスワードを入力し直して保存してから再試行してください。", - "connection_modal.secret.error.store_unavailable": "システムのシークレットストレージは現在利用できません。システムのキーチェーンまたは資格情報マネージャーを確認してから再試行してください。", - "connection_modal.secret.saved_mongo_replica_password": "保存済み MongoDB レプリカパスワード", - "connection_modal.secret.saved_mongo_replica_password_description": "セキュアストレージに MongoDB レプリカパスワードが保存されています。保持する場合は空にします。", - "connection_modal.secret.saved_password": "保存済みパスワード", - "connection_modal.secret.saved_placeholder": "••••••(空欄のままにすると{{label}}を引き続き使用します)", - "connection_modal.secret.saved_primary_password_description": "セキュアストレージに主接続パスワードが保存されています。保持する場合は空にします。", - "connection_modal.secret.saved_proxy_password": "保存済みプロキシパスワード", - "connection_modal.secret.saved_proxy_password_description": "セキュアストレージにプロキシパスワードが保存されています。保持する場合は空にします。", - "connection_modal.secret.saved_redis_password": "保存済み Redis パスワード", - "connection_modal.secret.saved_redis_password_description": "セキュアストレージに Redis パスワードが保存されています。保持する場合は空にします。", - "connection_modal.secret.saved_replica_password": "保存済みレプリカパスワード", - "connection_modal.secret.saved_replica_password_description": "セキュアストレージにレプリカパスワードが保存されています。保持する場合は空にします。", - "connection_modal.secret.saved_ssh_password": "保存済み SSH パスワード", - "connection_modal.secret.saved_ssh_password_description": "セキュアストレージに SSH パスワードが保存されています。保持する場合は空にします。", - "connection_modal.secret.saved_tunnel_password": "保存済み HTTP Tunnel パスワード", - "connection_modal.secret.saved_tunnel_password_description": "セキュアストレージに HTTP Tunnel パスワードが保存されています。保持する場合は空にします。", - "connection_modal.section.advanced_connection": "詳細接続", - "connection_modal.section.config_sections": "設定セクション", - "connection_modal.status.disabled": "無効", - "connection_modal.status.enabled": "有効", - "connection_modal.status.healthy": "正常", - "connection_modal.status.unhealthy": "異常", - "connection_modal.switch.off": "オフ", - "connection_modal.switch.on": "オン", - "connection_modal.table.health": "ヘルス", - "connection_modal.table.role": "ロール", - "connection_modal.topology.cluster": "クラスタ", - "connection_modal.topology.mongodb_replica": "Replica Set", - "connection_modal.topology.mongodb_replica_description": "MongoDB Replica Set に接続し、必要に応じてメンバーを検出します。", - "connection_modal.topology.mongodb_single_description": "単一の MongoDB ホストに接続します。", - "connection_modal.topology.mysql_replica_description": "主接続に加えて任意のレプリカホストを使用します。", - "connection_modal.topology.mysql_single_description": "単一の MySQL 互換ノードに接続します。", - "connection_modal.topology.primary_replica": "プライマリ/レプリカ", - "connection_modal.topology.redis_cluster_description": "Redis Cluster に接続し、追加ノードを指定します。", - "connection_modal.topology.redis_single_description": "単一の Redis ノードに接続します。", - "connection_modal.topology.single": "単一ノード", - "connection_modal.validation.address_or_path_required": "ホストアドレスまたはファイルパスを入力してください", - "connection_modal.validation.agent_url_required": "Agent URL を入力してください", - "connection_modal.validation.arthas_tunnel_url_required": "Arthas Tunnel URL を入力してください", - "connection_modal.validation.dameng_ssl_cert_path_required": "Dameng SSL 証明書パスを入力してください", - "connection_modal.validation.dameng_ssl_key_path_required": "Dameng SSL 秘密鍵パスを入力してください", - "connection_modal.validation.diagnostic_bridge_url_required": "診断ブリッジ URL を入力してください", - "connection_modal.validation.diagnostic_target_required": "診断対象を入力してください", - "connection_modal.validation.diagnostic_timeout_range_1_300": "診断タイムアウトは 1 から 300 秒の間で指定してください", - "connection_modal.validation.endpoint_url_required": "Endpoint URL を入力してください", - "connection_modal.validation.jvm_access_mode_required": "少なくとも 1 つの JVM 接続モードを選択してください", - "connection_modal.validation.jvm_preferred_mode_required": "優先 JVM 接続モードを選択してください", - "connection_modal.validation.oracle_service_required": "Oracle サービス名を入力してください", - "connection_modal.validation.port_required": "ポートを入力してください", - "connection_modal.validation.proxy_host_required": "プロキシホストを入力してください", - "connection_modal.validation.proxy_port_required": "プロキシポートを入力してください", - "connection_modal.validation.ssh_host_required": "SSH ホストを入力してください", - "connection_modal.validation.ssh_port_required": "SSH ポートを入力してください", - "connection_modal.validation.ssh_user_required": "SSH ユーザーを入力してください", - "connection_modal.validation.timeout_range_1_300": "タイムアウトは 1 から 300 秒の間で指定してください", - "connection_modal.validation.tunnel_host_required": "HTTP Tunnel ホストを入力してください", - "connection_modal.validation.tunnel_port_required": "HTTP Tunnel ポートを入力してください", - "connection_modal.validation.username_required": "ユーザー名を入力してください", - "sidebar.batch_databases": "一括データベース", - "sidebar.batch_tables": "一括テーブル", - "connection_modal.ssl_hint.mysql_like": "MySQL/MariaDB/Doris/Sphinx で安全な転送が必要な場合は SSL を有効にしてください。自己署名証明書では Preferred または Skip Verify で確認できます。", - "connection_modal.ssl_hint.dameng": "Dameng で SSL を有効にするには、クライアント証明書と秘密鍵のパス(sslCertPath / sslKeyPath)が必要です。", - "connection_modal.ssl_hint.sqlserver": "SQL Server の本番環境では Required を使用し、TrustServerCertificate を無効にすることを推奨します。", - "connection_modal.ssl_hint.mongodb": "MongoDB 接続は TLS で保護できます。証明書検証で接続確認ができない場合は Skip Verify を試してください。", - "connection_modal.ssl_hint.default": "通常は Required を推奨します。Skip Verify はテスト環境または自己署名証明書の場合に限って使用してください。", - "connection_modal.secret.new_value_replaces_saved": "新しい値が入力されています。保存時に保存済みの値を置き換えます。", - "connection_modal.badge.current": "現在", - "connection_modal.message.driver_not_enabled_with_name": "{{name}} ドライバーはインストールされていないか有効化されていません。先にドライバー管理で設定してください。", - "connection_modal.driver.current": "現在", - "connection_modal.message.driver_unavailable_title": "{{name}} ドライバーは利用できません", - "connection_modal.action.open_driver_manager": "ドライバー管理を開く", - "connection_modal.action.cancel": "キャンセル", - "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", - "connection_modal.message.uri_generated": "URI を生成しました", - "connection_modal.message.uri_generate_failed": "URI の生成に失敗しました", - "connection_modal.message.uri_required": "必須項目を入力してください", - "connection_modal.message.uri_type_mismatch": "URI の種類が選択中のデータソースと一致しません", - "connection_modal.message.uri_parsed": "URI をフォームに反映しました", - "connection_modal.message.uri_parse_failed": "URI の解析に失敗しました", - "connection_modal.message.uri_empty_copy": "URI が空のためコピーできません", - "connection_modal.message.uri_copied": "URI をコピーしました", - "connection_modal.message.copy_failed": "コピーに失敗しました", - "connection_modal.message.select_ssh_key_failed": "SSH 秘密鍵の選択に失敗しました: {{error}}", - "connection_modal.error.unknown": "不明なエラー", - "connection_modal.message.select_database_file_failed": "データベースファイルの選択に失敗しました: {{error}}", - "connection_modal.message.save_backend_unavailable": "バックエンド API の準備ができていないため保存できません", - "connection_modal.message.save_updated_disconnected": "設定を保存しました(未接続)", - "connection_modal.message.save_created_disconnected": "設定を保存しました(未接続)", - "connection_modal.message.save_security_refresh_failed": "設定は保存されましたが、セキュリティ情報を更新できませんでした", - "connection_modal.message.save_failed": "接続の保存に失敗しました", - "connection_modal.message.test_requires_new_password": "テスト前に新しい接続パスワードを入力してください。", - "connection_modal.secret.blocking.redis_sentinel": "テスト接続の前に新しい Sentinel パスワードを入力するか、保存済み Sentinel パスワードのクリアを取り消してください", - "connection_modal.test.redis_database_list_timeout": "接続には成功しましたが、Redis データベース一覧の取得がタイムアウトしました(>{{seconds}} 秒)", - "connection_modal.test.redis_database_list_failure": "接続には成功しましたが、Redis データベース一覧の取得に失敗しました:{{detail}}", - "connection_modal.message.test_requires_new_ssh_password": "テスト前に新しい SSH パスワードを入力してください。", - "connection_modal.message.test_requires_new_proxy_password": "テスト前に新しいプロキシパスワードを入力してください。", - "connection_modal.message.test_requires_new_tunnel_password": "テスト前に新しい HTTP Tunnel パスワードを入力してください。", - "connection_modal.message.test_requires_new_replica_password": "テスト前に新しいレプリカパスワードを入力してください。", - "connection_modal.message.test_requires_new_mongo_replica_password": "テスト前に新しい MongoDB Replica Set パスワードを入力してください。", - "connection_modal.message.test_requires_new_mongodb_password": "テスト前に新しい MongoDB パスワードを入力してください。", - "connection_modal.message.driver_not_enabled": "ドライバーがインストールされていないか、有効化されていません", - "connection_modal.message.connection_params_incomplete": "接続パラメーターが不完全です", - "connection_modal.message.test_timeout": "操作が {{seconds}} 秒でタイムアウトしました", - "connection_modal.message.database_list_timeout": "操作が {{seconds}} 秒でタイムアウトしました", - "connection_modal.message.no_visible_schema": "表示可能なスキーマが返されませんでした", - "connection_modal.message.no_visible_databases": "表示可能なデータベースはありません", - "connection_modal.message.database_list_failed": "データベース一覧の読み込みに失敗しました: {{error}}", - "connection_modal.message.connection_rejected": "接続が拒否されました", - "connection_modal.message.required_fields_before_test": "接続をテストする前に必須項目を入力してください", - "connection_modal.message.test_failed_detail": "テストに失敗しました:{{detail}}", - "connection_modal.error.unknown_exception": "不明なエラー", - "connection_modal.message.member_discovery_failed": "MongoDB メンバーの検出に失敗しました", - "connection_modal.message.member_discovery_success": "{{count}} 件のメンバーを検出しました", - "connection_modal.message.unsupported_jvm_modes": "選択した JVM 接続モードはサポートされていません", - "connection_modal.message.unsupported_jvm_diagnostic_transport": "選択した JVM 診断トランスポートはサポートされていません", - "connection_modal.message.dameng_ssl_cert_required": "必須項目を入力してください", - "connection_modal.message.http_tunnel_host_required": "必須項目を入力してください", - "connection_modal.message.http_tunnel_port_invalid": "HTTP Tunnel ポートが無効です", - "connection_modal.message.unsupported_jvm_modes_current": "この接続にはサポートされていない JVM 接続モードが含まれています", - "connection_modal.group.relational": "リレーショナルデータベース", - "connection_modal.group.chinese_databases": "中国系データベース", - "connection_modal.step1.group.nosql": "NoSQL データベース", - "connection_modal.step1.group.relational": "リレーショナルデータベース", - "connection_modal.step1.group.domestic": "国産データベース", - "connection_modal.step1.group.timeseries": "時系列データベース", - "connection_modal.step1.group.other": "その他", - "connection_modal.group.time_series": "時系列データベース", - "connection_modal.group.other": "その他", - "connection_modal.db_type.custom": "カスタム", - "connection_modal.layout.mysql_compatible": "MySQL 互換接続", - "connection_modal.layout.mongodb": "MongoDB 接続", - "connection_modal.layout.redis": "Redis 接続", - "connection_modal.layout.postgres_compatible": "PostgreSQL 互換接続", - "connection_modal.layout.oracle": "Oracle 接続", - "connection_modal.layout.file": "ファイルデータベース接続", - "connection_modal.layout.custom": "カスタムドライバー接続", - "connection_modal.layout.jvm": "JVM ランタイム接続", - "connection_modal.layout.generic_sql": "汎用 SQL 接続", - "connection_modal.db_type_hint.custom": "カスタムドライバーと DSN でデータベースに接続します。", - "connection_modal.db_type_hint.redis": "Redis 単体または Redis Cluster に接続します。", - "connection_modal.db_type_hint.mongodb": "MongoDB 単体、Replica Set、または SRV アドレスに接続します。", - "connection_modal.db_type_hint.file": "ローカルの SQLite または DuckDB データベースファイルを選択します。", - "connection_modal.db_type_hint.standard": "ホスト、ポート、認証情報、任意のデータベースを入力します。", - "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", - "connection_modal.step1.hint.custom": "カスタムドライバーと DSN", - "connection_modal.step1.hint.redis": "シングルノード / クラスター", - "connection_modal.step1.hint.mongodb": "シングルノード / レプリカセット", - "connection_modal.step1.hint.oceanBase": "MySQL / Oracle テナント", - "connection_modal.step1.hint.file": "ローカルファイル接続", - "connection_modal.step1.hint.standard": "標準接続設定", - "connection_modal.step.select_source": "データソースを選択", - "connection_modal.step.select_source_description": "作成する接続タイプを選択します。", - "connection_modal.message.driver_not_enabled_with_name_short": "{{name}} ドライバーはインストールされていないか有効化されていません。先にドライバー管理を開いてください。", - "connection_modal.section.basic.title": "基本情報", - "connection_modal.section.basic.description": "接続名、接続先、ドライバー、認証情報を入力します。", - "connection_modal.field.connection_name": "接続名", - "connection_modal.placeholder.jvm_name": "jvm 名前", - "connection_modal.placeholder.connection_name": "接続名前", - "connection_modal.field.uri": "URI", - "connection_modal.help.uri": "接続 URI を貼り付けるか生成します。", - "connection_modal.action.generate_uri": "URI を生成", - "connection_modal.action.parse_uri": "URI を解析", - "connection_modal.action.copy_uri": "URI をコピー", - "connection_modal.secret.clear_saved_uri": "保存済み URI をクリア", - "connection_modal.secret.saved_uri_description": "接続 URI は安全に保存されています。空のままにするとその URI を使い続けます。", - "connection_modal.field.driver_name": "ドライバー名前", - "connection_modal.field.driver.placeholder": "例: mysql, postgres", - "connection_modal.validation.driver_name_required": "ドライバー名を入力してください", - "connection_modal.placeholder.driver_name": "ドライバー名前", - "connection_modal.field.dsn": "DSN", - "connection_modal.field.dsn.placeholder": "例: user:pass@tcp(localhost:3306)/dbname?charset=utf8", - "connection_modal.validation.custom_dsn_required": "接続文字列を入力してください", - "connection_modal.validation.custom_dsn_required_when_clearing_saved": "新しい接続文字列を入力するか、保存済み DSN のクリアをキャンセルしてください", - "connection_modal.secret.clear_saved_dsn": "保存済み DSN をクリア", - "connection_modal.secret.saved_dsn_description": "DSN は安全に保存されています。空のままにするとその DSN を使い続けます。", - "connection_modal.message.unsupported_jvm_modes_detected": "サポートされていない JVM 接続モードが検出されました", - "connection_modal.jvm.target_title": "JVM ターゲット", - "connection_modal.jvm.target_description": "JVM 管理 Endpoint のホスト、ポート、接続方法を設定します。", - "connection_modal.field.host": "ホスト", - "connection_modal.validation.jvm_host_required": "JVM ホストを入力してください", - "connection_modal.field.primary_port": "プライマリポート", - "connection_modal.validation.jvm_port_required": "JVM ポートを入力してください", - "connection_modal.section.network.title": "ネットワークとセキュリティ", - "connection_modal.section.network.description": "SSL/TLS、SSH Tunnel、プロキシ、HTTP Tunnel を設定します。", - "connection_modal.message.current_driver_not_enabled": "現在のドライバーがインストールされていないか、有効化されていません", - "connection_modal.section.basic.jvm_description": "JVM ターゲット、接続モード、認証情報を設定します。", - "connection_modal.section.basic.sql_description": "接続先、ドライバー、認証情報、データベース範囲を設定します。", - "connection_modal.section.network.nav_description": "この接続のネットワークとセキュリティを設定します。", - "connection_modal.section.appearance.title": "外観", - "connection_modal.section.appearance.description": "サイドバーに表示する接続のアイコンと色を設定します。", - "connection_modal.appearance.icon": "アイコン", - "connection_modal.appearance.current_icon": "現在のアイコン: {{icon}}", - "connection_modal.db_icon_label.custom": "カスタム", - "connection_modal.appearance.color": "色", - "connection_modal.appearance.custom_color": "カスタムカラー", - "connection_modal.appearance.preview": "プレビュー", - "connection_modal.placeholder.connection_name_fallback": "接続名", - "connection_modal.action.reset_default": "既定値に戻す", - "connection_modal.message.connection_failed": "接続に失敗しました", - "connection_modal.action.previous_step": "前へ", - "connection_modal.message.connection_success": "接続に成功しました", - "connection_modal.action.view_reason": "ビュー理由", - "connection_modal.action.test": "接続をテスト", - "connection_modal.action.save": "保存", - "connection_modal.title.select_type": "データソースの種類を選択", - "connection_modal.title.select_type_description": "対応しているデータソースから接続タイプを選択します。", - "connection_modal.title.edit": "接続を編集", - "connection_modal.title.edit_description": "{{type}} 接続の設定を編集します。", - "connection_modal.title.create": "新規 {{type}} 接続", - "connection_modal.title.create_description": "接続設定を入力して保存します。", - "connection_modal.test_error.title": "接続テスト失敗の詳細", - "connection_modal.test_error.description": "バックエンドから返された完全なエラーを確認します。", - "connection_modal.action.close": "閉じる", - "connection_modal.test_error.empty": "エラー詳細はありません", - "sidebar.message.duplicate_backend_unavailable": "このビルドでは接続の複製を利用できません。", - "sidebar.message.duplicate_empty_result": "複製された接続が返されませんでした。", - "sidebar.message.duplicated_connection": "接続 {{name}} を複製しました。", - "sidebar.message.duplicate_failed": "接続の複製に失敗しました。", - "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "JVM Provider の検出に失敗しました: {{error}}。診断強化の入口は引き続き利用できます。", - "sidebar.message.jvm_provider_probe_failed": "JVM プロバイダーの検出に失敗しました: {{error}}", - "sidebar.error.unknown": "不明なエラー", - "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "JVM Provider の検出中に例外が発生しました: {{error}}。診断強化の入口は引き続き利用できます。", - "sidebar.message.jvm_provider_probe_exception": "JVM プロバイダーの検出に失敗しました: {{error}}", - "sidebar.message.connection_failed": "接続に失敗しました: {{error}}", - "sidebar.message.load_jvm_resources_failed": "JVM リソースの読み込みに失敗しました: {{error}}", - "sidebar.message.load_tables_failed": "オブジェクトの読み込みに失敗しました: {{error}}", - "sidebar.message.table_pinned": "テーブルを固定しました", - "sidebar.message.table_unpinned": "テーブルの固定を解除しました", - "sidebar.message.table_structure_copied": "テーブル構造をコピーしました。", - "sidebar.message.exporting_table_format": "{{table}} を {{format}} としてエクスポートしています...", - "sidebar.message.export_success": "エクスポート成功。", - "sidebar.message.export_failed": "エクスポートに失敗しました: {{error}}", - "sidebar.message.backing_up_database": "データベース {{database}} をバックアップしています...", - "sidebar.message.exporting_database_schema": "{{database}} のスキーマをエクスポートしています...", - "sidebar.message.exporting_database_backup": "{{database}} をバックアップしています(スキーマとデータ)...", - "sidebar.message.schema_export_target_missing": "対象のスキーマが見つからないため、エクスポートできません。", - "sidebar.message.exporting_schema_structure": "スキーマ {{schema}} の構造をエクスポートしています...", - "sidebar.message.exporting_schema_backup": "スキーマ {{schema}} をバックアップしています(構造とデータ)...", - "sidebar.message.export_tables_same_database_required": "同じデータベースのテーブルを選択してください。", - "sidebar.message.backing_up_selected_tables": "選択した {{count}} 件のテーブルをバックアップしています...", - "sidebar.message.exporting_selected_table_schema": "選択した {{count}} 件のテーブルのスキーマをエクスポートしています...", - "sidebar.message.load_database_list_failed": "データベースの読み込みに失敗しました: {{error}}", - "sidebar.message.load_table_list_failed": "テーブルの読み込みに失敗しました: {{error}}", - "sidebar.message.locate_external_sql_file_not_found": "外部 SQL ディレクトリで SQL ファイルが見つかりません: {{path}}", - "sidebar.message.locate_connection_not_found_for_object": "現在のオブジェクトに対応する接続が見つかりません", - "sidebar.message.locate_connection_not_in_tree": "左側ツリーで現在の接続が見つかりません", - "sidebar.message.locate_database_loading": "データベースノードはまだ読み込み中です: {{database}}。しばらくしてから再試行してください", - "sidebar.message.locate_database_not_found": "左側ツリーでデータベースが見つかりません: {{database}}", - "sidebar.message.locate_object_loading": "{{database}} の {{object}} オブジェクトはまだ読み込み中です。しばらくしてから再試行してください", - "sidebar.message.locate_object_not_found": "左側ツリーで {{object}} が見つかりません: {{name}}。データベースノードを更新して再試行してください", - "sidebar.message.select_object_required": "オブジェクトを 1 件以上選択してください。", - "sidebar.message.backing_up_selected_objects": "選択した {{count}} 件のオブジェクトをバックアップしています...", - "sidebar.message.exporting_selected_object_data": "選択した {{count}} 件のオブジェクトのデータ({{format}})をエクスポートしています...", - "sidebar.message.exporting_selected_object_schema": "選択した {{count}} 件のオブジェクトのスキーマをエクスポートしています...", - "sidebar.message.export_success_skipped_views": "エクスポートが完了しました。{{count}} 件のビューはデータエクスポートから除外されました。", - "sidebar.modal.confirm_clear_selected_tables.title": "選択したテーブルのクリアを確認", - "sidebar.modal.confirm_clear_selected_tables.content": "{{connection}} / {{database}} の選択したオブジェクトのデータをクリアしますか?この操作は元に戻せません。", - "sidebar.action.continue": "続行", - "sidebar.action.cancel": "キャンセル", - "sidebar.action.delete": "削除", - "sidebar.message.clearing_selected_tables": "選択した {{count}} 件のテーブルをクリアしています...", - "sidebar.message.clear_success": "クリア成功。", - "sidebar.message.clear_failed": "クリアに失敗しました: {{error}}", - "sidebar.message.select_database_required": "データベースを 1 件以上選択してください。", - "sidebar.message.database_export_success": "{{database}} をエクスポートしました。", - "sidebar.message.database_export_failed": "{{database}} のエクスポートに失敗しました: {{error}}", - "sidebar.message.connection_config_not_found": "接続設定が見つかりません。", - "sidebar.sql_file_exec.title": "外部 SQL ファイルを実行", - "sidebar.message.read_file_failed": "ファイルの読み込みに失敗しました: {{error}}", - "sidebar.message.select_connection_or_database_first": "先に接続またはデータベースを選択してください。", - "sidebar.message.schema_create_unsupported": "このデータベースでは schema を作成できません。", - "sidebar.message.schema_target_missing": "schema を作成するデータベースを選択してください。", - "sidebar.message.schema_created": "schema を作成しました。", - "sidebar.message.operation_create_failed": "作成に失敗しました: {{error}}", - "sidebar.sql_file.default_name": "SQL ファイル", - "sidebar.message.sql_file_context_incomplete": "SQL ファイルのコンテキストが不完全です。", - "sidebar.message.sql_file_path_incomplete": "SQL ファイルのパスが不完全なため開けません。", - "sidebar.message.select_host_before_large_sql_file": "大きな SQL ファイルを実行する前に Host を選択してください。", - "sidebar.message.read_sql_file_failed": "SQL ファイルの読み込みに失敗しました: {{error}}", - "sidebar.message.external_sql_file_parent_missing": "SQL ファイルを作成するディレクトリが見つかりません。", - "sidebar.message.external_sql_file_rename_target_missing": "名前を変更できる SQL ファイルが見つかりません。", - "sidebar.message.external_sql_file_delete_target_missing": "削除する SQL ファイルが見つかりません。", - "sidebar.message.external_sql_directory_parent_missing": "ディレクトリを作成する場所が見つかりません。", - "sidebar.message.external_sql_directory_rename_target_missing": "名前を変更できるディレクトリが見つかりません。", - "sidebar.message.external_sql_directory_delete_target_missing": "削除する SQL ディレクトリが見つかりません。", - "sidebar.message.sql_file_name_required": "SQL ファイル名は必須です。", - "sidebar.message.sql_directory_name_required": "ディレクトリ名は必須です。", - "sidebar.message.create_sql_file_failed": "SQL ファイルの作成に失敗しました: {{error}}", - "sidebar.message.sql_file_created": "SQL ファイルを作成しました。", - "sidebar.message.rename_sql_file_failed": "SQL ファイルの名前変更に失敗しました: {{error}}", - "sidebar.message.sql_file_renamed": "SQL ファイルの名前を変更しました。", - "sidebar.message.delete_sql_file_failed": "SQL ファイルの削除に失敗しました:{{error}}", - "sidebar.message.sql_file_deleted": "SQL ファイルを削除しました。", - "sidebar.message.create_sql_directory_failed": "ディレクトリの作成に失敗しました: {{error}}", - "sidebar.message.sql_directory_created": "ディレクトリを作成しました。", - "sidebar.message.rename_sql_directory_failed": "ディレクトリの名前変更に失敗しました: {{error}}", - "sidebar.message.external_sql_directory_rename_sync_failed": "ディレクトリの名前は変更されましたが、外部 SQL ディレクトリ一覧を同期できません。ディレクトリを追加し直してください。", - "sidebar.message.sql_directory_renamed": "ディレクトリの名前を変更しました。", - "sidebar.message.delete_sql_directory_failed": "SQL ディレクトリの削除に失敗しました:{{error}}", - "sidebar.message.sql_directory_deleted": "SQL ディレクトリを削除しました。", - "sidebar.message.add_sql_directory_database_required": "SQL ディレクトリを追加する前にデータベースを選択してください。", - "sidebar.message.select_sql_directory_failed": "SQL ディレクトリの選択に失敗しました: {{error}}", - "sidebar.message.sql_directory_path_invalid": "SQL ディレクトリのパスが無効です。", - "sidebar.sql_directory.default_name": "SQL ディレクトリ", - "sidebar.message.external_sql_directory_added": "SQL ディレクトリを追加しました。", - "sidebar.message.external_sql_directory_not_found": "外部 SQL ディレクトリが見つかりません。", - "sidebar.message.external_sql_directory_removed": "SQL ディレクトリを削除しました。", - "sidebar.message.external_sql_directory_context_missing": "SQL ディレクトリのコンテキストがありません。", - "sidebar.message.external_sql_directory_refreshed": "SQL ディレクトリを更新しました。", - "sidebar.message.database_created": "データベースを作成しました。", - "sidebar.message.create_failed": "作成に失敗しました: {{error}}", - "sidebar.modal.confirm_delete_database.title": "データベースを削除", - "sidebar.modal.confirm_delete_database.content": "{{name}} を削除しますか?この操作は元に戻せません。", - "sidebar.modal.confirm_delete_sql_file.title": "SQL ファイルを削除", - "sidebar.modal.confirm_delete_sql_file.content": "\"{{name}}\" を削除しますか?この操作はローカルディスク上のファイルを削除し、元に戻せません。", - "sidebar.modal.confirm_delete_sql_directory.title": "SQL ディレクトリを削除", - "sidebar.modal.confirm_delete_sql_directory.content": "\"{{name}}\" を削除しますか?この操作はローカルディスク上のディレクトリを削除し、空のディレクトリのみ削除できます。", - "sidebar.modal.confirm_delete_table.title": "テーブルを削除", - "sidebar.modal.confirm_delete_table.content": "{{name}} を削除しますか?この操作は元に戻せません。", - "sidebar.modal.confirm_table_data_action.title": "{{action}} の確認", - "sidebar.modal.confirm_table_data_action.content": "{{action}} {{table}} を実行しますか?この操作は元に戻せません。", - "sidebar.modal.confirm_delete_view.title": "ビューを削除", - "sidebar.modal.confirm_delete_view.content": "{{name}} を削除しますか?この操作は元に戻せません。", - "sidebar.modal.confirm_delete_routine.title": "{{type}} を削除", - "sidebar.modal.confirm_delete_routine.content": "{{type}} {{name}} を削除しますか?この操作は元に戻せません。", - "sidebar.search.scope.smart": "スマート", - "sidebar.search.scope_title": "検索範囲", - "sidebar.search.scope_description": "サイドバー検索の対象範囲を選択します。", - "sidebar.badge.recommended": "推奨", - "sidebar.search.scope.smart_description": "選択中のノードに応じて検索範囲を自動的に絞り込みます。", - "sidebar.search.manual_scope": "手動範囲", - "sidebar.search.multi_select_supported": "複数選択に対応", - "sidebar.search.scope_hint": "スマートモードでは、コンテキストに応じて名前、ホスト、データベース、オブジェクトを検索します。", - "sidebar.modal.confirm_delete.title": "削除の確認", - "sidebar.modal.confirm_delete_tag.content": "グループ「{{name}}」を削除しますか?中の接続は削除されません。", - "sidebar.menu.edit_connection": "接続を編集", - "sidebar.menu.delete_connection": "接続を削除", - "sidebar.modal.confirm_delete_connection.content": "接続 {{name}} を削除しますか?", - "sidebar.message.delete_connection_backend_unavailable": "このビルドでは接続の削除を利用できません。", - "sidebar.message.connection_deleted": "接続を削除しました。", - "sidebar.message.delete_connection_failed": "接続の削除に失敗しました。", - "sidebar.modal.confirm_delete_saved_query.content": "保存済みクエリ「{{name}}」を削除しますか?この操作は元に戻せません。", - "sidebar.search.placeholder": "検索...", - "sidebar.punctuation.list_separator": "、", - "sidebar.command_search.label": "テーブル、接続、操作を検索", - "sidebar.command_search.placeholder": "テーブル、接続、操作を検索... または AI に質問", - "sidebar.command_search.sync_to_filter_tooltip": "入力内容を左側フィルターに同期", - "sidebar.command_search.sync_to_filter_aria": "左側フィルターに同期", - "sidebar.command_search.reset_filter": "サイドバーフィルターをリセット", - "sidebar.command_search.no_synced_filter": "同期済みのサイドバーフィルターはありません", - "sidebar.command_search.no_filter_content": "フィルター内容はありません", - "sidebar.command_search.object_kind.all": "すべて", - "sidebar.command_search.object_kind.tables": "テーブル", - "sidebar.command_search.object_kind.views": "ビュー", - "sidebar.command_search.object_kind.routines": "ルーチン", - "sidebar.command_search.object_kind.events": "イベント", - "sidebar.command_search.object_kind.filter_aria": "オブジェクトフィルター", - "sidebar.command_search.scope.smart": "スマート", - "sidebar.command_search.scope.object": "テーブルオブジェクト", - "sidebar.command_search.scope.database": "データベース", - "sidebar.command_search.scope.host": "Host", - "sidebar.command_search.scope.tag": "タグ", - "sidebar.command_search.scope.summary_smart": "スマート", - "sidebar.command_search.scope.title": "検索範囲", - "sidebar.command_search.scope.description": "「スマート」は最も可能性の高い一致項目を自動で探します。手動モードでは条件を組み合わせて絞り込めます。", - "sidebar.command_search.scope.recommended": "推奨", - "sidebar.command_search.scope.smart_help": "通常の検索に適しており、名前、データベース、Host、タグなどよく使う項目を自動で対象にします。", - "sidebar.command_search.scope.manual_title": "手動範囲", - "sidebar.command_search.scope.multi_select": "複数選択に対応", - "sidebar.command_search.scope.manual_help": "スマートは他の項目と同時に使えません。検索対象がオブジェクト、データベース、Host、タグとはっきりしている場合は、手動範囲に切り替えると結果のノイズを減らせます。", - "sidebar.command_search.scope.tooltip": "検索範囲: {{scope}}", - "sidebar.command_search.scope.compact_smart": "スマート", - "sidebar.search.scope_tooltip": "現在の検索範囲: {{scope}}", - "sidebar.search.scope.smart_short": "スマート", - "sidebar.rail.object_actions": "オブジェクト領域のクイック操作", - "sidebar.rail.system_actions": "システム操作", - "sidebar.action.new_group": "新しいグループ", - "sidebar.action.batch_tables": "テーブルを一括処理", - "sidebar.action.batch_databases": "データベースを一括処理", - "sidebar.action.locate_current_table": "現在開いているテーブルを特定", - "sidebar.action.pin_table": "テーブルを固定", - "sidebar.action.unpin_table": "テーブル固定を解除", - "sidebar.status.pinned": "固定済み", - "sidebar.v2_table_menu.meta.rows_empty": "— 行", - "sidebar.v2_table_menu.meta.rows": "{{count}} 行", - "sidebar.v2_table_menu.meta.idle": "更新をクリックして統計情報を読み込み", - "sidebar.v2_table_menu.meta.loading": "テーブル統計情報を読み込み中...", - "sidebar.v2_table_menu.meta.unavailable": "テーブル統計情報を利用できません", - "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} データ · {{indexes}} インデックス", - "sidebar.v2_table_menu.open_data": "データを表示", - "sidebar.v2_table_menu.design_table_detail": "列 / インデックス / 外部キー", - "sidebar.v2_table_menu.open_in_new_tab": "新しいタブで開く", - "sidebar.v2_table_menu.metadata_section": "メタデータ", - "sidebar.v2_table_menu.view_in_er": "ER 図で表示", - "sidebar.v2_table_menu.copy_section": "コピー", - "sidebar.v2_table_menu.copy_table_name": "テーブル名をコピー", - "sidebar.copy_object_name.label.table": "テーブル名", - "sidebar.copy_object_name.label.view": "ビュー名", - "sidebar.copy_object_name.label.materialized_view": "マテリアライズドビュー名", - "sidebar.copy_object_name.label.event": "イベント名", - "sidebar.copy_object_name.empty": "{{label}}が空のためコピーできません", - "sidebar.copy_object_name.copied": "{{label}}をクリップボードにコピーしました", - "sidebar.copy_object_name.failed": "{{label}}のコピーに失敗しました: {{error}}", - "sidebar.v2_table_menu.copy_table_as_insert": "テーブル全体を {{keyword}} としてコピー", - "sidebar.v2_table_menu.maintenance_section": "メンテナンス", - "sidebar.v2_table_menu.rename_compact": "名前を変更…", - "sidebar.v2_table_menu.new_rollup": "{{keyword}} を新規作成", - "sidebar.v2_table_menu.backup_sql_dump": "バックアップ · {{keyword}}", - "sidebar.v2_table_menu.refresh_stats": "統計情報を更新", - "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", - "sidebar.v2_table_menu.open_export_workbench": "エクスポートワークベンチを開く…", - "sidebar.v2_table_menu.truncate_table": "テーブルを切り詰め", - "sidebar.v2_table_menu.ai_explain_table": "AI でこのテーブルを説明", - "sidebar.v2_table_menu.ai_generate_query": "AI でクエリを生成", - "sidebar.v2_table_group_menu.title": "テーブル", - "sidebar.v2_table_group_menu.current_database": "現在のデータベース", - "sidebar.v2_table_group_menu.sort_name": "名前", - "sidebar.v2_table_group_menu.sort_frequency": "使用頻度", - "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} テーブル · {{sort}}順で並べ替え中", - "sidebar.message.locate_current_table_unavailable": "現在のタブには特定できるテーブルがありません", - "sidebar.locate.object.table": "テーブル", - "sidebar.locate.object.view": "ビュー", - "sidebar.locate.object.materialized_view": "マテリアライズドビュー", - "sidebar.locate.object.routine": "関数/プロシージャ", - "sidebar.locate.object.trigger": "トリガー", - "sidebar.active_connection.current_host_database": "現在の Host とデータベース", - "sidebar.active_connection.no_database_selected": "データベース未選択", - "sidebar.active_connection.no_host_selected": "Host 未選択", - "sidebar.active_connection.actions": "接続操作", - "sidebar.modal.tag.edit_title": "グループを編集", - "sidebar.modal.tag.create_title": "グループを作成", - "sidebar.modal.tag.edit_description": "グループ名と含める接続を更新します。", - "sidebar.modal.tag.create_description": "接続を整理するためのグループを作成します。", - "sidebar.field.tag_name": "グループ名", - "sidebar.validation.tag_name_required": "グループ名を入力してください。", - "sidebar.placeholder.tag_name": "グループ名", - "sidebar.field.select_connections": "接続を選択", - "sidebar.modal.create_database.title": "データベースを作成", - "sidebar.field.database_name": "データベース名", - "sidebar.validation.name_required": "名前を入力してください。", - "sidebar.modal.rename_database.title": "データベース名を変更: {{name}}", - "sidebar.field.new_database_name": "新しいデータベース名", - "sidebar.validation.new_database_name_required": "新しいデータベース名を入力してください。", - "sidebar.field.schema_name": "schema 名", - "sidebar.validation.schema_name_required": "schema 名を入力してください。", - "sidebar.modal.rename_table.title": "テーブル名を変更: {{name}}", - "sidebar.field.new_table_name": "新しいテーブル名", - "sidebar.validation.new_table_name_required": "新しいテーブル名を入力してください。", - "sidebar.modal.rename_view.title": "ビュー名を変更: {{name}}", - "sidebar.field.new_view_name": "新しいビュー名", - "sidebar.validation.new_view_name_required": "新しいビュー名を入力してください。", - "sidebar.modal.batch_tables.title": "テーブル一括操作", - "sidebar.modal.batch_tables.description": "テーブルとビューを選択し、1 回の操作でエクスポートまたはクリアします。", - "sidebar.action.clear_tables": "テーブルをクリア", - "sidebar.action.export_schema": "構造をエクスポート", - "sidebar.action.export_data_only": "データのみエクスポート", - "sidebar.action.backup_schema_data": "スキーマとデータをバックアップ", - "sidebar.field.select_connection": "接続を選択", - "sidebar.placeholder.select_connection": "接続を選択", - "sidebar.field.select_database": "データベースを選択", - "sidebar.placeholder.select_connection_first": "先に接続を選択してください", - "sidebar.modal.batch_tables.selection_hint": "この一括処理の対象にするテーブルまたはビューを選択します。", - "sidebar.placeholder.filter_table_view": "テーブルまたはビューを絞り込み", - "sidebar.filter.all_objects": "すべてのオブジェクト", - "sidebar.filter.tables_only": "テーブルのみ", - "sidebar.filter.views_only": "ビューのみ", - "sidebar.filter.scope_filtered": "絞り込み中", - "sidebar.filter.scope_all": "すべての範囲", - "sidebar.batch.filtered_count": "{{filtered}} / {{total}} 件のオブジェクトを表示", - "sidebar.action.select_all": "すべて選択", - "sidebar.action.clear_selection": "選択を解除", - "sidebar.action.invert_selection": "選択を反転", - "sidebar.batch.selected_objects": "{{selected}} / {{total}} 件のオブジェクトを選択中", - "sidebar.modal.batch_databases.title": "データベース一括操作", - "sidebar.modal.batch_databases.description": "データベースを選択し、スキーマのエクスポートまたは完全バックアップを実行します。", - "sidebar.action.export_database_schema_count": "スキーマをエクスポート({{count}})", - "sidebar.action.backup_database_count": "データベースをバックアップ({{count}})", - "sidebar.modal.batch_databases.selection_hint": "選択した接続からデータベースを選択します。", - "sidebar.batch.selected_databases": "{{selected}} / {{total}} 件のデータベースを選択中", - "sidebar.sql_file_exec.cancel": "実行をキャンセル", - "sidebar.action.close": "閉じる", - "sidebar.sql_file_exec.file_size": "ファイルサイズ: ", - "sidebar.sql_file_exec.status_label": "ステータス: ", - "sidebar.sql_file_exec.status.running": "実行中", - "sidebar.sql_file_exec.status.done": "完了", - "sidebar.sql_file_exec.status.cancelled": "キャンセル済み", - "sidebar.sql_file_exec.status.error": "エラー", - "sidebar.sql_file_exec.executed_label": "実行済み: ", - "sidebar.sql_file_exec.rows_separator": " 行 | 失敗: ", - "sidebar.sql_file_exec.rows_suffix": " 行", - "connection_modal.config_section.identity.title": "識別情報", - "connection_modal.config_section.identity.description": "識別情報を設定します。", - "connection_modal.config_section.uri.title": "接続 URI", - "connection_modal.config_section.uri.description": "接続 URI を入力、生成、または解析します。", - "connection_modal.config_section.target.title": "接続先アドレス", - "connection_modal.config_section.target.description": "接続先アドレスを設定します。", - "connection_modal.config_section.fileTarget.title": "ファイルデータベース", - "connection_modal.config_section.fileTarget.description": "ファイルデータベースを設定します。", - "connection_modal.config_section.connectionMode.title": "接続モード", - "connection_modal.config_section.connectionMode.description": "接続モードを設定します。", - "connection_modal.config_section.mongoDiscovery.title": "MongoDB 検出", - "connection_modal.config_section.mongoDiscovery.description": "MongoDB 検出を設定します。", - "connection_modal.config_section.replica.title": "レプリカノード", - "connection_modal.config_section.replica.description": "レプリカノードを設定します。", - "connection_modal.config_section.service.title": "サービスとデータベース", - "connection_modal.config_section.service.description": "サービスとデータベースを設定します。", - "connection_modal.config_section.mongoPolicy.title": "MongoDB ポリシー", - "connection_modal.config_section.mongoPolicy.description": "MongoDB ポリシーを設定します。", - "connection_modal.config_section.credentials.title": "認証情報", - "connection_modal.config_section.credentials.description": "認証情報を設定します。", - "connection_modal.config_section.databaseScope.title": "データベース範囲", - "connection_modal.config_section.databaseScope.description": "データベース範囲を設定します。", - "connection_modal.config_section.customDriver.title": "カスタムドライバー", - "connection_modal.config_section.customDriver.description": "カスタムドライバーを設定します。", - "connection_modal.config_section.customDsn.title": "カスタム DSN", - "connection_modal.config_section.customDsn.description": "カスタム DSNを設定します。", - "connection_modal.config_section.jvmRuntime.title": "JVM ランタイム", - "connection_modal.config_section.jvmRuntime.description": "JVM ランタイムを設定します。", - "connection_modal.field.password": "パスワード", - "sidebar.menu.refresh": "更新", - "sidebar.search.scope.object": "オブジェクト", - "sidebar.search.scope.database": "データベース", - "sidebar.search.scope.host": "ホスト", - "sidebar.search.scope.tag": "タグ", - "sidebar.tree.saved_queries": "保存済みクエリ", - "sidebar.tree.untitled_query": "無題のクエリ", - "sidebar.tree.default_database": "既定データベース", - "sidebar.tree.unknown_connection": "不明な接続", - "sidebar.tree.unmatched_saved_queries": "未一致", - "sidebar.tree.all_saved_queries": "すべての保存済みクエリ", - "sidebar.tree.default_schema": "既定スキーマ", - "sidebar.object_group.tables": "テーブル", - "sidebar.object_group.views": "ビュー", - "sidebar.object_group.routines": "関数とプロシージャ", - "sidebar.object_group.triggers": "トリガー", - "sidebar.object_group.events": "イベント", - "sidebar.object_group.materialized_views": "マテリアライズドビュー", - "sidebar.table_folder.columns": "列", - "sidebar.table_folder.indexes": "インデックス", - "sidebar.table_folder.foreign_keys": "外部キー", - "sidebar.table_folder.triggers": "トリガー", - "sidebar.object.view": "ビュー", - "sidebar.object.function": "関数", - "sidebar.object.procedure": "プロシージャ", - "sidebar.table_action.truncate.label": "テーブルを切り詰め", - "sidebar.table_action.truncate.progress": "切り詰め中", - "sidebar.table_action.clear.label": "テーブルをクリア", - "sidebar.table_action.clear.progress": "クリア中", - "sidebar.tab.table_structure": "テーブル構造({{table}})", - "sidebar.tab.design_table": "テーブル設計({{table}})", - "sidebar.tab.new_table": "新規テーブル - {{database}}", - "sidebar.tab.table_overview": "テーブル概要 - {{database}}{{schema}}", - "sidebar.tab.trigger": "トリガー: {{name}}", - "sidebar.tab.event": "イベント: {{name}}", - "sidebar.tab.edit_event": "イベントを編集: {{name}}", - "sidebar.tab.materialized_view_definition": "マテリアライズドビュー: {{name}}", - "sidebar.tab.view_definition": "ビュー: {{name}}", - "sidebar.tab.edit_view": "ビューを編集: {{name}}", - "sidebar.tab.create_view": "新規ビュー", - "sidebar.tab.routine_definition": "{{type}}: {{name}}", - "sidebar.tab.edit_routine": "{{type}} を編集: {{name}}", - "sidebar.tab.create_function": "新規関数", - "sidebar.tab.create_procedure": "新規プロシージャ", - "sidebar.tab.new_query": "新規クエリ", - "sidebar.tab.new_query_database": "新規クエリ({{database}})", - "sidebar.tab.redis_command": "コマンド - {{database}}", - "sidebar.tab.redis_monitor": "監視 - {{database}}", - "tab_manager.menu.close_all": "すべてのタブを閉じる", - "tab_manager.menu.close_left": "左側のタブを閉じる", - "tab_manager.menu.close_other": "他のタブを閉じる", - "tab_manager.menu.close_right": "右側のタブを閉じる", - "tab_manager.close_aria": "{{title}} を閉じる", - "tab_manager.kind_badge.query": "SQL", - "tab_manager.kind_badge.table": "表", - "tab_manager.kind_badge.design": "設計", - "tab_manager.kind_badge.table_overview": "DB", - "tab_manager.kind_badge.redis": "Redis", - "tab_manager.kind_badge.jvm": "JVM", - "tab_manager.kind_badge.trigger": "トリガー", - "tab_manager.kind_badge.materialized_view": "MV", - "tab_manager.kind_badge.view": "ビュー", - "tab_manager.kind_badge.event": "イベント", - "tab_manager.kind_badge.routine": "関数", - "tab_manager.kind_badge.table_export": "エクスポート", - "tab_manager.kind_badge.sql_analysis": "分析", - "tab_manager.kind_badge.fallback": "タブ", - "tab_manager.empty.action.open_ai": "AI を開く", - "tab_manager.empty.aria.start_workbench": "GoNavi 開始ワークベンチ", - "tab_manager.empty.eyebrow.connections": "{{count}} 件の接続", - "tab_manager.empty.eyebrow.workbench": "ワークベンチ", - "tab_manager.empty.hero.description": "データソースを選択し、クエリエディターを開くか、AI パネルでコンテキストを保ったまま続行します。", - "tab_manager.empty.hero.title": "接続、クエリ、分析は 1 つのワークベンチから始まります。", - "tab_manager.empty.quick.ai_assist.description": "SQL の説明、クエリ生成、結果レビュー", - "tab_manager.empty.quick.ai_assist.title": "AI 支援を開始", - "tab_manager.empty.quick.aria": "クイックワークフロー", - "tab_manager.empty.quick.configure_source.description": "URI、SSH、プロキシ、ドライバーを 1 か所で設定", - "tab_manager.empty.quick.configure_source.title": "データソースを設定", - "tab_manager.empty.quick.heading": "クイックワークフロー", - "tab_manager.empty.quick.sql_workspace.description": "現在のコンテキストでクエリエディターを開く", - "tab_manager.empty.quick.sql_workspace.title": "SQL ワークスペースを開始", - "tab_manager.hover.fallback.database_not_specified": "未指定", - "tab_manager.hover.fallback.host_not_configured": "未設定", - "tab_manager.hover.fallback.unbound_connection": "未バインドの接続", - "tab_manager.hover.kind.design": "テーブル設計", - "tab_manager.hover.kind.event": "イベント", - "tab_manager.hover.kind.fallback": "タブ", - "tab_manager.hover.kind.jvm_audit": "JVM 監査", - "tab_manager.hover.kind.jvm_diagnostic": "JVM 診断", - "tab_manager.hover.kind.jvm_monitoring": "JVM 監視", - "tab_manager.hover.kind.jvm_overview": "JVM 概要", - "tab_manager.hover.kind.jvm_resource": "JVM リソース", - "tab_manager.hover.kind.materialized_view": "マテリアライズドビュー", - "tab_manager.hover.kind.query": "SQL クエリ", - "tab_manager.hover.kind.redis_command": "Redis コマンド", - "tab_manager.hover.kind.redis_keys": "Redis Key", - "tab_manager.hover.kind.redis_monitor": "Redis 監視", - "tab_manager.hover.kind.routine": "関数 / プロシージャ", - "tab_manager.hover.kind.table": "テーブルデータ", - "tab_manager.hover.kind.table_export": "エクスポートワークベンチ", - "tab_manager.hover.kind.sql_analysis": "SQL 分析ワークベンチ", - "tab_manager.hover.kind.table_overview": "テーブル概要", - "tab_manager.hover.kind.trigger": "トリガー", - "tab_manager.hover.kind.view": "ビュー", - "tab_manager.hover.label.connection": "接続", - "tab_manager.hover.label.database": "データベース", - "tab_manager.hover.label.object": "オブジェクト", - "tab_manager.hover.label.type": "種類", - "sidebar.message.no_visible_databases": "表示可能なデータベースまたはスキーマが返されませんでした。権限を確認するか、右クリックメニューから更新してください。", - "sidebar.message.visual_new_table_unsupported": "このデータソースでは、ビジュアルな新規テーブル作成はまだサポートされていません。", - "sidebar.message.jvm_resources_backend_unavailable": "このビルドでは JVM リソースの参照を利用できません。", - "sidebar.message.external_sql_directory_read_failed": "SQL ディレクトリ {{name}} の読み込みに失敗しました: {{error}}", - "sidebar.message.sphinx_unsupported_objects": "この Sphinx インスタンスは次のオブジェクト機能を公開していません: {{objects}}。互換モードを適用しました。", - "sidebar.message.sidebar_filter_sync_enabled": "左側フィルターの同期を有効にしました。", - "sidebar.message.sidebar_filter_sync_disabled": "左側フィルターの同期を無効にしました。", - "sidebar.message.sidebar_filter_reset": "サイドバーフィルターをリセットしました。", - "sidebar.message.database_name_required": "データベース名を入力してください。", - "sidebar.message.database_name_unchanged": "データベース名は変更されていません。", - "sidebar.message.database_renamed": "データベース名を変更しました。", - "sidebar.message.database_deleted": "データベースを削除しました。", - "sidebar.message.table_name_required": "テーブル名を入力してください。", - "sidebar.message.table_name_unchanged": "テーブル名は変更されていません。", - "sidebar.message.table_renamed": "テーブル名を変更しました。", - "sidebar.message.table_deleted": "テーブルを削除しました。", - "sidebar.message.view_name_required": "ビュー名を入力してください。", - "sidebar.message.view_name_unchanged": "ビュー名は変更されていません。", - "sidebar.message.view_deleted": "ビューを削除しました。", - "sidebar.message.view_renamed": "ビュー名を変更しました。", - "sidebar.message.routine_deleted": "{{type}} を削除しました。", - "sidebar.message.rename_failed": "名前の変更に失敗しました: {{error}}", - "sidebar.message.delete_failed": "削除に失敗しました: {{error}}", - "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", - "sidebar.message.table_data_action_success": "{{action}} が完了しました。", - "sidebar.message.table_data_action_failed": "{{action}} に失敗しました: {{error}}", - "sidebar.message.disconnected": "切断しました。", - "sidebar.message.database_closed": "データベースを閉じました。", - "sidebar.message.saved_query_deleted": "保存済みクエリを削除しました。", - "sidebar.message.saved_query_name_unchanged": "新しいクエリ名は現在の名前と同じです。", - "sidebar.message.saved_query_renamed": "クエリ名を変更しました。", - "sidebar.menu.sort_by_name": "名前順に並べ替え", - "sidebar.menu.sort_by_frequency": "使用頻度順に並べ替え", - "sidebar.menu.create_view": "新規ビュー", - "sidebar.menu.create_function": "新規関数", - "sidebar.menu.create_procedure": "新規プロシージャ", - "sidebar.menu.edit_tag": "グループを編集", - "sidebar.menu.delete_tag": "グループを削除", - "sidebar.menu.new_command_window": "新規コマンドウィンドウ", - "sidebar.menu.redis_monitor": "Redis 監視", - "sidebar.menu.duplicate_connection": "接続を複製", - "sidebar.menu.disconnect": "切断", - "sidebar.menu.move_out_of_tag": "グループから外す", - "sidebar.menu.create_database": "新規データベース", - "sidebar.menu.new_query": "新規クエリ", - "sidebar.menu.move_to_tag": "グループへ移動", - "sidebar.menu.browse_keys": "キーを参照", - "sidebar.menu.create_table": "新規テーブル", - "sidebar.menu.rename_database": "データベース名を変更", - "sidebar.menu.danger_operations": "危険操作", - "sidebar.menu.delete_database": "データベースを削除", - "sidebar.menu.export_all_table_schema_sql": "すべてのテーブル構造を SQL としてエクスポート", - "sidebar.menu.backup_all_tables_sql": "すべてのテーブルをバックアップ(スキーマ + データ SQL)", - "sidebar.menu.close_database": "データベースを閉じる", - "sidebar.menu.browse_view_data": "ビューデータを参照", - "sidebar.menu.view_definition": "ビュー定義", - "sidebar.menu.browse_materialized_view_data": "マテリアライズドビューのデータを参照", - "sidebar.menu.materialized_view_definition": "マテリアライズドビュー定義", - "sidebar.menu.view_object_definition": "定義を表示", - "sidebar.menu.edit_view": "ビューを編集", - "sidebar.menu.rename_view": "ビュー名を変更", - "sidebar.menu.delete_view": "ビューを削除", - "sidebar.menu.view_routine_definition": "定義を表示", - "sidebar.menu.edit_definition": "定義を編集", - "sidebar.menu.delete_routine": "{{type}} を削除", - "sidebar.menu.design_table": "テーブルを設計", - "sidebar.menu.copy_table_structure": "テーブル構造をコピー", - "sidebar.menu.backup_table_sql": "テーブルをバックアップ(SQL)", - "sidebar.menu.rename_table": "テーブル名を変更", - "sidebar.menu.truncate_table": "テーブルを切り詰め", - "sidebar.menu.clear_table": "テーブルをクリア", - "sidebar.menu.delete_table": "テーブルを削除", - "sidebar.menu.export_table_data": "テーブルデータをエクスポート", - "sidebar.menu.export_csv": "CSV としてエクスポート", - "sidebar.menu.export_xlsx": "XLSX としてエクスポート", - "sidebar.menu.export_json": "JSON としてエクスポート", - "sidebar.menu.export_markdown": "Markdown としてエクスポート", - "sidebar.menu.export_html": "HTML としてエクスポート", - "sidebar.menu.open_query": "クエリを開く", - "sidebar.menu.rename_query": "クエリ名を変更", - "sidebar.menu.delete_query": "クエリを削除", - "sidebar.menu.add_sql_directory": "SQL ディレクトリを追加", - "sidebar.menu.refresh_directory": "ディレクトリを更新", - "sidebar.menu.remove_directory": "ディレクトリを削除", - "sidebar.menu.open_sql_file": "SQL ファイルを開く", - "sidebar.menu.new_sql_file": "SQL ファイルを新規作成", - "sidebar.menu.new_sql_directory": "ディレクトリを新規作成", - "sidebar.menu.rename_sql_directory": "ディレクトリ名を変更", - "sidebar.menu.delete_local_directory": "ローカルディレクトリを削除", - "sidebar.menu.delete_sql_directory": "ディレクトリを削除", - "sidebar.menu.rename_sql_file": "SQL ファイル名を変更", - "sidebar.menu.new_sql_file_in_directory": "このディレクトリに SQL ファイルを新規作成", - "sidebar.menu.new_sql_directory_in_directory": "このディレクトリにディレクトリを新規作成", - "sidebar.menu.delete_sql_file": "SQL ファイルを削除", - "sidebar.batch.group.tables": "テーブル", - "sidebar.batch.group.views": "ビュー", - "sidebar.batch.no_matching_objects": "一致するオブジェクトはありません", - "sidebar.sql_template.edit_view": "ビュー {{name}} を編集", - "sidebar.sql_template.modify_then_execute": "変更して実行", - "sidebar.sql_template.edit_routine": "{{type}} {{name}} を編集", - "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB はまだストアドプロシージャをサポートしていません", - "sidebar.sql_template.duckdb_macro_hint": "関数のような動作には SQL Macro を使用してください", - "connection_modal.network.ssl_mode.preferred": "優先", - "connection_modal.network.ssl_mode.required": "必須", - "connection_modal.network.ssl_mode.skip_verify": "検証をスキップ", - "sidebar.external_sql.root": "外部 SQL ファイル", - "sidebar.external_sql.directory_fallback": "SQL ディレクトリ", - "sidebar.external_sql_modal.title.create_file": "SQL ファイルを新規作成", - "sidebar.external_sql_modal.title.rename_file": "SQL ファイル名を変更", - "sidebar.external_sql_modal.title.create_directory": "ディレクトリを新規作成", - "sidebar.external_sql_modal.title.rename_directory": "ディレクトリ名を変更", - "sidebar.external_sql_modal.action.create": "作成", - "sidebar.external_sql_modal.action.rename": "名前を変更", - "sidebar.external_sql_modal.field.directory_name": "ディレクトリ名", - "sidebar.external_sql_modal.field.sql_file_name": "SQL ファイル名", - "sidebar.external_sql_modal.validation.directory_name_required": "ディレクトリ名を入力してください", - "sidebar.external_sql_modal.validation.sql_file_name_required": "SQL ファイル名を入力してください", - "sidebar.external_sql_modal.validation.directory_name_no_separator": "ディレクトリ名にパス区切り文字を含めることはできません", - "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "ファイル名にパス区切り文字を含めることはできません", - "sidebar.external_sql_modal.help.directory": "ディレクトリは外部 SQL ディレクトリツリーにのみ表示され、SQL 以外のファイルは引き続き表示されません", - "sidebar.external_sql_modal.help.sql_file": ".sql 拡張子を省略すると自動で補完されます", - "sidebar.external_sql_modal.placeholder.directory_name": "例: reports", - "sidebar.external_sql_modal.placeholder.sql_file_name": "例: report.sql", - "sidebar.jvm.action.monitoring": "継続監視", - "sidebar.jvm.action.diagnostic": "診断強化", - "sidebar.jvm.tab.overview": "JVM 概要", - "sidebar.jvm.tab.resource": "JVM リソース", - "sidebar.jvm.tab.audit": "JVM 監査", - "sidebar.jvm.tab.diagnostic": "JVM 診断", - "sidebar.jvm.tab.monitoring": "JVM 監視", - "jvm.backend.message.connect_success": "JVM 接続に成功しました", - "jvm.backend.error.preview_confirmation_missing": "プレビュー確認トークンがありません。もう一度プレビューしてから送信してください。", - "jvm.backend.error.confirmation_token_missing": "確認トークンがありません。先にプレビュー確認を完了してください。", - "jvm.backend.error.confirmation_token_invalid": "確認トークンが無効です。もう一度プレビューして確認してください。", - "jvm.backend.error.confirmation_token_expired": "確認トークンの有効期限が切れました。もう一度プレビューして確認してください。", - "jvm.backend.error.preview_context_hash_failed": "JVM プレビューコンテキストの生成に失敗しました: {{detail}}", - "jvm.backend.error.preview_payload_hash_failed": "JVM プレビュー Payload ダイジェストの生成に失敗しました: {{detail}}", - "jvm.backend.error.change_blocked_by_guard": "現在の変更は Guard によってブロックされました", - "jvm.backend.error.change_blocked_read_only": "現在の接続は読み取り専用のため、書き込みはブロックされます", - "jvm.backend.error.change_resource_id_required": "JVM リソース ID が必要です", - "jvm.backend.error.change_action_required": "JVM 変更アクションが必要です", - "jvm.backend.error.change_reason_required": "JVM 変更理由が必要です", - "jvm.backend.error.change_confirmation_token_failed": "JVM 変更確認トークンの生成に失敗しました: {{detail}}", - "jvm.backend.error.disallowed_mode": "現在の接続では {{mode}} モードを使用できません", - "jvm.backend.error.resource_path_invalid": "JVM リソースパスが無効です: {{detail}}", - "jvm.backend.error.audit_write_blocked": "監査レコードの書き込みに失敗したため、JVM 変更をブロックしました: {{detail}}", - "jvm.backend.warning.failed_audit_write_failed": "失敗監査レコードの書き込みに失敗しました: {{detail}}", - "jvm.backend.warning.terminal_audit_write_failed": "終端監査レコードの書き込みに失敗しました: {{detail}}", - "jvm.backend.separator.message_warning": ";", - "jvm.backend.capability.reason.read_only": "現在の接続は読み取り専用です", - "jvm.backend.monitoring.error.snapshot_unsupported": "{{provider}} 監視スナップショットはまだサポートされていません", - "jvm.backend.monitoring.error.session_not_found": "{{connectionId}} {{providerMode}} の JVM 監視セッションが見つかりません", - "jvm.backend.monitoring.warning.sample_auto_stopped": "監視サンプリングが {{count}} 回連続で失敗したため、このセッションは自動停止されました", - "jvm.backend.connection_error.suggestion": "提案: {{detail}}", - "jvm.backend.connection_error.technical_detail": "技術詳細: {{detail}}", - "jvm.backend.connection_error.generic": "JVM 接続に失敗しました", - "jvm.backend.connection_error.endpoint.base_url_required": "Endpoint 接続に失敗しました: Endpoint Base URL が未入力です。", - "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Endpoint 接続に失敗しました: Endpoint Base URL の形式が正しくありません。", - "jvm.backend.connection_error.endpoint.base_url_invalid.help": "完全な `http://` または `https://` の URL を入力し、GoNavi JVM HTTP コントラクトを実装する管理 API ルートを指すようにしてください。例: `http://127.0.0.1:19090/manage/jvm`。", - "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Endpoint 接続に失敗しました: HTTP または HTTPS のみサポートされています。", - "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "Endpoint Base URL を `http://` または `https://` で始まるアドレスに変更してください。", - "jvm.backend.connection_error.endpoint.not_found.summary": "Endpoint 接続に失敗しました: ターゲットは応答しましたが、GoNavi JVM 管理 API が見つかりません。", - "jvm.backend.connection_error.endpoint.not_found.help": "Base URL が通常の業務 API、ヘルスチェック、ゲートウェイのトップではなく、JVM 管理 API ルートを指していることを確認してください。", - "jvm.backend.connection_error.endpoint.connection_refused.summary": "Endpoint 接続に失敗しました: ターゲット管理 API が待ち受けていないか、現在のアドレスに到達できません。", - "jvm.backend.connection_error.endpoint.connection_refused.help": "Base URL が GoNavi JVM HTTP コントラクトを実装する管理 API を指していることを確認し、サービスの待ち受け、ポートマッピング、ファイアウォールを確認してください。", - "jvm.backend.connection_error.endpoint.unauthorized.summary": "Endpoint 接続に失敗しました: ターゲット管理 API は応答しましたが、API Key が無効または不足しています。", - "jvm.backend.connection_error.endpoint.unauthorized.help": "接続内の Endpoint API Key がターゲットサービスの設定と一致するか確認してください。", - "jvm.backend.connection_error.endpoint.forbidden.summary": "Endpoint 接続に失敗しました: ターゲット管理 API がこのリクエストを拒否しました。", - "jvm.backend.connection_error.endpoint.forbidden.help": "現在のクライアント送信元、認証設定、アクセスポリシーが GoNavi にこの管理 API へのアクセスを許可しているか確認してください。", - "jvm.backend.connection_error.endpoint.timeout.summary": "Endpoint 接続に失敗しました: ターゲット管理 API へのアクセスがタイムアウトしました。", - "jvm.backend.connection_error.endpoint.timeout.help": "Base URL に到達できること、ターゲットサービスが起動済みであることを確認し、必要に応じて接続タイムアウトを増やしてください。", - "jvm.backend.connection_error.agent.base_url_required": "Agent 接続に失敗しました: Agent Base URL が未入力です。", - "jvm.backend.connection_error.agent.base_url_invalid.summary": "Agent 接続に失敗しました: Agent Base URL の形式が正しくありません。", - "jvm.backend.connection_error.agent.base_url_invalid.help": "完全な `http://` または `https://` の URL を入力してください。例: `http://127.0.0.1:19090/gonavi/agent/jvm`。", - "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Agent 接続に失敗しました: HTTP または HTTPS のみサポートされています。", - "jvm.backend.connection_error.agent.scheme_unsupported.help": "Agent Base URL を `http://` または `https://` で始まるアドレスに変更してください。", - "jvm.backend.connection_error.agent.connection_refused.summary": "Agent 接続に失敗しました: ターゲット Agent 管理ポートが待ち受けていないか、現在のアドレスに到達できません。", - "jvm.backend.connection_error.agent.connection_refused.help": "Java サービスが `-javaagent` で GoNavi Agent を起動していることを確認し、Base URL、ポートマッピング、ファイアウォールを確認してください。", - "jvm.backend.connection_error.agent.unauthorized.summary": "Agent 接続に失敗しました: Agent は応答しましたが、API Key が無効または不足しています。", - "jvm.backend.connection_error.agent.unauthorized.help": "接続内の Agent API Key がターゲットサービスの起動パラメータと一致するか確認してください。", - "jvm.backend.connection_error.agent.forbidden.summary": "Agent 接続に失敗しました: Agent がこのリクエストを拒否しました。", - "jvm.backend.connection_error.agent.forbidden.help": "現在のクライアント送信元、認証設定、Agent アクセスポリシーが GoNavi のアクセスを許可しているか確認してください。", - "jvm.backend.connection_error.agent.timeout.summary": "Agent 接続に失敗しました: Agent 管理ポートへのアクセスがタイムアウトしました。", - "jvm.backend.connection_error.agent.timeout.help": "ターゲットアドレスに到達できること、Agent が起動済みであることを確認し、必要に応じて接続タイムアウトを増やしてください。", - "jvm.backend.connection_error.jmx.host_required": "JMX 接続に失敗しました: ホストが未入力です。", - "jvm.backend.connection_error.jmx.port_invalid": "JMX 接続に失敗しました: ポートが無効です。1-65535 の有効なポートを入力してください。", - "jvm.backend.connection_error.jmx.java_missing.summary": "JMX 接続に失敗しました: 現在のマシンで `java` runtime が見つからないため、GoNavi は JMX helper を起動できません。", - "jvm.backend.connection_error.jmx.java_missing.help": "先に JRE/JDK をインストールするか、環境変数 `GONAVI_JMX_JAVA_BIN` で正しい `java` 実行ファイルを指定してください。", - "jvm.backend.connection_error.jmx.non_jrmp.summary": "JMX 接続に失敗しました: {{target}} は標準の JMX リモート管理ポートではなく、業務ポートまたは HTTP ポートのように見えます。", - "jvm.backend.connection_error.jmx.non_jrmp.help": "業務 `server.port` ではなく、アプリケーションが実際に公開している JMX ポートを指定してください。サービスが `-Dcom.sun.management.jmxremote` のみ有効で `jmxremote.port` を設定していない場合も、直接リモート接続はできません。", - "jvm.backend.connection_error.jmx.no_such_object.summary": "JMX 接続に失敗しました: {{target}} には RMI サービスがありますが、利用可能な JMX RMIServer ポートではありません。", - "jvm.backend.connection_error.jmx.no_such_object.help": "これは通常、RMI レジストリ、デバッグポート、または別の Java サービスポートを指定していることを意味します。`jmxremote.port` と `jmxremote.rmi.port` の設定を確認してください。", - "jvm.backend.connection_error.jmx.connection_reset.summary": "JMX 接続に失敗しました: {{target}} のサービスが接続を閉じました。このポートは互換性のある標準 JMX RMI ポートではありません。", - "jvm.backend.connection_error.jmx.connection_reset.help": "設定したポートが JVM の公開 JMX ポートであり、業務ポート、デバッグポート、プロキシ転送ポートではないことを確認してください。", - "jvm.backend.connection_error.jmx.connection_refused.summary": "JMX 接続に失敗しました: {{target}} に接続できません。ポートが待ち受けていないか、ネットワークに到達できません。", - "jvm.backend.connection_error.jmx.connection_refused.help": "ターゲット JVM でリモート JMX が有効であることを確認し、ホスト、ファイアウォール、ポートマッピング、SSH、プロキシ設定を確認してください。", - "jvm.backend.connection_error.jmx.auth.summary": "JMX 接続に失敗しました: {{target}} は認証が必要か、現在の認証情報が無効です。", - "jvm.backend.connection_error.jmx.auth.help": "ターゲット JMX が認証を無効にしているか確認してください。認証が必要な場合は、接続前にユーザー名とパスワードを入力してください。", - "jvm.backend.connection_error.jmx.timeout.summary": "JMX 接続に失敗しました: {{target}} への接続がタイムアウトしました。", - "jvm.backend.connection_error.jmx.timeout.help": "ポートに到達できること、ネットワークがブロックされていないことを確認し、必要に応じて接続タイムアウトを増やしてください。", - "jvm.backend.diagnostic.error.disabled": "この接続では JVM 診断強化モードが有効ではありません", - "jvm.backend.diagnostic.error.session_id_required": "診断セッション ID が必要です。先にセッションを作成してください。", - "jvm.backend.diagnostic.error.command_required": "診断コマンドは空にできません", - "jvm.backend.diagnostic.error.cancel_identifiers_required": "キャンセルコマンドには sessionId と commandId が必要です", - "jvm.backend.diagnostic.error.audit_write_blocked": "診断監査レコードの書き込みに失敗したため、コマンド実行をブロックしました: {{detail}}", - "jvm.backend.diagnostic.error.execute_canceled": "診断実行リクエストがキャンセルされました: {{detail}}", - "jvm.backend.diagnostic.error.transport_unsupported": "サポートされていない JVM 診断トランスポートです: {{transport}}", - "jvm.backend.diagnostic.warning.audit_write_failed": "監査レコードの書き込みに失敗しました: {{detail}}", - "jvm.backend.diagnostic.message.command_completed": "診断コマンドの実行が完了しました", - "jvm.backend.diagnostic.message.cancel_requested": "キャンセルリクエストを送信しました。診断ブリッジ側でコマンドが終了するのを待っています", - "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas コマンドの実行が完了しました", - "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas コマンドはキャンセルされました", - "jvm.backend.diagnostic.policy.observe_not_allowed": "この接続では観察系診断コマンドが有効ではありません: {{command}}", - "jvm.backend.diagnostic.policy.trace_not_allowed": "この接続ではトレース系診断コマンドが有効ではありません: {{command}}", - "jvm.backend.diagnostic.policy.mutating_not_allowed": "この接続では高リスク診断コマンドが有効ではありません: {{command}}", - "jvm.backend.diagnostic.policy.read_only_observe_only": "現在の接続は読み取り専用です。観察系診断コマンドのみ許可されます", - "jvm.backend.diagnostic.policy.multiline_not_supported": "診断コマンドは改行または複数コマンド入力をサポートしていません", - "jvm.backend.diagnostic.arthas.base_url_required": "Arthas Tunnel のアドレスが必要です", - "jvm.backend.diagnostic.arthas.base_url_invalid": "Arthas Tunnel のアドレスが不正です: {{detail}}", - "jvm.backend.diagnostic.arthas.target_id_required": "Arthas Tunnel の target ID が必要です (targetId / agentId)", - "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel は http/https/ws/wss アドレスのみサポートします: {{scheme}}", - "jvm.backend.diagnostic.arthas.session_missing": "診断セッションが存在しません。Arthas Tunnel セッションを再作成してください。", - "jvm.backend.diagnostic.arthas.session_config_changed": "Arthas Tunnel セッション設定が変更されています。診断セッションを再作成してください。", - "jvm.backend.diagnostic.arthas.command_already_running": "この Arthas Tunnel セッションではすでにコマンドが実行中です。完了を待つか先にキャンセルしてください。", - "jvm.backend.diagnostic.arthas.no_running_command": "この Arthas Tunnel セッションには実行中のコマンドがありません。", - "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "この Arthas Tunnel セッションのアクティブコマンドはキャンセル対象コマンドと一致しません。", - "jvm.backend.diagnostic.arthas.connection_not_ready": "Arthas Tunnel 接続はまだ準備できていません。後でもう一度試してください。", - "jvm.backend.diagnostic.arthas.http_failed": "Arthas Tunnel 接続に失敗しました: HTTP {{status}}", - "jvm.backend.diagnostic.arthas.connect_timeout": "Arthas Tunnel WebSocket 接続は {{timeout}} 応答がなくタイムアウトしました", - "jvm.backend.diagnostic.arthas.connect_canceled": "Arthas Tunnel WebSocket 接続はキャンセルされました", - "jvm.backend.diagnostic.arthas.connect_failed": "Arthas Tunnel WebSocket 接続に失敗しました: {{detail}}", - "jvm.backend.diagnostic.arthas.request_encode_failed": "Arthas Tunnel リクエストのエンコードに失敗しました: {{detail}}", - "jvm.backend.diagnostic.arthas.write_deadline_failed": "Arthas Tunnel の書き込み期限設定に失敗しました: {{detail}}", - "jvm.backend.diagnostic.arthas.send_timeout": "Arthas Tunnel 端末コマンドの送信は {{timeout}} 応答がなくタイムアウトしました", - "jvm.backend.diagnostic.arthas.send_canceled": "Arthas Tunnel 端末コマンドの送信はキャンセルされました", - "jvm.backend.diagnostic.arthas.send_failed": "Arthas Tunnel 端末コマンドの送信に失敗しました: {{detail}}", - "jvm.backend.diagnostic.arthas.read_deadline_failed": "Arthas Tunnel の読み取り期限設定に失敗しました: {{detail}}", - "jvm.backend.diagnostic.arthas.read_timeout": "Arthas Tunnel 出力の読み取りは {{timeout}} 応答がなくタイムアウトしました", - "jvm.backend.diagnostic.arthas.read_canceled": "Arthas Tunnel 出力の読み取りはキャンセルされました", - "jvm.backend.diagnostic.arthas.read_failed": "Arthas Tunnel 出力の読み取りに失敗しました: {{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed": "Arthas Tunnel 接続が閉じられました: {{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed_code": "Arthas Tunnel 接続が閉じられました: code={{code}}", - "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel コマンドは {{timeout}} でタイムアウトしました", - "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel コマンドはキャンセルされました", - "jvm.backend.diagnostic.arthas.target_not_found": "ターゲットインスタンスが見つかりません。targetId / agentId が正しいことと、対応する tunnel client がオンラインであることを確認してください。", - "jvm.backend.diagnostic.arthas.target_not_found_with_id": "ターゲットインスタンス {{target}} が見つかりません。targetId / agentId が正しいことと、対応する tunnel client がオンラインであることを確認してください。", - "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Arthas Tunnel 端末コマンドのエンコードに失敗しました: {{detail}}", - "jvm_resource.error.connection_missing": "接続が存在しないか、削除されています。", - "jvm_resource.error.resource_path_empty": "リソースパスが空です。", - "jvm_resource.error.get_value_unavailable": "このビルドでは JVM 値の読み取りを利用できません。", - "jvm_resource.error.read_failed": "JVM リソースの読み取りに失敗しました。", - "jvm_resource.error.ai_plan_missing_context": "AI プランに生成元コンテキストがありません。対象の JVM リソースページで再生成してから適用してください。", - "jvm_resource.error.ai_plan_context_mismatch": "現在の JVM タブは AI プランの生成元コンテキストと一致しないため、自動適用を拒否しました。", - "jvm_resource.error.ai_plan_to_draft_failed": "AI プランを JVM プレビュー草稿に変換できません。", - "jvm_resource.message.ai_plan_draft_filled": "AI プランから {{resourceId}} の草稿を入力しました。書き込みを確定する前に変更をプレビューしてください。", - "jvm_ai_plan.error.resource_locator_missing": "AI プランに使用可能なリソース特定情報がありません。", - "jvm_ai_plan.error.reason_missing": "AI プランに変更理由がありません。", - "jvm_ai_plan.error.action_missing": "AI プランに実行可能な action がありません。", - "jvm_ai_plan.error.payload_json_object_required": "現在の JVM プレビューでは payload は JSON オブジェクトのままである必要があります。", - "jvm_ai_plan.snapshot.unavailable": "現在のリソーススナップショットはまだ正常に読み込まれていません。", - "jvm_ai_plan.actions.none": "現在のリソースはサポートされるアクションを宣言していません。プランを生成する場合は、スナップショットから明確に推測できる場合だけ action を指定し、payload は JSON オブジェクトのままにしてください。", - "jvm_ai_plan.actions.label": " ({{label}})", - "jvm_ai_plan.actions.description": ":{{description}}", - "jvm_ai_plan.actions.payload_fields": ";payload フィールド:{{fields}}", - "jvm_ai_plan.actions.field_separator": "、", - "jvm_ai_plan.actions.required_suffix": "(required)", - "jvm_ai_plan.prompt.resource_path_missing": "(リソースパス未指定)", - "jvm_ai_plan.prompt.environment_unknown": "unknown", - "jvm_ai_plan.prompt.intro": "次の JVM リソースを分析し、GoNavi の「変更プレビュー」で使える構造化された変更プランを生成してください。", - "jvm_ai_plan.prompt.connection_name": "接続名:{{connectionName}}", - "jvm_ai_plan.prompt.target_host": "対象ホスト:{{host}}", - "jvm_ai_plan.prompt.provider_mode": "Provider モード:{{providerMode}}", - "jvm_ai_plan.prompt.environment": "実行環境:{{environmentLabel}}", - "jvm_ai_plan.prompt.connection_policy.read_only": "読み取り専用接続です。生成できるのはプランとリスク分析のみで、実行済みと仮定してはいけません。", - "jvm_ai_plan.prompt.connection_policy.writable": "書き込み可能な接続ですが、変更は必ず先にプレビューし、人が確認する必要があります。", - "jvm_ai_plan.prompt.connection_policy": "接続ポリシー:{{policy}}", - "jvm_ai_plan.prompt.resource_path": "現在のリソースパス:{{resourcePath}}", - "jvm_ai_plan.prompt.snapshot_title": "現在のリソーススナップショット:", - "jvm_ai_plan.prompt.supported_actions_title": "現在のリソースでサポートされるアクション:", - "jvm_ai_plan.prompt.output_requirements_title": "出力要件:", - "jvm_ai_plan.prompt.requirement.single_json_block": "1. 短い分析を先に含めてもかまいませんが、回答には ```json コードブロックをちょうど 1 つだけ含めてください。", - "jvm_ai_plan.prompt.requirement.fields": "2. コードブロック内の JSON フィールドは厳密に targetType、selector、action、payload、reason のみです。", - "jvm_ai_plan.prompt.requirement.resource_path": "3. selector.resourcePath は現在のリソースパス {{resourcePath}} を優先してください。別のパスを作り出さないでください。", - "jvm_ai_plan.prompt.requirement.action": "4. action は「現在のリソースでサポートされるアクション」から選ぶことを優先してください。サポートされるアクションが宣言されていない場合のみ、スナップショットから推測できます。", - "jvm_ai_plan.prompt.requirement.payload": "5. payload は JSON オブジェクトとしてラップしてください。スクリプト、コマンド、生のバイナリは出力しないでください。プレーンテキスト値が必要な場合も {\"format\":\"text\",\"value\":\"...\"} としてラップしてください。", - "jvm_ai_plan.prompt.requirement.no_execute": "6. 変更をすでに実行したと主張せず、スクリプトやコマンドも出力しないでください。", - "jvm_ai_plan.prompt.example_title": "JSON 例:", - "jvm_ai_plan.prompt.example_reason": "キャッシュの不正値を修正", - "jvm_resource.error.reason_required": "変更理由を入力してください。", - "jvm_resource.error.payload_object_required": "Payload は JSON オブジェクトである必要があります。", - "jvm_resource.error.resource_id_empty": "リソース ID が空のため、変更草稿を作成できません。", - "jvm_resource.error.preview_unavailable": "このビルドでは JVM 変更プレビューを利用できません。", - "jvm_resource.error.draft_invalid": "変更草稿が不正です。", - "jvm_resource.error.preview_failed": "JVM 変更のプレビューに失敗しました。", - "jvm_resource.error.preview_result_invalid": "プレビュー結果の形式が正しくありません。", - "jvm_resource.error.apply_unavailable": "このビルドでは JVM 変更の実行を利用できません。", - "jvm_resource.error.preview_required": "実行を確定する前に変更をプレビューしてください。", - "jvm_resource.error.context_changed": "リソースコンテキストが変更されています。実行前にもう一度プレビューしてください。", - "jvm_resource.error.confirmation_missing": "確認トークンがありません。実行前にもう一度プレビューしてください。", - "jvm_resource.presentation.action.set.label": "プロパティを設定", - "jvm_resource.presentation.action.set.description": "現在のリソースが公開する書き込み可能なプロパティ値を更新します。", - "jvm_resource.presentation.action.invoke.label": "操作を呼び出す", - "jvm_resource.presentation.action.invoke.description": "現在のリソースが公開する管理操作を呼び出します。", - "jvm_resource.presentation.action.put.label": "リソースへ書き込み", - "jvm_resource.presentation.action.put.description": "payload の内容を現在の JVM リソースに書き込みます。", - "jvm_resource.presentation.action.clear.label": "リソースをクリア", - "jvm_resource.presentation.action.clear.description": "現在の JVM リソース内のデータまたは状態をクリアします。", - "jvm_resource.presentation.action.evict.label": "キャッシュを退避", - "jvm_resource.presentation.action.evict.description": "対象のキャッシュ項目を現在の JVM ランタイムから退避します。", - "jvm_resource.presentation.action.remove.label": "項目を削除", - "jvm_resource.presentation.action.remove.description": "現在のリソースから指定した項目を削除します。", - "jvm_resource.presentation.action.delete.label": "リソースを削除", - "jvm_resource.presentation.action.delete.description": "現在のリソースを削除または登録解除します。", - "jvm_resource.presentation.action.refresh.label": "リソースを更新", - "jvm_resource.presentation.action.refresh.description": "現在のリソースのランタイム状態を更新します。", - "jvm_resource.presentation.action.reload.label": "再読み込み", - "jvm_resource.presentation.action.reload.description": "現在のリソースまたはその設定を再読み込みします。", - "jvm_resource.presentation.action.reset.label": "状態をリセット", - "jvm_resource.presentation.action.reset.description": "現在のリソースを初期状態または既定状態に戻します。", - "jvm_resource.presentation.unnamed_action": "名前のない操作", - "jvm_resource.presentation.risk.low": "低", - "jvm_resource.presentation.risk.medium": "中", - "jvm_resource.presentation.risk.high": "高", - "jvm_resource.presentation.risk.unknown": "不明", - "jvm_resource.presentation.audit_result.unknown": "不明", - "jvm_resource.presentation.audit_result.applied": "実行済み", - "jvm_resource.presentation.audit_result.success": "成功", - "jvm_resource.presentation.audit_result.warning": "警告", - "jvm_resource.presentation.audit_result.blocked": "ブロック済み", - "jvm_resource.presentation.audit_result.failed": "失敗", - "jvm_resource.error.apply_failed": "JVM 変更の実行に失敗しました。", - "jvm_resource.message.apply_success": "JVM 変更を実行しました。", - "jvm_resource.title": "JVM リソースワークベンチ", - "jvm_resource.badge.read_only": "読み取り専用接続", - "jvm_resource.badge.writable": "書き込み可能な接続", - "jvm_resource.action.audit": "監査ログ", - "jvm_resource.action.generate_ai_plan": "AI プランを生成", - "jvm_resource.action.ask_ai_plan": "AI にプランを作成させる", - "jvm_resource.card.snapshot": "リソーススナップショット", - "jvm_resource.field.resource_id": "リソース ID", - "jvm_resource.field.resource_type": "リソース種別", - "jvm_resource.field.format": "形式", - "jvm_resource.field.version": "バージョン", - "jvm_resource.field.available_actions": "利用可能な操作", - "jvm_resource.section.resource_value": "リソース値", - "jvm_resource.section.metadata": "メタデータ", - "jvm_resource.empty.no_resource_data": "リソースデータはありません", - "jvm_resource.card.change_draft": "変更草稿", - "jvm_resource.field.resource_path": "リソースパス", - "jvm_resource.field.target_resource": "対象リソース", - "jvm_resource.field.resource_version": "リソースバージョン", - "jvm_resource.field.draft_source": "草稿の作成元", - "jvm_resource.draft_source.ai_plan": "AI 支援の草稿", - "jvm_resource.draft_source.manual": "手動編集", - "jvm_resource.section.supported_actions": "リソースでサポートされる操作", - "jvm_resource.field.payload_fields": "Payload フィールド: ", - "jvm_resource.marker.required_suffix": "(必須)", - "jvm_resource.list_separator": "、", - "jvm_resource.field.action": "操作", - "jvm_resource.placeholder.action_jmx": "例: set または invoke", - "jvm_resource.placeholder.action_default": "例: put / clear / evict", - "jvm_resource.message.current_action": "現在の操作: ", - "jvm_resource.field.reason": "変更理由", - "jvm_resource.placeholder.reason": "この JVM リソース変更の理由を入力", - "jvm_resource.field.payload": "Payload(JSON)", - "jvm_resource.message.payload_hint": "プレビューでは現在の草稿を使用します。実行確定では直近に成功したプレビュー時の内容を使用します。草稿を変更した後は再度プレビューしてください。", - "jvm_resource.message.payload_template_applied": "現在の操作に合わせた推奨テンプレートを入力しました。", - "jvm_resource.action.preview_change": "変更をプレビュー", - "jvm_overview.connection_missing.message": "接続が存在しないか、削除されています", - "jvm_overview.error.capability_load_failed": "JVM モード能力の読み取りに失敗しました", - "jvm_overview.eyebrow": "JVM ランタイム", - "jvm_overview.title": "JVM ランタイム概要", - "jvm_overview.badge.read_only": "読み取り専用接続", - "jvm_overview.badge.writable": "書き込み可能な接続", - "jvm_overview.card.connection_summary": "接続サマリー", - "jvm_overview.card.mode_capability": "モード能力", - "jvm_overview.field.current_mode": "現在のモード", - "jvm_overview.field.allowed_modes": "許可モード", - "jvm_overview.field.jmx_address": "JMX アドレス", - "jvm_overview.field.endpoint": "Endpoint", - "jvm_overview.field.agent": "Agent", - "jvm_overview.field.resource_browse": "リソース閲覧", - "jvm_overview.value.enabled": "有効", - "jvm_overview.value.not_configured": "未設定", - "jvm_overview.value.resource_browse_lazy_load": "サイドバーでモードノードを展開した後に遅延読み込みします", - "jvm_overview.empty.capabilities": "モード能力データはありません", - "jvm_overview.capability.can_browse": "閲覧可能", - "jvm_overview.capability.cannot_browse": "閲覧不可", - "jvm_overview.capability.writable": "書き込み可", - "jvm_overview.capability.read_only": "読み取り専用", - "jvm_overview.capability.preview_supported": "プレビュー対応", - "jvm_overview.capability.preview_unsupported": "プレビュー非対応", - "jvm_monitoring_dashboard.connection_missing.message": "接続が存在しないか、削除されています", - "jvm_monitoring_dashboard.error.history_unavailable": "JVMGetMonitoringHistory バックエンドメソッドは使用できません", - "jvm_monitoring_dashboard.error.history_load_failed": "監視履歴の読み込みに失敗しました", - "jvm_monitoring_dashboard.error.start_unavailable": "JVMStartMonitoring バックエンドメソッドは使用できません", - "jvm_monitoring_dashboard.error.start_failed": "監視の開始に失敗しました", - "jvm_monitoring_dashboard.error.stop_unavailable": "JVMStopMonitoring バックエンドメソッドは使用できません", - "jvm_monitoring_dashboard.error.stop_failed": "監視の停止に失敗しました", - "jvm_monitoring_dashboard.title": "JVM 継続監視", - "jvm_monitoring_dashboard.status.sampling": "サンプリング中", - "jvm_monitoring_dashboard.status.stopped": "停止中", - "jvm_monitoring_dashboard.action.refresh": "再読み込み", - "jvm_monitoring_dashboard.action.start": "監視を開始", - "jvm_monitoring_dashboard.action.stop": "監視を停止", - "jvm_monitoring_dashboard.degraded.message": "監視能力が低下しています", - "jvm_monitoring_dashboard.empty.title": "継続監視はまだ開始されていません", - "jvm_monitoring_dashboard.empty.description": "「監視を開始」をクリックすると、GoNavi は現在のセッション内でこの接続のサンプリング結果を保持し続けます。タブを切り替えてもサンプリングは停止しません。", - "jvm_diagnostic.workbench.eyebrow": "JVM 診断", - "jvm_diagnostic.workbench.title": "JVM 診断ワークベンチ", - "jvm_diagnostic.workbench.status.session_established": "セッション確立済み", - "jvm_diagnostic.workbench.status.no_session": "セッションなし", - "jvm_diagnostic.workbench.status.command_running": "コマンド実行中", - "jvm_diagnostic.workbench.action.probe": "能力を確認", - "jvm_diagnostic.workbench.action.restart_session": "セッションを再作成", - "jvm_diagnostic.workbench.action.start_session": "セッションを作成", - "jvm_diagnostic.workbench.action.execute_command": "コマンドを実行", - "jvm_diagnostic.workbench.action.cancel_command": "コマンドをキャンセル", - "jvm_diagnostic.connection_missing.message": "接続が存在しないか、削除されています", - "jvm_diagnostic.error.probe_unavailable": "JVMProbeDiagnosticCapabilities バックエンドメソッドは利用できません", - "jvm_diagnostic.error.probe_failed": "診断能力の確認に失敗しました", - "jvm_diagnostic.error.start_unavailable": "JVMStartDiagnosticSession バックエンドメソッドは使用できません", - "jvm_diagnostic.error.start_failed": "診断セッションの作成に失敗しました", - "jvm_diagnostic.error.history_load_failed": "診断履歴の読み込みに失敗しました", - "jvm_diagnostic.error.execute_unavailable": "JVMExecuteDiagnosticCommand バックエンドメソッドは使用できません", - "jvm_diagnostic.error.execute_session_required": "コマンドを実行する前に診断セッションを作成してください", - "jvm_diagnostic.error.execute_command_required": "診断コマンドは必須です", - "jvm_diagnostic.error.execute_failed": "診断コマンドの実行に失敗しました", - "jvm_diagnostic.error.cancel_unavailable": "JVMCancelDiagnosticCommand バックエンドメソッドは使用できません", - "jvm_diagnostic.error.cancel_failed": "診断コマンドのキャンセルに失敗しました", - "jvm_diagnostic.message.cancel_sent": "キャンセルリクエストを送信しました", - "jvm_diagnostic.session.default_title": "JVM 診断コンソール", - "jvm_diagnostic.session.default_reason": "コンソールから開始したセッション", - "jvm_diagnostic.ai_plan.error.transport_mismatch": "AI プランの診断 transport は {{planTransport}} ですが、現在のコンソール {{currentTransport}} と一致しません。プランを再生成してから適用してください。", - "jvm_diagnostic.ai_plan.message.filled": "AI 診断プランをコンソールに反映しました", - "jvm_diagnostic.session_capability.title": "セッションと能力", - "jvm_diagnostic.session_capability.description": "現在のチャネル、権限、クイックメンテナンス", - "jvm_diagnostic.session_capability.status.session_established": "セッション確立済み", - "jvm_diagnostic.session_capability.status.no_session": "セッションなし", - "jvm_diagnostic.session_capability.status.command_running": "コマンド実行中", - "jvm_diagnostic.session_capability.status.idle": "アイドル", - "jvm_diagnostic.session_capability.session_id_hint": "セッション作成後、ここにセッション ID が表示されます。", - "jvm_diagnostic.session_capability.note": "能力確認ではコマンドを実行しません。コマンド実行前にセッションを作成する必要があります。監査履歴には最近のコマンド記録が表示され、セッション未作成時でも過去セッションの記録が含まれる場合があります。", - "jvm_diagnostic.session_capability.action.clear_output": "出力をクリア", - "jvm_diagnostic.session_capability.action.refresh_history": "履歴を再読み込み", - "jvm_diagnostic.workflow.probe.title": "能力を確認", - "jvm_diagnostic.workflow.probe.description": "診断チャネル、ストリーミング出力、コマンド権限だけを読み取り、セッションは作成しません。", - "jvm_diagnostic.workflow.session.title": "セッションを作成", - "jvm_diagnostic.workflow.session.description": "診断コンテキストを作成し、以降のコマンドをこのセッションにバインドします。", - "jvm_diagnostic.workflow.command.title": "コマンドを実行", - "jvm_diagnostic.workflow.command.description": "セッション作成後にコマンドエディター、理由入力、テンプレートを表示します。", - "jvm_diagnostic.capability.empty.title": "能力は未確認です", - "jvm_diagnostic.capability.empty.description": "能力確認はチャネル権限とコマンドポリシーだけを読み取り、セッション作成やコマンド実行は行いません。", - "jvm_diagnostic.capability_result.title": "能力確認結果", - "jvm_diagnostic.capability_result.session_allowed": "セッション作成可", - "jvm_diagnostic.capability_result.session_denied": "セッション作成不可", - "jvm_diagnostic.capability_result.streaming_supported": "ストリーミング出力", - "jvm_diagnostic.capability_result.streaming_unsupported": "ストリーミング非対応", - "jvm_diagnostic.capability_result.observe_allowed": "Observe コマンド", - "jvm_diagnostic.capability_result.observe_denied": "Observe 禁止", - "jvm_diagnostic.capability_result.trace_allowed": "Trace コマンド", - "jvm_diagnostic.capability_result.mutating_allowed": "高リスクコマンド", - "jvm_diagnostic.no_session.title": "診断セッションを開始", - "jvm_diagnostic.no_session.description": "先にセッションを作成してから、コマンドエディターとテンプレートを表示します", - "jvm_diagnostic.no_session.alert.title": "セッション作成後にコマンド入力を表示します", - "jvm_diagnostic.no_session.alert.description": "セッションにバインドされていない状態でコマンドを実行できると誤解するのを防ぎ、監査記録、出力ストリーム、キャンセル操作を同じセッションに結び付けます。", - "jvm_diagnostic.no_session.action.start": "診断セッションを作成", - "jvm_diagnostic.no_session.action.probe": "先に能力を確認", - "jvm_diagnostic.command_input.title": "コマンド入力", - "jvm_diagnostic.command_input.description": "自動補完に対応しています。Ctrl/Cmd + Enter で実行します。", - "jvm_diagnostic.command_input.command_label": "診断コマンド", - "jvm_diagnostic.command_input.command_description": "Arthas/診断コマンドを入力します。例: thread -n 5、dashboard、jvm。下のテンプレートでワンクリック入力できます。", - "jvm_diagnostic.command_input.reason_label": "理由(任意)", - "jvm_diagnostic.command_input.reason_placeholder": "例: 高 CPU の調査、ブロックされたスレッドの確認、遅いメソッドの特定", - "jvm_diagnostic.command_input.reason_help": "監査記録と AI コンテキストに使用されます。対象 JVM へ Arthas コマンドとして送信されることはありません。", - "jvm_diagnostic.command_templates.title": "コマンドテンプレート", - "jvm_diagnostic.output.title": "リアルタイム出力", - "jvm_diagnostic.output.description": "バックエンドイベントストリームに従って追記表示", - "jvm_diagnostic.output.empty.description": "リアルタイム出力はまだありません。コマンド実行後、バックエンドの出力が時系列でここに表示されます。", - "jvm_diagnostic.output.local_pending": "診断コマンドを送信しました。バックエンド出力を待機中: {{command}}", - "jvm_diagnostic.output.frontend_completed_fallback": "診断コマンド呼び出しは返りましたが、バックエンドの終端イベントを受信していません。フロントエンドがフォールバックとして待機状態を終了しました。", - "jvm_diagnostic.presentation.category.observe": "観測系コマンド", - "jvm_diagnostic.presentation.category.trace": "トレース系コマンド", - "jvm_diagnostic.presentation.category.mutating": "高リスクコマンド", - "jvm_diagnostic.presentation.phase.running": "実行中", - "jvm_diagnostic.presentation.phase.completed": "完了", - "jvm_diagnostic.presentation.phase.failed": "失敗", - "jvm_diagnostic.presentation.phase.canceling": "キャンセル中", - "jvm_diagnostic.presentation.phase.diagnostic": "診断イベント", - "jvm_diagnostic.presentation.event.diagnostic": "診断出力", - "jvm_diagnostic.presentation.event.chunk": "出力チャンク", - "jvm_diagnostic.presentation.event.done": "実行終了", - "jvm_diagnostic.presentation.chunk.empty_event": "空のイベント", - "jvm_diagnostic.history.title": "監査履歴", - "jvm_diagnostic.history.description": "最近のコマンドと実行状態", - "jvm_diagnostic.history.current_session": "現在のセッション", - "jvm_diagnostic.history.no_session": "診断セッションはまだありません", - "jvm_diagnostic.history.recent_records": "最近の記録", - "jvm_diagnostic.history.reason_missing": "診断理由は入力されていません", - "jvm_diagnostic.history.no_records": "診断履歴はありません", - "jvm_audit.eyebrow": "JVM 監査", - "jvm_audit.title": "JVM 変更監査", - "jvm_audit.card.records": "監査レコード", - "jvm_audit.description.current_range": "現在の範囲: 最新 {{limit}} 件", - "jvm_audit.option.last_records": "最新 {{limit}} 件", - "jvm_audit.action.refresh": "再読み込み", - "jvm_audit.column.time": "時刻", - "jvm_audit.column.mode": "モード", - "jvm_audit.column.action": "操作", - "jvm_audit.column.resource": "リソース", - "jvm_audit.column.reason": "理由", - "jvm_audit.column.source": "ソース", - "jvm_audit.column.result": "結果", - "jvm_audit.source.ai_plan": "AI 支援", - "jvm_audit.source.manual": "手動", - "jvm_audit.error.connection_missing": "接続が存在しないか、削除されています。", - "jvm_audit.error.backend_unavailable": "JVMListAuditRecords バックエンドメソッドを利用できません。", - "jvm_audit.error.load_failed": "JVM 監査レコードの読み込みに失敗しました{{separator}}{{detail}}", - "jvm_audit.empty.load_failed": "現在、監査レコードを読み込めません", - "jvm_audit.empty.no_records": "監査レコードはありません", - "query_editor.placeholder.connection": "接続を選択", - "query_editor.placeholder.database": "データベースを選択", - "query_editor.max_rows.tooltip": "最大返却行数。SELECT には自動で LIMIT を付け、大きすぎる結果セットで UI が固まるのを防ぎます。", - "query_editor.max_rows.option_500": "最大行数: 500", - "query_editor.max_rows.option_1000": "最大行数: 1000", - "query_editor.max_rows.option_5000": "最大行数: 5000", - "query_editor.max_rows.option_20000": "最大行数: 20000", - "query_editor.max_rows.option_unlimited": "最大行数: 無制限", - "query_editor.action.run": "実行", - "query_editor.action.run_with_shortcut": "実行({{shortcut}})", - "query_editor.action.stop": "停止", - "query_editor.action.save": "保存", - "query_editor.action.save_with_shortcut": "保存({{shortcut}})", - "query_editor.completion.documentation.comment": "コメント: {{comment}}", - "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + クリックでこのデータベースに切り替え", - "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + クリックでこのテーブルを開く", - "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + クリックでこのビューを開く", - "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + クリックでこのマテリアライズドビューを開く", - "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + クリックでこのトリガーを開く", - "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + クリックでこのストアドプロシージャを開く", - "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + クリックでこの関数を開く", - "query_editor.object_info.database": "データベース", - "query_editor.object_info.table": "テーブル", - "query_editor.object_info.column": "カラム", - "query_editor.object_info.materialized_view": "マテリアライズドビュー", - "query_editor.object_info.label.database": "データベース", - "query_editor.object_info.label.table": "テーブル", - "query_editor.object_info.label.type": "型", - "query_editor.object_info.label.schema": "スキーマ", - "query_editor.object_info.label.separator": ":", - "query_editor.action.more": "その他", - "query_editor.action.format": "整形", - "query_editor.action.format_sql": "SQL を整形", - "query_editor.action.resize_editor": "ドラッグして高さを変更", - "query_editor.action.ai_generate_sql": "AI で SQL を生成", - "query_editor.action.ai_explain_sql": "AI で SQL を説明", - "query_editor.action.ai_optimize_sql": "AI で SQL を最適化", - "query_editor.action.ai_generate_sql_menu": "SQL を生成", - "query_editor.action.ai_explain_sql_menu": "SQL を説明", - "query_editor.action.ai_optimize_sql_menu": "SQL を最適化", - "query_editor.action.ai_schema_analysis": "スキーマ分析", - "query_editor.action.show_results_panel": "結果エリアを表示", - "query_editor.action.hide_results_panel": "結果エリアを非表示", - "query_editor.action.show_results_panel_with_shortcut": "結果エリアを表示({{shortcut}})", - "query_editor.action.hide_results_panel_with_shortcut": "結果エリアを非表示({{shortcut}})", - "query_editor.action.results": "結果", - "query_editor.transaction.delay.immediate": "即時", - "query_editor.transaction.mode.tooltip": "DBeaver と同様に、SQL エディターで INSERT/UPDATE/DELETE/MERGE/REPLACE などの DML を実行すると、まず GoNavi の管理トランザクションに入ります。手動モードでは commit/rollback が必要で、自動モードでは実行成功後に自動で COMMIT します。", - "query_editor.transaction.mode.manual": "手動", - "query_editor.transaction.mode.auto": "自動", - "query_editor.transaction.status.auto_commit_countdown": "{{seconds}}s 後に自動コミット", - "query_editor.transaction.status.auto_committing": "自動コミット中", - "query_editor.transaction.action.commit": "コミット", - "query_editor.transaction.action.commit_with_count": "コミット ({{count}})", - "query_editor.transaction.action.rollback": "ロールバック", - "query_editor.transaction.message.pending_managed_transaction": "SQL エディターには未コミットのトランザクションがあります。新しい DML 文を実行する前にコミットまたはロールバックしてください。", - "query_editor.action.show_object_info": "オブジェクト情報を表示", - "query_editor.action.rename_query": "クエリ名を変更", - "query_editor.action.export_sql_file": "SQL ファイルをエクスポート", - "query_editor.format.keyword_upper": "キーワードを大文字にする", - "query_editor.format.keyword_lower": "キーワードを小文字にする", - "query_editor.format.restore_last_format": "前回の整形を元に戻す", - "query_editor.format.snippet_settings": "スニペット設定...", - "query_editor.format.shortcut_settings": "ショートカット設定...", - "query_editor.message.format_failed": "整形に失敗しました: SQL 構文が正しくない可能性があります。", - "query_editor.message.no_format_restore_snapshot": "元に戻せる整形前の SQL はありません。", - "query_editor.message.format_restore_success": "整形前の SQL に戻しました。", - "query_editor.message.page_query_failed": "ページ取得に失敗しました: {{error}}", - "query_editor.message.page_query_empty": "ページ取得で結果セットが返されませんでした。", - "query_editor.message.refresh_failed": "再読み込みに失敗しました: {{error}}", - "query_editor.message.select_database_first": "先にデータベースを選択してください。", - "query_editor.message.connection_not_found": "接続が見つかりません。", - "query_editor.message.unsupported_source": "このデータソースは SQL クエリエディターに対応していません。専用ページを使用してください。", - "query_editor.message.no_executable_sql": "実行できる SQL がありません。", - "query_editor.message.no_selectable_sql": "選択できる SQL ステートメントがありません。", - "query_editor.message.statement_failed_prefix": "{{index}} 番目のステートメントが失敗しました: ", - "query_editor.message.execution_success": "実行に成功しました。", - "query_editor.message.execution_multi_success": "{{statements}} 個のステートメントを実行し、{{results}} 個の結果セットを生成しました。", - "query_editor.message.execution_result_sets_success": "実行が完了し、{{results}} 個の結果セットを生成しました。", - "query_editor.message.execution_failed_with_error": "クエリ実行に失敗しました: {{error}}", - "query_editor.message.cancel_no_running": "キャンセルできる実行中のクエリはありません。", - "query_editor.message.cancel_success": "クエリをキャンセルしました。", - "query_editor.message.cancel_failed": "クエリのキャンセルに失敗しました: {{error}}", - "query_editor.message.read_only_no_safe_locator": "主キーまたは利用可能な一意インデックスが検出されなかったため、安全に変更をコミットできません。", - "query_editor.message.read_only_index_metadata_unavailable": "一意インデックスのメタデータを読み込めないため、安全に変更をコミットできません。", - "query_editor.message.read_only_table_locator_metadata_unavailable": "{{table}} の主キー/一意インデックスのメタデータを読み込めないため、安全に変更をコミットできません。", - "query_editor.message.read_only_system_metadata": "システムメタデータのクエリ結果は読み取り専用のままです。", - "query_editor.message.read_only_oracle_rowid_injection_unavailable": "Oracle クエリで * を使用しているため、ROWID ロケーター列を自動挿入できず、読み取り専用のままにしています。", - "query_editor.message.read_only_warning_with_detail": "クエリ結果は読み取り専用のままです: {{detail}}", - "query_editor.message.object_info_target_not_found": "現在のカーソル位置に認識できるテーブルまたはカラムがありません。", - "query_editor.message.insert_success": "現在のカーソル位置にコードを挿入しました。", - "query_editor.message.append_success": "コードを追記しました。", - "query_editor.message.saved": "クエリを保存しました。", - "query_editor.message.sql_file_saved": "SQL ファイルを保存しました。", - "query_editor.message.save_sql_file_failed": "SQL ファイルの保存に失敗しました: {{error}}", - "query_editor.message.save_query_failed": "クエリの保存に失敗しました: {{error}}", - "query_editor.message.export_sql_file_success": "SQL ファイルをエクスポートしました。", - "query_editor.message.export_sql_file_failed": "SQL ファイルのエクスポートに失敗しました: {{error}}", - "query_editor.message.save_first_before_rename": "名前を変更する前に、先にクエリを保存してください。", - "query_editor.message.renamed": "クエリ名を変更しました。", - "query_editor.empty_state.title": "SQL の実行待ち", - "query_editor.empty_state.description": "クエリを実行すると、結果が下部に新しいデータグリッドで表示されます。", - "query_editor.result.tab_title": "結果 {{index}}({{count}})", - "query_editor.result.tab_title_success": "結果 {{index}} ✓", - "query_editor.result.close": "結果を閉じる", - "query_editor.result.execution_success": "実行成功", - "query_editor.result.affected_rows": "影響行数: {{count}}", - "query_editor.result.execution_failed": "実行失敗", - "query_editor.result.ai_diagnose": "AI 診断", - "query_editor.results_panel.tooltip.hide": "結果エリアを非表示", - "query_editor.results_panel.tooltip.hide_with_shortcut": "結果エリアを非表示({{shortcut}})", - "query_editor.results_panel.menu.close_other": "他のタブを閉じる", - "query_editor.results_panel.menu.close_left": "左側のタブを閉じる", - "query_editor.results_panel.menu.close_right": "右側のタブを閉じる", - "query_editor.results_panel.menu.close_all": "すべて閉じる", - "query_editor.results_panel.action.hide": "非表示", - "query_editor.results_panel.aria.hide": "結果エリアを非表示", - "query_editor.results_panel.tab.message": "メッセージ {{index}}", - "query_editor.results_panel.tab.result": "結果 {{index}}", - "query_editor.results_panel.message.title": "実行メッセージ", - "query_editor.results_panel.panel.title": "結果エリア", - "query_editor.save_modal.title": "クエリを保存", - "query_editor.save_modal.rename_title": "クエリ名を変更", - "query_editor.save_modal.rename_ok": "名前を変更", - "query_editor.save_modal.name_label": "クエリ名", - "query_editor.save_modal.name_required": "クエリ名を入力してください。", - "query_editor.save_modal.name_placeholder": "例: すべてのユーザーを検索", - "query_editor.save_modal.unnamed": "無題のクエリ", - "query_editor.ai_prompt.default_source": "データベース", - "query_editor.ai_prompt.default_database": "デフォルト", - "query_editor.ai_prompt.context": "コンテキスト: {{type}} {{name}}、選択中のデータベース {{database}}。\n", - "query_editor.ai_prompt.generate": "現在のデータベーススキーマに基づいてクエリを生成してください。", - "query_editor.ai_prompt.explain": "次の SQL 文の実行ロジックを説明してください:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.optimize": "次の SQL 文の性能上の問題を分析し、最適化案を提示してください:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.schema": "現在のデータベーススキーマを分析し、性能と設計の改善案を提示してください。", - "query_editor.ai_prompt.diagnose": "次の SQL を実行中にエラーが発生しました:\n```sql\n{{sql}}\n```\n\nデータベースから返されたエラー:\n```text\n{{error}}\n```\n\n原因を分析し、修正案を提示してください。", - "query_editor.slash_command.query.label": "自然言語クエリ", - "query_editor.slash_command.query.description": "取得したい内容を説明", - "query_editor.slash_command.query.prompt": "この依頼に対する SQL クエリを書いてください:", - "query_editor.slash_command.sql.label": "SQL を生成", - "query_editor.slash_command.sql.description": "要件を説明してステートメントを生成", - "query_editor.slash_command.sql.prompt": "次の要件に対する SQL を生成してください:", - "query_editor.slash_command.explain.label": "SQL を説明", - "query_editor.slash_command.explain.description": "選択した SQL のロジックを説明", - "query_editor.slash_command.explain.prompt": "次の SQL 文の実行ロジックを説明してください:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.optimize.label": "最適化分析", - "query_editor.slash_command.optimize.description": "SQL の性能ボトルネックを分析", - "query_editor.slash_command.optimize.prompt": "次の SQL 文の性能上の問題を分析し、最適化案を提示してください:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.schema.label": "テーブル設計レビュー", - "query_editor.slash_command.schema.description": "テーブル構造の設計品質をレビュー", - "query_editor.slash_command.schema.prompt": "関連テーブル設計について、フィールド型、正規化、インデックス、改善案を含めてレビューしてください。", - "query_editor.slash_command.index.label": "インデックス提案", - "query_editor.slash_command.index.description": "インデックス戦略を推奨", - "query_editor.slash_command.index.prompt": "現在のテーブル構造と一般的なクエリパターンに基づいてインデックス戦略を提案し、必要に応じて SQL を含めてください。", - "query_editor.slash_command.diff.label": "テーブル比較", - "query_editor.slash_command.diff.description": "テーブル差分を比較して変更を生成", - "query_editor.slash_command.diff.prompt": "2 つのテーブル構造の差分を比較し、旧版から新版へ移行する ALTER 文を生成してください。", - "query_editor.slash_command.mock.label": "モックデータ", - "query_editor.slash_command.mock.description": "INSERT テストデータを生成", - "query_editor.slash_command.mock.prompt": "関連テーブルに対して業務上意味のある INSERT テストデータを 10 件生成してください。", - "query_editor.completion.detail.aggregate": "集約関数", - "query_editor.completion.detail.string": "文字列関数", - "query_editor.completion.detail.math": "数学関数", - "query_editor.completion.detail.date_time": "日時関数", - "query_editor.completion.detail.conditional": "条件関数", - "query_editor.completion.detail.conversion": "型変換関数", - "query_editor.completion.detail.json": "JSON 関数", - "query_editor.completion.detail.utility": "ユーティリティ関数", - "query_editor.completion.detail.info": "情報関数", - "query_editor.completion.detail.window": "ウィンドウ関数", - "query_editor.completion.detail.sql_function": "SQL 関数", - "query_editor.completion.detail.aggregate_count": "集約 - 件数", - "query_editor.completion.detail.string_concat": "文字列 - 連結", - "query_editor.completion.detail.math_abs": "数学 - 絶対値", - "query_editor.completion.detail.date_now": "日付 - 現在日時", - "query_editor.completion.detail.conditional_if": "条件 - IF", - "query_editor.completion.detail.conversion_cast": "変換 - 型キャスト", - "query_editor.completion.detail.json_extract": "JSON - 値を抽出", - "query_editor.completion.detail.crypto_md5": "ハッシュ - MD5", - "query_editor.completion.detail.info_database": "情報 - 現在のデータベース", - "query_editor.completion.detail.window_row_number": "ウィンドウ - 行番号", - "query_editor.completion.detail.modifier_distinct": "修飾 - 重複排除", - "query_editor.completion.action.absolute_value": "絶対値", - "query_editor.completion.action.approximate_distinct": "近似重複排除", - "query_editor.completion.action.approximate_distinct_count": "近似重複件数", - "query_editor.completion.action.approximate_percentile": "近似パーセンタイル", - "query_editor.completion.action.approximate_quantile": "近似分位点", - "query_editor.completion.action.array_aggregation": "配列集約", - "query_editor.completion.action.array_length": "配列長", - "query_editor.completion.action.average": "平均", - "query_editor.completion.action.bitmap_aggregation": "Bitmap 集約", - "query_editor.completion.action.bitmap_construction": "Bitmap を構築", - "query_editor.completion.action.bitmap_count": "Bitmap 件数", - "query_editor.completion.action.boolean_and_aggregation": "真偽 AND 集約", - "query_editor.completion.action.boolean_or_aggregation": "真偽 OR 集約", - "query_editor.completion.action.character_length": "文字数", - "query_editor.completion.action.concat_with_separator": "区切り付き連結", - "query_editor.completion.action.concatenation": "連結", - "query_editor.completion.action.condition_mapping": "条件マッピング", - "query_editor.completion.action.conditional_check": "条件判定", - "query_editor.completion.action.count": "件数", - "query_editor.completion.action.current_database": "現在のデータベース", - "query_editor.completion.action.current_date": "現在日付", - "query_editor.completion.action.current_date_time": "現在日時", - "query_editor.completion.action.current_time": "現在時刻", - "query_editor.completion.action.current_timestamp": "現在のタイムスタンプ", - "query_editor.completion.action.current_user": "現在のユーザー", - "query_editor.completion.action.database_current_time": "データベース現在時刻", - "query_editor.completion.action.date_addition": "日付加算", - "query_editor.completion.action.date_conversion": "日付に変換", - "query_editor.completion.action.date_difference": "日付差", - "query_editor.completion.action.date_field_extraction": "日付フィールド抽出", - "query_editor.completion.action.date_formatting": "日付書式化", - "query_editor.completion.action.date_subtraction": "日付減算", - "query_editor.completion.action.date_truncation": "日付切り捨て", - "query_editor.completion.action.date_value": "日付", - "query_editor.completion.action.datetime_conversion": "日時に変換", - "query_editor.completion.action.datetime_value": "日時", - "query_editor.completion.action.decimal_truncation": "小数切り捨て", - "query_editor.completion.action.dense_rank": "密順位", - "query_editor.completion.action.distinct_array_aggregation": "重複排除配列集約", - "query_editor.completion.action.e_power": "e の累乗", - "query_editor.completion.action.elapsed_time": "経過時間", - "query_editor.completion.action.epoch_seconds": "エポック秒", - "query_editor.completion.action.exact_distinct": "正確な重複排除", - "query_editor.completion.action.first_non_null": "最初の非 NULL を返す", - "query_editor.completion.action.first_value": "最初の値", - "query_editor.completion.action.format_as_text": "テキスト形式化", - "query_editor.completion.action.group_concatenation": "グループ連結", - "query_editor.completion.action.guid_generation": "GUID を生成", - "query_editor.completion.action.hexadecimal": "16 進数", - "query_editor.completion.action.high_precision_current_time": "高精度現在時刻", - "query_editor.completion.action.hll_aggregation": "HLL 集約", - "query_editor.completion.action.hll_hash": "HLL ハッシュ", - "query_editor.completion.action.instant_rate_of_change": "瞬時変化率", - "query_editor.completion.action.int64_conversion": "Int64 に変換", - "query_editor.completion.action.interpolation": "補間", - "query_editor.completion.action.json_string_extraction": "JSON 文字列抽出", - "query_editor.completion.action.json_unquote": "JSON クォート除去", - "query_editor.completion.action.json_value_extraction": "JSON 値抽出", - "query_editor.completion.action.json_value_set": "JSON 値設定", - "query_editor.completion.action.jsonb_path_extraction": "JSONB パス抽出", - "query_editor.completion.action.julian_day": "ユリウス日", - "query_editor.completion.action.last_insert_id": "最後の挿入 ID", - "query_editor.completion.action.last_row": "最終行", - "query_editor.completion.action.last_value": "最後の値", - "query_editor.completion.action.least_squares": "最小二乗", - "query_editor.completion.action.left_padding": "左埋め", - "query_editor.completion.action.left_space_trimming": "左側空白削除", - "query_editor.completion.action.left_substring": "左から抽出", - "query_editor.completion.action.length": "長さ", - "query_editor.completion.action.list_aggregation": "リスト集約", - "query_editor.completion.action.list_unnest": "リスト展開", - "query_editor.completion.action.log_base_10": "常用対数", - "query_editor.completion.action.log_base_2": "2 進対数", - "query_editor.completion.action.logarithm": "対数", - "query_editor.completion.action.lowercase": "小文字に変換", - "query_editor.completion.action.maximum": "最大値", - "query_editor.completion.action.md5_hash": "MD5 ハッシュ", - "query_editor.completion.action.minimum": "最小値", - "query_editor.completion.action.modulo": "剰余", - "query_editor.completion.action.month_addition": "月を加算", - "query_editor.completion.action.month_difference": "月差", - "query_editor.completion.action.month_end_date": "月末日", - "query_editor.completion.action.next_row": "次の行", - "query_editor.completion.action.null_branch": "NULL 分岐", - "query_editor.completion.action.null_if_equal": "等しい場合は NULL を返す", - "query_editor.completion.action.null_replacement": "NULL 置換", - "query_editor.completion.action.number_conversion": "数値に変換", - "query_editor.completion.action.number_formatting": "数値書式化", - "query_editor.completion.action.position_lookup": "位置検索", - "query_editor.completion.action.power_operation": "べき乗", - "query_editor.completion.action.previous_row": "前の行", - "query_editor.completion.action.quantile": "分位点", - "query_editor.completion.action.random_number": "乱数", - "query_editor.completion.action.rank": "順位", - "query_editor.completion.action.rate_of_change": "変化率", - "query_editor.completion.action.regex_match": "正規表現一致", - "query_editor.completion.action.regex_replace": "正規表現置換", - "query_editor.completion.action.replacement": "置換", - "query_editor.completion.action.right_padding": "右埋め", - "query_editor.completion.action.right_space_trimming": "右側空白削除", - "query_editor.completion.action.right_substring": "右から抽出", - "query_editor.completion.action.round_down": "切り捨て", - "query_editor.completion.action.round_up": "切り上げ", - "query_editor.completion.action.rounding": "丸め", - "query_editor.completion.action.row_number": "行番号", - "query_editor.completion.action.set_lookup": "集合検索", - "query_editor.completion.action.sha1_hash": "SHA1 ハッシュ", - "query_editor.completion.action.sha2_hash": "SHA2 ハッシュ", - "query_editor.completion.action.space_trimming": "空白削除", - "query_editor.completion.action.spread": "スプレッド", - "query_editor.completion.action.sql_literal": "SQL リテラル", - "query_editor.completion.action.square_root": "平方根", - "query_editor.completion.action.string_aggregation": "文字列集約", - "query_editor.completion.action.string_conversion": "文字列に変換", - "query_editor.completion.action.string_repetition": "文字列繰り返し", - "query_editor.completion.action.string_reversal": "文字列反転", - "query_editor.completion.action.string_to_date": "文字列から日付へ変換", - "query_editor.completion.action.string_to_timestamp": "文字列からタイムスタンプへ変換", - "query_editor.completion.action.struct_construction": "構造体を構築", - "query_editor.completion.action.substring_extraction": "部分文字列抽出", - "query_editor.completion.action.sum": "合計", - "query_editor.completion.action.time_difference": "時刻差", - "query_editor.completion.action.time_value": "時刻", - "query_editor.completion.action.time_weighted_average": "時間加重平均", - "query_editor.completion.action.timestamp_difference": "タイムスタンプ差", - "query_editor.completion.action.truncate_date_or_number": "日付または数値を切り捨て", - "query_editor.completion.action.try_conversion": "変換を試行", - "query_editor.completion.action.type_conversion": "型変換", - "query_editor.completion.action.unix_time_to_datetime": "Unix 時刻を日時に変換", - "query_editor.completion.action.unix_timestamp": "Unix タイムスタンプ", - "query_editor.completion.action.uppercase": "大文字に変換", - "query_editor.completion.action.uuid_generation": "UUID を生成", - "query_editor.completion.action.value_formatting": "値を書式化", - "query_editor.completion.action.version": "バージョン", - "data_grid.action.apply": "適用", - "data_grid.ai_prompt.analyze_page": "次のクエリ結果データ(先頭 {{count}} 件のサンプル行)を分析してください:\n```json\n{{json}}\n```\n\nデータの特徴、傾向、またはビジネス上の示唆を分析してください。", - "data_grid.batch_fill.set_null": "NULL に設定", - "data_grid.batch_fill.title": "一括入力({{count}} セル)", - "data_grid.batch_fill.value_placeholder": "入力する値を指定", - "data_grid.cell_editor.now": "現在時刻", - "data_grid.cell_editor.title": "セルを編集", - "data_grid.cell_editor.title_with_column": "セルを編集: {{column}}", - "data_grid.column.comment_tooltip": "コメント: {{comment}}", - "data_grid.column.drag_tooltip": "ドラッグして列を並べ替え", - "data_grid.column.foreign_key_jump_title": "外部キーテーブルへ移動: {{tableName}}", - "data_grid.column.foreign_key_tooltip": "外部キー: {{target}}", - "data_grid.column.resize_tooltip": "ドラッグして列幅を変更、ダブルクリックで自動調整", - "data_grid.column.type_tooltip": "型: {{type}}", - "data_grid.column_quick_find.placeholder": "列へジャンプ...", - "data_grid.column_quick_find.tooltip": "列名を入力して Enter キーを押すか、移動ボタンで該当列へジャンプします", - "data_grid.ai_insight.prompt": "次のクエリ結果データを分析してください(先頭 {{count}} 件のサンプル):\n```json\n{{json}}\n```\n\nデータの特徴、パターン、または業務上の洞察を分析してください。", - "data_grid.datetime_picker.now": "今", - "data_grid.column_settings.column_visibility": "列の表示", - "data_grid.column_settings.display_settings": "表示設定", - "data_grid.column_settings.field_info": "フィールド情報", - "data_grid.column_settings.hide_all": "すべて非表示", - "data_grid.column_settings.remember_column_order": "カスタム列順を記憶", - "data_grid.column_settings.remember_hidden_columns": "非表示列の設定を記憶", - "data_grid.column_settings.reset_hidden": "非表示設定をリセット", - "data_grid.column_settings.reset_hidden_success": "すべての列を表示しました", - "data_grid.column_settings.reset_order": "順序をリセット", - "data_grid.column_settings.reset_order_success": "既定の列順に戻しました", - "data_grid.column_settings.search_columns_placeholder": "列名を検索...", - "data_grid.column_settings.show_all": "すべて表示", - "data_grid.column_settings.show_comments": "ヘッダーに列コメントを表示", - "data_grid.column_settings.show_types": "ヘッダーに列型を表示", - "data_grid.context_menu.auto_fit_column": "内容に合わせて列幅を自動調整", - "data_grid.context_menu.clear_column_sort": "このフィールドの並べ替えを解除", - "data_grid.context_menu.column_display_section": "フィールド表示", - "data_grid.context_menu.column_no_comment": "コメントなし", - "data_grid.context_menu.column_unknown_type": "不明な型", - "data_grid.context_menu.column_unnamed_field": "名前のないフィールド", - "data_grid.context_menu.copy_as_csv": "CSV としてコピー", - "data_grid.context_menu.copy_as_delete": "DELETE としてコピー", - "data_grid.context_menu.copy_as_insert": "INSERT としてコピー", - "data_grid.context_menu.copy_as_json": "JSON としてコピー", - "data_grid.context_menu.copy_as_markdown": "Markdown としてコピー", - "data_grid.context_menu.copy_as_update": "UPDATE としてコピー", - "data_grid.context_menu.copy_column_data": "列データをコピー", - "data_grid.context_menu.copy_field_name": "フィールド名をコピー", - "data_grid.context_menu.copy_row_data": "行データをコピー", - "data_grid.context_menu.current_marker": "現在", - "data_grid.context_menu.current_row": "現在の行", - "data_grid.context_menu.current_cell": "現在のセル", - "data_grid.context_menu.edit_section": "編集", - "data_grid.context_menu.edit_row": "この行を編集", - "data_grid.context_menu.copy_row_as_new": "この行を新規行としてコピー", - "data_grid.context_menu.undo_cell_change": "このセルの変更を取り消す", - "data_grid.context_menu.export_as_csv": "CSV としてエクスポート", - "data_grid.context_menu.export_as_excel": "Excel としてエクスポート", - "data_grid.context_menu.export_as_html": "HTML としてエクスポート", - "data_grid.context_menu.export_as_json": "JSON としてエクスポート", - "data_grid.context_menu.export_selected": "選択データをエクスポート", - "data_grid.context_menu.fill_to_selected_rows": "選択行へ入力({{count}})", - "data_grid.context_menu.hide_column": "このフィールドを非表示", - "data_grid.context_menu.hide_column_comment": "フィールドコメントを非表示", - "data_grid.context_menu.hide_column_type": "フィールド型を非表示", - "data_grid.context_menu.paste_copied_columns": "コピーした列を貼り付け(同名列)", - "data_grid.context_menu.paste_row_as_new": "新規行として貼り付け", - "data_grid.context_menu.paste_row_as_new_count": "新規行として貼り付け({{count}})", - "data_grid.context_menu.show_column_comment": "フィールドコメントを表示", - "data_grid.context_menu.show_column_type": "フィールド型を表示", - "data_grid.context_menu.sort_ascending": "昇順で並べ替え", - "data_grid.context_menu.sort_descending": "降順で並べ替え", - "data_grid.context_menu.sort_section": "並べ替え", - "data_grid.copy_sql.error.missing_safe_where": "現在の結果セットには行データを安全に特定できる主キーまたは一意キーがなく、テーブルの全列も含まれていないため、WHERE 条件を生成できません。", - "data_grid.copy_sql.error.missing_table_name": "現在の結果セットには明確なテーブル名が関連付けられていないため、{{mode}} SQL を生成できません。", - "data_grid.copy_sql.error.no_copyable_fields": "現在の結果セットにはコピー可能なフィールドがないため、SQL を生成できません。", - "data_grid.data_panel.click_cell_description": "表内のセルをクリックすると完全なデータをプレビューできます", - "data_grid.data_panel.click_cell_title": "セルをクリックしてデータを表示", - "data_grid.data_panel.title": "データプレビュー", - "data_grid.ddl.copy": "DDL をコピー", - "data_grid.ddl.layout_bottom": "下部", - "data_grid.ddl.layout_side": "サイドバー", - "data_grid.ddl.loading": "DDL を読み込み中...", - "data_grid.ddl.reload": "再読み込み", - "data_grid.ddl.sidebar_aria": "テーブル DDL サイドバー", - "data_grid.ddl.view": "DDL を表示", - "data_grid.error_boundary.description": "データグリッドの描画中にエラーが発生しました。データ形式が無効な可能性があります。", - "data_grid.error_boundary.retry": "再試行", - "data_grid.error_boundary.title": "描画エラー", - "data_grid.export.all_data": "すべてのデータをエクスポート", - "data_grid.export.all_rows": "すべての行をエクスポート({{count}} 行)", - "data_grid.export.all_rows_requery": "すべてエクスポート(再クエリ)", - "data_grid.export.current_page": "現在のページをエクスポート({{count}} 行)", - "data_grid.export.current_page_rows": "現在のページをエクスポート({{count}} 行)", - "data_grid.export.group_filtered_results": "フィルター済み結果", - "data_grid.export.group_full_table": "テーブル全体", - "data_grid.export.no_selection_prompt": "行が選択されていません。エクスポート範囲を選択してください:", - "data_grid.export.options_title": "エクスポートオプション", - "data_grid.export.query_result_title": "クエリ結果をエクスポート", - "data_grid.export.scope_prompt": "エクスポート範囲を選択してください:", - "data_grid.export.selected_rows": "選択行をエクスポート({{count}} 行)", - "data_grid.table_fallback.query_result": "クエリ結果", - "data_grid.metadata_view.fields_badge": "フィールド", - "data_grid.metadata_view.er_table_badge": "テーブル", - "data_grid.metadata_view.er_field_badge": "フィールド", - "data_grid.metadata_view.er_current_badge": "現在の表", - "data_grid.metadata_view.er_reference_badge": "参照先", - "data_grid.metadata_view.er_referenced_by_badge": "参照元", - "data_grid.metadata_view.er_related_table_count": "関連テーブル {{count}} 件", - "data_grid.metadata_view.er_relation_count": "リレーション {{count}} 件", - "data_grid.metadata_view.er_hidden_columns": "ほか {{count}} フィールド", - "data_grid.metadata_view.er_expand_hidden_columns": "残り {{count}} フィールドを表示", - "data_grid.metadata_view.er_expand_fields": "すべてのフィールドを展開", - "data_grid.metadata_view.er_collapse_fields": "フィールド要約を折りたたむ", - "data_grid.metadata_view.er_relation_depth": "{{count}} 層の関連", - "data_grid.metadata_view.er_expand_relations": "次の層を展開", - "data_grid.metadata_view.er_reset_relations": "1 層に戻す", - "data_grid.metadata_view.er_empty": "このテーブルでは外部キー関係が見つかりませんでした", - "data_grid.metadata_view.er_partial_warning": "一部の関係を読み込めなかったため、図が不完全な可能性があります", - "data_grid.metadata_view.er_open_table": "テーブルを開く", - "data_grid.metadata_view.field_count": "{{count}} フィールド", - "data_grid.metadata_view.column_name": "名前", - "data_grid.metadata_view.column_type": "型", - "data_grid.metadata_view.default_value": "デフォルト値", - "data_grid.metadata_view.comment": "コメント", - "data_grid.filter.add_condition": "条件を追加", - "data_grid.filter.add_sort": "並べ替えを追加", - "data_grid.filter.apply": "適用", - "data_grid.filter.apply_where": "WHERE を適用", - "data_grid.filter.clear": "クリア", - "data_grid.filter.custom_where_placeholder": "カスタム WHERE 式を入力(WHERE は不要)。例: status IN ('A','B')", - "data_grid.filter.disable_all": "すべて無効化", - "data_grid.filter.enable_all": "すべて有効化", - "data_grid.filter.enabled": "有効", - "data_grid.filter.end_value_placeholder": "終了値", - "data_grid.filter.first_condition": "最初", - "data_grid.filter.invalid_quick_where": "WHERE 条件にセミコロンや SQL コメントは使用できません", - "data_grid.filter.list_values_placeholder": "複数の値はカンマまたは改行で区切ってください", - "data_grid.filter.logic.and": "かつ (AND)", - "data_grid.filter.logic.or": "または (OR)", - "data_grid.filter.mongodb_query_placeholder": "MongoDB の JSON クエリオブジェクトを入力。例: {\"status\":\"A\"}", - "data_grid.filter.no_value_placeholder": "値は不要です", - "data_grid.filter.op.between": "範囲内", - "data_grid.filter.op.contains": "含む", - "data_grid.filter.op.custom": "[カスタム]", - "data_grid.filter.op.ends_with": "指定文字で終わる", - "data_grid.filter.op.in_list": "リスト内", - "data_grid.filter.op.is_empty": "空", - "data_grid.filter.op.is_not_empty": "空ではない", - "data_grid.filter.op.is_not_null": "NULL ではない", - "data_grid.filter.op.is_null": "NULL", - "data_grid.filter.op.not_between": "範囲外", - "data_grid.filter.op.not_contains": "含まない", - "data_grid.filter.op.not_ends_with": "指定文字で終わらない", - "data_grid.filter.op.not_in_list": "リスト外", - "data_grid.filter.op.not_starts_with": "指定文字で始まらない", - "data_grid.filter.op.starts_with": "指定文字で始まる", - "data_grid.filter.quick_where_placeholder": "WHERE の後に続く条件を入力。例: status = 1 AND name LIKE 'A%'", - "data_grid.filter.search_field_placeholder": "フィールド名を検索", - "data_grid.filter.select_sort_field_placeholder": "並べ替えフィールドを選択", - "data_grid.filter.sort_asc": "昇順", - "data_grid.filter.sort_desc": "降順", - "data_grid.filter.sort_label": "並べ替え", - "data_grid.filter.start_value_placeholder": "開始値", - "data_grid.filter.suggestion.column": "列", - "data_grid.filter.suggestion.keyword": "キーワード", - "data_grid.filter.suggestion.operator": "演算子", - "data_grid.filter.then_label": "次に", - "data_grid.json_editor.apply_changes": "変更を適用", - "data_grid.json_editor.description": "現在の結果順で編集します。JSON モードではレコードの追加や削除はできません。追加や削除はテーブルモードを使用してください。", - "data_grid.json_editor.format": "JSON を整形", - "data_grid.json_editor.invalid_format": "JSON の形式が無効です: {{error}}", - "data_grid.json_editor.title": "JSON 結果セットを編集", - "data_grid.message.cell_edit_mode_entered": "セル編集モードを有効にしました。ドラッグして複数セルを選択できます。", - "data_grid.message.cell_edit_mode_exited": "セル編集モードを無効にしました。", - "data_grid.message.change_set_build_failed": "変更セットを構築できませんでした", - "data_grid.message.change_set_build_failed_detail": "変更セットを構築できませんでした: {{detail}}", - "data_grid.message.column_order_reset": "既定の列順に戻しました", - "data_grid.message.column_quick_find_not_found": "フィールド列が見つかりません: {{query}}", - "data_grid.message.column_quick_find_not_rendered": "フィールド列「{{column}}」は現在レンダリングされていないため、特定できません", - "data_grid.message.column_visibility_reset": "すべての列を表示しました", - "data_grid.message.auto_commit_failed": "自動コミットに失敗しました: {{detail}}", - "data_grid.message.auto_commit_success": "自動コミットしました", - "data_grid.message.commit_failed": "コミットに失敗しました: {{detail}}", - "data_grid.message.undo_added_row_hint": "新規行の取り消しには、選択行の削除または表全体のロールバックを使用してください", - "data_grid.message.undo_cell_original_missing": "このセルの元データが見つからないため、取り消せません", - "data_grid.message.undo_cell_success": "セルの変更を取り消しました", - "data_grid.message.copied_columns": "{{count}} 列をコピーしました。対象行に貼り付けできます。", - "data_grid.message.copied_rows": "{{count}} 行をコピーしました。新しい行として貼り付けできます。", - "data_grid.message.copied_to_clipboard": "クリップボードにコピーしました", - "data_grid.message.copy_columns_first": "先に列の値をコピーしてください", - "data_grid.message.copy_columns_same_row_only": "列の値をコピーするときは、同じ行のセルだけを選択してください", - "data_grid.message.copy_rows_first": "先に行をコピーしてください", - "data_grid.message.copy_sql_not_supported": "このデータソースは SQL コピーに対応していません。JSON/CSV/Markdown コピーを使用してください。", - "data_grid.message.current_record_not_editable": "現在のレコードは編集できません", - "data_grid.message.current_row_no_copyable_content": "現在の行にコピー可能な内容がありません", - "data_grid.message.ddl_copied": "DDL をクリップボードにコピーしました", - "data_grid.message.ddl_copy_failed": "DDL のコピーに失敗しました", - "data_grid.message.ddl_load_failed": "DDL の読み込みに失敗しました", - "data_grid.message.ddl_missing_context": "現在のテーブルに接続またはテーブル名がないため、DDL を表示できません", - "data_grid.message.drag_select_cells_to_copy": "先にコピーするセルをドラッグして選択してください", - "data_grid.message.export_failed": "エクスポートに失敗しました: {{detail}}", - "data_grid.message.export_success": "エクスポートが完了しました", - "data_grid.message.export_with_uncommitted_changes": "未コミットの変更があります。エクスポートには表示中のグリッドデータが使用されます。長いフィールドの完全なデータが必要な場合は先にコミットしてください。", - "data_grid.message.exporting": "エクスポート中...", - "data_grid.message.exporting_all": "すべてのデータをエクスポート中...", - "data_grid.message.exporting_rows": "{{count}} 行をエクスポート中...", - "data_grid.message.filled_cells": "{{count}} セルに入力しました", - "data_grid.message.filled_rows": "{{count}} 行に入力しました", - "data_grid.message.current_field_not_editable": "現在のフィールドは編集できません", - "data_grid.message.filtered_export_not_supported": "このデータソースはフィルター済み結果のエクスポートに対応していません", - "data_grid.message.filtered_export_uses_committed_data": "未コミットの変更があります。フィルター済み結果のエクスポートにはコミット済みのデータベースデータが使用されます。", - "data_grid.message.import_done": "インポートが完了しました", - "data_grid.message.json_applied": "JSON の変更を現在の結果セットに適用しました。続けてトランザクションをコミットできます。", - "data_grid.message.json_invalid": "無効な JSON: {{detail}}", - "data_grid.message.json_parse_failed": "JSON の解析に失敗しました: {{detail}}", - "data_grid.message.json_record_count_mismatch": "レコード数が一致しません: 現在 {{current}} 行、JSON は {{json}} 行です。このモードではレコードを追加または削除しないでください。", - "data_grid.message.json_record_missing_row_key": "レコード {{index}} に行識別子がないため適用できません", - "data_grid.message.json_record_not_object": "レコード {{index}} はオブジェクトではないため適用できません", - "data_grid.message.json_view_must_be_array": "JSON ビューは配列である必要があります。各要素が 1 件のレコードに対応します", - "data_grid.message.keep_one_visible_column": "少なくとも 1 つの表示列を残してください", - "data_grid.message.locate_record_to_edit": "先に編集するレコードを特定してください", - "data_grid.message.locator_column_value_empty": "ロケーター列 {{column}} の値が空のため、変更を安全に送信できません。", - "data_grid.message.no_changes_to_commit": "コミットする変更はありません", - "data_grid.message.no_copyable_cells": "コピー可能なセルを認識できませんでした", - "data_grid.message.no_copyable_columns": "コピー可能な列を認識できませんでした", - "data_grid.message.no_copyable_rows": "コピー可能な行を認識できませんでした", - "data_grid.message.no_data_changes": "データは変更されていません", - "data_grid.message.no_ddl_to_copy": "コピーする DDL がありません", - "data_grid.message.no_field_name": "フィールド名を認識できませんでした", - "data_grid.message.no_safe_locator": "現在の結果には安全に行を特定できる方法がないため、変更を送信できません。", - "data_grid.message.no_filter_applied": "現在適用中のフィルター条件はありません", - "data_grid.message.no_rows_selected": "行が選択されていません", - "data_grid.message.no_other_rows_to_fill": "入力できる他の選択行がありません", - "data_grid.message.no_pasteable_editable_fields": "貼り付け可能な編集可能フィールドがありません", - "data_grid.message.no_pasteable_rows": "貼り付け可能な行がありません", - "data_grid.message.pasted_columns_to_rows": "{{rows}} 行、合計 {{cells}} セルに貼り付けました", - "data_grid.message.pasted_rows_as_new": "{{count}} 行を新しい行として貼り付けました。コミット前に確認してください。", - "data_grid.message.preview_sql_failed": "プレビュー SQL の生成に失敗しました", - "data_grid.message.preview_sql_failed_detail": "プレビュー SQL の生成に失敗しました: {{detail}}", - "data_grid.preview_sql.copied": "コピーしました", - "data_grid.preview_sql.no_changes": "変更はありません", - "data_grid.preview_sql.summary": "DELETE {{deletes}} 件、UPDATE {{updates}} 件、INSERT {{inserts}} 件", - "data_grid.preview_sql.title": "変更プレビュー", - "data_grid.message.result_set_no_copyable_content": "現在の結果セットにコピー可能な内容がありません", - "data_grid.message.saved": "保存しました", - "data_grid.message.select_cells_to_fill": "先に入力するセルを選択してください", - "data_grid.message.select_file_failed": "ファイルの選択に失敗しました: {{detail}}", - "data_grid.message.select_rows_to_copy": "先にコピーする行を選択してください", - "data_grid.message.select_rows_to_fill": "先に入力する行を選択してください", - "data_grid.message.select_same_row_cells_to_copy": "先に同じ行のセルを選択してコピーしてください", - "data_grid.message.select_target_rows": "先に対象行を選択してください", - "data_grid.message.selected_cells_no_update": "選択セルに更新は不要です", - "data_grid.message.selection_no_copyable_content": "現在の選択範囲にコピー可能な内容がありません", - "data_grid.message.target_row_not_found": "対象行が見つかりません。更新してから再試行してください。", - "data_grid.message.target_rows_cannot_only_source": "対象行をコピー元行だけにすることはできません。別の行を選択してください。", - "data_grid.message.target_rows_no_update": "対象行に更新は不要です", - "data_grid.message.transaction_committed": "トランザクションをコミットしました", - "data_viewer.message.result_not_ready": "現在の結果セットはまだ準備できていません。先に一度データを読み込んでください。", - "data_viewer.message.query_failed": "クエリに失敗しました", - "data_viewer.message.query_timeout": "クエリが接続タイムアウトを超えたため中断されました。接続タイムアウトを延長するか、クエリ範囲を絞って再試行してください。", - "data_viewer.message.duckdb_query_timeout": "DuckDB クエリが接続タイムアウトを超えたため中断されました。接続タイムアウトを延長するか、並べ替え/フィルター範囲を絞って再試行してください。", - "data_viewer.message.connection_not_found": "接続が見つかりません", - "data_viewer.message.fetch_data_failed_detail": "データ取得に失敗しました: {{detail}}", - "data_viewer.message.total_count_failed": "総件数の集計に失敗しました", - "data_viewer.message.total_count_failed_detail": "総件数の集計に失敗しました: {{detail}}", - "data_viewer.message.total_count_parse_failed": "総件数の解析に失敗しました", - "data_viewer.message.mongo_filter_invalid_detail": "MongoDB のフィルター条件が無効です: {{detail}}", - "data_viewer.message.mongo_filter_parse_failed": "解析に失敗しました", - "data_viewer.message.sort_buffer_retry_succeeded": "ソートバッファを自動的に増やして再試行し、クエリに成功しました。", - "data_viewer.read_only.reason.mongo_id_missing": "MongoDB の結果セットに _id がないため、変更を安全に送信できません。", - "data_viewer.read_only.reason.metadata_unavailable": "主キーまたは一意インデックスのメタデータを読み込めないため、変更を安全に送信できません。", - "data_viewer.read_only.reason.index_metadata_unavailable": "一意インデックスのメタデータを読み込めないため、変更を安全に送信できません。", - "data_viewer.read_only.reason.no_safe_locator": "主キーまたは利用可能な一意インデックスが見つからないため、変更を安全に送信できません。", - "data_viewer.read_only.reason.oracle_rowid_missing": "主キーまたは利用可能な一意インデックスが見つからず、結果セットに Oracle ROWID もないため、変更を安全に送信できません。", - "data_viewer.read_only.reason.primary_key_column_missing": "結果セットに主キー列 {{columns}} がないため、変更を安全に送信できません。", - "data_viewer.read_only.warning.table": "テーブル {{target}} は読み取り専用のままです: {{reason}}", - "data_viewer.read_only.warning.collection": "コレクション {{target}} は読み取り専用のままです: {{reason}}", - "data_viewer.sql_log.phase.main_query": "メインクエリ", - "data_viewer.sql_log.phase.complex_type_fallback_retry": "複雑型のフォールバック再試行", - "data_viewer.sql_log.phase.sort_buffer_retry": "再試行({{size}} sort_buffer)", - "definition_viewer.object.view": "ビュー", - "definition_viewer.object.materialized_view": "マテリアライズドビュー", - "definition_viewer.object.routine": "関数/ストアドプロシージャ", - "definition_viewer.object.event": "イベント", - "definition_viewer.loading.view_definition": "ビュー定義を読み込み中...", - "definition_viewer.loading.routine_definition": "関数/ストアドプロシージャ定義を読み込み中...", - "definition_viewer.loading.event_definition": "イベント定義を読み込み中...", - "definition_viewer.error.load_failed": "読み込みに失敗しました", - "definition_viewer.error.connection_not_found": "データベース接続が見つかりません", - "definition_viewer.error.view_name_empty": "ビュー名が空です", - "definition_viewer.error.event_name_empty": "イベント名が空です", - "definition_viewer.error.routine_name_empty": "関数/ストアドプロシージャ名が空です", - "definition_viewer.error.query_failed": "定義の取得に失敗しました", - "definition_viewer.error.query_failed_detail": "定義の取得に失敗しました: {{detail}}", - "definition_viewer.field.database": "データベース", - "definition_viewer.field.type": "種類", - "definition_viewer.editor.unsupported_view_definition": "このデータベース種類ではビュー定義の表示はサポートされていません", - "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite は関数/ストアドプロシージャ定義の管理をサポートしていません", - "definition_viewer.editor.unsupported_routine_definition": "このデータベース種類では関数/ストアドプロシージャ定義の表示はサポートされていません", - "definition_viewer.editor.unsupported_event_definition": "このデータベース種類ではイベント定義の表示はサポートされていません", - "definition_viewer.editor.unsupported_object_definition": "このオブジェクト定義の表示はサポートされていません", - "definition_viewer.editor.view_definition_not_found": "ビュー定義が見つかりません", - "definition_viewer.editor.routine_definition_not_found": "関数/ストアドプロシージャ定義が見つかりません", - "definition_viewer.editor.event_definition_not_found": "イベント定義が見つかりません", - "definition_viewer.editor.object_definition_not_found": "{{object}}定義が見つかりません", - "definition_viewer.editor.metadata_fallback.header": "現在のデータソースは実行可能な定義テキストを返さなかったため、メタデータを返しました", - "definition_viewer.editor.metadata_fallback.name_label": "名前", - "definition_viewer.editor.metadata_fallback.type_label": "種類", - "definition_viewer.editor.event_fragment_fallback.header": "現在のデータソースは完全な CREATE EVENT 文を返さなかったため、イベント定義の断片を返しました", - "definition_viewer.editor.sphinx.empty_result": "現在の Sphinx インスタンス{{version}}は{{object}}定義を返しませんでした。", - "definition_viewer.editor.sphinx.compat_queries_hint": "複数の互換クエリを実行しました。バージョン機能の制限、または未対応のオブジェクト種類が原因の可能性があります。", - "definition_viewer.editor.sphinx.unsupported_query": "現在の Sphinx インスタンス{{version}}は{{object}}定義の問い合わせをサポートしていません。", - "definition_viewer.editor.sphinx.failed_message_label": "返された失敗メッセージ", - "definition_viewer.editor.sphinx.failed_message_unknown": "返された失敗メッセージ: 不明なエラー", - "definition_viewer.editor.sphinx.version_suffix": "(バージョン: {{version}})", - "trigger_viewer.loading.definition": "トリガー定義を読み込み中...", - "trigger_viewer.error.load_failed": "読み込みに失敗しました", - "trigger_viewer.error.connection_not_found": "データベース接続が見つかりません", - "trigger_viewer.error.trigger_name_empty": "トリガー名が空です", - "trigger_viewer.error.query_failed": "トリガー定義の取得に失敗しました", - "trigger_viewer.error.query_failed_detail": "トリガー定義の取得に失敗しました: {{detail}}", - "trigger_viewer.field.trigger": "トリガー", - "trigger_viewer.field.database": "データベース", - "trigger_viewer.editor.unsupported.duckdb": "DuckDB はトリガーをサポートしていません", - "trigger_viewer.editor.unsupported.tdengine": "TDengine はトリガーをサポートしていません", - "trigger_viewer.editor.unsupported.mongodb": "MongoDB はトリガーをサポートしていません", - "trigger_viewer.editor.unsupported.generic": "このデータベース種類ではトリガー定義の表示はサポートされていません", - "trigger_viewer.editor.definition_not_found": "トリガー定義が見つかりません", - "trigger_viewer.editor.sphinx.version_suffix": "(バージョン: {{version}})", - "trigger_viewer.editor.sphinx.empty_result": "現在の Sphinx インスタンス{{version}}はトリガー定義を返しませんでした。", - "trigger_viewer.editor.sphinx.compat_queries_hint": "複数の互換クエリを実行しました。バージョン機能の制限、または未対応のオブジェクト種類が原因の可能性があります。", - "trigger_viewer.editor.sphinx.unsupported_query": "現在の Sphinx インスタンス{{version}}はトリガー定義の問い合わせをサポートしていません。", - "trigger_viewer.editor.sphinx.failed_message_label": "返された失敗メッセージ", - "trigger_viewer.editor.sphinx.failed_message_unknown": "返された失敗メッセージ: 不明なエラー", - "data_grid.modal.export_options.all_data": "すべてのデータをエクスポート", - "data_grid.modal.export_options.current_page": "現在のページをエクスポート({{count}} 行)", - "data_grid.modal.export_options.filtered_results": "フィルター済み結果", - "data_grid.modal.export_options.no_rows_selected": "行が選択されていません。エクスポート範囲を選択してください:", - "data_grid.modal.export_options.title": "エクスポートオプション", - "data_grid.modal.export_options.whole_table": "テーブル全体", - "data_grid.page_find.next": "次へ", - "data_grid.page_find.placeholder": "現在のページ内を検索...", - "data_grid.page_find.previous": "前へ", - "data_grid.page_find.summary": "{{occurrences}} 件一致 / {{cells}} セル", - "data_grid.page_find.tooltip": "現在のページに読み込まれた行だけを検索します。WHERE 条件は変更されません。", - "data_grid.preview_panel.no_cell_description": "表内のセルをクリックして完全なデータをプレビュー", - "data_grid.preview_panel.no_cell_title": "セルをクリックしてデータを表示", - "data_grid.record_view.edit_current": "現在のレコードを編集", - "data_grid.record_view.edit_json": "JSON を編集", - "data_grid.record_view.empty": "現在の結果セットにデータはありません", - "data_grid.record_view.json_record_count": "現在の結果セット: {{count}} 件のレコード", - "data_grid.record_view.next": "次のレコード", - "data_grid.record_view.previous": "前のレコード", - "data_grid.record_view.record_position": "レコード {{current}} / {{total}}", - "data_grid.pagination.jump_action": "移動", - "data_grid.pagination.jump_aria": "移動先ページ", - "data_grid.pagination.jump_label": "ページ移動", - "data_grid.pagination.page.current": "{{current}} ページ", - "data_grid.pagination.page.known": "{{current}} / {{totalPages}} ページ", - "data_grid.pagination.page_size_aria": "1 ページあたりの行数", - "data_grid.pagination.page_size_option": "{{count}} 行 / ページ", - "data_grid.pagination.result_set": "結果セット", - "data_grid.pagination.summary.approximate": "現在 {{current}} 行 / 約 {{total}} 行", - "data_grid.pagination.summary.cancelled": "現在 {{current}} 行 / 件数取得をキャンセルしました", - "data_grid.pagination.summary.counting": "現在 {{current}} 行 / 合計を取得中...", - "data_grid.pagination.summary.counting_exact": "現在 {{current}} 行 / 正確な合計を取得中...", - "data_grid.pagination.summary.empty": "現在 0 行 / 合計 0 行", - "data_grid.pagination.summary.known": "現在 {{current}} 行 / 合計 {{total}} 行", - "data_grid.pagination.summary.not_counted": "現在 {{current}} 行 / 合計未取得", - "data_grid.secondary.column_display": "列表示", - "data_grid.secondary.data_preview": "データプレビュー", - "data_grid.secondary.er_diagram": "ER 図", - "data_grid.secondary.jump_column": "列へ移動", - "data_grid.secondary.live": "ライブ", - "data_grid.secondary.object_design": "オブジェクト設計", - "data_grid.embedded_designer.title": "テーブル設計({{tableName}})", - "data_grid.secondary.pending_changes": "未コミット {{count}}", - "data_grid.secondary.row_count": "{{count}} 行", - "data_grid.secondary.view_ddl": "DDL を表示", - "data_grid.row_editor.popup_edit": "ポップアップで編集", - "data_grid.row_editor.title": "行を編集", - "data_grid.toolbar.add_row": "行を追加", - "data_grid.toolbar.ai_insight": "AI データ分析", - "data_grid.toolbar.ai_insight_short": "AI 分析", - "data_grid.toolbar.ai_insight_tooltip": "現在のクエリページのデータ分析を AI に依頼", - "data_grid.toolbar.batch_fill": "一括入力({{count}})", - "data_grid.toolbar.cancel_count": "件数取得をキャンセル", - "data_grid.toolbar.cancel_count_tooltip": "この正確な合計件数の取得をキャンセルします。現在の閲覧には影響しません。", - "data_grid.toolbar.cell_editor": "セルエディター", - "data_grid.toolbar.commit": "トランザクションをコミット({{count}})", - "data_grid.toolbar.commit_label": "トランザクションをコミット", - "data_grid.toolbar.commit_delay.seconds": "{{seconds}} 秒", - "data_grid.toolbar.commit_mode.auto": "自動コミット", - "data_grid.toolbar.commit_mode.auto_countdown": "{{seconds}}s 後にコミット", - "data_grid.toolbar.commit_mode.manual": "手動コミット", - "data_grid.toolbar.commit_mode.tooltip": "テーブルデータ編集後のコミット方法を制御します。手動コミットの方が安全です。自動コミットは最後の変更後、選択した待機時間が経過してから実行されます。", - "data_grid.toolbar.copied_columns_count": "コピー済み列 {{count}} 件", - "data_grid.toolbar.copy": "コピー", - "data_grid.toolbar.copy_row": "行をコピー", - "data_grid.toolbar.copy_selection": "選択範囲をコピー({{count}})", - "data_grid.toolbar.copy_selection_columns": "選択列の値をコピー({{count}})", - "data_grid.toolbar.count_total": "合計件数を取得", - "data_grid.toolbar.count_total_tooltip": "現在のフィルターで正確な合計件数を取得", - "data_grid.toolbar.delete_selected": "選択項目を削除", - "data_grid.toolbar.export": "エクスポート", - "data_grid.toolbar.filter": "フィルター", - "data_grid.toolbar.import": "インポート", - "data_grid.toolbar.paste_row": "行を貼り付け", - "data_grid.toolbar.paste_row_count": "行を貼り付け({{count}})", - "data_grid.toolbar.paste_to_selected_rows": "選択行へ貼り付け({{count}})", - "data_grid.toolbar.preview_sql": "SQL をプレビュー", - "data_grid.toolbar.preview_sql_generate": "プレビュー SQL を生成", - "data_grid.toolbar.refresh": "更新", - "data_grid.toolbar.rollback": "ロールバック", - "data_grid.toolbar.selected_count": "{{count}} 件選択中", - "data_grid.toolbar.undo_delete": "削除を取り消す", - "data_grid.view.edit_current_record": "現在のレコードを編集", - "data_grid.view.edit_json": "JSON を編集", - "data_grid.view.empty_result": "現在の結果セットにデータはありません", - "data_grid.view.next_record": "次のレコード", - "data_grid.view.previous_record": "前のレコード", - "data_grid.view.record_count": "現在の結果セット: {{count}} 件", - "data_grid.view.record_position": "レコード {{current}} / {{total}}", - "data_grid.view.result_view": "結果ビュー", - "data_grid.view.table": "テーブル", - "data_grid.view.text": "テキスト", - "table_designer.action.add": "追加", - "table_designer.action.add_after_selected": "選択した列の後に追加", - "table_designer.action.add_column": "列を追加", - "table_designer.action.apply": "適用", - "table_designer.action.cancel": "キャンセル", - "table_designer.action.copy_selected_to_new_table": "選択列を新しいテーブルへコピー", - "table_designer.action.create": "作成", - "table_designer.action.create_table": "新しいテーブルを作成", - "table_designer.action.delete": "削除", - "table_designer.action.edit": "編集", - "table_designer.action.execute": "実行", - "table_designer.action.refresh": "更新", - "table_designer.action.refresh_anyway": "更新を続行", - "table_designer.action.save": "保存", - "table_designer.action.table_comment": "テーブルコメント", - "table_designer.action.view_statement": "文を表示", - "table_designer.column.actions": "操作", - "table_designer.column.auto_increment": "自動採番", - "table_designer.column.comment": "コメント", - "table_designer.column.default": "デフォルト", - "table_designer.column.name": "名前", - "table_designer.column.not_null": "NOT NULL", - "table_designer.column.primary_key": "主キー", - "table_designer.column.type": "型", - "table_designer.empty.triggers": "このテーブルにはトリガーがありません", - "table_designer.fallback.empty": "(空)", - "table_designer.fallback.unknown_error": "不明なエラー", - "table_designer.fallback.unnamed_foreign_key": "(名前なし外部キー)", - "table_designer.fallback.unnamed_index": "(名前なしインデックス)", - "table_designer.foreign_key.column.constraint_name": "制約名", - "table_designer.foreign_key.column.fields": "列", - "table_designer.foreign_key.column.ref_fields": "参照列", - "table_designer.foreign_key.column.ref_table": "参照テーブル", - "table_designer.index.column.fields": "列", - "table_designer.index.column.name": "インデックス名", - "table_designer.index.column.type": "インデックス型", - "table_designer.index.column.uniqueness": "一意性", - "table_designer.index.kind.fulltext": "全文インデックス", - "table_designer.index.kind.normal": "通常インデックス", - "table_designer.index.kind.normal_nonclustered": "通常インデックス(非クラスター化)", - "table_designer.index.kind.primary_clustered": "主キーインデックス(クラスター化)", - "table_designer.index.kind.spatial": "空間インデックス", - "table_designer.index.kind.unique": "一意インデックス", - "table_designer.index.uniqueness.normal": "通常", - "table_designer.index.uniqueness.unique": "一意", - "table_designer.label.create_statement": "{{name}} の CREATE 文", - "table_designer.label.create_statement_plain": "CREATE 文", - "table_designer.message.add_at_least_one_column": "少なくとも1列追加してください", - "table_designer.message.columns_copied_to_new_table": "{{count}} 列を新しいテーブル {{table}} にコピーしました", - "table_designer.message.connection_not_found": "接続が見つかりません", - "table_designer.message.delete_failed": "削除に失敗しました: {{detail}}", - "table_designer.message.drop_old_trigger_failed": "既存トリガーの削除に失敗しました: {{detail}}", - "table_designer.message.execution_failed": "実行に失敗しました: {{detail}}", - "table_designer.message.execution_failed_plain": "実行に失敗しました", - "table_designer.message.execution_failed_prefix": "実行に失敗しました: ", - "table_designer.message.foreign_key_column_count_mismatch": "ローカル列数と参照列数を一致させてください", - "table_designer.message.foreign_key_created": "外部キーを追加しました", - "table_designer.message.foreign_key_delete_unsupported": "このデータベースではここからこの外部キーを削除できません", - "table_designer.message.foreign_key_deleted": "外部キーを削除しました", - "table_designer.message.foreign_key_maintenance_unsupported": "このデータベースではここから外部キーを管理できません", - "table_designer.message.foreign_key_name_exists": "外部キー制約名はすでに存在します: {{name}}", - "table_designer.message.foreign_key_name_required": "外部キー制約名を入力してください", - "table_designer.message.foreign_key_updated": "外部キーを更新しました", - "table_designer.message.index_created": "インデックスを追加しました", - "table_designer.message.index_create_sql_unavailable": "インデックス作成 SQL を取得できません", - "table_designer.message.index_create_sql_placeholder": "インデックス作成 SQL はまだ利用できません", - "table_designer.message.index_delete_named_unsupported": "このデータベースではインデックス \"{{name}}\" を削除できません", - "table_designer.message.index_delete_unsupported": "このデータベースではこのインデックスを削除できません", - "table_designer.message.index_deleted": "インデックスを削除しました", - "table_designer.message.index_kind_unsupported": "このデータベースはこのインデックス種別をサポートしていません", - "table_designer.message.index_maintenance_unsupported": "このデータベースではここからインデックスを管理できません", - "table_designer.message.index_name_exists": "インデックス名はすでに存在します: {{name}}", - "table_designer.message.index_name_required": "インデックス名を入力してください", - "table_designer.message.index_restore_failed": "{{detail}}。元のインデックスの復元に失敗しました: {{restoreDetail}}", - "table_designer.message.index_restore_unavailable": "{{detail}}。元のインデックスを自動復元できません。早めに確認してください。", - "table_designer.message.index_restored_after_failure": "{{detail}}。元のインデックスを自動復元しました。", - "table_designer.message.index_updated": "インデックスを更新しました", - "table_designer.message.indexes_deleted": "{{count}} 件のインデックスを削除しました", - "table_designer.message.load_columns_failed": "列の読み込みに失敗しました: {{detail}}", - "table_designer.message.no_changes_detected": "変更は検出されませんでした", - "table_designer.message.no_copyable_columns": "コピーできる列が選択されていません", - "table_designer.message.no_index_changes": "インデックスの変更は検出されませんでした", - "table_designer.message.only_normal_unique_index_supported": "このデータベースでは通常インデックスと一意インデックスのみ管理できます", - "table_designer.message.ref_columns_required": "参照列を少なくとも1つ入力してください", - "table_designer.message.ref_table_required": "参照テーブルを入力してください", - "table_designer.message.relational_index_unsupported": "このデータソースはリレーショナルインデックス管理をサポートしていません", - "table_designer.message.schema_saved_alter": "テーブル構造を更新しました。", - "table_designer.message.schema_saved_create": "テーブルを作成しました。", - "table_designer.message.select_at_least_one_column": "少なくとも1列選択してください", - "table_designer.message.select_column_before_insert": "挿入する前に列を選択してください。", - "table_designer.message.select_columns_to_copy": "コピーする列を先に選択してください", - "table_designer.message.select_index_to_delete": "削除するインデックスを先に選択してください", - "table_designer.message.select_local_columns": "ローカル列を少なくとも1つ選択してください", - "table_designer.message.select_one_foreign_key": "外部キーを1つ選択してください", - "table_designer.message.select_one_index": "インデックスを1つ選択してください", - "table_designer.message.statement_execution_failed_prefix": "{{current}}/{{total}} 件目の文の実行に失敗しました: ", - "table_designer.message.switch_index_kind": "「インデックス種別」を {{kind}} インデックスに切り替えてください", - "table_designer.message.table_comment_unsupported": "このデータベースではここからテーブルコメントを編集できません", - "table_designer.message.table_comment_updated": "テーブルコメントを更新しました", - "table_designer.message.table_name_required": "テーブル名を入力してください", - "table_designer.message.target_table_required": "コピー先テーブル名を入力してください", - "table_designer.message.trigger_created": "トリガーを作成しました", - "table_designer.message.trigger_deleted": "トリガーを削除しました", - "table_designer.message.trigger_updated": "トリガーを更新しました", - "table_designer.modal.column_comment_title": "列コメント", - "table_designer.modal.column_comment_title_named": "列コメント - {{name}}", - "table_designer.modal.confirm_sql_title": "SQL 変更の確認", - "table_designer.modal.copy_columns_title": "選択列を新しいテーブルへコピー", - "table_designer.modal.delete_foreign_key_content": "外部キー制約 \"{{name}}\" を削除しますか?", - "table_designer.modal.delete_foreign_key_title": "外部キーの削除", - "table_designer.modal.delete_index_many": "次の {{count}} 件のインデックスを削除しますか?\n{{names}}", - "table_designer.modal.delete_index_one": "インデックス {{names}} を削除しますか?", - "table_designer.modal.delete_index_title": "インデックスの削除", - "table_designer.modal.delete_trigger_content": "トリガー \"{{name}}\" を削除しますか?この操作は元に戻せません。", - "table_designer.modal.delete_trigger_title": "トリガーの削除", - "table_designer.modal.foreign_key_create_title": "外部キーを追加", - "table_designer.modal.foreign_key_edit_title": "外部キーを編集", - "table_designer.modal.index_create_title": "インデックスを追加", - "table_designer.modal.index_edit_title": "インデックスを編集", - "table_designer.modal.table_comment_title": "テーブルコメントを編集", - "table_designer.modal.trigger_create_title": "トリガーを追加", - "table_designer.modal.trigger_detail_title": "トリガー詳細", - "table_designer.modal.trigger_detail_title_named": "トリガー: {{name}}", - "table_designer.modal.trigger_edit_title": "トリガーを編集", - "table_designer.modal.unsaved_changes_content": "更新すると、現在の下書きにある未保存の列変更は破棄されます。更新して下書きを上書きしますか?", - "table_designer.modal.unsaved_changes_title": "未保存の列変更があります", - "table_designer.notice.foreign_key_readonly": "このデータベースではここから外部キーを編集できません。表示のみです。", - "table_designer.notice.foreign_key_replace_hint": "外部キーを編集すると、古い外部キーを削除してから新しい外部キーを作成します。", - "table_designer.notice.index_readonly": "このデータベースではここからインデックスを編集できません。表示のみです。", - "table_designer.notice.index_restore_hint": "インデックス編集で新しいインデックスの作成に失敗した場合、元のインデックスの自動復元を試みます。", - "table_designer.notice.sql_irreversible": "SQL を十分に確認してください。実行後は元に戻せません。", - "table_designer.notice.sql_statement_irreversible": "SQL 文を十分に確認してください。実行後は元に戻せません。", - "table_designer.notice.trigger_replace_hint": "トリガーを編集すると、元のトリガーを削除してから新しいトリガーを作成します。", - "table_designer.option.default": "デフォルト", - "table_designer.option.recommended_suffix": "(推奨)", - "table_designer.placeholder.column_comment": "列コメントを入力してください", - "table_designer.placeholder.foreign_key_name": "外部キー制約名(例: fk_order_user)", - "table_designer.placeholder.index_columns": "インデックス列を選択してください。選択順が使われます", - "table_designer.placeholder.index_name": "インデックス名(例: idx_user_name)", - "table_designer.placeholder.local_columns": "ローカル列を選択してください。順序は参照列と一致させてください", - "table_designer.placeholder.primary_index_name": "主キーインデックスの固定名: PRIMARY", - "table_designer.placeholder.ref_columns": "参照列を入力してください。複数指定できます", - "table_designer.placeholder.ref_table": "参照テーブル。db.table 形式を使用できます", - "table_designer.placeholder.table_comment": "テーブルコメントを入力してください", - "table_designer.placeholder.table_name": "テーブル名を入力してください", - "table_designer.placeholder.target_table_name": "コピー先テーブル名を入力してください", - "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB では COMMENT ON COLUMN による列コメントの永続化はできません。列 {{column}} のコメントはデザイナーのプレビュー内にのみ保持されます。", - "table_designer.schema_sql.limited_column_hint": "-- {{dialect}} の列制約、デフォルト値、コメント構文は MySQL と異なります。MySQL 専用句は生成していません。実行前に対象DB向けの SQL を補ってください。", - "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite では列属性を直接変更できません。列 {{column}} は、新しいテーブルの作成、データ移行、旧テーブルの置き換えで対応してください。", - "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server で古い主キーを削除するには元の制約名が必要です。削除前にインデックスタブで確認してください。", - "table_designer.schema_sql.tdengine.timestamp_hint": "-- TDengine の通常テーブルには通常 TIMESTAMP 時間列が必要です。実行前にテーブルモデルを確認してください。", - "table_designer.starrocks.table_kind.olap": "OLAP テーブル", - "table_designer.starrocks.table_kind.external": "外部テーブル", - "table_designer.starrocks.key_model.duplicate": "重複キー", - "table_designer.starrocks.key_model.unique": "一意キー", - "table_designer.starrocks.key_model.aggregate": "集計キー", - "table_designer.starrocks.placeholder.key_columns": "キー列(例: id, date)", - "table_designer.starrocks.placeholder.partition_clause": "パーティション句(例: PARTITION BY RANGE(date_col)(...))", - "table_designer.starrocks.distribution.hash": "ハッシュ分散", - "table_designer.starrocks.distribution.random": "ランダム分散", - "table_designer.starrocks.distribution.none": "分散なし", - "table_designer.starrocks.placeholder.distribution_columns": "分散列(例: user_id)", - "table_designer.starrocks.bucket_mode.auto": "バケット数を自動設定", - "table_designer.starrocks.bucket_mode.number": "固定バケット数", - "table_designer.starrocks.placeholder.bucket_count": "バケット数", - "table_designer.selection.columns_selected": "{{count}} 列を選択中", - "table_designer.selection.foreign_key_selected": "選択中: {{name}}", - "table_designer.selection.indexes_selected": "{{count}} 件のインデックスを選択中", - "table_designer.selection.trigger_prompt": "クリックしてトリガーを選択", - "table_designer.selection.trigger_selected": "選択中: {{name}}", - "table_designer.sql_preview.change.add": "追加の変更", - "table_designer.sql_preview.change.comment": "コメントの変更", - "table_designer.sql_preview.change.constraint": "制約の変更", - "table_designer.sql_preview.change.create": "新規テーブル構造", - "table_designer.sql_preview.change.drop": "削除の変更", - "table_designer.sql_preview.change.modify": "列属性の変更", - "table_designer.sql_preview.change.rename": "名前変更の変更", - "table_designer.summary.indexes": "インデックス数: {{count}}、インデックス列: {{fields}}", - "table_designer.summary.columns": "{{count}} 列", - "table_designer.status.read_only": "読み取り専用", - "table_designer.title.untitled_table": "未命名テーブル", - "table_designer.title.default_database": "既定データベース", - "table_designer.title.schema_designer": "スキーマデザイナー", - "table_designer.tab.columns": "列", - "table_designer.tab.foreign_keys": "外部キー", - "table_designer.tab.indexes": "インデックス", - "table_designer.tab.triggers": "トリガー", - "table_designer.table_comment.current": "現在のコメント: {{comment}}", - "table_designer.tooltip.edit_comment_popup": "ポップアップでコメントを編集", - "table_designer.trigger.column.event": "イベント", - "table_designer.trigger.column.name": "名前", - "table_designer.trigger.column.timing": "タイミング", - "table_designer.trigger.definition_unavailable": "完全なトリガー定義を取得できません", - "table_designer.trigger.field.event": "イベント", - "table_designer.trigger.field.timing": "タイミング", - "table_designer.trigger.template.body_comment": "トリガー処理", - "table_designer.trigger.template.enter_create": "CREATE TRIGGER 文を入力してください", - "redis_command.action.clear_console": "コンソールをクリア", - "redis_command.action.execute": "実行(Cmd+Enter)", - "redis_command.completion.detail": "Redis コマンド", - "redis_command.message.command_required": "実行するコマンドを入力してください", - "redis_command.output.empty_hint": "このコンソールでコマンドを実行すると、返された結果がそのまま表示されます。", - "redis_command.output.selection_tip": "ヒント: 任意の行を選択して Ctrl + Enter を押すと、選択部分のみ実行します。", - "redis_command.output.title": "実行出力", - "redis_command.state.connection_not_found": "接続が見つかりません", - "redis_command.title.console": "Redis コンソール", - "redis.backend.message.connect_success": "接続に成功しました", - "redis.backend.message.set_success": "設定しました", - "redis.backend.message.select_db_success": "データベースを切り替えました", - "redis.backend.message.rename_success": "名前を変更しました", - "redis.backend.message.delete_success": "削除しました", - "redis.backend.message.add_success": "追加しました", - "redis.backend.message.flush_success": "消去しました", - "redis.backend.error.command_required": "Command は空にできません", - "redis.backend.error.argument_required": "{{name}} は必須です", - "redis.backend.error.argument_invalid_type": "{{name}} の型が無効です", - "redis.backend.error.address_required": "Redis 接続アドレスは空にできません", - "redis.backend.error.node_address_required": "Redis ノードアドレスは空にできません", - "redis.backend.error.invalid_node_address": "無効な Redis ノードアドレス: {{address}}", - "redis.backend.error.invalid_port": "無効な Redis ポート: {{address}}", - "redis_monitor.action.pause_refresh": "更新を一時停止", - "redis_monitor.action.refresh_now": "今すぐ更新", - "redis_monitor.action.resume_refresh": "更新を再開", - "redis_monitor.chart.clients_keys": "接続情報(クライアントと Keys)", - "redis_monitor.chart.cpu_usage": "CPU 使用率", - "redis_monitor.chart.memory": "メモリオーバーヘッド", - "redis_monitor.chart.qps": "リクエストスループット(QPS)", - "redis_monitor.message.fetch_failed": "Redis 情報の取得に失敗しました: {{detail}}", - "redis_monitor.metric.blocked_clients": "ブロック中: {{value}}", - "redis_monitor.metric.clients": "クライアント", - "redis_monitor.metric.days": "日数: {{value}}", - "redis_monitor.metric.memory_peak": "ピーク: {{value}}", - "redis_monitor.metric.memory_used": "使用メモリ", - "redis_monitor.metric.ops": "スループット(OPS)", - "redis_monitor.metric.uptime": "稼働時間", - "redis_monitor.series.clients": "クライアント", - "redis_monitor.series.rss_memory": "RSS メモリ", - "redis_monitor.series.system": "システム", - "redis_monitor.series.total_keys": "Key 合計", - "redis_monitor.series.used_memory": "使用メモリ", - "redis_monitor.series.user": "ユーザー", - "redis_monitor.server_details.title": "詳細なサーバーパラメータ", - "redis_monitor.state.connection_not_found": "接続が見つかりません", - "redis_monitor.title.instance": "Redis インスタンスモニター", - "redis_viewer.action.add_field": "フィールドを追加", - "redis_viewer.action.add_list_head": "先頭へプッシュ", - "redis_viewer.action.add_list_tail": "末尾へプッシュ", - "redis_viewer.action.add_member": "メンバーを追加", - "redis_viewer.action.add_stream_entry": "エントリを追加", - "redis_viewer.action.clear_group_selection": "選択をクリア", - "redis_viewer.action.clear_selection": "選択をクリア", - "redis_viewer.action.copy": "コピー", - "redis_viewer.action.copy_key_name": "Key 名をコピー", - "redis_viewer.action.copy_value": "値をコピー", - "redis_viewer.action.delete_key": "Key を削除", - "redis_viewer.action.delete_selected": "選択項目を削除({{count}})", - "redis_viewer.action.edit": "編集", - "redis_viewer.action.load_more": "さらに読み込む", - "redis_viewer.action.new_key": "新規", - "redis_viewer.action.refresh": "更新", - "redis_viewer.action.rename_key": "Key 名を変更", - "redis_viewer.action.select_all_loaded": "読み込み済みをすべて選択", - "redis_viewer.action.select_group": "選択", - "redis_viewer.action.set_ttl": "TTL を設定", - "redis_viewer.aria.collapse_group": "グループを折りたたむ", - "redis_viewer.aria.expand_group": "グループを展開", - "redis_viewer.confirm.delete_field": "このフィールドを削除しますか?", - "redis_viewer.confirm.delete_key": "Key \"{{key}}\" を削除しますか?", - "redis_viewer.confirm.delete_member": "このメンバーを削除しますか?", - "redis_viewer.confirm.delete_selected": "選択した {{count}} 件の Key を削除しますか?", - "redis_viewer.confirm.delete_stream_entry": "この Stream エントリを削除しますか?", - "redis_viewer.field.field_name": "フィールド名", - "redis_viewer.field.fields_json": "フィールド JSON:", - "redis_viewer.field.key": "Key", - "redis_viewer.field.member": "メンバー:", - "redis_viewer.field.new_key_name": "新しい Key 名", - "redis_viewer.field.new_score": "新しいスコア:", - "redis_viewer.field.score": "スコア:", - "redis_viewer.field.stream_id": "ID(任意、既定 *):", - "redis_viewer.field.ttl_seconds": "TTL(秒)", - "redis_viewer.field.value": "値", - "redis_viewer.help.ttl_forever": "-1 は期限なしを意味します", - "redis_viewer.hint.binary_readonly": "バイナリデータは編集できません", - "redis_viewer.hint.switch_auto_to_edit": "編集するには Auto モードに切り替えてください", - "redis_viewer.label.encoding": "エンコーディング: {{encoding}}", - "redis_viewer.label.keys_count": "{{count}} 件の Key", - "redis_viewer.label.node_count": "{{count}} ノード", - "redis_viewer.label.length": "長さ: {{count}}", - "redis_viewer.label.original_key": "元の Key: {{key}}", - "redis_viewer.message.add_failed": "追加に失敗しました: {{detail}}", - "redis_viewer.message.add_success": "追加しました", - "redis_viewer.message.add_success_with_id": "追加しました {{id}}", - "redis_viewer.message.copied": "コピーしました", - "redis_viewer.message.copy_failed": "コピーに失敗しました", - "redis_viewer.message.create_failed": "作成に失敗しました: {{detail}}", - "redis_viewer.message.create_success": "作成しました", - "redis_viewer.message.delete_failed": "削除に失敗しました: {{detail}}", - "redis_viewer.message.delete_success": "削除しました", - "redis_viewer.message.deleted_keys": "{{count}} 件の Key を削除しました", - "redis_viewer.message.fields_json_invalid": "フィールド JSON が無効です", - "redis_viewer.message.fields_must_be_json_object": "フィールドは JSON オブジェクトである必要があります", - "redis_viewer.message.fields_required": "少なくとも 1 つのフィールドを指定してください", - "redis_viewer.message.key_check_failed": "対象 Key の確認に失敗しました: {{detail}}", - "redis_viewer.message.key_missing_removed": "Key は存在しないか期限切れのため、一覧から削除されました", - "redis_viewer.message.key_name_copied": "Key 名をコピーしました", - "redis_viewer.message.load_keys_failed": "Key の読み込みに失敗しました: {{detail}}", - "redis_viewer.message.new_key_name_required": "新しい Key 名を入力してください", - "redis_viewer.message.rename_failed": "名前の変更に失敗しました: {{detail}}", - "redis_viewer.message.rename_same_key": "新しい Key 名は元の名前と異なる必要があります", - "redis_viewer.message.rename_success": "Key 名を変更しました", - "redis_viewer.message.save_failed": "保存に失敗しました: {{detail}}", - "redis_viewer.message.save_success": "保存しました", - "redis_viewer.message.set_failed": "設定に失敗しました: {{detail}}", - "redis_viewer.message.stream_entry_not_deleted": "Stream エントリは削除されませんでした。すでに存在しない可能性があります", - "redis_viewer.message.target_key_exists": "対象 Key はすでに存在します: {{key}}", - "redis_viewer.message.ttl_set_success": "TTL を更新しました", - "redis_viewer.message.update_failed": "更新に失敗しました: {{detail}}", - "redis_viewer.message.update_success": "更新しました", - "redis_viewer.message.value_load_failed": "値の取得に失敗しました: {{detail}}", - "redis_viewer.modal.add_element": "要素を追加", - "redis_viewer.modal.add_element_head": "先頭に要素を追加", - "redis_viewer.modal.add_field": "フィールドを追加", - "redis_viewer.modal.add_member": "メンバーを追加", - "redis_viewer.modal.add_stream_entry": "Stream エントリを追加", - "redis_viewer.modal.edit_field": "フィールドを編集: {{field}}", - "redis_viewer.modal.edit_index": "インデックス {{index}} を編集", - "redis_viewer.modal.edit_value": "値を編集", - "redis_viewer.modal.new_key": "新しい Key", - "redis_viewer.modal.rename_key": "Key 名を変更", - "redis_viewer.modal.set_ttl": "TTL を設定", - "redis_viewer.modal.update_score": "スコアを更新", - "redis_viewer.notice.large_keyspace_mode": "大規模 keyspace パフォーマンスモードが有効です。ノード描画は簡略化され、展開済みグループは最大 {{count}} 件まで保持されます。", - "redis_viewer.placeholder.key_name": "Key 名", - "redis_viewer.placeholder.member_value": "メンバー値を入力", - "redis_viewer.placeholder.new_element_value": "新しい要素値を入力", - "redis_viewer.placeholder.new_key_name": "new:key:name", - "redis_viewer.placeholder.new_member_value": "新しいメンバー値を入力", - "redis_viewer.placeholder.search_exact": "完全一致検索する Key または名前空間を入力", - "redis_viewer.placeholder.search_fuzzy": "Key を検索(あいまい一致)", - "redis_viewer.placeholder.stream_id": "例: * または 1723110000000-0", - "redis_viewer.placeholder.value": "値", - "redis_viewer.search.exact": "完全一致", - "redis_viewer.search.fuzzy": "あいまい", - "redis_viewer.topology.cluster": "Cluster", - "redis_viewer.topology.sentinel": "Sentinel", - "redis_viewer.topology.single": "スタンドアロン", - "redis_viewer.state.connection_not_found": "接続が見つかりません", - "redis_viewer.state.empty_selection": "詳細を表示する Key を選択してください", - "redis_viewer.table.action": "操作", - "redis_viewer.table.field": "フィールド", - "redis_viewer.table.fields": "フィールド", - "redis_viewer.table.index": "インデックス", - "redis_viewer.table.member": "メンバー", - "redis_viewer.table.score": "スコア", - "redis_viewer.table.value": "値", - "redis_viewer.title.active_key": "アクティブな Key", - "redis_viewer.title.key_explorer": "Key エクスプローラー", - "redis_viewer.title.namespace_key": "名前空間 / Key", - "redis_viewer.title.type_ttl": "タイプ / TTL", - "redis_viewer.tooltip.copy_fields_json": "フィールド JSON をコピー", - "redis_viewer.tooltip.copy_id": "ID をコピー", - "redis_viewer.tooltip.copy_key_name": "Key 名をコピー", - "redis_viewer.tooltip.copy_value": "値をコピー", - "redis_viewer.tooltip.resize_panels": "ドラッグしてサイズ変更", - "redis_viewer.ttl.days_hours": "{{days}}日 {{hours}}時間", - "redis_viewer.ttl.expired": "期限切れ", - "redis_viewer.ttl.forever": "永続", - "redis_viewer.ttl.hours_minutes": "{{hours}}時間 {{minutes}}分", - "redis_viewer.ttl.minutes_seconds": "{{minutes}}分 {{seconds}}秒", - "redis_viewer.ttl.seconds": "{{seconds}}秒", - "redis_viewer.validation.key_required": "Key を入力してください", - "redis_viewer.validation.new_key_name_required": "新しい Key 名を入力してください", - "redis_viewer.validation.value_required": "値を入力してください", - "redis_viewer.view.auto": "Auto", - "redis_viewer.view.hex": "Hex", - "redis_viewer.view.text": "生テキスト", - "redis_viewer.view.title": "表示モード", - "ai_chat.header.default_session_title": "新しいチャット", - "ai_chat.header.export_time": "エクスポート日時:", - "ai_chat.header.export_user": "あなた", - "ai_chat.header.tooltip.close": "パネルを閉じる", - "ai_chat.header.tooltip.export_markdown": "Markdown としてエクスポート", - "ai_chat.header.tooltip.history": "チャット履歴", - "ai_chat.header.tooltip.new_chat": "新しいチャット", - "ai_chat.header.tooltip.new_chat_clear": "新しいチャット(現在の内容をクリア)", - "ai_chat.header.tooltip.settings": "AI 設定", - "ai_chat.header.session.connected": "{{title}} · 接続済み", - "ai_chat.header.mode_tabs.aria_label": "AI 作業モード", - "ai_chat.header.mode.chat": "チャット", - "ai_chat.header.mode.insights": "自動インサイト", - "ai_chat.header.mode.history": "履歴", - "ai_chat.header.action.export": "エクスポート", - "ai_chat.history.action.new_chat": "新しいチャットを開始", - "ai_chat.history.default_session_title": "新しいチャット", - "ai_chat.history.empty.no_matches": "一致するチャットはありません", - "ai_chat.history.search.placeholder": "履歴を検索...", - "ai_chat.history.title": "チャット履歴", - "ai_chat.history.tooltip.collapse": "折りたたむ", - "ai_chat.history.tooltip.delete": "削除", - "ai_chat.welcome.description.default": "データベース向けの AI アシスタントです。SQL クエリ生成、スキーマ分析、実行ロジックの説明、データベース性能の最適化を支援します。", - "ai_chat.welcome.description.with_context": "{{count}} 件のテーブル構造が関連付けられています。下のクイック操作から分析を開始できます。", - "ai_chat.welcome.title": "こんにちは、GoNavi AI です", - "ai_chat.quick_action.explain_schema": "🔍 スキーマを説明", - "ai_chat.quick_action.explain_schema.hint.with_context": "フィールドと制約を詳しく説明", - "ai_chat.quick_action.explain_schema.prompt.with_context": "次のテーブルについて、設計意図とフィールドの意味を詳しく説明してください: {{tables}}", - "ai_chat.quick_action.explain_schema.title": "スキーマを説明", - "ai_chat.quick_action.explain_sql": "🔍 SQL を説明", - "ai_chat.quick_action.explain_sql.hint.default": "実行ロジックを説明", - "ai_chat.quick_action.explain_sql.prompt.default": "次の SQL 文の実行ロジックを説明してください:\n```sql\n\n```", - "ai_chat.quick_action.explain_sql.title": "SQL を説明", - "ai_chat.quick_action.generate_sql": "📝 SQL を生成", - "ai_chat.quick_action.generate_sql.hint.default": "自然言語からクエリを生成", - "ai_chat.quick_action.generate_sql.hint.with_context": "自然言語からクエリを生成", - "ai_chat.quick_action.generate_sql.prompt.default": "現在のデータベーステーブル構造に基づいてクエリを生成してください:", - "ai_chat.quick_action.generate_sql.prompt.with_context": "次のテーブル構造に基づいて、よく使うクエリを生成してください: {{tables}}", - "ai_chat.quick_action.generate_sql.title": "SQL を生成", - "ai_chat.quick_action.optimize": "⚡ 最適化の提案", - "ai_chat.quick_action.optimize.hint.default": "性能とインデックスの提案", - "ai_chat.quick_action.optimize.hint.with_context": "インデックス、正規化、潜在リスク", - "ai_chat.quick_action.optimize.prompt.default": "次の SQL 文の性能を分析し、最適化案を提示してください:\n```sql\n\n```", - "ai_chat.quick_action.optimize.prompt.with_context": "次のテーブルの構造設計を分析し、インデックスとクエリ性能の最適化案を提示してください: {{tables}}", - "ai_chat.quick_action.optimize.title": "最適化の提案", - "ai_chat.quick_action.schema_analysis": "🏗️ スキーマ分析", - "ai_chat.quick_action.schema_analysis.hint.default": "構造品質を分析", - "ai_chat.quick_action.schema_analysis.hint.with_context": "テーブル関係と依存グラフ", - "ai_chat.quick_action.schema_analysis.prompt.default": "現在のデータベーステーブル構造を分析し、最適化案を提示してください。", - "ai_chat.quick_action.schema_analysis.prompt.with_context": "次のテーブルに対して包括的な Schema 分析を行い、データ型の選択、正規化レビュー、改善案を含めてください: {{tables}}", - "ai_chat.quick_action.schema_analysis.title": "Schema 分析", - "ai_chat.quick_action.table_separator": "、", - "ai_chat.welcome.suggestion.channel_distribution.default": "過去 7 日間の注文チャネル分布", - "ai_chat.welcome.suggestion.channel_distribution.with_context": "過去 7 日間の主要チャネル分布", - "ai_chat.welcome.suggestion.cleanup.default": "異常データを整理する SQL を書いて", - "ai_chat.welcome.suggestion.cleanup.with_context": "異常チャネルを無効化する SQL を書いて", - "ai_chat.welcome.suggestion.divider": "または直接質問", - "ai_chat.welcome.suggestion.low_rows.default": "現在の結果が少数のレコードだけなのはなぜ?", - "ai_chat.welcome.suggestion.low_rows.with_context": "{{table}} のレコードが少ないのはなぜ?", - "ai_chat.input.action.send": "送信", - "ai_chat.input.action.stop": "生成を停止", - "ai_chat.input.context.connection_tooltip": "現在のデータ照会コンテキスト", - "ai_chat.input.context.memory_tooltip": "現在のセッションメモリ使用量です。{{limit}} の制限に達すると自動圧縮が開始されます。", - "ai_chat.input.context.tag_label": "関連コンテキスト({{count}})", - "ai_chat.input.message.context_added": "{{count}} 件のテーブル構造をコンテキストに追加しました", - "ai_chat.input.message.context_load_failed": "テーブルコンテキストの読み込みに失敗しました: {{detail}}", - "ai_chat.input.message.context_removed": "{{count}} 件のテーブル構造をコンテキストから削除しました", - "ai_chat.input.message.context_synced": "コンテキストを同期しました: 追加 {{added}}、削除 {{removed}}", - "ai_chat.input.message.fetch_table_schema_failed": "{{table}} の構造を取得できませんでした: {{detail}}", - "ai_chat.input.message.fetch_tables_failed": "テーブル一覧の取得に失敗しました: {{detail}}", - "ai_chat.input.message.select_database_context_first": "チャットコンテキストを追加する前に左側でデータベースを選択してください", - "ai_chat.input.message.selection_unchanged": "選択したテーブルに変更はありません", - "ai_chat.input.modal.empty_tables": "「{{query}}」に一致するテーブルはありません", - "ai_chat.input.modal.invert_matching": "一致結果を反転", - "ai_chat.input.modal.ok": "選択したテーブルをコンテキストへ同期", - "ai_chat.input.modal.search_table.placeholder": "現在のデータベース内のテーブルを検索...", - "ai_chat.input.modal.select_all_matching": "一致するテーブルをすべて選択({{count}})", - "ai_chat.input.modal.switch_database.placeholder": "データベースを切り替え", - "ai_chat.input.modal.title": "データベーステーブル構造のコンテキストを追加", - "ai_chat.input.model.placeholder": "モデルを選択", - "ai_chat.input.placeholder": "メッセージを入力...({{shortcut}}、Shift+Enter で改行、/ でコマンド)", - "ai_chat.input.slash.diff.desc": "2 つのテーブル差分を比較して変更を生成", - "ai_chat.input.slash.diff.label": "🔄 テーブル比較", - "ai_chat.input.slash.diff.prompt": "次の 2 つのテーブル構造の差分を比較し、旧バージョンから新バージョンへ移行する ALTER 文を生成してください:", - "ai_chat.input.slash.explain.desc": "選択した SQL のロジックを説明", - "ai_chat.input.slash.explain.label": "💡 SQL を説明", - "ai_chat.input.slash.explain.prompt": "次の SQL の実行ロジックと各ステップの役割を説明してください:\n```sql\n\n```", - "ai_chat.input.slash.index.desc": "最適なインデックス案を推奨", - "ai_chat.input.slash.index.label": "📊 インデックス提案", - "ai_chat.input.slash.index.prompt": "現在のテーブル構造と一般的なクエリシナリオに基づいて最適なインデックス案を推奨し、DDL を提示してください:", - "ai_chat.input.slash.mock.desc": "INSERT テストデータを生成", - "ai_chat.input.slash.mock.label": "🎲 テストデータを作成", - "ai_chat.input.slash.mock.prompt": "現在関連付けられているテーブル向けに、業務上自然な INSERT テストデータ文を 10 件生成してください:", - "ai_chat.input.slash.optimize.desc": "SQL の性能ボトルネックを分析", - "ai_chat.input.slash.optimize.label": "⚡ 最適化分析", - "ai_chat.input.slash.optimize.prompt": "次の SQL の性能問題を分析し、最適化後のバージョンを提示してください:\n```sql\n\n```", - "ai_chat.input.slash.query.desc": "照会したい内容を自然言語で説明", - "ai_chat.input.slash.query.label": "🔍 自然言語クエリ", - "ai_chat.input.slash.query.prompt": "SQL クエリを書いてください:", - "ai_chat.input.slash.schema.desc": "テーブル設計の品質をレビュー", - "ai_chat.input.slash.schema.label": "🏗️ テーブル設計レビュー", - "ai_chat.input.slash.schema.prompt": "現在関連付けられているテーブル設計をレビューし、フィールド型、正規化、インデックス戦略、改善案を含めてください:", - "ai_chat.input.slash.sql.desc": "要件を説明してステートメントを生成", - "ai_chat.input.slash.sql.label": "📝 SQL を生成", - "ai_chat.input.slash.sql.prompt": "次の要件から SQL を生成してください:", - "ai_chat.input.tooltip.attach_table_context": "データベーステーブルコンテキストを追加", - "ai_chat.input.tooltip.upload_image": "画像またはスクリーンショットをアップロード", - "ai_chat.tools.mcp_fallback_description": "{{serverName}} が提供する MCP ツール {{toolName}}", - "ai_chat.composer_notice.missing_model.description": "下のモデルドロップダウンを開いてモデルを選択してください。一覧が空の場合は、プロバイダーのエンドポイントと API Key を確認してください。", - "ai_chat.composer_notice.missing_model.title": "先にモデルを選択してください", - "ai_chat.composer_notice.missing_provider.description": "まず AI 設定でモデルプロバイダーを追加して有効化してください。", - "ai_chat.composer_notice.missing_provider.title": "利用できるプロバイダーがありません", - "ai_chat.composer_notice.model_fetch_failed.default_description": "プロバイダーのエンドポイント、API Key、またはアカウント権限を確認してから、モデルドロップダウンを再度開いてください。", - "ai_chat.composer_notice.model_fetch_failed.detail_description": "プロバイダーの詳細: {{detail}}", - "ai_chat.composer_notice.model_fetch_failed.title": "モデル一覧の読み込みに失敗しました", - "ai_chat.message.action.copy_full": "全文をコピー", - "ai_chat.message.action.copied": "コピーしました", - "ai_chat.message.action.delete": "メッセージを削除", - "ai_chat.message.action.edit": "このメッセージを編集し、後続の記録を削除して再送信", - "ai_chat.message.action.retry": "直前のユーザーメッセージから再生成", - "ai_chat.message.action.copy_error_raw": "元のエラーをコピー", - "ai_chat.message.action.copied_error_raw": "元のエラーをコピーしました", - "ai_chat.message.role.user": "あなた", - "ai_chat.message.image_alt": "添付画像 {{index}}", - "ai_chat.message.code.copy": "コードをコピー", - "ai_chat.message.code.copied": "コピーしました", - "ai_chat.message.code.insert": "挿入", - "ai_chat.message.code.insert_tooltip": "この SQL をクエリ作業領域へ挿入し、すばやく編集または実行できます", - "ai_chat.message.code.execute": "実行", - "ai_chat.message.code.execute_tooltip": "AI 安全ポリシーの管理下でただちに実行", - "ai_chat.message.code.executing": "実行中...", - "ai_chat.message.code.preview": "プレビュー", - "ai_chat.message.code.preview_tooltip": "チャット内でクエリ結果をプレビューします(最大 20 行)", - "ai_chat.message.code.expand_all": "すべてのコードを展開", - "ai_chat.message.code.collapse": "コードを折りたたむ", - "ai_chat.message.code.preview_result": "プレビュー結果({{rows}} 行 × {{columns}} 列)", - "ai_chat.message.code.preview_collapse": "折りたたむ", - "ai_chat.message.code.view_result": "結果を表示({{rows}} 行)", - "ai_chat.message.code.query_no_result": "クエリ結果がありません", - "ai_chat.message.code.execute_failed": "実行に失敗しました", - "ai_chat.message.security.blocked": "🔒 安全ポリシーによりブロックされました: 現在の安全レベルでは {{operationType}} 種類の SQL を実行できません。AI 設定で安全レベルを調整してください。", - "ai_chat.message.security.confirm_title": "⚠️ 安全確認", - "ai_chat.message.security.default_warning": "この SQL は {{operationType}} 操作です。実行しますか?", - "ai_chat.message.security.confirm_execute": "実行する", - "ai_chat.message.thinking.title": "思考プロセス", - "ai_chat.message.thinking.active": "思考中...", - "ai_chat.message.thinking.count": "({{count}} 文字)", - "ai_chat.message.tool_result.title": "プローブ実行結果({{name}})", - "ai_chat.message.tool_result.char_count": "{{count}} 文字", - "ai_chat.message.tool_result.no_data": "データなし", - "ai_chat.message.tool_call.get_connections": "利用可能な接続情報を取得", - "ai_chat.message.tool_call.get_databases": "データベース一覧をスキャン", - "ai_chat.message.tool_call.get_tables": "テーブル構造情報を分析", - "ai_chat.message.tool_call.get_columns": "実際のカラム定義を確認", - "ai_chat.message.tool_call.get_table_ddl": "CREATE TABLE 文を抽出", - "ai_chat.message.tool_call.execute_sql": "読み取り専用 SQL 検証を実行", - "ai_chat.message.tool_call.running": "データプローブを実行中...", - "ai_chat.message.tool_call.done": "データプローブが完了しました({{count}} 件)", - "ai_chat.message.wait.connecting": "接続を確立中", - "ai_chat.message.jvm.apply_preview": "JVM プレビューに適用", - "ai_chat.message.jvm.apply_diagnostic": "診断コンソールに適用", - "ai_chat.message.jvm.missing_plan_context": "この JVM プランには元のタブコンテキストがありません。対象の JVM リソースページで再生成してください。", - "ai_chat.message.jvm.plan_target_not_found": "この JVM プランに一致するリソースタブが見つかりません。元の対象リソースを開いてから適用してください。", - "ai_chat.message.jvm.missing_diagnostic_context": "この診断プランには元のタブコンテキストがありません。対象の診断コンソールで再生成してください。", - "ai_chat.message.jvm.diagnostic_target_not_found": "この診断プランに一致する診断コンソールタブが見つかりません。元の対象コンソールを開いてから適用してください。", - "ai_chat.message.mermaid.parse_failed": "Mermaid の解析に失敗しました: {{detail}}", - "ai_chat.message.mermaid.render_failed": "Mermaid の描画で例外が発生しました: {{detail}}", - "ai_chat.panel.history.empty": "チャット履歴はまだありません", - "ai_chat.panel.insight.context.linked_title": "{{count}} 件のテーブルを関連付け済み", - "ai_chat.panel.insight.context.empty_title": "テーブル構造はまだ関連付けられていません", - "ai_chat.panel.insight.context.linked_body": "この会話には {{tables}} の構造コンテキストが含まれます。", - "ai_chat.panel.insight.context.empty_body": "テーブルページで AI を開くと現在のテーブルが自動で関連付けられます。入力欄の上から手動でコンテキストを追加することもできます。", - "ai_chat.panel.insight.context.table_separator": "、", - "ai_chat.panel.insight.context.more_tables_suffix": " などのテーブル", - "ai_chat.panel.insight.query.slowest_title": "最近で最も遅いクエリ {{duration}}ms", - "ai_chat.panel.insight.query.empty_title": "クエリ時間のサンプルはまだありません", - "ai_chat.panel.insight.query.empty_body": "クエリ実行後、最適化分析に使える SQL の手掛かりがここに表示されます。", - "ai_chat.panel.insight.status.failed_title": "最近のクエリ失敗 {{count}} 件", - "ai_chat.panel.insight.status.ok_title": "最近のクエリ状態は正常です", - "ai_chat.panel.insight.status.recent_body": "最近の SQL を {{count}} 件記録済みです。AI に説明や最適化を依頼できます。", - "ai_chat.panel.insight.status.empty_body": "SQL ログはまだありません。", - "ai_chat.panel.insight.write.detected_title": "書き込み操作を {{count}} 件検出", - "ai_chat.panel.insight.write.readonly_title": "現在は読み取り専用分析が中心です", - "ai_chat.panel.insight.write.detected_body": "書き込みを含む SQL は、コミット前にプレビューとロールバック文を生成してください。", - "ai_chat.panel.insight.write.readonly_body": "AI は既定で説明、SELECT の生成、Schema の分析、インデックス最適化を優先します。", - "ai_chat.panel.render_error.title": "この AI メッセージの描画に失敗したため、自動的に隔離しました", - "ai_chat.panel.render_error.description": "他の会話は引き続き使用できます。この異常なメッセージを削除してから操作を続けられます。", - "ai_chat.panel.render_error.unknown": "不明な描画エラー", - "ai_chat.panel.render_error.retry": "描画を再試行", - "ai_chat.panel.render_error.delete": "このメッセージを削除", - "ai_chat.panel.status.memory_compressing": "⚙️ 会話が過負荷です。記憶圧縮を開始しています...", - "ai_chat.panel.status.memory_compress_failed": "❌ 記憶圧縮に失敗しました。元の内容のまま続行します...", - "ai_chat.panel.status.memory_summary": "【自動記憶再構成】長い履歴を要約に圧縮しました:\n\n{{summary}}", - "ai_chat.panel.status.memory_probe_summary": "【自動記憶再構成】長いプローブ履歴と会話を要約に圧縮しました:\n\n{{summary}}", - "ai_chat.panel.prompt.memory_summary": "これは非常に長い会話の履歴です。コンテキスト領域を解放しつつ記憶の核心を保つため、内容を丁寧に読み、技術的事実、探索済みのデータ構造の状態、ユーザーの中心的な要望、現在の進捗を基準に、高度に圧縮した構造化要約を作成してください。\n注意:\n1. 客観的かつ正確にし、重要な業務ロジックや探索済みのテーブル名/フィールドを漏らさないこと。\n2. 無効な実行過程、挨拶や社交辞令、JSON 戻り値そのものは除外すること。\n3. 1000-2000 語程度に収め、簡潔な Markdown のみを出力すること。\n4. 冒頭から直接要約を出力し、挨拶は含めないこと。", - "ai_chat.panel.prompt.jvm_diagnostic": "あなたは GoNavi の JVM 診断アシスタントです。現在のタブは Arthas 互換の診断ワークベンチであり、診断コンソールへ戻せる構造化診断計画を出力することが目的です。\n\n現在の接続: {{connectionName}}\n対象ホスト: {{host}}\n診断 transport: {{transport}}\n環境: {{environment}}\n接続ポリシー: {{readOnlyPolicy}}\nコマンド権限: observe={{observePolicy}}、trace={{tracePolicy}}、mutating={{mutatingPolicy}}\n\n回答ルール:\n1. 短い分析を先に書いてもよいですが、必ず 1 つだけの ```json コードブロックを含めてください。\n2. JSON フィールドは intent、transport、command、riskLevel、reason、expectedSignals のみに厳密に限定します。\n3. transport は上記の診断 transport と一致させ、別の transport を作らないでください。\n4. command は単一の診断コマンドにし、shell プロンプト、改行連結、複数コマンド、コードフェンスを含めないでください。\n5. riskLevel は low、medium、high のいずれかにしてください。\n6. expectedSignals は、実行後に重点的に観察すべきシグナルを説明する文字列配列にしてください。\n7. コマンド権限で許可されていない操作カテゴリは出力しないでください。満たせない場合は制限を直接説明してください。", - "ai_chat.panel.jvm_diagnostic.policy.read_only": "既定では読み取り専用診断として回答し、observe、trace、トラブルシュート用コマンドのみを生成し、すでに実行済みとは仮定しないでください。", - "ai_chat.panel.jvm_diagnostic.policy.plan_first": "診断コマンドは生成できますが、必ず先に計画を示し、実行するかどうかはユーザーに判断させてください。", - "ai_chat.panel.jvm_diagnostic.permission.allowed": "許可", - "ai_chat.panel.jvm_diagnostic.permission.forbidden": "禁止", - "ai_chat.panel.prompt.jvm_runtime": "あなたは GoNavi の JVM ランタイム分析アシスタントです。現在のコンテキストは SQL ではなく、JVM リソースワークベンチです。\n\n現在の接続: {{connectionName}}\n対象ホスト: {{host}}\nProvider モード: {{providerMode}}\n環境: {{environment}}\n接続ポリシー: {{connectionPolicy}}\nresourcePath 状態: {{resourcePathStatus}}\n\n回答ルール:\n1. リソース構造、リスク、変更提案、ロールバック提案を説明できます。\n2. ユーザーが JVM 変更プランを求めた場合は、必ず 1 つだけの ```json コードブロックを出力し、JSON フィールドは targetType、selector、action、payload、reason のみに厳密に限定してください。\n3. action は現在のリソーススナップショットまたはメタデータに宣言済みの supportedActions を優先してください。宣言がない場合のみ、スナップショット内容から慎重に推定してください。\n4. selector.resourcePath には現在の resourcePath を優先してください。現在のパスが不明な場合は、正確な特定ができないことを明示し、パスを作らないでください。\n5. payload は {\"format\":\"json\",\"value\":{...}} または {\"format\":\"text\",\"value\":\"...\"} の 2 種類のラッパーだけを使用し、スクリプト、コマンド、裸の値は出力しないでください。\n6. スクリプト、コマンド、または実行済み成功のような表現を出力しないでください。", - "ai_chat.panel.jvm_runtime.policy.read_only": "読み取り専用接続です。分析と変更計画の生成のみを行い、書き込みがすでに実行されたとは絶対に仮定しないでください。", - "ai_chat.panel.jvm_runtime.policy.preview_required": "書き込み可能な接続ですが、すべての変更は先にプレビューを生成し、人による確認を待つ必要があります。", - "ai_chat.panel.jvm_runtime.resource_path.current": "現在の resourcePath: {{resourcePath}}", - "ai_chat.panel.jvm_runtime.resource_path.missing": "具体的な resourcePath は現在選択されていません。", - "ai_chat.panel.prompt.sql.context_tables": "あなたはプロのデータベースアシスタントです。現在のデータベース種別は {{dbDisplayType}} です。その方言で SQL を生成してください。以下はユーザーが関連付けたテーブル構造 DDL です。回答時は優先して参照してください:\n\n{{ddlChunks}}", - "ai_chat.panel.prompt.sql.current_database": "あなたはプロのデータベースアシスタントです。現在のデータベース種別は {{dbDisplayType}}、現在のデータベース名は {{targetDbName}} です。ユーザーが特定のテーブルまたは現在のデータベースについて問い合わせた場合は、提供されている get_tables ツールを能動的に呼び出してテーブル情報を取得できます。", - "ai_chat.panel.prompt.sql.no_context": "あなたはプロのデータベースアシスタントです。ユーザーは現在、UI 上でコンテキストとして使う具体的なデータベースやテーブルを選択していません。\n\n重要ルール:\n1. ユーザーの対象テーブル探しを支援する必要がある場合、テーブル名を絶対に推測しないでください。必ずツールを呼び出して実データを取得してください。\n2. 完全なワークフロー: get_connections → get_databases → get_tables → get_columns → SQL 生成。どの手順も省略してはいけません。\n3. 【接続優先度 - 極めて重要】接続リストを取得したら、次の優先度で順番に検索してください:\n - 第一優先: host が localhost、127.0.0.1、またはローカル端末を示す接続\n - 第二優先: name または host に dev や local を含む接続、または host が 10.x、192.168.x、172.16-31.x などの内部 IP の接続\n - 第三優先: test や production などその他の接続\n 高優先度の接続で対象テーブルが見つかった場合は、その接続を直接使用し、低優先度の接続は探索しないでください。\n4. 現在のデータベースで対象テーブルが見つからない場合は、他のデータベースも必ず検索し、途中で諦めないでください。\n5. 停止できるのは、考えられるすべてのデータベースを確認し終えた場合、または対象テーブルが明確に見つかった場合だけです。\n6. データベース照会に関係しない通常の質問には通常どおり回答してください。\n\nSQL 生成ルール(極めて重要、厳守):\n7. 【フィールド精度 - 絶対ルール】SQL を生成する前に、必ず get_columns を呼び出して対象テーブルの実フィールド一覧を取得してください。SQL 内のすべてのフィールド名は、get_columns が返す field 値と完全一致(大文字小文字も一致)しなければなりません。フィールド名を作ったり、省略したり、推測したりしないでください。たとえば field が channel なら channel と書き、pay_channel と書いてはいけません。\n8. SQL 生成時は \"database.table\" 形式の修飾プレフィックスを使わず、テーブル名そのものだけを書いてください。\n9. 結果を報告するとき、接続名/ID とデータベース名は、同一の get_tables 呼び出しの実パラメータに厳密に由来している必要があります。ある接続の connectionId と別の接続の dbName を混在させないでください。\n10. 名前が似ているデータベースが複数ある場合は、対象テーブルが具体的にどのデータベースにあるかを明示してください。\n11. 【必須】すべての SQL コードブロックの 1 行目には、次の形式のコンテキスト宣言コメントを必ず追加してください: -- @context connectionId=<接続ID> dbName=<データベース名>。connectionId と dbName は、同じ成功した get_tables 呼び出し、つまりその呼び出しで実際に渡したパラメータ値から取得してください。例:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\n現在利用可能な接続: [{{connList}}]", - "ai_chat.panel.prompt.sql.no_connections": "あなたはプロのデータベースアシスタントです。現在、アプリ内に利用可能なデータベース接続がありません。\n\nユーザーの質問にデータベース構造または SQL が必要な場合は、接続が存在しないため get_connections、get_databases、get_tables、get_columns で実際のデータベース情報を取得できないことを先に説明し、接続を作成してから再試行するよう案内してください。connectionId、dbName、テーブル名、フィールド名を推測しないでください。\n\nデータベース照会に関係しない通常の質問には通常どおり回答してください。", - "ai_chat.panel.model_control.force_tool_call": "function call を直接使用してツールを呼び出し、操作を実行してください。計画を文章で説明するだけにしないでください。", - "ai_chat.panel.model_control.continue_after_summary": "上記の最新状態と探索結果に基づき、先ほど未完了だった分析を続けるか、次の手順を実行してください。", - "ai_chat.panel.local_tool.get_connections.description": "データベースの照会や操作が必要だが、ユーザーが接続コンテキストを選択していない場合に、アプリで利用可能なすべてのデータベース接続情報を取得します。戻り値には接続 ID (id) と名前 (name) が含まれます。", - "ai_chat.panel.local_tool.get_databases.description": "指定された接続 (connectionId) 配下のすべてのデータベース (Database/Schema) 名を取得します。", - "ai_chat.panel.local_tool.get_tables.description": "対象の接続と dbName が確定した後、ユーザーがテーブルについて尋ねた、または暗黙的に言及したが正確な tableName が不明な場合、このツールを呼び出してそのデータベース内の全テーブル名一覧(テーブル名のみ)を取得し、対象テーブルの推定に役立てます。", - "ai_chat.panel.local_tool.get_columns.description": "指定されたテーブルの field 一覧を取得します。field 名、型、NULL 可否、デフォルト値、コメントなどを含みます。SQL を生成する前に必ずこのツールを呼び出して実在する field 名を確認し、field 名を推測しないでください。", - "ai_chat.panel.local_tool.get_table_ddl.description": "指定されたテーブルの完全な CREATE TABLE DDL を取得します。field、インデックス、制約などの完全な構造情報を含みます。", - "ai_chat.panel.local_tool.execute_sql.description": "指定された接続とデータベースで SQL クエリを実行し、結果を返します。安全レベルにより制御され、読み取り専用モードでは SELECT/SHOW/DESCRIBE などのクエリ操作のみ実行できます。結果は最大 50 行です。", - "ai_chat.panel.local_tool.param.connection_id": "connectionId(接続 ID)", - "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId(get_connections から取得)", - "ai_chat.panel.local_tool.param.db_name": "dbName(データベース名)", - "ai_chat.panel.local_tool.param.table_name": "tableName(テーブル名)", - "ai_chat.panel.local_tool.param.sql": "実行する SQL 文", - "ai_chat.panel.tool_error.connection_not_found": "接続が見つかりません", - "ai_chat.panel.tool_error.unknown_function": "不明な関数: {{functionName}}", - "ai_chat.panel.tool_error.fetch_databases_failed": "データベース一覧の取得に失敗しました: {{detail}}", - "ai_chat.panel.tool_error.fetch_tables_failed": "テーブル一覧の取得に失敗しました: {{detail}}", - "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ 以下は {{tableName}} テーブルの実際のフィールド一覧です。SQL を生成するときは、列名としてこれらの field 値だけを原文どおり使用し、変更、省略、自作をしないでください。\n使用可能なフィールド: {{fieldNames}}\n詳細: {{detailJson}}", - "ai_chat.panel.tool_error.fetch_columns_failed": "カラム一覧の取得に失敗しました: {{detail}}", - "ai_chat.panel.tool_error.fetch_table_ddl_failed": "CREATE TABLE 文の取得に失敗しました: {{detail}}", - "ai_chat.panel.tool_error.sql_blocked": "セキュリティポリシーによりこのリクエストはブロックされました。現在の安全レベルでは {{operationType}} SQL は許可されていません。SQL をユーザーに表示し、手動で実行するよう依頼してください。", - "ai_chat.panel.tool_error.sql_execute_failed": "SQL の実行に失敗しました", - "ai_chat.panel.tool_error.sql_execute_exception": "SQL 実行例外: {{detail}}", - "ai_chat.panel.error.unknown": "不明なエラー", - "ai_chat.panel.error.http_server": "HTTP {{code}} サーバーエラー", - "ai_chat.panel.error.html_response": "サーバーが異常な HTML 応答を返しました。ゲートウェイタイムアウトまたはサービス停止の可能性があります", - "ai_chat.panel.error.truncated_suffix": "...(切り詰め済み)", - "ai_chat.panel.notice.fetch_models_failed": "モデル一覧の取得に失敗しました: {{detail}}", - "ai_chat.panel.message.error": "❌ エラー: {{detail}}", - "ai_chat.panel.message.empty_response": "❌ モデルから内容が返りませんでした。頻度制限、コンテキスト過負荷、または拒否の可能性があります。", - "ai_chat.panel.message.request_interrupted": "❌ リクエストが中断されました。具体的な応答を受信していません。", - "ai_chat.panel.message.service_not_ready": "❌ AI Service はまだ準備できていません", - "ai_chat.panel.message.send_failed": "❌ 送信に失敗しました: {{detail}}", - "ai_chat.panel.probe.max_rounds": "⚠️ ツール呼び出しが {{count}} ラウンドの上限に達したため停止しました。探索を続けるには新しいメッセージを送信してください。", - "ai_chat.panel.probe.consecutive_failed": "⚠️ プローブが 3 ラウンド連続で失敗したため停止しました。接続状態を確認してから再試行してください。", - "ai_chat.panel.status.summarizing_probe": "プローブ実行結果を集約中", - "ai_chat.panel.status.returning_runtime_data": "実行時データをモデルへ返送中", - "ai_chat.panel.status.deep_reasoning": "モデルが深く推論中", - "ai_chat.panel.status.waiting_instruction": "操作指示を待機中", - "ai_chat.panel.status.analyzing_chain": "経路とロジックを深く分析中", - "ai_chat.panel.status.model_connecting": "モデルに接続中", - "ai_chat.panel.status.waking_engine": "推論エンジンを起動中", - "ai_chat.panel.status.waiting_response": "モデルの応答を待機中", - "ai_chat.panel.session.default_title": "新しいチャット", - "ai_settings.title": "AI 設定", - "ai_settings.subtitle": "AI モデル、安全レベル、コンテキスト設定を構成します", - "ai_settings.nav.title": "設定ナビゲーション", - "ai_settings.nav.providers.title": "モデルプロバイダー", - "ai_settings.nav.providers.description": "モデル端点とシークレットを設定します", - "ai_settings.nav.safety.title": "安全制御", - "ai_settings.nav.safety.description": "AI 操作のリスクレベルを制限します", - "ai_settings.nav.context.title": "コンテキスト", - "ai_settings.nav.context.description": "データベース構造コンテキストを設定します", - "ai_settings.nav.tools.title": "組み込みツール", - "ai_settings.nav.tools.description": "AI が呼び出せるデータプローブを確認します", - "ai_settings.nav.prompts.title": "組み込みプロンプト", - "ai_settings.nav.prompts.description": "システムが用意した基礎要件を確認します", - "ai_settings.provider.empty.title": "モデルプロバイダーが未設定です", - "ai_settings.provider.empty.description": "追加すると AI アシスタントを使い始められます", - "ai_settings.provider.no_model": "モデル未選択", - "ai_settings.provider.next_provider": "次のプロバイダー", - "ai_settings.provider.action.add": "モデルプロバイダーを追加", - "ai_settings.provider.action.edit": "編集", - "ai_settings.provider.action.delete": "削除", - "ai_settings.provider.confirm_delete": "このプロバイダーを削除しますか?", - "ai_settings.provider.editor.add_title": "モデルプロバイダーを追加", - "ai_settings.provider.editor.edit_title": "モデルプロバイダーを編集", - "ai_settings.provider_preset.openai.label": "OpenAI", - "ai_settings.provider_preset.openai.desc": "GPT-5.4 / 5.3 系列", - "ai_settings.provider_preset.deepseek.label": "DeepSeek", - "ai_settings.provider_preset.deepseek.desc": "DeepSeek-V4 / R1 モデル", - "ai_settings.provider_preset.qwen_bailian.label": "Qwen(Bailian 汎用)", - "ai_settings.provider_preset.qwen_bailian.desc": "Bailian の Anthropic互換端点 / リモートのモデル一覧", - "ai_settings.provider_preset.qwen_coding_plan.label": "Qwen(Coding Plan)", - "ai_settings.provider_preset.qwen_coding_plan.desc": "Claude Code CLI プロキシ経路 / 公式対応モデル一覧", - "ai_settings.provider_preset.zhipu.label": "Zhipu GLM", - "ai_settings.provider_preset.zhipu.desc": "GLM-5 / GLM-5-Turbo モデル", - "ai_settings.provider_preset.moonshot.label": "Kimi", - "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5(Anthropic互換)", - "ai_settings.provider_preset.anthropic.label": "Claude", - "ai_settings.provider_preset.anthropic.desc": "Claude Opus/Sonnet モデル", - "ai_settings.provider_preset.gemini.label": "Gemini", - "ai_settings.provider_preset.gemini.desc": "Gemini 3.1 / 2.5 系列", - "ai_settings.provider_preset.volcengine_ark.label": "Volcengine Ark", - "ai_settings.provider_preset.volcengine_ark.desc": "Ark 汎用推論 / Doubao モデル", - "ai_settings.provider_preset.volcengine_coding.label": "Volcengine Coding Plan", - "ai_settings.provider_preset.volcengine_coding.desc": "Ark Code / Coding Plan 経路", - "ai_settings.provider_preset.minimax.label": "MiniMax", - "ai_settings.provider_preset.minimax.desc": "M3 / M2.7 系列(Anthropic互換)", - "ai_settings.provider_preset.ollama.label": "Ollama", - "ai_settings.provider_preset.ollama.desc": "ローカル配置のオープンソースモデル", - "ai_settings.provider_preset.custom.label": "カスタム", - "ai_settings.provider_preset.custom.desc": "カスタム API 端点", - "ai_settings.form.section.service_type": "サービス種別", - "ai_settings.form.section.basic": "基本情報", - "ai_settings.form.section.auth_connection": "認証と接続", - "ai_settings.form.provider_name": "プロバイダー名", - "ai_settings.form.provider_name_required": "名前を入力してください", - "ai_settings.form.provider_name_placeholder": "例:自前の OpenAI 互換端点 / 専用モデル", - "ai_settings.form.api_format": "API 形式", - "ai_settings.form.model_list": "利用可能モデル一覧(任意)", - "ai_settings.form.model_list_placeholder": "モデル ID を指定します。空欄の場合はサーバーから取得します", - "ai_settings.form.api_key": "API Key", - "ai_settings.form.api_key_required": "API Key を入力してください", - "ai_settings.form.api_key_keep_placeholder": "空欄のままなら保存済みシークレットを使い続けます", - "ai_settings.form.api_key_placeholder": "sk-... / あなたの API Key", - "ai_settings.form.api_key_saved_hint": "API Key は保存済みです。空欄のままなら継続利用し、新しい値を入力すると置き換えます。", - "ai_settings.form.clear_saved_api_key": "保存済み API Key を削除", - "ai_settings.form.api_endpoint": "API Endpoint (URL)", - "ai_settings.form.api_endpoint_required": "有効な端点 URL を入力してください", - "ai_settings.action.back": "戻る", - "ai_settings.action.save": "保存", - "ai_settings.action.test": "接続をテスト", - "ai_settings.action.retest": "再テスト", - "ai_settings.action.connection_ok": "接続正常", - "ai_settings.message.deleted": "削除しました", - "ai_settings.message.deleted_and_switched": "削除し、「{{name}}」へ自動切り替えしました", - "ai_settings.message.delete_failed": "削除に失敗しました", - "ai_settings.message.delete_failed_detail": "削除に失敗しました:{{detail}}", - "ai_settings.message.saved": "保存しました", - "ai_settings.message.save_failed": "保存に失敗しました", - "ai_settings.message.save_failed_detail": "保存に失敗しました:{{detail}}", - "ai_settings.message.switched": "切り替えました", - "ai_settings.message.switch_failed": "切り替えに失敗しました", - "ai_settings.message.switch_failed_detail": "切り替えに失敗しました:{{detail}}", - "ai_settings.message.test_requires_new_api_key": "接続テスト前に新しい API Key を入力するか、保存済みシークレットの削除を取り消してください", - "ai_settings.message.test_success": "接続に成功しました", - "ai_settings.message.test_failed": "テストに失敗しました", - "ai_settings.message.test_failed_detail": "テストに失敗しました:{{detail}}", - "ai_settings.message.unknown_error": "不明なエラー", - "ai_settings.safety.description": "AI が実行できる SQL 操作種別を制御し、データを保護します", - "ai_settings.safety.readonly.label": "読み取り専用モード", - "ai_settings.safety.readonly.desc": "AI は SELECT などの照会操作のみ実行できます。最も安全なモードです。", - "ai_settings.safety.readwrite.label": "読み書きモード", - "ai_settings.safety.readwrite.desc": "AI は INSERT/UPDATE/DELETE を実行できます。危険な操作には確認が必要です。", - "ai_settings.safety.full.label": "完全モード", - "ai_settings.safety.full.desc": "AI は DDL を含むすべての操作を実行できます。高リスク操作では自動的に警告します。", - "ai_settings.context.description": "AI に送信するデータベースコンテキスト量を制御します", - "ai_settings.context.schema_only.label": "スキーマのみ", - "ai_settings.context.schema_only.desc": "表と列の構造情報だけを AI に渡します", - "ai_settings.context.with_samples.label": "サンプルデータを含める", - "ai_settings.context.with_samples.desc": "少量のサンプルデータを含め、AI がデータの特徴を理解しやすくします", - "ai_settings.context.with_results.label": "クエリ結果を含める", - "ai_settings.context.with_results.desc": "直近のクエリ結果をコンテキストとして渡します", - "ai_settings.prompts.description": "以下は現在の GoNavi バージョンに組み込まれている読み取り専用の基礎 AI プロンプトです。対応する場面のリクエストコンテキストへ動的に注入されます。", - "ai_settings.prompts.message.saved": "カスタムプロンプトを保存しました", - "ai_settings.prompts.message.save_failed": "カスタムプロンプトの保存に失敗しました", - "ai_settings.mcp_server.message.saved": "MCP サービスを保存しました", - "ai_settings.mcp_server.message.save_failed": "MCP サービスの保存に失敗しました", - "ai_settings.mcp_server.message.deleted": "MCP サービスを削除しました", - "ai_settings.mcp_server.message.delete_failed": "MCP サービスの削除に失敗しました", - "ai_settings.mcp_server.message.test_success": "MCP サービスに接続しました", - "ai_settings.mcp_server.message.test_failed": "MCP サービスのテストに失敗しました", - "ai_settings.mcp_server.message.test_request_failed": "MCP サービスのテスト実行に失敗しました", - "ai_settings.clipboard.error.unsupported": "現在の環境ではクリップボードへのコピーに対応していません", - "ai_settings.mcp_http.error.control_unsupported_runtime": "現在のランタイムでは MCP HTTP サービスの制御に対応していません", - "ai_settings.mcp_http.error.start_unsupported_version": "現在のバージョンでは MCP HTTP サービスの起動に対応していません", - "ai_settings.mcp_http.error.stop_unsupported_version": "現在のバージョンでは MCP HTTP サービスの停止に対応していません", - "ai_settings.mcp_http.message.started": "GoNavi MCP HTTP サービスを起動しました", - "ai_settings.mcp_http.message.stopped": "GoNavi MCP HTTP サービスを停止しました", - "ai_settings.mcp_http.message.toggle_failed": "GoNavi MCP HTTP サービスの切り替えに失敗しました", - "ai_settings.mcp_http.message.url_unavailable": "コピーできる MCP HTTP URL がありません", - "ai_settings.mcp_http.message.url_copied": "MCP HTTP URL をコピーしました", - "ai_settings.mcp_http.message.authorization_header_required": "Authorization Header を生成するには先に MCP HTTP サービスを起動してください", - "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header をコピーしました", - "ai_settings.mcp_http.status.not_running": "GoNavi MCP HTTP サービスは起動していません", - "ai_settings.skill.message.saved": "Skill を保存しました", - "ai_settings.skill.message.save_failed": "Skill の保存に失敗しました", - "ai_settings.skill.message.deleted": "Skill を削除しました", - "ai_settings.skill.message.delete_failed": "Skill の削除に失敗しました", - "ai_settings.tools.description": "データベース関連の質問を処理するとき、AI アシスタントは以下の組み込みツールを自動呼び出しして実データを取得できます。手動操作は不要です。", - "ai_settings.tools.workflow": "💡 ワークフロー:get_connections → get_databases → get_tables → get_columns → SQL 生成", - "ai_settings.tools.params_label": "パラメーター:", - "ai_settings.tools.builtin_tool_label": "組み込みツール", - "ai_settings.tools.search.aria_label": "組み込みツールを検索", - "ai_settings.tools.search.placeholder": "ツール、フロー、パラメーターを検索。例:mcp / lineLimit / allowMutating / transaction", - "ai_settings.tools.search.clear": "クリア", - "ai_settings.tools.summary": "{{flowVisible}}/{{flowTotal}} 件の推奨フロー、{{toolVisible}}/{{toolTotal}} 個の組み込みツールを表示中。", - "ai_settings.tools.empty.no_matches": "一致する組み込みツールはありません。mcp、ログ、接続、transaction、ショートカット、schema など、より広いキーワードで検索してください。", - "ai_settings.tools.parameters.hint_title": "パラメーターのヒント", - "ai_settings.tools.parameters.type_label": "型:{{type}}", - "ai_settings.tools.parameters.required": "必須", - "ai_settings.tools.parameters.optional": "任意", - "ai_settings.tools.parameters.enum_values": "選択値:{{values}}", - "ai_settings.tools.parameters.default_value": "既定:{{value}}", - "ai_settings.tools.parameters.example": "例:", - "ai_settings.tools.params.none": "パラメーターなし", - "ai_settings.tools.get_connections.desc": "利用可能なデータベース接続をすべて取得", - "ai_settings.tools.get_connections.detail": "接続 ID、名前、種類(MySQL/PostgreSQL など)、Host アドレスを返します。AI はこの情報から優先的に探索する接続を判断します。", - "ai_settings.tools.get_databases.desc": "指定接続配下のデータベースを取得", - "ai_settings.tools.get_databases.detail": "connectionId を渡すと、その接続配下のデータベースまたはスキーマ名一覧を返します。", - "ai_settings.tools.get_tables.desc": "指定データベース配下の表名を取得", - "ai_settings.tools.get_tables.detail": "connectionId と dbName を渡すと表名一覧を返します。AI はユーザーが言及した対象表を特定するために使います。", - "ai_settings.tools.get_columns.desc": "指定表の列構造を取得", - "ai_settings.tools.get_columns.detail": "connectionId、dbName、tableName を渡すと、各列の名前、型、NULL 可否、デフォルト値、コメントを返します。AI は SQL 生成前にこのツールで実際の列名を確認する必要があります。", - "ai_settings.tools.get_table_ddl.desc": "表の建表文を取得", - "ai_settings.tools.get_table_ddl.detail": "connectionId、dbName、tableName を渡すと、列定義、インデックス、制約などを含む完全な CREATE TABLE 文を返します。", - "ai_settings.tools.execute_sql.desc": "SQL クエリを実行して結果を返す", - "ai_settings.tools.execute_sql.detail": "connectionId、dbName、sql を渡し、対象データベース上で SQL を実行して結果を最大 50 行返します。安全レベルが適用され、読み取り専用モードでは SELECT/SHOW/DESCRIBE のみ許可されます。", - "driver_manager.title": "ドライバー管理", - "driver_manager.action.refresh": "更新", - "driver_manager.action.network_check": "ネットワーク確認", - "driver_manager.action.close": "閉じる", - "driver_manager.action.open_global_proxy_settings": "グローバルプロキシ設定を開く", - "driver_manager.action.open_directory": "ドライバーディレクトリを開く", - "driver_manager.action.import_directory": "ドライバーディレクトリを取り込む", - "driver_manager.action.import_package": "ドライバーパッケージを取り込む", - "driver_manager.action.install_enable": "インストールして有効化", - "driver_manager.action.remove": "削除", - "driver_manager.action.logs": "ログ", - "driver_manager.column.data_source": "データソース", - "driver_manager.column.package_size": "パッケージサイズ", - "driver_manager.column.status": "状態", - "driver_manager.column.progress": "インストール進捗", - "driver_manager.column.version": "ドライバーバージョン", - "driver_manager.column.actions": "操作", - "driver_manager.description.install_required": "MySQL / Redis / Oracle / PostgreSQL 以外のデータソースは、接続前にインストールして有効化する必要があります。", - "driver_manager.directory_info.title": "ドライバーディレクトリと再利用の説明", - "driver_manager.directory_info.details_label": "ドライバーディレクトリと再利用の説明を表示", - "driver_manager.directory_info.reuse_help": "自動ダウンロードおよび手動取り込みのドライバーは次のディレクトリに保存されます。後続のバージョン更新でもダウンロード済みドライバーを再利用できます。", - "driver_manager.directory_info.root_dir": "ドライバーのルートディレクトリ:{{path}}", - "driver_manager.directory_info.log_file": "実行ログファイル:{{path}}", - "driver_manager.empty.default": "ドライバーデータはありません", - "driver_manager.empty.search": "「{{keyword}}」に一致するドライバーはありません", - "driver_manager.filter_summary.match": "{{filtered}} / {{total}} 件一致", - "driver_manager.filter_summary.total": "ドライバー {{total}} 件", - "driver_manager.import.directory_help": "アプリ内のダウンロード経路が失敗する場合は、先にドライバーパッケージをこのディレクトリへ手動でダウンロードし、「ドライバーパッケージを取り込む」または「ドライバーディレクトリを取り込む」でインストールを完了してください。", - "driver_manager.import.single_file_help": "行内の「ドライバーパッケージを取り込む」は、`mariadb-driver-agent`、`mariadb-driver-agent.exe`、`GoNavi-DriverAgents.zip` などの単一ドライバーファイルまたはバンドル専用です。JDBC Jar の直接取り込みには対応していません。一括取り込みには上の「ドライバーディレクトリを取り込む」を使ってください。", - "driver.guidance.customConnectionDriverHelp": "対応済み: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase。エイリアス: postgresql/pgx、open_gauss/open-gauss、dm8、kingbase8/kingbasees/kingbasev8。GoNavi に登録済みの Go database/sql ドライバー名を入力してください。システムの ODBC/JDBC ドライバー名を直接入力したり、JDBC Jar を取り込んだりしないでください。", - "driver_manager.local_source.file": "ファイル", - "driver_manager.local_source.directory": "ディレクトリ", - "driver_manager.log.start_auto_install": "自動インストールを開始", - "driver_manager.log.done_auto_install": "自動インストールが完了しました{{version}}", - "driver_manager.log.start_local_import": "ローカル取り込みを開始{{version}}({{source}}):{{path}}", - "driver_manager.log.done_local_import": "ローカル取り込みインストールが完了しました{{version}}", - "driver_manager.log.skip_installed_dedupe": "ドライバーはインストール済みのため、ディレクトリ取り込みの重複排除でスキップしました", - "driver_manager.log.force_overwrite_reinstall": "インストール済みを上書きするモードが有効です。再インストール取り込みを実行します", - "driver_manager.log.skip_slim_build": "現在のリリースパッケージはスリムビルドのため、ディレクトリ取り込みをスキップしました", - "driver_manager.log.start_remove": "ドライバー削除を開始", - "driver_manager.log.done_remove": "ドライバー削除が完了しました", - "driver_manager.log.progress_line": "【{{status}}】{{message}}({{percent}}%)", - "driver_manager.log_modal.title": "ドライバーログ - {{name}}", - "driver_manager.log_modal.install_dir": "インストールディレクトリ:{{path}}", - "driver_manager.log_modal.executable_path": "ドライバー実行ファイル:{{path}}", - "driver_manager.log_modal.empty": "このドライバーにはまだ操作ログがありません。", - "driver_manager.message.load_status_failed": "ドライバー状態の取得に失敗しました", - "driver_manager.message.load_status_failed_detail": "ドライバー状態の取得に失敗しました:{{detail}}", - "driver_manager.message.network_check_failed": "ドライバーネットワーク確認に失敗しました", - "driver_manager.message.network_check_failed_detail": "ドライバーネットワーク確認に失敗しました:{{detail}}", - "driver_manager.message.network_check_completed": "ドライバーネットワーク確認が完了しました", - "driver_manager.message.load_version_failed": "{{name}} のバージョン一覧の読み込みに失敗しました", - "driver_manager.message.load_version_failed_detail": "{{name}} のバージョン一覧の読み込みに失敗しました:{{detail}}", - "driver_manager.message.install_start": "インストールを開始", - "driver_manager.message.install_failed": "{{name}} のインストールに失敗しました", - "driver_manager.message.install_failed_detail": "{{name}} のインストールに失敗しました:{{detail}}", - "driver_manager.message.install_success": "{{name}}{{version}} をインストールして有効化しました", - "driver_manager.message.local_path_required": "有効なローカル取り込み{{source}}を選択してください", - "driver_manager.message.local_import_start": "ローカルドライバーパッケージの取り込みを開始", - "driver_manager.message.local_import_failed": "{{name}} のローカルドライバーパッケージ取り込みに失敗しました", - "driver_manager.message.local_import_failed_detail": "{{name}} のローカルドライバーパッケージ取り込みに失敗しました:{{detail}}", - "driver_manager.message.local_import_success": "{{name}}{{version}} のローカルドライバーパッケージをインストールして有効化しました", - "driver_manager.message.select_local_file_failed": "ローカルドライバーパッケージファイルの選択に失敗しました", - "driver_manager.message.select_local_file_failed_detail": "ローカルドライバーパッケージファイルの選択に失敗しました:{{detail}}", - "driver_manager.message.local_file_required": "有効なドライバーパッケージファイルを選択してください", - "driver_manager.message.select_local_directory_failed": "ローカルドライバーパッケージディレクトリの選択に失敗しました", - "driver_manager.message.select_local_directory_failed_detail": "ローカルドライバーパッケージディレクトリの選択に失敗しました:{{detail}}", - "driver_manager.message.local_directory_required": "有効なドライバーパッケージディレクトリを選択してください", - "driver_manager.message.no_external_drivers_to_import": "取り込める外部ドライバーはありません", - "driver_manager.message.skip.dedupe": "重複排除で {{count}} 件スキップ", - "driver_manager.message.skip.slim": "スリム版で {{count}} 件スキップ", - "driver_manager.message.skip_suffix": "、{{items}}", - "driver_manager.message.overwrite_suffix": "(インストール済みを上書き)", - "driver_manager.message.directory_import_completed": "ディレクトリ取り込みが完了しました{{mode}}:成功 {{success}}{{skip}}", - "driver_manager.message.directory_import_completed_with_failure": "ディレクトリ取り込みが完了しました{{mode}}:成功 {{success}}、失敗 {{failed}}{{skip}}", - "driver_manager.message.directory_import_failed": "ディレクトリ取り込みに失敗しました{{mode}}:失敗 {{failed}}{{skip}}", - "driver_manager.message.open_directory_failed": "ドライバーディレクトリを開けませんでした", - "driver_manager.message.open_directory_failed_detail": "ドライバーディレクトリを開けませんでした:{{detail}}", - "driver_manager.message.remove_failed": "{{name}} の削除に失敗しました", - "driver_manager.message.remove_failed_detail": "{{name}} の削除に失敗しました:{{detail}}", - "driver_manager.message.remove_success": "{{name}} を削除しました", - "driver_manager.network.alert.download_chain_unreachable": "重要:ドライバーダウンロード経路のドメインに到達できません", - "driver_manager.network.alert.download_network_unreachable": "重要:ドライバーダウンロードネットワークに到達できません", - "driver_manager.network.summary.download_chain_unreachable": "GitHub API には到達できますが、ドライバーダウンロード用のアセットドメインに到達できません。", - "driver_manager.network.summary.unreachable_proxy_configured": "一部のドライバーダウンロード先に到達できません。設定済みプロキシが有効か確認して再試行してください。", - "driver_manager.network.summary.proxy_recommended": "一部のドライバーダウンロード先に到達できません。インストール前に HTTP/HTTPS/SOCKS5 プロキシを設定してください。", - "driver_manager.network.summary.unreachable": "一部のドライバーダウンロード先に到達できません。ネットワークを確認して再試行してください。", - "driver_manager.network.summary.reachable_with_proxy": "設定済みプロキシ経由でドライバーダウンロードネットワークに到達できます。", - "driver_manager.network.summary.reachable": "ドライバーダウンロードネットワークに到達できます。直接インストールできます。", - "driver_manager.network.chain_alert.description": "GitHub ページは開けても、ドライバーパッケージのダウンロードはアセットドメインへリダイレクトされます。まず GoNavi 上部の「プロキシ」でグローバルプロキシを有効にし、プロキシアプリのローカルアドレスとポートを入力してください。", - "driver_manager.network.chain_alert.allow_hosts": "それでも失敗する場合は、プロキシルールで次を許可してください:{{hosts}}。ルールを調整できない場合は TUN モードの有効化を検討してください。", - "driver_manager.network.proxy_env_detected": "プロキシ環境変数を検出しました:{{keys}}", - "driver_manager.network.details_label": "ネットワーク確認の詳細を表示", - "driver_manager.network.github_latency": "プロキシ経路から GitHub への接続遅延:{{status}}{{latency}}{{detail}}", - "driver_manager.network.reachable": "到達可能", - "driver_manager.network.unreachable": "到達不可", - "driver_manager.network.no_result": "結果なし", - "driver_manager.network.latency_value": "、{{latency}}ms", - "driver_manager.network.error_value": "、{{detail}}", - "driver_manager.network.no_proxy_env": "システムのプロキシ環境変数は検出されませんでした。", - "driver_manager.network.checking": "ドライバーダウンロードネットワークを確認中...", - "driver_manager.network.not_checked": "ネットワーク確認はまだ完了していません", - "driver_manager.progress.local_package_start": "ローカルドライバーパッケージのインストールを開始", - "driver_manager.progress.metadata_write": "ドライバーメタデータを書き込み中", - "driver_manager.progress.local_package_done": "ローカルドライバーパッケージの取り込みが完了しました", - "driver_manager.progress.install_start": "インストールを開始", - "driver_manager.progress.pure_go_enabled": "インストールが完了し、純 Go ドライバーが有効になりました", - "driver_manager.progress.agent_install_start": "{{name}} ドライバーエージェントのインストールを開始", - "driver_manager.progress.agent_install_done": "{{name}} ドライバーエージェントのインストールが完了しました", - "driver_manager.progress.download_prebuilt_agent": "ビルド済み {{name}} ドライバーエージェントをダウンロード中", - "driver_manager.progress.download_bundle": "{{name}} ドライバーバンドルをダウンロード中", - "driver_manager.progress.extract_agent_from_bundle": "ドライバーバンドルから {{name}} エージェントを抽出中", - "driver_manager.progress.unzip_agent": "{{name}} ドライバーエージェントを展開中", - "driver_manager.progress.source_build_preferred": "{{name}} ドライバーエージェントをまずローカルソースからビルドします", - "driver_manager.progress.dev_build_fallback": "ビルド済みパッケージが見つからないため、開発用ローカルビルドを試行します", - "driver_manager.progress.plan.source_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。このバージョンはローカルソースビルドのみ許可されます", - "driver_manager.progress.plan.source_first": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。まずローカルソースビルドを試し、失敗したらダウンロードへ進みます", - "driver_manager.progress.plan.direct_then_bundle": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。{{direct}} 件のビルド済み直リンクを試し、その後 {{bundle}} 件のドライバーバンドルソースへ進みます", - "driver_manager.progress.plan.explicit_direct": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。明示バージョンのアセットのみ許可し、{{direct}} 件のビルド済み直リンクを試します", - "driver_manager.progress.plan.direct_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。{{direct}} 件のビルド済み直リンクを試します", - "driver_manager.progress.plan.bundle_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。ビルド済み直リンクがないため、{{bundle}} 件のドライバーバンドルソースを試します", - "driver_manager.progress.plan.source_fallback": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。リリースアセットが一致しない場合はローカルソースビルドに戻します", - "driver_manager.progress.fallback.direct_to_bundle": "ビルド済み直リンクが一致しません。ドライバーバンドルの代替経路へ切り替えます({{name}}、残り {{bundle}} 件)", - "driver_manager.progress.fallback.explicit_skip_bundle": "ビルド済み直リンクが一致しません。明示アセットのみのためドライバーバンドルをスキップします({{name}})", - "driver_manager.progress.fallback.bundle_available": "直リンクを利用できません。ドライバーバンドルの代替経路へ切り替えます({{name}}、残り {{bundle}} 件)", - "driver_manager.progress.fallback.source_build": "リリースアセットが一致しません。ローカルソースビルドの代替を準備します({{name}})", - "driver_manager.progress.backend_empty": "バックエンドから進捗詳細が返されていません", - "driver_manager.progress.backend_detail": "バックエンド詳細:{{detail}}", - "driver_manager.progress.status.start": "開始", - "driver_manager.progress.status.downloading": "ダウンロード中", - "driver_manager.progress.status.done": "完了", - "driver_manager.progress.status.error": "エラー", - "driver_manager.progress.status.unknown": "不明", - "driver_manager.option.force_overwrite_installed": "インストール済みを上書き", - "driver_manager.punctuation.list_separator": "、", - "driver_manager.search.placeholder": "ドライバー名/種類を検索(例:DuckDB、clickhouse)", - "driver_manager.search.built_in": "組み込み", - "driver_manager.search.external": "外部", - "driver_manager.status.calculating": "計算中...", - "driver_manager.status.built_in_available": "組み込みで利用可能", - "driver_manager.status.installing_percent": "インストール中 {{percent}}%", - "driver_manager.status.enabled": "有効", - "driver_manager.status.installed": "インストール済み", - "driver_manager.status.disabled": "未有効", - "driver_manager.status.full_required": "Full 版が必要", - "driver_manager.version.default": "既定バージョン", - "driver_manager.version.inline_suffix": "({{version}})", - "driver_manager.version.group.year": "{{year}} 年", - "driver_manager.version.group.other": "その他", - "driver_manager.version.placeholder.select": "ドライバーバージョンを選択", - "driver_manager.version.placeholder.load_on_expand": "展開してバージョンを読み込む", - "driver_manager.version.installed_locked_with_version": "{{version}}(インストール済み。削除後に変更可能)", - "driver_manager.version.installed_locked": "インストール済み(削除後に変更可能)", - "driver_manager.version.mongodb_hint": "現在対応している MongoDB は 1.17.x と 2.x のみです。より古い 1.x はインストールできません。", - "driver_manager.backend.dialog.select_download_directory": "ドライバーダウンロードディレクトリを選択", - "driver_manager.backend.dialog.select_package_file": "ドライバーパッケージファイルを選択(JDBC Jar 以外)", - "driver_manager.backend.dialog.select_package_directory": "ドライバーパッケージディレクトリを選択", - "driver_manager.backend.driver_fallback_name": "ドライバー", - "driver_manager.backend.package_size.built_in": "組み込み", - "driver_manager.backend.package_size.to_be_published": "公開待ち", - "driver_manager.backend.version.unlabeled": "ラベルなしバージョン", - "driver_manager.backend.version.latest_suffix": "(最新)", - "driver_manager.backend.version.recommended_suffix": "(推奨)", - "driver_manager.backend.message.unsupported_builtin_manifest_url": "対応していない組み込みドライバーマニフェスト URL です:{{url}}", - "driver_manager.backend.message.jdbc_jar_unsupported": "JDBC Jar ファイルの直接取り込みには対応していません。GoNavi は Go ドライバーと任意の driver-agent パッケージを使用します。代わりにドライバーパッケージまたはドライバーディレクトリを使用してください。Kingbase に接続する場合は、Kingbase 接続タイプを優先するか、カスタム接続に kingbase / kingbase8 を入力してください。", - "driver_manager.backend.message.runtime_directory_configured": "ドライバーランタイムディレクトリを設定しました", - "driver_manager.backend.message.opened_directory": "ドライバーディレクトリを開きました:{{path}}", - "driver_manager.backend.message.log_hint": "(詳細ログ:{{path}})", - "driver_manager.backend.message.local_import_failed_detail": "ローカルドライバーパッケージの取り込みに失敗しました:{{detail}}", - "driver_manager.backend.message.metadata_write_failed_detail": "ドライバーメタデータの書き込みに失敗しました:{{detail}}", - "driver_manager.backend.message.driver_install_success": "ドライバーをインストールしました", - "driver_manager.backend.message.download_failed_detail": "ドライバーのダウンロードとインストールに失敗しました:{{detail}}", - "driver_manager.backend.message.package_removed": "ドライバーパッケージを削除しました", - "driver_manager.backend.error.unknown": "不明なエラー", - "driver_manager.backend.error.unsupported_driver_type": "対応していないドライバータイプです", - "driver_manager.backend.error.builtin_download_not_required": "組み込みドライバーでは拡張パッケージのダウンロードは不要です", - "driver_manager.backend.error.builtin_install_not_required": "組み込みドライバーでは拡張パッケージのインストールは不要です", - "driver_manager.backend.error.builtin_version_not_required": "組み込みドライバーではバージョン選択は不要です", - "driver_manager.backend.error.builtin_package_not_required": "組み込みドライバーにはインストールパッケージがありません", - "driver_manager.backend.error.builtin_remove_not_allowed": "組み込みドライバーは削除できません", - "driver_manager.backend.error.optional_go_only": "ここでは任意の Go ドライバーのみインストールして有効化できます", - "driver_manager.backend.error.package_size_unsupported": "このドライバーはインストールパッケージサイズの照会に対応していません", - "driver_manager.backend.error.version_empty": "バージョンが空です", - "driver_manager.backend.error.asset_name_empty": "ドライバーアセット名が空です", - "driver_manager.backend.error.mongo_version_unsupported": "MongoDB バージョン {{version}} には対応していません。対応しているのは 1.17.x と 2.x のみです", - "driver_manager.backend.error.open_directory_unsupported": "このプラットフォームではディレクトリを開けません:{{platform}}", - "driver_manager.backend.error.open_directory_failed": "ドライバーディレクトリを開けませんでした:{{detail}}", - "driver_manager.backend.error.create_directory_failed": "ドライバーディレクトリの作成に失敗しました:{{detail}}", - "driver_manager.backend.error.remove_package_failed": "ドライバーパッケージの削除に失敗しました:{{detail}}", - "driver_manager.backend.error.manifest_scheme_unsupported": "対応していないドライバーマニフェスト URL スキームです:{{scheme}}", - "driver_manager.backend.error.manifest_fetch_failed": "ドライバーマニフェストの取得に失敗しました:{{detail}}", - "driver_manager.backend.error.manifest_parse_failed": "ドライバーマニフェストの解析に失敗しました:{{detail}}", - "driver_manager.backend.error.manifest_url_empty": "ドライバーマニフェスト URL が空です", - "driver_manager.backend.error.manifest_too_large": "ドライバーマニフェストがサイズ制限を超えています", - "driver_manager.backend.error.local_manifest_url_invalid": "ローカルドライバーマニフェスト URL が無効です", - "driver_manager.backend.error.file_manifest_url_invalid": "ファイルドライバーマニフェスト URL が無効です", - "driver_manager.backend.error.driver_type_empty": "ドライバータイプが空です", - "driver_manager.backend.error.no_driver_versions": "利用可能なドライバーバージョンが見つかりません", - "driver_manager.backend.error.module_path_empty": "モジュールパスが空です", - "driver_manager.backend.error.module_version_list_empty": "モジュールバージョン一覧が空です", - "driver_manager.backend.error.module_version_list_fetch_failed": "モジュールバージョン一覧の取得に失敗しました:{{detail}}", - "driver_manager.backend.error.module_version_list_read_failed": "モジュールバージョン一覧の読み取りに失敗しました:{{detail}}", - "driver_manager.backend.error.driver_version_list_fetch_failed": "ドライバーバージョン一覧の取得に失敗しました:{{detail}}", - "driver_manager.backend.error.driver_version_list_parse_failed": "ドライバーバージョン一覧の解析に失敗しました:{{detail}}", - "driver_manager.backend.error.cache_key_empty": "キャッシュ key が空です", - "driver_manager.backend.error.release_empty": "Release が空です", - "driver_manager.backend.error.bundle_index_asset_missing": "ドライバーバンドルインデックスアセットが見つかりません", - "driver_manager.backend.error.bundle_index_empty": "ドライバーバンドルインデックスが空です", - "driver_manager.backend.error.bundle_index_fetch_failed": "ドライバーバンドルインデックスの取得に失敗しました:{{detail}}", - "driver_manager.backend.error.bundle_index_parse_failed": "ドライバーバンドルインデックスの解析に失敗しました:{{detail}}", - "driver_manager.backend.error.tag_empty": "Tag が空です", - "driver_manager.backend.error.api_url_empty": "API URL が空です", - "driver_manager.backend.error.release_info_fetch_failed": "Release 情報の取得に失敗しました:{{detail}}", - "driver_manager.backend.error.local_package_path_empty": "ローカルドライバーパッケージパスが空です", - "driver_manager.backend.error.local_directory_path_empty": "ローカルドライバーディレクトリパスが空です", - "driver_manager.backend.error.file_path_empty": "ファイルパスが空です", - "driver_manager.backend.error.download_url_empty": "ダウンロード URL が空です", - "driver_manager.backend.error.bundle_url_empty": "ドライバーバンドルダウンロード URL が空です", - "driver_manager.backend.error.read_local_package_failed": "ローカルドライバーパッケージの読み取りに失敗しました:{{detail}}", - "driver_manager.backend.error.read_local_directory_failed": "ローカルドライバーディレクトリの読み取りに失敗しました:{{detail}}", - "driver_manager.backend.error.scan_local_directory_failed": "ローカルドライバーディレクトリのスキャンに失敗しました:{{detail}}", - "driver_manager.backend.error.open_local_package_failed": "ローカルドライバーパッケージを開けませんでした:{{detail}}", - "driver_manager.backend.error.read_local_package_entry_failed": "ローカルドライバーパッケージエントリの読み取りに失敗しました:{{detail}}", - "driver_manager.backend.error.download_failed": "ダウンロードに失敗しました:{{detail}}", - "driver_manager.backend.error.bundle_download_failed": "ドライバーバンドルのダウンロードに失敗しました:{{detail}}", - "driver_manager.backend.error.open_bundle_failed": "ドライバーバンドルを開けませんでした:{{detail}}", - "driver_manager.backend.error.read_bundle_entry_failed": "ドライバーバンドルエントリの読み取りに失敗しました:{{detail}}", - "driver_manager.backend.error.source_build_failed": "ローカルソースビルドに失敗しました:{{detail}}", - "driver_manager.backend.error.prebuilt_downloads_failed": "ビルド済みパッケージのダウンロードに失敗しました:{{detail}}", - "driver_manager.backend.status.built_in_available": "組み込みドライバーは接続可能です", - "driver_manager.backend.status.optional_enabled": "Go ドライバーは有効で接続可能です", - "driver_manager.backend.status.installed_pending_with_version": "ドライバーはインストール済みです(バージョン:{{version}})。有効化待ちです", - "driver_manager.backend.status.installed_pending": "ドライバーはインストール済みで有効化待ちです", - "driver_manager.backend.status.optional_disabled_with_version": "未有効(バージョン:{{version}})", - "driver_manager.backend.status.optional_disabled_generic": "未有効", - "driver_manager.backend.status.needs_update": "ドライバー更新を適用するには再インストールが必要です。", - "driver_manager.backend.status.installed_revision": "インストール済み revision {{revision}}。", - "driver_manager.backend.status.expected_revision": "必要な revision は {{revision}} です。", - "driver_manager.backend.status.affected_connections": "{{count}} 件の保存済み接続に影響します", - "driver_manager.backend.status.unrecognized_driver_type": "認識できないデータソースタイプです", - "driver_manager.backend.status.slim_build_required": "{{name}} は現在の slim build に含まれていません。このドライバーを使用するには Full 版をインストールしてください。", - "driver_manager.backend.status.agent_path_failed": "{{name}} ドライバーエージェントパスを解決できません。Driver Manager で再インストールして有効化してください。", - "driver_manager.backend.status.agent_missing": "{{name}} ドライバーエージェントが見つかりません。Driver Manager で再インストールして有効化してください。", - "driver_manager.backend.status.optional_disabled": "{{name}} Go ドライバーが有効ではありません。Driver Manager でインストールして有効化してください。", - "driver_manager.backend.status.agent_unavailable_reinstall": "{{name}} ドライバーエージェントを利用できません:{{detail}}。Driver Manager で再インストールして有効化してください。", - "driver_manager.backend.status.agent_arch_incompatible_detail": "{{name}} ドライバーエージェントのアーキテクチャに互換性がありません:ファイル={{file}}、現在のプロセス={{process}}。Driver Manager で再インストールして有効化してください。", - "driver_manager.backend.network.probe.github_driver_release": "GitHub ドライバーリリース", - "driver_manager.backend.network.probe.github_release_asset_domain": "GitHub Release アセットドメイン", - "driver_manager.backend.network.probe.go_module_proxy": "Go モジュールプロキシ", - "driver_manager.backend.network.error.probe_url_empty": "プローブ URL が空です", - "driver_manager.backend.network.error.probe_host_missing": "プローブ URL にホストがありません", - "driver_manager.backend.network.summary.download_chain_unreachable": "GitHub API には到達できますが、ドライバーダウンロード経路には到達できません。まず GoNavi のグローバルプロキシを有効にし、プロキシルールで github.com、api.github.com、release-assets.githubusercontent.com、objects.githubusercontent.com、raw.githubusercontent.com を許可してください。それでも失敗する場合は TUN モードを検討してください。", - "driver_manager.backend.progress.plan.source_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。このバージョンはローカルソースビルドのみ許可されます", - "driver_manager.backend.progress.plan.source_first": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。まずローカルソースビルドを試し、失敗したらダウンロードへ進みます", - "driver_manager.backend.progress.plan.direct_then_bundle": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。{{direct}} 件のビルド済み直リンクを試し、その後 {{bundle}} 件のドライバーバンドルソースへ進みます", - "driver_manager.backend.progress.plan.explicit_direct": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。明示バージョンのアセットのみ許可し、{{direct}} 件のビルド済み直リンクを試します", - "driver_manager.backend.progress.plan.direct_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。{{direct}} 件のビルド済み直リンクを試します", - "driver_manager.backend.progress.plan.bundle_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。ビルド済み直リンクがないため、{{bundle}} 件のドライバーバンドルソースを試します", - "driver_manager.backend.progress.plan.source_fallback": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。リリースアセットが一致しない場合はローカルソースビルドに戻します", - "driver_manager.backend.progress.fallback.direct_to_bundle": "ビルド済み直リンクが一致しません。ドライバーバンドルの代替経路へ切り替えます({{name}}、残り {{bundle}} 件)", - "driver_manager.backend.progress.fallback.explicit_skip_bundle": "ビルド済み直リンクが一致しません。明示アセットのみのためドライバーバンドルをスキップします({{name}})", - "driver_manager.backend.progress.fallback.bundle_available": "直リンクを利用できません。ドライバーバンドルの代替経路へ切り替えます({{name}}、残り {{bundle}} 件)", - "driver_manager.backend.progress.fallback.source_build": "リリースアセットが一致しません。ローカルソースビルドの代替を準備します({{name}})", - "data_sync.action.analyze_diff": "差分を分析", - "data_sync.action.cancel": "キャンセル", - "data_sync.action.close": "閉じる", - "data_sync.action.continue_sync": "同期を続行", - "data_sync.action.next": "次へ", - "data_sync.action.previous": "戻る", - "data_sync.action.start_sync": "同期を開始", - "data_sync.action.view": "表示", - "data_sync.compare_entry.action.return_to_compare": "比較へ戻る", - "data_sync.compare_entry.alert.data": "現在はデータ比較の入口です。主キーに基づく行単位の差分分析のみを行い、書き込みは実行しません。", - "data_sync.compare_entry.alert.schema": "現在はテーブル構造比較の入口です。構造差分の分析と確認用 SQL の生成のみを行い、変更は実行しません。", - "data_sync.compare_entry.option.auto_add_columns": "対象テーブルの不足カラムに対する互換変更 SQL を生成(プレビューのみ、実行しません)", - "data_sync.compare_entry.option.source_dataset.query": "SQL 結果セットで比較", - "data_sync.compare_entry.option.source_dataset.table": "テーブルで比較", - "data_sync.compare_entry.preview.selection_hint": "行選択は SQL プレビュー範囲にのみ影響し、書き込みは実行しません。", - "data_sync.compare_entry.preview.sql.data_help": "SQL プレビューは、現在選択されている挿入、更新、削除、および行範囲から生成され、差分確認にのみ使用します。", - "data_sync.compare_entry.preview.sql.schema_help": "SQL プレビューには構造差分の推奨文が表示され、差分確認にのみ使用します。", - "data_sync.compare_entry.result.completed": "比較が完了しました", - "data_sync.compare_entry.result.failed": "比較に失敗しました", - "data_sync.compare_entry.result.running": "比較中", - "data_sync.compare_entry.result.running_description": "現在の段階:{{stage}}{{table}}", - "data_sync.compare_entry.result.stage_fallback": "実行中", - "data_sync.compare_entry.result.success_summary": "{{tables}} 個のテーブルを比較しました。", - "data_sync.compare_entry.result.table_suffix": "、テーブル:{{table}}", - "data_sync.compare_entry.title.analysis_log": "分析ログ", - "data_sync.compare_entry.workflow_help": "この入口では差分分析とプレビューのみを行います。同期、テーブル作成、カラム追加、データ削除は実行しません。", - "data_sync.entry_mode.compare.action.start": "比較を開始", - "data_sync.entry_mode.compare.option_title": "比較オプション", - "data_sync.entry_mode.compare.result_title": "比較結果", - "data_sync.entry_mode.data_compare.badge": "データ比較", - "data_sync.entry_mode.data_compare.description": "主キーに基づいてソース表とターゲット表のデータ差分を比較し、追加、更新、削除の詳細を確認します。", - "data_sync.entry_mode.data_compare.hero_description": "両端のデータ整合性を確認する場合に適しています。差分分析と行単位のプレビューのみを行い、書き込みは実行しません。", - "data_sync.entry_mode.data_compare.table_select_label": "データを比較するテーブルを選択してください:", - "data_sync.entry_mode.data_compare.title": "データ比較", - "data_sync.entry_mode.schema_compare.badge": "構造比較", - "data_sync.entry_mode.schema_compare.description": "ソース表とターゲット表の構造差分、互換性リスク、確認用 SQL を生成します。", - "data_sync.entry_mode.schema_compare.hero_description": "リリース前に両端のテーブル構造差分を確認する場合に適しています。分析とプレビューのみを行い、構造変更は実行しません。", - "data_sync.entry_mode.schema_compare.table_select_label": "構造を比較するテーブルを選択してください:", - "data_sync.entry_mode.schema_compare.title": "テーブル構造比較", - "data_sync.entry_mode.sync.hero_description": "ターゲット表が既に存在する場合に適しています。先に差分分析を行い、選択した挿入、更新、削除を実行します。", - "data_sync.alert.auto_create_scope": "自動テーブル作成は現在 MySQL から Kingbase への移行のみ対応しています。列、主キー、通常インデックス、一意インデックス、複合インデックスを移行し、全文、空間、プレフィックス、関数系インデックスは明示的にスキップします。", - "data_sync.alert.auto_create_planner_scope": "自動テーブル作成は現在 MySQL から Kingbase への移行のみ対応しています。列、主キー、通常インデックス、一意インデックス、複合インデックスを移行し、全文、空間、プレフィックス、関数系インデックスは明示的にスキップします。", - "data_sync.alert.existing_target_only": "データ同期は既存のターゲットテーブルに対して実行されます。テーブル作成とインポートが必要な場合は、クロスデータベース移行に切り替えてください。", - "data_sync.alert.full_overwrite": "全量上書きはターゲットテーブルのデータを消去します。慎重に使用してください。", - "data_sync.alert.migration_mode": "クロスデータベース移行が有効です。別のデータソースへテーブルを移し、自動作成とインポートを行う場合に使用します。", - "data_sync.alert.query_mode": "SQL 結果セット同期は現在、ソース側のカスタム SQL から単一の既存ターゲットテーブルへの同期に対応しています。クエリ結果にはターゲットテーブルの主キー列が必要です。", - "data_sync.alert.sync_mode": "データ同期が有効です。ターゲットテーブルが既に存在する場合の増分同期や上書きインポートに使用します。", - "data_sync.badge.migration_mode": "移行モード", - "data_sync.badge.source_pending": "ソース未選択", - "data_sync.badge.source_selected": "ソース選択済み", - "data_sync.badge.sync_mode": "同期モード", - "data_sync.badge.table_count": "{{count}} テーブル", - "data_sync.backend.error.restore_source_secret_failed": "ソースデータベース接続シークレットの復元に失敗しました: {{detail}}", - "data_sync.backend.error.restore_target_secret_failed": "ターゲットデータベース接続シークレットの復元に失敗しました: {{detail}}", - "data_sync.backend.error.connect_source_failed": "ソースデータベースへの接続に失敗しました: {{detail}}", - "data_sync.backend.error.connect_target_failed": "ターゲットデータベースへの接続に失敗しました: {{detail}}", - "data_sync.backend.error.init_source_driver_failed": "ソースデータベースドライバーの初期化に失敗しました: {{detail}}", - "data_sync.backend.error.init_target_driver_failed": "ターゲットデータベースドライバーの初期化に失敗しました: {{detail}}", - "data_sync.backend.error.preview_composite_pk_unsupported": "複合主キー({{columns}})はデータプレビューではサポートされていません", - "data_sync.backend.error.preview_pk_required": "主キーがないため、データプレビューはサポートされていません", - "data_sync.backend.error.target_pk_required_for_query_diff": "ターゲットテーブルに主キーがないため、SQL 結果セットの差分分析はサポートされていません", - "data_sync.backend.result.analyzed_tables": "{{count}} 個のテーブルの差分分析が完了しました", - "data_sync.backend.result.analyzed_target_tables": "{{count}} 個のターゲットテーブルの差分分析が完了しました", - "data_sync.backend.summary.diff_completed": "差分分析が完了しました", - "data_sync.backend.summary.source_query_diff_completed": "SQL 結果セットの差分分析が完了しました", - "data_sync.backend.validation.query_mode_data_only": "SQL 結果セット同期は現在、データのみの同期に対応しています", - "data_sync.backend.validation.single_target_table_required": "SQL 結果セット同期ではターゲットテーブルを 1 つだけ選択する必要があります", - "data_sync.backend.validation.source_query_required": "ソースクエリ SQL は必須です", - "data_sync.backend.validation.target_table_required": "ターゲットテーブルは必須です", - "data_sync.backend.warning.index_columns_missing": "インデックス {{name}} には列定義がないため、スキップされました", - "data_sync.backend.warning.index_prefix_length_unsupported": "インデックス {{name}} はプレフィックス長を使用しているため、現在は移行できません", - "data_sync.backend.warning.index_type_unsupported": "インデックス {{name}} の種類={{type}} は現在、自動移行できません", - "data_sync.confirm.full_overwrite.content": "全量上書きはターゲットテーブルのデータを消去してから行を挿入します。ターゲットデータベースのバックアップを確認してください。", - "data_sync.confirm.full_overwrite.ok": "続行", - "data_sync.confirm.full_overwrite.title": "全量上書きの確認", - "data_sync.modal.full_overwrite_title": "全量上書きの確認", - "data_sync.modal.full_overwrite_content": "全量上書きはターゲットテーブルのデータを消去してから行を挿入します。ターゲットデータベースのバックアップを確認してください。", - "data_sync.modal.full_overwrite_ok": "続行", - "data_sync.diff.column.delete": "削除", - "data_sync.diff.column.insert": "挿入", - "data_sync.diff.column.plan": "計画", - "data_sync.diff.column.preview": "プレビュー", - "data_sync.diff.column.risk": "リスク", - "data_sync.diff.column.same": "同一", - "data_sync.diff.column.table": "テーブル名", - "data_sync.diff.column.target_table": "ターゲットテーブル", - "data_sync.diff.column.update": "更新", - "data_sync.diff.more_warnings": "ほか {{count}} 件は未表示", - "data_sync.diff.target_exists": "存在", - "data_sync.diff.target_missing": "なし", - "data_sync.diff.title": "比較結果", - "data_sync.diff.warning_title": "事前チェックでリスクまたは縮退項目が見つかりました。実行前に確認してください。", - "data_sync.message.precheck_warnings": "事前チェックでリスクまたは縮退項目が見つかりました。実行前に確認してください。", - "data_sync.message.more_items_collapsed": "ほか {{count}} 件は未表示", - "data_sync.table.table_name": "テーブル名", - "data_sync.table.target_table": "ターゲットテーブル", - "data_sync.table.target_exists": "存在", - "data_sync.table.target_missing": "なし", - "data_sync.table.plan": "計画", - "data_sync.table.insert": "挿入", - "data_sync.table.update": "更新", - "data_sync.table.delete": "削除", - "data_sync.table.same": "同一", - "data_sync.table.risk": "リスク", - "data_sync.table.preview": "プレビュー", - "data_sync.title.compare_result": "比較結果", - "data_sync.field.connection": "接続", - "data_sync.field.database": "データベース", - "data_sync.field.migration_content": "移行内容", - "data_sync.field.migration_mode": "移行モード", - "data_sync.field.mongo_collection_name": "Mongo コレクション名(任意)", - "data_sync.field.source_dataset_mode": "ソースデータ方式", - "data_sync.field.source_query_sql": "ソースクエリ SQL", - "data_sync.field.sync_content": "同期内容", - "data_sync.field.sync_mode": "同期モード", - "data_sync.field.target_table": "ターゲットテーブル", - "data_sync.field.target_table_requirement": "ターゲットテーブル要件", - "data_sync.field.target_table_strategy": "ターゲットテーブル処理方針", - "data_sync.field.workflow_type": "機能タイプ", - "data_sync.help.mongo_collection_mongo_to_redis": "MongoDB から Redis の場合、多くはソースコレクションを直接選択します。明示的なフォールバック名が必要な場合だけ入力してください。", - "data_sync.help.mongo_collection_redis_to_mongo": "空欄の場合は既定のコレクション名を使用します。入力すると、この実行では Redis キースペースを指定した Mongo コレクションへ書き込みます。", - "data_sync.help.workflow_type": "既存ターゲットテーブルの同期か、クロスデータベース移行かを選択してください。画面は機能タイプに応じてより安全な既定値に調整されます。", - "data_sync.help.select_tables": "同期するテーブルを選択:", - "data_sync.help.source_query_mode": "ソースクエリ SQL を入力し、ターゲットテーブルを 1 つ選択してください。差分分析はこの結果セットをターゲットテーブルと直接比較します。", - "data_sync.hero.migration_description": "ソーステーブルを別のデータベースへ移し、方針に従ってテーブル作成、データインポート、互換インデックス追加を行います。", - "data_sync.hero.migration_title": "クロスデータソース移行", - "data_sync.hero.sync_description": "既存ターゲットテーブルを基準に差分を比較し、選択した挿入、更新、削除を実行します。", - "data_sync.hero.sync_title": "データ同期", - "data_sync.log.level.error": "エラー", - "data_sync.log.level.info": "情報", - "data_sync.log.level.warn": "警告", - "data_sync.log.title": "実行ログ", - "data_sync.message.analysis_complete": "差分分析が完了しました", - "data_sync.message.analysis_failed": "差分分析に失敗しました", - "data_sync.message.analysis_failed_detail": "差分分析に失敗しました: {{detail}}", - "data_sync.message.analyze_before_sync": "同期を開始する前に差分を分析してください", - "data_sync.message.close_blocked_running": "同期を実行中です。まだウィンドウを閉じられません。", - "data_sync.message.fetch_source_databases_failed": "ソースデータベースの取得に失敗しました", - "data_sync.message.fetch_source_databases_failed_detail": "ソースデータベースの取得に失敗しました: {{detail}}", - "data_sync.message.fetch_tables_failed": "テーブル一覧の取得に失敗しました", - "data_sync.message.fetch_tables_failed_detail": "テーブル一覧の取得に失敗しました: {{detail}}", - "data_sync.message.fetch_target_databases_failed": "ターゲットデータベースの取得に失敗しました", - "data_sync.message.fetch_target_databases_failed_detail": "ターゲットデータベースの取得に失敗しました: {{detail}}", - "data_sync.message.preview_load_failed": "差分プレビューの読み込みに失敗しました", - "data_sync.message.preview_load_failed_detail": "差分プレビューの読み込みに失敗しました: {{detail}}", - "data_sync.message.select_connections_first": "先に接続を選択してください", - "data_sync.message.select_databases_first": "先にデータベースを選択してください", - "data_sync.message.select_source_database": "ソースデータベースを選択してください", - "data_sync.message.select_target_database": "ターゲットデータベースを選択してください", - "data_sync.message.sync_execution_failed": "同期実行に失敗しました", - "data_sync.message.sync_execution_failed_detail": "同期実行に失敗しました: {{detail}}", - "data_sync.option.auto_add_columns": "ターゲットテーブルに不足している列を自動追加(現在は MySQL ターゲットおよび MySQL から Kingbase に対応。SQL 結果セットモードは未対応)", - "data_sync.option.content.both": "スキーマとデータを同期", - "data_sync.option.content.data": "データのみ", - "data_sync.option.content.schema": "スキーマのみ", - "data_sync.option.create_indexes": "互換性のある通常インデックスと一意インデックスを自動移行(自動テーブル作成時のみ有効)", - "data_sync.option.source_dataset.query": "SQL 結果セットで同期", - "data_sync.option.source_dataset.table": "テーブルで同期", - "data_sync.option.show_same_tables": "同一テーブルを表示", - "data_sync.option.sync_mode.full_overwrite": "全量上書き(ターゲットテーブルを消去してから挿入)", - "data_sync.option.sync_mode.insert_only": "挿入のみ(ターゲット比較なし。主キーのないテーブルはスキップ)", - "data_sync.option.sync_mode.insert_update": "増分同期(差分を比較してから挿入、更新、削除を選択)", - "data_sync.option.target_strategy.auto_create_if_missing": "ターゲットテーブルがない場合は自動作成", - "data_sync.option.target_strategy.existing_only": "既存ターゲットテーブルのみ使用", - "data_sync.option.target_strategy.smart": "スマートモード(存在すれば直接インポート、なければ自動作成)", - "data_sync.option.workflow.migration": "クロスデータベース移行(自動作成後にインポート)", - "data_sync.option.workflow.sync": "データ同期(既存ターゲットテーブルとの差分を同期)", - "data_sync.placeholder.mongo_collection_name": "Mongo コレクション名を入力", - "data_sync.placeholder.source_query_sql": "例: SELECT id, name, email FROM users WHERE status = 'active'", - "data_sync.placeholder.target_table": "ターゲットテーブルを 1 つ選択", - "data_sync.preview.action.copy_sql": "SQL をコピー", - "data_sync.preview.column.changed_columns": "変更列", - "data_sync.preview.column.data": "データ", - "data_sync.preview.column.detail": "詳細", - "data_sync.preview.column.primary_key": "主キー", - "data_sync.preview.data_summary": "挿入 {{inserts}}、更新 {{updates}}、削除 {{deletes}}(プレビューは種類ごとに最大 200 行)", - "data_sync.preview.delete_warning": "削除は既定では選択されません。業務影響を確認してから有効にしてください。", - "data_sync.preview.loading": "差分プレビューを読み込み中...", - "data_sync.preview.message.copy_failed": "コピーに失敗しました。手動でコピーしてください。", - "data_sync.preview.message.sql_copied": "SQL をコピーしました", - "data_sync.preview.schema_plan_help": "このスキーマ同期で実行予定の文を以下に表示します。", - "data_sync.preview.schema_statement_count": "{{count}} 件のスキーマ変更文を検出しました", - "data_sync.preview.schema_warning_title": "スキーマプレビューにリスクまたは縮退項目があります", - "data_sync.preview.selection_hint.delete": "行を選択しない場合、すべての削除差分を同期します。削除を行わない場合は比較結果で削除を解除してください。", - "data_sync.preview.selection_hint.insert": "行を選択しない場合、すべての挿入差分を同期します。挿入を行わない場合は比較結果で挿入を解除してください。", - "data_sync.preview.selection_hint.update": "行を選択しない場合、すべての更新差分を同期します。更新を行わない場合は比較結果で更新を解除してください。", - "data_sync.preview.side.source": "ソース", - "data_sync.preview.side.target": "ターゲット", - "data_sync.preview.sql.data_help": "SQL プレビューは、選択された挿入、更新、削除、行範囲から確認用に生成されます。", - "data_sync.preview.sql.no_data_sql": "-- 現在の選択範囲ではプレビュー可能な SQL はありません", - "data_sync.preview.sql.no_schema_changes": "-- 現在のテーブルには実行可能なスキーマ変更がありません", - "data_sync.preview.sql.schema_help": "SQL プレビューには、実行予定のスキーマ変更文が確認用に表示されます。", - "data_sync.preview.sql.schema_statement_count": "{{count}} 件のスキーマ変更文", - "data_sync.preview.sql.statement_count": "{{count}} 件の文(プレビューデータは種類ごとに最大 200 行)", - "data_sync.preview.tab.delete": "削除({{count}})", - "data_sync.preview.tab.insert": "挿入({{count}})", - "data_sync.preview.tab.schema": "スキーマ({{count}})", - "data_sync.preview.tab.sql": "SQL({{count}})", - "data_sync.preview.tab.update": "更新({{count}})", - "data_sync.preview.title": "差分プレビュー: {{table}}", - "data_sync.preview.update_detail_title": "更新詳細: {{table}} / {{pk}}", - "data_sync.plan.use_existing_target": "既存のターゲットテーブルにインポート", - "data_sync.plan.target_missing_manual_create": "ターゲットテーブルが存在しないため、先に手動で作成してください", - "data_sync.plan.target_missing_auto_create": "ターゲットテーブルが存在しないため、自動作成後にインポートします", - "data_sync.plan.target_missing_cannot_sync": "ターゲットテーブルが存在しないため、同期を実行できません", - "data_sync.plan.target_missing_auto_create_all": "ターゲットテーブルが存在しないため、実行時に自動作成してすべてのソースデータをインポートします", - "data_sync.plan.schema_changes_detected": "{{count}} 件の構造変更を検出", - "data_sync.plan.add_missing_columns_before_import": "{{count}} 個の不足フィールドを補完してからインポート", - "data_sync.plan.missing_columns_no_executable_sql": "ターゲットテーブルに {{count}} 個のフィールドが不足していますが、実行可能な補完 SQL は生成されませんでした", - "data_sync.plan.missing_columns_auto_add_unsupported": "ターゲットテーブルに {{count}} 個のフィールドが不足しており、現在のデータベース組み合わせでは自動補完をサポートしていません", - "data_sync.plan.missing_columns_auto_add_disabled": "ターゲットテーブルに {{count}} 個のフィールドが不足していますが、自動補完は有効化されていません", - "data_sync.plan.schema_only_no_data_diff": "構造のみ同期し、データ差分分析は実行していません", - "data_sync.plan.schema_only": "構造のみ同期", - "data_sync.plan.schema_preview": "構造プレビュー", - "data_sync.plan.schema_aligned": "テーブル構造は一致しています", - "data_sync.plan.auto_create_unsupported": "現在のデータベース組み合わせでは自動テーブル作成をサポートしていません", - "data_sync.plan.tdengine_time_column_missing": "ソーステーブルで TDengine の先頭列にマッピングできる時刻列を識別できないため、自動テーブル作成はできません", - "data_sync.plan.use_existing_target_collection": "既存のターゲットコレクションにインポート", - "data_sync.plan.target_collection_missing_manual_create": "ターゲットコレクションが存在しないため、先に手動で作成してください", - "data_sync.plan.target_collection_missing_auto_create": "ターゲットコレクションが存在しないため、自動作成後にインポートします", - "data_sync.plan.redis_key_to_mongodb_document": "Redis Key から MongoDB ドキュメントを生成してインポート", - "data_sync.plan.migrate_to_collection": "コレクション {{collection}} に移行", - "data_sync.plan.migrate_to_target": "{{target}} に移行", - "data_sync.plan.source_query_preview": "SQL 結果セット同期プレビュー", - "data_sync.plan.migration_kernel_planning": "現在のデータベース組み合わせは移行計画段階に入り、構造推論とターゲット方言生成の対応を待っています", - "data_sync.plan.backend_summary": "計画サマリー", - "data_sync.progress.stage.analysis_started": "差分分析を開始", - "data_sync.progress.stage.analysis_completed": "差分分析が完了", - "data_sync.progress.stage.sync_started": "同期を開始", - "data_sync.progress.stage.connecting_source": "ソースデータベースに接続中", - "data_sync.progress.stage.connecting_target": "ターゲットデータベースに接続中", - "data_sync.progress.stage.analyzing_table": "テーブルを分析中({{current}}/{{total}})", - "data_sync.progress.stage.syncing_table": "テーブルを同期中({{current}}/{{total}})", - "data_sync.progress.stage.table_completed": "テーブル処理が完了", - "data_sync.progress.stage.creating_target_table": "ターゲットテーブルを作成中", - "data_sync.progress.stage.syncing_schema": "テーブル構造を同期中", - "data_sync.progress.stage.creating_indexes": "インデックスを作成中", - "data_sync.progress.stage.reading_source": "ソーステーブルデータを読み取り中", - "data_sync.progress.stage.reading_target": "ターゲットテーブルデータを読み取り中", - "data_sync.progress.stage.comparing_diff": "差分を比較中", - "data_sync.progress.stage.clearing_target": "ターゲットテーブルをクリア中", - "data_sync.progress.stage.checking_columns": "フィールドの整合性を確認中", - "data_sync.progress.stage.applying_changes": "変更を適用中", - "data_sync.progress.stage.completed": "同期が完了", - "data_sync.progress.stage.failed": "同期に失敗", - "data_sync.progress.stage.redis_keyspace_started": "Redis キースペース移行を開始", - "data_sync.progress.stage.creating_target_collection": "ターゲットコレクションを作成中", - "data_sync.progress.stage.migrating_key": "Key を移行中({{current}}/{{total}})", - "data_sync.progress.stage.mongodb_keyspace_started": "MongoDB キースペース移行を開始", - "data_sync.progress.stage.migrating_collection": "コレクションを移行中({{current}}/{{total}})", - "data_sync.progress.stage.collection_completed": "コレクション処理が完了", - "data_sync.progress.stage.backend_update": "進捗を処理中", - "data_sync.progress.stage.analyzing_diff": "差分分析中", - "data_sync.progress.stage.executing": "実行中", - "data_sync.progress.stage.preparing": "準備中", - "data_sync.query_mode.help": "ソースクエリ SQL を入力し、ターゲットテーブルを 1 つ選択してください。差分分析はこの結果セットをターゲットテーブルと直接比較します。", - "data_sync.result.completed": "同期完了", - "data_sync.result.failed": "同期失敗", - "data_sync.result.failed_description": "同期は完了しませんでした。", - "data_sync.result.failed_detail": "同期に失敗しました: {{detail}}", - "data_sync.result.running": "同期実行中", - "data_sync.result.running_description": "現在の段階: {{stage}}{{table}}", - "data_sync.result.success_summary": "{{tables}} テーブルを同期しました。挿入: {{inserted}}、更新: {{updated}}", - "data_sync.result.table_suffix": "、テーブル: {{table}}", - "data_sync.section.migration_options": "移行オプション", - "data_sync.section.source_database": "ソースデータベース", - "data_sync.section.sync_options": "同期オプション", - "data_sync.section.target_database": "ターゲットデータベース", - "data_sync.title.source_database": "ソースデータベース", - "data_sync.title.target_database": "ターゲットデータベース", - "data_sync.title.migration_options": "移行オプション", - "data_sync.title.sync_options": "同期オプション", - "data_sync.title.execution_log": "実行ログ", - "data_sync.step.configure": "ソースとターゲットを設定", - "data_sync.step.result": "実行結果", - "data_sync.step.select_tables": "テーブルを選択", - "data_sync.table_picker.help": "同期するテーブルを選択:", - "data_sync.table_picker.item_unit": "件", - "data_sync.table_picker.items_unit": "件", - "data_sync.table_picker.not_found": "データがありません", - "data_sync.table_picker.search_placeholder": "テーブルを検索...", - "data_sync.table_picker.selected_title": "選択済みテーブル", - "data_sync.table_picker.show_same": "同一テーブルを表示", - "data_sync.table_picker.source_title": "ソーステーブル", - "data_sync.transfer.source_tables": "???????", - "data_sync.transfer.selected_tables": "選択済みテーブル", - "data_sync.transfer.item_unit": "件", - "data_sync.transfer.items_unit": "件", - "data_sync.transfer.search_placeholder": "テーブルを検索...", - "data_sync.transfer.empty": "データがありません", - "data_sync.title.migration_description": "ソースからターゲットまでのテーブル作成、インポート、リスク事前チェックを実行します。", - "data_sync.title.migration_workbench": "クロスデータベース移行ワークベンチ", - "data_sync.title.sync_description": "既存ターゲットテーブルとの差分比較、同期実行、結果確認を行います。", - "data_sync.title.sync_workbench": "データ同期ワークベンチ", - "data_sync.title.migration": "クロスデータソース移行", - "data_sync.title.sync": "データ同期", - "data_sync.validation.query_mode_data_only": "SQL 結果セット同期はデータのみの同期に対応しています", - "data_sync.validation.single_target_table_required": "SQL 結果セット同期ではターゲットテーブルを 1 つ選択してください", - "data_sync.validation.source_query_required": "ソースクエリ SQL を入力してください", - "data_sync.validation.table_required": "少なくとも 1 つのテーブルを選択してください", - "data_sync.plan.use_existing_target_table": "既存のターゲットテーブルにインポート", - "data_sync.plan.missing_columns_auto_add": "{{count}} 個の不足フィールドを補完してからインポート", - "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "ソーステーブルで TDengine の先頭列にマッピングできる時刻列を識別できないため、自動テーブル作成はできません", - "data_sync.plan.redis_mongo_keyspace_import": "Redis Key から MongoDB ドキュメントを生成してインポート", - "data_sync.plan.redis_mongo_target_collection_missing_manual": "ターゲットコレクションが存在しないため、先に手動で作成してください", - "data_sync.plan.redis_mongo_target_collection_auto_create": "ターゲットコレクションが存在しないため、自動作成後にインポートします", - "data_sync.backend.summary.redis_mongo_planned_action": "コレクション {{collection}} に移行", - "data_sync.backend.summary.mongo_redis_planned_action": "{{target}} に移行", - "data_sync.plan.mongo_relational_kernel_planned": "現在のデータベース組み合わせは移行計画段階に入り、構造推論とターゲット方言生成の対応を待っています", - "data_sync.progress.stage.redis_mongo_creating_collection": "ターゲットコレクションを作成中", - "data_sync.progress.stage.redis_mongo_migrating_key": "Key を移行中({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_migrating_collection": "コレクションを移行中({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_collection_completed": "コレクション処理が完了", - "data_sync.backend.error.apply_changes_unsupported": "ターゲットドライバーはデータ変更の適用をサポートしていません", - "data_sync.backend.error.apply_source_query_changes_failed": "SQL 結果セットの変更適用に失敗しました: {{detail}}", - "data_sync.backend.error.clear_target_failed": "ターゲットテーブルのクリアに失敗しました: {{detail}}", - "data_sync.backend.error.connect_source_mongodb_failed": "ソース MongoDB への接続に失敗しました: {{detail}}", - "data_sync.backend.error.connect_source_redis_failed": "ソース Redis への接続に失敗しました: {{detail}}", - "data_sync.backend.error.connect_target_mongodb_failed": "ターゲット MongoDB への接続に失敗しました: {{detail}}", - "data_sync.backend.error.connect_target_redis_failed": "ターゲット Redis への接続に失敗しました: {{detail}}", - "data_sync.backend.error.diff_composite_pk_unsupported": "複合主キー ({{columns}}) は差分比較同期でサポートされていません", - "data_sync.backend.error.diff_pk_required": "主キーがありません。差分比較同期はサポートされていません。直接インポートには insert-only または full-overwrite モードを使用してください。", - "data_sync.backend.error.execute_source_query_failed": "ソースクエリの実行に失敗しました: {{detail}}", - "data_sync.backend.error.init_source_mongodb_driver_failed": "ソース MongoDB ドライバーの初期化に失敗しました: {{detail}}", - "data_sync.backend.error.init_target_mongodb_driver_failed": "ターゲット MongoDB ドライバーの初期化に失敗しました: {{detail}}", - "data_sync.backend.error.inspect_mongodb_collection_failed": "ターゲット MongoDB collection の検査に失敗しました: {{detail}}", - "data_sync.backend.error.list_mongodb_collections_failed": "MongoDB collection の一覧取得に失敗しました: {{detail}}", - "data_sync.backend.error.load_target_columns_failed": "ターゲットテーブル列の読み込みに失敗しました: {{detail}}", - "data_sync.backend.error.mongo_document_write_unsupported": "ターゲットドライバーは MongoDB document の書き込みをサポートしていません", - "data_sync.backend.error.mongo_redis_analyze_collection_failed": "MongoDB collection {{collection}} の分析に失敗しました: {{detail}}", - "data_sync.backend.error.mongo_redis_document_key_missing": "MongoDB document に key フィールドがありません", - "data_sync.backend.error.mongo_redis_document_type_missing": "MongoDB document にフィールド {{field}} がありません。Redis Key={{key}}", - "data_sync.backend.error.mongo_redis_empty_target_value": "Redis Key {{key}} のターゲット値が空です", - "data_sync.backend.error.mongo_redis_unsupported_type": "Redis Key {{key}} では型 {{type}} はサポートされていません", - "data_sync.backend.error.mongo_redis_value_invalid": "Redis Key {{key}} の {{type}} payload が無効です。実際の型={{actual}}", - "data_sync.backend.error.mongo_redis_write_key_failed": "Redis Key {{key}} の書き込みに失敗しました: {{detail}}", - "data_sync.backend.error.read_redis_key_failed": "Redis Key {{key}} の読み取りに失敗しました: {{detail}}", - "data_sync.backend.error.read_source_table_failed": "ソーステーブルの読み取りに失敗しました: {{detail}}", - "data_sync.backend.error.read_target_redis_key_failed": "ターゲット Redis Key {{key}} の読み取りに失敗しました: {{detail}}", - "data_sync.backend.error.read_target_table_failed": "ターゲットテーブルの読み取りに失敗しました: {{detail}}", - "data_sync.backend.error.redis_mongo_analyze_changes_failed": "Redis 移行変更の分析に失敗しました: {{detail}}", - "data_sync.backend.error.redis_mongo_apply_changes_failed": "Redis 移行変更の適用に失敗しました: {{detail}}", - "data_sync.backend.error.redis_mongo_build_changes_failed": "Redis 移行変更の構築に失敗しました: {{detail}}", - "data_sync.backend.error.redis_mongo_create_collection_failed": "ターゲット MongoDB collection の作成に失敗しました: {{detail}}", - "data_sync.backend.error.scan_redis_keys_failed": "Redis Key のスキャンに失敗しました: {{detail}}", - "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "ターゲットテーブルは複合主キー ({{columns}}) のため、SQL 結果セット差分分析はサポートされていません", - "data_sync.backend.error.target_table_columns_missing": "ターゲットテーブル {{table}} が存在しないか、列定義を読み取れません", - "data_sync.backend.result.mongo_redis_analyzed_collections": "Redis 移行のため {{count}} 個の MongoDB collection を分析しました", - "data_sync.backend.result.mongo_redis_completed": "MongoDB keyspace 移行が完了しました。{{collections}} 個の collection と {{keys}} 個の Redis Key を処理しました", - "data_sync.backend.result.mongo_redis_no_collections": "移行可能な MongoDB collection がありません", - "data_sync.backend.result.mongo_redis_no_documents": "移行可能な MongoDB Redis document がありません", - "data_sync.backend.result.redis_mongo_analyzed_keys": "MongoDB 移行のため {{count}} 個の Redis Key を分析しました", - "data_sync.backend.result.redis_mongo_completed": "Redis keyspace 移行が完了しました。{{count}} 個の Redis Key を処理しました", - "data_sync.backend.result.redis_mongo_no_keys": "移行可能な Redis Key がありません", - "data_sync.backend.summary.mongo_redis_diff": "実行時に {{inserts}} 個の Redis Key を挿入し、{{updates}} 個の Redis Key を更新します", - "data_sync.backend.summary.mongo_redis_empty_collection": "collection に移行可能な document が見つかりません", - "data_sync.backend.summary.mongo_redis_same_keys": "一致する Redis Key はすでに最新です", - "data_sync.backend.summary.mongo_redis_warning_document_format": "key/type/ttl/value フィールドを持つ document のみサポートされます", - "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB から Redis では、DB 内の他の Redis Key を削除しないよう全量上書きを増分同期に切り替えます", - "data_sync.backend.summary.mongo_redis_warning_keyspace": "MongoDB collection 内の document は keyspace セマンティクスで Redis に書き込まれます", - "data_sync.backend.summary.redis_mongo_insert_document": "実行時に新しい MongoDB document を挿入します", - "data_sync.backend.summary.redis_mongo_same_document": "一致する MongoDB document はすでに最新です", - "data_sync.backend.summary.redis_mongo_update_document": "実行時に既存の MongoDB document を更新します", - "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key は MongoDB document として書き込まれます", - "data_sync.plan.data_import_without_diff": "現在のモードは差分比較なしでソーステーブルデータをインポートします。", - "data_sync.plan.mongo_relational_entry_warning": "{{sourceType}} から {{targetType}} への {{objectKind}} 移行では、現在は構造推論の計画通知のみ利用できます", - "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis から MongoDB への移行は keyspace セマンティクスで行われ、テーブル構造チェックは実行されません", - "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Redis TTL と collection の順序セマンティクスは document フィールドとして保持されますが、完全に等価とは限りません", - "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "現在の戦略では既存のターゲット MongoDB collection が必要です。実行時に自動作成されません", - "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state はまだ移行されません", - "data_sync.plan.target_missing_preview_unavailable": "ターゲットテーブルがありません。差分プレビューは利用できません。", - "data_sync.progress.stage.redis_mongo_started": "Redis から MongoDB への keyspace 移行を開始しました", - "data_sync.progress.stage.mongo_redis_started": "MongoDB から Redis への keyspace 移行を開始しました", - "data_sync.schema_inference.mongo_relational_issue": "{{sourceType}} -> {{targetType}} の構造推論はまだ開発中です。現在は移行計画の通知のみ利用できます。", - "data_sync.schema_inference.mongo_relational_resolution": "今後の反復で、サンプルデータから列定義と型降格ポリシーを生成します。", - "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view セマンティクスは、まだ PG-like ターゲットへ自動移行されません", - "data_sync.backend.warning.auto_create_pair_unsupported": "自動テーブル作成は現在 MySQL -> Kingbase のみサポートしています。現在の組み合わせ={{sourceType}} -> {{targetType}}", - "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "列 {{column}} の型 {{type}} は json に降格されました", - "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "列 {{column}} の型 {{type}} は jsonb に降格されました", - "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "列 {{column}} の enum 型 {{type}} は varchar(255) に降格されました", - "data_sync.backend.warning.clickhouse_order_by_tuple_used": "ソース主キーが検出されなかったため、ClickHouse は ORDER BY tuple() を使用します。クエリ性能に影響する可能性があります", - "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse はリレーショナル外部キーまたは一意制約のセマンティクスを保持しません。列とデータのみ移行されます", - "data_sync.backend.warning.clickhouse_source_metadata_limited": "ClickHouse ソースのインデックスと制約メタデータは限定的です。逆方向移行は列とデータを中心に行います", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "ClickHouse ソースが主キー情報を返さなかったため、ターゲット MySQL テーブルは主キーを自動作成しません", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "ClickHouse ソースが主キー情報を返さなかったため、ターゲット PG-like テーブルは主キーを自動作成しません", - "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "ClickHouse ターゲットでは insert-only または full-overwrite を推奨します。update/delete セマンティクスは従来のリレーショナルデータベースと異なります", - "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "列 {{column}} の型 {{type}} には専用の MySQL マッピングがないため、text に降格されました", - "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "列 {{column}} の型 {{type}} には専用の PG-like マッピングがないため、text に降格されました", - "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "列 {{column}} の型 {{type}} は unsigned オーバーフローを避けるため numeric(20,0) にマッピングされました", - "data_sync.backend.warning.column_type_degraded_clickhouse_string": "列 {{column}} の型 {{type}} は String に降格されました", - "data_sync.backend.warning.column_type_empty_clickhouse_string": "列 {{column}} の型が空のため、String に降格されました", - "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "列 {{column}} はユーザー定義型のため、String に降格されました", - "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "列 {{column}} の AUTO_INCREMENT は ClickHouse の自動増分セマンティクスとして保持されません", - "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "列 {{column}} のバイナリ型は String に降格されました", - "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "列 {{column}} の型 {{type}} は String に降格されました", - "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "列 {{column}} の型 {{type}} には専用の ClickHouse マッピングがないため、String に降格されました", - "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "列 {{column}} の identity/自動増分セマンティクスは ClickHouse に保持されません", - "data_sync.backend.warning.target_existing_only_required": "現在の戦略ではターゲットテーブルが存在している必要があるため、実行時に自動作成されません。", - "data_sync.backend.warning.target_exists_data_only_no_indexes": "ターゲットテーブルはすでに存在します。データインポートのみ実行され、既存のインデックスと制約は自動再構築されません。", - "data_sync.backend.warning.target_missing_columns": "ターゲットテーブルに {{count}} 個の列が不足しています: {{columns}}", - "data_sync.backend.warning.target_table_existing_only_required": "現在の戦略ではターゲットテーブルが存在している必要があるため、実行時に自動作成されません。", - "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "ソース ORDER BY/PARTITION/TTL/Projection/materialized-view セマンティクスは、まだ TDengine に自動移行されません", - "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "ソースのインデックス、外部キー、トリガー、一意制約、自動増分セマンティクスは、まだ TDengine に自動移行されません", - "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "ソースのインデックス、外部キー、トリガー、一意制約、identity、sequence セマンティクスは、まだ TDengine に自動移行されません", - "data_sync.unsupported.tdengine_source_relational_semantics": "TDengine のインデックス、外部キー、トリガー、supertable、TTL、その他の時系列セマンティクスはまだ自動移行されません", - "data_sync.unsupported.tdengine_target_missing_timestamp": "TDengine regular table の最初の列は TIMESTAMP である必要があります。現在のソーステーブルには直接マッピング可能な時刻列がありません", - "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "ソースの supertable、TAGS、TTL、retention policy、インデックスセマンティクスは、まだ TDengine regular table に自動移行されません", - "data_sync.warning.target_exists_strategy_no_auto_create": "現在の戦略ではターゲットテーブルが存在している必要があるため、実行時に自動作成されません。", - "data_sync.warning.target_missing_columns": "ターゲットテーブルに {{count}} 個の列が不足しています: {{columns}}", - "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "TDengine ソースは既存ターゲットテーブルへの列自動追加をまだ行いません。先にターゲット構造を確認してください", - "data_sync.warning.tdengine_source_mysql_type_fallback": "列 {{column}} の型 {{type}} には専用の MySQL マッピングがないため、{{targetType}} に降格されました", - "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "列 {{column}} の型 {{type}} は unsigned オーバーフローを避けるため {{targetType}} にマッピングされました", - "data_sync.warning.tdengine_source_pglike_type_fallback": "列 {{column}} の型 {{type}} には専用の PG-like マッピングがないため、{{targetType}} に降格されました", - "data_sync.warning.tdengine_source_semantics_degraded": "TDengine からリレーショナルターゲットへの移行は現在、列とデータのみを移行します。supertable、TAG 関連、retention policy、その他の時系列セマンティクスは降格または失われる可能性があります", - "data_sync.warning.tdengine_source_tag_column_degraded": "列 {{column}} は TDengine TAG 列であり、リレーショナルターゲットでは通常列に降格されます", - "data_sync.warning.tdengine_source_tag_column_mapped": "列 {{column}} は TDengine TAG 列であり、通常列としてマッピングされました", - "data_sync.warning.tdengine_target_auto_create_basic_table_only": "TDengine ターゲットの auto-create は現在、基本テーブルのみ作成します。インデックス、外部キー、トリガー、supertable/TAGS/TTL は自動移行されません", - "data_sync.warning.tdengine_target_auto_increment_not_migrated": "列 {{column}} の自動増分セマンティクスは TDengine に移行されません", - "data_sync.warning.tdengine_target_binary_type_fallback": "列 {{column}} の型 {{type}} は文字列セマンティクスにより {{targetType}} に降格されました", - "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "列 {{column}} の型 {{type}} は最初の TDengine TIMESTAMP 列に昇格されました", - "data_sync.warning.tdengine_target_empty_type_fallback": "列 {{column}} の型が空のため、{{targetType}} に降格されました", - "data_sync.warning.tdengine_target_enum_type_fallback": "列 {{column}} の enum 型 {{type}} は {{targetType}} に降格されました", - "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "TDengine ターゲットは既存ターゲットテーブルへの列自動追加をまだ行いません。先にターゲット構造を確認してください", - "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "列 {{column}} の FixedString 長を解析できず、{{targetType}} に降格されました", - "data_sync.warning.tdengine_target_identity_not_migrated": "列 {{column}} の自動増分/identity セマンティクスは TDengine に移行されません", - "data_sync.warning.tdengine_target_insert_only": "TDengine ターゲットは現在 INSERT 書き込みのみサポートします。update/delete 差分は実行時に拒否されます", - "data_sync.warning.tdengine_target_json_regular_table_fallback": "列 {{column}} の型 {{type}} は TDengine regular table で TAG セマンティクスを保持しないため、{{targetType}} に降格されました", - "data_sync.warning.tdengine_target_json_tag_only_fallback": "列 {{column}} の型 {{type}} は、TDengine JSON が TAG のみに適用されるため {{targetType}} に降格されました", - "data_sync.warning.tdengine_target_missing_time_column": "ソーステーブルにマッピング可能な時刻列がないため、自動テーブル作成は利用できません。続行前に TDengine ターゲットテーブルと時刻列を手動で準備してください。", - "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "列 {{column}} の主キーセマンティクスはリレーショナル制約として TDengine に移行されません", - "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "列 {{column}} の型 {{type}} には専用の TDengine 同一データベースマッピングがないため、{{targetType}} に降格されました", - "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "列 {{column}} は TDengine TAG 列であり、regular table への移行後は通常列に降格されます", - "data_sync.warning.tdengine_target_time_only_type_fallback": "列 {{column}} の型 {{type}} には安定した TDengine time-only マッピングがないため、{{targetType}} に降格されました", - "data_sync.warning.tdengine_target_timestamp_column_reordered": "TDengine ベーステーブルでは時刻列が先頭である必要があります。列 {{column}} は先頭位置に移動されました", - "data_sync.warning.tdengine_target_type_fallback": "列 {{column}} の型 {{type}} は {{targetType}} に降格されました", - "data_sync.warning.tdengine_target_type_no_mapping_fallback": "列 {{column}} の型 {{type}} には専用の TDengine マッピングがないため、{{targetType}} に降格されました", - "data_sync.warning.tdengine_target_user_defined_type_fallback": "列 {{column}} はユーザー定義型のため、{{targetType}} に降格されました", - "data_sync.backend.error.analyze_prepare_secrets_failed": "データ同期分析のシークレット準備に失敗しました: {{detail}}", - "data_sync.backend.error.apply_changes_failed": "変更の適用に失敗しました: {{detail}}", - "data_sync.backend.error.auto_add_column_failed": "列の自動補完に失敗しました: 列={{column}}, エラー={{detail}}", - "data_sync.backend.error.build_migration_plan_failed": "移行計画の生成に失敗しました: テーブル={{table}}, エラー={{detail}}", - "data_sync.backend.error.create_indexes_failed": "インデックス作成に失敗しました: テーブル={{table}}, エラー={{detail}}", - "data_sync.backend.error.create_table_sql_empty": "テーブル {{table}} の自動作成に失敗しました: create-table SQL が空です", - "data_sync.backend.error.create_target_table_failed": "ターゲットテーブルの作成に失敗しました: テーブル={{table}}, エラー={{detail}}", - "data_sync.backend.error.exec_ddl_statement_failed": "{{stage}} に失敗しました: SQL={{sql}}, エラー={{detail}}", - "data_sync.backend.error.mongo_read_source_samples_failed": "ソース MongoDB collection サンプルの読み取りに失敗しました: {{detail}}", - "data_sync.backend.error.pre_create_table_sql_failed": "create-table SQL の事前実行に失敗しました: テーブル={{table}}, エラー={{detail}}", - "data_sync.backend.error.prepare_secrets_failed": "データ同期シークレットの準備に失敗しました: {{detail}}", - "data_sync.backend.error.preview_failed": "データ同期プレビューに失敗しました: {{detail}}", - "data_sync.backend.error.preview_prepare_secrets_failed": "データ同期プレビューのシークレット準備に失敗しました: {{detail}}", - "data_sync.backend.error.read_source_table_failed_with_table": "ソーステーブル {{table}} の読み取りに失敗しました: {{detail}}", - "data_sync.backend.error.read_target_table_failed_with_table": "ターゲットテーブル {{table}} の読み取りに失敗しました: {{detail}}", - "data_sync.backend.error.refresh_columns_after_create_failed": "ターゲットテーブル作成後の列読み込みに失敗しました: テーブル={{table}}, エラー={{detail}}", - "data_sync.backend.error.source_collection_no_migratable_fields": "ソース MongoDB collection から移行可能なフィールドを推論できませんでした: {{collection}}", - "data_sync.backend.error.source_table_columns_failed": "ソーステーブル列の取得に失敗しました: {{detail}}", - "data_sync.backend.error.source_table_missing_or_no_columns": "ソーステーブルが存在しないか、列定義がありません: {{table}}", - "data_sync.backend.error.sync_table_schema_failed": "テーブル構造の同期に失敗しました: テーブル={{table}}, エラー={{detail}}", - "data_sync.backend.error.target_collection_check_failed": "ターゲット MongoDB collection の確認に失敗しました: {{detail}}", - "data_sync.backend.error.target_table_columns_failed": "ターゲットテーブル列の取得に失敗しました: {{detail}}", - "data_sync.backend.label.content_data_only": "データのみ", - "data_sync.backend.label.content_schema_and_data": "構造 + データ", - "data_sync.backend.label.content_schema_only": "構造のみ", - "data_sync.backend.label.mode_full_overwrite": "全量上書き", - "data_sync.backend.label.mode_insert_only": "挿入のみ", - "data_sync.backend.label.mode_insert_update": "差分同期", - "data_sync.backend.label.target_strategy_auto_create_if_missing": "ターゲット未存在時に自動作成", - "data_sync.backend.label.target_strategy_existing_only": "既存ターゲットのみ使用", - "data_sync.backend.label.target_strategy_smart": "ターゲットを自動判定", - "data_sync.backend.log.auto_add_columns_completed": "列の自動補完が完了しました: 成功={{succeeded}}, 失敗={{failed}}", - "data_sync.backend.log.change_counts": "挿入 {{inserts}} 行、更新 {{updates}} 行、削除 {{deletes}} 行が必要です", - "data_sync.backend.log.connecting_source": "ソースデータベースに接続しています: {{host}}...", - "data_sync.backend.log.connecting_target": "ターゲットデータベースに接続しています: {{host}}...", - "data_sync.backend.log.data_already_consistent": "データはすでに一致しています。変更は不要です。", - "data_sync.backend.log.ddl_statement_succeeded": "テーブル {{table}} の {{stage}} が成功しました: {{sql}}", - "data_sync.backend.log.fatal_error": "致命的エラー: {{message}}", - "data_sync.backend.log.missing_columns_auto_add_disabled": "ターゲットテーブルに {{count}} 個の列が不足していますが、自動補完は無効です。これらは無視されます: {{columns}}", - "data_sync.backend.log.missing_columns_auto_add_started": "ターゲットテーブルに {{count}} 個の列が不足しています。自動補完を開始します: {{columns}}", - "data_sync.backend.log.mongo_redis_keyspace_options": "MongoDB から Redis への keyspace 移行; モード={{mode}}; ターゲット={{target}}", - "data_sync.backend.log.mongo_redis_migrating_key": "Redis Key {{key}} を書き込み中", - "data_sync.backend.log.mongo_redis_syncing_collection": "MongoDB collection {{collection}} を同期中", - "data_sync.backend.log.redis_mongo_keyspace_options": "Redis から MongoDB への keyspace 移行; モード={{mode}}; ターゲット戦略={{strategy}}", - "data_sync.backend.log.redis_mongo_migrating_key": "Redis Key {{key}} を移行中", - "data_sync.backend.log.source_query_no_changes": "SQL 結果セットとターゲットテーブルは一致しています。適用する変更はありません", - "data_sync.backend.log.source_query_sync_completed": "SQL 結果セット同期が完了しました: 挿入={{inserts}}, 更新={{updates}}, 削除={{deletes}}", - "data_sync.backend.log.source_query_sync_source": "同期元: SQL 結果セット -> ターゲットテーブル {{table}}、モード: {{mode}}", - "data_sync.backend.log.sync_options": "同期内容: {{content}}; モード: {{mode}}; 列の自動追加: {{autoAddColumns}}; ターゲットテーブル戦略: {{targetTableStrategy}}; インデックス作成: {{createIndexes}}", - "data_sync.backend.log.syncing_table": "テーブルを同期しています: {{table}}", - "data_sync.backend.log.table_no_operations_skipped": "テーブル {{table}} には選択された操作がないためスキップされました", - "data_sync.backend.log.target_table_created": "ターゲットテーブルを作成しました: {{table}}", - "data_sync.backend.log.target_table_no_operations": "ターゲットテーブル {{table}} には選択された操作がないためスキップされました", - "data_sync.backend.log.unknown_sync_content_data_only": "不明な同期内容 {{content}} です。データのみの同期が自動選択されました", - "data_sync.backend.result.preview_ready": "データ同期プレビューの準備ができました", - "data_sync.backend.result.sync_completed": "同期完了: テーブル={{tables}}, 挿入={{rowsInserted}}, 更新={{rowsUpdated}}, 削除={{rowsDeleted}}", - "data_sync.plan.mongo_target_collection_missing_auto_create": "ターゲット MongoDB collection {{collection}} がありません。インポート前に自動作成されます。", - "data_sync.plan.mongo_target_collection_missing_manual_create": "ターゲット MongoDB collection {{collection}} がありません。先に手動で作成してください。", - "data_sync.backend.warning.apply_changes_unsupported": "ターゲットドライバーはデータ変更の適用をサポートしていません。", - "data_sync.backend.warning.auto_add_column_sql_generation_failed": "列 {{column}} の自動追加 SQL 生成に失敗しました: {{detail}}", - "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "列 {{column}} は自動増分列です。既存ターゲットテーブルに追加する際、{{feature}} は自動再作成されません", - "data_sync.backend.warning.column_default_expression_skipped": "列 {{column}} のデフォルト値 {{default}} には式が含まれるため、現在は自動移行されません", - "data_sync.backend.warning.column_empty_string_default_not_preserved": "列 {{column}} の空文字列デフォルト値は保持されませんでした", - "data_sync.backend.warning.column_type_degraded": "列 {{column}} の型 {{sourceType}} は {{targetType}} に降格されました", - "data_sync.backend.warning.column_type_empty_degraded": "列 {{column}} の型が空のため、{{targetType}} に降格されました", - "data_sync.backend.warning.column_type_mapped": "列 {{column}} の型 {{sourceType}} は {{targetType}} にマッピングされました", - "data_sync.backend.warning.column_type_no_mapping_degraded": "列 {{column}} の型 {{sourceType}} には専用マッピングがないため、{{targetType}} に降格されました", - "data_sync.backend.warning.column_user_defined_degraded": "列 {{column}} はユーザー定義型のため、{{targetType}} に降格されました", - "data_sync.backend.warning.composite_pk_skipped": "テーブル {{table}} は複合主キー ({{columns}}) です。差分同期はまだサポートされていないためスキップされました", - "data_sync.backend.warning.full_overwrite_clearing_target": "全量上書きモード: ターゲットテーブル {{table}} をクリアします", - "data_sync.backend.warning.load_target_columns_skip_check_failed": "ターゲットテーブル列の取得に失敗したため、列整合性チェックをスキップしました: {{detail}}", - "data_sync.backend.warning.mongo_redis_document_format": "MongoDB から Redis への移行は現在 key/type/ttl/value フィールドを持つ document のみ対応しています", - "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "MongoDB から Redis への移行では、全量上書きを差分同期に降格します", - "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "列 {{column}} は unsigned bigint auto_increment です。{{targetType}} に降格され、自動増分セマンティクスは保持されません", - "data_sync.backend.warning.refresh_columns_after_add_failed": "列追加後のターゲット列更新に失敗しました: テーブル={{table}}, エラー={{detail}}", - "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "Redis から MongoDB への移行では、全量上書きを差分同期に降格します", - "data_sync.backend.warning.source_indexes_read_failed": "ソーステーブルのインデックス読み取りに失敗したため、インデックス移行をスキップしました: {{detail}}", - "data_sync.backend.warning.table_pk_required_skipped": "テーブル {{table}} に主キーがありません。現在のモードでは差分比較が必要なためスキップされました", - "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "{{table}} のターゲットテーブルがありません。現在の戦略では自動作成が許可されていないためスキップされました", - "data_sync.backend.warning.unknown_content_default_data": "不明な同期内容 {{content}} です。データのみの同期が自動選択されました", - "data_sync.backend.warning.unknown_mode_default_insert_update": "不明な同期モード {{mode}} です。増分同期が自動選択されました", - "data_sync.schema_sync.error.create_statement_empty": "create-table 文が空です", - "data_sync.schema_sync.error.create_target_table_failed": "ターゲットテーブル {{table}} の作成に失敗しました: {{detail}}", - "data_sync.schema_sync.error.get_columns_after_create_failed": "ターゲットテーブル {{table}} 作成後の列取得に失敗しました: {{detail}}", - "data_sync.schema_sync.error.get_create_statement_failed": "ソーステーブル {{table}} の create-table 文取得に失敗しました: {{detail}}", - "data_sync.schema_sync.error.get_source_columns_failed": "ソーステーブル {{table}} の列取得に失敗しました: {{detail}}", - "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "ターゲットテーブル {{table}} がなく、ソース型 {{sourceType}} は自動テーブル作成をまだサポートしていません: {{detail}}", - "data_sync.schema_sync.log.add_column_failed": "列追加に失敗しました: テーブル={{table}}, 列={{column}}, エラー={{detail}}", - "data_sync.schema_sync.log.column_added": "列を追加しました: テーブル={{table}}, 列={{column}}, 型={{type}}", - "data_sync.schema_sync.log.completed": "構造同期が完了しました: {{table}}、追加列 {{count}} 個", - "data_sync.schema_sync.log.schema_aligned": "テーブル構造は一致しています: {{table}}", - "data_sync.schema_sync.log.target_created": "ターゲットテーブルを作成しました: {{table}}", - "data_sync.schema_sync.log.target_missing_create": "ターゲットテーブル {{table}} がありません。テーブル構造の作成を試行します", - "data_sync.schema_sync.warning.target_unsupported": "ターゲットデータベース型={{targetType}} は構造同期をまだサポートしていません。テーブル {{table}} はスキップされました", - "data_sync.unsupported.mongo_index_columns_missing": "インデックス {{name}} に列定義がないためスキップされました", - "data_sync.unsupported.mongo_index_create_command_failed": "インデックス {{name}} の MongoDB createIndexes コマンド生成に失敗しました: {{detail}}", - "data_sync.unsupported.mongo_index_prefix_length": "インデックス {{name}} はプレフィックス長を使用しています。MongoDB への等価移行はまだサポートされていません", - "data_sync.warning.mongo_field_mixed_bson_types": "フィールド {{field}} には複数の BSON 値型があり、互換型に降格されました", - "data_sync.warning.mongo_index_type_normalized": "インデックス {{name}} の種類={{type}} は通常インデックスとして MongoDB に移行されます", - "data_sync.warning.mongo_source_collection_index_read_failed": "ソース MongoDB collection のインデックス読み取りに失敗したため、インデックス移行をスキップしました: {{detail}}", - "data_sync.warning.mongo_source_empty_sample_id_only": "ソース MongoDB collection にサンプルデータがないため、`_id` から基本主キー列のみ生成します", - "data_sync.warning.mongo_source_primary_key_missing": "ソース MongoDB collection から安定した主キーを推論できませんでした。ターゲットテーブルは主キーを自動作成しません", - "data_sync.warning.mongo_source_table_index_read_failed": "ソーステーブルのインデックス読み取りに失敗したため、インデックス移行をスキップしました: {{detail}}", - "data_sync.warning.mongo_target_collection_existing_only_required": "現在の戦略ではターゲット MongoDB collection が存在している必要があるため、実行時に自動作成されません", - "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB は弱い構造のターゲットです。フィールド構造は書き込まれる document に従い、ターゲット列チェックは実行されません", - "file.backend.dialog.export_connections": "接続をエクスポート", - "file.backend.dialog.export_data": "データをエクスポート", - "file.backend.dialog.export_database_sql": "{{database}} をエクスポート (SQL)", - "file.backend.dialog.export_query_result": "クエリ結果をエクスポート", - "file.backend.dialog.export_table": "{{table}} をエクスポート", - "file.backend.dialog.export_tables_sql": "テーブルをエクスポート (SQL)", - "file.backend.dialog.import_data": "{{table}} にインポート", - "file.backend.dialog.select_config_file": "設定ファイルを選択", - "file.backend.dialog.select_database_file": "データベースファイルを選択", - "file.backend.dialog.select_duckdb_file": "DuckDB データファイルを選択", - "file.backend.dialog.select_sql_directory": "SQL ディレクトリを選択", - "file.backend.dialog.select_sql_file": "SQL ファイルを選択", - "file.backend.dialog.select_sqlite_file": "SQLite データファイルを選択", - "file.backend.dialog.select_ssh_key_file": "SSH 秘密鍵ファイルを選択", - "file.backend.html_export.document_title": "GoNavi データエクスポート", - "file.backend.html_export.empty_rows": "(0 行)", - "file.backend.html_export.heading": "GoNavi データエクスポート", - "file.backend.html_export.meta": "行数: {{rowCount}} · 列数: {{columnCount}} · 生成日時: {{generatedAt}}", - "file.backend.sql_dump.database": "データベース: {{database}}", - "file.backend.sql_dump.empty_rows": "(0 行)", - "file.backend.sql_dump.generated_at": "生成日時: {{generatedAt}}", - "file.backend.sql_dump.table": "テーブル: {{objectName}}", - "file.backend.sql_dump.title": "GoNavi SQL エクスポート", - "file.backend.sql_dump.view": "ビュー: {{objectName}}", - "file.backend.sql_dump.view_data_skipped": "ビューのデータエクスポートはスキップされました(ビューの INSERT は出力されません)。", - "file.backend.error.batch_commit_unsupported": "現在のデータベース型は一括コミットをサポートしていません", - "file.backend.error.connection_export_file_too_large": "接続エクスポートファイルが大きすぎます", - "file.backend.error.connection_import_file_too_large": "接続インポートファイルが大きすぎます", - "file.backend.error.connection_package_decrypt_failed": "ファイルのパスワードが正しくないか、ファイルが破損しています", - "file.backend.error.connection_package_password_required": "復元パッケージのパスワードを空にすることはできません", - "file.backend.error.connection_package_payload_too_large": "接続パッケージのペイロードが大きすぎます", - "file.backend.error.connection_package_unsupported": "サポートされていない接続復元パッケージ形式です", - "file.backend.error.database_name_required": "データベース名は空にできません", - "file.backend.error.directory_path_required": "ディレクトリパスは空にできません", - "file.backend.error.export_unsupported_format": "サポートされていないエクスポート形式です: {{format}}", - "file.backend.error.file_path_empty": "ファイルパスが空です", - "file.backend.error.file_path_required": "ファイルパスは空にできません", - "file.backend.error.import_file_empty": "ファイルパスは空にできません", - "file.backend.error.import_csv_empty_or_missing_header": "CSV が空かヘッダー行がありません", - "file.backend.error.import_csv_open_failed": "CSV を開けません: {{detail}}", - "file.backend.error.import_csv_read_failed": "CSV を読み取れません: {{detail}}", - "file.backend.error.import_excel_empty_or_missing_header": "Excel が空かヘッダー行がありません", - "file.backend.error.import_excel_no_sheets": "Excel ファイルにシートがありません", - "file.backend.error.import_excel_parse_failed": "Excel を解析できません: {{detail}}", - "file.backend.error.import_excel_read_failed": "Excel を読み取れません: {{detail}}", - "file.backend.error.import_json_parse_failed": "JSON を解析できません: {{detail}}", - "file.backend.error.import_json_root_not_array": "JSON ルートは配列である必要があります", - "file.backend.error.import_unsupported_format": "サポートされていないファイル形式です", - "file.backend.error.invalid_export_mode": "無効なエクスポートモードです", - "file.backend.error.mysql_workbench_no_connections": "XML 内に有効な接続設定が見つかりません", - "file.backend.error.mysql_workbench_parse_failed": "MySQL Workbench XML の解析に失敗しました: {{detail}}", - "file.backend.error.open_file_failed": "ファイルを開けません: {{detail}}", - "file.backend.error.query_required": "クエリ文は空にできません", - "file.backend.error.read_file_error_summary": "ファイル読み取りエラー: {{detail}}。実行済み {{count}} 件。", - "file.backend.error.read_file_info_failed": "ファイル情報を読み取れません: {{detail}}", - "file.backend.error.selected_path_not_directory": "選択されたパスはディレクトリではありません", - "file.backend.error.selected_path_not_sql_file": "選択されたパスは SQL ファイルではありません", - "file.backend.error.select_with_query_required": "SELECT/WITH クエリエクスポートのみサポートされています", - "file.backend.error.task_not_found": "タスクが見つかりません", - "file.backend.error.table_data_batch_limit": "一度に処理できるテーブルは最大 {{max}} 件です。現在 {{count}} 件が選択されています", - "file.backend.error.table_data_clear_failed": "{{table}} のクリアに失敗しました: {{detail}}", - "file.backend.error.table_data_clear_failed_partial": "{{table}} のクリアに失敗しました: {{detail}}。警告: 先頭 {{count}} 件のテーブルはすでにクリアされ、復元できません", - "file.backend.error.table_data_mode_unsupported": "サポートされていないテーブルデータクリーンアップモード: {{mode}}", - "file.backend.error.table_data_no_tables": "処理するテーブルが指定されていません", - "file.backend.error.table_data_truncate_failed": "{{table}} の truncate に失敗しました: {{detail}}", - "file.backend.error.table_data_truncate_failed_partial": "{{table}} の truncate に失敗しました: {{detail}}。警告: 先頭 {{count}} 件のテーブルはすでに truncate され、復元できません", - "file.backend.error.table_data_truncate_unsupported": "現在のデータベース型 {{type}} はテーブルの TRUNCATE をサポートしていません。代わりにクリアを使用してください", - "file.backend.error.write_failed": "書き込みに失敗しました: {{detail}}", - "file.backend.message.cancel_requested": "キャンセルリクエストを送信しました", - "file.backend.message.execution_cancelled": "実行はキャンセルされました。実行済み {{executed}} 件、失敗 {{failed}} 件、所要時間 {{duration}}。", - "file.backend.message.execution_completed": "実行が完了しました。成功 {{success}} 件、失敗 {{failed}} 件、所要時間 {{duration}}。", - "file.backend.message.execution_error_detail_header": "エラー詳細(先頭 {{count}} 件):", - "file.backend.message.execution_more_errors": "...さらに {{count}} 件のエラーは表示されていません", - "file.backend.message.export_completed": "エクスポートが完了しました", - "file.backend.message.import_no_data": "インポートできるデータがありません", - "file.backend.message.import_row_failed": "{{index}} 行目のインポートに失敗しました: {{detail}}", - "file.backend.message.import_summary": "インポート済み: {{imported}}, 失敗: {{failed}}", - "file.backend.message.statement_failed": "{{index}} 件目の文の実行に失敗しました: {{detail}}\n SQL: {{sql}}", - "file.backend.message.table_data_clear_succeeded": "クリアが完了しました", - "file.backend.message.table_data_truncate_succeeded": "truncate が完了しました", - "file.backend.message.transaction_committed": "トランザクションをコミットしました", - "file.backend.message.user_cancelled": "ユーザーが実行をキャンセルしました", - "file.backend.filter.all_files": "すべてのファイル", - "file.backend.filter.all_files_pattern": "すべてのファイル (*.*)", - "file.backend.filter.connection_package": "GoNavi 接続パッケージ (*.gonavi-conn)", - "file.backend.filter.database_files": "データベースファイル", - "file.backend.filter.data_files": "データファイル", - "file.backend.filter.duckdb_files": "DuckDB ファイル", - "file.backend.filter.json_files": "JSON ファイル (*.json)", - "file.backend.filter.mysql_workbench_connections": "MySQL Workbench 接続 (*.xml)", - "file.backend.filter.private_key_files": "秘密鍵ファイル", - "file.backend.filter.sql_files": "SQL ファイル (*.sql)", - "file.backend.filter.sqlite_files": "SQLite ファイル", - "ai_service.backend.message.provider_test_success": "エンドポイント接続テストに成功しました", - "ai_service.backend.error.provider_test_failed": "接続テストに失敗しました: {{detail}}", - "ai_service.backend.error.provider_auth_failed": "API Key が無効、またはリクエストが拒否されました (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_status_failed": "エンドポイントが予期しないステータスを返しました (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_server_error": "上流サーバーが内部エラーを返しました (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_request_create_failed": "リクエストの作成に失敗しました: {{detail}}", - "ai_service.backend.error.provider_request_serialize_failed": "リクエストのシリアライズに失敗しました: {{detail}}", - "ai_service.backend.error.provider_secret_read_failed": "Provider secret の読み取りに失敗しました: {{detail}}", - "ai_service.backend.error.provider_secret_save_failed": "Provider secret の保存に失敗しました: {{detail}}", - "ai_service.backend.error.provider_secret_saved_read_failed": "保存済み Provider secret の読み取りに失敗しました: {{detail}}", - "ai_service.backend.error.provider_secret_delete_failed": "Provider secret の削除に失敗しました: {{detail}}", - "ai_service.backend.error.provider_secret_load_failed": "AI Provider secret の読み込みに失敗しました (provider={{provider}}): {{detail}}", - "ai_service.backend.error.config_rewrite_failed": "AI 設定の再書き込みに失敗しました: {{detail}}", - "ai_service.backend.error.config_read_failed": "AI 設定の読み取りに失敗しました: {{detail}}", - "ai_service.backend.error.config_load_failed": "AI 設定の読み込みに失敗しました: {{detail}}", - "ai_service.backend.error.config_serialize_failed": "AI 設定のシリアライズに失敗しました: {{detail}}", - "ai_service.backend.error.config_dir_create_failed": "設定ディレクトリの作成に失敗しました: {{detail}}", - "ai_service.backend.error.config_write_failed": "AI 設定の書き込みに失敗しました: {{detail}}", - "ai_service.backend.error.daily_secret_store_unavailable": "Daily secret store is unavailable: {{detail}}", - "ai_service.backend.error.secret_store_unavailable": "Secret store is unavailable: {{detail}}", - "ai_service.backend.error.provider_secret_bundle_parse_failed": "Provider secret bundle の解析に失敗しました: {{detail}}", - "ai_service.backend.error.models_request_create_failed": "モデル一覧リクエストの作成に失敗しました: {{detail}}", - "ai_service.backend.error.models_request_failed": "モデル一覧のリクエストに失敗しました: {{detail}}", - "ai_service.backend.error.models_http_status_failed": "モデル一覧エンドポイントが予期しないステータスを返しました (HTTP {{status}}){{body}}", - "ai_service.backend.error.models_parse_failed": "モデル一覧の解析に失敗しました: {{detail}}", - "ai_service.backend.error.active_provider_not_found": "アクティブな AI Provider が見つかりません", - "ai_service.backend.error.editable_provider_not_found": "編集対象の AI Provider が見つかりません: {{detail}}", - "ai_service.backend.error.provider_not_configured": "AI Provider が設定されていません。先に設定で構成してください。", - "ai_service.backend.error.volcengine_coding_models_empty": "現在のエンドポイントは利用可能な Volcengine Coding Plan モデルを返しませんでした。アカウント権限を確認するか、「Volcengine Ark」Provider に切り替えてください", - "ai_service.backend.error.session_missing": "セッションが存在しません", - "ai_service.backend.error.session_corrupt": "セッションデータが破損しています", - "ai_service.backend.error.sessions_dir_create_failed": "sessions ディレクトリの作成に失敗しました: {{detail}}", - "ai_service.backend.error.session_serialize_failed": "セッションデータのシリアライズに失敗しました: {{detail}}", - "ai_service.backend.error.session_write_failed": "セッションの保存に失敗しました: {{detail}}", - "ai_service.backend.error.session_delete_failed": "セッションの削除に失敗しました: {{detail}}", - "ai_service.backend.warning.sql_drop": "高リスク SQL: DROP はデータベースオブジェクトを完全に削除します", - "ai_service.backend.warning.sql_truncate": "高リスク SQL: TRUNCATE はテーブル内のすべてのデータを削除します", - "ai_service.backend.warning.sql_delete_without_where": "高リスク SQL: WHERE のない DELETE はすべての行を削除します", - "ai_service.backend.warning.sql_update_without_where": "高リスク SQL: WHERE のない UPDATE はすべての行を更新します", - "jvm_monitoring_charts.title.heap": "ヒープメモリ", - "jvm_monitoring_charts.title.gc": "ガベージコレクション", - "jvm_monitoring_charts.title.threads": "スレッド", - "jvm_monitoring_charts.title.classes": "クラス読み込み", - "jvm_monitoring_charts.empty.heap.no_samples": "ヒープメモリのサンプルはまだありません", - "jvm_monitoring_charts.empty.heap.metric_unavailable": "現在の監視ソースはヒープメモリのメトリクスを提供していません", - "jvm_monitoring_charts.empty.gc.no_samples": "ガベージコレクションのサンプルはまだありません", - "jvm_monitoring_charts.empty.gc.metric_unavailable": "現在の監視ソースはガベージコレクションのメトリクスを提供していません", - "jvm_monitoring_charts.empty.threads.no_samples": "スレッドのサンプルはまだありません", - "jvm_monitoring_charts.empty.threads.metric_unavailable": "現在の監視ソースはスレッドのメトリクスを提供していません", - "jvm_monitoring_charts.empty.classes.no_samples": "クラス読み込みのサンプルはまだありません", - "jvm_monitoring_charts.empty.classes.metric_unavailable": "現在の監視ソースはクラス読み込みのメトリクスを提供していません", - "jvm_monitoring_charts.legend.heap_used": "ヒープ使用量", - "jvm_monitoring_charts.legend.heap_committed": "ヒープコミット量", - "jvm_monitoring_charts.legend.gc_count": "GC 回数", - "jvm_monitoring_charts.legend.gc_time_ms": "GC 時間(ms)", - "jvm_monitoring_charts.legend.thread_count": "スレッド数", - "jvm_monitoring_charts.legend.daemon_thread_count": "デーモンスレッド数", - "jvm_monitoring_charts.legend.peak_thread_count": "ピークスレッド数", - "jvm_monitoring_charts.legend.loaded_classes": "読み込み済みクラス", - "jvm_monitoring_charts.legend.unloaded_classes": "アンロード済みクラス", - "jvm_monitoring_status_cards.title.heap": "ヒープメモリ", - "jvm_monitoring_status_cards.title.gc_pressure": "ガベージコレクション負荷", - "jvm_monitoring_status_cards.title.threads": "スレッド", - "jvm_monitoring_status_cards.title.classes": "クラス読み込み", - "jvm_monitoring_status_cards.meta.heap_committed": "コミット済み {{value}}", - "jvm_monitoring_status_cards.meta.waiting_samples": "サンプル待ち", - "jvm_monitoring_status_cards.meta.gc_total_time": "累計 {{value}}", - "jvm_monitoring_status_cards.meta.thread_peak": "ピーク {{value}}", - "jvm_monitoring_status_cards.status.sampling": "サンプリング中", - "jvm_monitoring_status_cards.status.stopped": "停止中", - "jvm_monitoring_status_cards.thread_state.runnable_count": "実行可能 {{count}}", - "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "トラブルシューティング指標", - "jvm_monitoring_detail_panel.title.thread_state_distribution": "スレッド状態の分布", - "jvm_monitoring_detail_panel.title.recent_gc_details": "最近のガベージコレクション詳細", - "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "機能と縮退", - "jvm_monitoring_detail_panel.field.process_cpu": "プロセス CPU", - "jvm_monitoring_detail_panel.field.system_cpu": "システム CPU", - "jvm_monitoring_detail_panel.field.process_physical_memory": "プロセス物理メモリ", - "jvm_monitoring_detail_panel.field.process_virtual_memory": "プロセス仮想メモリ", - "jvm_monitoring_detail_panel.memory_missing.title": "プロセス物理メモリが欠落している理由", - "jvm_monitoring_detail_panel.memory_missing.jmx": "JMX 接続ではプロセス常駐物理メモリ属性が公開されていないため、現在はプロセス仮想メモリ指標のみ読み取れます。プロセス物理メモリが必要な場合は、HTTP エンドポイントまたは拡張エージェントの収集に切り替えてください。", - "jvm_monitoring_detail_panel.memory_missing.default": "現在の監視ソースはプロセス常駐物理メモリ指標を返していません。HTTP エンドポイントまたは拡張エージェントがプロセス物理メモリを収集して報告しているか確認してください。", - "jvm_monitoring_detail_panel.empty.thread_states": "スレッド状態のサンプルはまだありません。", - "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "現在の監視ソースはイベントレベルのガベージコレクションデータを提供していません。", - "jvm_monitoring_detail_panel.empty.recent_gc_events": "最近のウィンドウにガベージコレクションイベントはありません。", - "jvm_monitoring_detail_panel.gc.before": "回収前", - "jvm_monitoring_detail_panel.gc.after": "回収後", - "jvm_monitoring_presentation.metric.heap_used": "ヒープメモリ", - "jvm_monitoring_presentation.metric.heap_non_heap": "非ヒープメモリ", - "jvm_monitoring_presentation.metric.gc_count": "ガベージコレクション回数", - "jvm_monitoring_presentation.metric.gc_time": "ガベージコレクション時間", - "jvm_monitoring_presentation.metric.gc_events": "最近のガベージコレクションイベント", - "jvm_monitoring_presentation.metric.thread_count": "スレッド数", - "jvm_monitoring_presentation.metric.thread_states": "スレッド状態", - "jvm_monitoring_presentation.metric.class_loading": "クラスロード", - "jvm_monitoring_presentation.metric.cpu_process": "プロセス CPU", - "jvm_monitoring_presentation.metric.cpu_system": "システム CPU", - "jvm_monitoring_presentation.metric.memory_rss": "プロセス物理メモリ", - "jvm_monitoring_presentation.metric.memory_virtual": "プロセス仮想メモリ", - "jvm_monitoring_presentation.thread_state.new": "新規", - "jvm_monitoring_presentation.thread_state.runnable": "実行可能", - "jvm_monitoring_presentation.thread_state.blocked": "ブロック中", - "jvm_monitoring_presentation.thread_state.waiting": "待機中", - "jvm_monitoring_presentation.thread_state.timed_waiting": "時間指定待機", - "jvm_monitoring_presentation.thread_state.terminated": "終了", - "jvm_monitoring_presentation.availability.missing_metrics": "欠落している指標: {{metrics}}", - "jvm_monitoring_presentation.availability.provider_warnings": "監視ソースの警告: {{warnings}}", - "jvm_monitoring_presentation.availability.no_obvious_degradation": "現在の監視セッションでは明らかな縮退は見つかりませんでした。", - "jvm_change_preview_modal.title": "JVM 変更プレビュー", - "jvm_change_preview_modal.status.no_preview": "プレビュー結果はありません", - "jvm_change_preview_modal.status.generated": "プレビューが生成されました", - "jvm_change_preview_modal.action.confirm_execute": "実行を確認", - "jvm_change_preview_modal.action.close": "閉じる", - "jvm_change_preview_modal.section.summary": "変更概要", - "jvm_change_preview_modal.section.before": "変更前", - "jvm_change_preview_modal.section.after": "変更後", - "jvm_change_preview_modal.field.resource_id": "リソース ID", - "jvm_change_preview_modal.field.version": "バージョン", - "jvm_change_preview_modal.field.format": "形式", - "jvm_change_preview_modal.risk.label": "リスク {{level}}", - "jvm_change_preview_modal.risk.low": "低", - "jvm_change_preview_modal.risk.medium": "中", - "jvm_change_preview_modal.risk.high": "高", - "jvm_change_preview_modal.risk.unknown": "不明", - "jvm_change_preview_modal.permission.requires_confirmation": "確認が必要", - "jvm_change_preview_modal.permission.allowed": "実行可能", - "jvm_change_preview_modal.permission.forbidden": "実行禁止", - "jvm_change_preview_modal.blocking.label": "ブロック理由", - "jvm_change_preview_modal.blocking.alert_message": "現在の変更は実行できません", - "jvm_diagnostic.completion.category.observe": "観測コマンド", - "jvm_diagnostic.completion.category.trace": "トレースコマンド", - "jvm_diagnostic.completion.category.mutating": "高リスクコマンド", - "jvm_diagnostic.completion.category.control": "制御コマンド", - "jvm_diagnostic.completion.preset.category.observe": "観測コマンド", - "jvm_diagnostic.completion.preset.category.trace": "トレースコマンド", - "jvm_diagnostic.completion.preset.category.mutating": "高リスクコマンド", - "jvm_diagnostic.completion.preset.thread-top.documentation": "最もビジーなスレッドを表示し、ブロック中または高 CPU のスレッドをすばやく特定します。", - "jvm_diagnostic.completion.preset.dashboard.documentation": "JVM ランタイム概要を表示します。", - "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "遅いメソッド呼び出しパスをトレースします。", - "jvm_diagnostic.completion.preset.watch-return.documentation": "引数と戻り値を観測します。", - "jvm_diagnostic.completion.preset.ognl-sample.documentation": "高リスクの式コマンドです。既定では例としてのみ表示します。", - "jvm_diagnostic.completion.command.dashboard.documentation": "JVM ランタイム概要を表示します。", - "jvm_diagnostic.completion.command.jvm.documentation": "JVM メモリ、スレッド、クラスロード、GC、ランタイム引数を表示します。", - "jvm_diagnostic.completion.command.thread.documentation": "ホットスレッド、スレッドスタック、ブロック中のスレッドを表示します。", - "jvm_diagnostic.completion.command.sc.documentation": "一致するクラス情報を検索します。", - "jvm_diagnostic.completion.command.sm.documentation": "クラスのメソッドシグネチャを表示します。", - "jvm_diagnostic.completion.command.jad.documentation": "指定したクラスを逆コンパイルします。", - "jvm_diagnostic.completion.command.sysprop.documentation": "システムプロパティを表示します。", - "jvm_diagnostic.completion.command.sysenv.documentation": "環境変数を表示します。", - "jvm_diagnostic.completion.command.classloader.documentation": "クラスローダー情報を表示します。", - "jvm_diagnostic.completion.command.trace.documentation": "メソッド呼び出しの所要時間パスをトレースします。", - "jvm_diagnostic.completion.command.watch.documentation": "引数、戻り値、または例外を観測します。", - "jvm_diagnostic.completion.command.stack.documentation": "メソッド呼び出しスタックを出力します。", - "jvm_diagnostic.completion.command.monitor.documentation": "メソッド呼び出し統計を周期的に収集します。", - "jvm_diagnostic.completion.command.tt.documentation": "メソッドタイムトンネルで呼び出しを記録し、再生します。", - "jvm_diagnostic.completion.command.ognl.documentation": "OGNL 式を実行します。既定では追加の承認が必要です。", - "jvm_diagnostic.completion.command.vmtool.documentation": "JVM オブジェクトを直接操作するか、VMTool アクションを実行します。", - "jvm_diagnostic.completion.command.redefine.documentation": "クラスバイトコードを再定義します。", - "jvm_diagnostic.completion.command.retransform.documentation": "クラス変換を再実行します。", - "jvm_diagnostic.completion.command.stop.documentation": "現在のバックグラウンドタスクを停止します。", - "jvm_diagnostic.completion.detail.execute_directly": "直接実行", - "jvm_diagnostic.completion.detail.thread_option": "スレッドオプション", - "jvm_diagnostic.completion.detail.class_search_template": "クラス検索テンプレート", - "jvm_diagnostic.completion.detail.method_search_template": "メソッド検索テンプレート", - "jvm_diagnostic.completion.detail.decompile_template": "逆コンパイルテンプレート", - "jvm_diagnostic.completion.detail.system_property_template": "システムプロパティテンプレート", - "jvm_diagnostic.completion.detail.environment_variable_template": "環境変数テンプレート", - "jvm_diagnostic.completion.detail.classloader_template": "クラスローダーテンプレート", - "jvm_diagnostic.completion.detail.trace_template": "トレーステンプレート", - "jvm_diagnostic.completion.detail.trace_option": "トレースオプション", - "jvm_diagnostic.completion.detail.watch_template": "watch テンプレート", - "jvm_diagnostic.completion.detail.watch_option": "watch オプション", - "jvm_diagnostic.completion.detail.stack_template": "スタックテンプレート", - "jvm_diagnostic.completion.detail.monitor_template": "monitor テンプレート", - "jvm_diagnostic.completion.detail.time_tunnel_template": "タイムトンネルテンプレート", - "jvm_diagnostic.completion.detail.high_risk_template": "高リスクテンプレート", - "jvm_diagnostic.completion.argument.command_template.label": "{{command}} テンプレート", - "jvm_diagnostic.completion.argument.detail_mode_d.label": "詳細モード (-d)", - "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", - "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "現在の JVM ランタイム概要を表示します。", - "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", - "jvm_diagnostic.completion.argument.jvm.direct.documentation": "JVM メモリ、スレッド、クラスロード、GC、ランタイム引数を表示します。", - "jvm_diagnostic.completion.argument.thread.busy_top.label": "ビジースレッド TOP N (-n)", - "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "CPU 使用率が最も高い上位 N 件のスレッドを表示します。", - "jvm_diagnostic.completion.argument.thread.blocking.label": "ブロックスレッド (-b)", - "jvm_diagnostic.completion.argument.thread.blocking.documentation": "現在ほかのスレッドをブロックしているスレッドを検索します。", - "jvm_diagnostic.completion.argument.thread.thread_id.label": "指定スレッド ID", - "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "指定したスレッドの詳細なスタック情報を表示します。", - "jvm_diagnostic.completion.argument.sc.class_pattern.label": "クラスパターンテンプレート", - "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "クラス名パターンで検索します。", - "jvm_diagnostic.completion.argument.sc.detail.documentation": "クラスの詳細情報を出力します。", - "jvm_diagnostic.completion.argument.sm.method_signature.label": "メソッドシグネチャテンプレート", - "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "クラスのメソッドシグネチャを表示します。", - "jvm_diagnostic.completion.argument.sm.detail.documentation": "詳細なメソッドシグネチャを出力します。", - "jvm_diagnostic.completion.argument.jad.template.label": "逆コンパイルテンプレート", - "jvm_diagnostic.completion.argument.jad.template.documentation": "指定したクラスを逆コンパイルします。", - "jvm_diagnostic.completion.argument.sysprop.property.label": "プロパティを表示", - "jvm_diagnostic.completion.argument.sysprop.property.documentation": "指定したシステムプロパティを読み取ります。", - "jvm_diagnostic.completion.argument.sysenv.variable.label": "環境変数を表示", - "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "指定した環境変数を読み取ります。", - "jvm_diagnostic.completion.argument.classloader.tree.label": "ツリー表示 (-t)", - "jvm_diagnostic.completion.argument.classloader.tree.documentation": "クラスローダーツリーを出力します。", - "jvm_diagnostic.completion.argument.classloader.url_stat.label": "すべての URL 統計 (--url-stat)", - "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "クラスローダー URL 統計を表示します。", - "jvm_diagnostic.completion.argument.classloader.hash.label": "指定クラスローダー Hash", - "jvm_diagnostic.completion.argument.classloader.hash.documentation": "指定したクラスローダーの詳細を表示します。", - "jvm_diagnostic.completion.argument.trace.template.documentation": "遅いメソッド呼び出しチェーンをトレースします。", - "jvm_diagnostic.completion.argument.trace.condition.label": "条件フィルター '#cost > 100'", - "jvm_diagnostic.completion.argument.trace.condition.documentation": "trace 条件式を追加します。", - "jvm_diagnostic.completion.argument.watch.template.documentation": "引数、戻り値、または例外を観測します。", - "jvm_diagnostic.completion.argument.watch.expand_depth.label": "展開深度 -x 2", - "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "オブジェクトの展開深度を設定します。", - "jvm_diagnostic.completion.argument.stack.template.documentation": "メソッド呼び出しスタックを出力します。", - "jvm_diagnostic.completion.argument.monitor.template.documentation": "メソッド呼び出し統計を一定間隔で収集します。", - "jvm_diagnostic.completion.argument.tt.record.label": "tt 記録テンプレート", - "jvm_diagnostic.completion.argument.tt.record.documentation": "指定したメソッドの呼び出しを記録します。", - "jvm_diagnostic.completion.argument.tt.list.label": "記録リストを表示 (-l)", - "jvm_diagnostic.completion.argument.tt.list.documentation": "現在の記録リストを表示します。", - "jvm_diagnostic.completion.argument.tt.replay.label": "記録を再生 (-i)", - "jvm_diagnostic.completion.argument.tt.replay.documentation": "指定した記録の詳細を表示します。", - "jvm_diagnostic.completion.argument.ognl.template.documentation": "OGNL 式を実行します。高リスクコマンドは既定でポリシーにより制限されます。", - "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", - "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "指定したクラスのインスタンスを取得します。高リスクコマンドは既定でポリシーにより制限されます。", - "jvm_diagnostic.completion.argument.redefine.template.documentation": "クラスバイトコードファイルのパスを再定義します。", - "jvm_diagnostic.completion.argument.retransform.template.documentation": "指定したクラスを再変換します。", - "jvm_diagnostic.completion.argument.stop.direct.label": "stop", - "jvm_diagnostic.completion.argument.stop.direct.documentation": "現在のバックグラウンドタスクを停止します。", - "app.about.action.open_install_directory": "インストールディレクトリを開く", - "app.about.action.install_update": "更新をインストール", - "app.about.action.hide_to_background": "バックグラウンドに隠す", - "app.about.download_progress.title": "更新をダウンロード", - "app.about.download_progress.title_with_version": "更新をダウンロード {{version}}", - "app.about.update_status.not_checked": "未確認", - "app.about.update_status.checking": "更新を確認しています...", - "app.about.update_status.check_failed": "更新確認に失敗しました: {{error}}", - "app.about.update_status.new_version_downloaded": "新しいバージョン {{version}} が見つかりました(ダウンロード済み。「ダウンロード状況」からインストールしてください)", - "app.about.update_status.new_version_not_downloaded": "新しいバージョン {{version}} が見つかりました(未ダウンロード)", - "app.about.update_status.latest": "現在は最新バージョンです({{version}})", - "app.about.message.update_package_ready": "更新パッケージの準備ができました({{version}})", - "app.about.message.update_package_ready_with_path": "更新パッケージの準備ができました({{version}})。パス: {{path}}", - "app.about.message.download_completed": "更新のダウンロードが完了しました", - "app.about.message.download_completed_with_path": "更新のダウンロードが完了しました。パッケージパス: {{path}}", - "app.about.message.download_failed_with_error": "更新のダウンロードに失敗しました: {{error}}", - "app.about.message.install_directory_opened_manual_replace": "インストールディレクトリを開きました。手動で置き換えを完了してください。", - "app.about.message.open_install_directory_failed_with_error": "インストールディレクトリを開けませんでした: {{error}}", - "app.about.message.install_failed_with_error": "更新のインストールに失敗しました: {{error}}", - "app.about.message.check_failed_with_error": "更新確認に失敗しました: {{error}}", - "app.about.message.new_version_found": "新しいバージョン {{version}} が見つかりました", - "app.theme.font_family.title": "フォントファミリー", - "app.theme.font_family.ui_title": "UI フォントファミリー", - "app.theme.font_family.mono_title": "等幅フォントファミリー", - "app.theme.font_family.load_failed": "システムフォントの読み込みに失敗しました", - "app.theme.font_family.load_failed_fallback": "システムフォントの読み込みに失敗しました。一般的なフォントプリセットにフォールバックしています: {{error}}", - "app.theme.font_family.loaded_ui_hint": "このシステムから {{count}} 個のフォントファミリーを読み込みました。入力して検索できます。クリアすると既定の UI フォントに戻ります。", - "app.theme.font_family.loading_ui_hint": "現在のシステムにインストール済みのフォントをリアルタイムに読み込みます。入力して検索できます。クリアすると既定の UI フォントに戻ります。", - "app.theme.font_family.mono_fallback_hint": "一般的なコードフォントプリセットにフォールバックしています。SQL エディター、AI コードブロック、ログ、DDL、データテーブルなどの等幅コンテンツに適用されます。", - "app.theme.font_family.mono_hint": "インストール済みのシステムフォントを優先表示し、Mono/Code/Console に近い名前のフォントを上位に表示します。SQL エディター、AI コードブロック、ログ、DDL、データテーブルなどの等幅コンテンツに適用されます。", - "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux で中国語 CJK フォントが検出されていないため、画面に欠落グリフの四角が表示される可能性があります。インストールしてください: ", - "app.theme.font_family.linux_cjk_install_suffix": "。その後 GoNavi を再起動してください。", - "app.linux_cjk_font_banner.title": "Linux CJK フォントが不足しています", - "app.linux_cjk_font_banner.description": "中国語テキストが欠落グリフの四角として表示される可能性があります。フォントをインストールしてから GoNavi を再起動してください: ", - "app.linux_cjk_font_banner.action.open_font_settings": "フォント設定", - "app.theme.data_table.density": "テーブル密度", - "app.theme.data_table.density.comfortable": "ゆったり", - "app.theme.data_table.density.standard": "標準", - "app.theme.data_table.density.compact": "コンパクト", - "app.theme.data_table.density_hint": "行の高さ、列幅、余白を制御します。ゆったりは大画面での確認に適し、コンパクトは情報密度を最大化します。手動でドラッグした列幅は優先して保持されます。", - "app.theme.data_table.font_size": "データテーブルのフォントサイズ", - "app.theme.data_table.sidebar_tree_font_size": "左側スキーマツリーのフォントサイズ", - "app.theme.data_table.follow_global": "全体設定に従う", - "sidebar.message.operation_rename_failed": "名前の変更に失敗しました: {{error}}", - "sidebar.message.operation_drop_failed": "削除に失敗しました: {{error}}", - "sidebar.v2_database_menu.meta": "{{dialect}} · データベース操作", - "sidebar.v2_database_menu.new_schema": "新しい schema", - "sidebar.v2_database_menu.new_materialized_view": "マテリアライズドビューを作成", - "sidebar.v2_database_menu.new_external_catalog": "新しい外部 Catalog", - "sidebar.v2_database_menu.refresh_object_tree": "オブジェクトツリーを更新", - "sidebar.v2_database_menu.export_backup_section": "エクスポートとバックアップ", - "sidebar.v2_database_menu.export_all_table_schema_sql": "すべてのテーブル構造をエクスポート · SQL", - "sidebar.v2_database_menu.backup_all_tables_sql": "すべてのテーブルをバックアップ · スキーマ + データ SQL", - "ai_settings.message.load_provider_failed": "プロバイダー設定の読み込みに失敗しました", - "data_sync.field.schema": "スキーマ", - "data_sync.message.fetch_target_schemas_failed_detail": "ターゲットスキーマの取得に失敗しました: {{detail}}", - "data_sync.message.select_target_schema": "ターゲットスキーマを選択してください", - "connection_modal.field.readOnly.label": "本番接続ガード", - "connection_modal.field.readOnly.help": "有効にすると、この接続では問い合わせのみ許可されます。インポート、スキーマ変更、データ書き込み、同期先としての利用は拒否されます。", - "connection_modal.field.readOnly.checkbox": "この接続を本番接続として扱い、問い合わせのみ許可する", - "query_editor.message.connection_readonly_blocked": "この接続では本番保護が有効なため、問い合わせ操作のみ実行できます。", - "query_editor.results_panel.message.action.copy": "コピー", - "query_editor.results_panel.message.copy_unsupported": "現在の環境ではクリップボードへコピーできません", - "query_editor.results_panel.message.copy_failed": "メッセージのコピーに失敗しました: {{detail}}", "ai_chat.builtin_tools.database.execute_sql.desc": "Execute a SQL query and return results", "ai_chat.builtin_tools.database.execute_sql.detail": "Pass connectionId, dbName, and sql, then execute SQL on the target database and return results (up to 50 rows). Controlled by safety level; read-only mode only allows SELECT/SHOW/DESCRIBE.", "ai_chat.builtin_tools.database.execute_sql.parameters.connectionId.description": "Connection ID", @@ -5037,7 +178,38 @@ "ai_chat.builtin_tools.flows.upstream_request.title": "Trace AI upstream requests", "ai_chat.builtin_tools.flows.workspace_tabs.description": "See which SQL, table, or command tabs are open, then inspect the target tab for field checks, comparisons, and read-only validation.", "ai_chat.builtin_tools.flows.workspace_tabs.title": "Inventory the current workspace", + "ai_chat.composer_notice.missing_model.description": "下のモデルドロップダウンを開いてモデルを選択してください。一覧が空の場合は、プロバイダーのエンドポイントと API Key を確認してください。", + "ai_chat.composer_notice.missing_model.title": "先にモデルを選択してください", + "ai_chat.composer_notice.missing_provider.description": "まず AI 設定でモデルプロバイダーを追加して有効化してください。", + "ai_chat.composer_notice.missing_provider.title": "利用できるプロバイダーがありません", + "ai_chat.composer_notice.model_fetch_failed.default_description": "プロバイダーのエンドポイント、API Key、またはアカウント権限を確認してから、モデルドロップダウンを再度開いてください。", + "ai_chat.composer_notice.model_fetch_failed.detail_description": "プロバイダーの詳細: {{detail}}", + "ai_chat.composer_notice.model_fetch_failed.title": "モデル一覧の読み込みに失敗しました", + "ai_chat.header.action.export": "エクスポート", + "ai_chat.header.default_session_title": "新しいチャット", + "ai_chat.header.export_time": "エクスポート日時:", + "ai_chat.header.export_user": "あなた", + "ai_chat.header.mode_tabs.aria_label": "AI 作業モード", + "ai_chat.header.mode.chat": "チャット", + "ai_chat.header.mode.history": "履歴", + "ai_chat.header.mode.insights": "自動インサイト", + "ai_chat.header.session.connected": "{{title}} · 接続済み", + "ai_chat.header.tooltip.close": "パネルを閉じる", + "ai_chat.header.tooltip.export_markdown": "Markdown としてエクスポート", + "ai_chat.header.tooltip.history": "チャット履歴", + "ai_chat.header.tooltip.new_chat": "新しいチャット", + "ai_chat.header.tooltip.new_chat_clear": "新しいチャット(現在の内容をクリア)", + "ai_chat.header.tooltip.settings": "AI 設定", + "ai_chat.history.action.new_chat": "新しいチャットを開始", + "ai_chat.history.default_session_title": "新しいチャット", "ai_chat.history.empty.no_history": "履歴はまだありません", + "ai_chat.history.empty.no_matches": "一致するチャットはありません", + "ai_chat.history.search.placeholder": "履歴を検索...", + "ai_chat.history.title": "チャット履歴", + "ai_chat.history.tooltip.collapse": "折りたたむ", + "ai_chat.history.tooltip.delete": "削除", + "ai_chat.input.action.send": "送信", + "ai_chat.input.action.stop": "生成を停止", "ai_chat.input.attachment.excel.worksheet_header": "[Worksheet: {{sheetName}}]", "ai_chat.input.attachment.kind.document": "ファイル", "ai_chat.input.attachment.kind.excel": "Excel", @@ -5069,8 +241,10 @@ "ai_chat.input.attachment.warning.too_large": "ファイルが {{size}} を超えているため、ファイル情報のみを添付し本文は読み取りませんでした。", "ai_chat.input.attachment.warning.unsupported_type": "このファイル形式は添付されましたが、本文テキストはまだ抽出していません。内容をモデルに分析させる場合は、markdown、txt、docx、xlsx、pdf を使用してください。", "ai_chat.input.context.add": "追加", + "ai_chat.input.context.connection_tooltip": "現在のデータ照会コンテキスト", "ai_chat.input.context.current_count": "現在のコンテキスト · {{count}}", "ai_chat.input.context.label": "関連コンテキスト", + "ai_chat.input.context.memory_tooltip": "現在のセッションメモリ使用量です。{{limit}} の制限に達すると自動圧縮が開始されます。", "ai_chat.input.context.selector.cancel": "キャンセル", "ai_chat.input.context.selector.confirm": "選択したテーブルをコンテキストに同期", "ai_chat.input.context.selector.database_placeholder": "データベースを切り替え", @@ -5080,7 +254,25 @@ "ai_chat.input.context.selector.search_placeholder": "現在のデータベースでテーブル名を検索...", "ai_chat.input.context.selector.select_all": "一致したテーブルをすべて選択({{count}})", "ai_chat.input.context.selector.title": "テーブル構造をコンテキストに関連付け", + "ai_chat.input.context.tag_label": "関連コンテキスト({{count}})", + "ai_chat.input.message.context_added": "{{count}} 件のテーブル構造をコンテキストに追加しました", + "ai_chat.input.message.context_load_failed": "テーブルコンテキストの読み込みに失敗しました: {{detail}}", + "ai_chat.input.message.context_removed": "{{count}} 件のテーブル構造をコンテキストから削除しました", "ai_chat.input.message.context_sync_failed": "AI コンテキストの同期に失敗しました: {{detail}}", + "ai_chat.input.message.context_synced": "コンテキストを同期しました: 追加 {{added}}、削除 {{removed}}", + "ai_chat.input.message.fetch_table_schema_failed": "{{table}} の構造を取得できませんでした: {{detail}}", + "ai_chat.input.message.fetch_tables_failed": "テーブル一覧の取得に失敗しました: {{detail}}", + "ai_chat.input.message.select_database_context_first": "チャットコンテキストを追加する前に左側でデータベースを選択してください", + "ai_chat.input.message.selection_unchanged": "選択したテーブルに変更はありません", + "ai_chat.input.modal.empty_tables": "「{{query}}」に一致するテーブルはありません", + "ai_chat.input.modal.invert_matching": "一致結果を反転", + "ai_chat.input.modal.ok": "選択したテーブルをコンテキストへ同期", + "ai_chat.input.modal.search_table.placeholder": "現在のデータベース内のテーブルを検索...", + "ai_chat.input.modal.select_all_matching": "一致するテーブルをすべて選択({{count}})", + "ai_chat.input.modal.switch_database.placeholder": "データベースを切り替え", + "ai_chat.input.modal.title": "データベーステーブル構造のコンテキストを追加", + "ai_chat.input.model.placeholder": "モデルを選択", + "ai_chat.input.placeholder": "メッセージを入力...({{shortcut}}、Shift+Enter で改行、/ でコマンド)", "ai_chat.input.placeholder_compact": "メッセージを入力... {{shortcut}} · / コマンド", "ai_chat.input.shortcut.disabled": "ショートカット送信は無効です", "ai_chat.input.shortcut.send_with_combo": "{{shortcut}} で送信", @@ -5110,11 +302,17 @@ "ai_chat.input.slash.connfail.keywords": "接続失敗|クールダウン|検証失敗|ssh|mysql", "ai_chat.input.slash.connfail.label": "🧯 接続失敗プローブ", "ai_chat.input.slash.connfail.prompt": "まず inspect_recent_connection_failures を呼び出し、最近のデータベース接続失敗、接続クールダウン、検証失敗、SSH トンネル例外について実際のログ結論を要約してください。すでに明確なアドレスや種類がある場合は inspect_current_connection や inspect_saved_connections と組み合わせて範囲をさらに絞ってください。", + "ai_chat.input.slash.diff.desc": "2 つのテーブル差分を比較して変更を生成", "ai_chat.input.slash.diff.keywords": "diff|移行|alter", + "ai_chat.input.slash.diff.label": "🔄 テーブル比較", + "ai_chat.input.slash.diff.prompt": "次の 2 つのテーブル構造の差分を比較し、旧バージョンから新バージョンへ移行する ALTER 文を生成してください:", "ai_chat.input.slash.empty.description": "まずはこれらの定番エントリから試して、SQL 生成、AI ヘルスチェック、MCP 切り分けへ素早く進めます。", "ai_chat.input.slash.empty.summary": "{{count}} 個の slash コマンドがあります。コマンド名、説明、キーワードで検索できます。", "ai_chat.input.slash.empty.title": "一致するスラッシュコマンドはありません", + "ai_chat.input.slash.explain.desc": "選択した SQL のロジックを説明", "ai_chat.input.slash.explain.keywords": "説明|sql|ロジック", + "ai_chat.input.slash.explain.label": "💡 SQL を説明", + "ai_chat.input.slash.explain.prompt": "次の SQL の実行ロジックと各ステップの役割を説明してください:\n```sql\n\n```", "ai_chat.input.slash.health.desc": "現在の AI 設定をヘルスプローブで確認", "ai_chat.input.slash.health.keywords": "health|ヘルスチェック|ai設定|プローブ", "ai_chat.input.slash.health.label": "🩺 AI 設定ヘルスチェック", @@ -5123,7 +321,10 @@ "ai_chat.input.slash.hotspots.keywords": "大きなファイル|肥大化|分割|リファクタリング|hotspots|コードホットスポット|数千行", "ai_chat.input.slash.hotspots.label": "🧱 コードホットスポット", "ai_chat.input.slash.hotspots.prompt": "まず inspect_codebase_hotspots を呼び出し、現在の GoNavi フロントエンドの大きなファイルのホットスポット、推奨分割スライス、テスト対象を読んだうえで、次にどのファイルをどの境界で分割すべきか、どの検証を走らせるべきか教えてください。キーワード:", + "ai_chat.input.slash.index.desc": "最適なインデックス案を推奨", "ai_chat.input.slash.index.keywords": "index|インデックス|遅いクエリ", + "ai_chat.input.slash.index.label": "📊 インデックス提案", + "ai_chat.input.slash.index.prompt": "現在のテーブル構造と一般的なクエリシナリオに基づいて最適なインデックス案を推奨し、DDL を提示してください:", "ai_chat.input.slash.mcp.desc": "MCP サービスと外部クライアントの状態を確認", "ai_chat.input.slash.mcp.keywords": "mcp|codex|claude|openclaw|hermans|外部クライアント", "ai_chat.input.slash.mcp.label": "🪛 MCP 接続を切り分け", @@ -5144,19 +345,34 @@ "ai_chat.input.slash.mcptool.keywords": "mcpツール|mcpツール引数|schema|arguments|パラメータ|ツール呼び出し|inputschema", "ai_chat.input.slash.mcptool.label": "🧩 MCP ツール引数", "ai_chat.input.slash.mcptool.prompt": "まず inspect_mcp_setup を呼び出して現在見つかっている MCP ツール alias を確認してください。私がすでにツール名やキーワードを渡していたら inspect_mcp_tool_schema も呼び出して対応する inputSchema を読み、必須パラメータ、フィールド型、列挙値、ネストパス、arguments JSON の書き方を教えてください。", + "ai_chat.input.slash.mock.desc": "INSERT テストデータを生成", "ai_chat.input.slash.mock.keywords": "mock|テストデータ|insert", + "ai_chat.input.slash.mock.label": "🎲 テストデータを作成", + "ai_chat.input.slash.mock.prompt": "現在関連付けられているテーブル向けに、業務上自然な INSERT テストデータ文を 10 件生成してください:", + "ai_chat.input.slash.optimize.desc": "SQL の性能ボトルネックを分析", "ai_chat.input.slash.optimize.keywords": "最適化|インデックス|性能", + "ai_chat.input.slash.optimize.label": "⚡ 最適化分析", + "ai_chat.input.slash.optimize.prompt": "次の SQL の性能問題を分析し、最適化後のバージョンを提示してください:\n```sql\n\n```", + "ai_chat.input.slash.query.desc": "照会したい内容を自然言語で説明", "ai_chat.input.slash.query.keywords": "検索|自然言語|データ検索", + "ai_chat.input.slash.query.label": "🔍 自然言語クエリ", + "ai_chat.input.slash.query.prompt": "SQL クエリを書いてください:", "ai_chat.input.slash.safety.desc": "読み取り専用/書き込み境界と allowMutating を確認", "ai_chat.input.slash.safety.keywords": "安全|読み取り専用|allowmutating|ddl|dml", "ai_chat.input.slash.safety.label": "🛡️ 書き込み安全性", "ai_chat.input.slash.safety.prompt": "まず inspect_ai_safety を呼び出し、現在の AI と GoNavi MCP の書き込み境界、読み取り専用かどうか、execute_sql に allowMutating が必要かどうかを教えてください。", + "ai_chat.input.slash.schema.desc": "テーブル設計の品質をレビュー", "ai_chat.input.slash.schema.keywords": "schema|テーブル構造|設計", + "ai_chat.input.slash.schema.label": "🏗️ テーブル設計レビュー", + "ai_chat.input.slash.schema.prompt": "現在関連付けられているテーブル設計をレビューし、フィールド型、正規化、インデックス戦略、改善案を含めてください:", "ai_chat.input.slash.shortcuts.desc": "現在の Win/Mac ショートカット設定を読む", "ai_chat.input.slash.shortcuts.keywords": "ショートカット|shortcuts|結果エリア|mac|windows", "ai_chat.input.slash.shortcuts.label": "⌨️ ショートカットプローブ", "ai_chat.input.slash.shortcuts.prompt": "まず inspect_shortcuts を呼び出し、現在の GoNavi ショートカット設定、とくに SQL 実行、結果エリア切替、AI パネル表示、AI 送信メッセージが現在のプラットフォームともう一方のプラットフォームでそれぞれどう割り当てられているか、既定値が変更されているかを教えてください。", + "ai_chat.input.slash.sql.desc": "要件を説明してステートメントを生成", "ai_chat.input.slash.sql.keywords": "sql|生成|クエリ文", + "ai_chat.input.slash.sql.label": "📝 SQL を生成", + "ai_chat.input.slash.sql.prompt": "次の要件から SQL を生成してください:", "ai_chat.input.slash.tools.desc": "キーワードから使うべき内蔵プローブを選ぶ", "ai_chat.input.slash.tools.keywords": "ツールカタログ|組み込みツール|toolcatalog|パラメータヒント|arguments|プローブルート", "ai_chat.input.slash.tools.label": "🧰 ツールカタログ", @@ -5194,8 +410,10 @@ "ai_chat.input.status.ready.description.with_context": "現在 {{count}} 件のテーブル構造コンテキストが関連付けられているため、そのまま送信できます。", "ai_chat.input.status.ready.auto_model": "自動選択", "ai_chat.input.status.ready.title": "AI の準備ができました:{{provider}} / {{model}}", + "ai_chat.input.tooltip.attach_table_context": "データベーステーブルコンテキストを追加", "ai_chat.input.tooltip.slash_command": "スラッシュコマンド", "ai_chat.input.tooltip.upload_attachment": "添付ファイルをアップロード(画像、Markdown、Word、Excel、PDF、テキスト)", + "ai_chat.input.tooltip.upload_image": "画像またはスクリーンショットをアップロード", "ai_chat.inspection.ai_config.error.inspect_ai_chat_readiness": "AI チャット前提条件の読み取りに失敗しました", "ai_chat.inspection.ai_config.error.inspect_ai_guidance": "現在の AI プロンプトと Skills 設定の読み取りに失敗しました", "ai_chat.inspection.ai_config.error.inspect_ai_providers": "現在の AI プロバイダー設定の読み取りに失敗しました", @@ -6022,14 +1240,61 @@ "ai_chat.mcp_client.install.summary.missing": "この GoNavi MCP はまだ {{label}} に接続されていません。", "ai_chat.mcp_client.install.summary.remote": "{{label}} は通常クラウドまたは別のマシンで動作するため、現在の GoNavi を呼び出すにはリモート MCP ブリッジが必要です。", "ai_chat.mcp_client.install.summary.stale": "{{label}} には古い GoNavi 接続記録があります。更新すると現在の GoNavi を参照します。", + "ai_chat.message.action.copied": "コピーしました", + "ai_chat.message.action.copied_error_raw": "元のエラーをコピーしました", + "ai_chat.message.action.copy_error_raw": "元のエラーをコピー", + "ai_chat.message.action.copy_full": "全文をコピー", + "ai_chat.message.action.delete": "メッセージを削除", + "ai_chat.message.action.edit": "このメッセージを編集し、後続の記録を削除して再送信", + "ai_chat.message.action.retry": "直前のユーザーメッセージから再生成", + "ai_chat.message.code.collapse": "コードを折りたたむ", + "ai_chat.message.code.copied": "コピーしました", + "ai_chat.message.code.copy": "コードをコピー", + "ai_chat.message.code.execute": "実行", + "ai_chat.message.code.execute_failed": "実行に失敗しました", + "ai_chat.message.code.execute_tooltip": "AI 安全ポリシーの管理下でただちに実行", + "ai_chat.message.code.executing": "実行中...", + "ai_chat.message.code.expand_all": "すべてのコードを展開", + "ai_chat.message.code.insert": "挿入", + "ai_chat.message.code.insert_tooltip": "この SQL をクエリ作業領域へ挿入し、すばやく編集または実行できます", + "ai_chat.message.code.preview": "プレビュー", + "ai_chat.message.code.preview_collapse": "折りたたむ", + "ai_chat.message.code.preview_result": "プレビュー結果({{rows}} 行 × {{columns}} 列)", + "ai_chat.message.code.preview_tooltip": "チャット内でクエリ結果をプレビューします(最大 20 行)", + "ai_chat.message.code.query_no_result": "クエリ結果がありません", + "ai_chat.message.code.view_result": "結果を表示({{rows}} 行)", + "ai_chat.message.image_alt": "添付画像 {{index}}", + "ai_chat.message.jvm.apply_diagnostic": "診断コンソールに適用", + "ai_chat.message.jvm.apply_preview": "JVM プレビューに適用", + "ai_chat.message.jvm.diagnostic_target_not_found": "この診断プランに一致する診断コンソールタブが見つかりません。元の対象コンソールを開いてから適用してください。", + "ai_chat.message.jvm.missing_diagnostic_context": "この診断プランには元のタブコンテキストがありません。対象の診断コンソールで再生成してください。", + "ai_chat.message.jvm.missing_plan_context": "この JVM プランには元のタブコンテキストがありません。対象の JVM リソースページで再生成してください。", + "ai_chat.message.jvm.plan_target_not_found": "この JVM プランに一致するリソースタブが見つかりません。元の対象リソースを開いてから適用してください。", + "ai_chat.message.mermaid.parse_failed": "Mermaid の解析に失敗しました: {{detail}}", + "ai_chat.message.mermaid.render_failed": "Mermaid の描画で例外が発生しました: {{detail}}", "ai_chat.message.render_error.body": "他の会話は引き続き利用できます。続行する前に、この異常なメッセージを削除できます。", "ai_chat.message.render_error.delete": "このメッセージを削除", "ai_chat.message.render_error.retry": "レンダリングを再試行", "ai_chat.message.render_error.title": "この AI メッセージのレンダリングに失敗したため隔離しました", "ai_chat.message.render_error.unknown": "不明なレンダリングエラー", + "ai_chat.message.role.user": "あなた", + "ai_chat.message.security.blocked": "🔒 安全ポリシーによりブロックされました: 現在の安全レベルでは {{operationType}} 種類の SQL を実行できません。AI 設定で安全レベルを調整してください。", + "ai_chat.message.security.confirm_execute": "実行する", + "ai_chat.message.security.confirm_title": "⚠️ 安全確認", + "ai_chat.message.security.default_warning": "この SQL は {{operationType}} 操作です。実行しますか?", + "ai_chat.message.thinking.active": "思考中...", + "ai_chat.message.thinking.count": "({{count}} 文字)", + "ai_chat.message.thinking.title": "思考プロセス", + "ai_chat.message.tool_call.done": "データプローブが完了しました({{count}} 件)", + "ai_chat.message.tool_call.execute_sql": "読み取り専用 SQL 検証を実行", "ai_chat.message.tool_call.get_all_columns": "複数テーブルのカラム概要を集約", + "ai_chat.message.tool_call.get_columns": "実際のカラム定義を確認", + "ai_chat.message.tool_call.get_connections": "利用可能な接続情報を取得", + "ai_chat.message.tool_call.get_databases": "データベース一覧をスキャン", "ai_chat.message.tool_call.get_foreign_keys": "外部キー関係を整理", "ai_chat.message.tool_call.get_indexes": "インデックス定義を確認", + "ai_chat.message.tool_call.get_table_ddl": "CREATE TABLE 文を抽出", + "ai_chat.message.tool_call.get_tables": "テーブル構造情報を分析", "ai_chat.message.tool_call.get_triggers": "トリガーロジックを確認", "ai_chat.message.tool_call.inspect_active_tab": "現在のアクティブタブを読み込み", "ai_chat.message.tool_call.inspect_ai_chat_readiness": "現在の AI チャット送信前状態を読み込み", @@ -6067,14 +1332,132 @@ "ai_chat.message.tool_call.inspect_table_bundle": "完全なテーブル構造スナップショットを取得", "ai_chat.message.tool_call.inspect_workspace_tabs": "現在のワークスペースタブを確認", "ai_chat.message.tool_call.preview_table_rows": "実際のサンプルデータをプレビュー", + "ai_chat.message.tool_call.running": "データプローブを実行中...", + "ai_chat.message.tool_result.char_count": "{{count}} 文字", + "ai_chat.message.tool_result.no_data": "データなし", + "ai_chat.message.tool_result.title": "プローブ実行結果({{name}})", + "ai_chat.message.wait.connecting": "接続を確立中", + "ai_chat.panel.error.html_response": "サーバーが異常な HTML 応答を返しました。ゲートウェイタイムアウトまたはサービス停止の可能性があります", + "ai_chat.panel.error.http_server": "HTTP {{code}} サーバーエラー", + "ai_chat.panel.error.truncated_suffix": "...(切り詰め済み)", + "ai_chat.panel.error.unknown": "不明なエラー", + "ai_chat.panel.history.empty": "チャット履歴はまだありません", + "ai_chat.panel.insight.context.empty_body": "テーブルページで AI を開くと現在のテーブルが自動で関連付けられます。入力欄の上から手動でコンテキストを追加することもできます。", + "ai_chat.panel.insight.context.empty_title": "テーブル構造はまだ関連付けられていません", + "ai_chat.panel.insight.context.linked_body": "この会話には {{tables}} の構造コンテキストが含まれます。", + "ai_chat.panel.insight.context.linked_title": "{{count}} 件のテーブルを関連付け済み", + "ai_chat.panel.insight.context.more_tables_suffix": " などのテーブル", + "ai_chat.panel.insight.context.table_separator": "、", + "ai_chat.panel.insight.query.empty_body": "クエリ実行後、最適化分析に使える SQL の手掛かりがここに表示されます。", + "ai_chat.panel.insight.query.empty_title": "クエリ時間のサンプルはまだありません", + "ai_chat.panel.insight.query.slowest_title": "最近で最も遅いクエリ {{duration}}ms", + "ai_chat.panel.insight.status.empty_body": "SQL ログはまだありません。", + "ai_chat.panel.insight.status.failed_title": "最近のクエリ失敗 {{count}} 件", + "ai_chat.panel.insight.status.ok_title": "最近のクエリ状態は正常です", + "ai_chat.panel.insight.status.recent_body": "最近の SQL を {{count}} 件記録済みです。AI に説明や最適化を依頼できます。", + "ai_chat.panel.insight.write.detected_body": "書き込みを含む SQL は、コミット前にプレビューとロールバック文を生成してください。", + "ai_chat.panel.insight.write.detected_title": "書き込み操作を {{count}} 件検出", + "ai_chat.panel.insight.write.readonly_body": "AI は既定で説明、SELECT の生成、Schema の分析、インデックス最適化を優先します。", + "ai_chat.panel.insight.write.readonly_title": "現在は読み取り専用分析が中心です", + "ai_chat.panel.jvm_diagnostic.permission.allowed": "許可", + "ai_chat.panel.jvm_diagnostic.permission.forbidden": "禁止", + "ai_chat.panel.jvm_diagnostic.policy.plan_first": "診断コマンドは生成できますが、必ず先に計画を示し、実行するかどうかはユーザーに判断させてください。", + "ai_chat.panel.jvm_diagnostic.policy.read_only": "既定では読み取り専用診断として回答し、observe、trace、トラブルシュート用コマンドのみを生成し、すでに実行済みとは仮定しないでください。", + "ai_chat.panel.jvm_runtime.policy.preview_required": "書き込み可能な接続ですが、すべての変更は先にプレビューを生成し、人による確認を待つ必要があります。", + "ai_chat.panel.jvm_runtime.policy.read_only": "読み取り専用接続です。分析と変更計画の生成のみを行い、書き込みがすでに実行されたとは絶対に仮定しないでください。", + "ai_chat.panel.jvm_runtime.resource_path.current": "現在の resourcePath: {{resourcePath}}", + "ai_chat.panel.jvm_runtime.resource_path.missing": "具体的な resourcePath は現在選択されていません。", + "ai_chat.panel.local_tool.execute_sql.description": "指定された接続とデータベースで SQL クエリを実行し、結果を返します。安全レベルにより制御され、読み取り専用モードでは SELECT/SHOW/DESCRIBE などのクエリ操作のみ実行できます。結果は最大 50 行です。", + "ai_chat.panel.local_tool.get_columns.description": "指定されたテーブルの field 一覧を取得します。field 名、型、NULL 可否、デフォルト値、コメントなどを含みます。SQL を生成する前に必ずこのツールを呼び出して実在する field 名を確認し、field 名を推測しないでください。", + "ai_chat.panel.local_tool.get_connections.description": "データベースの照会や操作が必要だが、ユーザーが接続コンテキストを選択していない場合に、アプリで利用可能なすべてのデータベース接続情報を取得します。戻り値には接続 ID (id) と名前 (name) が含まれます。", + "ai_chat.panel.local_tool.get_databases.description": "指定された接続 (connectionId) 配下のすべてのデータベース (Database/Schema) 名を取得します。", + "ai_chat.panel.local_tool.get_table_ddl.description": "指定されたテーブルの完全な CREATE TABLE DDL を取得します。field、インデックス、制約などの完全な構造情報を含みます。", + "ai_chat.panel.local_tool.get_tables.description": "対象の接続と dbName が確定した後、ユーザーがテーブルについて尋ねた、または暗黙的に言及したが正確な tableName が不明な場合、このツールを呼び出してそのデータベース内の全テーブル名一覧(テーブル名のみ)を取得し、対象テーブルの推定に役立てます。", + "ai_chat.panel.local_tool.param.connection_id": "connectionId(接続 ID)", + "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId(get_connections から取得)", + "ai_chat.panel.local_tool.param.db_name": "dbName(データベース名)", + "ai_chat.panel.local_tool.param.sql": "実行する SQL 文", + "ai_chat.panel.local_tool.param.table_name": "tableName(テーブル名)", + "ai_chat.panel.message.empty_response": "❌ モデルから内容が返りませんでした。頻度制限、コンテキスト過負荷、または拒否の可能性があります。", + "ai_chat.panel.message.error": "❌ エラー: {{detail}}", + "ai_chat.panel.message.request_interrupted": "❌ リクエストが中断されました。具体的な応答を受信していません。", + "ai_chat.panel.message.send_failed": "❌ 送信に失敗しました: {{detail}}", + "ai_chat.panel.message.service_not_ready": "❌ AI Service はまだ準備できていません", + "ai_chat.panel.model_control.continue_after_summary": "上記の最新状態と探索結果に基づき、先ほど未完了だった分析を続けるか、次の手順を実行してください。", + "ai_chat.panel.model_control.force_tool_call": "function call を直接使用してツールを呼び出し、操作を実行してください。計画を文章で説明するだけにしないでください。", + "ai_chat.panel.notice.fetch_models_failed": "モデル一覧の取得に失敗しました: {{detail}}", + "ai_chat.panel.probe.consecutive_failed": "⚠️ プローブが 3 ラウンド連続で失敗したため停止しました。接続状態を確認してから再試行してください。", + "ai_chat.panel.probe.max_rounds": "⚠️ ツール呼び出しが {{count}} ラウンドの上限に達したため停止しました。探索を続けるには新しいメッセージを送信してください。", + "ai_chat.panel.prompt.jvm_diagnostic": "あなたは GoNavi の JVM 診断アシスタントです。現在のタブは Arthas 互換の診断ワークベンチであり、診断コンソールへ戻せる構造化診断計画を出力することが目的です。\n\n現在の接続: {{connectionName}}\n対象ホスト: {{host}}\n診断 transport: {{transport}}\n環境: {{environment}}\n接続ポリシー: {{readOnlyPolicy}}\nコマンド権限: observe={{observePolicy}}、trace={{tracePolicy}}、mutating={{mutatingPolicy}}\n\n回答ルール:\n1. 短い分析を先に書いてもよいですが、必ず 1 つだけの ```json コードブロックを含めてください。\n2. JSON フィールドは intent、transport、command、riskLevel、reason、expectedSignals のみに厳密に限定します。\n3. transport は上記の診断 transport と一致させ、別の transport を作らないでください。\n4. command は単一の診断コマンドにし、shell プロンプト、改行連結、複数コマンド、コードフェンスを含めないでください。\n5. riskLevel は low、medium、high のいずれかにしてください。\n6. expectedSignals は、実行後に重点的に観察すべきシグナルを説明する文字列配列にしてください。\n7. コマンド権限で許可されていない操作カテゴリは出力しないでください。満たせない場合は制限を直接説明してください。", + "ai_chat.panel.prompt.jvm_runtime": "あなたは GoNavi の JVM ランタイム分析アシスタントです。現在のコンテキストは SQL ではなく、JVM リソースワークベンチです。\n\n現在の接続: {{connectionName}}\n対象ホスト: {{host}}\nProvider モード: {{providerMode}}\n環境: {{environment}}\n接続ポリシー: {{connectionPolicy}}\nresourcePath 状態: {{resourcePathStatus}}\n\n回答ルール:\n1. リソース構造、リスク、変更提案、ロールバック提案を説明できます。\n2. ユーザーが JVM 変更プランを求めた場合は、必ず 1 つだけの ```json コードブロックを出力し、JSON フィールドは targetType、selector、action、payload、reason のみに厳密に限定してください。\n3. action は現在のリソーススナップショットまたはメタデータに宣言済みの supportedActions を優先してください。宣言がない場合のみ、スナップショット内容から慎重に推定してください。\n4. selector.resourcePath には現在の resourcePath を優先してください。現在のパスが不明な場合は、正確な特定ができないことを明示し、パスを作らないでください。\n5. payload は {\"format\":\"json\",\"value\":{...}} または {\"format\":\"text\",\"value\":\"...\"} の 2 種類のラッパーだけを使用し、スクリプト、コマンド、裸の値は出力しないでください。\n6. スクリプト、コマンド、または実行済み成功のような表現を出力しないでください。", + "ai_chat.panel.prompt.memory_summary": "これは非常に長い会話の履歴です。コンテキスト領域を解放しつつ記憶の核心を保つため、内容を丁寧に読み、技術的事実、探索済みのデータ構造の状態、ユーザーの中心的な要望、現在の進捗を基準に、高度に圧縮した構造化要約を作成してください。\n注意:\n1. 客観的かつ正確にし、重要な業務ロジックや探索済みのテーブル名/フィールドを漏らさないこと。\n2. 無効な実行過程、挨拶や社交辞令、JSON 戻り値そのものは除外すること。\n3. 1000-2000 語程度に収め、簡潔な Markdown のみを出力すること。\n4. 冒頭から直接要約を出力し、挨拶は含めないこと。", + "ai_chat.panel.prompt.sql.context_tables": "あなたはプロのデータベースアシスタントです。現在のデータベース種別は {{dbDisplayType}} です。その方言で SQL を生成してください。以下はユーザーが関連付けたテーブル構造 DDL です。回答時は優先して参照してください:\n\n{{ddlChunks}}", + "ai_chat.panel.prompt.sql.current_database": "あなたはプロのデータベースアシスタントです。現在のデータベース種別は {{dbDisplayType}}、現在のデータベース名は {{targetDbName}} です。ユーザーが特定のテーブルまたは現在のデータベースについて問い合わせた場合は、提供されている get_tables ツールを能動的に呼び出してテーブル情報を取得できます。", + "ai_chat.panel.prompt.sql.no_connections": "あなたはプロのデータベースアシスタントです。現在、アプリ内に利用可能なデータベース接続がありません。\n\nユーザーの質問にデータベース構造または SQL が必要な場合は、接続が存在しないため get_connections、get_databases、get_tables、get_columns で実際のデータベース情報を取得できないことを先に説明し、接続を作成してから再試行するよう案内してください。connectionId、dbName、テーブル名、フィールド名を推測しないでください。\n\nデータベース照会に関係しない通常の質問には通常どおり回答してください。", + "ai_chat.panel.prompt.sql.no_context": "あなたはプロのデータベースアシスタントです。ユーザーは現在、UI 上でコンテキストとして使う具体的なデータベースやテーブルを選択していません。\n\n重要ルール:\n1. ユーザーの対象テーブル探しを支援する必要がある場合、テーブル名を絶対に推測しないでください。必ずツールを呼び出して実データを取得してください。\n2. 完全なワークフロー: get_connections → get_databases → get_tables → get_columns → SQL 生成。どの手順も省略してはいけません。\n3. 【接続優先度 - 極めて重要】接続リストを取得したら、次の優先度で順番に検索してください:\n - 第一優先: host が localhost、127.0.0.1、またはローカル端末を示す接続\n - 第二優先: name または host に dev や local を含む接続、または host が 10.x、192.168.x、172.16-31.x などの内部 IP の接続\n - 第三優先: test や production などその他の接続\n 高優先度の接続で対象テーブルが見つかった場合は、その接続を直接使用し、低優先度の接続は探索しないでください。\n4. 現在のデータベースで対象テーブルが見つからない場合は、他のデータベースも必ず検索し、途中で諦めないでください。\n5. 停止できるのは、考えられるすべてのデータベースを確認し終えた場合、または対象テーブルが明確に見つかった場合だけです。\n6. データベース照会に関係しない通常の質問には通常どおり回答してください。\n\nSQL 生成ルール(極めて重要、厳守):\n7. 【フィールド精度 - 絶対ルール】SQL を生成する前に、必ず get_columns を呼び出して対象テーブルの実フィールド一覧を取得してください。SQL 内のすべてのフィールド名は、get_columns が返す field 値と完全一致(大文字小文字も一致)しなければなりません。フィールド名を作ったり、省略したり、推測したりしないでください。たとえば field が channel なら channel と書き、pay_channel と書いてはいけません。\n8. SQL 生成時は \"database.table\" 形式の修飾プレフィックスを使わず、テーブル名そのものだけを書いてください。\n9. 結果を報告するとき、接続名/ID とデータベース名は、同一の get_tables 呼び出しの実パラメータに厳密に由来している必要があります。ある接続の connectionId と別の接続の dbName を混在させないでください。\n10. 名前が似ているデータベースが複数ある場合は、対象テーブルが具体的にどのデータベースにあるかを明示してください。\n11. 【必須】すべての SQL コードブロックの 1 行目には、次の形式のコンテキスト宣言コメントを必ず追加してください: -- @context connectionId=<接続ID> dbName=<データベース名>。connectionId と dbName は、同じ成功した get_tables 呼び出し、つまりその呼び出しで実際に渡したパラメータ値から取得してください。例:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\n現在利用可能な接続: [{{connList}}]", + "ai_chat.panel.render_error.delete": "このメッセージを削除", + "ai_chat.panel.render_error.description": "他の会話は引き続き使用できます。この異常なメッセージを削除してから操作を続けられます。", + "ai_chat.panel.render_error.retry": "描画を再試行", + "ai_chat.panel.render_error.title": "この AI メッセージの描画に失敗したため、自動的に隔離しました", + "ai_chat.panel.render_error.unknown": "不明な描画エラー", + "ai_chat.panel.session.default_title": "新しいチャット", + "ai_chat.panel.status.analyzing_chain": "経路とロジックを深く分析中", + "ai_chat.panel.status.deep_reasoning": "モデルが深く推論中", + "ai_chat.panel.status.memory_compress_failed": "❌ 記憶圧縮に失敗しました。元の内容のまま続行します...", + "ai_chat.panel.status.memory_compressing": "⚙️ 会話が過負荷です。記憶圧縮を開始しています...", + "ai_chat.panel.status.memory_probe_summary": "【自動記憶再構成】長いプローブ履歴と会話を要約に圧縮しました:\n\n{{summary}}", + "ai_chat.panel.status.memory_summary": "【自動記憶再構成】長い履歴を要約に圧縮しました:\n\n{{summary}}", + "ai_chat.panel.status.model_connecting": "モデルに接続中", + "ai_chat.panel.status.returning_runtime_data": "実行時データをモデルへ返送中", + "ai_chat.panel.status.summarizing_probe": "プローブ実行結果を集約中", + "ai_chat.panel.status.waiting_instruction": "操作指示を待機中", + "ai_chat.panel.status.waiting_response": "モデルの応答を待機中", + "ai_chat.panel.status.waking_engine": "推論エンジンを起動中", + "ai_chat.panel.tool_error.connection_not_found": "接続が見つかりません", "ai_chat.panel.tool_error.fetch_all_columns_failed": "データベース全体のカラム要約の取得に失敗しました: {{detail}}", + "ai_chat.panel.tool_error.fetch_columns_failed": "カラム一覧の取得に失敗しました: {{detail}}", + "ai_chat.panel.tool_error.fetch_databases_failed": "データベース一覧の取得に失敗しました: {{detail}}", "ai_chat.panel.tool_error.fetch_foreign_keys_failed": "外部キー関係の取得に失敗しました: {{detail}}", "ai_chat.panel.tool_error.fetch_indexes_failed": "インデックス定義の取得に失敗しました: {{detail}}", + "ai_chat.panel.tool_error.fetch_table_ddl_failed": "CREATE TABLE 文の取得に失敗しました: {{detail}}", + "ai_chat.panel.tool_error.fetch_tables_failed": "テーブル一覧の取得に失敗しました: {{detail}}", "ai_chat.panel.tool_error.fetch_triggers_failed": "トリガー定義の取得に失敗しました: {{detail}}", "ai_chat.panel.tool_error.mcp_failed": "MCP ツール呼び出しに失敗しました", "ai_chat.panel.tool_error.mcp_failed_with_detail": "MCP ツール呼び出しに失敗しました: {{detail}}", "ai_chat.panel.tool_error.preview_table_rows_failed": "テーブルサンプルデータのプレビューに失敗しました: {{detail}}", + "ai_chat.panel.tool_error.sql_blocked": "セキュリティポリシーによりこのリクエストはブロックされました。現在の安全レベルでは {{operationType}} SQL は許可されていません。SQL をユーザーに表示し、手動で実行するよう依頼してください。", + "ai_chat.panel.tool_error.sql_execute_exception": "SQL 実行例外: {{detail}}", + "ai_chat.panel.tool_error.sql_execute_failed": "SQL の実行に失敗しました", "ai_chat.panel.tool_error.table_name_required": "tableName は空にできません", + "ai_chat.panel.tool_error.unknown_function": "不明な関数: {{functionName}}", + "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ 以下は {{tableName}} テーブルの実際のフィールド一覧です。SQL を生成するときは、列名としてこれらの field 値だけを原文どおり使用し、変更、省略、自作をしないでください。\n使用可能なフィールド: {{fieldNames}}\n詳細: {{detailJson}}", + "ai_chat.quick_action.explain_schema": "🔍 スキーマを説明", + "ai_chat.quick_action.explain_schema.hint.with_context": "フィールドと制約を詳しく説明", + "ai_chat.quick_action.explain_schema.prompt.with_context": "次のテーブルについて、設計意図とフィールドの意味を詳しく説明してください: {{tables}}", + "ai_chat.quick_action.explain_schema.title": "スキーマを説明", + "ai_chat.quick_action.explain_sql": "🔍 SQL を説明", + "ai_chat.quick_action.explain_sql.hint.default": "実行ロジックを説明", + "ai_chat.quick_action.explain_sql.prompt.default": "次の SQL 文の実行ロジックを説明してください:\n```sql\n\n```", + "ai_chat.quick_action.explain_sql.title": "SQL を説明", + "ai_chat.quick_action.generate_sql": "📝 SQL を生成", + "ai_chat.quick_action.generate_sql.hint.default": "自然言語からクエリを生成", + "ai_chat.quick_action.generate_sql.hint.with_context": "自然言語からクエリを生成", + "ai_chat.quick_action.generate_sql.prompt.default": "現在のデータベーステーブル構造に基づいてクエリを生成してください:", + "ai_chat.quick_action.generate_sql.prompt.with_context": "次のテーブル構造に基づいて、よく使うクエリを生成してください: {{tables}}", + "ai_chat.quick_action.generate_sql.title": "SQL を生成", + "ai_chat.quick_action.optimize": "⚡ 最適化の提案", + "ai_chat.quick_action.optimize.hint.default": "性能とインデックスの提案", + "ai_chat.quick_action.optimize.hint.with_context": "インデックス、正規化、潜在リスク", + "ai_chat.quick_action.optimize.prompt.default": "次の SQL 文の性能を分析し、最適化案を提示してください:\n```sql\n\n```", + "ai_chat.quick_action.optimize.prompt.with_context": "次のテーブルの構造設計を分析し、インデックスとクエリ性能の最適化案を提示してください: {{tables}}", + "ai_chat.quick_action.optimize.title": "最適化の提案", + "ai_chat.quick_action.schema_analysis": "🏗️ スキーマ分析", + "ai_chat.quick_action.schema_analysis.hint.default": "構造品質を分析", + "ai_chat.quick_action.schema_analysis.hint.with_context": "テーブル関係と依存グラフ", + "ai_chat.quick_action.schema_analysis.prompt.default": "現在のデータベーステーブル構造を分析し、最適化案を提示してください。", + "ai_chat.quick_action.schema_analysis.prompt.with_context": "次のテーブルに対して包括的な Schema 分析を行い、データ型の選択、正規化レビュー、改善案を含めてください: {{tables}}", + "ai_chat.quick_action.schema_analysis.title": "Schema 分析", + "ai_chat.quick_action.table_separator": "、", "ai_chat.system.context.custom_prompt.database": "現在のユーザーによる追加カスタムプロンプト(データベースセッション)です。安全ルールと事実制約に反しない範囲で優先してください:\n{{content}}", "ai_chat.system.context.custom_prompt.global": "現在のユーザーによる追加カスタムプロンプト(グローバル)です。安全ルールと事実制約に反しない範囲で優先してください:\n{{content}}", "ai_chat.system.context.custom_prompt.jvm": "現在のユーザーによる追加カスタムプロンプト(JVM リソース分析)です。安全ルールと事実制約に反しない範囲で優先してください:\n{{content}}", @@ -6131,6 +1514,17 @@ "ai_chat.system.inspection_guidance.inspect_sql_editor_transaction": "ユーザーが SQL editor の手動 commit/autocommit、未 commit transaction、DML の自動 commit、transaction semantics を尋ねた場合は、先に inspect_sql_editor_transaction で実際の commit 設定と pending transactions を読む。", "ai_chat.system.inspection_guidance.inspect_sql_risk": "ユーザーが実行、削除、更新、DDL、batch SQL を求める、または SQL が実行可能/危険か尋ねた場合は、先に inspect_sql_risk で文数、書き込み/DDL リスク、WHERE 条件、安全ポリシーを確認し、高リスクなら先に説明して確認する。", "ai_chat.system.inspection_guidance.inspect_sql_snippets": "ユーザーが SQL snippets、snippet templates、template prefixes、共通テンプレートに触れた場合は、既存テンプレートを作り話せず、先に inspect_sql_snippets でローカル SQL snippet ライブラリを読む。", + "ai_chat.tools.mcp_fallback_description": "{{serverName}} が提供する MCP ツール {{toolName}}", + "ai_chat.welcome.description.default": "データベース向けの AI アシスタントです。SQL クエリ生成、スキーマ分析、実行ロジックの説明、データベース性能の最適化を支援します。", + "ai_chat.welcome.description.with_context": "{{count}} 件のテーブル構造が関連付けられています。下のクイック操作から分析を開始できます。", + "ai_chat.welcome.suggestion.channel_distribution.default": "過去 7 日間の注文チャネル分布", + "ai_chat.welcome.suggestion.channel_distribution.with_context": "過去 7 日間の主要チャネル分布", + "ai_chat.welcome.suggestion.cleanup.default": "異常データを整理する SQL を書いて", + "ai_chat.welcome.suggestion.cleanup.with_context": "異常チャネルを無効化する SQL を書いて", + "ai_chat.welcome.suggestion.divider": "または直接質問", + "ai_chat.welcome.suggestion.low_rows.default": "現在の結果が少数のレコードだけなのはなぜ?", + "ai_chat.welcome.suggestion.low_rows.with_context": "{{table}} のレコードが少ないのはなぜ?", + "ai_chat.welcome.title": "こんにちは、GoNavi AI です", "ai_service.backend.builtin_prompt.body.data_analyze": "あなたは GoNavi AI アシスタントであり、鋭いビジネス感覚を持つ上級データ分析の専門家です。ユーザーのクエリで得られたデータサンプルを精査し、その中に隠れた価値ある情報を抽出してください。\n\n洞察の目標:\n1. ハードな統計: 全体の行数、主要な数値指標、たとえば最大値・最小値、平均、集計された中央値などを要約します。\n2. トレンドと異常: データにタイムスタンプが含まれる場合は上昇または下降傾向を検出し、外れ値があれば明確に強調します。\n3. ビジネス価値の掘り起こし: データを単に言い換えるだけでなく、見えているパターンと AI の判断を組み合わせ、意思決定者または開発者に役立つ建設的なアクション提案を 1 つ示します。\n4. 表現形式: 分析は「タイトル + 要点を絞った箇条書き」の簡潔なミニレポートとして構成し、平板で機械的な説明は避けてください。", "ai_service.backend.builtin_prompt.body.general_chat": "あなたは GoNavi AI アシスタントであり、GoNavi のデータベース/キャッシュクライアントに深く統合された専用の知的エキスパートシステムです。\nあなたの目標は、開発者、DBA、データサイエンティストにとって最も有用な第二の頭脳となり、専門的で正確かつ将来を見据えたデータ領域の解決策を提供することです。\n\n中核となる人格と対話トーン:\n- 専門性を重視します。MySQL、PostgreSQL、DuckDB、Redis などのデータベース製品について、実行計画、インデックス、ストレージ動作を含めて堅実に判断します。\n- 直接的で実用的に対応します。空疎な雑談は避け、ユーザーの意図が明確な場合は、すぐに使える洗練されたコードまたは手順から提示します。\n- 構造化して読みやすくします。Markdown の見出し、強調、コードブロックを適切に使い、コードブロックには sql、json、bash など正しい言語識別子を付けます。\n- 本番環境の安全を優先します。WHERE 句のない DELETE/UPDATE や、大きな本番テーブルをロックし得るクエリなど、SQL に重大なリスクがある場合は、処理の前に明確な警告を出します。\n\n能力マップ:\n1. 自然言語からデータ操作へ: 人間の意図を正確なクエリまたはコマンドへ変換します。\n2. 実行ロジックの説明: クエリの背後にある実行ロジックと性能への影響を説明します。\n3. 専門的な最適化: ボトルネックを特定し、インデックス、書き換え、実行戦略を提案します。\n4. データ洞察: 結果行を単に言い換えるのではなく、価値あるパターンを抽出します。\n5. アーキテクチャレビュー: テーブル構造設計の制約を評価し、データ増加に耐えられる進化の道筋を提案します。\n\n対話ルール:\n- 専門的で協調的な言葉を使い、ユーザーが選択したインターフェース言語に合わせます。\n- データベースコードを求められた場合は、対象エンジンのベストプラクティスを組み込みます。正確なバージョンが不明な場合は標準的な実装を基準にし、MySQL 8 のウィンドウ関数など重要なバージョン差を補足します。\n- 安易に拒否しないでください。ユーザーが SQL を求めているのに詳細な DDL がない場合は、会話コンテキストと純粋なテーブル名一覧から対象テーブルを推測します。推測できない場合は、既知の情報を説明し、どのテーブルを問い合わせたいのか確認します。", "ai_service.backend.builtin_prompt.body.schema_insight": "あなたは GoNavi AI アシスタントであり、データベースのライフサイクル全体を統括する主席データベースアーキテクトです。このモードでは、ユーザーが提供したテーブル構造に対して、厳格な正規化観点と将来を見据えたレビューを行ってください。\n\nレビュー観点:\n1. 正規化のトレードオフ: 明らかな非正規化設計を見つけ、その冗長性が性能のために妥当なのか、単なる設計上の欠陥なのかを判断します。\n2. インデックスの堅牢性: 自動採番キーと UUID の選択、書き込みを遅くする冗長インデックス、高頻度の複合インデックス漏れを評価します。\n3. 物理容量の先読み: 過大な VARCHAR や不要な BIGINT など、ストレージ浪費につながるデータ型割り当てを確認します。\n4. コードレベルの指針: 構造的な欠陥がある場合は、問題を指摘するだけでなく、必要に応じて具体的な ALTER TABLE 改善スクリプトを提示します。", @@ -6159,6 +1553,15 @@ "ai_service.backend.database_context.unique_index": " (一意)", "ai_service.backend.database_context.value_no": "いいえ", "ai_service.backend.database_context.value_yes": "はい", + "ai_service.backend.error.active_provider_not_found": "アクティブな AI Provider が見つかりません", + "ai_service.backend.error.config_dir_create_failed": "設定ディレクトリの作成に失敗しました: {{detail}}", + "ai_service.backend.error.config_load_failed": "AI 設定の読み込みに失敗しました: {{detail}}", + "ai_service.backend.error.config_read_failed": "AI 設定の読み取りに失敗しました: {{detail}}", + "ai_service.backend.error.config_rewrite_failed": "AI 設定の再書き込みに失敗しました: {{detail}}", + "ai_service.backend.error.config_serialize_failed": "AI 設定のシリアライズに失敗しました: {{detail}}", + "ai_service.backend.error.config_write_failed": "AI 設定の書き込みに失敗しました: {{detail}}", + "ai_service.backend.error.daily_secret_store_unavailable": "Daily secret store is unavailable: {{detail}}", + "ai_service.backend.error.editable_provider_not_found": "編集対象の AI Provider が見つかりません: {{detail}}", "ai_service.backend.error.mcp_command_required": "MCP コマンドは空にできません", "ai_service.backend.error.mcp_http_executable_resolve_failed": "現在の GoNavi 実行ファイルを特定できませんでした: {{detail}}", "ai_service.backend.error.mcp_http_health_status_failed": "healthz が HTTP {{statusCode}} を返しました", @@ -6172,16 +1575,86 @@ "ai_service.backend.error.mcp_tool_alias_invalid": "無効な MCP ツール別名: {{alias}}", "ai_service.backend.error.mcp_tool_arguments_parse_failed": "MCP ツール引数の解析に失敗しました: {{detail}}", "ai_service.backend.error.mcp_transport_unsupported": "サポートされていない MCP transport: {{transport}}", + "ai_service.backend.error.models_http_status_failed": "モデル一覧エンドポイントが予期しないステータスを返しました (HTTP {{status}}){{body}}", + "ai_service.backend.error.models_parse_failed": "モデル一覧の解析に失敗しました: {{detail}}", + "ai_service.backend.error.models_request_create_failed": "モデル一覧リクエストの作成に失敗しました: {{detail}}", + "ai_service.backend.error.models_request_failed": "モデル一覧のリクエストに失敗しました: {{detail}}", + "ai_service.backend.error.provider_auth_failed": "API Key が無効、またはリクエストが拒否されました (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_server_error": "上流サーバーが内部エラーを返しました (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_status_failed": "エンドポイントが予期しないステータスを返しました (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_not_configured": "AI Provider が設定されていません。先に設定で構成してください。", + "ai_service.backend.error.provider_request_create_failed": "リクエストの作成に失敗しました: {{detail}}", + "ai_service.backend.error.provider_request_serialize_failed": "リクエストのシリアライズに失敗しました: {{detail}}", + "ai_service.backend.error.provider_secret_bundle_parse_failed": "Provider secret bundle の解析に失敗しました: {{detail}}", + "ai_service.backend.error.provider_secret_delete_failed": "Provider secret の削除に失敗しました: {{detail}}", + "ai_service.backend.error.provider_secret_load_failed": "AI Provider secret の読み込みに失敗しました (provider={{provider}}): {{detail}}", + "ai_service.backend.error.provider_secret_read_failed": "Provider secret の読み取りに失敗しました: {{detail}}", + "ai_service.backend.error.provider_secret_save_failed": "Provider secret の保存に失敗しました: {{detail}}", + "ai_service.backend.error.provider_secret_saved_read_failed": "保存済み Provider secret の読み取りに失敗しました: {{detail}}", + "ai_service.backend.error.provider_test_failed": "接続テストに失敗しました: {{detail}}", + "ai_service.backend.error.secret_store_unavailable": "Secret store is unavailable: {{detail}}", + "ai_service.backend.error.session_corrupt": "セッションデータが破損しています", + "ai_service.backend.error.session_delete_failed": "セッションの削除に失敗しました: {{detail}}", + "ai_service.backend.error.session_missing": "セッションが存在しません", + "ai_service.backend.error.session_serialize_failed": "セッションデータのシリアライズに失敗しました: {{detail}}", + "ai_service.backend.error.session_write_failed": "セッションの保存に失敗しました: {{detail}}", + "ai_service.backend.error.sessions_dir_create_failed": "sessions ディレクトリの作成に失敗しました: {{detail}}", + "ai_service.backend.error.volcengine_coding_models_empty": "現在のエンドポイントは利用可能な Volcengine Coding Plan モデルを返しませんでした。アカウント権限を確認するか、「Volcengine Ark」Provider に切り替えてください", "ai_service.backend.message.mcp_test_success": "MCP サービスへの接続に成功し、{{count}} 個のツールが見つかりました", + "ai_service.backend.message.provider_test_success": "エンドポイント接続テストに成功しました", "ai_service.backend.message.skill_unnamed": "名称未設定の Skill", "ai_service.backend.provider.image_fallback_prompt": "この画像を説明し、分析してください。", "ai_service.backend.provider.image_omitted_notice": "[画像は省略されました: 現在のモデルまたは上流 API は画像入力をサポートしていません。画像を再送信するには、ビジョン対応モデルに切り替えてください。]", + "ai_service.backend.warning.sql_delete_without_where": "高リスク SQL: WHERE のない DELETE はすべての行を削除します", + "ai_service.backend.warning.sql_drop": "高リスク SQL: DROP はデータベースオブジェクトを完全に削除します", + "ai_service.backend.warning.sql_truncate": "高リスク SQL: TRUNCATE はテーブル内のすべてのデータを削除します", + "ai_service.backend.warning.sql_update_without_where": "高リスク SQL: WHERE のない UPDATE はすべての行を更新します", + "ai_settings.action.back": "戻る", + "ai_settings.action.connection_ok": "接続正常", + "ai_settings.action.retest": "再テスト", + "ai_settings.action.save": "保存", + "ai_settings.action.test": "接続をテスト", + "ai_settings.clipboard.error.unsupported": "現在の環境ではクリップボードへのコピーに対応していません", + "ai_settings.context.description": "AI に送信するデータベースコンテキスト量を制御します", + "ai_settings.context.schema_only.desc": "表と列の構造情報だけを AI に渡します", + "ai_settings.context.schema_only.label": "スキーマのみ", + "ai_settings.context.with_results.desc": "直近のクエリ結果をコンテキストとして渡します", + "ai_settings.context.with_results.label": "クエリ結果を含める", + "ai_settings.context.with_samples.desc": "少量のサンプルデータを含め、AI がデータの特徴を理解しやすくします", + "ai_settings.context.with_samples.label": "サンプルデータを含める", + "ai_settings.form.api_endpoint": "API Endpoint (URL)", + "ai_settings.form.api_endpoint_required": "有効な端点 URL を入力してください", "ai_settings.form.api_endpoint_placeholder.codebuddy": "空欄のままなら CodeBuddy CLI の既定ゲートウェイを使います", + "ai_settings.form.api_format": "API 形式", + "ai_settings.form.api_key": "API Key", "ai_settings.form.api_key.codebuddy_optional": "API Key / Auth Token(任意)", "ai_settings.form.api_key.codebuddy_hint": "空欄のままならこの端末でログイン済みの CodeBuddy CLI アカウントを使い、入力した場合はその認証情報を優先します。", + "ai_settings.form.api_key_keep_placeholder": "空欄のままなら保存済みシークレットを使い続けます", + "ai_settings.form.api_key_placeholder": "sk-... / あなたの API Key", "ai_settings.form.api_key_placeholder.codebuddy": "空欄ならローカルのログイン状態を使い、上書きする場合は API Key / Token を入力", + "ai_settings.form.api_key_required": "API Key を入力してください", + "ai_settings.form.api_key_saved_hint": "API Key は保存済みです。空欄のままなら継続利用し、新しい値を入力すると置き換えます。", + "ai_settings.form.clear_saved_api_key": "保存済み API Key を削除", + "ai_settings.form.model_list": "利用可能モデル一覧(任意)", + "ai_settings.form.model_list_placeholder": "モデル ID を指定します。空欄の場合はサーバーから取得します", "ai_settings.form.model_list_placeholder.codebuddy": "任意:よく使うモデルを事前入力できます。空欄なら CodeBuddy CLI またはサービス側で自動選択します", "ai_settings.form.model_list_placeholder.cursor": "任意:よく使う Cursor モデル ID を事前入力できます。空欄なら Cursor の既定モデルを自動選択します", + "ai_settings.form.provider_name": "プロバイダー名", + "ai_settings.form.provider_name_placeholder": "例:自前の OpenAI 互換端点 / 専用モデル", + "ai_settings.form.provider_name_required": "名前を入力してください", + "ai_settings.form.section.auth_connection": "認証と接続", + "ai_settings.form.section.basic": "基本情報", + "ai_settings.form.section.service_type": "サービス種別", + "ai_settings.mcp_http.error.control_unsupported_runtime": "現在のランタイムでは MCP HTTP サービスの制御に対応していません", + "ai_settings.mcp_http.error.start_unsupported_version": "現在のバージョンでは MCP HTTP サービスの起動に対応していません", + "ai_settings.mcp_http.error.stop_unsupported_version": "現在のバージョンでは MCP HTTP サービスの停止に対応していません", + "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header をコピーしました", + "ai_settings.mcp_http.message.authorization_header_required": "Authorization Header を生成するには先に MCP HTTP サービスを起動してください", + "ai_settings.mcp_http.message.started": "GoNavi MCP HTTP サービスを起動しました", + "ai_settings.mcp_http.message.stopped": "GoNavi MCP HTTP サービスを停止しました", + "ai_settings.mcp_http.message.toggle_failed": "GoNavi MCP HTTP サービスの切り替えに失敗しました", + "ai_settings.mcp_http.message.url_copied": "MCP HTTP URL をコピーしました", + "ai_settings.mcp_http.message.url_unavailable": "コピーできる MCP HTTP URL がありません", "ai_settings.mcp_http.panel.addr_label": "待ち受けアドレス / ポート", "ai_settings.mcp_http.panel.authorization_placeholder": "Bearer gnv_xxx(空欄なら自動生成)", "ai_settings.mcp_http.panel.copy_authorization": "Authorization をコピー", @@ -6194,6 +1667,7 @@ "ai_settings.mcp_http.panel.switch.off": "オフ", "ai_settings.mcp_http.panel.switch.on": "オン", "ai_settings.mcp_http.panel.title": "GoNavi MCP HTTP サービス", + "ai_settings.mcp_http.status.not_running": "GoNavi MCP HTTP サービスは起動していません", "ai_settings.mcp_server.argument_hints.action_separator": ";", "ai_settings.mcp_server.argument_hints.argument_details": "引数ごとの説明", "ai_settings.mcp_server.argument_hints.business_arguments": "検出された業務引数", @@ -6628,6 +2102,13 @@ "ai_settings.mcp_server.help.field_state.fixed": "固定", "ai_settings.mcp_server.help.field_state.optional": "任意", "ai_settings.mcp_server.help.field_state.required": "必須", + "ai_settings.mcp_server.message.delete_failed": "MCP サービスの削除に失敗しました", + "ai_settings.mcp_server.message.deleted": "MCP サービスを削除しました", + "ai_settings.mcp_server.message.save_failed": "MCP サービスの保存に失敗しました", + "ai_settings.mcp_server.message.saved": "MCP サービスを保存しました", + "ai_settings.mcp_server.message.test_failed": "MCP サービスのテストに失敗しました", + "ai_settings.mcp_server.message.test_request_failed": "MCP サービスのテスト実行に失敗しました", + "ai_settings.mcp_server.message.test_success": "MCP サービスに接続しました", "ai_settings.mcp_server.quick_add.action.parse_and_add": "解析して下書きを追加", "ai_settings.mcp_server.quick_add.description": "最も近いテンプレートを選ぶか、README の起動コマンド全体を貼り付けてください。GoNavi は command、args、env に分割し、編集可能な MCP 下書きを作成します。", "ai_settings.mcp_server.quick_add.templates_description": "command と args の分け方が分からない場合は、テンプレートをクリックして下書きを作成してください。各カードには GoNavi が実際に起動するコマンドが表示されます。", @@ -6752,12 +2233,40 @@ "ai_settings.mcp_server.validation.summary.ready": "現在の設定はテストと保存ができます。", "ai_settings.mcp_server.validation.summary.warnings": "確認を推奨する項目が {{count}} 件あります。テストと保存は可能です。", "ai_settings.mcp_server.validation.title": "設定チェック", + "ai_settings.message.delete_failed": "削除に失敗しました", + "ai_settings.message.delete_failed_detail": "削除に失敗しました:{{detail}}", + "ai_settings.message.deleted": "削除しました", + "ai_settings.message.deleted_and_switched": "削除し、「{{name}}」へ自動切り替えしました", + "ai_settings.message.load_provider_failed": "プロバイダー設定の読み込みに失敗しました", + "ai_settings.message.save_failed": "保存に失敗しました", + "ai_settings.message.save_failed_detail": "保存に失敗しました:{{detail}}", + "ai_settings.message.saved": "保存しました", + "ai_settings.message.switch_failed": "切り替えに失敗しました", + "ai_settings.message.switch_failed_detail": "切り替えに失敗しました:{{detail}}", + "ai_settings.message.switched": "切り替えました", + "ai_settings.message.test_failed": "テストに失敗しました", + "ai_settings.message.test_failed_detail": "テストに失敗しました:{{detail}}", + "ai_settings.message.test_requires_new_api_key": "接続テスト前に新しい API Key を入力するか、保存済みシークレットの削除を取り消してください", + "ai_settings.message.test_success": "接続に成功しました", + "ai_settings.message.unknown_error": "不明なエラー", + "ai_settings.nav.context.description": "データベース構造コンテキストを設定します", + "ai_settings.nav.context.title": "コンテキスト", "ai_settings.nav.mcp.description": "GoNavi を外部クライアントに接続し、ツールソースを管理します", "ai_settings.nav.mcp.title": "MCP サービス", + "ai_settings.nav.prompts.description": "システムが用意した基礎要件を確認します", + "ai_settings.nav.prompts.title": "組み込みプロンプト", + "ai_settings.nav.providers.description": "モデル端点とシークレットを設定します", + "ai_settings.nav.providers.title": "モデルプロバイダー", + "ai_settings.nav.safety.description": "AI 操作のリスクレベルを制限します", + "ai_settings.nav.safety.title": "安全制御", "ai_settings.nav.skills.description": "再利用可能なプロンプトモジュールを設定します", "ai_settings.nav.skills.title": "Skills", + "ai_settings.nav.title": "設定ナビゲーション", + "ai_settings.nav.tools.description": "AI が呼び出せるデータプローブを確認します", + "ai_settings.nav.tools.title": "組み込みツール", "ai_settings.prompts.action.save": "カスタムプロンプトを保存", "ai_settings.prompts.builtin.description": "以下は現在の GoNavi バージョンに組み込まれている読み取り専用の低レベル AI プロンプトです。対応するリクエストコンテキストで、上のユーザー単位プロンプトより先に注入されます。", + "ai_settings.prompts.description": "以下は現在の GoNavi バージョンに組み込まれている読み取り専用の基礎 AI プロンプトです。対応する場面のリクエストコンテキストへ動的に注入されます。", "ai_settings.prompts.field.database.description": "データベース/SQL シナリオだけに適用されます。例: 「SQL を生成する前に必ずフィールド名を確認する」。", "ai_settings.prompts.field.database.title": "データベース会話向け追加プロンプト", "ai_settings.prompts.field.global.description": "すべての AI セッションに適用されます。例: 「先に結論を書く」「回答を簡潔に保つ」。", @@ -6766,16 +2275,65 @@ "ai_settings.prompts.field.jvm_diagnostic.title": "JVM 診断向け追加プロンプト", "ai_settings.prompts.field.jvm.description": "JVM リソース閲覧/分析シナリオだけに適用されます。", "ai_settings.prompts.field.jvm.title": "JVM リソース分析向け追加プロンプト", + "ai_settings.prompts.message.save_failed": "カスタムプロンプトの保存に失敗しました", + "ai_settings.prompts.message.saved": "カスタムプロンプトを保存しました", "ai_settings.prompts.placeholder.empty": "空欄の場合は追加しません", "ai_settings.prompts.user.description": "この内容は組み込みシステムプロンプトの後に system message として追加されます。個人の文体、出力制約、チーム規約を入れる用途に向いています。安全境界ではシステム規則が引き続き優先されます。", "ai_settings.prompts.user.title": "ユーザー単位のカスタムプロンプト", + "ai_settings.provider_preset.anthropic.desc": "Claude Opus/Sonnet モデル", + "ai_settings.provider_preset.anthropic.label": "Claude", + "ai_settings.provider_preset.custom.desc": "カスタム API 端点", + "ai_settings.provider_preset.custom.label": "カスタム", + "ai_settings.provider_preset.deepseek.desc": "DeepSeek-V4 / R1 モデル", + "ai_settings.provider_preset.deepseek.label": "DeepSeek", + "ai_settings.provider_preset.gemini.desc": "Gemini 3.1 / 2.5 系列", + "ai_settings.provider_preset.gemini.label": "Gemini", + "ai_settings.provider_preset.minimax.desc": "M3 / M2.7 系列(Anthropic互換)", + "ai_settings.provider_preset.minimax.label": "MiniMax", + "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5(Anthropic互換)", + "ai_settings.provider_preset.moonshot.label": "Kimi", + "ai_settings.provider_preset.ollama.desc": "ローカル配置のオープンソースモデル", + "ai_settings.provider_preset.ollama.label": "Ollama", + "ai_settings.provider_preset.openai.desc": "GPT-5.4 / 5.3 系列", + "ai_settings.provider_preset.openai.label": "OpenAI", + "ai_settings.provider_preset.qwen_bailian.desc": "Bailian の Anthropic互換端点 / リモートのモデル一覧", + "ai_settings.provider_preset.qwen_bailian.label": "Qwen(Bailian 汎用)", + "ai_settings.provider_preset.qwen_coding_plan.desc": "Claude Code CLI プロキシ経路 / 公式対応モデル一覧", + "ai_settings.provider_preset.qwen_coding_plan.label": "Qwen(Coding Plan)", + "ai_settings.provider_preset.volcengine_ark.desc": "Ark 汎用推論 / Doubao モデル", + "ai_settings.provider_preset.volcengine_ark.label": "Volcengine Ark", + "ai_settings.provider_preset.volcengine_coding.desc": "Ark Code / Coding Plan 経路", + "ai_settings.provider_preset.volcengine_coding.label": "Volcengine Coding Plan", + "ai_settings.provider_preset.zhipu.desc": "GLM-5 / GLM-5-Turbo モデル", + "ai_settings.provider_preset.zhipu.label": "Zhipu GLM", + "ai_settings.provider.action.add": "モデルプロバイダーを追加", + "ai_settings.provider.action.delete": "削除", + "ai_settings.provider.action.edit": "編集", + "ai_settings.provider.confirm_delete": "このプロバイダーを削除しますか?", + "ai_settings.provider.editor.add_title": "モデルプロバイダーを追加", + "ai_settings.provider.editor.edit_title": "モデルプロバイダーを編集", + "ai_settings.provider.empty.description": "追加すると AI アシスタントを使い始められます", + "ai_settings.provider.empty.title": "モデルプロバイダーが未設定です", + "ai_settings.provider.next_provider": "次のプロバイダー", + "ai_settings.provider.no_model": "モデル未選択", "ai_settings.provider.auto_model": "自動選択", + "ai_settings.safety.description": "AI が実行できる SQL 操作種別を制御し、データを保護します", + "ai_settings.safety.full.desc": "AI は DDL を含むすべての操作を実行できます。高リスク操作では自動的に警告します。", + "ai_settings.safety.full.label": "完全モード", + "ai_settings.safety.readonly.desc": "AI は SELECT などの照会操作のみ実行できます。最も安全なモードです。", + "ai_settings.safety.readonly.label": "読み取り専用モード", + "ai_settings.safety.readwrite.desc": "AI は INSERT/UPDATE/DELETE を実行できます。危険な操作には確認が必要です。", + "ai_settings.safety.readwrite.label": "読み書きモード", "ai_settings.skill.action.add": "Skill を追加", "ai_settings.skill.confirm_delete": "この Skill を削除しますか?", "ai_settings.skill.description": "Skill は別の大きなプロンプトではなく、名前付きプロンプトモジュール + scope + ツール依存です。現段階ではメインリポジトリ内に保持してください。将来 shared skill pack を配布する場合のみ、別の GitHub リポジトリを検討します。", "ai_settings.skill.description_placeholder": "自分用の説明、例: SQL を出力する前にフィールド名とリスクを確認する", "ai_settings.skill.empty": "まだ Skill はありません。データベース、JVM、診断シナリオ向けに専用の system prompt を定義できます。", "ai_settings.skill.hint": "有効にすると scope に応じて会話へ注入されます。依存ツールが存在しない場合、この Skill は自動的にスキップされます。", + "ai_settings.skill.message.delete_failed": "Skill の削除に失敗しました", + "ai_settings.skill.message.deleted": "Skill を削除しました", + "ai_settings.skill.message.save_failed": "Skill の保存に失敗しました", + "ai_settings.skill.message.saved": "Skill を保存しました", "ai_settings.skill.name_placeholder": "Skill 名、例: SQL レビュー / JVM 診断計画", "ai_settings.skill.required_tools_placeholder": "任意: この Skill が依存するツールを宣言", "ai_settings.skill.scope.database.desc": "SQL / データベースのシナリオでのみ有効", @@ -6790,6 +2348,37 @@ "ai_settings.skill.status.disabled": "無効", "ai_settings.skill.status.enabled": "有効", "ai_settings.skill.system_prompt_placeholder": "この Skill が追加する system prompt を入力します。明確な 1 つの能力に絞り、グローバルプロンプトと重複しないようにしてください。", + "ai_settings.subtitle": "AI モデル、安全レベル、コンテキスト設定を構成します", + "ai_settings.title": "AI 設定", + "ai_settings.tools.builtin_tool_label": "組み込みツール", + "ai_settings.tools.description": "データベース関連の質問を処理するとき、AI アシスタントは以下の組み込みツールを自動呼び出しして実データを取得できます。手動操作は不要です。", + "ai_settings.tools.empty.no_matches": "一致する組み込みツールはありません。mcp、ログ、接続、transaction、ショートカット、schema など、より広いキーワードで検索してください。", + "ai_settings.tools.execute_sql.desc": "SQL クエリを実行して結果を返す", + "ai_settings.tools.execute_sql.detail": "connectionId、dbName、sql を渡し、対象データベース上で SQL を実行して結果を最大 50 行返します。安全レベルが適用され、読み取り専用モードでは SELECT/SHOW/DESCRIBE のみ許可されます。", + "ai_settings.tools.get_columns.desc": "指定表の列構造を取得", + "ai_settings.tools.get_columns.detail": "connectionId、dbName、tableName を渡すと、各列の名前、型、NULL 可否、デフォルト値、コメントを返します。AI は SQL 生成前にこのツールで実際の列名を確認する必要があります。", + "ai_settings.tools.get_connections.desc": "利用可能なデータベース接続をすべて取得", + "ai_settings.tools.get_connections.detail": "接続 ID、名前、種類(MySQL/PostgreSQL など)、Host アドレスを返します。AI はこの情報から優先的に探索する接続を判断します。", + "ai_settings.tools.get_databases.desc": "指定接続配下のデータベースを取得", + "ai_settings.tools.get_databases.detail": "connectionId を渡すと、その接続配下のデータベースまたはスキーマ名一覧を返します。", + "ai_settings.tools.get_table_ddl.desc": "表の建表文を取得", + "ai_settings.tools.get_table_ddl.detail": "connectionId、dbName、tableName を渡すと、列定義、インデックス、制約などを含む完全な CREATE TABLE 文を返します。", + "ai_settings.tools.get_tables.desc": "指定データベース配下の表名を取得", + "ai_settings.tools.get_tables.detail": "connectionId と dbName を渡すと表名一覧を返します。AI はユーザーが言及した対象表を特定するために使います。", + "ai_settings.tools.parameters.default_value": "既定:{{value}}", + "ai_settings.tools.parameters.enum_values": "選択値:{{values}}", + "ai_settings.tools.parameters.example": "例:", + "ai_settings.tools.parameters.hint_title": "パラメーターのヒント", + "ai_settings.tools.parameters.optional": "任意", + "ai_settings.tools.parameters.required": "必須", + "ai_settings.tools.parameters.type_label": "型:{{type}}", + "ai_settings.tools.params_label": "パラメーター:", + "ai_settings.tools.params.none": "パラメーターなし", + "ai_settings.tools.search.aria_label": "組み込みツールを検索", + "ai_settings.tools.search.clear": "クリア", + "ai_settings.tools.search.placeholder": "ツール、フロー、パラメーターを検索。例:mcp / lineLimit / allowMutating / transaction", + "ai_settings.tools.summary": "{{flowVisible}}/{{flowTotal}} 件の推奨フロー、{{toolVisible}}/{{toolTotal}} 個の組み込みツールを表示中。", + "ai_settings.tools.workflow": "💡 ワークフロー:get_connections → get_databases → get_tables → get_columns → SQL 生成", "ai.service.mcp_client.claude_code.config_dir_create_failed": "Claude Code 設定ディレクトリの作成に失敗しました: {{detail}}", "ai.service.mcp_client.claude_code.config_format_invalid": "Claude Code 設定の形式が正しくありません: {{path}} は {{expected}} である必要があります", "ai.service.mcp_client.claude_code.config_parse_failed": "Claude Code 設定の解析に失敗しました: {{detail}}", @@ -6816,12 +2405,111 @@ "ai.service.mcp_client.executable_path_failed": "現在の GoNavi 実行ファイルの場所を特定できませんでした: {{detail}}", "ai.service.mcp_client.remote.status.message": "{{label}} は通常クラウドまたはリモート環境で動作します。リモート MCP ブリッジ経由で Windows GoNavi に接続してください。データベースパスワードはこの GoNavi マシンに残ります。", "ai.service.mcp_client.user_home_dir_unavailable": "現在のユーザーのホームディレクトリを特定できませんでした", + "app.about.action.check_updates": "更新を確認", + "app.about.action.download_progress": "ダウンロード状況", + "app.about.action.download_update": "更新をダウンロード", + "app.about.action.hide_to_background": "バックグラウンドに隠す", + "app.about.action.install_update": "更新をインストール", + "app.about.action.mute_this_version": "今回は通知しない", + "app.about.action.open_install_directory": "インストールディレクトリを開く", + "app.about.community.ai_book": "AI全书", + "app.about.description": "バージョン情報、リポジトリ、更新状況、ダウンロード入口を確認します。", + "app.about.download_progress.title": "更新をダウンロード", + "app.about.download_progress.title_with_version": "更新をダウンロード {{version}}", + "app.about.field.author": "作者", + "app.about.field.community": "コミュニティ", + "app.about.field.update_status": "更新状況", + "app.about.field.version": "バージョン", + "app.about.message.check_failed_with_error": "更新確認に失敗しました: {{error}}", + "app.about.message.download_completed": "更新のダウンロードが完了しました", + "app.about.message.download_completed_with_path": "更新のダウンロードが完了しました。パッケージパス: {{path}}", + "app.about.message.download_failed_with_error": "更新のダウンロードに失敗しました: {{error}}", + "app.about.message.install_directory_opened_manual_replace": "インストールディレクトリを開きました。手動で置き換えを完了してください。", + "app.about.message.install_failed_with_error": "更新のインストールに失敗しました: {{error}}", + "app.about.message.load_failed": "アプリ情報の取得に失敗しました: {{error}}", + "app.about.message.new_version_found": "新しいバージョン {{version}} が見つかりました", + "app.about.message.open_install_directory_failed_with_error": "インストールディレクトリを開けませんでした: {{error}}", + "app.about.message.update_package_ready": "更新パッケージの準備ができました({{version}})", + "app.about.message.update_package_ready_with_path": "更新パッケージの準備ができました({{version}})。パス: {{path}}", + "app.about.project_links": "プロジェクトリンク", + "app.about.title": "GoNavi について", + "app.about.update_status.check_failed": "更新確認に失敗しました: {{error}}", + "app.about.update_status.checking": "更新を確認しています...", + "app.about.update_status.latest": "現在は最新バージョンです({{version}})", + "app.about.update_status.new_version_downloaded": "新しいバージョン {{version}} が見つかりました(ダウンロード済み。「ダウンロード状況」からインストールしてください)", + "app.about.update_status.new_version_not_downloaded": "新しいバージョン {{version}} が見つかりました(未ダウンロード)", + "app.about.update_status.not_checked": "未確認", + "app.ai_panel.action.close": "パネルを閉じる", + "app.ai_panel.action.reload": "再読み込み", + "app.ai_panel.aria.close": "AI パネルを閉じる", + "app.ai_panel.error.description": "これは通常、開発環境のホットリロード後に遅延読み込みリソースが無効になることで発生します。画面全体の白化は防止されているので、そのまま再試行できます。", + "app.ai_panel.error.title": "AI パネルの読み込みに失敗しました", "app.backend.error.reset_webview_zoom_failed": "WebView2 zoom のリセットに失敗しました: {{detail}}", + "app.browser_mock.export_connection_package_unsupported": "ブラウザ mock はリカバリーパッケージのエクスポートをサポートしていません", + "app.browser_mock.export_sql_unsupported": "ブラウザ mock は SQL ファイルのエクスポートをサポートしていません", + "app.browser_mock.import_connection_package_unsupported": "ブラウザ mock はリカバリーパッケージのインポートをサポートしていません。履歴 JSON 接続配列のみ対応しています", + "app.browser_mock.mcp_client.claude_code.installed": "Claude Code のユーザーレベル MCP 設定を書き込みました。Claude CLI を再起動すると、/mcp の User MCPs に GoNavi が表示されます。", + "app.browser_mock.mcp_client.claude_code.not_detected": "Claude Code のユーザーレベル GoNavi MCP 設定は検出されませんでした", + "app.browser_mock.mcp_client.codex.installed": "Codex のユーザーレベル MCP 設定を書き込みました。Codex CLI またはデスクトップアプリを再起動すると GoNavi が表示されます。", + "app.browser_mock.mcp_client.codex.path_mismatch": "Codex 内に GoNavi MCP レコードが検出されましたが、現在の GoNavi インストールパスと一致しません。更新を推奨します。", + "app.browser_mock.mcp_http.not_running": "GoNavi MCP HTTP サービスは起動していません", + "app.browser_mock.mcp_http.started": "GoNavi MCP HTTP サービスを起動しました", + "app.browser_mock.mcp_http.stopped": "GoNavi MCP HTTP サービスを停止しました", + "app.browser_mock.mcp_server.command_required": "MCP コマンドは空にできません", + "app.browser_mock.mcp_server.test_success": "MCP mock テストに成功しました", + "app.browser_mock.mcp_tool.unavailable": "ブラウザ mock は実際の MCP サービスに接続されていません", + "app.browser_mock.provider.test_failed_detail": "接続テストに失敗しました: {{detail}}", + "app.browser_mock.provider.test_success": "エンドポイント接続テストに成功しました", + "app.connection_package.action.start_export": "エクスポート開始", + "app.connection_package.action.start_import": "インポート開始", + "app.connection_package.dialog.export_title": "接続をエクスポート", + "app.connection_package.dialog.file_password_placeholder": "ファイル保護パスワードを入力(任意)", + "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "パスワードは暗号化されています。公開ネットワークで転送する場合は、ファイル保護パスワードの設定を推奨します。", + "app.connection_package.dialog.help.exclude_passwords": "接続設定のみをエクスポートし、パスワードは含めません。", + "app.connection_package.dialog.help.share_file_password_separately": "パスワードは別の経路で受信者に伝え、ファイルと一緒に送信しないでください。", + "app.connection_package.dialog.import_password_title": "インポートパスワードを入力", + "app.connection_package.dialog.option.include_passwords": "接続パスワードをエクスポート", + "app.connection_package.dialog.option.use_file_password": "ファイル保護パスワードを設定", + "app.connection_package.dialog.restore_password_placeholder": "復元パッケージのパスワードを入力", + "app.connection_package.error.export_capability_unavailable": "エクスポートに失敗しました: 現在のバックエンドは新しいエクスポート機能を提供していません", + "app.connection_package.error.file_password_required": "ファイル保護パスワードは空にできません", + "app.connection_package.error.import_capability_unavailable": "インポートに失敗しました: 現在のバックエンドは新しいインポート機能を提供していません", + "app.connection_package.error.import_no_connections": "インポートに失敗しました: バックエンドが接続リストを返しませんでした", + "app.connection_package.error.missing_import_payload": "インポートに失敗しました: インポートする復元パッケージの内容が見つかりません", + "app.connection_package.error.refresh_failed_no_connections": "インポートは成功しましたが、接続リストの更新に失敗しました: バックエンドが接続リストを返しませんでした", + "app.connection_package.error.restore_password_required": "復元パッケージのパスワードは空にできません", + "app.connection_package.message.export_failed": "エクスポートに失敗しました", + "app.connection_package.message.export_succeeded": "エクスポートしました", + "app.connection_package.message.import_failed": "インポートに失敗しました", + "app.connection_package.message.import_failed_with_error": "インポートに失敗しました: {{error}}", + "app.connection_package.message.imported_connections": "{{count}} 件の接続をインポートしました", + "app.connection_package.message.imported_with_missing_passwords": "{{count}} 件の接続をインポートしました。一部の接続にはパスワードが含まれていません。該当する接続を編集し、パスワードを入力して保存してください。", + "app.connection_package.message.no_connections_to_export": "エクスポートできる接続がありません", + "app.connection_package.message.unsupported_file_format": "ファイル形式エラー: GoNavi 復元パッケージ、履歴 JSON 接続配列、または MySQL Workbench XML のみ対応しています", + "app.connection.message.editable_load_failed": "保存済み接続の詳細を読み込めませんでした。代わりにマスク済み設定を開きます。", + "app.connection.message.editable_load_failed_with_detail": "保存済み接続の詳細を読み込めませんでした: {{detail}}。代わりにマスク済み設定を開きます。", + "app.data_root.action.migrate_and_switch": "既存データを移行して切り替え", + "app.data_root.action.open_current": "現在のディレクトリを開く", + "app.data_root.action.restore_default_directory": "既定のディレクトリに戻す", + "app.data_root.action.select": "ディレクトリを選択", + "app.data_root.action.switch_only": "選択したディレクトリへ切り替えのみ", + "app.data_root.apply_method": "適用方法", + "app.data_root.backend.dialog.select_directory": "GoNavi データディレクトリを選択", + "app.data_root.backend.error.create_bootstrap_directory_failed": "既定のブートストラップディレクトリを作成できませんでした: {{detail}}", + "app.data_root.backend.error.create_data_directory_failed": "データディレクトリを作成できませんでした: {{detail}}", + "app.data_root.backend.error.create_target_failed": "移行先データディレクトリを作成できませんでした: {{detail}}", + "app.data_root.backend.error.directory_empty": "データディレクトリは空にできません", + "app.data_root.backend.error.directory_unavailable": "データディレクトリが存在しないか、アクセスできません", + "app.data_root.backend.error.migrate_directory_failed": "ディレクトリを移行できませんでした ({{entry}}): {{detail}}", + "app.data_root.backend.error.migrate_file_failed": "ファイルを移行できませんでした ({{entry}}): {{detail}}", + "app.data_root.backend.error.open_directory_failed": "データディレクトリを開けませんでした: {{detail}}", + "app.data_root.backend.error.open_directory_unsupported": "このプラットフォームではディレクトリを開けません: {{platform}}", "app.data_root.backend.error.parse_migrated_security_update_manifest_failed": "移行後のセキュリティ更新バックアップマニフェストを解析できませんでした: {{detail}}", "app.data_root.backend.error.parse_migrated_security_update_result_failed": "移行後のセキュリティ更新結果を解析できませんでした: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_manifest_failed": "移行後のセキュリティ更新バックアップマニフェストを読み取れませんでした: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_result_failed": "移行後のセキュリティ更新結果を読み取れませんでした: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_state_failed": "移行後のセキュリティ更新状態を読み取れませんでした: {{detail}}", + "app.data_root.backend.error.read_source_failed": "元データを読み取れませんでした ({{entry}}): {{detail}}", "app.data_root.backend.error.read_source_root_failed": "ソースデータディレクトリを読み取れませんでした: {{detail}}", "app.data_root.backend.error.resolve_source_failed": "ソースデータディレクトリを解決できませんでした: {{detail}}", "app.data_root.backend.error.resolve_target_failed": "移行先データディレクトリを解決できませんでした: {{detail}}", @@ -6829,11 +2517,539 @@ "app.data_root.backend.error.write_migrated_security_update_manifest_failed": "移行後のセキュリティ更新バックアップマニフェストを書き込めませんでした: {{detail}}", "app.data_root.backend.error.write_migrated_security_update_result_failed": "移行後のセキュリティ更新結果を書き込めませんでした: {{detail}}", "app.data_root.backend.error.write_migrated_security_update_state_failed": "移行後のセキュリティ更新状態を書き込めませんでした: {{detail}}", + "app.data_root.backend.message.migrated_restart": "データを移行し、新しいディレクトリへ切り替えました。すべてのモジュールの切り替えを完了するにはアプリを再起動してください。", + "app.data_root.backend.message.opened": "データディレクトリを開きました", + "app.data_root.backend.message.unchanged": "データディレクトリは変更されていません", + "app.data_root.backend.message.updated_restart": "データディレクトリを更新しました。AI やその他の実行中モジュールを新しいディレクトリへ完全に切り替えるには、アプリを再起動してください。", + "app.data_root.current_directory": "現在のディレクトリ", + "app.data_root.default_directory": "既定のディレクトリ", + "app.data_root.description": "接続、プロキシ、AI 設定、ドライバーなどのファイル型データのルートディレクトリを一元管理します。", + "app.data_root.driver_directory": "ドライバーディレクトリ", + "app.data_root.message.apply_failed": "データディレクトリの適用に失敗しました", + "app.data_root.message.apply_failed_with_error": "データディレクトリの適用に失敗しました: {{error}}", + "app.data_root.message.load_failed": "データディレクトリ情報の読み込みに失敗しました", + "app.data_root.message.load_failed_with_error": "データディレクトリ情報の読み込みに失敗しました: {{error}}", + "app.data_root.message.open_failed": "データディレクトリを開けませんでした", + "app.data_root.message.open_failed_with_error": "データディレクトリを開けませんでした: {{error}}", + "app.data_root.message.select_failed": "データディレクトリの選択に失敗しました", + "app.data_root.message.select_failed_with_error": "データディレクトリの選択に失敗しました: {{error}}", + "app.data_root.message.select_valid_first": "先に有効なデータディレクトリを選択してください", + "app.data_root.message.updated": "データディレクトリを更新しました", + "app.data_root.placeholder.select_new_directory": "新しいデータディレクトリを選択", + "app.data_root.restart_hint": "切り替え後は、AI やその他の長時間動作するモジュールを新しいディレクトリへ完全に移すため、アプリの再起動を推奨します。機密パスワードはシステムの secret store に残り、ファイルディレクトリとは一緒に移行されません。", + "app.data_root.switch_target": "切り替え先", + "app.data_root.title": "データ保存場所", + "app.linux_cjk_font_banner.action.open_font_settings": "フォント設定", + "app.linux_cjk_font_banner.description": "中国語テキストが欠落グリフの四角として表示される可能性があります。フォントをインストールしてから GoNavi を再起動してください: ", + "app.linux_cjk_font_banner.title": "Linux CJK フォントが不足しています", + "app.proxy.description": "更新確認、ドライバー管理、個別プロキシを指定していない接続のネットワーク出口を一元設定します。", + "app.proxy.enable": "グローバルプロキシを有効化", + "app.proxy.host": "プロキシホスト", + "app.proxy.host_placeholder": "例: 127.0.0.1", "app.proxy.message.config_applied": "グローバルプロキシ設定が適用されました", + "app.proxy.message.invalid_enabled": "グローバルプロキシは有効ですが、ホストまたはポートが無効なため、現在は無効として扱われます。", + "app.proxy.message.save_failed": "グローバルプロキシ設定に失敗しました: {{error}}", + "app.proxy.password_optional": "パスワード (任意)", + "app.proxy.port": "ポート", + "app.proxy.scope_hint": "* 更新確認、ドライバー管理のネットワークリクエスト、および個別プロキシ未設定のデータベース接続に適用されます", + "app.proxy.section_title": "グローバルプロキシ", + "app.proxy.title": "グローバルプロキシ設定", + "app.proxy.type": "プロキシ種別", + "app.proxy.username_optional": "ユーザー名 (任意)", + "app.security_update.error.capability_unavailable": "安全更新機能は利用できません", + "app.security_update.message.completed": "保存済み設定の安全更新が完了しました", + "app.security_update.message.needs_attention": "更新はまだ完了していません。一部の設定に対応が必要です。", + "app.security_update.message.not_finished_retry_later": "安全更新は未完了です。後でもう一度お試しください。", + "app.security_update.message.postpone_failed": "現在、この安全更新を延期できません", + "app.security_update.message.rolled_back": "この更新は完了しませんでした。システムは現在利用可能な設定を保持しました。", + "app.security_update.stage.checking_saved_config": "保存済み設定を確認しています", + "app.security_update.stage.updating_secure_storage": "安全ストレージを更新しています", + "app.security_update.stage.verifying_result": "更新結果を検証しています", + "app.settings.description": "言語、プロキシ、テーマ、AI、アプリ情報などの共通設定をまとめて管理します。", + "app.settings.entry.about.description": "バージョン情報、リポジトリ、更新状況を確認します。", + "app.settings.entry.about.title": "GoNavi について", + "app.settings.entry.ai.description": "モデルプロバイダー、キー、既定の動作を管理します。", + "app.settings.entry.ai.title": "AI 設定", + "app.settings.entry.proxy.description": "更新確認、ドライバー管理、共通ネットワーク出口を設定します。", + "app.settings.entry.proxy.title": "グローバルプロキシ", + "app.settings.entry.theme.description": "ライト/ダークテーマを切り替え、表示の見た目を調整します。", + "app.settings.entry.theme.title": "テーマと外観", + "app.settings.title": "設定センター", + "app.shortcuts.action.diagnoseQuery.description": "現在の SQL に対して EXPLAIN を実行し、実行計画図とインデックス提案を表示します", + "app.shortcuts.action.diagnoseQuery.label": "SQL 診断", + "app.shortcuts.action.focusSidebarSearch.description": "左側の接続ツリー検索ボックスにフォーカスします", + "app.shortcuts.action.focusSidebarSearch.label": "サイドバー検索にフォーカス", + "app.shortcuts.action.newConnection.description": "新しいデータベース、ランタイム、またはその他のデータソース接続を作成します", + "app.shortcuts.action.newConnection.label": "新規データソース", + "app.shortcuts.action.newQueryTab.description": "新しい SQL クエリタブを作成します", + "app.shortcuts.action.newQueryTab.label": "新規クエリタブ", + "app.shortcuts.action.openShortcutManager.description": "ショートカット設定パネルを開きます", + "app.shortcuts.action.openShortcutManager.label": "ショートカット管理を開く", + "app.shortcuts.action.record": "記録", + "app.shortcuts.action.resetWindowZoom.description": "Windows タスクバーから復元後にフォントが異常に大きくなった場合に手動で実行します。最大化状態を一度切り替えて WebView2 にフォントメトリクスを再計算させます", + "app.shortcuts.action.resetWindowZoom.label": "ウィンドウズームをリセット", + "app.shortcuts.action.restore_defaults": "既定に戻す", + "app.shortcuts.action.runQuery.description": "現在のクエリページで SQL を実行します", + "app.shortcuts.action.runQuery.label": "SQL を実行", + "app.shortcuts.action.saveQuery.description": "現在のクエリタブを保存します。名前のないクエリでは保存ダイアログを開きます", + "app.shortcuts.action.saveQuery.label": "クエリを保存", + "app.shortcuts.action.selectCurrentStatement.description": "クエリエディターでカーソル位置の SQL 文を選択します", + "app.shortcuts.action.selectCurrentStatement.label": "現在の文を選択", + "app.shortcuts.action.sendAIChatMessage.description": "AI 入力欄の現在のメッセージを送信します。Shift+Enter は常に改行します", + "app.shortcuts.action.sendAIChatMessage.label": "AI チャット送信", + "app.shortcuts.action.showSlowQueries.description": "現在の接続のスロー SQL 履歴を表示(デフォルト閾値 500ms)", + "app.shortcuts.action.showSlowQueries.label": "スロー SQL 履歴", + "app.shortcuts.action.switchToNextTab.description": "開いているタブの中で右へ切り替えます", + "app.shortcuts.action.switchToNextTab.label": "次のタブへ切り替え", + "app.shortcuts.action.switchToPreviousTab.description": "開いているタブの中で左へ切り替えます", + "app.shortcuts.action.switchToPreviousTab.label": "前のタブへ切り替え", + "app.shortcuts.action.toggleAIPanel.description": "右側の AI データ洞察パネルを開きます", + "app.shortcuts.action.toggleAIPanel.label": "AI データ洞察を開く", + "app.shortcuts.action.toggleLogPanel.description": "SQL 実行ログパネルを開閉します", + "app.shortcuts.action.toggleLogPanel.label": "ログパネルを切り替え", + "app.shortcuts.action.toggleMacFullscreen.description": "macOS ネイティブウィンドウ制御モードでのネイティブフルスクリーン切り替え", + "app.shortcuts.action.toggleMacFullscreen.label": "ネイティブフルスクリーン切り替え", "app.shortcuts.action.toggleQueryResultsPanel.description": "クエリエディター下部の結果エリアを表示または非表示にします", "app.shortcuts.action.toggleQueryResultsPanel.label": "結果エリアを切り替え", + "app.shortcuts.action.toggleTheme.description": "ライトテーマとダークテーマを切り替えます", + "app.shortcuts.action.toggleTheme.label": "テーマを切り替え", + "app.shortcuts.capture_hint": "「記録」をクリックした後にショートカットを押してください。Esc で記録をキャンセルできます。グローバルショートカットには修飾キーを含めることを推奨します。AI チャット送信は Enter 関連の組み合わせのみ対応し、Shift+Enter は改行のままです。", + "app.shortcuts.capture_waiting": "ショートカットを押してください...", + "app.shortcuts.context.datagrid": "データグリッド", + "app.shortcuts.context.global": "ブラウザー", + "app.shortcuts.context.monaco": "エディター", + "app.shortcuts.description": "よく使うグローバルショートカットの確認、記録、有効化を一か所で行います。", + "app.shortcuts.message.ai_send_limit": "AI チャット送信ショートカットは Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter のみ対応します。Shift+Enter は改行のままです", + "app.shortcuts.message.conflict": "「{{action}}」と競合しています。別のショートカットを選択してください。", + "app.shortcuts.message.modifier_required": "ショートカットには Ctrl / Alt / Shift / Meta のいずれかを少なくとも 1 つ含めてください", + "app.shortcuts.message.reserved_conflict_info": "エディターの既定ショートカット「{{labels}}」を上書きしました", + "app.shortcuts.message.reserved_conflict_warning": "{{contexts}}「{{labels}}」と競合しており、動作しない可能性があります", + "app.shortcuts.message.restored_defaults": "既定のショートカットに戻しました", + "app.shortcuts.reserved.browser_close_tab": "ブラウザーでタブを閉じる", + "app.shortcuts.reserved.browser_new_incognito_window": "ブラウザーでシークレットウィンドウを開く", + "app.shortcuts.reserved.browser_new_tab": "ブラウザーで新規タブ", + "app.shortcuts.reserved.browser_new_window": "ブラウザーで新規ウィンドウ", + "app.shortcuts.reserved.browser_print": "ブラウザー印刷", + "app.shortcuts.reserved.browser_save": "ブラウザー保存", + "app.shortcuts.reserved.datagrid_copy": "データグリッドコピー", + "app.shortcuts.reserved.editor_add_selection": "エディターで選択範囲を追加", + "app.shortcuts.reserved.editor_delete_line": "エディターで行を削除", + "app.shortcuts.reserved.editor_find": "エディター検索", + "app.shortcuts.reserved.editor_find_global": "エディター全体検索", + "app.shortcuts.reserved.editor_goto_line": "エディター行へ移動", + "app.shortcuts.reserved.editor_insert_line_after": "エディターで下に行を挿入", + "app.shortcuts.reserved.editor_insert_line_before": "エディターで上に行を挿入", + "app.shortcuts.reserved.editor_quick_open": "エディタークイックオープン", + "app.shortcuts.reserved.editor_rename_symbol": "エディターでシンボル名を変更", + "app.shortcuts.reserved.editor_replace": "エディター置換", + "app.shortcuts.title": "ショートカット管理", + "app.sidebar.ai_assistant": "AI アシスタント", + "app.sidebar.resize_width": "ドラッグして幅を変更", + "app.sidebar.settings": "設定", + "app.sidebar.sql_execution_log": "SQL 実行ログ", + "app.sidebar.tools": "ツール", + "app.startup_readiness.loading_local_config": "ローカル設定を読み込んでいます...", + "app.startup_readiness.loading_security_config": "セキュリティ設定を読み込んでいます...", + "app.theme.action.restore_defaults": "既定に戻す", + "app.theme.appearance_settings_description": "スケール、フォントサイズ、透明度、ぼかし効果をまとめて調整します。", + "app.theme.appearance_settings_title": "外観設定", + "app.theme.appearance.blur_hint": "* アプリ内オーバーレイ層のぼかしのみを制御します", + "app.theme.appearance.blur_title": "ガウスぼかし (Blur)", + "app.theme.appearance.enable_transparency_blur": "透明度とぼかしを有効化", + "app.theme.appearance.enable_transparency_blur_hint": "無効にすると現在のしきい値は保持され、再度有効化したときにそのまま復元されます。", + "app.theme.appearance.font_size_title": "基本フォントサイズ (Font Size)", + "app.theme.appearance.opacity_title": "背景の不透明度 (Opacity)", + "app.theme.appearance.transparency_blur_title": "透明度とぼかし効果", + "app.theme.appearance.ui_scale_hint": "* 小さい画面では 85%-95% を推奨します", + "app.theme.appearance.ui_scale_title": "UI スケール (UI Scale)", + "app.theme.appearance.windows_acrylic_hint": "Windows ではシステムの Acrylic 効果を使用します。ぼかしの強さはシステムにより制御されます。", + "app.theme.data_table.column_width_hint": "標準モードの既定列幅は 200px、コンパクトモードの既定列幅は 140px です。手動で調整した列幅は優先して保持されます。", + "app.theme.data_table.column_width_mode": "データテーブル列幅モード", + "app.theme.data_table.column_width_mode.compact": "コンパクト 140px", + "app.theme.data_table.column_width_mode.standard": "標準 200px", + "app.theme.data_table.density": "テーブル密度", + "app.theme.data_table.density_hint": "行の高さ、列幅、余白を制御します。ゆったりは大画面での確認に適し、コンパクトは情報密度を最大化します。手動でドラッグした列幅は優先して保持されます。", + "app.theme.data_table.density.comfortable": "ゆったり", + "app.theme.data_table.density.compact": "コンパクト", + "app.theme.data_table.density.standard": "標準", + "app.theme.data_table.follow_global": "全体設定に従う", + "app.theme.data_table.font_size": "データテーブルのフォントサイズ", + "app.theme.data_table.sidebar_tree_font_size": "左側スキーマツリーのフォントサイズ", + "app.theme.data_table.title": "データテーブル表示", + "app.theme.data_table.vertical_borders": "データテーブルの縦区切り線を表示", + "app.theme.data_table.vertical_borders_hint": "データテーブルページの DataGrid のみに作用し、他のテーブルコンポーネントには影響しません。", "app.theme.font_family.default_mono_option": "既定のコードフォント", "app.theme.font_family.default_ui_option": "既定の UI フォント", + "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux で中国語 CJK フォントが検出されていないため、画面に欠落グリフの四角が表示される可能性があります。インストールしてください: ", + "app.theme.font_family.linux_cjk_install_suffix": "。その後 GoNavi を再起動してください。", + "app.theme.font_family.load_failed": "システムフォントの読み込みに失敗しました", + "app.theme.font_family.load_failed_fallback": "システムフォントの読み込みに失敗しました。一般的なフォントプリセットにフォールバックしています: {{error}}", + "app.theme.font_family.loaded_ui_hint": "このシステムから {{count}} 個のフォントファミリーを読み込みました。入力して検索できます。クリアすると既定の UI フォントに戻ります。", + "app.theme.font_family.loading_ui_hint": "現在のシステムにインストール済みのフォントをリアルタイムに読み込みます。入力して検索できます。クリアすると既定の UI フォントに戻ります。", + "app.theme.font_family.mono_fallback_hint": "一般的なコードフォントプリセットにフォールバックしています。SQL エディター、AI コードブロック、ログ、DDL、データテーブルなどの等幅コンテンツに適用されます。", + "app.theme.font_family.mono_hint": "インストール済みのシステムフォントを優先表示し、Mono/Code/Console に近い名前のフォントを上位に表示します。SQL エディター、AI コードブロック、ログ、DDL、データテーブルなどの等幅コンテンツに適用されます。", + "app.theme.font_family.mono_title": "等幅フォントファミリー", + "app.theme.font_family.title": "フォントファミリー", + "app.theme.font_family.ui_title": "UI フォントファミリー", + "app.theme.mac_window.restart_hint": "* 右上のカスタムボタンは非表示に同期されています。システムウィンドウのスタイルがすぐに更新されない場合は、アプリを再起動して確認してください", + "app.theme.mac_window.title": "macOS ウィンドウ制御", + "app.theme.mac_window.use_native_controls": "macOS ネイティブウィンドウ制御を使用", + "app.theme.mac_window.use_native_controls_hint": "有効にすると左上に赤/黄/緑のボタンを表示し、macOS ネイティブのフルスクリーン動作を優先します。", + "app.theme.mode_title": "テーマモード", + "app.theme.mode.dark.description": "暗い環境に適し、落ち着いた見た目になります。", + "app.theme.mode.dark.label": "ダークテーマ", + "app.theme.mode.light.description": "明るい環境に適し、軽やかな階層感になります。", + "app.theme.mode.light.label": "ライトテーマ", + "app.theme.nav.appearance.description": "スケール、フォント、透明度", + "app.theme.nav.appearance.title": "外観パラメータ", + "app.theme.nav.theme.description": "ライト/ダーク切り替え", + "app.theme.nav.theme.title": "テーマモード", + "app.theme.navigation_title": "設定ナビゲーション", + "app.theme.startup_window.fullscreen": "起動時にフルスクリーン", + "app.theme.startup_window.fullscreen_windows": "起動時にフルスクリーン (Windows では最大化として扱います)", + "app.theme.startup_window.hint": "* 変更は次回起動時に有効になります", + "app.theme.startup_window.title": "起動ウィンドウ", + "app.theme.startup_window.windows_hint": "* Windows ではこのオプションは「起動時に最大化」として扱われ、次回起動時に有効になります", + "app.theme.tab_display.action.move_down": "下へ", + "app.theme.tab_display.action.move_up": "上へ", + "app.theme.tab_display.badge.current": "現在", + "app.theme.tab_display.description": "接続名、オブジェクト種別、オブジェクト名、データベース、Schema、Host/IP の表示順をカスタマイズします。2 行モードではコンテキストを副行に配置できます。", + "app.theme.tab_display.element.connection.description": "接続の短縮名または環境名。例: DEV", + "app.theme.tab_display.element.connection.label": "接続名", + "app.theme.tab_display.element.database.description": "現在の DB / catalog 名", + "app.theme.tab_display.element.database.label": "データベース", + "app.theme.tab_display.element.host.description": "接続先アドレスの要約", + "app.theme.tab_display.element.host.label": "Host/IP", + "app.theme.tab_display.element.kind.description": "SQL / TABLE / VIEW などの種別ラベル", + "app.theme.tab_display.element.kind.label": "オブジェクト種別", + "app.theme.tab_display.element.object.description": "テーブル名、クエリ名、リソース名などの主要な名前", + "app.theme.tab_display.element.object.label": "オブジェクト名", + "app.theme.tab_display.element.schema.description": "schema / owner プレフィックス", + "app.theme.tab_display.element.schema.label": "Schema", + "app.theme.tab_display.layout.double": "2 行", + "app.theme.tab_display.layout.single": "1 行", + "app.theme.tab_display.preview.default_label": "既定ラベル", + "app.theme.tab_display.preview.focused": "、現在選択中 {{label}}", + "app.theme.tab_display.preview.prefix": "現在のプレビュー: ", + "app.theme.tab_display.preview.secondary": "、副行 {{labels}}", + "app.theme.tab_display.row.primary": "主行", + "app.theme.tab_display.row.secondary": "副行", + "app.theme.tab_display.title": "Tab ラベル表示", + "app.theme.theme_settings_description": "ライト/ダークテーマを切り替え、全体の視覚スタイルを統一します。", + "app.theme.theme_settings_title": "テーマ設定", + "app.theme.ui_version.badge.new": "NEW", + "app.theme.ui_version.beta_warning": "新しい UI はまだ Beta です。一部の画面スタイルは旧版と異なる場合があり、問題があればいつでも戻せます。", + "app.theme.ui_version.description": "すべての機能を維持したまま全体の外観を切り替えます。新しい版はよりコンパクトな情報階層と現代的なビジュアル言語を採用しています。", + "app.theme.ui_version.legacy.badge": "既定", + "app.theme.ui_version.legacy.description": "現在の安定版インターフェースで、すべての機能を完全に利用できます。", + "app.theme.ui_version.legacy.label": "旧版 UI", + "app.theme.ui_version.platform_hint": "Windows、macOS、Linux のいずれでも切り替えできます。変更はすぐに反映され、一部のモーダルは次回表示時に新しいスタイルを使用します。", + "app.theme.ui_version.sidebar_search.command": "新しいコマンド検索", + "app.theme.ui_version.sidebar_search.filter": "従来のサイドバーフィルター", + "app.theme.ui_version.sidebar_search.hint": "新しいコマンド検索は接続、テーブル、アクションへの移動に適しています。パネルで同期スイッチを有効にすると左側ツリーを継続的に絞り込めます。従来のサイドバーフィルターは入力欄を直接表示し、フィルター内容を保持します。", + "app.theme.ui_version.sidebar_search.title": "新しい左サイドバー検索モード", + "app.theme.ui_version.title": "インターフェース版", + "app.theme.ui_version.v2.badge": "Beta", + "app.theme.ui_version.v2.description": "AI 入口とテーブル概要を強化した、再設計されたコンパクトなインターフェースです。", + "app.theme.ui_version.v2.label": "新版 UI", + "app.tools.description": "接続設定、同期、ドライバー、ショートカット関連の操作をまとめて扱います。", + "app.tools.entry.data_compare.description": "主キーに基づいて追加、更新、削除、同一行を分析します。", + "app.tools.entry.data_compare.title": "データ比較", + "app.tools.entry.data_root.description": "ローカルデータ保存場所の確認、切り替え、移行を行います。", + "app.tools.entry.data_root.title": "データディレクトリ", + "app.tools.entry.drivers.description": "データベースドライバーのインストール、更新、削除を行います。", + "app.tools.entry.drivers.title": "ドライバー管理", + "app.tools.entry.export.description": "現在の接続と表示可能な設定フィールドをエクスポートします。", + "app.tools.entry.export.title": "接続設定をエクスポート", + "app.tools.entry.import.description": "ローカルファイルから接続リストを復元します。", + "app.tools.entry.import.title": "接続設定をインポート", + "app.tools.entry.schema_compare.description": "ソース表とターゲット表の構造差分を比較します。プレビューのみで実行はしません。", + "app.tools.entry.schema_compare.title": "表構造比較", + "app.tools.entry.security_update.description": "保存済み設定の安全更新状況を確認します。", + "app.tools.entry.security_update.status_description": "現在の状態: {{status}}", + "app.tools.entry.security_update.title": "安全更新", + "app.tools.entry.shortcuts.description": "グローバルショートカットの割り当てを確認、調整します。", + "app.tools.entry.shortcuts.title": "ショートカット管理", + "app.tools.entry.snippets.description": "SQL コードスニペットとプレフィックス補完を管理します。", + "app.tools.entry.snippets.title": "コードスニペット管理", + "app.tools.entry.sync.description": "複数ソース間の同期ワークフローを開きます。", + "app.tools.entry.sync.title": "データ同期", + "app.tools.group.config.description": "インポート/エクスポート、データディレクトリ、保存済み設定の保守。", + "app.tools.group.config.title": "接続と設定", + "app.tools.group.workflow.description": "構造比較、差分確認、同期開始をまとめて行います。", + "app.tools.group.workflow.title": "データワークフロー", + "app.tools.group.workspace.description": "ドライバー、コードスニペット、グローバルショートカット。", + "app.tools.group.workspace.title": "エディタとドライバー", + "app.tools.title": "ツールセンター", + "app.update.action.hide_to_background": "バックグラウンドに隠す", + "app.update.action.install_update": "更新をインストール", + "app.update.action.open_install_directory": "インストールディレクトリを開く", + "app.update.backend.error.check_failed": "更新確認に失敗しました: {{detail}}", + "app.update.backend.error.check_http_status": "更新確認に失敗しました: HTTP {{status}}", + "app.update.backend.error.download_failed": "更新のダウンロードに失敗しました: {{detail}}", + "app.update.backend.error.install_unsupported": "このプラットフォームでは更新のインストールに対応していません: {{platform}}", + "app.update.backend.error.latest_version_unparseable": "最新バージョン番号を解析できません", + "app.update.backend.error.online_update_unsupported": "このプラットフォームではオンライン更新に対応していません: {{platform}}", + "app.update.backend.error.package_download_http_failed": "更新パッケージのダウンロードに失敗しました: HTTP {{status}}", + "app.update.backend.error.package_file_busy": "ファイルが使用中のため、更新のダウンロードに失敗しました: {{detail}}", + "app.update.backend.error.release_version_unparseable": "リリースバージョン番号を解析できません", + "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS に現在のプラットフォーム用更新パッケージが含まれていません", + "app.update.backend.error.sha256sums_download_failed": "SHA256SUMS のダウンロードに失敗しました: HTTP {{status}}", + "app.update.backend.error.sha256sums_missing": "Release に SHA256SUMS が提供されていません", + "app.update.backend.error.update_package_not_found": "更新パッケージが見つかりません: {{name}}", + "app.update.backend.message.app_directory_unavailable": "アプリディレクトリにアクセスできません: {{path}}", + "app.update.backend.message.app_directory_unresolved_download": "現在のアプリディレクトリを特定できないため、更新をダウンロードできません", + "app.update.backend.message.check_first": "先に更新を確認してください", + "app.update.backend.message.checksum_failed": "更新パッケージのチェックサム検証に失敗しました。もう一度お試しください。", + "app.update.backend.message.checksum_missing": "更新パッケージのチェックサムがありません (SHA256SUMS)", + "app.update.backend.message.create_workspace_failed": "アプリディレクトリ内に更新作業ディレクトリを作成できません: {{path}}", + "app.update.backend.message.download_in_progress": "更新パッケージをダウンロード中です。後でもう一度お試しください。", + "app.update.backend.message.install_launch_failed": "更新インストーラーを開始できませんでした: {{detail}}", + "app.update.backend.message.install_launch_failed_with_log": "更新インストーラーを開始できませんでした: {{detail}} (更新ログ: {{path}})", + "app.update.backend.message.install_started": "更新のインストールを開始しました", + "app.update.backend.message.install_started_with_log": "更新のインストールを開始しました。ログパス: {{path}}", + "app.update.backend.message.latest": "すでに最新バージョンです", + "app.update.backend.message.no_downloaded_package": "ダウンロード済みの更新パッケージが見つかりません", + "app.update.backend.message.no_update_package": "利用可能な更新パッケージがありません", + "app.update.backend.message.open_directory_failed": "更新ディレクトリを開けませんでした: {{detail}}", + "app.update.backend.message.open_directory_unsupported": "このプラットフォームではディレクトリを開けません: {{platform}}", + "app.update.backend.message.opened_install_directory": "インストールディレクトリを開きました: {{path}}", + "app.update.backend.message.package_already_downloaded": "更新パッケージはすでにダウンロード済みです", + "app.update.backend.message.package_directory_unavailable": "更新ディレクトリが存在しないか、アクセスできません", + "app.update.backend.message.package_directory_unresolved": "更新ディレクトリを解決できません", + "app.update.backend.message.package_downloaded": "更新パッケージのダウンロードが完了しました", + "app.update.backend.message.package_path_empty": "更新パッケージのパスが空です", + "app.update.backend.message.update_found": "新しいバージョンが見つかりました: {{version}}", + "app.update.download_title": "更新をダウンロード", + "app.update.download_title_with_version": "更新をダウンロード {{version}}", + "app.update.message.check_failed": "更新確認に失敗しました: {{error}}", + "app.update.message.download_completed": "更新のダウンロードが完了しました", + "app.update.message.download_completed_with_path": "更新のダウンロードが完了しました。パッケージパス: {{path}}", + "app.update.message.download_failed": "更新のダウンロードに失敗しました: {{error}}", + "app.update.message.install_failed": "更新のインストールに失敗しました: {{error}}", + "app.update.message.open_install_directory_failed": "インストールディレクトリを開けませんでした: {{error}}", + "app.update.message.opened_install_directory": "インストールディレクトリを開きました。手動で置き換えを完了してください。", + "app.update.message.package_ready": "更新パッケージの準備ができました ({{version}})", + "app.update.message.package_ready_with_path": "更新パッケージの準備ができました ({{version}})、パス: {{path}}", + "app.update.message.update_found": "新しいバージョンが見つかりました: {{version}}", + "app.update.status.available_downloaded": "新しいバージョン {{version}} が見つかりました (ダウンロード済み。「ダウンロード状況」をクリックしてインストールしてください)", + "app.update.status.available_not_downloaded": "新しいバージョン {{version}} が見つかりました (未ダウンロード)", + "app.update.status.check_failed": "更新確認に失敗しました: {{error}}", + "app.update.status.checking": "更新を確認しています...", + "app.update.status.latest": "現在のバージョンは最新です ({{version}})", + "app.update.status.not_checked": "未確認", + "app.window_zoom.message.fullscreen_exit_first": "全画面表示ではズームをリセットできません。先に全画面表示を終了してください。", + "app.window_zoom.message.reset_failed": "ウィンドウのズームのリセットに失敗しました", + "app.window_zoom.message.reset_success": "ウィンドウのズームをリセットしました", + "app.window_zoom.message.reset_success_fallback": "ウィンドウのズームをリセットしました(フォールバック)", + "app.window_zoom.message.windows_only": "この機能は Windows でのみ利用できます", + "common.back_to_previous": "前に戻る", + "common.cancel": "キャンセル", + "common.close": "閉じる", + "common.confirm": "確認", + "common.continue": "続行", + "common.delete": "削除", + "common.edit": "編集", + "common.error": "エラー", + "common.loading": "読み込み中", + "common.named_item": "{{name}}", + "common.ok": "OK", + "common.refresh": "更新", + "common.save": "保存", + "common.search": "検索", + "common.success": "成功", + "common.unknown": "不明", + "common.warning": "警告", + "connection_modal.action.browse": "参照...", + "connection_modal.action.cancel": "キャンセル", + "connection_modal.action.close": "閉じる", + "connection_modal.action.copy_uri": "URI をコピー", + "connection_modal.action.disable": "無効化", + "connection_modal.action.discover_members": "メンバーを自動検出", + "connection_modal.action.enable_and_prefer": "有効化して優先", + "connection_modal.action.generate_uri": "URI を生成", + "connection_modal.action.open_driver_manager": "ドライバー管理を開く", + "connection_modal.action.parse_uri": "URI を解析", + "connection_modal.action.previous_step": "前へ", + "connection_modal.action.reset_default": "既定値に戻す", + "connection_modal.action.save": "保存", + "connection_modal.action.test": "接続をテスト", + "connection_modal.action.view_reason": "ビュー理由", + "connection_modal.appearance.color": "色", + "connection_modal.appearance.current_icon": "現在のアイコン: {{icon}}", + "connection_modal.appearance.custom_color": "カスタムカラー", + "connection_modal.appearance.icon": "アイコン", + "connection_modal.appearance.preview": "プレビュー", + "connection_modal.badge.current": "現在", + "connection_modal.badge.current_editing": "編集中", + "connection_modal.badge.preferred": "優先", + "connection_modal.config_section.connectionMode.description": "接続モードを設定します。", + "connection_modal.config_section.connectionMode.title": "接続モード", + "connection_modal.config_section.credentials.description": "認証情報を設定します。", + "connection_modal.config_section.credentials.title": "認証情報", + "connection_modal.config_section.customDriver.description": "カスタムドライバーを設定します。", + "connection_modal.config_section.customDriver.title": "カスタムドライバー", + "connection_modal.config_section.customDsn.description": "カスタム DSNを設定します。", + "connection_modal.config_section.customDsn.title": "カスタム DSN", + "connection_modal.config_section.databaseScope.description": "データベース範囲を設定します。", + "connection_modal.config_section.databaseScope.title": "データベース範囲", + "connection_modal.config_section.fileTarget.description": "ファイルデータベースを設定します。", + "connection_modal.config_section.fileTarget.title": "ファイルデータベース", + "connection_modal.config_section.identity.description": "識別情報を設定します。", + "connection_modal.config_section.identity.title": "識別情報", + "connection_modal.config_section.jvmRuntime.description": "JVM ランタイムを設定します。", + "connection_modal.config_section.jvmRuntime.title": "JVM ランタイム", + "connection_modal.config_section.mongoDiscovery.description": "MongoDB 検出を設定します。", + "connection_modal.config_section.mongoDiscovery.title": "MongoDB 検出", + "connection_modal.config_section.mongoPolicy.description": "MongoDB ポリシーを設定します。", + "connection_modal.config_section.mongoPolicy.title": "MongoDB ポリシー", + "connection_modal.config_section.replica.description": "レプリカノードを設定します。", + "connection_modal.config_section.replica.title": "レプリカノード", + "connection_modal.config_section.service.description": "サービスとデータベースを設定します。", + "connection_modal.config_section.service.title": "サービスとデータベース", + "connection_modal.config_section.target.description": "接続先アドレスを設定します。", + "connection_modal.config_section.target.title": "接続先アドレス", + "connection_modal.config_section.uri.description": "接続 URI を入力、生成、または解析します。", + "connection_modal.config_section.uri.title": "接続 URI", + "connection_modal.db_icon_label.custom": "カスタム", + "connection_modal.db_type_hint.custom": "カスタムドライバーと DSN でデータベースに接続します。", + "connection_modal.db_type_hint.file": "ローカルの SQLite または DuckDB データベースファイルを選択します。", + "connection_modal.db_type_hint.mongodb": "MongoDB 単体、Replica Set、または SRV アドレスに接続します。", + "connection_modal.db_type_hint.redis": "Redis 単体または Redis Cluster に接続します。", + "connection_modal.db_type_hint.standard": "ホスト、ポート、認証情報、任意のデータベースを入力します。", + "connection_modal.db_type.custom": "カスタム", + "connection_modal.driver.current": "現在", + "connection_modal.error.unknown": "不明なエラー", + "connection_modal.error.unknown_exception": "不明なエラー", + "connection_modal.field.additional_hosts": "追加ホスト", + "connection_modal.field.additional_srv_hosts_optional": "追加 SRV ホスト(任意)", + "connection_modal.field.auth_source": "認証データベース (authSource)", + "connection_modal.field.clickHouseProtocol.auto": "自動", + "connection_modal.field.cluster_additional_hosts": "クラスタ追加ノード", + "connection_modal.field.connection_name": "接続名", + "connection_modal.field.connection_timeout_seconds": "接続タイムアウト(秒)", + "connection_modal.field.connection_timeout_seconds_ascii": "接続タイムアウト(秒)", + "connection_modal.field.default_database_optional": "既定の接続データベース(任意)", + "connection_modal.field.defaultDatabase.placeholder": "例: appdb", + "connection_modal.field.display_databases_optional": "表示するデータベース(任意)", + "connection_modal.field.driver_name": "ドライバー名前", + "connection_modal.field.driver.placeholder": "例: mysql, postgres", + "connection_modal.field.dsn": "DSN", + "connection_modal.field.dsn.placeholder": "例: user:pass@tcp(localhost:3306)/dbname?charset=utf8", + "connection_modal.field.file_path_absolute": "ファイルパス(絶対パス)", + "connection_modal.field.host": "ホスト", + "connection_modal.field.host_address": "ホストアドレス", + "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "Oracle テナント接続で「Error 1235」または OBClient ハンドシェイク失敗が発生する場合は、「接続パラメータ」欄で {{attributes}} を使って GoNavi が既定で注入する OBClient capability を上書きできます。", + "connection_modal.field.oceanBaseProtocol.help.primary": "MySQL テナントには MySQL、Oracle テナントには Oracle を選択します。GoNavi はポートに応じて自動選択します。OB MySQL wire ポートでは OBClient capability injection(Navicat と同じ経路)を使い、OBProxy Oracle listener ポートでは標準 TNS を使います。", + "connection_modal.field.oceanBaseProtocol.label": "OceanBase プロトコル", + "connection_modal.field.password": "パスワード", + "connection_modal.field.password_optional": "パスワード(任意)", + "connection_modal.field.port": "ポート", + "connection_modal.field.port_plain": "ポート", + "connection_modal.field.primary_port": "プライマリポート", + "connection_modal.field.private_key_path_optional": "秘密鍵パス(任意)", + "connection_modal.field.proxy_host": "プロキシホスト", + "connection_modal.field.proxy_password_optional": "プロキシパスワード(任意)", + "connection_modal.field.proxy_type": "プロキシ種別", + "connection_modal.field.proxy_username_optional": "プロキシユーザー名(任意)", + "connection_modal.field.replica_hosts": "レプリカホスト一覧", + "connection_modal.field.replica_password_optional": "レプリカパスワード(任意)", + "connection_modal.field.replica_set_optional": "Replica Set(任意)", + "connection_modal.field.replica_set_password_optional": "Replica Set パスワード(任意)", + "connection_modal.field.replica_set_username_optional": "Replica Set ユーザー名(任意)", + "connection_modal.field.replica_username_optional": "レプリカユーザー名(任意)", + "connection_modal.field.save_password": "パスワードを保存", + "connection_modal.field.service_name": "サービス名", + "connection_modal.field.serviceName.placeholder": "例: ORCLPDB1", + "connection_modal.field.ssh_host": "SSH ホスト", + "connection_modal.field.ssh_password": "SSH パスワード", + "connection_modal.field.ssh_user": "SSH ユーザー", + "connection_modal.field.ssl_cert_path": "SSL 証明書パス", + "connection_modal.field.ssl_key_path": "SSL 秘密鍵パス", + "connection_modal.field.tunnel_host": "HTTP Tunnel ホスト", + "connection_modal.field.tunnel_password_optional": "HTTP Tunnel パスワード(任意)", + "connection_modal.field.tunnel_username_optional": "HTTP Tunnel ユーザー名(任意)", + "connection_modal.field.uri": "URI", + "connection_modal.field.username": "ユーザー名", + "connection_modal.field.username.optional_placeholder": "認証を有効にしていない場合は空のままにできます", + "connection_modal.group.chinese_databases": "中国系データベース", + "connection_modal.group.other": "その他", + "connection_modal.group.relational": "リレーショナルデータベース", + "connection_modal.group.time_series": "時系列データベース", + "connection_modal.help.additional_hosts": "任意の MongoDB メンバーをカンマ、セミコロン、空白で区切って入力します。", + "connection_modal.help.additional_srv_hosts": "MongoDB 検出に使う任意の追加 SRV ホストです。", + "connection_modal.help.connection_timeout": "接続テストとメタデータ読み込みに適用されます。範囲は 1-300 秒です。", + "connection_modal.help.custom_driver": "対応済み: mysql, postgres, sqlite, oracle, dm, kingbase。エイリアス: postgresql/pgx、dm8、kingbase8/kingbasees/kingbasev8。現在 JDBC Jar によるドライバー拡張には対応していません。", + "connection_modal.help.default_database": "空のままにするとサーバーの既定データベースを使用します。", + "connection_modal.help.oracle_service_name": "Oracle サービス名。例: ORCLPDB1。", + "connection_modal.help.private_key_path": "SSH 認証に秘密鍵を使用します。鍵が暗号化されていない場合はパスワードを空にできます。", + "connection_modal.help.redis_cluster_hosts": "追加 Redis Cluster ノードをカンマ、セミコロン、空白で区切って入力します。", + "connection_modal.help.replica_hosts": "レプリカホストは host:port 形式で、カンマ、セミコロン、空白で区切ります。", + "connection_modal.help.select_after_test": "先に接続テストを実行して選択可能なデータベースを読み込みます。", + "connection_modal.help.uri": "接続 URI を貼り付けるか生成します。", + "connection_modal.jvm.access_mode_description": "この JVM 接続で使用できる接続モードと優先モードを選択します。", + "connection_modal.jvm.access_mode_title": "接続モード", + "connection_modal.jvm.agent_api_key_optional": "Agent API キー(任意)", + "connection_modal.jvm.agent_description": "直接ネットワーク接続が制限される場合に GoNavi Agent 経由で接続します。", + "connection_modal.jvm.agent_help": "GoNavi Agent サービスのベース URL。", + "connection_modal.jvm.agent_url": "Agent URL", + "connection_modal.jvm.diagnostic_api_key_optional": "診断 API キー(任意)", + "connection_modal.jvm.diagnostic_description": "JVM トラブルシューティング用の任意診断コマンドを有効にします。", + "connection_modal.jvm.diagnostic_disabled_hint": "診断拡張は無効です。実行時調査が必要な場合のみ有効にしてください。", + "connection_modal.jvm.diagnostic_timeout_seconds": "診断タイムアウト(秒)", + "connection_modal.jvm.diagnostic_title": "診断拡張", + "connection_modal.jvm.diagnostic_transport": "診断トランスポート", + "connection_modal.jvm.diagnostic.agent_bridge_description": "GoNavi Agent Bridge の診断 Endpoint を使用します。", + "connection_modal.jvm.diagnostic.arthas_tunnel_description": "Arthas Tunnel で対象 JVM に到達します。", + "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Arthas Tunnel サーバーのベース URL。", + "connection_modal.jvm.diagnostic.arthas_tunnel_url": "Arthas Tunnel URL", + "connection_modal.jvm.diagnostic.bridge_help": "GoNavi 診断ブリッジのベース URL。", + "connection_modal.jvm.diagnostic.bridge_url": "診断ブリッジ URL", + "connection_modal.jvm.diagnostic.mutating_commands": "変更系コマンド", + "connection_modal.jvm.diagnostic.mutating_commands_description": "実行時状態を変更する可能性のあるコマンドを許可します。管理された環境でのみ使用してください。", + "connection_modal.jvm.diagnostic.observe_commands": "観察系コマンド", + "connection_modal.jvm.diagnostic.observe_commands_description": "dashboard、thread、JVM 情報などの読み取り専用コマンドを許可します。", + "connection_modal.jvm.diagnostic.target_agent_id": "対象 Agent ID", + "connection_modal.jvm.diagnostic.target_agent_id_help": "Arthas Tunnel に登録された Agent ID。", + "connection_modal.jvm.diagnostic.target_id": "対象 ID", + "connection_modal.jvm.diagnostic.target_id_help": "診断ブリッジが解釈する対象 ID です。ブリッジが既定対象を選ぶ場合は空にします。", + "connection_modal.jvm.diagnostic.trace_commands": "トレース系コマンド", + "connection_modal.jvm.diagnostic.trace_commands_description": "実行時負荷を増やす trace や watch などのコマンドを許可します。", + "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", + "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", + "connection_modal.jvm.endpoint_api_key_optional": "Endpoint API キー(任意)", + "connection_modal.jvm.endpoint_description": "直接 JMX ではなくサービスが公開する Endpoint に接続します。", + "connection_modal.jvm.endpoint_help": "JVM 管理 Endpoint のベース URL。", + "connection_modal.jvm.endpoint_url": "Endpoint URL", + "connection_modal.jvm.environment": "環境", + "connection_modal.jvm.environment.dev": "開発", + "connection_modal.jvm.environment.dev_description": "リスクの低いテスト環境です。", + "connection_modal.jvm.environment.prod": "本番", + "connection_modal.jvm.environment.prod_description": "本番環境です。読み取り専用を優先することを推奨します。", + "connection_modal.jvm.environment.uat": "UAT", + "connection_modal.jvm.environment.uat_description": "リリース前の検証環境です。", + "connection_modal.jvm.jmx_description": "JMX でホスト、ポート、任意の認証情報を使って接続します。", + "connection_modal.jvm.jmx_host_override_optional": "JMX ホスト上書き(任意)", + "connection_modal.jvm.jmx_password_optional": "JMX パスワード(任意)", + "connection_modal.jvm.jmx_port": "JMX ポート", + "connection_modal.jvm.jmx_username_optional": "JMX ユーザー名(任意)", + "connection_modal.jvm.mode.agent_description": "ファイアウォールや NAT 配下の環境では GoNavi Agent 経由でアクセスします。", + "connection_modal.jvm.mode.endpoint_description": "対象サービスが公開する HTTP Endpoint を使用します。", + "connection_modal.jvm.mode.jmx_description": "標準の JMX リモートアクセスを使用します。", + "connection_modal.jvm.preferred_mode_hint": "現在の優先モード: {{mode}}", + "connection_modal.jvm.read_only_first": "読み取り専用操作を優先", + "connection_modal.jvm.security_policy": "セキュリティポリシー", + "connection_modal.jvm.target_description": "JVM 管理 Endpoint のホスト、ポート、接続方法を設定します。", + "connection_modal.jvm.target_title": "JVM ターゲット", + "connection_modal.layout.custom": "カスタムドライバー接続", + "connection_modal.layout.file": "ファイルデータベース接続", + "connection_modal.layout.generic_sql": "汎用 SQL 接続", + "connection_modal.layout.jvm": "JVM ランタイム接続", + "connection_modal.layout.mongodb": "MongoDB 接続", + "connection_modal.layout.mysql_compatible": "MySQL 互換接続", + "connection_modal.layout.oracle": "Oracle 接続", + "connection_modal.layout.postgres_compatible": "PostgreSQL 互換接続", + "connection_modal.layout.redis": "Redis 接続", "connection_modal.layoutKind.custom": "カスタムドライバー", "connection_modal.layoutKind.file": "ファイル型データベース", "connection_modal.layoutKind.genericSql": "標準 SQL", @@ -6846,18 +3062,1308 @@ "connection_modal.layoutKind.search": "検索エンジン", "connection_modal.layoutKind.timeseries": "時系列データベース", "connection_modal.layoutKind.vector": "ベクトルデータベース", + "connection_modal.message.connection_failed": "接続に失敗しました", + "connection_modal.message.connection_params_incomplete": "接続パラメーターが不完全です", + "connection_modal.message.connection_rejected": "接続が拒否されました", + "connection_modal.message.connection_success": "接続に成功しました", + "connection_modal.message.copy_failed": "コピーに失敗しました", + "connection_modal.message.current_driver_not_enabled": "現在のドライバーがインストールされていないか、有効化されていません", + "connection_modal.message.dameng_ssl_cert_required": "必須項目を入力してください", + "connection_modal.message.database_list_failed": "データベース一覧の読み込みに失敗しました: {{error}}", + "connection_modal.message.database_list_timeout": "操作が {{seconds}} 秒でタイムアウトしました", + "connection_modal.message.driver_not_enabled": "ドライバーがインストールされていないか、有効化されていません", + "connection_modal.message.driver_not_enabled_with_name": "{{name}} ドライバーはインストールされていないか有効化されていません。先にドライバー管理で設定してください。", + "connection_modal.message.driver_not_enabled_with_name_short": "{{name}} ドライバーはインストールされていないか有効化されていません。先にドライバー管理を開いてください。", + "connection_modal.message.driver_unavailable_title": "{{name}} ドライバーは利用できません", + "connection_modal.message.http_tunnel_host_required": "必須項目を入力してください", + "connection_modal.message.http_tunnel_port_invalid": "HTTP Tunnel ポートが無効です", + "connection_modal.message.member_discovery_failed": "MongoDB メンバーの検出に失敗しました", + "connection_modal.message.member_discovery_success": "{{count}} 件のメンバーを検出しました", + "connection_modal.message.no_visible_databases": "表示可能なデータベースはありません", + "connection_modal.message.no_visible_schema": "表示可能なスキーマが返されませんでした", + "connection_modal.message.required_fields_before_test": "接続をテストする前に必須項目を入力してください", + "connection_modal.message.save_backend_unavailable": "バックエンド API の準備ができていないため保存できません", + "connection_modal.message.save_created_disconnected": "設定を保存しました(未接続)", + "connection_modal.message.save_failed": "接続の保存に失敗しました", + "connection_modal.message.save_security_refresh_failed": "設定は保存されましたが、セキュリティ情報を更新できませんでした", + "connection_modal.message.save_updated_disconnected": "設定を保存しました(未接続)", + "connection_modal.message.select_database_file_failed": "データベースファイルの選択に失敗しました: {{error}}", + "connection_modal.message.select_ssh_key_failed": "SSH 秘密鍵の選択に失敗しました: {{error}}", + "connection_modal.message.srv_with_ssh_dns_warning": "SRV と SSH Tunnel を同時に使う場合、ローカル DNS 解決に依存することがあります。解決できない場合は標準ホストを使用してください。", + "connection_modal.message.test_failed_detail": "テストに失敗しました:{{detail}}", + "connection_modal.message.test_requires_new_mongo_replica_password": "テスト前に新しい MongoDB Replica Set パスワードを入力してください。", + "connection_modal.message.test_requires_new_mongodb_password": "テスト前に新しい MongoDB パスワードを入力してください。", + "connection_modal.message.test_requires_new_password": "テスト前に新しい接続パスワードを入力してください。", + "connection_modal.message.test_requires_new_proxy_password": "テスト前に新しいプロキシパスワードを入力してください。", + "connection_modal.message.test_requires_new_replica_password": "テスト前に新しいレプリカパスワードを入力してください。", + "connection_modal.message.test_requires_new_ssh_password": "テスト前に新しい SSH パスワードを入力してください。", + "connection_modal.message.test_requires_new_tunnel_password": "テスト前に新しい HTTP Tunnel パスワードを入力してください。", + "connection_modal.message.test_timeout": "操作が {{seconds}} 秒でタイムアウトしました", + "connection_modal.message.unsupported_jvm_diagnostic_transport": "選択した JVM 診断トランスポートはサポートされていません", + "connection_modal.message.unsupported_jvm_modes": "選択した JVM 接続モードはサポートされていません", + "connection_modal.message.unsupported_jvm_modes_current": "この接続にはサポートされていない JVM 接続モードが含まれています", + "connection_modal.message.unsupported_jvm_modes_detected": "サポートされていない JVM 接続モードが検出されました", + "connection_modal.message.uri_copied": "URI をコピーしました", + "connection_modal.message.uri_empty_copy": "URI が空のためコピーできません", + "connection_modal.message.uri_generate_failed": "URI の生成に失敗しました", + "connection_modal.message.uri_generated": "URI を生成しました", + "connection_modal.message.uri_parse_failed": "URI の解析に失敗しました", + "connection_modal.message.uri_parsed": "URI をフォームに反映しました", + "connection_modal.message.uri_required": "必須項目を入力してください", + "connection_modal.message.uri_type_mismatch": "URI の種類が選択中のデータソースと一致しません", + "connection_modal.messageQueue.kafka.defaultTopic.help": "空の場合は SQL 内で Topic を明示する必要があります。設定すると SHOW、CONSUME、SELECT で直接プレビューできます。", + "connection_modal.messageQueue.kafka.defaultTopic.label": "既定 Topic(任意)", + "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "例:orders.events", + "connection_modal.messageQueue.kafka.extraBrokers.help": "複数の broker アドレスを host:port 形式で入力し、Enter で確定できます。", + "connection_modal.messageQueue.kafka.extraBrokers.label": "追加 Broker アドレス", + "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "例:10.10.0.12:9092、10.10.0.13:9092", + "connection_modal.messageQueue.kafka.topology.cluster.description": "複数の bootstrap broker を設定し、検出とフェイルオーバーの成功率を高めます。", + "connection_modal.messageQueue.kafka.topology.single.description": "ローカルまたは単純な環境向けに、bootstrap broker を 1 つだけ設定します。", + "connection_modal.messageQueue.kafka.topology.single.label": "単一 Broker", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "空の場合は SQL 内で Topic を明示する必要があります。設定すると SHOW、CONSUME、SELECT で直接プレビューできます。/、+、# を使用できます。", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "既定 Topic / Filter(任意)", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "例:devices/+/telemetry", + "connection_modal.messageQueue.mqtt.extraBrokers.help": "複数の broker アドレスを host:port 形式で入力し、Enter で確定できます。", + "connection_modal.messageQueue.mqtt.extraBrokers.label": "追加 Broker アドレス", + "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "例:10.10.0.12:1883、10.10.0.13:1883", + "connection_modal.messageQueue.mqtt.topology.cluster.description": "複数の broker を設定し、接続検出とフェイルオーバーの成功率を高めます。", + "connection_modal.messageQueue.mqtt.topology.single.description": "ローカルまたは単純な環境向けに、broker を 1 つだけ設定します。", + "connection_modal.messageQueue.mqtt.topology.single.label": "単一 Broker", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "空の場合は既定で / を使用します。設定すると、クエリエディターは現在の vhost を Queue 参照とテスト送信のコンテキストとして使用します。", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "既定 Virtual Host(任意)", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "例:/ または orders-vhost", + "connection_modal.messageQueue.rocketmq.defaultTopic.help": "空の場合は SQL 内で Topic を明示する必要があります。接続パラメーターには groupId、namespace、tag、pullBatchSize、startOffset を追加できます。", + "connection_modal.messageQueue.rocketmq.defaultTopic.label": "既定 Topic(任意)", + "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "例:orders.events", + "connection_modal.messageQueue.rocketmq.extraNameServers.help": "複数の NameServer アドレスを host:port 形式で入力し、Enter で確定できます。", + "connection_modal.messageQueue.rocketmq.extraNameServers.label": "追加 NameServer アドレス", + "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "例:10.10.0.12:9876、10.10.0.13:9876", + "connection_modal.messageQueue.rocketmq.topology.cluster.description": "複数の NameServer を設定し、ルート検出とフェイルオーバーの成功率を高めます。", + "connection_modal.messageQueue.rocketmq.topology.single.description": "ローカルまたは単純な環境向けに、NameServer を 1 つだけ設定します。", + "connection_modal.messageQueue.rocketmq.topology.single.label": "単一 NameServer", + "connection_modal.messageQueue.topology.cluster.label": "クラスターモード", + "connection_modal.mongodb.auth_mechanism": "認証メカニズム", + "connection_modal.mongodb.auth.auto": "自動", + "connection_modal.mongodb.auth.auto_description": "ドライバーに認証メカニズムを選択させます。", + "connection_modal.mongodb.auth.aws_iam_description": "AWS IAM 認証を使用します。AWS IAM 認証情報は実行環境に配置してください。", + "connection_modal.mongodb.auth.none": "認証なし", + "connection_modal.mongodb.auth.none_description": "MongoDB 認証なしで接続します。", + "connection_modal.mongodb.auth.scram_sha1_description": "SCRAM-SHA-1 認証を使用します。", + "connection_modal.mongodb.auth.scram_sha256_description": "SCRAM-SHA-256 認証を使用します。", + "connection_modal.mongodb.discovery.current": "現在", + "connection_modal.mongodb.discovery.srv_ssh_warning": "SRV と SSH Tunnel を同時に有効にすると、ローカル DNS 解決に依存する場合があります。", + "connection_modal.mongodb.discovery.srv.description": "mongodb+srv を使用し、DNS で対象ノードを検出します。", + "connection_modal.mongodb.discovery.srv.label": "SRV アドレス", + "connection_modal.mongodb.discovery.standard.description": "host:port で直接接続するか、レプリカセットのノード一覧を使用します。", + "connection_modal.mongodb.discovery.standard.label": "標準アドレス", + "connection_modal.mongodb.members.health": "ヘルス", + "connection_modal.mongodb.members.health.error": "異常", + "connection_modal.mongodb.members.health.ok": "正常", + "connection_modal.mongodb.members.role": "ロール", + "connection_modal.mongodb.policy.auth_source.label": "認証 DB (authSource)", + "connection_modal.mongodb.policy.auth_source.placeholder": "既定では database または admin を使用", + "connection_modal.mongodb.read_preference": "readPreference", + "connection_modal.mongodb.read_preference.nearest": "最も近いメンバーへ読み取りを送ります。", + "connection_modal.mongodb.read_preference.primary": "primary からのみ読み取ります。", + "connection_modal.mongodb.read_preference.primary_preferred": "primary を優先し、必要に応じて secondary にフォールバックします。", + "connection_modal.mongodb.read_preference.secondary": "secondary からのみ読み取ります。", + "connection_modal.mongodb.read_preference.secondary_preferred": "secondary を優先し、必要に応じて primary にフォールバックします。", + "connection_modal.mongodb.replica.hosts.srv.help": "複数の候補ホスト名を host 形式で入力できます。空の場合は上のホストのみを使用します。", + "connection_modal.mongodb.replica.hosts.srv.label": "追加 SRV ホスト(任意)", + "connection_modal.mongodb.replica.hosts.srv.placeholder": "例:cluster-a.example.com、cluster-b.example.com", + "connection_modal.mongodb.replica.hosts.standard.help": "複数のノードアドレスを host:port 形式で入力し、Enter で確定できます。", + "connection_modal.mongodb.replica.hosts.standard.label": "追加ノードアドレス", + "connection_modal.mongodb.replica.hosts.standard.placeholder": "例:10.10.0.12:27017、10.10.0.13:27017", + "connection_modal.mongodb.replica.password.clear": "保存済みレプリカセットパスワードをクリア", + "connection_modal.mongodb.replica.password.description": "現在レプリカセットパスワードが保存されています。空のままなら継続使用し、新しい値を入力すると置き換えます。", + "connection_modal.mongodb.replica.password.label": "レプリカセットパスワード(任意)", + "connection_modal.mongodb.replica.password.placeholder.empty": "空の場合はメインパスワードを再利用します", + "connection_modal.mongodb.replica.password.placeholder.retained": "保存済みレプリカセットパスワード", + "connection_modal.mongodb.replica.set.label": "レプリカセット名(任意)", + "connection_modal.mongodb.replica.set.placeholder": "例:rs0", + "connection_modal.mongodb.replica.user.label": "レプリカセットユーザー名(任意)", + "connection_modal.mongodb.replica.user.placeholder": "空の場合はメインユーザー名を再利用します", + "connection_modal.mongodb.srv_address": "SRV アドレス", + "connection_modal.mongodb.srv_address_description": "MongoDB SRV レコードでホストを検出します。", + "connection_modal.mongodb.standard_address": "標準アドレス", + "connection_modal.mongodb.standard_address_description": "ホスト、ポート、任意のメンバー一覧を使用します。", + "connection_modal.mongodb.topology.replica.label": "レプリカセット / 複数ノード", + "connection_modal.mongodb.topology.single.label": "スタンドアロンモード", + "connection_modal.network.http_tunnel": "HTTP Tunnel", + "connection_modal.network.http_tunnel_description": "HTTP Tunnel 経由でデータベース通信を転送します。", + "connection_modal.network.http_tunnel_disabled_hint": "HTTP Tunnel を有効にすると Tunnel ホスト、ポート、認証情報を設定できます。", + "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel は SSH Tunnel またはプロキシと同時に使用できません。", + "connection_modal.network.http_tunnel_panel_description": "この接続の HTTP Tunnel ゲートウェイを設定します。", + "connection_modal.network.proxy": "プロキシ", + "connection_modal.network.proxy_disabled_hint": "プロキシを有効にすると、この接続は SOCKS5 または HTTP CONNECT 経由で転送されます。", + "connection_modal.network.proxy_panel_description": "この接続専用のプロキシ設定を行います。", + "connection_modal.network.proxy_type.http_description": "HTTP CONNECT プロキシを使用します。", + "connection_modal.network.proxy_type.socks5_description": "SOCKS5 プロキシを使用します。", + "connection_modal.network.ssh_disabled_hint": "SSH Tunnel を有効にすると踏み台ホスト経由で接続できます。", + "connection_modal.network.ssh_panel_description": "SSH Tunnel のホスト、認証情報、任意の秘密鍵を設定します。", + "connection_modal.network.ssh_tunnel": "SSH Tunnel", + "connection_modal.network.ssh_tunnel_description": "データベースへ到達する前に SSH Tunnel 経由で接続します。", + "connection_modal.network.ssl_description": "SSL/TLS でデータベース接続を暗号化します。", + "connection_modal.network.ssl_disabled_hint": "SSL/TLS を有効にすると証明書ポリシーを設定できます。", + "connection_modal.network.ssl_mode": "SSL モード", + "connection_modal.network.ssl_mode.preferred": "優先", + "connection_modal.network.ssl_mode.preferred_description": "まず SSL を試し、サーバーが暗号化を要求しない場合はフォールバックします。", + "connection_modal.network.ssl_mode.required": "必須", + "connection_modal.network.ssl_mode.required_description": "SSL を必須にし、暗号化接続を確立できない場合は失敗します。", + "connection_modal.network.ssl_mode.skip_verify": "検証をスキップ", + "connection_modal.network.ssl_mode.skip_verify_description": "SSL を使用しますが証明書検証をスキップします。テストまたは自己署名証明書でのみ使用してください。", + "connection_modal.network.ssl_panel_description": "この接続の SSL/TLS ポリシーを設定します。", + "connection_modal.network.ssl_tls": "SSL/TLS", + "connection_modal.placeholder.absolute_path": "/absolute/path/to/file", + "connection_modal.placeholder.agent_api_key": "任意の Agent API キー", + "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", + "connection_modal.placeholder.connection_name": "接続名前", + "connection_modal.placeholder.connection_name_fallback": "接続名", + "connection_modal.placeholder.custom_dsn_example": "例: ドライバー固有の DSN", + "connection_modal.placeholder.default_database_or_admin": "既定データベースまたは admin", + "connection_modal.placeholder.diagnostic_api_key": "任意の診断 API キー", + "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", + "connection_modal.placeholder.diagnostic_target_id": "対象 ID", + "connection_modal.placeholder.driver_name": "ドライバー名前", + "connection_modal.placeholder.empty_without_auth": "認証なしの場合は空にします", + "connection_modal.placeholder.endpoint_api_key": "任意の Endpoint API キー", + "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", + "connection_modal.placeholder.example_appdb": "appdb", + "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", + "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", + "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", + "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", + "connection_modal.placeholder.example_rs0": "rs0", + "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", + "connection_modal.placeholder.jvm_name": "jvm 名前", + "connection_modal.placeholder.no_auth": "認証なし", + "connection_modal.placeholder.proxy_host": "127.0.0.1", + "connection_modal.placeholder.redis_password": "Redis パスワード", + "connection_modal.placeholder.select_databases": "表示するデータベースを選択", + "connection_modal.placeholder.select_redis_databases": "表示する Redis データベースを選択", + "connection_modal.placeholder.ssh_host": "bastion.example.com", + "connection_modal.placeholder.ssl_cert_path": "/absolute/path/client.crt", + "connection_modal.placeholder.ssl_key_path": "/absolute/path/client.key", + "connection_modal.placeholder.tunnel_host": "tunnel.example.com", + "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", + "connection_modal.placeholder.use_primary_host": "主接続のホストを使用", + "connection_modal.placeholder.use_primary_password": "主接続のパスワードを使用", + "connection_modal.placeholder.use_primary_password_short": "主パスワードを使用", + "connection_modal.placeholder.use_primary_port": "主接続のポートを使用", + "connection_modal.placeholder.use_primary_username": "主接続のユーザー名を使用", + "connection_modal.placeholder.use_primary_username_short": "主ユーザー名を使用", + "connection_modal.redis.credentials.primary.label": "パスワード (任意)", + "connection_modal.redis.credentials.primary.placeholder.empty": "requirepass が設定されている場合の Redis パスワード", + "connection_modal.redis.credentials.primary.placeholder.retained": "保存済み Redis パスワード", + "connection_modal.redis.credentials.sentinelPassword.clear": "保存済み Sentinel パスワードをクリア", + "connection_modal.redis.credentials.sentinelPassword.description": "現在 Sentinel パスワードが保存されています。空のままなら継続使用し、新しい値を入力すると置き換えます。", + "connection_modal.redis.credentials.sentinelPassword.label": "Sentinel パスワード(任意)", + "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Sentinel 自身の認証パスワード。空の場合は送信しません", + "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "保存済み Sentinel パスワード", + "connection_modal.redis.credentials.sentinelUser.label": "Sentinel ユーザー名(任意)", + "connection_modal.redis.credentials.sentinelUser.placeholder": "Sentinel が ACL ユーザー名を使わない場合は空のままにします", + "connection_modal.redis.databaseScope.help": "接続テスト成功後に選択できます", + "connection_modal.redis.databaseScope.label": "表示するデータベース (空ならすべて表示)", + "connection_modal.redis.databaseScope.placeholder": "表示するデータベースを選択", + "connection_modal.redis.hosts.cluster.help": "上のホストアドレスを主ノードとして使用します。ここには他のシードノードを host:port 形式で入力します。", + "connection_modal.redis.hosts.cluster.label": "追加クラスターノードアドレス", + "connection_modal.redis.hosts.cluster.placeholder": "例:10.10.0.12:6379、10.10.0.13:6379", + "connection_modal.redis.hosts.sentinel.help": "上のホストアドレスを最初の Sentinel として使用します。ここには他の Sentinel ノードを host:port 形式で入力します。", + "connection_modal.redis.hosts.sentinel.label": "追加 Sentinel ノードアドレス", + "connection_modal.redis.hosts.sentinel.placeholder": "例:10.10.0.12:26379、10.10.0.13:26379", + "connection_modal.redis.sentinel.master.help": "Sentinel 設定の monitor 名を入力します。例:mymaster。", + "connection_modal.redis.sentinel.master.label": "Sentinel master 名", + "connection_modal.redis.sentinel.master.placeholder": "例:mymaster", + "connection_modal.redis.sentinel.master.required": "Sentinel master 名を入力してください", + "connection_modal.redis.topology.cluster.description": "Redis Cluster として複数のシードノードを設定します。", + "connection_modal.redis.topology.cluster.label": "クラスターモード", + "connection_modal.redis.topology.sentinel.description": "Sentinel でプライマリノードを検出し、主従高可用性に適用します。", + "connection_modal.redis.topology.sentinel.label": "Sentinel モード", + "connection_modal.redis.topology.single.description": "1 つの Redis ノードに接続します。", + "connection_modal.redis.topology.single.label": "スタンドアロンモード", + "connection_modal.secret.blocking.redis_sentinel": "テスト接続の前に新しい Sentinel パスワードを入力するか、保存済み Sentinel パスワードのクリアを取り消してください", + "connection_modal.secret.clear_saved_dsn": "保存済み DSN をクリア", + "connection_modal.secret.clear_saved_mongo_replica_password": "保存済み MongoDB レプリカパスワードをクリア", + "connection_modal.secret.clear_saved_password": "保存済みパスワードをクリア", + "connection_modal.secret.clear_saved_proxy_password": "保存済みプロキシパスワードをクリア", + "connection_modal.secret.clear_saved_replica_password": "保存済みレプリカパスワードをクリア", + "connection_modal.secret.clear_saved_ssh_password": "保存済み SSH パスワードをクリア", + "connection_modal.secret.clear_saved_tunnel_password": "保存済み HTTP Tunnel パスワードをクリア", + "connection_modal.secret.clear_saved_uri": "保存済み URI をクリア", "connection_modal.secret.error.saved_connection_deleted": "保存済み接続が見つかりません。削除された可能性があります。更新してから再試行してください。", + "connection_modal.secret.error.saved_connection_missing": "現在の接続に対応する保存済みシークレットが見つかりません。パスワードを入力し直して保存してから再試行してください。", + "connection_modal.secret.error.store_unavailable": "システムのシークレットストレージは現在利用できません。システムのキーチェーンまたは資格情報マネージャーを確認してから再試行してください。", + "connection_modal.secret.new_value_replaces_saved": "新しい値が入力されています。保存時に保存済みの値を置き換えます。", + "connection_modal.secret.saved_dsn_description": "DSN は安全に保存されています。空のままにするとその DSN を使い続けます。", + "connection_modal.secret.saved_mongo_replica_password": "保存済み MongoDB レプリカパスワード", + "connection_modal.secret.saved_mongo_replica_password_description": "セキュアストレージに MongoDB レプリカパスワードが保存されています。保持する場合は空にします。", + "connection_modal.secret.saved_password": "保存済みパスワード", + "connection_modal.secret.saved_placeholder": "••••••(空欄のままにすると{{label}}を引き続き使用します)", + "connection_modal.secret.saved_primary_password_description": "セキュアストレージに主接続パスワードが保存されています。保持する場合は空にします。", + "connection_modal.secret.saved_proxy_password": "保存済みプロキシパスワード", + "connection_modal.secret.saved_proxy_password_description": "セキュアストレージにプロキシパスワードが保存されています。保持する場合は空にします。", + "connection_modal.secret.saved_redis_password": "保存済み Redis パスワード", + "connection_modal.secret.saved_redis_password_description": "セキュアストレージに Redis パスワードが保存されています。保持する場合は空にします。", + "connection_modal.secret.saved_replica_password": "保存済みレプリカパスワード", + "connection_modal.secret.saved_replica_password_description": "セキュアストレージにレプリカパスワードが保存されています。保持する場合は空にします。", + "connection_modal.secret.saved_ssh_password": "保存済み SSH パスワード", + "connection_modal.secret.saved_ssh_password_description": "セキュアストレージに SSH パスワードが保存されています。保持する場合は空にします。", + "connection_modal.secret.saved_tunnel_password": "保存済み HTTP Tunnel パスワード", + "connection_modal.secret.saved_tunnel_password_description": "セキュアストレージに HTTP Tunnel パスワードが保存されています。保持する場合は空にします。", + "connection_modal.secret.saved_uri_description": "接続 URI は安全に保存されています。空のままにするとその URI を使い続けます。", + "connection_modal.section.advanced_connection": "詳細接続", + "connection_modal.section.appearance.description": "サイドバーに表示する接続のアイコンと色を設定します。", + "connection_modal.section.appearance.title": "外観", + "connection_modal.section.basic.description": "接続名、接続先、ドライバー、認証情報を入力します。", + "connection_modal.section.basic.jvm_description": "JVM ターゲット、接続モード、認証情報を設定します。", + "connection_modal.section.basic.sql_description": "接続先、ドライバー、認証情報、データベース範囲を設定します。", + "connection_modal.section.basic.title": "基本情報", + "connection_modal.section.config_sections": "設定セクション", + "connection_modal.section.network.description": "SSL/TLS、SSH Tunnel、プロキシ、HTTP Tunnel を設定します。", + "connection_modal.section.network.nav_description": "この接続のネットワークとセキュリティを設定します。", + "connection_modal.section.network.title": "ネットワークとセキュリティ", + "connection_modal.ssl_hint.dameng": "Dameng で SSL を有効にするには、クライアント証明書と秘密鍵のパス(sslCertPath / sslKeyPath)が必要です。", + "connection_modal.ssl_hint.default": "通常は Required を推奨します。Skip Verify はテスト環境または自己署名証明書の場合に限って使用してください。", + "connection_modal.ssl_hint.mongodb": "MongoDB 接続は TLS で保護できます。証明書検証で接続確認ができない場合は Skip Verify を試してください。", + "connection_modal.ssl_hint.mysql_like": "MySQL/MariaDB/Doris/Sphinx で安全な転送が必要な場合は SSL を有効にしてください。自己署名証明書では Preferred または Skip Verify で確認できます。", + "connection_modal.ssl_hint.sqlserver": "SQL Server の本番環境では Required を使用し、TrustServerCertificate を無効にすることを推奨します。", + "connection_modal.status.disabled": "無効", + "connection_modal.status.enabled": "有効", + "connection_modal.status.healthy": "正常", + "connection_modal.status.unhealthy": "異常", + "connection_modal.step.select_source": "データソースを選択", + "connection_modal.step.select_source_description": "作成する接続タイプを選択します。", + "connection_modal.step1.group.domestic": "国産データベース", "connection_modal.step1.group.message_queue": "メッセージキュー", + "connection_modal.step1.group.nosql": "NoSQL データベース", + "connection_modal.step1.group.other": "その他", + "connection_modal.step1.group.relational": "リレーショナルデータベース", + "connection_modal.step1.group.timeseries": "時系列データベース", "connection_modal.step1.group.vector": "ベクトルデータベース", "connection_modal.step1.hint.chroma": "Collection 閲覧、ベクトル検索、メタデータフィルター", + "connection_modal.step1.hint.custom": "カスタムドライバーと DSN", "connection_modal.step1.hint.elasticsearch": "インデックス閲覧、Mapping 検査、JSON DSL、query_string クエリ", + "connection_modal.step1.hint.file": "ローカルファイル接続", "connection_modal.step1.hint.goldendb": "MySQL 互換 / 分散トランザクション", + "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", + "connection_modal.step1.hint.mongodb": "シングルノード / レプリカセット", + "connection_modal.step1.hint.oceanBase": "MySQL / Oracle テナント", "connection_modal.step1.hint.qdrant": "Collection 閲覧、ベクトル検索、Payload フィルター", + "connection_modal.step1.hint.redis": "シングルノード / クラスター", + "connection_modal.step1.hint.standard": "標準接続設定", + "connection_modal.switch.off": "オフ", + "connection_modal.switch.on": "オン", + "connection_modal.table.health": "ヘルス", + "connection_modal.table.role": "ロール", + "connection_modal.test_error.description": "バックエンドから返された完全なエラーを確認します。", + "connection_modal.test_error.empty": "エラー詳細はありません", + "connection_modal.test_error.title": "接続テスト失敗の詳細", + "connection_modal.test.redis_database_list_failure": "接続には成功しましたが、Redis データベース一覧の取得に失敗しました:{{detail}}", + "connection_modal.test.redis_database_list_timeout": "接続には成功しましたが、Redis データベース一覧の取得がタイムアウトしました(>{{seconds}} 秒)", + "connection_modal.title.create": "新規 {{type}} 接続", + "connection_modal.title.create_description": "接続設定を入力して保存します。", + "connection_modal.title.edit": "接続を編集", + "connection_modal.title.edit_description": "{{type}} 接続の設定を編集します。", + "connection_modal.title.select_type": "データソースの種類を選択", + "connection_modal.title.select_type_description": "対応しているデータソースから接続タイプを選択します。", + "connection_modal.topology.cluster": "クラスタ", + "connection_modal.topology.mongodb_replica": "Replica Set", + "connection_modal.topology.mongodb_replica_description": "MongoDB Replica Set に接続し、必要に応じてメンバーを検出します。", + "connection_modal.topology.mongodb_single_description": "単一の MongoDB ホストに接続します。", + "connection_modal.topology.mysql_replica_description": "主接続に加えて任意のレプリカホストを使用します。", + "connection_modal.topology.mysql_single_description": "単一の MySQL 互換ノードに接続します。", + "connection_modal.topology.primary_replica": "プライマリ/レプリカ", + "connection_modal.topology.redis_cluster_description": "Redis Cluster に接続し、追加ノードを指定します。", + "connection_modal.topology.redis_single_description": "単一の Redis ノードに接続します。", + "connection_modal.topology.single": "単一ノード", + "connection_modal.validation.address_or_path_required": "ホストアドレスまたはファイルパスを入力してください", + "connection_modal.validation.agent_url_required": "Agent URL を入力してください", + "connection_modal.validation.arthas_tunnel_url_required": "Arthas Tunnel URL を入力してください", + "connection_modal.validation.custom_dsn_required": "接続文字列を入力してください", + "connection_modal.validation.custom_dsn_required_when_clearing_saved": "新しい接続文字列を入力するか、保存済み DSN のクリアをキャンセルしてください", + "connection_modal.validation.dameng_ssl_cert_path_required": "Dameng SSL 証明書パスを入力してください", + "connection_modal.validation.dameng_ssl_key_path_required": "Dameng SSL 秘密鍵パスを入力してください", + "connection_modal.validation.diagnostic_bridge_url_required": "診断ブリッジ URL を入力してください", + "connection_modal.validation.diagnostic_target_required": "診断対象を入力してください", + "connection_modal.validation.diagnostic_timeout_range_1_300": "診断タイムアウトは 1 から 300 秒の間で指定してください", + "connection_modal.validation.driver_name_required": "ドライバー名を入力してください", + "connection_modal.validation.endpoint_url_required": "Endpoint URL を入力してください", + "connection_modal.validation.jvm_access_mode_required": "少なくとも 1 つの JVM 接続モードを選択してください", + "connection_modal.validation.jvm_host_required": "JVM ホストを入力してください", + "connection_modal.validation.jvm_port_required": "JVM ポートを入力してください", + "connection_modal.validation.jvm_preferred_mode_required": "優先 JVM 接続モードを選択してください", + "connection_modal.validation.oracle_service_required": "Oracle サービス名を入力してください", + "connection_modal.validation.port_required": "ポートを入力してください", + "connection_modal.validation.proxy_host_required": "プロキシホストを入力してください", + "connection_modal.validation.proxy_port_required": "プロキシポートを入力してください", + "connection_modal.validation.ssh_host_required": "SSH ホストを入力してください", + "connection_modal.validation.ssh_port_required": "SSH ポートを入力してください", + "connection_modal.validation.ssh_user_required": "SSH ユーザーを入力してください", + "connection_modal.validation.timeout_range_1_300": "タイムアウトは 1 から 300 秒の間で指定してください", + "connection_modal.validation.tunnel_host_required": "HTTP Tunnel ホストを入力してください", + "connection_modal.validation.tunnel_port_required": "HTTP Tunnel ポートを入力してください", + "connection_modal.validation.username_required": "ユーザー名を入力してください", + "connection.copy_suffix": " - コピー", + "connection.delete": "接続を削除", + "connection.edit": "接続を編集", + "connection.new": "新規接続", "connection.oceanbase.error.unsupported_protocol": "OceanBase は MySQL/Oracle テナントプロトコルのみ対応しています。「{{value}}」はサポートされていません。MySQL または Oracle に切り替えてください。", + "connection.sidebar.delete.backendUnavailable": "接続の削除に失敗しました:バックエンド API を利用できません", + "connection.sidebar.delete.confirmContent": "接続「{{name}}」を削除しますか?", + "connection.sidebar.delete.confirmTitle": "削除の確認", + "connection.sidebar.delete.failureFallback": "接続の削除に失敗しました", + "connection.sidebar.delete.success": "接続を削除しました", + "connection.sidebar.disconnect.success": "接続を切断しました", + "connection.sidebar.duplicate.backendUnavailable": "接続の複製に失敗しました:バックエンド API を利用できません", + "connection.sidebar.duplicate.failureFallback": "接続の複製に失敗しました", + "connection.sidebar.duplicate.noResult": "接続の複製に失敗しました:バックエンドから結果が返されませんでした", + "connection.sidebar.duplicate.success": "接続を複製しました: {{name}}", + "connection.sidebar.group.badge": "グループ", + "connection.sidebar.group.collapseAria": "接続グループ {{name}} を折りたたむ", + "connection.sidebar.group.delete": "グループを削除", + "connection.sidebar.group.deleteConfirmContent": "グループ「{{name}}」を削除しますか?中の接続は削除されません。", + "connection.sidebar.group.deleteConfirmTitle": "削除の確認", + "connection.sidebar.group.edit": "グループを編集", + "connection.sidebar.group.expandAria": "接続グループ {{name}} を展開", + "connection.sidebar.group.meta": "{{count}} 件の接続 · 接続グループ", + "connection.sidebar.group.untitled": "無題のグループ", + "connection.sidebar.menu.copy": "接続を複製", + "connection.sidebar.menu.createDatabase": "新規データベース", + "connection.sidebar.menu.current": "現在", + "connection.sidebar.menu.delete": "接続を削除", + "connection.sidebar.menu.disconnect": "接続を切断", + "connection.sidebar.menu.groupSection": "接続グループ", + "connection.sidebar.menu.hostBadge": "HOST", + "connection.sidebar.menu.hostFallback": "アドレス未設定", + "connection.sidebar.menu.moveOutTag": "タグから外す", + "connection.sidebar.menu.moveToTag": "タグへ移動", + "connection.sidebar.menu.moveToUngrouped": "グループから外す", + "connection.sidebar.menu.refresh": "接続を更新", + "connection.sidebar.menu.section": "接続", + "connection.test": "接続をテスト", + "connection.unnamed": "名前なしの接続", + "data_grid.action.apply": "適用", + "data_grid.ai_insight.prompt": "次のクエリ結果データを分析してください(先頭 {{count}} 件のサンプル):\n```json\n{{json}}\n```\n\nデータの特徴、パターン、または業務上の洞察を分析してください。", + "data_grid.ai_prompt.analyze_page": "次のクエリ結果データ(先頭 {{count}} 件のサンプル行)を分析してください:\n```json\n{{json}}\n```\n\nデータの特徴、傾向、またはビジネス上の示唆を分析してください。", "data_grid.aria.row_number": "行番号", + "data_grid.batch_fill.set_null": "NULL に設定", + "data_grid.batch_fill.title": "一括入力({{count}} セル)", + "data_grid.batch_fill.value_placeholder": "入力する値を指定", + "data_grid.cell_editor.now": "現在時刻", + "data_grid.cell_editor.title": "セルを編集", + "data_grid.cell_editor.title_with_column": "セルを編集: {{column}}", + "data_grid.column_quick_find.placeholder": "列へジャンプ...", + "data_grid.column_quick_find.tooltip": "列名を入力して Enter キーを押すか、移動ボタンで該当列へジャンプします", + "data_grid.column_settings.column_visibility": "列の表示", + "data_grid.column_settings.display_settings": "表示設定", + "data_grid.column_settings.field_info": "フィールド情報", + "data_grid.column_settings.hide_all": "すべて非表示", + "data_grid.column_settings.remember_column_order": "カスタム列順を記憶", + "data_grid.column_settings.remember_hidden_columns": "非表示列の設定を記憶", + "data_grid.column_settings.reset_hidden": "非表示設定をリセット", + "data_grid.column_settings.reset_hidden_success": "すべての列を表示しました", + "data_grid.column_settings.reset_order": "順序をリセット", + "data_grid.column_settings.reset_order_success": "既定の列順に戻しました", + "data_grid.column_settings.search_columns_placeholder": "列名を検索...", + "data_grid.column_settings.show_all": "すべて表示", + "data_grid.column_settings.show_comments": "ヘッダーに列コメントを表示", + "data_grid.column_settings.show_types": "ヘッダーに列型を表示", + "data_grid.column.comment_tooltip": "コメント: {{comment}}", + "data_grid.column.drag_tooltip": "ドラッグして列を並べ替え", + "data_grid.column.foreign_key_jump_title": "外部キーテーブルへ移動: {{tableName}}", + "data_grid.column.foreign_key_tooltip": "外部キー: {{target}}", + "data_grid.column.resize_tooltip": "ドラッグして列幅を変更、ダブルクリックで自動調整", + "data_grid.column.type_tooltip": "型: {{type}}", + "data_grid.context_menu.auto_fit_column": "内容に合わせて列幅を自動調整", + "data_grid.context_menu.clear_column_sort": "このフィールドの並べ替えを解除", + "data_grid.context_menu.column_display_section": "フィールド表示", + "data_grid.context_menu.column_no_comment": "コメントなし", + "data_grid.context_menu.column_unknown_type": "不明な型", + "data_grid.context_menu.column_unnamed_field": "名前のないフィールド", + "data_grid.context_menu.copy_as_csv": "CSV としてコピー", + "data_grid.context_menu.copy_as_delete": "DELETE としてコピー", + "data_grid.context_menu.copy_as_insert": "INSERT としてコピー", + "data_grid.context_menu.copy_as_json": "JSON としてコピー", + "data_grid.context_menu.copy_as_markdown": "Markdown としてコピー", + "data_grid.context_menu.copy_as_update": "UPDATE としてコピー", + "data_grid.context_menu.copy_column_data": "列データをコピー", + "data_grid.context_menu.copy_field_name": "フィールド名をコピー", + "data_grid.context_menu.copy_row_as_new": "この行を新規行としてコピー", + "data_grid.context_menu.copy_row_data": "行データをコピー", + "data_grid.context_menu.current_cell": "現在のセル", + "data_grid.context_menu.current_marker": "現在", + "data_grid.context_menu.current_row": "現在の行", + "data_grid.context_menu.edit_row": "この行を編集", + "data_grid.context_menu.edit_section": "編集", + "data_grid.context_menu.export_as_csv": "CSV としてエクスポート", + "data_grid.context_menu.export_as_excel": "Excel としてエクスポート", + "data_grid.context_menu.export_as_html": "HTML としてエクスポート", + "data_grid.context_menu.export_as_json": "JSON としてエクスポート", + "data_grid.context_menu.export_selected": "選択データをエクスポート", + "data_grid.context_menu.fill_to_selected_rows": "選択行へ入力({{count}})", + "data_grid.context_menu.hide_column": "このフィールドを非表示", + "data_grid.context_menu.hide_column_comment": "フィールドコメントを非表示", + "data_grid.context_menu.hide_column_type": "フィールド型を非表示", + "data_grid.context_menu.paste_copied_columns": "コピーした列を貼り付け(同名列)", + "data_grid.context_menu.paste_row_as_new": "新規行として貼り付け", + "data_grid.context_menu.paste_row_as_new_count": "新規行として貼り付け({{count}})", + "data_grid.context_menu.show_column_comment": "フィールドコメントを表示", + "data_grid.context_menu.show_column_type": "フィールド型を表示", + "data_grid.context_menu.sort_ascending": "昇順で並べ替え", + "data_grid.context_menu.sort_descending": "降順で並べ替え", + "data_grid.context_menu.sort_section": "並べ替え", + "data_grid.context_menu.undo_cell_change": "このセルの変更を取り消す", + "data_grid.copy_sql.error.missing_safe_where": "現在の結果セットには行データを安全に特定できる主キーまたは一意キーがなく、テーブルの全列も含まれていないため、WHERE 条件を生成できません。", + "data_grid.copy_sql.error.missing_table_name": "現在の結果セットには明確なテーブル名が関連付けられていないため、{{mode}} SQL を生成できません。", + "data_grid.copy_sql.error.no_copyable_fields": "現在の結果セットにはコピー可能なフィールドがないため、SQL を生成できません。", + "data_grid.data_panel.click_cell_description": "表内のセルをクリックすると完全なデータをプレビューできます", + "data_grid.data_panel.click_cell_title": "セルをクリックしてデータを表示", + "data_grid.data_panel.title": "データプレビュー", + "data_grid.datetime_picker.now": "今", + "data_grid.ddl.copy": "DDL をコピー", + "data_grid.ddl.layout_bottom": "下部", + "data_grid.ddl.layout_side": "サイドバー", + "data_grid.ddl.loading": "DDL を読み込み中...", + "data_grid.ddl.reload": "再読み込み", + "data_grid.ddl.sidebar_aria": "テーブル DDL サイドバー", + "data_grid.ddl.view": "DDL を表示", + "data_grid.embedded_designer.title": "テーブル設計({{tableName}})", + "data_grid.error_boundary.description": "データグリッドの描画中にエラーが発生しました。データ形式が無効な可能性があります。", + "data_grid.error_boundary.retry": "再試行", + "data_grid.error_boundary.title": "描画エラー", + "data_grid.export.all_data": "すべてのデータをエクスポート", + "data_grid.export.all_rows": "すべての行をエクスポート({{count}} 行)", + "data_grid.export.all_rows_requery": "すべてエクスポート(再クエリ)", + "data_grid.export.current_page": "現在のページをエクスポート({{count}} 行)", + "data_grid.export.current_page_rows": "現在のページをエクスポート({{count}} 行)", + "data_grid.export.group_filtered_results": "フィルター済み結果", + "data_grid.export.group_full_table": "テーブル全体", + "data_grid.export.no_selection_prompt": "行が選択されていません。エクスポート範囲を選択してください:", + "data_grid.export.options_title": "エクスポートオプション", + "data_grid.export.query_result_title": "クエリ結果をエクスポート", + "data_grid.export.scope_prompt": "エクスポート範囲を選択してください:", + "data_grid.export.selected_rows": "選択行をエクスポート({{count}} 行)", + "data_grid.filter.add_condition": "条件を追加", + "data_grid.filter.add_sort": "並べ替えを追加", + "data_grid.filter.apply": "適用", + "data_grid.filter.apply_where": "WHERE を適用", + "data_grid.filter.clear": "クリア", + "data_grid.filter.custom_where_placeholder": "カスタム WHERE 式を入力(WHERE は不要)。例: status IN ('A','B')", + "data_grid.filter.disable_all": "すべて無効化", + "data_grid.filter.enable_all": "すべて有効化", + "data_grid.filter.enabled": "有効", + "data_grid.filter.end_value_placeholder": "終了値", + "data_grid.filter.first_condition": "最初", + "data_grid.filter.invalid_quick_where": "WHERE 条件にセミコロンや SQL コメントは使用できません", + "data_grid.filter.list_values_placeholder": "複数の値はカンマまたは改行で区切ってください", + "data_grid.filter.logic.and": "かつ (AND)", + "data_grid.filter.logic.or": "または (OR)", + "data_grid.filter.mongodb_query_placeholder": "MongoDB の JSON クエリオブジェクトを入力。例: {\"status\":\"A\"}", + "data_grid.filter.no_value_placeholder": "値は不要です", + "data_grid.filter.op.between": "範囲内", + "data_grid.filter.op.contains": "含む", + "data_grid.filter.op.custom": "[カスタム]", + "data_grid.filter.op.ends_with": "指定文字で終わる", + "data_grid.filter.op.in_list": "リスト内", + "data_grid.filter.op.is_empty": "空", + "data_grid.filter.op.is_not_empty": "空ではない", + "data_grid.filter.op.is_not_null": "NULL ではない", + "data_grid.filter.op.is_null": "NULL", + "data_grid.filter.op.not_between": "範囲外", + "data_grid.filter.op.not_contains": "含まない", + "data_grid.filter.op.not_ends_with": "指定文字で終わらない", + "data_grid.filter.op.not_in_list": "リスト外", + "data_grid.filter.op.not_starts_with": "指定文字で始まらない", + "data_grid.filter.op.starts_with": "指定文字で始まる", + "data_grid.filter.quick_where_placeholder": "WHERE の後に続く条件を入力。例: status = 1 AND name LIKE 'A%'", + "data_grid.filter.search_field_placeholder": "フィールド名を検索", + "data_grid.filter.select_sort_field_placeholder": "並べ替えフィールドを選択", + "data_grid.filter.sort_asc": "昇順", + "data_grid.filter.sort_desc": "降順", + "data_grid.filter.sort_label": "並べ替え", + "data_grid.filter.start_value_placeholder": "開始値", + "data_grid.filter.suggestion.column": "列", + "data_grid.filter.suggestion.keyword": "キーワード", + "data_grid.filter.suggestion.operator": "演算子", + "data_grid.filter.then_label": "次に", + "data_grid.json_editor.apply_changes": "変更を適用", + "data_grid.json_editor.description": "現在の結果順で編集します。JSON モードではレコードの追加や削除はできません。追加や削除はテーブルモードを使用してください。", + "data_grid.json_editor.format": "JSON を整形", + "data_grid.json_editor.invalid_format": "JSON の形式が無効です: {{error}}", + "data_grid.json_editor.title": "JSON 結果セットを編集", + "data_grid.message.auto_commit_failed": "自動コミットに失敗しました: {{detail}}", + "data_grid.message.auto_commit_success": "自動コミットしました", + "data_grid.message.cell_edit_mode_entered": "セル編集モードを有効にしました。ドラッグして複数セルを選択できます。", + "data_grid.message.cell_edit_mode_exited": "セル編集モードを無効にしました。", + "data_grid.message.change_set_build_failed": "変更セットを構築できませんでした", + "data_grid.message.change_set_build_failed_detail": "変更セットを構築できませんでした: {{detail}}", + "data_grid.message.column_order_reset": "既定の列順に戻しました", + "data_grid.message.column_quick_find_not_found": "フィールド列が見つかりません: {{query}}", + "data_grid.message.column_quick_find_not_rendered": "フィールド列「{{column}}」は現在レンダリングされていないため、特定できません", + "data_grid.message.column_visibility_reset": "すべての列を表示しました", + "data_grid.message.commit_failed": "コミットに失敗しました: {{detail}}", + "data_grid.message.copied_columns": "{{count}} 列をコピーしました。対象行に貼り付けできます。", + "data_grid.message.copied_rows": "{{count}} 行をコピーしました。新しい行として貼り付けできます。", + "data_grid.message.copied_to_clipboard": "クリップボードにコピーしました", + "data_grid.message.copy_columns_first": "先に列の値をコピーしてください", + "data_grid.message.copy_columns_same_row_only": "列の値をコピーするときは、同じ行のセルだけを選択してください", + "data_grid.message.copy_rows_first": "先に行をコピーしてください", + "data_grid.message.copy_sql_not_supported": "このデータソースは SQL コピーに対応していません。JSON/CSV/Markdown コピーを使用してください。", + "data_grid.message.current_field_not_editable": "現在のフィールドは編集できません", + "data_grid.message.current_record_not_editable": "現在のレコードは編集できません", + "data_grid.message.current_row_no_copyable_content": "現在の行にコピー可能な内容がありません", + "data_grid.message.ddl_copied": "DDL をクリップボードにコピーしました", + "data_grid.message.ddl_copy_failed": "DDL のコピーに失敗しました", + "data_grid.message.ddl_load_failed": "DDL の読み込みに失敗しました", + "data_grid.message.ddl_missing_context": "現在のテーブルに接続またはテーブル名がないため、DDL を表示できません", + "data_grid.message.drag_select_cells_to_copy": "先にコピーするセルをドラッグして選択してください", + "data_grid.message.export_failed": "エクスポートに失敗しました: {{detail}}", + "data_grid.message.export_success": "エクスポートが完了しました", + "data_grid.message.export_with_uncommitted_changes": "未コミットの変更があります。エクスポートには表示中のグリッドデータが使用されます。長いフィールドの完全なデータが必要な場合は先にコミットしてください。", + "data_grid.message.exporting": "エクスポート中...", + "data_grid.message.exporting_all": "すべてのデータをエクスポート中...", + "data_grid.message.exporting_rows": "{{count}} 行をエクスポート中...", + "data_grid.message.filled_cells": "{{count}} セルに入力しました", + "data_grid.message.filled_rows": "{{count}} 行に入力しました", + "data_grid.message.filtered_export_not_supported": "このデータソースはフィルター済み結果のエクスポートに対応していません", + "data_grid.message.filtered_export_uses_committed_data": "未コミットの変更があります。フィルター済み結果のエクスポートにはコミット済みのデータベースデータが使用されます。", + "data_grid.message.import_done": "インポートが完了しました", + "data_grid.message.json_applied": "JSON の変更を現在の結果セットに適用しました。続けてトランザクションをコミットできます。", + "data_grid.message.json_invalid": "無効な JSON: {{detail}}", + "data_grid.message.json_parse_failed": "JSON の解析に失敗しました: {{detail}}", + "data_grid.message.json_record_count_mismatch": "レコード数が一致しません: 現在 {{current}} 行、JSON は {{json}} 行です。このモードではレコードを追加または削除しないでください。", + "data_grid.message.json_record_missing_row_key": "レコード {{index}} に行識別子がないため適用できません", + "data_grid.message.json_record_not_object": "レコード {{index}} はオブジェクトではないため適用できません", + "data_grid.message.json_view_must_be_array": "JSON ビューは配列である必要があります。各要素が 1 件のレコードに対応します", + "data_grid.message.keep_one_visible_column": "少なくとも 1 つの表示列を残してください", + "data_grid.message.locate_record_to_edit": "先に編集するレコードを特定してください", + "data_grid.message.locator_column_value_empty": "ロケーター列 {{column}} の値が空のため、変更を安全に送信できません。", + "data_grid.message.no_changes_to_commit": "コミットする変更はありません", + "data_grid.message.no_copyable_cells": "コピー可能なセルを認識できませんでした", + "data_grid.message.no_copyable_columns": "コピー可能な列を認識できませんでした", + "data_grid.message.no_copyable_rows": "コピー可能な行を認識できませんでした", + "data_grid.message.no_data_changes": "データは変更されていません", + "data_grid.message.no_ddl_to_copy": "コピーする DDL がありません", + "data_grid.message.no_field_name": "フィールド名を認識できませんでした", + "data_grid.message.no_filter_applied": "現在適用中のフィルター条件はありません", + "data_grid.message.no_other_rows_to_fill": "入力できる他の選択行がありません", + "data_grid.message.no_pasteable_editable_fields": "貼り付け可能な編集可能フィールドがありません", + "data_grid.message.no_pasteable_rows": "貼り付け可能な行がありません", + "data_grid.message.no_rows_selected": "行が選択されていません", + "data_grid.message.no_safe_locator": "現在の結果には安全に行を特定できる方法がないため、変更を送信できません。", + "data_grid.message.pasted_columns_to_rows": "{{rows}} 行、合計 {{cells}} セルに貼り付けました", + "data_grid.message.pasted_rows_as_new": "{{count}} 行を新しい行として貼り付けました。コミット前に確認してください。", + "data_grid.message.preview_sql_failed": "プレビュー SQL の生成に失敗しました", + "data_grid.message.preview_sql_failed_detail": "プレビュー SQL の生成に失敗しました: {{detail}}", + "data_grid.message.result_set_no_copyable_content": "現在の結果セットにコピー可能な内容がありません", "data_grid.message.rollback_failed": "ロールバックに失敗しました: {{detail}}", + "data_grid.message.saved": "保存しました", + "data_grid.message.select_cells_to_fill": "先に入力するセルを選択してください", + "data_grid.message.select_file_failed": "ファイルの選択に失敗しました: {{detail}}", + "data_grid.message.select_rows_to_copy": "先にコピーする行を選択してください", + "data_grid.message.select_rows_to_fill": "先に入力する行を選択してください", + "data_grid.message.select_same_row_cells_to_copy": "先に同じ行のセルを選択してコピーしてください", + "data_grid.message.select_target_rows": "先に対象行を選択してください", + "data_grid.message.selected_cells_no_update": "選択セルに更新は不要です", + "data_grid.message.selection_no_copyable_content": "現在の選択範囲にコピー可能な内容がありません", + "data_grid.message.target_row_not_found": "対象行が見つかりません。更新してから再試行してください。", + "data_grid.message.target_rows_cannot_only_source": "対象行をコピー元行だけにすることはできません。別の行を選択してください。", + "data_grid.message.target_rows_no_update": "対象行に更新は不要です", + "data_grid.message.transaction_committed": "トランザクションをコミットしました", "data_grid.message.transaction_rolled_back": "トランザクションをロールバックしました", + "data_grid.message.undo_added_row_hint": "新規行の取り消しには、選択行の削除または表全体のロールバックを使用してください", + "data_grid.message.undo_cell_original_missing": "このセルの元データが見つからないため、取り消せません", + "data_grid.message.undo_cell_success": "セルの変更を取り消しました", + "data_grid.metadata_view.column_name": "名前", + "data_grid.metadata_view.column_type": "型", + "data_grid.metadata_view.comment": "コメント", + "data_grid.metadata_view.default_value": "デフォルト値", + "data_grid.metadata_view.er_collapse_fields": "フィールド要約を折りたたむ", + "data_grid.metadata_view.er_current_badge": "現在の表", + "data_grid.metadata_view.er_empty": "このテーブルでは外部キー関係が見つかりませんでした", + "data_grid.metadata_view.er_expand_fields": "すべてのフィールドを展開", + "data_grid.metadata_view.er_expand_hidden_columns": "残り {{count}} フィールドを表示", + "data_grid.metadata_view.er_expand_relations": "次の層を展開", + "data_grid.metadata_view.er_field_badge": "フィールド", + "data_grid.metadata_view.er_hidden_columns": "ほか {{count}} フィールド", + "data_grid.metadata_view.er_open_table": "テーブルを開く", + "data_grid.metadata_view.er_partial_warning": "一部の関係を読み込めなかったため、図が不完全な可能性があります", + "data_grid.metadata_view.er_reference_badge": "参照先", + "data_grid.metadata_view.er_referenced_by_badge": "参照元", + "data_grid.metadata_view.er_related_table_count": "関連テーブル {{count}} 件", + "data_grid.metadata_view.er_relation_count": "リレーション {{count}} 件", + "data_grid.metadata_view.er_relation_depth": "{{count}} 層の関連", + "data_grid.metadata_view.er_reset_relations": "1 層に戻す", + "data_grid.metadata_view.er_table_badge": "テーブル", + "data_grid.metadata_view.field_count": "{{count}} フィールド", + "data_grid.metadata_view.fields_badge": "フィールド", + "data_grid.modal.export_options.all_data": "すべてのデータをエクスポート", + "data_grid.modal.export_options.current_page": "現在のページをエクスポート({{count}} 行)", + "data_grid.modal.export_options.filtered_results": "フィルター済み結果", + "data_grid.modal.export_options.no_rows_selected": "行が選択されていません。エクスポート範囲を選択してください:", + "data_grid.modal.export_options.title": "エクスポートオプション", + "data_grid.modal.export_options.whole_table": "テーブル全体", + "data_grid.page_find.next": "次へ", + "data_grid.page_find.placeholder": "現在のページ内を検索...", + "data_grid.page_find.previous": "前へ", + "data_grid.page_find.summary": "{{occurrences}} 件一致 / {{cells}} セル", + "data_grid.page_find.tooltip": "現在のページに読み込まれた行だけを検索します。WHERE 条件は変更されません。", + "data_grid.pagination.jump_action": "移動", + "data_grid.pagination.jump_aria": "移動先ページ", + "data_grid.pagination.jump_label": "ページ移動", + "data_grid.pagination.page_size_aria": "1 ページあたりの行数", + "data_grid.pagination.page_size_option": "{{count}} 行 / ページ", + "data_grid.pagination.page.current": "{{current}} ページ", + "data_grid.pagination.page.known": "{{current}} / {{totalPages}} ページ", + "data_grid.pagination.result_set": "結果セット", + "data_grid.pagination.summary.approximate": "現在 {{current}} 行 / 約 {{total}} 行", + "data_grid.pagination.summary.cancelled": "現在 {{current}} 行 / 件数取得をキャンセルしました", + "data_grid.pagination.summary.counting": "現在 {{current}} 行 / 合計を取得中...", + "data_grid.pagination.summary.counting_exact": "現在 {{current}} 行 / 正確な合計を取得中...", + "data_grid.pagination.summary.empty": "現在 0 行 / 合計 0 行", + "data_grid.pagination.summary.known": "現在 {{current}} 行 / 合計 {{total}} 行", + "data_grid.pagination.summary.not_counted": "現在 {{current}} 行 / 合計未取得", + "data_grid.preview_panel.no_cell_description": "表内のセルをクリックして完全なデータをプレビュー", + "data_grid.preview_panel.no_cell_title": "セルをクリックしてデータを表示", + "data_grid.preview_sql.copied": "コピーしました", + "data_grid.preview_sql.no_changes": "変更はありません", + "data_grid.preview_sql.summary": "DELETE {{deletes}} 件、UPDATE {{updates}} 件、INSERT {{inserts}} 件", + "data_grid.preview_sql.title": "変更プレビュー", + "data_grid.record_view.edit_current": "現在のレコードを編集", + "data_grid.record_view.edit_json": "JSON を編集", + "data_grid.record_view.empty": "現在の結果セットにデータはありません", + "data_grid.record_view.json_record_count": "現在の結果セット: {{count}} 件のレコード", + "data_grid.record_view.next": "次のレコード", + "data_grid.record_view.previous": "前のレコード", + "data_grid.record_view.record_position": "レコード {{current}} / {{total}}", + "data_grid.row_editor.popup_edit": "ポップアップで編集", + "data_grid.row_editor.title": "行を編集", + "data_grid.secondary.column_display": "列表示", + "data_grid.secondary.data_preview": "データプレビュー", + "data_grid.secondary.er_diagram": "ER 図", + "data_grid.secondary.jump_column": "列へ移動", + "data_grid.secondary.live": "ライブ", + "data_grid.secondary.object_design": "オブジェクト設計", + "data_grid.secondary.pending_changes": "未コミット {{count}}", + "data_grid.secondary.row_count": "{{count}} 行", + "data_grid.secondary.view_ddl": "DDL を表示", + "data_grid.table_fallback.query_result": "クエリ結果", + "data_grid.toolbar.add_row": "行を追加", + "data_grid.toolbar.ai_insight": "AI データ分析", + "data_grid.toolbar.ai_insight_short": "AI 分析", + "data_grid.toolbar.ai_insight_tooltip": "現在のクエリページのデータ分析を AI に依頼", + "data_grid.toolbar.batch_fill": "一括入力({{count}})", + "data_grid.toolbar.cancel_count": "件数取得をキャンセル", + "data_grid.toolbar.cancel_count_tooltip": "この正確な合計件数の取得をキャンセルします。現在の閲覧には影響しません。", + "data_grid.toolbar.cell_editor": "セルエディター", + "data_grid.toolbar.commit": "トランザクションをコミット({{count}})", + "data_grid.toolbar.commit_delay.seconds": "{{seconds}} 秒", + "data_grid.toolbar.commit_label": "トランザクションをコミット", + "data_grid.toolbar.commit_mode.auto": "自動コミット", + "data_grid.toolbar.commit_mode.auto_countdown": "{{seconds}}s 後にコミット", + "data_grid.toolbar.commit_mode.manual": "手動コミット", + "data_grid.toolbar.commit_mode.tooltip": "テーブルデータ編集後のコミット方法を制御します。手動コミットの方が安全です。自動コミットは最後の変更後、選択した待機時間が経過してから実行されます。", + "data_grid.toolbar.copied_columns_count": "コピー済み列 {{count}} 件", + "data_grid.toolbar.copy": "コピー", + "data_grid.toolbar.copy_row": "行をコピー", + "data_grid.toolbar.copy_selection": "選択範囲をコピー({{count}})", + "data_grid.toolbar.copy_selection_columns": "選択列の値をコピー({{count}})", + "data_grid.toolbar.count_total": "合計件数を取得", + "data_grid.toolbar.count_total_tooltip": "現在のフィルターで正確な合計件数を取得", + "data_grid.toolbar.delete_selected": "選択項目を削除", + "data_grid.toolbar.export": "エクスポート", + "data_grid.toolbar.filter": "フィルター", + "data_grid.toolbar.import": "インポート", + "data_grid.toolbar.paste_row": "行を貼り付け", + "data_grid.toolbar.paste_row_count": "行を貼り付け({{count}})", + "data_grid.toolbar.paste_to_selected_rows": "選択行へ貼り付け({{count}})", + "data_grid.toolbar.preview_sql": "SQL をプレビュー", + "data_grid.toolbar.preview_sql_generate": "プレビュー SQL を生成", + "data_grid.toolbar.refresh": "更新", + "data_grid.toolbar.rollback": "ロールバック", + "data_grid.toolbar.selected_count": "{{count}} 件選択中", + "data_grid.toolbar.undo_delete": "削除を取り消す", + "data_grid.view.edit_current_record": "現在のレコードを編集", + "data_grid.view.edit_json": "JSON を編集", + "data_grid.view.empty_result": "現在の結果セットにデータはありません", + "data_grid.view.next_record": "次のレコード", + "data_grid.view.previous_record": "前のレコード", + "data_grid.view.record_count": "現在の結果セット: {{count}} 件", + "data_grid.view.record_position": "レコード {{current}} / {{total}}", + "data_grid.view.result_view": "結果ビュー", + "data_grid.view.table": "テーブル", + "data_grid.view.text": "テキスト", + "data_sync.action.analyze_diff": "差分を分析", + "data_sync.action.cancel": "キャンセル", + "data_sync.action.close": "閉じる", + "data_sync.action.continue_sync": "同期を続行", + "data_sync.action.next": "次へ", + "data_sync.action.previous": "戻る", + "data_sync.action.start_sync": "同期を開始", + "data_sync.action.view": "表示", + "data_sync.alert.auto_create_planner_scope": "自動テーブル作成は現在 MySQL から Kingbase への移行のみ対応しています。列、主キー、通常インデックス、一意インデックス、複合インデックスを移行し、全文、空間、プレフィックス、関数系インデックスは明示的にスキップします。", + "data_sync.alert.auto_create_scope": "自動テーブル作成は現在 MySQL から Kingbase への移行のみ対応しています。列、主キー、通常インデックス、一意インデックス、複合インデックスを移行し、全文、空間、プレフィックス、関数系インデックスは明示的にスキップします。", + "data_sync.alert.existing_target_only": "データ同期は既存のターゲットテーブルに対して実行されます。テーブル作成とインポートが必要な場合は、クロスデータベース移行に切り替えてください。", + "data_sync.alert.full_overwrite": "全量上書きはターゲットテーブルのデータを消去します。慎重に使用してください。", + "data_sync.alert.migration_mode": "クロスデータベース移行が有効です。別のデータソースへテーブルを移し、自動作成とインポートを行う場合に使用します。", + "data_sync.alert.query_mode": "SQL 結果セット同期は現在、ソース側のカスタム SQL から単一の既存ターゲットテーブルへの同期に対応しています。クエリ結果にはターゲットテーブルの主キー列が必要です。", + "data_sync.alert.sync_mode": "データ同期が有効です。ターゲットテーブルが既に存在する場合の増分同期や上書きインポートに使用します。", + "data_sync.backend.error.analyze_prepare_secrets_failed": "データ同期分析のシークレット準備に失敗しました: {{detail}}", + "data_sync.backend.error.apply_changes_failed": "変更の適用に失敗しました: {{detail}}", + "data_sync.backend.error.apply_changes_unsupported": "ターゲットドライバーはデータ変更の適用をサポートしていません", + "data_sync.backend.error.apply_source_query_changes_failed": "SQL 結果セットの変更適用に失敗しました: {{detail}}", + "data_sync.backend.error.auto_add_column_failed": "列の自動補完に失敗しました: 列={{column}}, エラー={{detail}}", + "data_sync.backend.error.build_migration_plan_failed": "移行計画の生成に失敗しました: テーブル={{table}}, エラー={{detail}}", + "data_sync.backend.error.clear_target_failed": "ターゲットテーブルのクリアに失敗しました: {{detail}}", + "data_sync.backend.error.connect_source_failed": "ソースデータベースへの接続に失敗しました: {{detail}}", + "data_sync.backend.error.connect_source_mongodb_failed": "ソース MongoDB への接続に失敗しました: {{detail}}", + "data_sync.backend.error.connect_source_redis_failed": "ソース Redis への接続に失敗しました: {{detail}}", + "data_sync.backend.error.connect_target_failed": "ターゲットデータベースへの接続に失敗しました: {{detail}}", + "data_sync.backend.error.connect_target_mongodb_failed": "ターゲット MongoDB への接続に失敗しました: {{detail}}", + "data_sync.backend.error.connect_target_redis_failed": "ターゲット Redis への接続に失敗しました: {{detail}}", + "data_sync.backend.error.create_indexes_failed": "インデックス作成に失敗しました: テーブル={{table}}, エラー={{detail}}", + "data_sync.backend.error.create_table_sql_empty": "テーブル {{table}} の自動作成に失敗しました: create-table SQL が空です", + "data_sync.backend.error.create_target_table_failed": "ターゲットテーブルの作成に失敗しました: テーブル={{table}}, エラー={{detail}}", + "data_sync.backend.error.diff_composite_pk_unsupported": "複合主キー ({{columns}}) は差分比較同期でサポートされていません", + "data_sync.backend.error.diff_pk_required": "主キーがありません。差分比較同期はサポートされていません。直接インポートには insert-only または full-overwrite モードを使用してください。", + "data_sync.backend.error.exec_ddl_statement_failed": "{{stage}} に失敗しました: SQL={{sql}}, エラー={{detail}}", + "data_sync.backend.error.execute_source_query_failed": "ソースクエリの実行に失敗しました: {{detail}}", + "data_sync.backend.error.init_source_driver_failed": "ソースデータベースドライバーの初期化に失敗しました: {{detail}}", + "data_sync.backend.error.init_source_mongodb_driver_failed": "ソース MongoDB ドライバーの初期化に失敗しました: {{detail}}", + "data_sync.backend.error.init_target_driver_failed": "ターゲットデータベースドライバーの初期化に失敗しました: {{detail}}", + "data_sync.backend.error.init_target_mongodb_driver_failed": "ターゲット MongoDB ドライバーの初期化に失敗しました: {{detail}}", + "data_sync.backend.error.inspect_mongodb_collection_failed": "ターゲット MongoDB collection の検査に失敗しました: {{detail}}", + "data_sync.backend.error.list_mongodb_collections_failed": "MongoDB collection の一覧取得に失敗しました: {{detail}}", + "data_sync.backend.error.load_target_columns_failed": "ターゲットテーブル列の読み込みに失敗しました: {{detail}}", + "data_sync.backend.error.mongo_document_write_unsupported": "ターゲットドライバーは MongoDB document の書き込みをサポートしていません", + "data_sync.backend.error.mongo_read_source_samples_failed": "ソース MongoDB collection サンプルの読み取りに失敗しました: {{detail}}", + "data_sync.backend.error.mongo_redis_analyze_collection_failed": "MongoDB collection {{collection}} の分析に失敗しました: {{detail}}", + "data_sync.backend.error.mongo_redis_document_key_missing": "MongoDB document に key フィールドがありません", + "data_sync.backend.error.mongo_redis_document_type_missing": "MongoDB document にフィールド {{field}} がありません。Redis Key={{key}}", + "data_sync.backend.error.mongo_redis_empty_target_value": "Redis Key {{key}} のターゲット値が空です", + "data_sync.backend.error.mongo_redis_unsupported_type": "Redis Key {{key}} では型 {{type}} はサポートされていません", + "data_sync.backend.error.mongo_redis_value_invalid": "Redis Key {{key}} の {{type}} payload が無効です。実際の型={{actual}}", + "data_sync.backend.error.mongo_redis_write_key_failed": "Redis Key {{key}} の書き込みに失敗しました: {{detail}}", + "data_sync.backend.error.pre_create_table_sql_failed": "create-table SQL の事前実行に失敗しました: テーブル={{table}}, エラー={{detail}}", + "data_sync.backend.error.prepare_secrets_failed": "データ同期シークレットの準備に失敗しました: {{detail}}", + "data_sync.backend.error.preview_composite_pk_unsupported": "複合主キー({{columns}})はデータプレビューではサポートされていません", + "data_sync.backend.error.preview_failed": "データ同期プレビューに失敗しました: {{detail}}", + "data_sync.backend.error.preview_pk_required": "主キーがないため、データプレビューはサポートされていません", + "data_sync.backend.error.preview_prepare_secrets_failed": "データ同期プレビューのシークレット準備に失敗しました: {{detail}}", + "data_sync.backend.error.read_redis_key_failed": "Redis Key {{key}} の読み取りに失敗しました: {{detail}}", + "data_sync.backend.error.read_source_table_failed": "ソーステーブルの読み取りに失敗しました: {{detail}}", + "data_sync.backend.error.read_source_table_failed_with_table": "ソーステーブル {{table}} の読み取りに失敗しました: {{detail}}", + "data_sync.backend.error.read_target_redis_key_failed": "ターゲット Redis Key {{key}} の読み取りに失敗しました: {{detail}}", + "data_sync.backend.error.read_target_table_failed": "ターゲットテーブルの読み取りに失敗しました: {{detail}}", + "data_sync.backend.error.read_target_table_failed_with_table": "ターゲットテーブル {{table}} の読み取りに失敗しました: {{detail}}", + "data_sync.backend.error.redis_mongo_analyze_changes_failed": "Redis 移行変更の分析に失敗しました: {{detail}}", + "data_sync.backend.error.redis_mongo_apply_changes_failed": "Redis 移行変更の適用に失敗しました: {{detail}}", + "data_sync.backend.error.redis_mongo_build_changes_failed": "Redis 移行変更の構築に失敗しました: {{detail}}", + "data_sync.backend.error.redis_mongo_create_collection_failed": "ターゲット MongoDB collection の作成に失敗しました: {{detail}}", + "data_sync.backend.error.refresh_columns_after_create_failed": "ターゲットテーブル作成後の列読み込みに失敗しました: テーブル={{table}}, エラー={{detail}}", + "data_sync.backend.error.restore_source_secret_failed": "ソースデータベース接続シークレットの復元に失敗しました: {{detail}}", + "data_sync.backend.error.restore_target_secret_failed": "ターゲットデータベース接続シークレットの復元に失敗しました: {{detail}}", + "data_sync.backend.error.scan_redis_keys_failed": "Redis Key のスキャンに失敗しました: {{detail}}", + "data_sync.backend.error.source_collection_no_migratable_fields": "ソース MongoDB collection から移行可能なフィールドを推論できませんでした: {{collection}}", + "data_sync.backend.error.source_table_columns_failed": "ソーステーブル列の取得に失敗しました: {{detail}}", + "data_sync.backend.error.source_table_missing_or_no_columns": "ソーステーブルが存在しないか、列定義がありません: {{table}}", + "data_sync.backend.error.sync_table_schema_failed": "テーブル構造の同期に失敗しました: テーブル={{table}}, エラー={{detail}}", + "data_sync.backend.error.target_collection_check_failed": "ターゲット MongoDB collection の確認に失敗しました: {{detail}}", + "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "ターゲットテーブルは複合主キー ({{columns}}) のため、SQL 結果セット差分分析はサポートされていません", + "data_sync.backend.error.target_pk_required_for_query_diff": "ターゲットテーブルに主キーがないため、SQL 結果セットの差分分析はサポートされていません", + "data_sync.backend.error.target_table_columns_failed": "ターゲットテーブル列の取得に失敗しました: {{detail}}", + "data_sync.backend.error.target_table_columns_missing": "ターゲットテーブル {{table}} が存在しないか、列定義を読み取れません", + "data_sync.backend.label.content_data_only": "データのみ", + "data_sync.backend.label.content_schema_and_data": "構造 + データ", + "data_sync.backend.label.content_schema_only": "構造のみ", + "data_sync.backend.label.mode_full_overwrite": "全量上書き", + "data_sync.backend.label.mode_insert_only": "挿入のみ", + "data_sync.backend.label.mode_insert_update": "差分同期", + "data_sync.backend.label.target_strategy_auto_create_if_missing": "ターゲット未存在時に自動作成", + "data_sync.backend.label.target_strategy_existing_only": "既存ターゲットのみ使用", + "data_sync.backend.label.target_strategy_smart": "ターゲットを自動判定", + "data_sync.backend.log.auto_add_columns_completed": "列の自動補完が完了しました: 成功={{succeeded}}, 失敗={{failed}}", + "data_sync.backend.log.change_counts": "挿入 {{inserts}} 行、更新 {{updates}} 行、削除 {{deletes}} 行が必要です", + "data_sync.backend.log.connecting_source": "ソースデータベースに接続しています: {{host}}...", + "data_sync.backend.log.connecting_target": "ターゲットデータベースに接続しています: {{host}}...", + "data_sync.backend.log.data_already_consistent": "データはすでに一致しています。変更は不要です。", + "data_sync.backend.log.ddl_statement_succeeded": "テーブル {{table}} の {{stage}} が成功しました: {{sql}}", + "data_sync.backend.log.fatal_error": "致命的エラー: {{message}}", + "data_sync.backend.log.missing_columns_auto_add_disabled": "ターゲットテーブルに {{count}} 個の列が不足していますが、自動補完は無効です。これらは無視されます: {{columns}}", + "data_sync.backend.log.missing_columns_auto_add_started": "ターゲットテーブルに {{count}} 個の列が不足しています。自動補完を開始します: {{columns}}", + "data_sync.backend.log.mongo_redis_keyspace_options": "MongoDB から Redis への keyspace 移行; モード={{mode}}; ターゲット={{target}}", + "data_sync.backend.log.mongo_redis_migrating_key": "Redis Key {{key}} を書き込み中", + "data_sync.backend.log.mongo_redis_syncing_collection": "MongoDB collection {{collection}} を同期中", + "data_sync.backend.log.redis_mongo_keyspace_options": "Redis から MongoDB への keyspace 移行; モード={{mode}}; ターゲット戦略={{strategy}}", + "data_sync.backend.log.redis_mongo_migrating_key": "Redis Key {{key}} を移行中", + "data_sync.backend.log.source_query_no_changes": "SQL 結果セットとターゲットテーブルは一致しています。適用する変更はありません", + "data_sync.backend.log.source_query_sync_completed": "SQL 結果セット同期が完了しました: 挿入={{inserts}}, 更新={{updates}}, 削除={{deletes}}", + "data_sync.backend.log.source_query_sync_source": "同期元: SQL 結果セット -> ターゲットテーブル {{table}}、モード: {{mode}}", + "data_sync.backend.log.sync_options": "同期内容: {{content}}; モード: {{mode}}; 列の自動追加: {{autoAddColumns}}; ターゲットテーブル戦略: {{targetTableStrategy}}; インデックス作成: {{createIndexes}}", + "data_sync.backend.log.syncing_table": "テーブルを同期しています: {{table}}", + "data_sync.backend.log.table_no_operations_skipped": "テーブル {{table}} には選択された操作がないためスキップされました", + "data_sync.backend.log.target_table_created": "ターゲットテーブルを作成しました: {{table}}", + "data_sync.backend.log.target_table_no_operations": "ターゲットテーブル {{table}} には選択された操作がないためスキップされました", + "data_sync.backend.log.unknown_sync_content_data_only": "不明な同期内容 {{content}} です。データのみの同期が自動選択されました", + "data_sync.backend.result.analyzed_tables": "{{count}} 個のテーブルの差分分析が完了しました", + "data_sync.backend.result.analyzed_target_tables": "{{count}} 個のターゲットテーブルの差分分析が完了しました", + "data_sync.backend.result.mongo_redis_analyzed_collections": "Redis 移行のため {{count}} 個の MongoDB collection を分析しました", + "data_sync.backend.result.mongo_redis_completed": "MongoDB keyspace 移行が完了しました。{{collections}} 個の collection と {{keys}} 個の Redis Key を処理しました", + "data_sync.backend.result.mongo_redis_no_collections": "移行可能な MongoDB collection がありません", + "data_sync.backend.result.mongo_redis_no_documents": "移行可能な MongoDB Redis document がありません", + "data_sync.backend.result.preview_ready": "データ同期プレビューの準備ができました", + "data_sync.backend.result.redis_mongo_analyzed_keys": "MongoDB 移行のため {{count}} 個の Redis Key を分析しました", + "data_sync.backend.result.redis_mongo_completed": "Redis keyspace 移行が完了しました。{{count}} 個の Redis Key を処理しました", + "data_sync.backend.result.redis_mongo_no_keys": "移行可能な Redis Key がありません", + "data_sync.backend.result.sync_completed": "同期完了: テーブル={{tables}}, 挿入={{rowsInserted}}, 更新={{rowsUpdated}}, 削除={{rowsDeleted}}", + "data_sync.backend.summary.diff_completed": "差分分析が完了しました", + "data_sync.backend.summary.mongo_redis_diff": "実行時に {{inserts}} 個の Redis Key を挿入し、{{updates}} 個の Redis Key を更新します", + "data_sync.backend.summary.mongo_redis_empty_collection": "collection に移行可能な document が見つかりません", + "data_sync.backend.summary.mongo_redis_planned_action": "{{target}} に移行", + "data_sync.backend.summary.mongo_redis_same_keys": "一致する Redis Key はすでに最新です", + "data_sync.backend.summary.mongo_redis_warning_document_format": "key/type/ttl/value フィールドを持つ document のみサポートされます", + "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB から Redis では、DB 内の他の Redis Key を削除しないよう全量上書きを増分同期に切り替えます", + "data_sync.backend.summary.mongo_redis_warning_keyspace": "MongoDB collection 内の document は keyspace セマンティクスで Redis に書き込まれます", + "data_sync.backend.summary.redis_mongo_insert_document": "実行時に新しい MongoDB document を挿入します", + "data_sync.backend.summary.redis_mongo_planned_action": "コレクション {{collection}} に移行", + "data_sync.backend.summary.redis_mongo_same_document": "一致する MongoDB document はすでに最新です", + "data_sync.backend.summary.redis_mongo_update_document": "実行時に既存の MongoDB document を更新します", + "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key は MongoDB document として書き込まれます", + "data_sync.backend.summary.source_query_diff_completed": "SQL 結果セットの差分分析が完了しました", + "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view セマンティクスは、まだ PG-like ターゲットへ自動移行されません", + "data_sync.backend.validation.query_mode_data_only": "SQL 結果セット同期は現在、データのみの同期に対応しています", + "data_sync.backend.validation.single_target_table_required": "SQL 結果セット同期ではターゲットテーブルを 1 つだけ選択する必要があります", + "data_sync.backend.validation.source_query_required": "ソースクエリ SQL は必須です", + "data_sync.backend.validation.target_table_required": "ターゲットテーブルは必須です", + "data_sync.backend.warning.apply_changes_unsupported": "ターゲットドライバーはデータ変更の適用をサポートしていません。", + "data_sync.backend.warning.auto_add_column_sql_generation_failed": "列 {{column}} の自動追加 SQL 生成に失敗しました: {{detail}}", + "data_sync.backend.warning.auto_create_pair_unsupported": "自動テーブル作成は現在 MySQL -> Kingbase のみサポートしています。現在の組み合わせ={{sourceType}} -> {{targetType}}", + "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "列 {{column}} は自動増分列です。既存ターゲットテーブルに追加する際、{{feature}} は自動再作成されません", + "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "列 {{column}} の型 {{type}} は json に降格されました", + "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "列 {{column}} の型 {{type}} は jsonb に降格されました", + "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "列 {{column}} の enum 型 {{type}} は varchar(255) に降格されました", + "data_sync.backend.warning.clickhouse_order_by_tuple_used": "ソース主キーが検出されなかったため、ClickHouse は ORDER BY tuple() を使用します。クエリ性能に影響する可能性があります", + "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse はリレーショナル外部キーまたは一意制約のセマンティクスを保持しません。列とデータのみ移行されます", + "data_sync.backend.warning.clickhouse_source_metadata_limited": "ClickHouse ソースのインデックスと制約メタデータは限定的です。逆方向移行は列とデータを中心に行います", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "ClickHouse ソースが主キー情報を返さなかったため、ターゲット MySQL テーブルは主キーを自動作成しません", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "ClickHouse ソースが主キー情報を返さなかったため、ターゲット PG-like テーブルは主キーを自動作成しません", + "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "ClickHouse ターゲットでは insert-only または full-overwrite を推奨します。update/delete セマンティクスは従来のリレーショナルデータベースと異なります", + "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "列 {{column}} の型 {{type}} には専用の MySQL マッピングがないため、text に降格されました", + "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "列 {{column}} の型 {{type}} には専用の PG-like マッピングがないため、text に降格されました", + "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "列 {{column}} の型 {{type}} は unsigned オーバーフローを避けるため numeric(20,0) にマッピングされました", + "data_sync.backend.warning.column_default_expression_skipped": "列 {{column}} のデフォルト値 {{default}} には式が含まれるため、現在は自動移行されません", + "data_sync.backend.warning.column_empty_string_default_not_preserved": "列 {{column}} の空文字列デフォルト値は保持されませんでした", + "data_sync.backend.warning.column_type_degraded": "列 {{column}} の型 {{sourceType}} は {{targetType}} に降格されました", + "data_sync.backend.warning.column_type_degraded_clickhouse_string": "列 {{column}} の型 {{type}} は String に降格されました", + "data_sync.backend.warning.column_type_empty_clickhouse_string": "列 {{column}} の型が空のため、String に降格されました", + "data_sync.backend.warning.column_type_empty_degraded": "列 {{column}} の型が空のため、{{targetType}} に降格されました", + "data_sync.backend.warning.column_type_mapped": "列 {{column}} の型 {{sourceType}} は {{targetType}} にマッピングされました", + "data_sync.backend.warning.column_type_no_mapping_degraded": "列 {{column}} の型 {{sourceType}} には専用マッピングがないため、{{targetType}} に降格されました", + "data_sync.backend.warning.column_user_defined_degraded": "列 {{column}} はユーザー定義型のため、{{targetType}} に降格されました", + "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "列 {{column}} はユーザー定義型のため、String に降格されました", + "data_sync.backend.warning.composite_pk_skipped": "テーブル {{table}} は複合主キー ({{columns}}) です。差分同期はまだサポートされていないためスキップされました", + "data_sync.backend.warning.full_overwrite_clearing_target": "全量上書きモード: ターゲットテーブル {{table}} をクリアします", + "data_sync.backend.warning.index_columns_missing": "インデックス {{name}} には列定義がないため、スキップされました", + "data_sync.backend.warning.index_prefix_length_unsupported": "インデックス {{name}} はプレフィックス長を使用しているため、現在は移行できません", + "data_sync.backend.warning.index_type_unsupported": "インデックス {{name}} の種類={{type}} は現在、自動移行できません", + "data_sync.backend.warning.load_target_columns_skip_check_failed": "ターゲットテーブル列の取得に失敗したため、列整合性チェックをスキップしました: {{detail}}", + "data_sync.backend.warning.mongo_redis_document_format": "MongoDB から Redis への移行は現在 key/type/ttl/value フィールドを持つ document のみ対応しています", + "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "MongoDB から Redis への移行では、全量上書きを差分同期に降格します", + "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "列 {{column}} の AUTO_INCREMENT は ClickHouse の自動増分セマンティクスとして保持されません", + "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "列 {{column}} のバイナリ型は String に降格されました", + "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "列 {{column}} の型 {{type}} は String に降格されました", + "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "列 {{column}} の型 {{type}} には専用の ClickHouse マッピングがないため、String に降格されました", + "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "列 {{column}} は unsigned bigint auto_increment です。{{targetType}} に降格され、自動増分セマンティクスは保持されません", + "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "列 {{column}} の identity/自動増分セマンティクスは ClickHouse に保持されません", + "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "Redis から MongoDB への移行では、全量上書きを差分同期に降格します", + "data_sync.backend.warning.refresh_columns_after_add_failed": "列追加後のターゲット列更新に失敗しました: テーブル={{table}}, エラー={{detail}}", + "data_sync.backend.warning.source_indexes_read_failed": "ソーステーブルのインデックス読み取りに失敗したため、インデックス移行をスキップしました: {{detail}}", + "data_sync.backend.warning.table_pk_required_skipped": "テーブル {{table}} に主キーがありません。現在のモードでは差分比較が必要なためスキップされました", + "data_sync.backend.warning.target_existing_only_required": "現在の戦略ではターゲットテーブルが存在している必要があるため、実行時に自動作成されません。", + "data_sync.backend.warning.target_exists_data_only_no_indexes": "ターゲットテーブルはすでに存在します。データインポートのみ実行され、既存のインデックスと制約は自動再構築されません。", + "data_sync.backend.warning.target_missing_columns": "ターゲットテーブルに {{count}} 個の列が不足しています: {{columns}}", + "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "{{table}} のターゲットテーブルがありません。現在の戦略では自動作成が許可されていないためスキップされました", + "data_sync.backend.warning.target_table_existing_only_required": "現在の戦略ではターゲットテーブルが存在している必要があるため、実行時に自動作成されません。", + "data_sync.backend.warning.unknown_content_default_data": "不明な同期内容 {{content}} です。データのみの同期が自動選択されました", + "data_sync.backend.warning.unknown_mode_default_insert_update": "不明な同期モード {{mode}} です。増分同期が自動選択されました", + "data_sync.badge.migration_mode": "移行モード", + "data_sync.badge.source_pending": "ソース未選択", + "data_sync.badge.source_selected": "ソース選択済み", + "data_sync.badge.sync_mode": "同期モード", + "data_sync.badge.table_count": "{{count}} テーブル", + "data_sync.compare_entry.action.return_to_compare": "比較へ戻る", + "data_sync.compare_entry.alert.data": "現在はデータ比較の入口です。主キーに基づく行単位の差分分析のみを行い、書き込みは実行しません。", + "data_sync.compare_entry.alert.schema": "現在はテーブル構造比較の入口です。構造差分の分析と確認用 SQL の生成のみを行い、変更は実行しません。", + "data_sync.compare_entry.option.auto_add_columns": "対象テーブルの不足カラムに対する互換変更 SQL を生成(プレビューのみ、実行しません)", + "data_sync.compare_entry.option.source_dataset.query": "SQL 結果セットで比較", + "data_sync.compare_entry.option.source_dataset.table": "テーブルで比較", + "data_sync.compare_entry.preview.selection_hint": "行選択は SQL プレビュー範囲にのみ影響し、書き込みは実行しません。", + "data_sync.compare_entry.preview.sql.data_help": "SQL プレビューは、現在選択されている挿入、更新、削除、および行範囲から生成され、差分確認にのみ使用します。", + "data_sync.compare_entry.preview.sql.schema_help": "SQL プレビューには構造差分の推奨文が表示され、差分確認にのみ使用します。", + "data_sync.compare_entry.result.completed": "比較が完了しました", + "data_sync.compare_entry.result.failed": "比較に失敗しました", + "data_sync.compare_entry.result.running": "比較中", + "data_sync.compare_entry.result.running_description": "現在の段階:{{stage}}{{table}}", + "data_sync.compare_entry.result.stage_fallback": "実行中", + "data_sync.compare_entry.result.success_summary": "{{tables}} 個のテーブルを比較しました。", + "data_sync.compare_entry.result.table_suffix": "、テーブル:{{table}}", + "data_sync.compare_entry.title.analysis_log": "分析ログ", + "data_sync.compare_entry.workflow_help": "この入口では差分分析とプレビューのみを行います。同期、テーブル作成、カラム追加、データ削除は実行しません。", + "data_sync.confirm.full_overwrite.content": "全量上書きはターゲットテーブルのデータを消去してから行を挿入します。ターゲットデータベースのバックアップを確認してください。", + "data_sync.confirm.full_overwrite.ok": "続行", + "data_sync.confirm.full_overwrite.title": "全量上書きの確認", + "data_sync.diff.column.delete": "削除", + "data_sync.diff.column.insert": "挿入", + "data_sync.diff.column.plan": "計画", + "data_sync.diff.column.preview": "プレビュー", + "data_sync.diff.column.risk": "リスク", + "data_sync.diff.column.same": "同一", + "data_sync.diff.column.table": "テーブル名", + "data_sync.diff.column.target_table": "ターゲットテーブル", + "data_sync.diff.column.update": "更新", + "data_sync.diff.more_warnings": "ほか {{count}} 件は未表示", + "data_sync.diff.target_exists": "存在", + "data_sync.diff.target_missing": "なし", + "data_sync.diff.title": "比較結果", + "data_sync.diff.warning_title": "事前チェックでリスクまたは縮退項目が見つかりました。実行前に確認してください。", + "data_sync.entry_mode.compare.action.start": "比較を開始", + "data_sync.entry_mode.compare.option_title": "比較オプション", + "data_sync.entry_mode.compare.result_title": "比較結果", + "data_sync.entry_mode.data_compare.badge": "データ比較", + "data_sync.entry_mode.data_compare.description": "主キーに基づいてソース表とターゲット表のデータ差分を比較し、追加、更新、削除の詳細を確認します。", + "data_sync.entry_mode.data_compare.hero_description": "両端のデータ整合性を確認する場合に適しています。差分分析と行単位のプレビューのみを行い、書き込みは実行しません。", + "data_sync.entry_mode.data_compare.table_select_label": "データを比較するテーブルを選択してください:", + "data_sync.entry_mode.data_compare.title": "データ比較", + "data_sync.entry_mode.schema_compare.badge": "構造比較", + "data_sync.entry_mode.schema_compare.description": "ソース表とターゲット表の構造差分、互換性リスク、確認用 SQL を生成します。", + "data_sync.entry_mode.schema_compare.hero_description": "リリース前に両端のテーブル構造差分を確認する場合に適しています。分析とプレビューのみを行い、構造変更は実行しません。", + "data_sync.entry_mode.schema_compare.table_select_label": "構造を比較するテーブルを選択してください:", + "data_sync.entry_mode.schema_compare.title": "テーブル構造比較", + "data_sync.entry_mode.sync.hero_description": "ターゲット表が既に存在する場合に適しています。先に差分分析を行い、選択した挿入、更新、削除を実行します。", + "data_sync.field.connection": "接続", + "data_sync.field.database": "データベース", + "data_sync.field.migration_content": "移行内容", + "data_sync.field.migration_mode": "移行モード", + "data_sync.field.mongo_collection_name": "Mongo コレクション名(任意)", + "data_sync.field.schema": "スキーマ", + "data_sync.field.source_dataset_mode": "ソースデータ方式", + "data_sync.field.source_query_sql": "ソースクエリ SQL", + "data_sync.field.sync_content": "同期内容", + "data_sync.field.sync_mode": "同期モード", + "data_sync.field.target_table": "ターゲットテーブル", + "data_sync.field.target_table_requirement": "ターゲットテーブル要件", + "data_sync.field.target_table_strategy": "ターゲットテーブル処理方針", + "data_sync.field.workflow_type": "機能タイプ", + "data_sync.help.mongo_collection_mongo_to_redis": "MongoDB から Redis の場合、多くはソースコレクションを直接選択します。明示的なフォールバック名が必要な場合だけ入力してください。", + "data_sync.help.mongo_collection_redis_to_mongo": "空欄の場合は既定のコレクション名を使用します。入力すると、この実行では Redis キースペースを指定した Mongo コレクションへ書き込みます。", + "data_sync.help.select_tables": "同期するテーブルを選択:", + "data_sync.help.source_query_mode": "ソースクエリ SQL を入力し、ターゲットテーブルを 1 つ選択してください。差分分析はこの結果セットをターゲットテーブルと直接比較します。", + "data_sync.help.workflow_type": "既存ターゲットテーブルの同期か、クロスデータベース移行かを選択してください。画面は機能タイプに応じてより安全な既定値に調整されます。", + "data_sync.hero.migration_description": "ソーステーブルを別のデータベースへ移し、方針に従ってテーブル作成、データインポート、互換インデックス追加を行います。", + "data_sync.hero.migration_title": "クロスデータソース移行", + "data_sync.hero.sync_description": "既存ターゲットテーブルを基準に差分を比較し、選択した挿入、更新、削除を実行します。", + "data_sync.hero.sync_title": "データ同期", + "data_sync.log.level.error": "エラー", + "data_sync.log.level.info": "情報", + "data_sync.log.level.warn": "警告", + "data_sync.log.title": "実行ログ", + "data_sync.message.analysis_complete": "差分分析が完了しました", + "data_sync.message.analysis_failed": "差分分析に失敗しました", + "data_sync.message.analysis_failed_detail": "差分分析に失敗しました: {{detail}}", + "data_sync.message.analyze_before_sync": "同期を開始する前に差分を分析してください", + "data_sync.message.close_blocked_running": "同期を実行中です。まだウィンドウを閉じられません。", + "data_sync.message.fetch_source_databases_failed": "ソースデータベースの取得に失敗しました", + "data_sync.message.fetch_source_databases_failed_detail": "ソースデータベースの取得に失敗しました: {{detail}}", + "data_sync.message.fetch_tables_failed": "テーブル一覧の取得に失敗しました", + "data_sync.message.fetch_tables_failed_detail": "テーブル一覧の取得に失敗しました: {{detail}}", + "data_sync.message.fetch_target_databases_failed": "ターゲットデータベースの取得に失敗しました", + "data_sync.message.fetch_target_databases_failed_detail": "ターゲットデータベースの取得に失敗しました: {{detail}}", + "data_sync.message.fetch_target_schemas_failed_detail": "ターゲットスキーマの取得に失敗しました: {{detail}}", + "data_sync.message.more_items_collapsed": "ほか {{count}} 件は未表示", + "data_sync.message.precheck_warnings": "事前チェックでリスクまたは縮退項目が見つかりました。実行前に確認してください。", + "data_sync.message.preview_load_failed": "差分プレビューの読み込みに失敗しました", + "data_sync.message.preview_load_failed_detail": "差分プレビューの読み込みに失敗しました: {{detail}}", + "data_sync.message.select_connections_first": "先に接続を選択してください", + "data_sync.message.select_databases_first": "先にデータベースを選択してください", + "data_sync.message.select_source_database": "ソースデータベースを選択してください", + "data_sync.message.select_target_database": "ターゲットデータベースを選択してください", + "data_sync.message.select_target_schema": "ターゲットスキーマを選択してください", + "data_sync.message.sync_execution_failed": "同期実行に失敗しました", + "data_sync.message.sync_execution_failed_detail": "同期実行に失敗しました: {{detail}}", + "data_sync.modal.full_overwrite_content": "全量上書きはターゲットテーブルのデータを消去してから行を挿入します。ターゲットデータベースのバックアップを確認してください。", + "data_sync.modal.full_overwrite_ok": "続行", + "data_sync.modal.full_overwrite_title": "全量上書きの確認", + "data_sync.option.auto_add_columns": "ターゲットテーブルに不足している列を自動追加(現在は MySQL ターゲットおよび MySQL から Kingbase に対応。SQL 結果セットモードは未対応)", + "data_sync.option.content.both": "スキーマとデータを同期", + "data_sync.option.content.data": "データのみ", + "data_sync.option.content.schema": "スキーマのみ", + "data_sync.option.create_indexes": "互換性のある通常インデックスと一意インデックスを自動移行(自動テーブル作成時のみ有効)", + "data_sync.option.show_same_tables": "同一テーブルを表示", + "data_sync.option.source_dataset.query": "SQL 結果セットで同期", + "data_sync.option.source_dataset.table": "テーブルで同期", + "data_sync.option.sync_mode.full_overwrite": "全量上書き(ターゲットテーブルを消去してから挿入)", + "data_sync.option.sync_mode.insert_only": "挿入のみ(ターゲット比較なし。主キーのないテーブルはスキップ)", + "data_sync.option.sync_mode.insert_update": "増分同期(差分を比較してから挿入、更新、削除を選択)", + "data_sync.option.target_strategy.auto_create_if_missing": "ターゲットテーブルがない場合は自動作成", + "data_sync.option.target_strategy.existing_only": "既存ターゲットテーブルのみ使用", + "data_sync.option.target_strategy.smart": "スマートモード(存在すれば直接インポート、なければ自動作成)", + "data_sync.option.workflow.migration": "クロスデータベース移行(自動作成後にインポート)", + "data_sync.option.workflow.sync": "データ同期(既存ターゲットテーブルとの差分を同期)", + "data_sync.placeholder.mongo_collection_name": "Mongo コレクション名を入力", + "data_sync.placeholder.source_query_sql": "例: SELECT id, name, email FROM users WHERE status = 'active'", + "data_sync.placeholder.target_table": "ターゲットテーブルを 1 つ選択", + "data_sync.plan.add_missing_columns_before_import": "{{count}} 個の不足フィールドを補完してからインポート", + "data_sync.plan.auto_create_unsupported": "現在のデータベース組み合わせでは自動テーブル作成をサポートしていません", + "data_sync.plan.backend_summary": "計画サマリー", + "data_sync.plan.data_import_without_diff": "現在のモードは差分比較なしでソーステーブルデータをインポートします。", + "data_sync.plan.migrate_to_collection": "コレクション {{collection}} に移行", + "data_sync.plan.migrate_to_target": "{{target}} に移行", + "data_sync.plan.migration_kernel_planning": "現在のデータベース組み合わせは移行計画段階に入り、構造推論とターゲット方言生成の対応を待っています", + "data_sync.plan.missing_columns_auto_add": "{{count}} 個の不足フィールドを補完してからインポート", + "data_sync.plan.missing_columns_auto_add_disabled": "ターゲットテーブルに {{count}} 個のフィールドが不足していますが、自動補完は有効化されていません", + "data_sync.plan.missing_columns_auto_add_unsupported": "ターゲットテーブルに {{count}} 個のフィールドが不足しており、現在のデータベース組み合わせでは自動補完をサポートしていません", + "data_sync.plan.missing_columns_no_executable_sql": "ターゲットテーブルに {{count}} 個のフィールドが不足していますが、実行可能な補完 SQL は生成されませんでした", + "data_sync.plan.mongo_relational_entry_warning": "{{sourceType}} から {{targetType}} への {{objectKind}} 移行では、現在は構造推論の計画通知のみ利用できます", + "data_sync.plan.mongo_relational_kernel_planned": "現在のデータベース組み合わせは移行計画段階に入り、構造推論とターゲット方言生成の対応を待っています", + "data_sync.plan.mongo_target_collection_missing_auto_create": "ターゲット MongoDB collection {{collection}} がありません。インポート前に自動作成されます。", + "data_sync.plan.mongo_target_collection_missing_manual_create": "ターゲット MongoDB collection {{collection}} がありません。先に手動で作成してください。", + "data_sync.plan.redis_key_to_mongodb_document": "Redis Key から MongoDB ドキュメントを生成してインポート", + "data_sync.plan.redis_mongo_keyspace_import": "Redis Key から MongoDB ドキュメントを生成してインポート", + "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis から MongoDB への移行は keyspace セマンティクスで行われ、テーブル構造チェックは実行されません", + "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Redis TTL と collection の順序セマンティクスは document フィールドとして保持されますが、完全に等価とは限りません", + "data_sync.plan.redis_mongo_target_collection_auto_create": "ターゲットコレクションが存在しないため、自動作成後にインポートします", + "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "現在の戦略では既存のターゲット MongoDB collection が必要です。実行時に自動作成されません", + "data_sync.plan.redis_mongo_target_collection_missing_manual": "ターゲットコレクションが存在しないため、先に手動で作成してください", + "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state はまだ移行されません", + "data_sync.plan.schema_aligned": "テーブル構造は一致しています", + "data_sync.plan.schema_changes_detected": "{{count}} 件の構造変更を検出", + "data_sync.plan.schema_only": "構造のみ同期", + "data_sync.plan.schema_only_no_data_diff": "構造のみ同期し、データ差分分析は実行していません", + "data_sync.plan.schema_preview": "構造プレビュー", + "data_sync.plan.source_query_preview": "SQL 結果セット同期プレビュー", + "data_sync.plan.target_collection_missing_auto_create": "ターゲットコレクションが存在しないため、自動作成後にインポートします", + "data_sync.plan.target_collection_missing_manual_create": "ターゲットコレクションが存在しないため、先に手動で作成してください", + "data_sync.plan.target_missing_auto_create": "ターゲットテーブルが存在しないため、自動作成後にインポートします", + "data_sync.plan.target_missing_auto_create_all": "ターゲットテーブルが存在しないため、実行時に自動作成してすべてのソースデータをインポートします", + "data_sync.plan.target_missing_cannot_sync": "ターゲットテーブルが存在しないため、同期を実行できません", + "data_sync.plan.target_missing_manual_create": "ターゲットテーブルが存在しないため、先に手動で作成してください", + "data_sync.plan.target_missing_preview_unavailable": "ターゲットテーブルがありません。差分プレビューは利用できません。", + "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "ソーステーブルで TDengine の先頭列にマッピングできる時刻列を識別できないため、自動テーブル作成はできません", + "data_sync.plan.tdengine_time_column_missing": "ソーステーブルで TDengine の先頭列にマッピングできる時刻列を識別できないため、自動テーブル作成はできません", + "data_sync.plan.use_existing_target": "既存のターゲットテーブルにインポート", + "data_sync.plan.use_existing_target_collection": "既存のターゲットコレクションにインポート", + "data_sync.plan.use_existing_target_table": "既存のターゲットテーブルにインポート", + "data_sync.preview.action.copy_sql": "SQL をコピー", + "data_sync.preview.column.changed_columns": "変更列", + "data_sync.preview.column.data": "データ", + "data_sync.preview.column.detail": "詳細", + "data_sync.preview.column.primary_key": "主キー", + "data_sync.preview.data_summary": "挿入 {{inserts}}、更新 {{updates}}、削除 {{deletes}}(プレビューは種類ごとに最大 200 行)", + "data_sync.preview.delete_warning": "削除は既定では選択されません。業務影響を確認してから有効にしてください。", + "data_sync.preview.loading": "差分プレビューを読み込み中...", + "data_sync.preview.message.copy_failed": "コピーに失敗しました。手動でコピーしてください。", + "data_sync.preview.message.sql_copied": "SQL をコピーしました", + "data_sync.preview.schema_plan_help": "このスキーマ同期で実行予定の文を以下に表示します。", + "data_sync.preview.schema_statement_count": "{{count}} 件のスキーマ変更文を検出しました", + "data_sync.preview.schema_warning_title": "スキーマプレビューにリスクまたは縮退項目があります", + "data_sync.preview.selection_hint.delete": "行を選択しない場合、すべての削除差分を同期します。削除を行わない場合は比較結果で削除を解除してください。", + "data_sync.preview.selection_hint.insert": "行を選択しない場合、すべての挿入差分を同期します。挿入を行わない場合は比較結果で挿入を解除してください。", + "data_sync.preview.selection_hint.update": "行を選択しない場合、すべての更新差分を同期します。更新を行わない場合は比較結果で更新を解除してください。", + "data_sync.preview.side.source": "ソース", + "data_sync.preview.side.target": "ターゲット", + "data_sync.preview.sql.data_help": "SQL プレビューは、選択された挿入、更新、削除、行範囲から確認用に生成されます。", + "data_sync.preview.sql.no_data_sql": "-- 現在の選択範囲ではプレビュー可能な SQL はありません", + "data_sync.preview.sql.no_schema_changes": "-- 現在のテーブルには実行可能なスキーマ変更がありません", + "data_sync.preview.sql.schema_help": "SQL プレビューには、実行予定のスキーマ変更文が確認用に表示されます。", + "data_sync.preview.sql.schema_statement_count": "{{count}} 件のスキーマ変更文", + "data_sync.preview.sql.statement_count": "{{count}} 件の文(プレビューデータは種類ごとに最大 200 行)", + "data_sync.preview.tab.delete": "削除({{count}})", + "data_sync.preview.tab.insert": "挿入({{count}})", + "data_sync.preview.tab.schema": "スキーマ({{count}})", + "data_sync.preview.tab.sql": "SQL({{count}})", + "data_sync.preview.tab.update": "更新({{count}})", + "data_sync.preview.title": "差分プレビュー: {{table}}", + "data_sync.preview.update_detail_title": "更新詳細: {{table}} / {{pk}}", + "data_sync.progress.stage.analysis_completed": "差分分析が完了", + "data_sync.progress.stage.analysis_started": "差分分析を開始", + "data_sync.progress.stage.analyzing_diff": "差分分析中", + "data_sync.progress.stage.analyzing_table": "テーブルを分析中({{current}}/{{total}})", + "data_sync.progress.stage.applying_changes": "変更を適用中", + "data_sync.progress.stage.backend_update": "進捗を処理中", + "data_sync.progress.stage.checking_columns": "フィールドの整合性を確認中", + "data_sync.progress.stage.clearing_target": "ターゲットテーブルをクリア中", + "data_sync.progress.stage.collection_completed": "コレクション処理が完了", + "data_sync.progress.stage.comparing_diff": "差分を比較中", + "data_sync.progress.stage.completed": "同期が完了", + "data_sync.progress.stage.connecting_source": "ソースデータベースに接続中", + "data_sync.progress.stage.connecting_target": "ターゲットデータベースに接続中", + "data_sync.progress.stage.creating_indexes": "インデックスを作成中", + "data_sync.progress.stage.creating_target_collection": "ターゲットコレクションを作成中", + "data_sync.progress.stage.creating_target_table": "ターゲットテーブルを作成中", + "data_sync.progress.stage.executing": "実行中", + "data_sync.progress.stage.failed": "同期に失敗", + "data_sync.progress.stage.migrating_collection": "コレクションを移行中({{current}}/{{total}})", + "data_sync.progress.stage.migrating_key": "Key を移行中({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_collection_completed": "コレクション処理が完了", + "data_sync.progress.stage.mongo_redis_migrating_collection": "コレクションを移行中({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_started": "MongoDB から Redis への keyspace 移行を開始しました", + "data_sync.progress.stage.mongodb_keyspace_started": "MongoDB キースペース移行を開始", + "data_sync.progress.stage.preparing": "準備中", + "data_sync.progress.stage.reading_source": "ソーステーブルデータを読み取り中", + "data_sync.progress.stage.reading_target": "ターゲットテーブルデータを読み取り中", + "data_sync.progress.stage.redis_keyspace_started": "Redis キースペース移行を開始", + "data_sync.progress.stage.redis_mongo_creating_collection": "ターゲットコレクションを作成中", + "data_sync.progress.stage.redis_mongo_migrating_key": "Key を移行中({{current}}/{{total}})", + "data_sync.progress.stage.redis_mongo_started": "Redis から MongoDB への keyspace 移行を開始しました", + "data_sync.progress.stage.sync_started": "同期を開始", + "data_sync.progress.stage.syncing_schema": "テーブル構造を同期中", + "data_sync.progress.stage.syncing_table": "テーブルを同期中({{current}}/{{total}})", + "data_sync.progress.stage.table_completed": "テーブル処理が完了", + "data_sync.query_mode.help": "ソースクエリ SQL を入力し、ターゲットテーブルを 1 つ選択してください。差分分析はこの結果セットをターゲットテーブルと直接比較します。", + "data_sync.result.completed": "同期完了", + "data_sync.result.failed": "同期失敗", + "data_sync.result.failed_description": "同期は完了しませんでした。", + "data_sync.result.failed_detail": "同期に失敗しました: {{detail}}", + "data_sync.result.running": "同期実行中", + "data_sync.result.running_description": "現在の段階: {{stage}}{{table}}", + "data_sync.result.success_summary": "{{tables}} テーブルを同期しました。挿入: {{inserted}}、更新: {{updated}}", + "data_sync.result.table_suffix": "、テーブル: {{table}}", + "data_sync.schema_inference.mongo_relational_issue": "{{sourceType}} -> {{targetType}} の構造推論はまだ開発中です。現在は移行計画の通知のみ利用できます。", + "data_sync.schema_inference.mongo_relational_resolution": "今後の反復で、サンプルデータから列定義と型降格ポリシーを生成します。", + "data_sync.schema_sync.error.create_statement_empty": "create-table 文が空です", + "data_sync.schema_sync.error.create_target_table_failed": "ターゲットテーブル {{table}} の作成に失敗しました: {{detail}}", + "data_sync.schema_sync.error.get_columns_after_create_failed": "ターゲットテーブル {{table}} 作成後の列取得に失敗しました: {{detail}}", + "data_sync.schema_sync.error.get_create_statement_failed": "ソーステーブル {{table}} の create-table 文取得に失敗しました: {{detail}}", + "data_sync.schema_sync.error.get_source_columns_failed": "ソーステーブル {{table}} の列取得に失敗しました: {{detail}}", + "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "ターゲットテーブル {{table}} がなく、ソース型 {{sourceType}} は自動テーブル作成をまだサポートしていません: {{detail}}", + "data_sync.schema_sync.log.add_column_failed": "列追加に失敗しました: テーブル={{table}}, 列={{column}}, エラー={{detail}}", + "data_sync.schema_sync.log.column_added": "列を追加しました: テーブル={{table}}, 列={{column}}, 型={{type}}", + "data_sync.schema_sync.log.completed": "構造同期が完了しました: {{table}}、追加列 {{count}} 個", + "data_sync.schema_sync.log.schema_aligned": "テーブル構造は一致しています: {{table}}", + "data_sync.schema_sync.log.target_created": "ターゲットテーブルを作成しました: {{table}}", + "data_sync.schema_sync.log.target_missing_create": "ターゲットテーブル {{table}} がありません。テーブル構造の作成を試行します", + "data_sync.schema_sync.warning.target_unsupported": "ターゲットデータベース型={{targetType}} は構造同期をまだサポートしていません。テーブル {{table}} はスキップされました", + "data_sync.section.migration_options": "移行オプション", + "data_sync.section.source_database": "ソースデータベース", + "data_sync.section.sync_options": "同期オプション", + "data_sync.section.target_database": "ターゲットデータベース", + "data_sync.step.configure": "ソースとターゲットを設定", + "data_sync.step.result": "実行結果", + "data_sync.step.select_tables": "テーブルを選択", + "data_sync.table_picker.help": "同期するテーブルを選択:", + "data_sync.table_picker.item_unit": "件", + "data_sync.table_picker.items_unit": "件", + "data_sync.table_picker.not_found": "データがありません", + "data_sync.table_picker.search_placeholder": "テーブルを検索...", + "data_sync.table_picker.selected_title": "選択済みテーブル", + "data_sync.table_picker.show_same": "同一テーブルを表示", + "data_sync.table_picker.source_title": "ソーステーブル", + "data_sync.table.delete": "削除", + "data_sync.table.insert": "挿入", + "data_sync.table.plan": "計画", + "data_sync.table.preview": "プレビュー", + "data_sync.table.risk": "リスク", + "data_sync.table.same": "同一", + "data_sync.table.table_name": "テーブル名", + "data_sync.table.target_exists": "存在", + "data_sync.table.target_missing": "なし", + "data_sync.table.target_table": "ターゲットテーブル", + "data_sync.table.update": "更新", + "data_sync.title.compare_result": "比較結果", + "data_sync.title.execution_log": "実行ログ", + "data_sync.title.migration": "クロスデータソース移行", + "data_sync.title.migration_description": "ソースからターゲットまでのテーブル作成、インポート、リスク事前チェックを実行します。", + "data_sync.title.migration_options": "移行オプション", + "data_sync.title.migration_workbench": "クロスデータベース移行ワークベンチ", + "data_sync.title.source_database": "ソースデータベース", + "data_sync.title.sync": "データ同期", + "data_sync.title.sync_description": "既存ターゲットテーブルとの差分比較、同期実行、結果確認を行います。", + "data_sync.title.sync_options": "同期オプション", + "data_sync.title.sync_workbench": "データ同期ワークベンチ", + "data_sync.title.target_database": "ターゲットデータベース", + "data_sync.transfer.empty": "データがありません", + "data_sync.transfer.item_unit": "件", + "data_sync.transfer.items_unit": "件", + "data_sync.transfer.search_placeholder": "テーブルを検索...", + "data_sync.transfer.selected_tables": "選択済みテーブル", + "data_sync.transfer.source_tables": "???????", + "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "ソース ORDER BY/PARTITION/TTL/Projection/materialized-view セマンティクスは、まだ TDengine に自動移行されません", + "data_sync.unsupported.mongo_index_columns_missing": "インデックス {{name}} に列定義がないためスキップされました", + "data_sync.unsupported.mongo_index_create_command_failed": "インデックス {{name}} の MongoDB createIndexes コマンド生成に失敗しました: {{detail}}", + "data_sync.unsupported.mongo_index_prefix_length": "インデックス {{name}} はプレフィックス長を使用しています。MongoDB への等価移行はまだサポートされていません", + "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "ソースのインデックス、外部キー、トリガー、一意制約、自動増分セマンティクスは、まだ TDengine に自動移行されません", + "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "ソースのインデックス、外部キー、トリガー、一意制約、identity、sequence セマンティクスは、まだ TDengine に自動移行されません", + "data_sync.unsupported.tdengine_source_relational_semantics": "TDengine のインデックス、外部キー、トリガー、supertable、TTL、その他の時系列セマンティクスはまだ自動移行されません", + "data_sync.unsupported.tdengine_target_missing_timestamp": "TDengine regular table の最初の列は TIMESTAMP である必要があります。現在のソーステーブルには直接マッピング可能な時刻列がありません", + "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "ソースの supertable、TAGS、TTL、retention policy、インデックスセマンティクスは、まだ TDengine regular table に自動移行されません", + "data_sync.validation.query_mode_data_only": "SQL 結果セット同期はデータのみの同期に対応しています", + "data_sync.validation.single_target_table_required": "SQL 結果セット同期ではターゲットテーブルを 1 つ選択してください", + "data_sync.validation.source_query_required": "ソースクエリ SQL を入力してください", + "data_sync.validation.table_required": "少なくとも 1 つのテーブルを選択してください", + "data_sync.warning.mongo_field_mixed_bson_types": "フィールド {{field}} には複数の BSON 値型があり、互換型に降格されました", + "data_sync.warning.mongo_index_type_normalized": "インデックス {{name}} の種類={{type}} は通常インデックスとして MongoDB に移行されます", + "data_sync.warning.mongo_source_collection_index_read_failed": "ソース MongoDB collection のインデックス読み取りに失敗したため、インデックス移行をスキップしました: {{detail}}", + "data_sync.warning.mongo_source_empty_sample_id_only": "ソース MongoDB collection にサンプルデータがないため、`_id` から基本主キー列のみ生成します", + "data_sync.warning.mongo_source_primary_key_missing": "ソース MongoDB collection から安定した主キーを推論できませんでした。ターゲットテーブルは主キーを自動作成しません", + "data_sync.warning.mongo_source_table_index_read_failed": "ソーステーブルのインデックス読み取りに失敗したため、インデックス移行をスキップしました: {{detail}}", + "data_sync.warning.mongo_target_collection_existing_only_required": "現在の戦略ではターゲット MongoDB collection が存在している必要があるため、実行時に自動作成されません", + "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB は弱い構造のターゲットです。フィールド構造は書き込まれる document に従い、ターゲット列チェックは実行されません", + "data_sync.warning.target_exists_strategy_no_auto_create": "現在の戦略ではターゲットテーブルが存在している必要があるため、実行時に自動作成されません。", + "data_sync.warning.target_missing_columns": "ターゲットテーブルに {{count}} 個の列が不足しています: {{columns}}", + "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "TDengine ソースは既存ターゲットテーブルへの列自動追加をまだ行いません。先にターゲット構造を確認してください", + "data_sync.warning.tdengine_source_mysql_type_fallback": "列 {{column}} の型 {{type}} には専用の MySQL マッピングがないため、{{targetType}} に降格されました", + "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "列 {{column}} の型 {{type}} は unsigned オーバーフローを避けるため {{targetType}} にマッピングされました", + "data_sync.warning.tdengine_source_pglike_type_fallback": "列 {{column}} の型 {{type}} には専用の PG-like マッピングがないため、{{targetType}} に降格されました", + "data_sync.warning.tdengine_source_semantics_degraded": "TDengine からリレーショナルターゲットへの移行は現在、列とデータのみを移行します。supertable、TAG 関連、retention policy、その他の時系列セマンティクスは降格または失われる可能性があります", + "data_sync.warning.tdengine_source_tag_column_degraded": "列 {{column}} は TDengine TAG 列であり、リレーショナルターゲットでは通常列に降格されます", + "data_sync.warning.tdengine_source_tag_column_mapped": "列 {{column}} は TDengine TAG 列であり、通常列としてマッピングされました", + "data_sync.warning.tdengine_target_auto_create_basic_table_only": "TDengine ターゲットの auto-create は現在、基本テーブルのみ作成します。インデックス、外部キー、トリガー、supertable/TAGS/TTL は自動移行されません", + "data_sync.warning.tdengine_target_auto_increment_not_migrated": "列 {{column}} の自動増分セマンティクスは TDengine に移行されません", + "data_sync.warning.tdengine_target_binary_type_fallback": "列 {{column}} の型 {{type}} は文字列セマンティクスにより {{targetType}} に降格されました", + "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "列 {{column}} の型 {{type}} は最初の TDengine TIMESTAMP 列に昇格されました", + "data_sync.warning.tdengine_target_empty_type_fallback": "列 {{column}} の型が空のため、{{targetType}} に降格されました", + "data_sync.warning.tdengine_target_enum_type_fallback": "列 {{column}} の enum 型 {{type}} は {{targetType}} に降格されました", + "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "TDengine ターゲットは既存ターゲットテーブルへの列自動追加をまだ行いません。先にターゲット構造を確認してください", + "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "列 {{column}} の FixedString 長を解析できず、{{targetType}} に降格されました", + "data_sync.warning.tdengine_target_identity_not_migrated": "列 {{column}} の自動増分/identity セマンティクスは TDengine に移行されません", + "data_sync.warning.tdengine_target_insert_only": "TDengine ターゲットは現在 INSERT 書き込みのみサポートします。update/delete 差分は実行時に拒否されます", + "data_sync.warning.tdengine_target_json_regular_table_fallback": "列 {{column}} の型 {{type}} は TDengine regular table で TAG セマンティクスを保持しないため、{{targetType}} に降格されました", + "data_sync.warning.tdengine_target_json_tag_only_fallback": "列 {{column}} の型 {{type}} は、TDengine JSON が TAG のみに適用されるため {{targetType}} に降格されました", + "data_sync.warning.tdengine_target_missing_time_column": "ソーステーブルにマッピング可能な時刻列がないため、自動テーブル作成は利用できません。続行前に TDengine ターゲットテーブルと時刻列を手動で準備してください。", + "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "列 {{column}} の主キーセマンティクスはリレーショナル制約として TDengine に移行されません", + "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "列 {{column}} の型 {{type}} には専用の TDengine 同一データベースマッピングがないため、{{targetType}} に降格されました", + "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "列 {{column}} は TDengine TAG 列であり、regular table への移行後は通常列に降格されます", + "data_sync.warning.tdengine_target_time_only_type_fallback": "列 {{column}} の型 {{type}} には安定した TDengine time-only マッピングがないため、{{targetType}} に降格されました", + "data_sync.warning.tdengine_target_timestamp_column_reordered": "TDengine ベーステーブルでは時刻列が先頭である必要があります。列 {{column}} は先頭位置に移動されました", + "data_sync.warning.tdengine_target_type_fallback": "列 {{column}} の型 {{type}} は {{targetType}} に降格されました", + "data_sync.warning.tdengine_target_type_no_mapping_fallback": "列 {{column}} の型 {{type}} には専用の TDengine マッピングがないため、{{targetType}} に降格されました", + "data_sync.warning.tdengine_target_user_defined_type_fallback": "列 {{column}} はユーザー定義型のため、{{targetType}} に降格されました", + "data_viewer.message.connection_not_found": "接続が見つかりません", + "data_viewer.message.duckdb_query_timeout": "DuckDB クエリが接続タイムアウトを超えたため中断されました。接続タイムアウトを延長するか、並べ替え/フィルター範囲を絞って再試行してください。", + "data_viewer.message.fetch_data_failed_detail": "データ取得に失敗しました: {{detail}}", + "data_viewer.message.mongo_filter_invalid_detail": "MongoDB のフィルター条件が無効です: {{detail}}", + "data_viewer.message.mongo_filter_parse_failed": "解析に失敗しました", + "data_viewer.message.query_failed": "クエリに失敗しました", + "data_viewer.message.query_timeout": "クエリが接続タイムアウトを超えたため中断されました。接続タイムアウトを延長するか、クエリ範囲を絞って再試行してください。", + "data_viewer.message.result_not_ready": "現在の結果セットはまだ準備できていません。先に一度データを読み込んでください。", + "data_viewer.message.sort_buffer_retry_succeeded": "ソートバッファを自動的に増やして再試行し、クエリに成功しました。", + "data_viewer.message.total_count_failed": "総件数の集計に失敗しました", + "data_viewer.message.total_count_failed_detail": "総件数の集計に失敗しました: {{detail}}", + "data_viewer.message.total_count_parse_failed": "総件数の解析に失敗しました", "data_viewer.read_only.reason.duckdb_rowid_missing": "主キー、利用可能な一意インデックス、または DuckDB rowid が見つからないため、変更を安全に送信できません。", + "data_viewer.read_only.reason.index_metadata_unavailable": "一意インデックスのメタデータを読み込めないため、変更を安全に送信できません。", + "data_viewer.read_only.reason.metadata_unavailable": "主キーまたは一意インデックスのメタデータを読み込めないため、変更を安全に送信できません。", + "data_viewer.read_only.reason.mongo_id_missing": "MongoDB の結果セットに _id がないため、変更を安全に送信できません。", + "data_viewer.read_only.reason.no_safe_locator": "主キーまたは利用可能な一意インデックスが見つからないため、変更を安全に送信できません。", + "data_viewer.read_only.reason.oracle_rowid_missing": "主キーまたは利用可能な一意インデックスが見つからず、結果セットに Oracle ROWID もないため、変更を安全に送信できません。", + "data_viewer.read_only.reason.primary_key_column_missing": "結果セットに主キー列 {{columns}} がないため、変更を安全に送信できません。", + "data_viewer.read_only.warning.collection": "コレクション {{target}} は読み取り専用のままです: {{reason}}", + "data_viewer.read_only.warning.table": "テーブル {{target}} は読み取り専用のままです: {{reason}}", + "data_viewer.sql_log.phase.complex_type_fallback_retry": "複雑型のフォールバック再試行", + "data_viewer.sql_log.phase.main_query": "メインクエリ", + "data_viewer.sql_log.phase.sort_buffer_retry": "再試行({{size}} sort_buffer)", + "database.label": "データベース", + "database.unnamed": "名前なしのデータベース", "db.backend.action.delete": "削除", "db.backend.action.update": "更新", "db.backend.error.batch_insert_exec_required": "一括挿入の実行関数は必須です", @@ -6979,6 +4485,41 @@ "definition_viewer.edit.comment_empty_definition": "現在のオブジェクト定義は空です。実行前に {{name}} の DDL を補完してください", "definition_viewer.edit.comment_title": "{{object}}を編集: {{name}}", "definition_viewer.edit.tab_title": "{{object}}を編集: {{name}}", + "definition_viewer.editor.event_definition_not_found": "イベント定義が見つかりません", + "definition_viewer.editor.event_fragment_fallback.header": "現在のデータソースは完全な CREATE EVENT 文を返さなかったため、イベント定義の断片を返しました", + "definition_viewer.editor.metadata_fallback.header": "現在のデータソースは実行可能な定義テキストを返さなかったため、メタデータを返しました", + "definition_viewer.editor.metadata_fallback.name_label": "名前", + "definition_viewer.editor.metadata_fallback.type_label": "種類", + "definition_viewer.editor.object_definition_not_found": "{{object}}定義が見つかりません", + "definition_viewer.editor.routine_definition_not_found": "関数/ストアドプロシージャ定義が見つかりません", + "definition_viewer.editor.sphinx.compat_queries_hint": "複数の互換クエリを実行しました。バージョン機能の制限、または未対応のオブジェクト種類が原因の可能性があります。", + "definition_viewer.editor.sphinx.empty_result": "現在の Sphinx インスタンス{{version}}は{{object}}定義を返しませんでした。", + "definition_viewer.editor.sphinx.failed_message_label": "返された失敗メッセージ", + "definition_viewer.editor.sphinx.failed_message_unknown": "返された失敗メッセージ: 不明なエラー", + "definition_viewer.editor.sphinx.unsupported_query": "現在の Sphinx インスタンス{{version}}は{{object}}定義の問い合わせをサポートしていません。", + "definition_viewer.editor.sphinx.version_suffix": "(バージョン: {{version}})", + "definition_viewer.editor.unsupported_event_definition": "このデータベース種類ではイベント定義の表示はサポートされていません", + "definition_viewer.editor.unsupported_object_definition": "このオブジェクト定義の表示はサポートされていません", + "definition_viewer.editor.unsupported_routine_definition": "このデータベース種類では関数/ストアドプロシージャ定義の表示はサポートされていません", + "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite は関数/ストアドプロシージャ定義の管理をサポートしていません", + "definition_viewer.editor.unsupported_view_definition": "このデータベース種類ではビュー定義の表示はサポートされていません", + "definition_viewer.editor.view_definition_not_found": "ビュー定義が見つかりません", + "definition_viewer.error.connection_not_found": "データベース接続が見つかりません", + "definition_viewer.error.event_name_empty": "イベント名が空です", + "definition_viewer.error.load_failed": "読み込みに失敗しました", + "definition_viewer.error.query_failed": "定義の取得に失敗しました", + "definition_viewer.error.query_failed_detail": "定義の取得に失敗しました: {{detail}}", + "definition_viewer.error.routine_name_empty": "関数/ストアドプロシージャ名が空です", + "definition_viewer.error.view_name_empty": "ビュー名が空です", + "definition_viewer.field.database": "データベース", + "definition_viewer.field.type": "種類", + "definition_viewer.loading.event_definition": "イベント定義を読み込み中...", + "definition_viewer.loading.routine_definition": "関数/ストアドプロシージャ定義を読み込み中...", + "definition_viewer.loading.view_definition": "ビュー定義を読み込み中...", + "definition_viewer.object.event": "イベント", + "definition_viewer.object.materialized_view": "マテリアライズドビュー", + "definition_viewer.object.routine": "関数/ストアドプロシージャ", + "definition_viewer.object.view": "ビュー", "definition_viewer.warning.refresh_latest_failed": "最新の定義を更新できませんでした", "dev.perf_data_grid.columns": "列数", "dev.perf_data_grid.density.comfortable": "標準", @@ -6993,41 +4534,106 @@ "dev.perf_data_grid.ui_version.legacy_short": "旧", "dev.perf_data_grid.ui_version.v2": "新 UI", "dev.perf_data_grid.ui_version.v2_short": "新", + "driver_manager.action.close": "閉じる", + "driver_manager.action.import_directory": "ドライバーディレクトリを取り込む", + "driver_manager.action.import_package": "ドライバーパッケージを取り込む", + "driver_manager.action.install_enable": "インストールして有効化", + "driver_manager.action.logs": "ログ", + "driver_manager.action.network_check": "ネットワーク確認", + "driver_manager.action.open_directory": "ドライバーディレクトリを開く", + "driver_manager.action.open_global_proxy_settings": "グローバルプロキシ設定を開く", + "driver_manager.action.refresh": "更新", + "driver_manager.action.remove": "削除", "driver_manager.action.switch_version": "バージョンを切り替え", + "driver_manager.backend.dialog.select_download_directory": "ドライバーダウンロードディレクトリを選択", + "driver_manager.backend.dialog.select_package_directory": "ドライバーパッケージディレクトリを選択", + "driver_manager.backend.dialog.select_package_file": "ドライバーパッケージファイルを選択(JDBC Jar 以外)", + "driver_manager.backend.driver_fallback_name": "ドライバー", "driver_manager.backend.error.agent_hash_failed": "ドライバーエージェントのチェックサム計算に失敗しました:{{detail}}", "driver_manager.backend.error.agent_metadata_unavailable": "{{name}} driver-agent のバージョンメタデータを取得できません。現在のバージョンに対応する driver-agent をインストールしてください:{{detail}}", "driver_manager.backend.error.agent_path_occupied_by_directory": "{{name}} ドライバーエージェントのパスがディレクトリに占有されています:{{path}}", "driver_manager.backend.error.agent_revision_mismatch": "{{name}} driver-agent の revision が一致しません(インストール済み:{{actual}}、必要:{{expected}})。現在のバージョンに対応する driver-agent をインストールしてください", "driver_manager.backend.error.agent_revision_mismatch_empty_actual": "{{name}} driver-agent の revision が一致しません(インストール済み:空、必要:{{expected}})。現在のバージョンに対応する driver-agent をインストールしてください", + "driver_manager.backend.error.api_url_empty": "API URL が空です", + "driver_manager.backend.error.asset_name_empty": "ドライバーアセット名が空です", + "driver_manager.backend.error.builtin_download_not_required": "組み込みドライバーでは拡張パッケージのダウンロードは不要です", + "driver_manager.backend.error.builtin_install_not_required": "組み込みドライバーでは拡張パッケージのインストールは不要です", + "driver_manager.backend.error.builtin_package_not_required": "組み込みドライバーにはインストールパッケージがありません", + "driver_manager.backend.error.builtin_remove_not_allowed": "組み込みドライバーは削除できません", + "driver_manager.backend.error.builtin_version_not_required": "組み込みドライバーではバージョン選択は不要です", + "driver_manager.backend.error.bundle_download_failed": "ドライバーバンドルのダウンロードに失敗しました:{{detail}}", "driver_manager.backend.error.bundle_entry_missing": "ドライバーバンドル内に {{name}} が見つかりません(想定パス:{{path}})", + "driver_manager.backend.error.bundle_index_asset_missing": "ドライバーバンドルインデックスアセットが見つかりません", + "driver_manager.backend.error.bundle_index_empty": "ドライバーバンドルインデックスが空です", + "driver_manager.backend.error.bundle_index_fetch_failed": "ドライバーバンドルインデックスの取得に失敗しました:{{detail}}", + "driver_manager.backend.error.bundle_index_parse_failed": "ドライバーバンドルインデックスの解析に失敗しました:{{detail}}", + "driver_manager.backend.error.bundle_url_empty": "ドライバーバンドルダウンロード URL が空です", "driver_manager.backend.error.bundled_agent_hash_failed": "同梱 {{name}} ドライバーエージェントのチェックサム計算に失敗しました:{{detail}}", + "driver_manager.backend.error.cache_key_empty": "キャッシュ key が空です", "driver_manager.backend.error.chmod_agent_failed": "ドライバーエージェントの権限設定に失敗しました:{{detail}}", "driver_manager.backend.error.close_agent_file_failed": "ドライバーエージェントファイルのクローズに失敗しました:{{detail}}", "driver_manager.backend.error.copy_bundled_agent_failed": "同梱 {{name}} ドライバーエージェントのコピーに失敗しました:{{detail}}", "driver_manager.backend.error.copy_runtime_dependency_entry_failed": "ランタイム依存ファイル {{name}} のコピーに失敗しました:{{detail}}", "driver_manager.backend.error.copy_runtime_dependency_failed": "{{name}} のランタイム依存関係のコピーに失敗しました:{{detail}}", "driver_manager.backend.error.create_agent_temp_file_failed": "ドライバーエージェントの一時ファイル作成に失敗しました:{{detail}}", + "driver_manager.backend.error.create_directory_failed": "ドライバーディレクトリの作成に失敗しました:{{detail}}", "driver_manager.backend.error.create_named_directory_failed": "{{name}} ドライバーディレクトリの作成に失敗しました:{{detail}}", + "driver_manager.backend.error.download_failed": "ダウンロードに失敗しました:{{detail}}", + "driver_manager.backend.error.download_url_empty": "ダウンロード URL が空です", + "driver_manager.backend.error.driver_type_empty": "ドライバータイプが空です", + "driver_manager.backend.error.driver_version_list_fetch_failed": "ドライバーバージョン一覧の取得に失敗しました:{{detail}}", + "driver_manager.backend.error.driver_version_list_parse_failed": "ドライバーバージョン一覧の解析に失敗しました:{{detail}}", "driver_manager.backend.error.driver_version_unsupported": "{{name}} バージョン {{version}} には対応していません", "driver_manager.backend.error.extract_runtime_dependency_failed": "ランタイム依存ファイル {{name}} の展開に失敗しました:{{detail}}", + "driver_manager.backend.error.file_manifest_url_invalid": "ファイルドライバーマニフェスト URL が無効です", + "driver_manager.backend.error.file_path_empty": "ファイルパスが空です", "driver_manager.backend.error.go_not_found_prebuilt_missing": "現在の環境に Go がインストールされておらず、利用可能な {{name}} のビルド済みエージェントパッケージも見つかりません", "driver_manager.backend.error.import_local_agent_failed": "ローカルドライバーエージェントの取り込みに失敗しました:{{detail}}", "driver_manager.backend.error.import_local_agent_runtime_failed": "ローカルドライバーエージェントのランタイム依存関係の取り込みに失敗しました:{{detail}}", "driver_manager.backend.error.install_prebuilt_package_failed": "ビルド済みドライバーパッケージのインストールに失敗しました:{{detail}}", "driver_manager.backend.error.local_directory_entry_missing": "ディレクトリ内に {{name}} エージェントファイルが見つかりません(優先パス:{{path}}、候補ファイル名:{{assetCandidates}} / {{baseCandidates}})", "driver_manager.backend.error.local_directory_not_directory": "ローカルドライバーディレクトリパスはディレクトリではありません:{{path}}", + "driver_manager.backend.error.local_directory_path_empty": "ローカルドライバーディレクトリパスが空です", "driver_manager.backend.error.local_directory_scan_limit": "ローカルドライバーディレクトリのエントリが多すぎます({{max}} 超過)。対象ディレクトリを絞るか、zip/単一ファイルを直接選択してください。", + "driver_manager.backend.error.local_manifest_url_invalid": "ローカルドライバーマニフェスト URL が無効です", "driver_manager.backend.error.local_package_entry_missing": "ローカルドライバーパッケージ内に {{name}} エージェントファイルが見つかりません(想定パス:{{path}})", + "driver_manager.backend.error.local_package_path_empty": "ローカルドライバーパッケージパスが空です", + "driver_manager.backend.error.manifest_fetch_failed": "ドライバーマニフェストの取得に失敗しました:{{detail}}", + "driver_manager.backend.error.manifest_parse_failed": "ドライバーマニフェストの解析に失敗しました:{{detail}}", + "driver_manager.backend.error.manifest_scheme_unsupported": "対応していないドライバーマニフェスト URL スキームです:{{scheme}}", + "driver_manager.backend.error.manifest_too_large": "ドライバーマニフェストがサイズ制限を超えています", + "driver_manager.backend.error.manifest_url_empty": "ドライバーマニフェスト URL が空です", "driver_manager.backend.error.metadata_file_write_failed": "ドライバーメタデータファイルの書き込みに失敗しました:{{detail}}", "driver_manager.backend.error.metadata_payload_encode_failed": "ドライバーメタデータのシリアライズに失敗しました:{{detail}}", + "driver_manager.backend.error.module_path_empty": "モジュールパスが空です", + "driver_manager.backend.error.module_version_list_empty": "モジュールバージョン一覧が空です", + "driver_manager.backend.error.module_version_list_fetch_failed": "モジュールバージョン一覧の取得に失敗しました:{{detail}}", + "driver_manager.backend.error.module_version_list_read_failed": "モジュールバージョン一覧の読み取りに失敗しました:{{detail}}", + "driver_manager.backend.error.mongo_version_unsupported": "MongoDB バージョン {{version}} には対応していません。対応しているのは 1.17.x と 2.x のみです", "driver_manager.backend.error.named_agent_hash_failed": "{{name}} ドライバーエージェントのチェックサム計算に失敗しました:{{detail}}", "driver_manager.backend.error.named_chmod_agent_failed": "{{name}} ドライバーエージェントの権限設定に失敗しました:{{detail}}", + "driver_manager.backend.error.no_driver_versions": "利用可能なドライバーバージョンが見つかりません", + "driver_manager.backend.error.open_bundle_failed": "ドライバーバンドルを開けませんでした:{{detail}}", + "driver_manager.backend.error.open_directory_failed": "ドライバーディレクトリを開けませんでした:{{detail}}", + "driver_manager.backend.error.open_directory_unsupported": "このプラットフォームではディレクトリを開けません:{{platform}}", + "driver_manager.backend.error.open_local_package_failed": "ローカルドライバーパッケージを開けませんでした:{{detail}}", + "driver_manager.backend.error.optional_go_only": "ここでは任意の Go ドライバーのみインストールして有効化できます", + "driver_manager.backend.error.package_size_unsupported": "このドライバーはインストールパッケージサイズの照会に対応していません", + "driver_manager.backend.error.prebuilt_downloads_failed": "ビルド済みパッケージのダウンロードに失敗しました:{{detail}}", + "driver_manager.backend.error.read_bundle_entry_failed": "ドライバーバンドルエントリの読み取りに失敗しました:{{detail}}", + "driver_manager.backend.error.read_local_directory_failed": "ローカルドライバーディレクトリの読み取りに失敗しました:{{detail}}", + "driver_manager.backend.error.read_local_package_entry_failed": "ローカルドライバーパッケージエントリの読み取りに失敗しました:{{detail}}", + "driver_manager.backend.error.read_local_package_failed": "ローカルドライバーパッケージの読み取りに失敗しました:{{detail}}", + "driver_manager.backend.error.release_empty": "Release が空です", + "driver_manager.backend.error.release_info_fetch_failed": "Release 情報の取得に失敗しました:{{detail}}", "driver_manager.backend.error.remove_installed_agent_failed": "インストール済みの {{name}} ドライバーエージェントの削除に失敗しました:{{detail}}", + "driver_manager.backend.error.remove_package_failed": "ドライバーパッケージの削除に失敗しました:{{detail}}", "driver_manager.backend.error.replace_agent_failed": "ドライバーエージェントの置き換えに失敗しました:{{detail}}", "driver_manager.backend.error.runtime_dependency_directory_empty": "ランタイム依存ディレクトリが空です", "driver_manager.backend.error.runtime_dependency_entry_missing": "ドライバーパッケージにランタイム依存ファイルがありません:{{name}}", "driver_manager.backend.error.runtime_dependency_required": "{{name}} は現在のプラットフォームで同梱ランタイム依存関係({{files}})が必要です。単一ファイルのエージェントはインストールできません。ドライバーバンドル、専用ドライバー zip、またはローカルソースビルドを使用してください。", "driver_manager.backend.error.runtime_dependency_target_directory_empty": "ランタイム依存ファイルの配置先ディレクトリが空です", + "driver_manager.backend.error.scan_local_directory_failed": "ローカルドライバーディレクトリのスキャンに失敗しました:{{detail}}", "driver_manager.backend.error.source_build_command_failed": "{{name}} ドライバーエージェントのビルドに失敗しました:{{detail}}、出力:{{output}}", "driver_manager.backend.error.source_build_duckdb_windows_cgo_toolchain_prepare_failed": "DuckDB Windows CGO ツールチェーンの準備に失敗しました: {{detail}}", "driver_manager.backend.error.source_build_duckdb_windows_dlltool_resolve_failed": "DuckDB Windows dlltool の特定に失敗しました: {{detail}}", @@ -7036,6 +4642,7 @@ "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found": "使用可能な gcc.exe/g++.exe が見つかりませんでした。{{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found_with_checked": "使用可能な gcc.exe/g++.exe が見つかりませんでした。確認済み: {{checked}}。{{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_toolchain_install_hint": "まず MSYS2 UCRT64 ツールチェーンをインストールしてください: winget install --id MSYS2.MSYS2 -e; 次に C:\\msys64\\usr\\bin\\bash.exe -lc \"pacman -S --needed --noconfirm mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-binutils\" を実行してください", + "driver_manager.backend.error.source_build_failed": "ローカルソースビルドに失敗しました:{{detail}}", "driver_manager.backend.error.source_build_go_mod_read_failed": "go.mod の読み取りに失敗しました: {{detail}}", "driver_manager.backend.error.source_build_module_dependency_missing": "go.mod にドライバー依存関係が見つかりません: {{modulePath}}", "driver_manager.backend.error.source_build_module_or_version_empty": "ドライバーモジュールまたはバージョンが空です", @@ -7047,53 +4654,297 @@ "driver_manager.backend.error.source_build_timeout": "{{name}} ドライバーエージェントのビルドがタイムアウトしました({{timeout}} 超過)。ビルド済みドライバーパッケージまたはローカルドライバーパッケージの取り込みを優先してください。", "driver_manager.backend.error.source_build_workdir_unavailable": "現在のディレクトリの取得に失敗しました: {{detail}}", "driver_manager.backend.error.sync_agent_failed": "ドライバーエージェントのディスク書き込みに失敗しました:{{detail}}", + "driver_manager.backend.error.tag_empty": "Tag が空です", + "driver_manager.backend.error.unknown": "不明なエラー", + "driver_manager.backend.error.unsupported_driver_type": "対応していないドライバータイプです", + "driver_manager.backend.error.version_empty": "バージョンが空です", "driver_manager.backend.error.write_agent_failed": "ドライバーエージェントの書き込みに失敗しました:{{detail}}", "driver_manager.backend.error.zip_entry_empty": "zip エントリが空です", + "driver_manager.backend.message.download_failed_detail": "ドライバーのダウンロードとインストールに失敗しました:{{detail}}", + "driver_manager.backend.message.driver_install_success": "ドライバーをインストールしました", + "driver_manager.backend.message.jdbc_jar_unsupported": "JDBC Jar ファイルの直接取り込みには対応していません。GoNavi は Go ドライバーと任意の driver-agent パッケージを使用します。代わりにドライバーパッケージまたはドライバーディレクトリを使用してください。Kingbase に接続する場合は、Kingbase 接続タイプを優先するか、カスタム接続に kingbase / kingbase8 を入力してください。", + "driver_manager.backend.message.local_import_failed_detail": "ローカルドライバーパッケージの取り込みに失敗しました:{{detail}}", + "driver_manager.backend.message.log_hint": "(詳細ログ:{{path}})", + "driver_manager.backend.message.metadata_write_failed_detail": "ドライバーメタデータの書き込みに失敗しました:{{detail}}", + "driver_manager.backend.message.opened_directory": "ドライバーディレクトリを開きました:{{path}}", + "driver_manager.backend.message.package_removed": "ドライバーパッケージを削除しました", + "driver_manager.backend.message.runtime_directory_configured": "ドライバーランタイムディレクトリを設定しました", + "driver_manager.backend.message.unsupported_builtin_manifest_url": "対応していない組み込みドライバーマニフェスト URL です:{{url}}", + "driver_manager.backend.network.error.probe_host_missing": "プローブ URL にホストがありません", + "driver_manager.backend.network.error.probe_url_empty": "プローブ URL が空です", "driver_manager.backend.network.error.timeout": "ネットワーク接続がタイムアウトしました", + "driver_manager.backend.network.probe.github_driver_release": "GitHub ドライバーリリース", + "driver_manager.backend.network.probe.github_release_asset_domain": "GitHub Release アセットドメイン", + "driver_manager.backend.network.probe.go_module_proxy": "Go モジュールプロキシ", + "driver_manager.backend.network.summary.download_chain_unreachable": "GitHub API には到達できますが、ドライバーダウンロード経路には到達できません。まず GoNavi のグローバルプロキシを有効にし、プロキシルールで github.com、api.github.com、release-assets.githubusercontent.com、objects.githubusercontent.com、raw.githubusercontent.com を許可してください。それでも失敗する場合は TUN モードを検討してください。", + "driver_manager.backend.package_size.built_in": "組み込み", + "driver_manager.backend.package_size.to_be_published": "公開待ち", + "driver_manager.backend.progress.fallback.bundle_available": "直リンクを利用できません。ドライバーバンドルの代替経路へ切り替えます({{name}}、残り {{bundle}} 件)", + "driver_manager.backend.progress.fallback.direct_to_bundle": "ビルド済み直リンクが一致しません。ドライバーバンドルの代替経路へ切り替えます({{name}}、残り {{bundle}} 件)", + "driver_manager.backend.progress.fallback.explicit_skip_bundle": "ビルド済み直リンクが一致しません。明示アセットのみのためドライバーバンドルをスキップします({{name}})", + "driver_manager.backend.progress.fallback.source_build": "リリースアセットが一致しません。ローカルソースビルドの代替を準備します({{name}})", + "driver_manager.backend.progress.plan.bundle_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。ビルド済み直リンクがないため、{{bundle}} 件のドライバーバンドルソースを試します", + "driver_manager.backend.progress.plan.direct_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。{{direct}} 件のビルド済み直リンクを試します", + "driver_manager.backend.progress.plan.direct_then_bundle": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。{{direct}} 件のビルド済み直リンクを試し、その後 {{bundle}} 件のドライバーバンドルソースへ進みます", + "driver_manager.backend.progress.plan.explicit_direct": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。明示バージョンのアセットのみ許可し、{{direct}} 件のビルド済み直リンクを試します", + "driver_manager.backend.progress.plan.source_fallback": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。リリースアセットが一致しない場合はローカルソースビルドに戻します", + "driver_manager.backend.progress.plan.source_first": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。まずローカルソースビルドを試し、失敗したらダウンロードへ進みます", + "driver_manager.backend.progress.plan.source_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。このバージョンはローカルソースビルドのみ許可されます", + "driver_manager.backend.status.affected_connections": "{{count}} 件の保存済み接続に影響します", + "driver_manager.backend.status.agent_arch_incompatible_detail": "{{name}} ドライバーエージェントのアーキテクチャに互換性がありません:ファイル={{file}}、現在のプロセス={{process}}。Driver Manager で再インストールして有効化してください。", + "driver_manager.backend.status.agent_missing": "{{name}} ドライバーエージェントが見つかりません。Driver Manager で再インストールして有効化してください。", + "driver_manager.backend.status.agent_path_failed": "{{name}} ドライバーエージェントパスを解決できません。Driver Manager で再インストールして有効化してください。", "driver_manager.backend.status.agent_revision_update_detail": "理由:現在の GoNavi バージョンでは更新後の {{name}} driver-agent(revision: {{expected}})が必要です。影響:driver-agent は独立したバイナリであり、メインアプリと一緒には自動更新されません。再インストールしない場合は古い agent ロジックが継続して使われ、ドライバー側で修正・最適化された挙動が反映されず、旧版の問題が続く可能性があります。対応する driver-agent の再インストールを強く推奨します。", "driver_manager.backend.status.agent_revision_update_detail_with_actual": "理由:現在の GoNavi バージョンでは更新後の {{name}} driver-agent(revision: {{expected}})が必要です。影響:driver-agent は独立したバイナリであり、メインアプリと一緒には自動更新されません。再インストールしない場合は古い agent ロジックが継続して使われ、ドライバー側で修正・最適化された挙動が反映されず、旧版の問題が続く可能性があります。対応する driver-agent の再インストールを強く推奨します(インストール済みマーカー:{{actual}}、必要:{{expected}})。", + "driver_manager.backend.status.agent_unavailable_reinstall": "{{name}} ドライバーエージェントを利用できません:{{detail}}。Driver Manager で再インストールして有効化してください。", + "driver_manager.backend.status.built_in_available": "組み込みドライバーは接続可能です", + "driver_manager.backend.status.expected_revision": "必要な revision は {{revision}} です。", + "driver_manager.backend.status.installed_pending": "ドライバーはインストール済みで有効化待ちです", + "driver_manager.backend.status.installed_pending_with_version": "ドライバーはインストール済みです(バージョン:{{version}})。有効化待ちです", + "driver_manager.backend.status.installed_revision": "インストール済み revision {{revision}}。", "driver_manager.backend.status.mongodb_compatibility_update_detail": "理由:現在推奨される MongoDB 互換ドライバーバージョンは {{recommended}}、インストール済みバージョンは {{installed}} です。影響:MongoDB 2.x driver-agent は公式 v2 ドライバーを使用し、MongoDB サーバー 4.2+ を必要とします。MongoDB 4.0 に接続すると wire version 7 の非互換が発生する可能性があります。対応する driver-agent の再インストールを強く推奨します。", + "driver_manager.backend.status.needs_update": "ドライバー更新を適用するには再インストールが必要です。", + "driver_manager.backend.status.optional_disabled": "{{name}} Go ドライバーが有効ではありません。Driver Manager でインストールして有効化してください。", + "driver_manager.backend.status.optional_disabled_generic": "未有効", + "driver_manager.backend.status.optional_disabled_with_version": "未有効(バージョン:{{version}})", + "driver_manager.backend.status.optional_enabled": "Go ドライバーは有効で接続可能です", + "driver_manager.backend.status.slim_build_required": "{{name}} は現在の slim build に含まれていません。このドライバーを使用するには Full 版をインストールしてください。", + "driver_manager.backend.status.unrecognized_driver_type": "認識できないデータソースタイプです", + "driver_manager.backend.version.latest_suffix": "(最新)", + "driver_manager.backend.version.recommended_suffix": "(推奨)", + "driver_manager.backend.version.unlabeled": "ラベルなしバージョン", + "driver_manager.column.actions": "操作", + "driver_manager.column.data_source": "データソース", + "driver_manager.column.package_size": "パッケージサイズ", + "driver_manager.column.progress": "インストール進捗", + "driver_manager.column.status": "状態", + "driver_manager.column.version": "ドライバーバージョン", + "driver_manager.description.install_required": "MySQL / Redis / Oracle / PostgreSQL 以外のデータソースは、接続前にインストールして有効化する必要があります。", + "driver_manager.directory_info.details_label": "ドライバーディレクトリと再利用の説明を表示", + "driver_manager.directory_info.log_file": "実行ログファイル:{{path}}", + "driver_manager.directory_info.reuse_help": "自動ダウンロードおよび手動取り込みのドライバーは次のディレクトリに保存されます。後続のバージョン更新でもダウンロード済みドライバーを再利用できます。", + "driver_manager.directory_info.root_dir": "ドライバーのルートディレクトリ:{{path}}", + "driver_manager.directory_info.title": "ドライバーディレクトリと再利用の説明", + "driver_manager.empty.default": "ドライバーデータはありません", + "driver_manager.empty.search": "「{{keyword}}」に一致するドライバーはありません", + "driver_manager.filter_summary.match": "{{filtered}} / {{total}} 件一致", + "driver_manager.filter_summary.total": "ドライバー {{total}} 件", + "driver_manager.import.directory_help": "アプリ内のダウンロード経路が失敗する場合は、先にドライバーパッケージをこのディレクトリへ手動でダウンロードし、「ドライバーパッケージを取り込む」または「ドライバーディレクトリを取り込む」でインストールを完了してください。", + "driver_manager.import.single_file_help": "行内の「ドライバーパッケージを取り込む」は、`mariadb-driver-agent`、`mariadb-driver-agent.exe`、`GoNavi-DriverAgents.zip` などの単一ドライバーファイルまたはバンドル専用です。JDBC Jar の直接取り込みには対応していません。一括取り込みには上の「ドライバーディレクトリを取り込む」を使ってください。", + "driver_manager.local_source.directory": "ディレクトリ", + "driver_manager.local_source.file": "ファイル", + "driver_manager.log_modal.empty": "このドライバーにはまだ操作ログがありません。", + "driver_manager.log_modal.executable_path": "ドライバー実行ファイル:{{path}}", + "driver_manager.log_modal.install_dir": "インストールディレクトリ:{{path}}", + "driver_manager.log_modal.title": "ドライバーログ - {{name}}", + "driver_manager.log.done_auto_install": "自動インストールが完了しました{{version}}", + "driver_manager.log.done_local_import": "ローカル取り込みインストールが完了しました{{version}}", + "driver_manager.log.done_remove": "ドライバー削除が完了しました", + "driver_manager.log.force_overwrite_reinstall": "インストール済みを上書きするモードが有効です。再インストール取り込みを実行します", + "driver_manager.log.progress_line": "【{{status}}】{{message}}({{percent}}%)", + "driver_manager.log.skip_installed_dedupe": "ドライバーはインストール済みのため、ディレクトリ取り込みの重複排除でスキップしました", + "driver_manager.log.skip_slim_build": "現在のリリースパッケージはスリムビルドのため、ディレクトリ取り込みをスキップしました", + "driver_manager.log.start_auto_install": "自動インストールを開始", + "driver_manager.log.start_local_import": "ローカル取り込みを開始{{version}}({{source}}):{{path}}", + "driver_manager.log.start_remove": "ドライバー削除を開始", + "driver_manager.message.directory_import_completed": "ディレクトリ取り込みが完了しました{{mode}}:成功 {{success}}{{skip}}", + "driver_manager.message.directory_import_completed_with_failure": "ディレクトリ取り込みが完了しました{{mode}}:成功 {{success}}、失敗 {{failed}}{{skip}}", + "driver_manager.message.directory_import_failed": "ディレクトリ取り込みに失敗しました{{mode}}:失敗 {{failed}}{{skip}}", + "driver_manager.message.install_failed": "{{name}} のインストールに失敗しました", + "driver_manager.message.install_failed_detail": "{{name}} のインストールに失敗しました:{{detail}}", "driver_manager.message.install_failed_fallback": "{{name}} のインストールに失敗しました", + "driver_manager.message.install_start": "インストールを開始", + "driver_manager.message.install_success": "{{name}}{{version}} をインストールして有効化しました", "driver_manager.message.install_watchdog_timeout": "{{name}} のインストールが {{minutes}} 分経っても完了していません。バックグラウンドタスクがまだダウンロードまたはビルド中の可能性があります。あとで状態を更新してください。繰り返し発生する場合は、プロキシを確認するかローカルドライバーパッケージのインポートを使用してください。", + "driver_manager.message.load_status_failed": "ドライバー状態の取得に失敗しました", + "driver_manager.message.load_status_failed_detail": "ドライバー状態の取得に失敗しました:{{detail}}", + "driver_manager.message.load_version_failed": "{{name}} のバージョン一覧の読み込みに失敗しました", + "driver_manager.message.load_version_failed_detail": "{{name}} のバージョン一覧の読み込みに失敗しました:{{detail}}", + "driver_manager.message.local_directory_required": "有効なドライバーパッケージディレクトリを選択してください", + "driver_manager.message.local_file_required": "有効なドライバーパッケージファイルを選択してください", + "driver_manager.message.local_import_failed": "{{name}} のローカルドライバーパッケージ取り込みに失敗しました", + "driver_manager.message.local_import_failed_detail": "{{name}} のローカルドライバーパッケージ取り込みに失敗しました:{{detail}}", + "driver_manager.message.local_import_start": "ローカルドライバーパッケージの取り込みを開始", + "driver_manager.message.local_import_success": "{{name}}{{version}} のローカルドライバーパッケージをインストールして有効化しました", + "driver_manager.message.local_path_required": "有効なローカル取り込み{{source}}を選択してください", + "driver_manager.message.network_check_completed": "ドライバーネットワーク確認が完了しました", + "driver_manager.message.network_check_failed": "ドライバーネットワーク確認に失敗しました", + "driver_manager.message.network_check_failed_detail": "ドライバーネットワーク確認に失敗しました:{{detail}}", + "driver_manager.message.no_external_drivers_to_import": "取り込める外部ドライバーはありません", + "driver_manager.message.open_directory_failed": "ドライバーディレクトリを開けませんでした", + "driver_manager.message.open_directory_failed_detail": "ドライバーディレクトリを開けませんでした:{{detail}}", + "driver_manager.message.overwrite_suffix": "(インストール済みを上書き)", + "driver_manager.message.remove_failed": "{{name}} の削除に失敗しました", + "driver_manager.message.remove_failed_detail": "{{name}} の削除に失敗しました:{{detail}}", + "driver_manager.message.remove_success": "{{name}} を削除しました", + "driver_manager.message.select_local_directory_failed": "ローカルドライバーパッケージディレクトリの選択に失敗しました", + "driver_manager.message.select_local_directory_failed_detail": "ローカルドライバーパッケージディレクトリの選択に失敗しました:{{detail}}", + "driver_manager.message.select_local_file_failed": "ローカルドライバーパッケージファイルの選択に失敗しました", + "driver_manager.message.select_local_file_failed_detail": "ローカルドライバーパッケージファイルの選択に失敗しました:{{detail}}", + "driver_manager.message.skip_suffix": "、{{items}}", + "driver_manager.message.skip.dedupe": "重複排除で {{count}} 件スキップ", + "driver_manager.message.skip.slim": "スリム版で {{count}} 件スキップ", + "driver_manager.network.alert.download_chain_unreachable": "重要:ドライバーダウンロード経路のドメインに到達できません", + "driver_manager.network.alert.download_network_unreachable": "重要:ドライバーダウンロードネットワークに到達できません", + "driver_manager.network.chain_alert.allow_hosts": "それでも失敗する場合は、プロキシルールで次を許可してください:{{hosts}}。ルールを調整できない場合は TUN モードの有効化を検討してください。", + "driver_manager.network.chain_alert.description": "GitHub ページは開けても、ドライバーパッケージのダウンロードはアセットドメインへリダイレクトされます。まず GoNavi 上部の「プロキシ」でグローバルプロキシを有効にし、プロキシアプリのローカルアドレスとポートを入力してください。", + "driver_manager.network.checking": "ドライバーダウンロードネットワークを確認中...", + "driver_manager.network.details_label": "ネットワーク確認の詳細を表示", + "driver_manager.network.error_value": "、{{detail}}", + "driver_manager.network.github_latency": "プロキシ経路から GitHub への接続遅延:{{status}}{{latency}}{{detail}}", + "driver_manager.network.latency_value": "、{{latency}}ms", + "driver_manager.network.no_proxy_env": "システムのプロキシ環境変数は検出されませんでした。", + "driver_manager.network.no_result": "結果なし", + "driver_manager.network.not_checked": "ネットワーク確認はまだ完了していません", + "driver_manager.network.proxy_env_detected": "プロキシ環境変数を検出しました:{{keys}}", + "driver_manager.network.reachable": "到達可能", + "driver_manager.network.summary.download_chain_unreachable": "GitHub API には到達できますが、ドライバーダウンロード用のアセットドメインに到達できません。", + "driver_manager.network.summary.proxy_recommended": "一部のドライバーダウンロード先に到達できません。インストール前に HTTP/HTTPS/SOCKS5 プロキシを設定してください。", + "driver_manager.network.summary.reachable": "ドライバーダウンロードネットワークに到達できます。直接インストールできます。", + "driver_manager.network.summary.reachable_with_proxy": "設定済みプロキシ経由でドライバーダウンロードネットワークに到達できます。", + "driver_manager.network.summary.unreachable": "一部のドライバーダウンロード先に到達できません。ネットワークを確認して再試行してください。", + "driver_manager.network.summary.unreachable_proxy_configured": "一部のドライバーダウンロード先に到達できません。設定済みプロキシが有効か確認して再試行してください。", + "driver_manager.network.unreachable": "到達不可", + "driver_manager.option.force_overwrite_installed": "インストール済みを上書き", "driver_manager.package_size.built_in": "組み込み", "driver_manager.package_size.pending_release": "公開待ち", + "driver_manager.progress.agent_install_done": "{{name}} ドライバーエージェントのインストールが完了しました", + "driver_manager.progress.agent_install_start": "{{name}} ドライバーエージェントのインストールを開始", + "driver_manager.progress.backend_detail": "バックエンド詳細:{{detail}}", + "driver_manager.progress.backend_empty": "バックエンドから進捗詳細が返されていません", + "driver_manager.progress.dev_build_fallback": "ビルド済みパッケージが見つからないため、開発用ローカルビルドを試行します", + "driver_manager.progress.download_bundle": "{{name}} ドライバーバンドルをダウンロード中", + "driver_manager.progress.download_prebuilt_agent": "ビルド済み {{name}} ドライバーエージェントをダウンロード中", "driver_manager.progress.download_prebuilt_package": "ビルド済み {{name}} ドライバーパッケージをダウンロード中", + "driver_manager.progress.extract_agent_from_bundle": "ドライバーバンドルから {{name}} エージェントを抽出中", + "driver_manager.progress.fallback.bundle_available": "直リンクを利用できません。ドライバーバンドルの代替経路へ切り替えます({{name}}、残り {{bundle}} 件)", + "driver_manager.progress.fallback.direct_to_bundle": "ビルド済み直リンクが一致しません。ドライバーバンドルの代替経路へ切り替えます({{name}}、残り {{bundle}} 件)", + "driver_manager.progress.fallback.explicit_skip_bundle": "ビルド済み直リンクが一致しません。明示アセットのみのためドライバーバンドルをスキップします({{name}})", + "driver_manager.progress.fallback.source_build": "リリースアセットが一致しません。ローカルソースビルドの代替を準備します({{name}})", + "driver_manager.progress.install_start": "インストールを開始", + "driver_manager.progress.local_package_done": "ローカルドライバーパッケージの取り込みが完了しました", + "driver_manager.progress.local_package_start": "ローカルドライバーパッケージのインストールを開始", + "driver_manager.progress.metadata_write": "ドライバーメタデータを書き込み中", + "driver_manager.progress.plan.bundle_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。ビルド済み直リンクがないため、{{bundle}} 件のドライバーバンドルソースを試します", + "driver_manager.progress.plan.direct_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。{{direct}} 件のビルド済み直リンクを試します", + "driver_manager.progress.plan.direct_then_bundle": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。{{direct}} 件のビルド済み直リンクを試し、その後 {{bundle}} 件のドライバーバンドルソースへ進みます", + "driver_manager.progress.plan.explicit_direct": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。明示バージョンのアセットのみ許可し、{{direct}} 件のビルド済み直リンクを試します", "driver_manager.progress.plan.require_source_first": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。開発ビルドではローカルソースビルドのみを使用し、リリースパッケージへフォールバックしません", + "driver_manager.progress.plan.source_fallback": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。リリースアセットが一致しない場合はローカルソースビルドに戻します", + "driver_manager.progress.plan.source_first": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。まずローカルソースビルドを試し、失敗したらダウンロードへ進みます", + "driver_manager.progress.plan.source_only": "{{name}} ドライバーエージェントのインストールを準備中(バージョン {{version}})。このバージョンはローカルソースビルドのみ許可されます", + "driver_manager.progress.pure_go_enabled": "インストールが完了し、純 Go ドライバーが有効になりました", + "driver_manager.progress.source_build_preferred": "{{name}} ドライバーエージェントをまずローカルソースからビルドします", + "driver_manager.progress.status.done": "完了", + "driver_manager.progress.status.downloading": "ダウンロード中", + "driver_manager.progress.status.error": "エラー", + "driver_manager.progress.status.start": "開始", + "driver_manager.progress.status.unknown": "不明", + "driver_manager.progress.unzip_agent": "{{name}} ドライバーエージェントを展開中", "driver_manager.progress.wait_bundle": "{{name}} ドライバーバンドルのダウンロード完了を待機中", + "driver_manager.punctuation.list_separator": "、", + "driver_manager.search.built_in": "組み込み", + "driver_manager.search.external": "外部", + "driver_manager.search.placeholder": "ドライバー名/種類を検索(例:DuckDB、clickhouse)", + "driver_manager.status.built_in_available": "組み込みで利用可能", + "driver_manager.status.calculating": "計算中...", + "driver_manager.status.disabled": "未有効", + "driver_manager.status.enabled": "有効", + "driver_manager.status.full_required": "Full 版が必要", + "driver_manager.status.installed": "インストール済み", + "driver_manager.status.installing_percent": "インストール中 {{percent}}%", + "driver_manager.title": "ドライバー管理", "driver_manager.version.current_fallback": "現在のバージョン", + "driver_manager.version.default": "既定バージョン", + "driver_manager.version.group.other": "その他", + "driver_manager.version.group.year": "{{year}} 年", + "driver_manager.version.inline_suffix": "({{version}})", "driver_manager.version.installed": "インストール済み{{suffix}}", + "driver_manager.version.installed_locked": "インストール済み(削除後に変更可能)", + "driver_manager.version.installed_locked_with_version": "{{version}}(インストール済み。削除後に変更可能)", "driver_manager.version.installed_with_version": "{{version}}(インストール済み{{suffix}})", "driver_manager.version.latest_suffix": "(最新)", + "driver_manager.version.mongodb_hint": "現在対応している MongoDB は 1.17.x と 2.x のみです。より古い 1.x はインストールできません。", "driver_manager.version.needs_reinstall_suffix": "、再インストールが必要", + "driver_manager.version.placeholder.load_on_expand": "展開してバージョンを読み込む", + "driver_manager.version.placeholder.select": "ドライバーバージョンを選択", "driver_manager.version.recommended_suffix": "(推奨)", "driver_manager.version.switch_pending": "現在 {{installedVersion}} がインストール済みです。{{targetVersion}} を選択しました。「バージョンを切り替え」をクリックすると適用されます。", "driver_manager.version.target_fallback": "対象バージョン", "driver_manager.version.unlabeled": "バージョン未記載", + "driver.guidance.customConnectionDriverHelp": "対応済み: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase。エイリアス: postgresql/pgx、open_gauss/open-gauss、dm8、kingbase8/kingbasees/kingbasev8。GoNavi に登録済みの Go database/sql ドライバー名を入力してください。システムの ODBC/JDBC ドライバー名を直接入力したり、JDBC Jar を取り込んだりしないでください。", + "file.backend.dialog.export_connections": "接続をエクスポート", + "file.backend.dialog.export_data": "データをエクスポート", + "file.backend.dialog.export_database_sql": "{{database}} をエクスポート (SQL)", + "file.backend.dialog.export_query_result": "クエリ結果をエクスポート", + "file.backend.dialog.export_table": "{{table}} をエクスポート", + "file.backend.dialog.export_tables_sql": "テーブルをエクスポート (SQL)", + "file.backend.dialog.import_data": "{{table}} にインポート", "file.backend.dialog.select_ca_server_certificate_file": "CA/サーバー証明書ファイルを選択", "file.backend.dialog.select_client_certificate_file": "クライアント証明書ファイルを選択", "file.backend.dialog.select_client_private_key_file": "クライアント秘密鍵ファイルを選択", + "file.backend.dialog.select_config_file": "設定ファイルを選択", + "file.backend.dialog.select_database_file": "データベースファイルを選択", + "file.backend.dialog.select_duckdb_file": "DuckDB データファイルを選択", + "file.backend.dialog.select_sql_directory": "SQL ディレクトリを選択", + "file.backend.dialog.select_sql_file": "SQL ファイルを選択", + "file.backend.dialog.select_sqlite_file": "SQLite データファイルを選択", + "file.backend.dialog.select_ssh_key_file": "SSH 秘密鍵ファイルを選択", "file.backend.dialog.select_tls_certificate_file": "TLS 証明書ファイルを選択", "file.backend.error.app_log_file_not_found": "GoNavi ログファイルが見つかりません", + "file.backend.error.batch_commit_unsupported": "現在のデータベース型は一括コミットをサポートしていません", + "file.backend.error.connection_export_file_too_large": "接続エクスポートファイルが大きすぎます", + "file.backend.error.connection_import_file_too_large": "接続インポートファイルが大きすぎます", + "file.backend.error.connection_package_decrypt_failed": "ファイルのパスワードが正しくないか、ファイルが破損しています", + "file.backend.error.connection_package_password_required": "復元パッケージのパスワードを空にすることはできません", + "file.backend.error.connection_package_payload_too_large": "接続パッケージのペイロードが大きすぎます", + "file.backend.error.connection_package_unsupported": "サポートされていない接続復元パッケージ形式です", "file.backend.error.create_directory_failed": "ディレクトリを作成できません: {{detail}}", "file.backend.error.create_sql_file_failed": "SQL ファイルを作成できません: {{detail}}", + "file.backend.error.database_name_required": "データベース名は空にできません", "file.backend.error.delete_sql_directory_failed": "ディレクトリを削除できません: {{detail}}(空のディレクトリのみ削除できます)", "file.backend.error.delete_sql_file_failed": "SQL ファイルを削除できません: {{detail}}", "file.backend.error.directory_exists": "ディレクトリは既に存在します", "file.backend.error.directory_name_no_separator": "ディレクトリ名にパス区切り文字は使用できません", "file.backend.error.directory_name_required": "ディレクトリ名は空にできません", + "file.backend.error.directory_path_required": "ディレクトリパスは空にできません", + "file.backend.error.export_unsupported_format": "サポートされていないエクスポート形式です: {{format}}", + "file.backend.error.file_path_empty": "ファイルパスが空です", + "file.backend.error.file_path_required": "ファイルパスは空にできません", + "file.backend.error.import_csv_empty_or_missing_header": "CSV が空かヘッダー行がありません", + "file.backend.error.import_csv_open_failed": "CSV を開けません: {{detail}}", + "file.backend.error.import_csv_read_failed": "CSV を読み取れません: {{detail}}", + "file.backend.error.import_excel_empty_or_missing_header": "Excel が空かヘッダー行がありません", + "file.backend.error.import_excel_no_sheets": "Excel ファイルにシートがありません", + "file.backend.error.import_excel_parse_failed": "Excel を解析できません: {{detail}}", + "file.backend.error.import_excel_read_failed": "Excel を読み取れません: {{detail}}", + "file.backend.error.import_file_empty": "ファイルパスは空にできません", + "file.backend.error.import_json_parse_failed": "JSON を解析できません: {{detail}}", + "file.backend.error.import_json_root_not_array": "JSON ルートは配列である必要があります", + "file.backend.error.import_unsupported_format": "サポートされていないファイル形式です", + "file.backend.error.invalid_export_mode": "無効なエクスポートモードです", + "file.backend.error.mysql_workbench_no_connections": "XML 内に有効な接続設定が見つかりません", + "file.backend.error.mysql_workbench_parse_failed": "MySQL Workbench XML の解析に失敗しました: {{detail}}", "file.backend.error.navicat_connection_password_parse_failed": "接続 {{name}} のパスワードを解析できません", "file.backend.error.navicat_connection_proxy_password_parse_failed": "接続 {{name}} のプロキシパスワードを解析できません", "file.backend.error.navicat_connection_ssh_password_parse_failed": "接続 {{name}} の SSH パスワードを解析できません", "file.backend.error.navicat_ncx_no_connections": "Navicat NCX に GoNavi がサポートする有効な接続設定が見つかりません", "file.backend.error.navicat_ncx_parse_failed": "Navicat NCX の解析に失敗しました", "file.backend.error.navicat_secret_decrypt_failed": "Navicat のパスワードを復号できません", + "file.backend.error.open_file_failed": "ファイルを開けません: {{detail}}", + "file.backend.error.query_required": "クエリ文は空にできません", "file.backend.error.read_directory_info_failed": "ディレクトリ情報を読み取れません: {{detail}}", + "file.backend.error.read_file_error_summary": "ファイル読み取りエラー: {{detail}}。実行済み {{count}} 件。", + "file.backend.error.read_file_info_failed": "ファイル情報を読み取れません: {{detail}}", "file.backend.error.read_target_directory_info_failed": "対象ディレクトリ情報を読み取れません: {{detail}}", "file.backend.error.read_target_file_info_failed": "対象ファイル情報を読み取れません: {{detail}}", "file.backend.error.rename_directory_failed": "ディレクトリ名を変更できません: {{detail}}", "file.backend.error.rename_sql_file_failed": "SQL ファイル名を変更できません: {{detail}}", "file.backend.error.schema_export_no_objects": "スキーマ {{schema}} にエクスポート可能なテーブルまたはビューが見つかりません", "file.backend.error.schema_name_required": "スキーマ名は空にできません", + "file.backend.error.select_with_query_required": "SELECT/WITH クエリエクスポートのみサポートされています", + "file.backend.error.selected_path_not_directory": "選択されたパスはディレクトリではありません", + "file.backend.error.selected_path_not_sql_file": "選択されたパスは SQL ファイルではありません", "file.backend.error.sql_file_batch_execution_failed": "{{index}} 件目からのバッチ文の実行に失敗しました: {{detail}}", "file.backend.error.sql_file_batch_rollback_failed": "バッチ実行に失敗しました: {{detail}}。ロールバックにも失敗しました: {{rollbackDetail}}", "file.backend.error.sql_file_exists": "SQL ファイルは既に存在します", @@ -7101,15 +4952,338 @@ "file.backend.error.sql_file_name_no_separator": "SQL ファイル名にパス区切り文字は使用できません", "file.backend.error.sql_file_name_required": "SQL ファイル名は空にできません", "file.backend.error.sql_file_statement_execution_failed": "{{index}} 件目の文の実行に失敗しました: {{detail}}", + "file.backend.error.table_data_batch_limit": "一度に処理できるテーブルは最大 {{max}} 件です。現在 {{count}} 件が選択されています", + "file.backend.error.table_data_clear_failed": "{{table}} のクリアに失敗しました: {{detail}}", + "file.backend.error.table_data_clear_failed_partial": "{{table}} のクリアに失敗しました: {{detail}}。警告: 先頭 {{count}} 件のテーブルはすでにクリアされ、復元できません", + "file.backend.error.table_data_mode_unsupported": "サポートされていないテーブルデータクリーンアップモード: {{mode}}", + "file.backend.error.table_data_no_tables": "処理するテーブルが指定されていません", + "file.backend.error.table_data_truncate_failed": "{{table}} の truncate に失敗しました: {{detail}}", + "file.backend.error.table_data_truncate_failed_partial": "{{table}} の truncate に失敗しました: {{detail}}。警告: 先頭 {{count}} 件のテーブルはすでに truncate され、復元できません", + "file.backend.error.table_data_truncate_unsupported": "現在のデータベース型 {{type}} はテーブルの TRUNCATE をサポートしていません。代わりにクリアを使用してください", "file.backend.error.target_directory_exists": "対象ディレクトリは既に存在します", "file.backend.error.target_sql_file_exists": "対象 SQL ファイルは既に存在します", + "file.backend.error.task_not_found": "タスクが見つかりません", + "file.backend.error.write_failed": "書き込みに失敗しました: {{detail}}", + "file.backend.filter.all_files": "すべてのファイル", + "file.backend.filter.all_files_pattern": "すべてのファイル (*.*)", "file.backend.filter.certificate_files": "証明書ファイル", + "file.backend.filter.connection_package": "GoNavi 接続パッケージ (*.gonavi-conn)", + "file.backend.filter.data_files": "データファイル", + "file.backend.filter.database_files": "データベースファイル", + "file.backend.filter.duckdb_files": "DuckDB ファイル", + "file.backend.filter.json_files": "JSON ファイル (*.json)", + "file.backend.filter.mysql_workbench_connections": "MySQL Workbench 接続 (*.xml)", + "file.backend.filter.private_key_files": "秘密鍵ファイル", + "file.backend.filter.sql_files": "SQL ファイル (*.sql)", + "file.backend.filter.sqlite_files": "SQLite ファイル", + "file.backend.html_export.document_title": "GoNavi データエクスポート", + "file.backend.html_export.empty_rows": "(0 行)", + "file.backend.html_export.heading": "GoNavi データエクスポート", + "file.backend.html_export.meta": "行数: {{rowCount}} · 列数: {{columnCount}} · 生成日時: {{generatedAt}}", + "file.backend.message.cancel_requested": "キャンセルリクエストを送信しました", + "file.backend.message.execution_cancelled": "実行はキャンセルされました。実行済み {{executed}} 件、失敗 {{failed}} 件、所要時間 {{duration}}。", + "file.backend.message.execution_completed": "実行が完了しました。成功 {{success}} 件、失敗 {{failed}} 件、所要時間 {{duration}}。", + "file.backend.message.execution_error_detail_header": "エラー詳細(先頭 {{count}} 件):", + "file.backend.message.execution_more_errors": "...さらに {{count}} 件のエラーは表示されていません", + "file.backend.message.export_completed": "エクスポートが完了しました", + "file.backend.message.import_no_data": "インポートできるデータがありません", + "file.backend.message.import_row_failed": "{{index}} 行目のインポートに失敗しました: {{detail}}", + "file.backend.message.import_summary": "インポート済み: {{imported}}, 失敗: {{failed}}", + "file.backend.message.statement_failed": "{{index}} 件目の文の実行に失敗しました: {{detail}}\n SQL: {{sql}}", + "file.backend.message.table_data_clear_succeeded": "クリアが完了しました", + "file.backend.message.table_data_truncate_succeeded": "truncate が完了しました", + "file.backend.message.transaction_committed": "トランザクションをコミットしました", + "file.backend.message.user_cancelled": "ユーザーが実行をキャンセルしました", + "file.backend.sql_dump.database": "データベース: {{database}}", + "file.backend.sql_dump.empty_rows": "(0 行)", + "file.backend.sql_dump.generated_at": "生成日時: {{generatedAt}}", + "file.backend.sql_dump.table": "テーブル: {{objectName}}", + "file.backend.sql_dump.title": "GoNavi SQL エクスポート", + "file.backend.sql_dump.view": "ビュー: {{objectName}}", + "file.backend.sql_dump.view_data_skipped": "ビューのデータエクスポートはスキップされました(ビューの INSERT は出力されません)。", + "find_in_database.column.action": "操作", + "find_in_database.column.match_count": "ヒット行数", + "find_in_database.column.matched_columns": "一致した列", + "find_in_database.column.table_name": "テーブル名", + "find_in_database.detail.row_count": "{{count}} 行", + "find_in_database.detail.title": "{{table}} - 一致行の詳細", + "find_in_database.match.contains": "含む", + "find_in_database.match.exact": "完全一致", + "find_in_database.message.connection_config_not_found": "接続設定が見つかりません", + "find_in_database.message.get_tables_failed": "テーブル一覧の取得に失敗しました: {{detail}}", + "find_in_database.message.keyword_required": "検索キーワードを入力してください", + "find_in_database.message.no_matches": "一致するデータが見つかりません", + "find_in_database.message.no_tables": "現在のデータベースにテーブルはありません", + "find_in_database.message.search_failed": "検索エラー: {{detail}}", + "find_in_database.placeholder.keyword": "検索する文字列を入力...", + "find_in_database.progress.searching_table": "{{table}} を検索中... ({{current}}/{{total}})", + "find_in_database.summary.found_tables": "一致するデータを含むテーブルが {{count}} 件見つかりました", + "find_in_database.summary.searching": "(検索中...)", + "find_in_database.title": "データベース内を検索 - {{dbName}}", + "find_in_database.tooltip.collapse_details": "詳細を折りたたむ", + "find_in_database.tooltip.view_details": "詳細を表示", + "import_preview.action.start": "インポート開始", + "import_preview.error.connection_config_not_found": "接続設定が見つかりません", + "import_preview.error.import_failed": "インポートに失敗しました", + "import_preview.error.import_failed_detail": "インポートに失敗しました: {{detail}}", + "import_preview.error.preview_failed": "プレビューに失敗しました", + "import_preview.error.preview_failed_detail": "プレビューに失敗しました: {{detail}}", + "import_preview.preview.description": "最初の 5 行を表示しています。内容を確認してからインポートを開始してください。", + "import_preview.preview.field_list": "フィールド一覧:", + "import_preview.preview.summary": "{{rows}} 行、{{columns}} フィールド", + "import_preview.preview.table_title": "データプレビュー(最初の 5 行):", + "import_preview.progress.error_count": "失敗 {{count}}", + "import_preview.progress.processed_rows": "{{current}} / {{total}} 行を処理済み", + "import_preview.progress.success_count": "成功 {{count}}", + "import_preview.result.completed": "インポートが完了しました", + "import_preview.result.error_logs": "エラーログ:", + "import_preview.result.failed_rows": "{{count}} 行が失敗しました", + "import_preview.result.success_rows": "{{count}} 行を正常にインポートしました", + "import_preview.status.importing": "データをインポート中...", + "import_preview.status.loading_preview": "プレビューデータを読み込み中...", + "import_preview.title": "インポートデータのプレビュー", + "jvm_ai_plan.actions.description": ":{{description}}", + "jvm_ai_plan.actions.field_separator": "、", + "jvm_ai_plan.actions.label": " ({{label}})", + "jvm_ai_plan.actions.none": "現在のリソースはサポートされるアクションを宣言していません。プランを生成する場合は、スナップショットから明確に推測できる場合だけ action を指定し、payload は JSON オブジェクトのままにしてください。", + "jvm_ai_plan.actions.payload_fields": ";payload フィールド:{{fields}}", + "jvm_ai_plan.actions.required_suffix": "(required)", + "jvm_ai_plan.error.action_missing": "AI プランに実行可能な action がありません。", + "jvm_ai_plan.error.payload_json_object_required": "現在の JVM プレビューでは payload は JSON オブジェクトのままである必要があります。", + "jvm_ai_plan.error.reason_missing": "AI プランに変更理由がありません。", + "jvm_ai_plan.error.resource_locator_missing": "AI プランに使用可能なリソース特定情報がありません。", + "jvm_ai_plan.prompt.connection_name": "接続名:{{connectionName}}", + "jvm_ai_plan.prompt.connection_policy": "接続ポリシー:{{policy}}", + "jvm_ai_plan.prompt.connection_policy.read_only": "読み取り専用接続です。生成できるのはプランとリスク分析のみで、実行済みと仮定してはいけません。", + "jvm_ai_plan.prompt.connection_policy.writable": "書き込み可能な接続ですが、変更は必ず先にプレビューし、人が確認する必要があります。", + "jvm_ai_plan.prompt.environment": "実行環境:{{environmentLabel}}", + "jvm_ai_plan.prompt.environment_unknown": "unknown", + "jvm_ai_plan.prompt.example_reason": "キャッシュの不正値を修正", + "jvm_ai_plan.prompt.example_title": "JSON 例:", + "jvm_ai_plan.prompt.intro": "次の JVM リソースを分析し、GoNavi の「変更プレビュー」で使える構造化された変更プランを生成してください。", + "jvm_ai_plan.prompt.output_requirements_title": "出力要件:", + "jvm_ai_plan.prompt.provider_mode": "Provider モード:{{providerMode}}", + "jvm_ai_plan.prompt.requirement.action": "4. action は「現在のリソースでサポートされるアクション」から選ぶことを優先してください。サポートされるアクションが宣言されていない場合のみ、スナップショットから推測できます。", + "jvm_ai_plan.prompt.requirement.fields": "2. コードブロック内の JSON フィールドは厳密に targetType、selector、action、payload、reason のみです。", + "jvm_ai_plan.prompt.requirement.no_execute": "6. 変更をすでに実行したと主張せず、スクリプトやコマンドも出力しないでください。", + "jvm_ai_plan.prompt.requirement.payload": "5. payload は JSON オブジェクトとしてラップしてください。スクリプト、コマンド、生のバイナリは出力しないでください。プレーンテキスト値が必要な場合も {\"format\":\"text\",\"value\":\"...\"} としてラップしてください。", + "jvm_ai_plan.prompt.requirement.resource_path": "3. selector.resourcePath は現在のリソースパス {{resourcePath}} を優先してください。別のパスを作り出さないでください。", + "jvm_ai_plan.prompt.requirement.single_json_block": "1. 短い分析を先に含めてもかまいませんが、回答には ```json コードブロックをちょうど 1 つだけ含めてください。", + "jvm_ai_plan.prompt.resource_path": "現在のリソースパス:{{resourcePath}}", + "jvm_ai_plan.prompt.resource_path_missing": "(リソースパス未指定)", + "jvm_ai_plan.prompt.snapshot_title": "現在のリソーススナップショット:", + "jvm_ai_plan.prompt.supported_actions_title": "現在のリソースでサポートされるアクション:", + "jvm_ai_plan.prompt.target_host": "対象ホスト:{{host}}", + "jvm_ai_plan.snapshot.unavailable": "現在のリソーススナップショットはまだ正常に読み込まれていません。", + "jvm_audit.action.refresh": "再読み込み", + "jvm_audit.card.records": "監査レコード", + "jvm_audit.column.action": "操作", + "jvm_audit.column.mode": "モード", + "jvm_audit.column.reason": "理由", + "jvm_audit.column.resource": "リソース", + "jvm_audit.column.result": "結果", + "jvm_audit.column.source": "ソース", + "jvm_audit.column.time": "時刻", + "jvm_audit.description.current_range": "現在の範囲: 最新 {{limit}} 件", + "jvm_audit.empty.load_failed": "現在、監査レコードを読み込めません", + "jvm_audit.empty.no_records": "監査レコードはありません", + "jvm_audit.error.backend_unavailable": "JVMListAuditRecords バックエンドメソッドを利用できません。", + "jvm_audit.error.connection_missing": "接続が存在しないか、削除されています。", + "jvm_audit.error.load_failed": "JVM 監査レコードの読み込みに失敗しました{{separator}}{{detail}}", + "jvm_audit.eyebrow": "JVM 監査", + "jvm_audit.option.last_records": "最新 {{limit}} 件", + "jvm_audit.source.ai_plan": "AI 支援", + "jvm_audit.source.manual": "手動", + "jvm_audit.title": "JVM 変更監査", + "jvm_change_preview_modal.action.close": "閉じる", + "jvm_change_preview_modal.action.confirm_execute": "実行を確認", + "jvm_change_preview_modal.blocking.alert_message": "現在の変更は実行できません", + "jvm_change_preview_modal.blocking.label": "ブロック理由", + "jvm_change_preview_modal.field.format": "形式", + "jvm_change_preview_modal.field.resource_id": "リソース ID", + "jvm_change_preview_modal.field.version": "バージョン", + "jvm_change_preview_modal.permission.allowed": "実行可能", + "jvm_change_preview_modal.permission.forbidden": "実行禁止", + "jvm_change_preview_modal.permission.requires_confirmation": "確認が必要", + "jvm_change_preview_modal.risk.high": "高", + "jvm_change_preview_modal.risk.label": "リスク {{level}}", + "jvm_change_preview_modal.risk.low": "低", + "jvm_change_preview_modal.risk.medium": "中", + "jvm_change_preview_modal.risk.unknown": "不明", + "jvm_change_preview_modal.section.after": "変更後", + "jvm_change_preview_modal.section.before": "変更前", + "jvm_change_preview_modal.section.summary": "変更概要", + "jvm_change_preview_modal.status.generated": "プレビューが生成されました", + "jvm_change_preview_modal.status.no_preview": "プレビュー結果はありません", + "jvm_change_preview_modal.title": "JVM 変更プレビュー", "jvm_diagnostic.ai_plan.default_reason": "AI 診断プラン:{{intent}}", + "jvm_diagnostic.ai_plan.error.transport_mismatch": "AI プランの診断 transport は {{planTransport}} ですが、現在のコンソール {{currentTransport}} と一致しません。プランを再生成してから適用してください。", + "jvm_diagnostic.ai_plan.message.filled": "AI 診断プランをコンソールに反映しました", + "jvm_diagnostic.capability_result.mutating_allowed": "高リスクコマンド", + "jvm_diagnostic.capability_result.observe_allowed": "Observe コマンド", + "jvm_diagnostic.capability_result.observe_denied": "Observe 禁止", + "jvm_diagnostic.capability_result.session_allowed": "セッション作成可", + "jvm_diagnostic.capability_result.session_denied": "セッション作成不可", + "jvm_diagnostic.capability_result.streaming_supported": "ストリーミング出力", + "jvm_diagnostic.capability_result.streaming_unsupported": "ストリーミング非対応", + "jvm_diagnostic.capability_result.title": "能力確認結果", + "jvm_diagnostic.capability_result.trace_allowed": "Trace コマンド", + "jvm_diagnostic.capability.empty.description": "能力確認はチャネル権限とコマンドポリシーだけを読み取り、セッション作成やコマンド実行は行いません。", + "jvm_diagnostic.capability.empty.title": "能力は未確認です", + "jvm_diagnostic.command_input.command_description": "Arthas/診断コマンドを入力します。例: thread -n 5、dashboard、jvm。下のテンプレートでワンクリック入力できます。", + "jvm_diagnostic.command_input.command_label": "診断コマンド", + "jvm_diagnostic.command_input.description": "自動補完に対応しています。Ctrl/Cmd + Enter で実行します。", + "jvm_diagnostic.command_input.reason_help": "監査記録と AI コンテキストに使用されます。対象 JVM へ Arthas コマンドとして送信されることはありません。", + "jvm_diagnostic.command_input.reason_label": "理由(任意)", + "jvm_diagnostic.command_input.reason_placeholder": "例: 高 CPU の調査、ブロックされたスレッドの確認、遅いメソッドの特定", + "jvm_diagnostic.command_input.title": "コマンド入力", + "jvm_diagnostic.command_templates.title": "コマンドテンプレート", + "jvm_diagnostic.completion.argument.classloader.hash.documentation": "指定したクラスローダーの詳細を表示します。", + "jvm_diagnostic.completion.argument.classloader.hash.label": "指定クラスローダー Hash", + "jvm_diagnostic.completion.argument.classloader.tree.documentation": "クラスローダーツリーを出力します。", + "jvm_diagnostic.completion.argument.classloader.tree.label": "ツリー表示 (-t)", + "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "クラスローダー URL 統計を表示します。", + "jvm_diagnostic.completion.argument.classloader.url_stat.label": "すべての URL 統計 (--url-stat)", + "jvm_diagnostic.completion.argument.command_template.label": "{{command}} テンプレート", + "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "現在の JVM ランタイム概要を表示します。", + "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", + "jvm_diagnostic.completion.argument.detail_mode_d.label": "詳細モード (-d)", + "jvm_diagnostic.completion.argument.jad.template.documentation": "指定したクラスを逆コンパイルします。", + "jvm_diagnostic.completion.argument.jad.template.label": "逆コンパイルテンプレート", + "jvm_diagnostic.completion.argument.jvm.direct.documentation": "JVM メモリ、スレッド、クラスロード、GC、ランタイム引数を表示します。", + "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", + "jvm_diagnostic.completion.argument.monitor.template.documentation": "メソッド呼び出し統計を一定間隔で収集します。", + "jvm_diagnostic.completion.argument.ognl.template.documentation": "OGNL 式を実行します。高リスクコマンドは既定でポリシーにより制限されます。", + "jvm_diagnostic.completion.argument.redefine.template.documentation": "クラスバイトコードファイルのパスを再定義します。", + "jvm_diagnostic.completion.argument.retransform.template.documentation": "指定したクラスを再変換します。", + "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "クラス名パターンで検索します。", + "jvm_diagnostic.completion.argument.sc.class_pattern.label": "クラスパターンテンプレート", + "jvm_diagnostic.completion.argument.sc.detail.documentation": "クラスの詳細情報を出力します。", + "jvm_diagnostic.completion.argument.sm.detail.documentation": "詳細なメソッドシグネチャを出力します。", + "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "クラスのメソッドシグネチャを表示します。", + "jvm_diagnostic.completion.argument.sm.method_signature.label": "メソッドシグネチャテンプレート", + "jvm_diagnostic.completion.argument.stack.template.documentation": "メソッド呼び出しスタックを出力します。", + "jvm_diagnostic.completion.argument.stop.direct.documentation": "現在のバックグラウンドタスクを停止します。", + "jvm_diagnostic.completion.argument.stop.direct.label": "stop", + "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "指定した環境変数を読み取ります。", + "jvm_diagnostic.completion.argument.sysenv.variable.label": "環境変数を表示", + "jvm_diagnostic.completion.argument.sysprop.property.documentation": "指定したシステムプロパティを読み取ります。", + "jvm_diagnostic.completion.argument.sysprop.property.label": "プロパティを表示", + "jvm_diagnostic.completion.argument.thread.blocking.documentation": "現在ほかのスレッドをブロックしているスレッドを検索します。", + "jvm_diagnostic.completion.argument.thread.blocking.label": "ブロックスレッド (-b)", + "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "CPU 使用率が最も高い上位 N 件のスレッドを表示します。", + "jvm_diagnostic.completion.argument.thread.busy_top.label": "ビジースレッド TOP N (-n)", + "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "指定したスレッドの詳細なスタック情報を表示します。", + "jvm_diagnostic.completion.argument.thread.thread_id.label": "指定スレッド ID", + "jvm_diagnostic.completion.argument.trace.condition.documentation": "trace 条件式を追加します。", + "jvm_diagnostic.completion.argument.trace.condition.label": "条件フィルター '#cost > 100'", + "jvm_diagnostic.completion.argument.trace.template.documentation": "遅いメソッド呼び出しチェーンをトレースします。", + "jvm_diagnostic.completion.argument.tt.list.documentation": "現在の記録リストを表示します。", + "jvm_diagnostic.completion.argument.tt.list.label": "記録リストを表示 (-l)", + "jvm_diagnostic.completion.argument.tt.record.documentation": "指定したメソッドの呼び出しを記録します。", + "jvm_diagnostic.completion.argument.tt.record.label": "tt 記録テンプレート", + "jvm_diagnostic.completion.argument.tt.replay.documentation": "指定した記録の詳細を表示します。", + "jvm_diagnostic.completion.argument.tt.replay.label": "記録を再生 (-i)", + "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "指定したクラスのインスタンスを取得します。高リスクコマンドは既定でポリシーにより制限されます。", + "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", + "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "オブジェクトの展開深度を設定します。", + "jvm_diagnostic.completion.argument.watch.expand_depth.label": "展開深度 -x 2", + "jvm_diagnostic.completion.argument.watch.template.documentation": "引数、戻り値、または例外を観測します。", + "jvm_diagnostic.completion.category.control": "制御コマンド", + "jvm_diagnostic.completion.category.mutating": "高リスクコマンド", + "jvm_diagnostic.completion.category.observe": "観測コマンド", + "jvm_diagnostic.completion.category.trace": "トレースコマンド", + "jvm_diagnostic.completion.command.classloader.documentation": "クラスローダー情報を表示します。", + "jvm_diagnostic.completion.command.dashboard.documentation": "JVM ランタイム概要を表示します。", + "jvm_diagnostic.completion.command.jad.documentation": "指定したクラスを逆コンパイルします。", + "jvm_diagnostic.completion.command.jvm.documentation": "JVM メモリ、スレッド、クラスロード、GC、ランタイム引数を表示します。", + "jvm_diagnostic.completion.command.monitor.documentation": "メソッド呼び出し統計を周期的に収集します。", + "jvm_diagnostic.completion.command.ognl.documentation": "OGNL 式を実行します。既定では追加の承認が必要です。", + "jvm_diagnostic.completion.command.redefine.documentation": "クラスバイトコードを再定義します。", + "jvm_diagnostic.completion.command.retransform.documentation": "クラス変換を再実行します。", + "jvm_diagnostic.completion.command.sc.documentation": "一致するクラス情報を検索します。", + "jvm_diagnostic.completion.command.sm.documentation": "クラスのメソッドシグネチャを表示します。", + "jvm_diagnostic.completion.command.stack.documentation": "メソッド呼び出しスタックを出力します。", + "jvm_diagnostic.completion.command.stop.documentation": "現在のバックグラウンドタスクを停止します。", + "jvm_diagnostic.completion.command.sysenv.documentation": "環境変数を表示します。", + "jvm_diagnostic.completion.command.sysprop.documentation": "システムプロパティを表示します。", + "jvm_diagnostic.completion.command.thread.documentation": "ホットスレッド、スレッドスタック、ブロック中のスレッドを表示します。", + "jvm_diagnostic.completion.command.trace.documentation": "メソッド呼び出しの所要時間パスをトレースします。", + "jvm_diagnostic.completion.command.tt.documentation": "メソッドタイムトンネルで呼び出しを記録し、再生します。", + "jvm_diagnostic.completion.command.vmtool.documentation": "JVM オブジェクトを直接操作するか、VMTool アクションを実行します。", + "jvm_diagnostic.completion.command.watch.documentation": "引数、戻り値、または例外を観測します。", + "jvm_diagnostic.completion.detail.class_search_template": "クラス検索テンプレート", + "jvm_diagnostic.completion.detail.classloader_template": "クラスローダーテンプレート", + "jvm_diagnostic.completion.detail.decompile_template": "逆コンパイルテンプレート", + "jvm_diagnostic.completion.detail.environment_variable_template": "環境変数テンプレート", + "jvm_diagnostic.completion.detail.execute_directly": "直接実行", + "jvm_diagnostic.completion.detail.high_risk_template": "高リスクテンプレート", + "jvm_diagnostic.completion.detail.method_search_template": "メソッド検索テンプレート", + "jvm_diagnostic.completion.detail.monitor_template": "monitor テンプレート", + "jvm_diagnostic.completion.detail.stack_template": "スタックテンプレート", + "jvm_diagnostic.completion.detail.system_property_template": "システムプロパティテンプレート", + "jvm_diagnostic.completion.detail.thread_option": "スレッドオプション", + "jvm_diagnostic.completion.detail.time_tunnel_template": "タイムトンネルテンプレート", + "jvm_diagnostic.completion.detail.trace_option": "トレースオプション", + "jvm_diagnostic.completion.detail.trace_template": "トレーステンプレート", + "jvm_diagnostic.completion.detail.watch_option": "watch オプション", + "jvm_diagnostic.completion.detail.watch_template": "watch テンプレート", + "jvm_diagnostic.completion.preset.category.mutating": "高リスクコマンド", + "jvm_diagnostic.completion.preset.category.observe": "観測コマンド", + "jvm_diagnostic.completion.preset.category.trace": "トレースコマンド", + "jvm_diagnostic.completion.preset.dashboard.documentation": "JVM ランタイム概要を表示します。", + "jvm_diagnostic.completion.preset.ognl-sample.documentation": "高リスクの式コマンドです。既定では例としてのみ表示します。", + "jvm_diagnostic.completion.preset.thread-top.documentation": "最もビジーなスレッドを表示し、ブロック中または高 CPU のスレッドをすばやく特定します。", + "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "遅いメソッド呼び出しパスをトレースします。", + "jvm_diagnostic.completion.preset.watch-return.documentation": "引数と戻り値を観測します。", + "jvm_diagnostic.connection_missing.message": "接続が存在しないか、削除されています", + "jvm_diagnostic.error.cancel_failed": "診断コマンドのキャンセルに失敗しました", + "jvm_diagnostic.error.cancel_unavailable": "JVMCancelDiagnosticCommand バックエンドメソッドは使用できません", + "jvm_diagnostic.error.execute_command_required": "診断コマンドは必須です", + "jvm_diagnostic.error.execute_failed": "診断コマンドの実行に失敗しました", + "jvm_diagnostic.error.execute_session_required": "コマンドを実行する前に診断セッションを作成してください", + "jvm_diagnostic.error.execute_unavailable": "JVMExecuteDiagnosticCommand バックエンドメソッドは使用できません", + "jvm_diagnostic.error.history_load_failed": "診断履歴の読み込みに失敗しました", + "jvm_diagnostic.error.probe_failed": "診断能力の確認に失敗しました", + "jvm_diagnostic.error.probe_unavailable": "JVMProbeDiagnosticCapabilities バックエンドメソッドは利用できません", + "jvm_diagnostic.error.start_failed": "診断セッションの作成に失敗しました", + "jvm_diagnostic.error.start_unavailable": "JVMStartDiagnosticSession バックエンドメソッドは使用できません", + "jvm_diagnostic.history.current_session": "現在のセッション", + "jvm_diagnostic.history.description": "最近のコマンドと実行状態", + "jvm_diagnostic.history.no_records": "診断履歴はありません", + "jvm_diagnostic.history.no_session": "診断セッションはまだありません", + "jvm_diagnostic.history.reason_missing": "診断理由は入力されていません", + "jvm_diagnostic.history.recent_records": "最近の記録", + "jvm_diagnostic.history.title": "監査履歴", + "jvm_diagnostic.message.cancel_sent": "キャンセルリクエストを送信しました", + "jvm_diagnostic.no_session.action.probe": "先に能力を確認", + "jvm_diagnostic.no_session.action.start": "診断セッションを作成", + "jvm_diagnostic.no_session.alert.description": "セッションにバインドされていない状態でコマンドを実行できると誤解するのを防ぎ、監査記録、出力ストリーム、キャンセル操作を同じセッションに結び付けます。", + "jvm_diagnostic.no_session.alert.title": "セッション作成後にコマンド入力を表示します", + "jvm_diagnostic.no_session.description": "先にセッションを作成してから、コマンドエディターとテンプレートを表示します", + "jvm_diagnostic.no_session.title": "診断セッションを開始", + "jvm_diagnostic.output.description": "バックエンドイベントストリームに従って追記表示", + "jvm_diagnostic.output.empty.description": "リアルタイム出力はまだありません。コマンド実行後、バックエンドの出力が時系列でここに表示されます。", + "jvm_diagnostic.output.frontend_completed_fallback": "診断コマンド呼び出しは返りましたが、バックエンドの終端イベントを受信していません。フロントエンドがフォールバックとして待機状態を終了しました。", + "jvm_diagnostic.output.local_pending": "診断コマンドを送信しました。バックエンド出力を待機中: {{command}}", + "jvm_diagnostic.output.title": "リアルタイム出力", + "jvm_diagnostic.presentation.category.mutating": "高リスクコマンド", + "jvm_diagnostic.presentation.category.observe": "観測系コマンド", + "jvm_diagnostic.presentation.category.trace": "トレース系コマンド", + "jvm_diagnostic.presentation.chunk.empty_event": "空のイベント", "jvm_diagnostic.presentation.command_type.mutating": "高リスク系", "jvm_diagnostic.presentation.command_type.observe": "観測系", "jvm_diagnostic.presentation.command_type.trace": "トレース系", + "jvm_diagnostic.presentation.event.chunk": "出力チャンク", + "jvm_diagnostic.presentation.event.diagnostic": "診断出力", + "jvm_diagnostic.presentation.event.done": "実行終了", "jvm_diagnostic.presentation.fallback.unknown": "不明", "jvm_diagnostic.presentation.phase.canceled": "キャンセル済み", + "jvm_diagnostic.presentation.phase.canceling": "キャンセル中", + "jvm_diagnostic.presentation.phase.completed": "完了", + "jvm_diagnostic.presentation.phase.diagnostic": "診断イベント", + "jvm_diagnostic.presentation.phase.failed": "失敗", + "jvm_diagnostic.presentation.phase.running": "実行中", "jvm_diagnostic.presentation.risk.high": "高リスク", "jvm_diagnostic.presentation.risk.low": "低リスク", "jvm_diagnostic.presentation.risk.medium": "中リスク", @@ -7117,6 +5291,734 @@ "jvm_diagnostic.presentation.source.manual": "手動入力", "jvm_diagnostic.presentation.transport.agent_bridge": "Agent Bridge", "jvm_diagnostic.presentation.transport.arthas_tunnel": "Arthas Tunnel", + "jvm_diagnostic.session_capability.action.clear_output": "出力をクリア", + "jvm_diagnostic.session_capability.action.refresh_history": "履歴を再読み込み", + "jvm_diagnostic.session_capability.description": "現在のチャネル、権限、クイックメンテナンス", + "jvm_diagnostic.session_capability.note": "能力確認ではコマンドを実行しません。コマンド実行前にセッションを作成する必要があります。監査履歴には最近のコマンド記録が表示され、セッション未作成時でも過去セッションの記録が含まれる場合があります。", + "jvm_diagnostic.session_capability.session_id_hint": "セッション作成後、ここにセッション ID が表示されます。", + "jvm_diagnostic.session_capability.status.command_running": "コマンド実行中", + "jvm_diagnostic.session_capability.status.idle": "アイドル", + "jvm_diagnostic.session_capability.status.no_session": "セッションなし", + "jvm_diagnostic.session_capability.status.session_established": "セッション確立済み", + "jvm_diagnostic.session_capability.title": "セッションと能力", + "jvm_diagnostic.session.default_reason": "コンソールから開始したセッション", + "jvm_diagnostic.session.default_title": "JVM 診断コンソール", + "jvm_diagnostic.workbench.action.cancel_command": "コマンドをキャンセル", + "jvm_diagnostic.workbench.action.execute_command": "コマンドを実行", + "jvm_diagnostic.workbench.action.probe": "能力を確認", + "jvm_diagnostic.workbench.action.restart_session": "セッションを再作成", + "jvm_diagnostic.workbench.action.start_session": "セッションを作成", + "jvm_diagnostic.workbench.eyebrow": "JVM 診断", + "jvm_diagnostic.workbench.status.command_running": "コマンド実行中", + "jvm_diagnostic.workbench.status.no_session": "セッションなし", + "jvm_diagnostic.workbench.status.session_established": "セッション確立済み", + "jvm_diagnostic.workbench.title": "JVM 診断ワークベンチ", + "jvm_diagnostic.workflow.command.description": "セッション作成後にコマンドエディター、理由入力、テンプレートを表示します。", + "jvm_diagnostic.workflow.command.title": "コマンドを実行", + "jvm_diagnostic.workflow.probe.description": "診断チャネル、ストリーミング出力、コマンド権限だけを読み取り、セッションは作成しません。", + "jvm_diagnostic.workflow.probe.title": "能力を確認", + "jvm_diagnostic.workflow.session.description": "診断コンテキストを作成し、以降のコマンドをこのセッションにバインドします。", + "jvm_diagnostic.workflow.session.title": "セッションを作成", + "jvm_monitoring_charts.empty.classes.metric_unavailable": "現在の監視ソースはクラス読み込みのメトリクスを提供していません", + "jvm_monitoring_charts.empty.classes.no_samples": "クラス読み込みのサンプルはまだありません", + "jvm_monitoring_charts.empty.gc.metric_unavailable": "現在の監視ソースはガベージコレクションのメトリクスを提供していません", + "jvm_monitoring_charts.empty.gc.no_samples": "ガベージコレクションのサンプルはまだありません", + "jvm_monitoring_charts.empty.heap.metric_unavailable": "現在の監視ソースはヒープメモリのメトリクスを提供していません", + "jvm_monitoring_charts.empty.heap.no_samples": "ヒープメモリのサンプルはまだありません", + "jvm_monitoring_charts.empty.threads.metric_unavailable": "現在の監視ソースはスレッドのメトリクスを提供していません", + "jvm_monitoring_charts.empty.threads.no_samples": "スレッドのサンプルはまだありません", + "jvm_monitoring_charts.legend.daemon_thread_count": "デーモンスレッド数", + "jvm_monitoring_charts.legend.gc_count": "GC 回数", + "jvm_monitoring_charts.legend.gc_time_ms": "GC 時間(ms)", + "jvm_monitoring_charts.legend.heap_committed": "ヒープコミット量", + "jvm_monitoring_charts.legend.heap_used": "ヒープ使用量", + "jvm_monitoring_charts.legend.loaded_classes": "読み込み済みクラス", + "jvm_monitoring_charts.legend.peak_thread_count": "ピークスレッド数", + "jvm_monitoring_charts.legend.thread_count": "スレッド数", + "jvm_monitoring_charts.legend.unloaded_classes": "アンロード済みクラス", + "jvm_monitoring_charts.title.classes": "クラス読み込み", + "jvm_monitoring_charts.title.gc": "ガベージコレクション", + "jvm_monitoring_charts.title.heap": "ヒープメモリ", + "jvm_monitoring_charts.title.threads": "スレッド", + "jvm_monitoring_dashboard.action.refresh": "再読み込み", + "jvm_monitoring_dashboard.action.start": "監視を開始", + "jvm_monitoring_dashboard.action.stop": "監視を停止", + "jvm_monitoring_dashboard.connection_missing.message": "接続が存在しないか、削除されています", + "jvm_monitoring_dashboard.degraded.message": "監視能力が低下しています", + "jvm_monitoring_dashboard.empty.description": "「監視を開始」をクリックすると、GoNavi は現在のセッション内でこの接続のサンプリング結果を保持し続けます。タブを切り替えてもサンプリングは停止しません。", + "jvm_monitoring_dashboard.empty.title": "継続監視はまだ開始されていません", + "jvm_monitoring_dashboard.error.history_load_failed": "監視履歴の読み込みに失敗しました", + "jvm_monitoring_dashboard.error.history_unavailable": "JVMGetMonitoringHistory バックエンドメソッドは使用できません", + "jvm_monitoring_dashboard.error.start_failed": "監視の開始に失敗しました", + "jvm_monitoring_dashboard.error.start_unavailable": "JVMStartMonitoring バックエンドメソッドは使用できません", + "jvm_monitoring_dashboard.error.stop_failed": "監視の停止に失敗しました", + "jvm_monitoring_dashboard.error.stop_unavailable": "JVMStopMonitoring バックエンドメソッドは使用できません", + "jvm_monitoring_dashboard.status.sampling": "サンプリング中", + "jvm_monitoring_dashboard.status.stopped": "停止中", + "jvm_monitoring_dashboard.title": "JVM 継続監視", + "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "現在の監視ソースはイベントレベルのガベージコレクションデータを提供していません。", + "jvm_monitoring_detail_panel.empty.recent_gc_events": "最近のウィンドウにガベージコレクションイベントはありません。", + "jvm_monitoring_detail_panel.empty.thread_states": "スレッド状態のサンプルはまだありません。", + "jvm_monitoring_detail_panel.field.process_cpu": "プロセス CPU", + "jvm_monitoring_detail_panel.field.process_physical_memory": "プロセス物理メモリ", + "jvm_monitoring_detail_panel.field.process_virtual_memory": "プロセス仮想メモリ", + "jvm_monitoring_detail_panel.field.system_cpu": "システム CPU", + "jvm_monitoring_detail_panel.gc.after": "回収後", + "jvm_monitoring_detail_panel.gc.before": "回収前", + "jvm_monitoring_detail_panel.memory_missing.default": "現在の監視ソースはプロセス常駐物理メモリ指標を返していません。HTTP エンドポイントまたは拡張エージェントがプロセス物理メモリを収集して報告しているか確認してください。", + "jvm_monitoring_detail_panel.memory_missing.jmx": "JMX 接続ではプロセス常駐物理メモリ属性が公開されていないため、現在はプロセス仮想メモリ指標のみ読み取れます。プロセス物理メモリが必要な場合は、HTTP エンドポイントまたは拡張エージェントの収集に切り替えてください。", + "jvm_monitoring_detail_panel.memory_missing.title": "プロセス物理メモリが欠落している理由", + "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "機能と縮退", + "jvm_monitoring_detail_panel.title.recent_gc_details": "最近のガベージコレクション詳細", + "jvm_monitoring_detail_panel.title.thread_state_distribution": "スレッド状態の分布", + "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "トラブルシューティング指標", + "jvm_monitoring_presentation.availability.missing_metrics": "欠落している指標: {{metrics}}", + "jvm_monitoring_presentation.availability.no_obvious_degradation": "現在の監視セッションでは明らかな縮退は見つかりませんでした。", + "jvm_monitoring_presentation.availability.provider_warnings": "監視ソースの警告: {{warnings}}", + "jvm_monitoring_presentation.metric.class_loading": "クラスロード", + "jvm_monitoring_presentation.metric.cpu_process": "プロセス CPU", + "jvm_monitoring_presentation.metric.cpu_system": "システム CPU", + "jvm_monitoring_presentation.metric.gc_count": "ガベージコレクション回数", + "jvm_monitoring_presentation.metric.gc_events": "最近のガベージコレクションイベント", + "jvm_monitoring_presentation.metric.gc_time": "ガベージコレクション時間", + "jvm_monitoring_presentation.metric.heap_non_heap": "非ヒープメモリ", + "jvm_monitoring_presentation.metric.heap_used": "ヒープメモリ", + "jvm_monitoring_presentation.metric.memory_rss": "プロセス物理メモリ", + "jvm_monitoring_presentation.metric.memory_virtual": "プロセス仮想メモリ", + "jvm_monitoring_presentation.metric.thread_count": "スレッド数", + "jvm_monitoring_presentation.metric.thread_states": "スレッド状態", + "jvm_monitoring_presentation.thread_state.blocked": "ブロック中", + "jvm_monitoring_presentation.thread_state.new": "新規", + "jvm_monitoring_presentation.thread_state.runnable": "実行可能", + "jvm_monitoring_presentation.thread_state.terminated": "終了", + "jvm_monitoring_presentation.thread_state.timed_waiting": "時間指定待機", + "jvm_monitoring_presentation.thread_state.waiting": "待機中", + "jvm_monitoring_status_cards.meta.gc_total_time": "累計 {{value}}", + "jvm_monitoring_status_cards.meta.heap_committed": "コミット済み {{value}}", + "jvm_monitoring_status_cards.meta.thread_peak": "ピーク {{value}}", + "jvm_monitoring_status_cards.meta.waiting_samples": "サンプル待ち", + "jvm_monitoring_status_cards.status.sampling": "サンプリング中", + "jvm_monitoring_status_cards.status.stopped": "停止中", + "jvm_monitoring_status_cards.thread_state.runnable_count": "実行可能 {{count}}", + "jvm_monitoring_status_cards.title.classes": "クラス読み込み", + "jvm_monitoring_status_cards.title.gc_pressure": "ガベージコレクション負荷", + "jvm_monitoring_status_cards.title.heap": "ヒープメモリ", + "jvm_monitoring_status_cards.title.threads": "スレッド", + "jvm_overview.badge.read_only": "読み取り専用接続", + "jvm_overview.badge.writable": "書き込み可能な接続", + "jvm_overview.capability.can_browse": "閲覧可能", + "jvm_overview.capability.cannot_browse": "閲覧不可", + "jvm_overview.capability.preview_supported": "プレビュー対応", + "jvm_overview.capability.preview_unsupported": "プレビュー非対応", + "jvm_overview.capability.read_only": "読み取り専用", + "jvm_overview.capability.writable": "書き込み可", + "jvm_overview.card.connection_summary": "接続サマリー", + "jvm_overview.card.mode_capability": "モード能力", + "jvm_overview.connection_missing.message": "接続が存在しないか、削除されています", + "jvm_overview.empty.capabilities": "モード能力データはありません", + "jvm_overview.error.capability_load_failed": "JVM モード能力の読み取りに失敗しました", + "jvm_overview.eyebrow": "JVM ランタイム", + "jvm_overview.field.agent": "Agent", + "jvm_overview.field.allowed_modes": "許可モード", + "jvm_overview.field.current_mode": "現在のモード", + "jvm_overview.field.endpoint": "Endpoint", + "jvm_overview.field.jmx_address": "JMX アドレス", + "jvm_overview.field.resource_browse": "リソース閲覧", + "jvm_overview.title": "JVM ランタイム概要", + "jvm_overview.value.enabled": "有効", + "jvm_overview.value.not_configured": "未設定", + "jvm_overview.value.resource_browse_lazy_load": "サイドバーでモードノードを展開した後に遅延読み込みします", + "jvm_resource.action.ask_ai_plan": "AI にプランを作成させる", + "jvm_resource.action.audit": "監査ログ", + "jvm_resource.action.generate_ai_plan": "AI プランを生成", + "jvm_resource.action.preview_change": "変更をプレビュー", + "jvm_resource.badge.read_only": "読み取り専用接続", + "jvm_resource.badge.writable": "書き込み可能な接続", + "jvm_resource.card.change_draft": "変更草稿", + "jvm_resource.card.snapshot": "リソーススナップショット", + "jvm_resource.draft_source.ai_plan": "AI 支援の草稿", + "jvm_resource.draft_source.manual": "手動編集", + "jvm_resource.empty.no_resource_data": "リソースデータはありません", + "jvm_resource.error.ai_plan_context_mismatch": "現在の JVM タブは AI プランの生成元コンテキストと一致しないため、自動適用を拒否しました。", + "jvm_resource.error.ai_plan_missing_context": "AI プランに生成元コンテキストがありません。対象の JVM リソースページで再生成してから適用してください。", + "jvm_resource.error.ai_plan_to_draft_failed": "AI プランを JVM プレビュー草稿に変換できません。", + "jvm_resource.error.apply_failed": "JVM 変更の実行に失敗しました。", + "jvm_resource.error.apply_unavailable": "このビルドでは JVM 変更の実行を利用できません。", + "jvm_resource.error.confirmation_missing": "確認トークンがありません。実行前にもう一度プレビューしてください。", + "jvm_resource.error.connection_missing": "接続が存在しないか、削除されています。", + "jvm_resource.error.context_changed": "リソースコンテキストが変更されています。実行前にもう一度プレビューしてください。", + "jvm_resource.error.draft_invalid": "変更草稿が不正です。", + "jvm_resource.error.get_value_unavailable": "このビルドでは JVM 値の読み取りを利用できません。", + "jvm_resource.error.payload_object_required": "Payload は JSON オブジェクトである必要があります。", + "jvm_resource.error.preview_failed": "JVM 変更のプレビューに失敗しました。", + "jvm_resource.error.preview_required": "実行を確定する前に変更をプレビューしてください。", + "jvm_resource.error.preview_result_invalid": "プレビュー結果の形式が正しくありません。", + "jvm_resource.error.preview_unavailable": "このビルドでは JVM 変更プレビューを利用できません。", + "jvm_resource.error.read_failed": "JVM リソースの読み取りに失敗しました。", + "jvm_resource.error.reason_required": "変更理由を入力してください。", + "jvm_resource.error.resource_id_empty": "リソース ID が空のため、変更草稿を作成できません。", + "jvm_resource.error.resource_path_empty": "リソースパスが空です。", + "jvm_resource.field.action": "操作", + "jvm_resource.field.available_actions": "利用可能な操作", + "jvm_resource.field.draft_source": "草稿の作成元", + "jvm_resource.field.format": "形式", + "jvm_resource.field.payload": "Payload(JSON)", + "jvm_resource.field.payload_fields": "Payload フィールド: ", + "jvm_resource.field.reason": "変更理由", + "jvm_resource.field.resource_id": "リソース ID", + "jvm_resource.field.resource_path": "リソースパス", + "jvm_resource.field.resource_type": "リソース種別", + "jvm_resource.field.resource_version": "リソースバージョン", + "jvm_resource.field.target_resource": "対象リソース", + "jvm_resource.field.version": "バージョン", + "jvm_resource.list_separator": "、", + "jvm_resource.marker.required_suffix": "(必須)", + "jvm_resource.message.ai_plan_draft_filled": "AI プランから {{resourceId}} の草稿を入力しました。書き込みを確定する前に変更をプレビューしてください。", + "jvm_resource.message.apply_success": "JVM 変更を実行しました。", + "jvm_resource.message.current_action": "現在の操作: ", + "jvm_resource.message.payload_hint": "プレビューでは現在の草稿を使用します。実行確定では直近に成功したプレビュー時の内容を使用します。草稿を変更した後は再度プレビューしてください。", + "jvm_resource.message.payload_template_applied": "現在の操作に合わせた推奨テンプレートを入力しました。", + "jvm_resource.placeholder.action_default": "例: put / clear / evict", + "jvm_resource.placeholder.action_jmx": "例: set または invoke", + "jvm_resource.placeholder.reason": "この JVM リソース変更の理由を入力", + "jvm_resource.presentation.action.clear.description": "現在の JVM リソース内のデータまたは状態をクリアします。", + "jvm_resource.presentation.action.clear.label": "リソースをクリア", + "jvm_resource.presentation.action.delete.description": "現在のリソースを削除または登録解除します。", + "jvm_resource.presentation.action.delete.label": "リソースを削除", + "jvm_resource.presentation.action.evict.description": "対象のキャッシュ項目を現在の JVM ランタイムから退避します。", + "jvm_resource.presentation.action.evict.label": "キャッシュを退避", + "jvm_resource.presentation.action.invoke.description": "現在のリソースが公開する管理操作を呼び出します。", + "jvm_resource.presentation.action.invoke.label": "操作を呼び出す", + "jvm_resource.presentation.action.put.description": "payload の内容を現在の JVM リソースに書き込みます。", + "jvm_resource.presentation.action.put.label": "リソースへ書き込み", + "jvm_resource.presentation.action.refresh.description": "現在のリソースのランタイム状態を更新します。", + "jvm_resource.presentation.action.refresh.label": "リソースを更新", + "jvm_resource.presentation.action.reload.description": "現在のリソースまたはその設定を再読み込みします。", + "jvm_resource.presentation.action.reload.label": "再読み込み", + "jvm_resource.presentation.action.remove.description": "現在のリソースから指定した項目を削除します。", + "jvm_resource.presentation.action.remove.label": "項目を削除", + "jvm_resource.presentation.action.reset.description": "現在のリソースを初期状態または既定状態に戻します。", + "jvm_resource.presentation.action.reset.label": "状態をリセット", + "jvm_resource.presentation.action.set.description": "現在のリソースが公開する書き込み可能なプロパティ値を更新します。", + "jvm_resource.presentation.action.set.label": "プロパティを設定", + "jvm_resource.presentation.audit_result.applied": "実行済み", + "jvm_resource.presentation.audit_result.blocked": "ブロック済み", + "jvm_resource.presentation.audit_result.failed": "失敗", + "jvm_resource.presentation.audit_result.success": "成功", + "jvm_resource.presentation.audit_result.unknown": "不明", + "jvm_resource.presentation.audit_result.warning": "警告", + "jvm_resource.presentation.risk.high": "高", + "jvm_resource.presentation.risk.low": "低", + "jvm_resource.presentation.risk.medium": "中", + "jvm_resource.presentation.risk.unknown": "不明", + "jvm_resource.presentation.unnamed_action": "名前のない操作", + "jvm_resource.section.metadata": "メタデータ", + "jvm_resource.section.resource_value": "リソース値", + "jvm_resource.section.supported_actions": "リソースでサポートされる操作", + "jvm_resource.title": "JVM リソースワークベンチ", + "jvm.backend.capability.reason.read_only": "現在の接続は読み取り専用です", + "jvm.backend.connection_error.agent.base_url_invalid.help": "完全な `http://` または `https://` の URL を入力してください。例: `http://127.0.0.1:19090/gonavi/agent/jvm`。", + "jvm.backend.connection_error.agent.base_url_invalid.summary": "Agent 接続に失敗しました: Agent Base URL の形式が正しくありません。", + "jvm.backend.connection_error.agent.base_url_required": "Agent 接続に失敗しました: Agent Base URL が未入力です。", + "jvm.backend.connection_error.agent.connection_refused.help": "Java サービスが `-javaagent` で GoNavi Agent を起動していることを確認し、Base URL、ポートマッピング、ファイアウォールを確認してください。", + "jvm.backend.connection_error.agent.connection_refused.summary": "Agent 接続に失敗しました: ターゲット Agent 管理ポートが待ち受けていないか、現在のアドレスに到達できません。", + "jvm.backend.connection_error.agent.forbidden.help": "現在のクライアント送信元、認証設定、Agent アクセスポリシーが GoNavi のアクセスを許可しているか確認してください。", + "jvm.backend.connection_error.agent.forbidden.summary": "Agent 接続に失敗しました: Agent がこのリクエストを拒否しました。", + "jvm.backend.connection_error.agent.scheme_unsupported.help": "Agent Base URL を `http://` または `https://` で始まるアドレスに変更してください。", + "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Agent 接続に失敗しました: HTTP または HTTPS のみサポートされています。", + "jvm.backend.connection_error.agent.timeout.help": "ターゲットアドレスに到達できること、Agent が起動済みであることを確認し、必要に応じて接続タイムアウトを増やしてください。", + "jvm.backend.connection_error.agent.timeout.summary": "Agent 接続に失敗しました: Agent 管理ポートへのアクセスがタイムアウトしました。", + "jvm.backend.connection_error.agent.unauthorized.help": "接続内の Agent API Key がターゲットサービスの起動パラメータと一致するか確認してください。", + "jvm.backend.connection_error.agent.unauthorized.summary": "Agent 接続に失敗しました: Agent は応答しましたが、API Key が無効または不足しています。", + "jvm.backend.connection_error.endpoint.base_url_invalid.help": "完全な `http://` または `https://` の URL を入力し、GoNavi JVM HTTP コントラクトを実装する管理 API ルートを指すようにしてください。例: `http://127.0.0.1:19090/manage/jvm`。", + "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Endpoint 接続に失敗しました: Endpoint Base URL の形式が正しくありません。", + "jvm.backend.connection_error.endpoint.base_url_required": "Endpoint 接続に失敗しました: Endpoint Base URL が未入力です。", + "jvm.backend.connection_error.endpoint.connection_refused.help": "Base URL が GoNavi JVM HTTP コントラクトを実装する管理 API を指していることを確認し、サービスの待ち受け、ポートマッピング、ファイアウォールを確認してください。", + "jvm.backend.connection_error.endpoint.connection_refused.summary": "Endpoint 接続に失敗しました: ターゲット管理 API が待ち受けていないか、現在のアドレスに到達できません。", + "jvm.backend.connection_error.endpoint.forbidden.help": "現在のクライアント送信元、認証設定、アクセスポリシーが GoNavi にこの管理 API へのアクセスを許可しているか確認してください。", + "jvm.backend.connection_error.endpoint.forbidden.summary": "Endpoint 接続に失敗しました: ターゲット管理 API がこのリクエストを拒否しました。", + "jvm.backend.connection_error.endpoint.not_found.help": "Base URL が通常の業務 API、ヘルスチェック、ゲートウェイのトップではなく、JVM 管理 API ルートを指していることを確認してください。", + "jvm.backend.connection_error.endpoint.not_found.summary": "Endpoint 接続に失敗しました: ターゲットは応答しましたが、GoNavi JVM 管理 API が見つかりません。", + "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "Endpoint Base URL を `http://` または `https://` で始まるアドレスに変更してください。", + "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Endpoint 接続に失敗しました: HTTP または HTTPS のみサポートされています。", + "jvm.backend.connection_error.endpoint.timeout.help": "Base URL に到達できること、ターゲットサービスが起動済みであることを確認し、必要に応じて接続タイムアウトを増やしてください。", + "jvm.backend.connection_error.endpoint.timeout.summary": "Endpoint 接続に失敗しました: ターゲット管理 API へのアクセスがタイムアウトしました。", + "jvm.backend.connection_error.endpoint.unauthorized.help": "接続内の Endpoint API Key がターゲットサービスの設定と一致するか確認してください。", + "jvm.backend.connection_error.endpoint.unauthorized.summary": "Endpoint 接続に失敗しました: ターゲット管理 API は応答しましたが、API Key が無効または不足しています。", + "jvm.backend.connection_error.generic": "JVM 接続に失敗しました", + "jvm.backend.connection_error.jmx.auth.help": "ターゲット JMX が認証を無効にしているか確認してください。認証が必要な場合は、接続前にユーザー名とパスワードを入力してください。", + "jvm.backend.connection_error.jmx.auth.summary": "JMX 接続に失敗しました: {{target}} は認証が必要か、現在の認証情報が無効です。", + "jvm.backend.connection_error.jmx.connection_refused.help": "ターゲット JVM でリモート JMX が有効であることを確認し、ホスト、ファイアウォール、ポートマッピング、SSH、プロキシ設定を確認してください。", + "jvm.backend.connection_error.jmx.connection_refused.summary": "JMX 接続に失敗しました: {{target}} に接続できません。ポートが待ち受けていないか、ネットワークに到達できません。", + "jvm.backend.connection_error.jmx.connection_reset.help": "設定したポートが JVM の公開 JMX ポートであり、業務ポート、デバッグポート、プロキシ転送ポートではないことを確認してください。", + "jvm.backend.connection_error.jmx.connection_reset.summary": "JMX 接続に失敗しました: {{target}} のサービスが接続を閉じました。このポートは互換性のある標準 JMX RMI ポートではありません。", + "jvm.backend.connection_error.jmx.host_required": "JMX 接続に失敗しました: ホストが未入力です。", + "jvm.backend.connection_error.jmx.java_missing.help": "先に JRE/JDK をインストールするか、環境変数 `GONAVI_JMX_JAVA_BIN` で正しい `java` 実行ファイルを指定してください。", + "jvm.backend.connection_error.jmx.java_missing.summary": "JMX 接続に失敗しました: 現在のマシンで `java` runtime が見つからないため、GoNavi は JMX helper を起動できません。", + "jvm.backend.connection_error.jmx.no_such_object.help": "これは通常、RMI レジストリ、デバッグポート、または別の Java サービスポートを指定していることを意味します。`jmxremote.port` と `jmxremote.rmi.port` の設定を確認してください。", + "jvm.backend.connection_error.jmx.no_such_object.summary": "JMX 接続に失敗しました: {{target}} には RMI サービスがありますが、利用可能な JMX RMIServer ポートではありません。", + "jvm.backend.connection_error.jmx.non_jrmp.help": "業務 `server.port` ではなく、アプリケーションが実際に公開している JMX ポートを指定してください。サービスが `-Dcom.sun.management.jmxremote` のみ有効で `jmxremote.port` を設定していない場合も、直接リモート接続はできません。", + "jvm.backend.connection_error.jmx.non_jrmp.summary": "JMX 接続に失敗しました: {{target}} は標準の JMX リモート管理ポートではなく、業務ポートまたは HTTP ポートのように見えます。", + "jvm.backend.connection_error.jmx.port_invalid": "JMX 接続に失敗しました: ポートが無効です。1-65535 の有効なポートを入力してください。", + "jvm.backend.connection_error.jmx.timeout.help": "ポートに到達できること、ネットワークがブロックされていないことを確認し、必要に応じて接続タイムアウトを増やしてください。", + "jvm.backend.connection_error.jmx.timeout.summary": "JMX 接続に失敗しました: {{target}} への接続がタイムアウトしました。", + "jvm.backend.connection_error.suggestion": "提案: {{detail}}", + "jvm.backend.connection_error.technical_detail": "技術詳細: {{detail}}", + "jvm.backend.diagnostic.arthas.base_url_invalid": "Arthas Tunnel のアドレスが不正です: {{detail}}", + "jvm.backend.diagnostic.arthas.base_url_required": "Arthas Tunnel のアドレスが必要です", + "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "この Arthas Tunnel セッションのアクティブコマンドはキャンセル対象コマンドと一致しません。", + "jvm.backend.diagnostic.arthas.command_already_running": "この Arthas Tunnel セッションではすでにコマンドが実行中です。完了を待つか先にキャンセルしてください。", + "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel コマンドはキャンセルされました", + "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel コマンドは {{timeout}} でタイムアウトしました", + "jvm.backend.diagnostic.arthas.connect_canceled": "Arthas Tunnel WebSocket 接続はキャンセルされました", + "jvm.backend.diagnostic.arthas.connect_failed": "Arthas Tunnel WebSocket 接続に失敗しました: {{detail}}", + "jvm.backend.diagnostic.arthas.connect_timeout": "Arthas Tunnel WebSocket 接続は {{timeout}} 応答がなくタイムアウトしました", + "jvm.backend.diagnostic.arthas.connection_closed": "Arthas Tunnel 接続が閉じられました: {{detail}}", + "jvm.backend.diagnostic.arthas.connection_closed_code": "Arthas Tunnel 接続が閉じられました: code={{code}}", + "jvm.backend.diagnostic.arthas.connection_not_ready": "Arthas Tunnel 接続はまだ準備できていません。後でもう一度試してください。", + "jvm.backend.diagnostic.arthas.http_failed": "Arthas Tunnel 接続に失敗しました: HTTP {{status}}", + "jvm.backend.diagnostic.arthas.no_running_command": "この Arthas Tunnel セッションには実行中のコマンドがありません。", + "jvm.backend.diagnostic.arthas.read_canceled": "Arthas Tunnel 出力の読み取りはキャンセルされました", + "jvm.backend.diagnostic.arthas.read_deadline_failed": "Arthas Tunnel の読み取り期限設定に失敗しました: {{detail}}", + "jvm.backend.diagnostic.arthas.read_failed": "Arthas Tunnel 出力の読み取りに失敗しました: {{detail}}", + "jvm.backend.diagnostic.arthas.read_timeout": "Arthas Tunnel 出力の読み取りは {{timeout}} 応答がなくタイムアウトしました", + "jvm.backend.diagnostic.arthas.request_encode_failed": "Arthas Tunnel リクエストのエンコードに失敗しました: {{detail}}", + "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel は http/https/ws/wss アドレスのみサポートします: {{scheme}}", + "jvm.backend.diagnostic.arthas.send_canceled": "Arthas Tunnel 端末コマンドの送信はキャンセルされました", + "jvm.backend.diagnostic.arthas.send_failed": "Arthas Tunnel 端末コマンドの送信に失敗しました: {{detail}}", + "jvm.backend.diagnostic.arthas.send_timeout": "Arthas Tunnel 端末コマンドの送信は {{timeout}} 応答がなくタイムアウトしました", + "jvm.backend.diagnostic.arthas.session_config_changed": "Arthas Tunnel セッション設定が変更されています。診断セッションを再作成してください。", + "jvm.backend.diagnostic.arthas.session_missing": "診断セッションが存在しません。Arthas Tunnel セッションを再作成してください。", + "jvm.backend.diagnostic.arthas.target_id_required": "Arthas Tunnel の target ID が必要です (targetId / agentId)", + "jvm.backend.diagnostic.arthas.target_not_found": "ターゲットインスタンスが見つかりません。targetId / agentId が正しいことと、対応する tunnel client がオンラインであることを確認してください。", + "jvm.backend.diagnostic.arthas.target_not_found_with_id": "ターゲットインスタンス {{target}} が見つかりません。targetId / agentId が正しいことと、対応する tunnel client がオンラインであることを確認してください。", + "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Arthas Tunnel 端末コマンドのエンコードに失敗しました: {{detail}}", + "jvm.backend.diagnostic.arthas.write_deadline_failed": "Arthas Tunnel の書き込み期限設定に失敗しました: {{detail}}", + "jvm.backend.diagnostic.error.audit_write_blocked": "診断監査レコードの書き込みに失敗したため、コマンド実行をブロックしました: {{detail}}", + "jvm.backend.diagnostic.error.cancel_identifiers_required": "キャンセルコマンドには sessionId と commandId が必要です", + "jvm.backend.diagnostic.error.command_required": "診断コマンドは空にできません", + "jvm.backend.diagnostic.error.disabled": "この接続では JVM 診断強化モードが有効ではありません", + "jvm.backend.diagnostic.error.execute_canceled": "診断実行リクエストがキャンセルされました: {{detail}}", + "jvm.backend.diagnostic.error.session_id_required": "診断セッション ID が必要です。先にセッションを作成してください。", + "jvm.backend.diagnostic.error.transport_unsupported": "サポートされていない JVM 診断トランスポートです: {{transport}}", + "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas コマンドはキャンセルされました", + "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas コマンドの実行が完了しました", + "jvm.backend.diagnostic.message.cancel_requested": "キャンセルリクエストを送信しました。診断ブリッジ側でコマンドが終了するのを待っています", + "jvm.backend.diagnostic.message.command_completed": "診断コマンドの実行が完了しました", + "jvm.backend.diagnostic.policy.multiline_not_supported": "診断コマンドは改行または複数コマンド入力をサポートしていません", + "jvm.backend.diagnostic.policy.mutating_not_allowed": "この接続では高リスク診断コマンドが有効ではありません: {{command}}", + "jvm.backend.diagnostic.policy.observe_not_allowed": "この接続では観察系診断コマンドが有効ではありません: {{command}}", + "jvm.backend.diagnostic.policy.read_only_observe_only": "現在の接続は読み取り専用です。観察系診断コマンドのみ許可されます", + "jvm.backend.diagnostic.policy.trace_not_allowed": "この接続ではトレース系診断コマンドが有効ではありません: {{command}}", + "jvm.backend.diagnostic.warning.audit_write_failed": "監査レコードの書き込みに失敗しました: {{detail}}", + "jvm.backend.error.audit_write_blocked": "監査レコードの書き込みに失敗したため、JVM 変更をブロックしました: {{detail}}", + "jvm.backend.error.change_action_required": "JVM 変更アクションが必要です", + "jvm.backend.error.change_blocked_by_guard": "現在の変更は Guard によってブロックされました", + "jvm.backend.error.change_blocked_read_only": "現在の接続は読み取り専用のため、書き込みはブロックされます", + "jvm.backend.error.change_confirmation_token_failed": "JVM 変更確認トークンの生成に失敗しました: {{detail}}", + "jvm.backend.error.change_reason_required": "JVM 変更理由が必要です", + "jvm.backend.error.change_resource_id_required": "JVM リソース ID が必要です", + "jvm.backend.error.confirmation_token_expired": "確認トークンの有効期限が切れました。もう一度プレビューして確認してください。", + "jvm.backend.error.confirmation_token_invalid": "確認トークンが無効です。もう一度プレビューして確認してください。", + "jvm.backend.error.confirmation_token_missing": "確認トークンがありません。先にプレビュー確認を完了してください。", + "jvm.backend.error.disallowed_mode": "現在の接続では {{mode}} モードを使用できません", + "jvm.backend.error.preview_confirmation_missing": "プレビュー確認トークンがありません。もう一度プレビューしてから送信してください。", + "jvm.backend.error.preview_context_hash_failed": "JVM プレビューコンテキストの生成に失敗しました: {{detail}}", + "jvm.backend.error.preview_payload_hash_failed": "JVM プレビュー Payload ダイジェストの生成に失敗しました: {{detail}}", + "jvm.backend.error.resource_path_invalid": "JVM リソースパスが無効です: {{detail}}", + "jvm.backend.message.connect_success": "JVM 接続に成功しました", + "jvm.backend.monitoring.error.session_not_found": "{{connectionId}} {{providerMode}} の JVM 監視セッションが見つかりません", + "jvm.backend.monitoring.error.snapshot_unsupported": "{{provider}} 監視スナップショットはまだサポートされていません", + "jvm.backend.monitoring.warning.sample_auto_stopped": "監視サンプリングが {{count}} 回連続で失敗したため、このセッションは自動停止されました", + "jvm.backend.separator.message_warning": ";", + "jvm.backend.warning.failed_audit_write_failed": "失敗監査レコードの書き込みに失敗しました: {{detail}}", + "jvm.backend.warning.terminal_audit_write_failed": "終端監査レコードの書き込みに失敗しました: {{detail}}", + "log_panel.action.clear": "ログをクリア", + "log_panel.action.close": "パネルを閉じる", + "log_panel.affected_rows": "影響行数: {{count}}", + "log_panel.column.duration": "所要時間", + "log_panel.column.sql_message": "SQL / メッセージ", + "log_panel.column.status": "状態", + "log_panel.column.time": "時刻", + "log_panel.description": "実行状態、所要時間、エラー情報を記録してすばやく確認できます。", + "log_panel.empty": "SQL 実行ログはありません", + "log_panel.short_title": "ログ", + "log_panel.title": "SQL 実行ログ", + "message_publish_modal.action.send": "送信", + "message_publish_modal.error.build_command_failed": "送信コマンドの作成に失敗しました", + "message_publish_modal.error.send_failed_detail": "送信に失敗しました: {{detail}}", + "message_publish_modal.error.unknown_error": "不明なエラー", + "message_publish_modal.field.body_mode.label": "メッセージ本文タイプ", + "message_publish_modal.field.body.extra": "JSON モードでは有効な JSON が必要です。テキストモードでは内容をそのまま送信します。", + "message_publish_modal.field.body.label": "メッセージ本文", + "message_publish_modal.field.body.placeholder": "メッセージ本文を入力してください", + "message_publish_modal.field.body.required": "メッセージ本文を入力してください", + "message_publish_modal.field.delay_level.extra": "RocketMQ は固定の遅延レベルを使用します。0 は即時送信です。", + "message_publish_modal.field.delay_level.label": "Delay Level(任意)", + "message_publish_modal.field.exchange.extra": "空のままにすると既定の exchange を使用します。カスタム exchange を入力する場合は、対象 Queue に binding があることを確認してください。", + "message_publish_modal.field.exchange.label": "Exchange(任意)", + "message_publish_modal.field.exchange.placeholder": "例:events.topic", + "message_publish_modal.field.headers.extra": "JSON オブジェクトである必要があります。例:{{example}}。", + "message_publish_modal.field.headers.label": "Headers(任意)", + "message_publish_modal.field.properties.extra": "JSON オブジェクトである必要があります。例:{{example}}。", + "message_publish_modal.field.properties.label": "Properties(任意)", + "message_publish_modal.field.qos.extra": "0 は at most once、1 は at least once、2 は exactly once です。", + "message_publish_modal.field.retain.label": "Retain メッセージ", + "message_publish_modal.field.routing_key.extra": "空のままにすると現在の Queue 名を既定で使用します。", + "message_publish_modal.field.routing_key.label": "Routing Key(任意)", + "message_publish_modal.field.routing_key.placeholder": "例:orders.queue", + "message_publish_modal.field.tag.extra": "空のままにすると Tag によるフィルタや書き込みを行いません。", + "message_publish_modal.field.tag.label": "Tag(任意)", + "message_publish_modal.footer.success_prefix": "送信に成功すると", + "message_publish_modal.footer.success_suffix": " が返り、このテストメッセージが送信されたか確認できます。", + "message_publish_modal.option.no_delay": "遅延なし", + "message_publish_modal.option.text": "テキスト", + "message_publish_modal.title": "メッセージ送信テスト", + "message_publish_modal.title_with_connection": "メッセージ送信テスト · {{connectionName}}", + "message_publish.error.destination_required": "送信先 Topic / Queue を入力してください", + "message_publish.error.invalid_json_detail": "{{field}} は有効な JSON ではありません:{{detail}}", + "message_publish.error.json_object_required": "{{field}} は JSON オブジェクトである必要があります", + "message_publish.error.mqtt_wildcard_topic": "MQTT 送信 Topic に + または # ワイルドカードは使用できません", + "message_publish.error.required_field": "{{field}}を入力してください", + "message_publish.error.unsupported_type": "現在のデータソースはテストメッセージ送信に対応していません:{{type}}", + "message_publish.field.body": "メッセージ本文", + "message_publish.field.message_key": "メッセージ Key", + "message_publish.presentation.kafka.alert": "このフォームは Kafka publish JSON コマンドを自動生成し、バックエンドを直接呼び出してテスト送信します。", + "message_publish.presentation.kafka.destination_placeholder": "例:orders.events", + "message_publish.presentation.kafka.key_placeholder": "空でもかまいません。JSON モードでは有効な JSON を 1 行で入力してください。", + "message_publish.presentation.kafka.success_hint": "Headers は Kafka Record Headers として一緒に送信されます。", + "message_publish.presentation.key_label": "メッセージ Key(任意)", + "message_publish.presentation.keys_label": "メッセージ Keys(任意)", + "message_publish.presentation.mqtt.alert": "このフォームは MQTT publish JSON コマンドを自動生成し、broker 経由で直接テスト送信します。", + "message_publish.presentation.mqtt.destination_placeholder": "例:devices/device-001/telemetry", + "message_publish.presentation.mqtt.success_hint": "QoS と retain は個別に指定できます。未入力の場合は現在の接続の既定値を使用します。", + "message_publish.presentation.rabbitmq.alert": "このフォームは RabbitMQ publish JSON コマンドを自動生成し、Management API 経由でテスト送信します。", + "message_publish.presentation.rabbitmq.destination_placeholder": "例:orders.queue", + "message_publish.presentation.rabbitmq.destination_required": "Queue を入力してください", + "message_publish.presentation.rabbitmq.success_hint": "Exchange が空の場合は既定の exchange を使用し、Queue 名を routing key として使用します。", + "message_publish.presentation.rocketmq.alert": "このフォームは RocketMQ publish JSON コマンドを自動生成し、NameServer/Broker 経由でテスト送信します。", + "message_publish.presentation.rocketmq.destination_placeholder": "例:orders.events", + "message_publish.presentation.rocketmq.key_placeholder": "複数の Key をカンマ区切りで入力できます", + "message_publish.presentation.rocketmq.success_hint": "Tag、Keys、Delay Level、Properties は RocketMQ メッセージ属性に一緒に書き込まれます。", + "message_publish.presentation.rocketmq.tag_placeholder": "例:TagA", + "message_publish.presentation.topic_required": "Topic を入力してください", + "proxy.backend.error.host_empty": "プロキシホストが空です", + "proxy.backend.error.http_connect_failed": "HTTP プロキシへの接続に失敗しました: {{detail}}", + "proxy.backend.error.http_connect_read_failed": "HTTP CONNECT レスポンスの読み取りに失敗しました: {{detail}}", + "proxy.backend.error.http_connect_status_failed": "HTTP プロキシ CONNECT に失敗しました: {{status}}", + "proxy.backend.error.http_connect_write_failed": "HTTP CONNECT リクエストの送信に失敗しました: {{detail}}", + "proxy.backend.error.listen_failed": "ローカルプロキシリスナーの作成に失敗しました: {{detail}}", + "proxy.backend.error.port_invalid": "プロキシポートが無効です: {{port}}", + "proxy.backend.error.remote_addr_invalid": "リモートアドレスが無効です: {{address}}", + "proxy.backend.error.socks5_connect_failed": "SOCKS5 プロキシ接続に失敗しました: {{detail}}", + "proxy.backend.error.socks5_dialer_failed": "SOCKS5 プロキシダイヤラーの作成に失敗しました: {{detail}}", + "proxy.backend.error.unsupported_type": "サポートされていないプロキシ種別: {{type}}", + "query_editor.action.ai_explain_sql": "AI で SQL を説明", + "query_editor.action.ai_explain_sql_menu": "SQL を説明", + "query_editor.action.ai_generate_sql": "AI で SQL を生成", + "query_editor.action.ai_generate_sql_menu": "SQL を生成", + "query_editor.action.ai_optimize_sql": "AI で SQL を最適化", + "query_editor.action.ai_optimize_sql_menu": "SQL を最適化", + "query_editor.action.ai_schema_analysis": "スキーマ分析", + "query_editor.action.export_sql_file": "SQL ファイルをエクスポート", + "query_editor.action.format": "整形", + "query_editor.action.format_sql": "SQL を整形", + "query_editor.action.hide_results_panel": "結果エリアを非表示", + "query_editor.action.hide_results_panel_with_shortcut": "結果エリアを非表示({{shortcut}})", + "query_editor.action.more": "その他", + "query_editor.action.rename_query": "クエリ名を変更", + "query_editor.action.resize_editor": "ドラッグして高さを変更", + "query_editor.action.results": "結果", + "query_editor.action.run": "実行", + "query_editor.action.run_with_shortcut": "実行({{shortcut}})", + "query_editor.action.save": "保存", + "query_editor.action.save_with_shortcut": "保存({{shortcut}})", + "query_editor.action.show_object_info": "オブジェクト情報を表示", + "query_editor.action.show_results_panel": "結果エリアを表示", + "query_editor.action.show_results_panel_with_shortcut": "結果エリアを表示({{shortcut}})", + "query_editor.action.stop": "停止", + "query_editor.ai_prompt.context": "コンテキスト: {{type}} {{name}}、選択中のデータベース {{database}}。\n", + "query_editor.ai_prompt.default_database": "デフォルト", + "query_editor.ai_prompt.default_source": "データベース", + "query_editor.ai_prompt.diagnose": "次の SQL を実行中にエラーが発生しました:\n```sql\n{{sql}}\n```\n\nデータベースから返されたエラー:\n```text\n{{error}}\n```\n\n原因を分析し、修正案を提示してください。", + "query_editor.ai_prompt.explain": "次の SQL 文の実行ロジックを説明してください:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.generate": "現在のデータベーススキーマに基づいてクエリを生成してください。", + "query_editor.ai_prompt.optimize": "次の SQL 文の性能上の問題を分析し、最適化案を提示してください:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.schema": "現在のデータベーススキーマを分析し、性能と設計の改善案を提示してください。", + "query_editor.completion.action.absolute_value": "絶対値", + "query_editor.completion.action.approximate_distinct": "近似重複排除", + "query_editor.completion.action.approximate_distinct_count": "近似重複件数", + "query_editor.completion.action.approximate_percentile": "近似パーセンタイル", + "query_editor.completion.action.approximate_quantile": "近似分位点", + "query_editor.completion.action.array_aggregation": "配列集約", + "query_editor.completion.action.array_length": "配列長", + "query_editor.completion.action.average": "平均", + "query_editor.completion.action.bitmap_aggregation": "Bitmap 集約", + "query_editor.completion.action.bitmap_construction": "Bitmap を構築", + "query_editor.completion.action.bitmap_count": "Bitmap 件数", + "query_editor.completion.action.boolean_and_aggregation": "真偽 AND 集約", + "query_editor.completion.action.boolean_or_aggregation": "真偽 OR 集約", + "query_editor.completion.action.character_length": "文字数", + "query_editor.completion.action.concat_with_separator": "区切り付き連結", + "query_editor.completion.action.concatenation": "連結", + "query_editor.completion.action.condition_mapping": "条件マッピング", + "query_editor.completion.action.conditional_check": "条件判定", + "query_editor.completion.action.count": "件数", + "query_editor.completion.action.current_database": "現在のデータベース", + "query_editor.completion.action.current_date": "現在日付", + "query_editor.completion.action.current_date_time": "現在日時", + "query_editor.completion.action.current_time": "現在時刻", + "query_editor.completion.action.current_timestamp": "現在のタイムスタンプ", + "query_editor.completion.action.current_user": "現在のユーザー", + "query_editor.completion.action.database_current_time": "データベース現在時刻", + "query_editor.completion.action.date_addition": "日付加算", + "query_editor.completion.action.date_conversion": "日付に変換", + "query_editor.completion.action.date_difference": "日付差", + "query_editor.completion.action.date_field_extraction": "日付フィールド抽出", + "query_editor.completion.action.date_formatting": "日付書式化", + "query_editor.completion.action.date_subtraction": "日付減算", + "query_editor.completion.action.date_truncation": "日付切り捨て", + "query_editor.completion.action.date_value": "日付", + "query_editor.completion.action.datetime_conversion": "日時に変換", + "query_editor.completion.action.datetime_value": "日時", + "query_editor.completion.action.decimal_truncation": "小数切り捨て", + "query_editor.completion.action.dense_rank": "密順位", + "query_editor.completion.action.distinct_array_aggregation": "重複排除配列集約", + "query_editor.completion.action.e_power": "e の累乗", + "query_editor.completion.action.elapsed_time": "経過時間", + "query_editor.completion.action.epoch_seconds": "エポック秒", + "query_editor.completion.action.exact_distinct": "正確な重複排除", + "query_editor.completion.action.first_non_null": "最初の非 NULL を返す", + "query_editor.completion.action.first_value": "最初の値", + "query_editor.completion.action.format_as_text": "テキスト形式化", + "query_editor.completion.action.group_concatenation": "グループ連結", + "query_editor.completion.action.guid_generation": "GUID を生成", + "query_editor.completion.action.hexadecimal": "16 進数", + "query_editor.completion.action.high_precision_current_time": "高精度現在時刻", + "query_editor.completion.action.hll_aggregation": "HLL 集約", + "query_editor.completion.action.hll_hash": "HLL ハッシュ", + "query_editor.completion.action.instant_rate_of_change": "瞬時変化率", + "query_editor.completion.action.int64_conversion": "Int64 に変換", + "query_editor.completion.action.interpolation": "補間", + "query_editor.completion.action.json_string_extraction": "JSON 文字列抽出", + "query_editor.completion.action.json_unquote": "JSON クォート除去", + "query_editor.completion.action.json_value_extraction": "JSON 値抽出", + "query_editor.completion.action.json_value_set": "JSON 値設定", + "query_editor.completion.action.jsonb_path_extraction": "JSONB パス抽出", + "query_editor.completion.action.julian_day": "ユリウス日", + "query_editor.completion.action.last_insert_id": "最後の挿入 ID", + "query_editor.completion.action.last_row": "最終行", + "query_editor.completion.action.last_value": "最後の値", + "query_editor.completion.action.least_squares": "最小二乗", + "query_editor.completion.action.left_padding": "左埋め", + "query_editor.completion.action.left_space_trimming": "左側空白削除", + "query_editor.completion.action.left_substring": "左から抽出", + "query_editor.completion.action.length": "長さ", + "query_editor.completion.action.list_aggregation": "リスト集約", + "query_editor.completion.action.list_unnest": "リスト展開", + "query_editor.completion.action.log_base_10": "常用対数", + "query_editor.completion.action.log_base_2": "2 進対数", + "query_editor.completion.action.logarithm": "対数", + "query_editor.completion.action.lowercase": "小文字に変換", + "query_editor.completion.action.maximum": "最大値", + "query_editor.completion.action.md5_hash": "MD5 ハッシュ", + "query_editor.completion.action.minimum": "最小値", + "query_editor.completion.action.modulo": "剰余", + "query_editor.completion.action.month_addition": "月を加算", + "query_editor.completion.action.month_difference": "月差", + "query_editor.completion.action.month_end_date": "月末日", + "query_editor.completion.action.next_row": "次の行", + "query_editor.completion.action.null_branch": "NULL 分岐", + "query_editor.completion.action.null_if_equal": "等しい場合は NULL を返す", + "query_editor.completion.action.null_replacement": "NULL 置換", + "query_editor.completion.action.number_conversion": "数値に変換", + "query_editor.completion.action.number_formatting": "数値書式化", + "query_editor.completion.action.position_lookup": "位置検索", + "query_editor.completion.action.power_operation": "べき乗", + "query_editor.completion.action.previous_row": "前の行", + "query_editor.completion.action.quantile": "分位点", + "query_editor.completion.action.random_number": "乱数", + "query_editor.completion.action.rank": "順位", + "query_editor.completion.action.rate_of_change": "変化率", + "query_editor.completion.action.regex_match": "正規表現一致", + "query_editor.completion.action.regex_replace": "正規表現置換", + "query_editor.completion.action.replacement": "置換", + "query_editor.completion.action.right_padding": "右埋め", + "query_editor.completion.action.right_space_trimming": "右側空白削除", + "query_editor.completion.action.right_substring": "右から抽出", + "query_editor.completion.action.round_down": "切り捨て", + "query_editor.completion.action.round_up": "切り上げ", + "query_editor.completion.action.rounding": "丸め", + "query_editor.completion.action.row_number": "行番号", + "query_editor.completion.action.set_lookup": "集合検索", + "query_editor.completion.action.sha1_hash": "SHA1 ハッシュ", + "query_editor.completion.action.sha2_hash": "SHA2 ハッシュ", + "query_editor.completion.action.space_trimming": "空白削除", + "query_editor.completion.action.spread": "スプレッド", + "query_editor.completion.action.sql_literal": "SQL リテラル", + "query_editor.completion.action.square_root": "平方根", + "query_editor.completion.action.string_aggregation": "文字列集約", + "query_editor.completion.action.string_conversion": "文字列に変換", + "query_editor.completion.action.string_repetition": "文字列繰り返し", + "query_editor.completion.action.string_reversal": "文字列反転", + "query_editor.completion.action.string_to_date": "文字列から日付へ変換", + "query_editor.completion.action.string_to_timestamp": "文字列からタイムスタンプへ変換", + "query_editor.completion.action.struct_construction": "構造体を構築", + "query_editor.completion.action.substring_extraction": "部分文字列抽出", + "query_editor.completion.action.sum": "合計", + "query_editor.completion.action.time_difference": "時刻差", + "query_editor.completion.action.time_value": "時刻", + "query_editor.completion.action.time_weighted_average": "時間加重平均", + "query_editor.completion.action.timestamp_difference": "タイムスタンプ差", + "query_editor.completion.action.truncate_date_or_number": "日付または数値を切り捨て", + "query_editor.completion.action.try_conversion": "変換を試行", + "query_editor.completion.action.type_conversion": "型変換", + "query_editor.completion.action.unix_time_to_datetime": "Unix 時刻を日時に変換", + "query_editor.completion.action.unix_timestamp": "Unix タイムスタンプ", + "query_editor.completion.action.uppercase": "大文字に変換", + "query_editor.completion.action.uuid_generation": "UUID を生成", + "query_editor.completion.action.value_formatting": "値を書式化", + "query_editor.completion.action.version": "バージョン", + "query_editor.completion.detail.aggregate": "集約関数", + "query_editor.completion.detail.aggregate_count": "集約 - 件数", + "query_editor.completion.detail.conditional": "条件関数", + "query_editor.completion.detail.conditional_if": "条件 - IF", + "query_editor.completion.detail.conversion": "型変換関数", + "query_editor.completion.detail.conversion_cast": "変換 - 型キャスト", + "query_editor.completion.detail.crypto_md5": "ハッシュ - MD5", + "query_editor.completion.detail.date_now": "日付 - 現在日時", + "query_editor.completion.detail.date_time": "日時関数", + "query_editor.completion.detail.info": "情報関数", + "query_editor.completion.detail.info_database": "情報 - 現在のデータベース", + "query_editor.completion.detail.json": "JSON 関数", + "query_editor.completion.detail.json_extract": "JSON - 値を抽出", + "query_editor.completion.detail.math": "数学関数", + "query_editor.completion.detail.math_abs": "数学 - 絶対値", + "query_editor.completion.detail.modifier_distinct": "修飾 - 重複排除", + "query_editor.completion.detail.sql_function": "SQL 関数", + "query_editor.completion.detail.string": "文字列関数", + "query_editor.completion.detail.string_concat": "文字列 - 連結", + "query_editor.completion.detail.utility": "ユーティリティ関数", + "query_editor.completion.detail.window": "ウィンドウ関数", + "query_editor.completion.detail.window_row_number": "ウィンドウ - 行番号", + "query_editor.completion.documentation.comment": "コメント: {{comment}}", + "query_editor.empty_state.description": "クエリを実行すると、結果が下部に新しいデータグリッドで表示されます。", + "query_editor.empty_state.title": "SQL の実行待ち", + "query_editor.format.keyword_lower": "キーワードを小文字にする", + "query_editor.format.keyword_upper": "キーワードを大文字にする", + "query_editor.format.restore_last_format": "前回の整形を元に戻す", + "query_editor.format.shortcut_settings": "ショートカット設定...", + "query_editor.format.snippet_settings": "スニペット設定...", + "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + クリックでこの関数を開く", + "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + クリックでこのマテリアライズドビューを開く", + "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + クリックでこのストアドプロシージャを開く", + "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + クリックでこのテーブルを開く", + "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + クリックでこのトリガーを開く", + "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + クリックでこのビューを開く", + "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + クリックでこのデータベースに切り替え", + "query_editor.max_rows.option_1000": "最大行数: 1000", + "query_editor.max_rows.option_20000": "最大行数: 20000", + "query_editor.max_rows.option_500": "最大行数: 500", + "query_editor.max_rows.option_5000": "最大行数: 5000", + "query_editor.max_rows.option_unlimited": "最大行数: 無制限", + "query_editor.max_rows.tooltip": "最大返却行数。SELECT には自動で LIMIT を付け、大きすぎる結果セットで UI が固まるのを防ぎます。", + "query_editor.message.append_success": "コードを追記しました。", + "query_editor.message.cancel_failed": "クエリのキャンセルに失敗しました: {{error}}", + "query_editor.message.cancel_no_running": "キャンセルできる実行中のクエリはありません。", + "query_editor.message.cancel_success": "クエリをキャンセルしました。", + "query_editor.message.connection_not_found": "接続が見つかりません。", + "query_editor.message.execution_failed_with_error": "クエリ実行に失敗しました: {{error}}", + "query_editor.message.execution_multi_success": "{{statements}} 個のステートメントを実行し、{{results}} 個の結果セットを生成しました。", + "query_editor.message.execution_result_sets_success": "実行が完了し、{{results}} 個の結果セットを生成しました。", + "query_editor.message.execution_success": "実行に成功しました。", + "query_editor.message.export_sql_file_failed": "SQL ファイルのエクスポートに失敗しました: {{error}}", + "query_editor.message.export_sql_file_success": "SQL ファイルをエクスポートしました。", + "query_editor.message.format_failed": "整形に失敗しました: SQL 構文が正しくない可能性があります。", + "query_editor.message.format_restore_success": "整形前の SQL に戻しました。", + "query_editor.message.insert_success": "現在のカーソル位置にコードを挿入しました。", + "query_editor.message.no_executable_sql": "実行できる SQL がありません。", + "query_editor.message.no_format_restore_snapshot": "元に戻せる整形前の SQL はありません。", + "query_editor.message.no_selectable_sql": "選択できる SQL ステートメントがありません。", + "query_editor.message.object_info_target_not_found": "現在のカーソル位置に認識できるテーブルまたはカラムがありません。", + "query_editor.message.page_query_empty": "ページ取得で結果セットが返されませんでした。", + "query_editor.message.page_query_failed": "ページ取得に失敗しました: {{error}}", + "query_editor.message.read_only_index_metadata_unavailable": "一意インデックスのメタデータを読み込めないため、安全に変更をコミットできません。", + "query_editor.message.read_only_no_safe_locator": "主キーまたは利用可能な一意インデックスが検出されなかったため、安全に変更をコミットできません。", + "query_editor.message.read_only_oracle_rowid_injection_unavailable": "Oracle クエリで * を使用しているため、ROWID ロケーター列を自動挿入できず、読み取り専用のままにしています。", + "query_editor.message.read_only_system_metadata": "システムメタデータのクエリ結果は読み取り専用のままです。", + "query_editor.message.read_only_table_locator_metadata_unavailable": "{{table}} の主キー/一意インデックスのメタデータを読み込めないため、安全に変更をコミットできません。", + "query_editor.message.read_only_warning_with_detail": "クエリ結果は読み取り専用のままです: {{detail}}", + "query_editor.message.refresh_failed": "再読み込みに失敗しました: {{error}}", + "query_editor.message.renamed": "クエリ名を変更しました。", + "query_editor.message.save_first_before_rename": "名前を変更する前に、先にクエリを保存してください。", + "query_editor.message.save_query_failed": "クエリの保存に失敗しました: {{error}}", + "query_editor.message.save_sql_file_failed": "SQL ファイルの保存に失敗しました: {{error}}", + "query_editor.message.saved": "クエリを保存しました。", + "query_editor.message.select_database_first": "先にデータベースを選択してください。", + "query_editor.message.sql_file_saved": "SQL ファイルを保存しました。", + "query_editor.message.statement_failed_prefix": "{{index}} 番目のステートメントが失敗しました: ", + "query_editor.message.unsupported_source": "このデータソースは SQL クエリエディターに対応していません。専用ページを使用してください。", + "query_editor.object_info.column": "カラム", + "query_editor.object_info.database": "データベース", + "query_editor.object_info.label.database": "データベース", + "query_editor.object_info.label.schema": "スキーマ", + "query_editor.object_info.label.separator": ":", + "query_editor.object_info.label.table": "テーブル", + "query_editor.object_info.label.type": "型", + "query_editor.object_info.materialized_view": "マテリアライズドビュー", + "query_editor.object_info.table": "テーブル", + "query_editor.placeholder.connection": "接続を選択", + "query_editor.placeholder.database": "データベースを選択", + "query_editor.result.affected_rows": "影響行数: {{count}}", + "query_editor.result.ai_diagnose": "AI 診断", + "query_editor.result.close": "結果を閉じる", + "query_editor.result.execution_failed": "実行失敗", + "query_editor.result.execution_success": "実行成功", + "query_editor.result.tab_title": "結果 {{index}}({{count}})", + "query_editor.result.tab_title_success": "結果 {{index}} ✓", + "query_editor.results_panel.action.hide": "非表示", + "query_editor.results_panel.aria.hide": "結果エリアを非表示", + "query_editor.results_panel.menu.close_all": "すべて閉じる", + "query_editor.results_panel.menu.close_left": "左側のタブを閉じる", + "query_editor.results_panel.menu.close_other": "他のタブを閉じる", + "query_editor.results_panel.menu.close_right": "右側のタブを閉じる", + "query_editor.results_panel.message.title": "実行メッセージ", + "query_editor.results_panel.panel.title": "結果エリア", + "query_editor.results_panel.tab.message": "メッセージ {{index}}", + "query_editor.results_panel.tab.result": "結果 {{index}}", + "query_editor.results_panel.tooltip.hide": "結果エリアを非表示", + "query_editor.results_panel.tooltip.hide_with_shortcut": "結果エリアを非表示({{shortcut}})", + "query_editor.save_modal.name_label": "クエリ名", + "query_editor.save_modal.name_placeholder": "例: すべてのユーザーを検索", + "query_editor.save_modal.name_required": "クエリ名を入力してください。", + "query_editor.save_modal.rename_ok": "名前を変更", + "query_editor.save_modal.rename_title": "クエリ名を変更", + "query_editor.save_modal.title": "クエリを保存", + "query_editor.save_modal.unnamed": "無題のクエリ", + "query_editor.slash_command.diff.description": "テーブル差分を比較して変更を生成", + "query_editor.slash_command.diff.label": "テーブル比較", + "query_editor.slash_command.diff.prompt": "2 つのテーブル構造の差分を比較し、旧版から新版へ移行する ALTER 文を生成してください。", + "query_editor.slash_command.explain.description": "選択した SQL のロジックを説明", + "query_editor.slash_command.explain.label": "SQL を説明", + "query_editor.slash_command.explain.prompt": "次の SQL 文の実行ロジックを説明してください:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.index.description": "インデックス戦略を推奨", + "query_editor.slash_command.index.label": "インデックス提案", + "query_editor.slash_command.index.prompt": "現在のテーブル構造と一般的なクエリパターンに基づいてインデックス戦略を提案し、必要に応じて SQL を含めてください。", + "query_editor.slash_command.mock.description": "INSERT テストデータを生成", + "query_editor.slash_command.mock.label": "モックデータ", + "query_editor.slash_command.mock.prompt": "関連テーブルに対して業務上意味のある INSERT テストデータを 10 件生成してください。", + "query_editor.slash_command.optimize.description": "SQL の性能ボトルネックを分析", + "query_editor.slash_command.optimize.label": "最適化分析", + "query_editor.slash_command.optimize.prompt": "次の SQL 文の性能上の問題を分析し、最適化案を提示してください:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.query.description": "取得したい内容を説明", + "query_editor.slash_command.query.label": "自然言語クエリ", + "query_editor.slash_command.query.prompt": "この依頼に対する SQL クエリを書いてください:", + "query_editor.slash_command.schema.description": "テーブル構造の設計品質をレビュー", + "query_editor.slash_command.schema.label": "テーブル設計レビュー", + "query_editor.slash_command.schema.prompt": "関連テーブル設計について、フィールド型、正規化、インデックス、改善案を含めてレビューしてください。", + "query_editor.slash_command.sql.description": "要件を説明してステートメントを生成", + "query_editor.slash_command.sql.label": "SQL を生成", + "query_editor.slash_command.sql.prompt": "次の要件に対する SQL を生成してください:", "query_editor.sql_error.rule.column_missing.explanation": "SQL が、結果セットに存在しない、スペルが異なる、または現在の表にない列を参照しています。", "query_editor.sql_error.rule.column_missing.label": "列が存在しません", "query_editor.sql_error.rule.column_missing.suggestion": "列名、別名、大文字小文字、表別名、および列が現在の FROM/JOIN オブジェクトに属しているか確認してください。", @@ -7151,10 +6053,198 @@ "query_editor.sql_error.wrapper.raw_line": "元のエラー: {{error}}", "query_editor.sql_error.wrapper.semantic_line": "意味: {{label}}。{{explanation}}", "query_editor.sql_error.wrapper.suggestion_line": "対処案: {{suggestion}}", + "query_editor.transaction.action.commit": "コミット", + "query_editor.transaction.action.commit_with_count": "コミット ({{count}})", + "query_editor.transaction.action.rollback": "ロールバック", + "query_editor.transaction.delay.immediate": "即時", + "query_editor.transaction.message.pending_managed_transaction": "SQL エディターには未コミットのトランザクションがあります。新しい DML 文を実行する前にコミットまたはロールバックしてください。", + "query_editor.transaction.mode.auto": "自動", + "query_editor.transaction.mode.manual": "手動", + "query_editor.transaction.mode.tooltip": "DBeaver と同様に、SQL エディターで INSERT/UPDATE/DELETE/MERGE/REPLACE などの DML を実行すると、まず GoNavi の管理トランザクションに入ります。手動モードでは commit/rollback が必要で、自動モードでは実行成功後に自動で COMMIT します。", + "query_editor.transaction.status.auto_commit_countdown": "{{seconds}}s 後に自動コミット", + "query_editor.transaction.status.auto_committing": "自動コミット中", + "query.format": "SQL を整形", + "query.new": "新規クエリ", + "query.run": "実行", + "query.save": "クエリを保存", + "query.stop": "停止", + "redis_command.action.clear_console": "コンソールをクリア", + "redis_command.action.execute": "実行(Cmd+Enter)", + "redis_command.completion.detail": "Redis コマンド", + "redis_command.message.command_required": "実行するコマンドを入力してください", + "redis_command.output.empty_hint": "このコンソールでコマンドを実行すると、返された結果がそのまま表示されます。", + "redis_command.output.selection_tip": "ヒント: 任意の行を選択して Ctrl + Enter を押すと、選択部分のみ実行します。", + "redis_command.output.title": "実行出力", + "redis_command.state.connection_not_found": "接続が見つかりません", + "redis_command.title.console": "Redis コンソール", + "redis_monitor.action.pause_refresh": "更新を一時停止", + "redis_monitor.action.refresh_now": "今すぐ更新", + "redis_monitor.action.resume_refresh": "更新を再開", + "redis_monitor.chart.clients_keys": "接続情報(クライアントと Keys)", + "redis_monitor.chart.cpu_usage": "CPU 使用率", + "redis_monitor.chart.memory": "メモリオーバーヘッド", + "redis_monitor.chart.qps": "リクエストスループット(QPS)", + "redis_monitor.message.fetch_failed": "Redis 情報の取得に失敗しました: {{detail}}", + "redis_monitor.metric.blocked_clients": "ブロック中: {{value}}", + "redis_monitor.metric.clients": "クライアント", + "redis_monitor.metric.days": "日数: {{value}}", + "redis_monitor.metric.memory_peak": "ピーク: {{value}}", + "redis_monitor.metric.memory_used": "使用メモリ", + "redis_monitor.metric.ops": "スループット(OPS)", + "redis_monitor.metric.uptime": "稼働時間", + "redis_monitor.series.clients": "クライアント", + "redis_monitor.series.rss_memory": "RSS メモリ", + "redis_monitor.series.system": "システム", + "redis_monitor.series.total_keys": "Key 合計", + "redis_monitor.series.used_memory": "使用メモリ", + "redis_monitor.series.user": "ユーザー", + "redis_monitor.server_details.title": "詳細なサーバーパラメータ", + "redis_monitor.state.connection_not_found": "接続が見つかりません", + "redis_monitor.title.instance": "Redis インスタンスモニター", + "redis_viewer.action.add_field": "フィールドを追加", + "redis_viewer.action.add_list_head": "先頭へプッシュ", + "redis_viewer.action.add_list_tail": "末尾へプッシュ", + "redis_viewer.action.add_member": "メンバーを追加", + "redis_viewer.action.add_stream_entry": "エントリを追加", + "redis_viewer.action.clear_group_selection": "選択をクリア", + "redis_viewer.action.clear_selection": "選択をクリア", + "redis_viewer.action.copy": "コピー", + "redis_viewer.action.copy_key_name": "Key 名をコピー", + "redis_viewer.action.copy_value": "値をコピー", + "redis_viewer.action.delete_key": "Key を削除", + "redis_viewer.action.delete_selected": "選択項目を削除({{count}})", + "redis_viewer.action.edit": "編集", + "redis_viewer.action.load_more": "さらに読み込む", + "redis_viewer.action.new_key": "新規", + "redis_viewer.action.refresh": "更新", + "redis_viewer.action.rename_key": "Key 名を変更", + "redis_viewer.action.select_all_loaded": "読み込み済みをすべて選択", + "redis_viewer.action.select_group": "選択", + "redis_viewer.action.set_ttl": "TTL を設定", + "redis_viewer.aria.collapse_group": "グループを折りたたむ", + "redis_viewer.aria.expand_group": "グループを展開", + "redis_viewer.confirm.delete_field": "このフィールドを削除しますか?", + "redis_viewer.confirm.delete_key": "Key \"{{key}}\" を削除しますか?", + "redis_viewer.confirm.delete_member": "このメンバーを削除しますか?", + "redis_viewer.confirm.delete_selected": "選択した {{count}} 件の Key を削除しますか?", + "redis_viewer.confirm.delete_stream_entry": "この Stream エントリを削除しますか?", + "redis_viewer.field.field_name": "フィールド名", + "redis_viewer.field.fields_json": "フィールド JSON:", + "redis_viewer.field.key": "Key", + "redis_viewer.field.member": "メンバー:", + "redis_viewer.field.new_key_name": "新しい Key 名", + "redis_viewer.field.new_score": "新しいスコア:", + "redis_viewer.field.score": "スコア:", + "redis_viewer.field.stream_id": "ID(任意、既定 *):", + "redis_viewer.field.ttl_seconds": "TTL(秒)", + "redis_viewer.field.value": "値", + "redis_viewer.help.ttl_forever": "-1 は期限なしを意味します", + "redis_viewer.hint.binary_readonly": "バイナリデータは編集できません", + "redis_viewer.hint.switch_auto_to_edit": "編集するには Auto モードに切り替えてください", + "redis_viewer.label.encoding": "エンコーディング: {{encoding}}", + "redis_viewer.label.keys_count": "{{count}} 件の Key", + "redis_viewer.label.length": "長さ: {{count}}", + "redis_viewer.label.node_count": "{{count}} ノード", + "redis_viewer.label.original_key": "元の Key: {{key}}", + "redis_viewer.message.add_failed": "追加に失敗しました: {{detail}}", + "redis_viewer.message.add_success": "追加しました", + "redis_viewer.message.add_success_with_id": "追加しました {{id}}", + "redis_viewer.message.copied": "コピーしました", + "redis_viewer.message.copy_failed": "コピーに失敗しました", + "redis_viewer.message.create_failed": "作成に失敗しました: {{detail}}", + "redis_viewer.message.create_success": "作成しました", + "redis_viewer.message.delete_failed": "削除に失敗しました: {{detail}}", + "redis_viewer.message.delete_success": "削除しました", + "redis_viewer.message.deleted_keys": "{{count}} 件の Key を削除しました", + "redis_viewer.message.fields_json_invalid": "フィールド JSON が無効です", + "redis_viewer.message.fields_must_be_json_object": "フィールドは JSON オブジェクトである必要があります", + "redis_viewer.message.fields_required": "少なくとも 1 つのフィールドを指定してください", + "redis_viewer.message.key_check_failed": "対象 Key の確認に失敗しました: {{detail}}", + "redis_viewer.message.key_missing_removed": "Key は存在しないか期限切れのため、一覧から削除されました", + "redis_viewer.message.key_name_copied": "Key 名をコピーしました", + "redis_viewer.message.load_keys_failed": "Key の読み込みに失敗しました: {{detail}}", + "redis_viewer.message.new_key_name_required": "新しい Key 名を入力してください", + "redis_viewer.message.rename_failed": "名前の変更に失敗しました: {{detail}}", + "redis_viewer.message.rename_same_key": "新しい Key 名は元の名前と異なる必要があります", + "redis_viewer.message.rename_success": "Key 名を変更しました", + "redis_viewer.message.save_failed": "保存に失敗しました: {{detail}}", + "redis_viewer.message.save_success": "保存しました", + "redis_viewer.message.set_failed": "設定に失敗しました: {{detail}}", + "redis_viewer.message.stream_entry_not_deleted": "Stream エントリは削除されませんでした。すでに存在しない可能性があります", + "redis_viewer.message.target_key_exists": "対象 Key はすでに存在します: {{key}}", + "redis_viewer.message.ttl_set_success": "TTL を更新しました", + "redis_viewer.message.update_failed": "更新に失敗しました: {{detail}}", + "redis_viewer.message.update_success": "更新しました", + "redis_viewer.message.value_load_failed": "値の取得に失敗しました: {{detail}}", + "redis_viewer.modal.add_element": "要素を追加", + "redis_viewer.modal.add_element_head": "先頭に要素を追加", + "redis_viewer.modal.add_field": "フィールドを追加", + "redis_viewer.modal.add_member": "メンバーを追加", + "redis_viewer.modal.add_stream_entry": "Stream エントリを追加", + "redis_viewer.modal.edit_field": "フィールドを編集: {{field}}", + "redis_viewer.modal.edit_index": "インデックス {{index}} を編集", + "redis_viewer.modal.edit_value": "値を編集", + "redis_viewer.modal.new_key": "新しい Key", + "redis_viewer.modal.rename_key": "Key 名を変更", + "redis_viewer.modal.set_ttl": "TTL を設定", + "redis_viewer.modal.update_score": "スコアを更新", + "redis_viewer.notice.large_keyspace_mode": "大規模 keyspace パフォーマンスモードが有効です。ノード描画は簡略化され、展開済みグループは最大 {{count}} 件まで保持されます。", + "redis_viewer.placeholder.key_name": "Key 名", + "redis_viewer.placeholder.member_value": "メンバー値を入力", + "redis_viewer.placeholder.new_element_value": "新しい要素値を入力", + "redis_viewer.placeholder.new_key_name": "new:key:name", + "redis_viewer.placeholder.new_member_value": "新しいメンバー値を入力", + "redis_viewer.placeholder.search_exact": "完全一致検索する Key または名前空間を入力", + "redis_viewer.placeholder.search_fuzzy": "Key を検索(あいまい一致)", + "redis_viewer.placeholder.stream_id": "例: * または 1723110000000-0", + "redis_viewer.placeholder.value": "値", + "redis_viewer.search.exact": "完全一致", + "redis_viewer.search.fuzzy": "あいまい", + "redis_viewer.state.connection_not_found": "接続が見つかりません", + "redis_viewer.state.empty_selection": "詳細を表示する Key を選択してください", + "redis_viewer.table.action": "操作", + "redis_viewer.table.field": "フィールド", + "redis_viewer.table.fields": "フィールド", + "redis_viewer.table.index": "インデックス", + "redis_viewer.table.member": "メンバー", + "redis_viewer.table.score": "スコア", + "redis_viewer.table.value": "値", + "redis_viewer.title.active_key": "アクティブな Key", + "redis_viewer.title.key_explorer": "Key エクスプローラー", + "redis_viewer.title.namespace_key": "名前空間 / Key", + "redis_viewer.title.type_ttl": "タイプ / TTL", + "redis_viewer.tooltip.copy_fields_json": "フィールド JSON をコピー", + "redis_viewer.tooltip.copy_id": "ID をコピー", + "redis_viewer.tooltip.copy_key_name": "Key 名をコピー", + "redis_viewer.tooltip.copy_value": "値をコピー", + "redis_viewer.tooltip.resize_panels": "ドラッグしてサイズ変更", + "redis_viewer.topology.cluster": "Cluster", + "redis_viewer.topology.sentinel": "Sentinel", + "redis_viewer.topology.single": "スタンドアロン", + "redis_viewer.ttl.days_hours": "{{days}}日 {{hours}}時間", + "redis_viewer.ttl.expired": "期限切れ", + "redis_viewer.ttl.forever": "永続", + "redis_viewer.ttl.hours_minutes": "{{hours}}時間 {{minutes}}分", + "redis_viewer.ttl.minutes_seconds": "{{minutes}}分 {{seconds}}秒", + "redis_viewer.ttl.seconds": "{{seconds}}秒", + "redis_viewer.validation.key_required": "Key を入力してください", + "redis_viewer.validation.new_key_name_required": "新しい Key 名を入力してください", + "redis_viewer.validation.value_required": "値を入力してください", + "redis_viewer.view.auto": "Auto", + "redis_viewer.view.hex": "Hex", + "redis_viewer.view.text": "生テキスト", + "redis_viewer.view.title": "表示モード", + "redis.backend.error.address_required": "Redis 接続アドレスは空にできません", + "redis.backend.error.argument_invalid_type": "{{name}} の型が無効です", + "redis.backend.error.argument_required": "{{name}} は必須です", "redis.backend.error.cluster_connect_failed": "Redis Cluster への接続に失敗しました: {{detail}}", + "redis.backend.error.command_required": "Command は空にできません", "redis.backend.error.connect_attempt_failed": "{{attempt}} 回目の接続に失敗しました: {{detail}}", "redis.backend.error.connect_failed": "Redis への接続に失敗しました: {{detail}}", "redis.backend.error.connect_tls_setup_failed": "{{attempt}} 回目の TLS 設定に失敗しました: {{detail}}", + "redis.backend.error.invalid_node_address": "無効な Redis ノードアドレス: {{address}}", + "redis.backend.error.invalid_port": "無効な Redis ポート: {{address}}", + "redis.backend.error.node_address_required": "Redis ノードアドレスは空にできません", "redis.backend.error.select_db_index_invalid": "無効なデータベースインデックス: {{value}}", "redis.backend.error.select_db_index_out_of_range": "データベースインデックスは {{min}} から {{max}} の間で指定してください", "redis.backend.error.select_db_index_required": "SELECT コマンドにはデータベースインデックスが必要です", @@ -7165,13 +6255,144 @@ "redis.backend.label.topology_cluster": "クラスター", "redis.backend.label.topology_multi_node": "マルチノード", "redis.backend.label.topology_sentinel": "Sentinel", + "redis.backend.message.add_success": "追加しました", + "redis.backend.message.connect_success": "接続に成功しました", + "redis.backend.message.delete_success": "削除しました", + "redis.backend.message.flush_success": "消去しました", + "redis.backend.message.rename_success": "名前を変更しました", + "redis.backend.message.select_db_success": "データベースを切り替えました", + "redis.backend.message.set_success": "設定しました", + "redis.db_alias.menu.set": "エイリアスを設定", + "redis.db_alias.modal.placeholder": "例: cache、sessions(空欄で解除)", + "redis.db_alias.modal.title": "{{db}} のエイリアス", + "saved_query.default_name": "クエリ {{index}}", "saved_query.error.missing_context": "保存済みクエリに SQL、接続、またはデータベースのコンテキストがありません", + "security_update.action.open_ai_settings": "AI 設定", + "security_update.action.open_connection": "接続を開く", + "security_update.action.open_proxy_settings": "プロキシ設定", + "security_update.action.retry_update": "再確認", + "security_update.action.view_details": "詳細を表示", + "security_update.backend.issue.ai_provider.migration_required": "AI プロバイダー設定はまだ現在のアプリ設定に保存されています。安全更新が完了すると、新しい安全ストレージへ移されます。", + "security_update.backend.issue.ai_provider.missing_or_resave": "AI プロバイダー設定が存在しないか、安全更新を完了する前に再保存が必要です。", + "security_update.backend.issue.ai_provider.secret_missing": "AI プロバイダー設定は、安全更新を完了する前に追加情報が必要です。", + "security_update.backend.issue.connection.incomplete": "接続設定は、安全更新を完了する前に追加情報が必要です。", + "security_update.backend.issue.connection.missing_or_resave": "接続設定が存在しないか、安全更新を完了する前に再保存が必要です。", + "security_update.backend.issue.connection.password_missing": "接続パスワードが失われています。続行する前に再保存してください。", + "security_update.backend.issue.global_proxy.missing_or_resave": "グローバルプロキシ設定が存在しないか、安全更新を完了する前に再保存が必要です。", + "security_update.backend.issue.global_proxy.password_incomplete": "グローバルプロキシのパスワードは、安全更新を完了する前に追加情報が必要です。", + "security_update.backend.issue.global_proxy.password_missing": "グローバルプロキシのパスワードが失われています。続行する前に再保存してください。", + "security_update.backend.issue.global_proxy.title": "グローバルプロキシ", + "security_update.backend.issue.system.message": "現在の環境ではこの安全更新を完了できませんでした。後でもう一度お試しください。", + "security_update.backend.issue.system.title": "安全更新は完了しませんでした", + "security_update.banner.action.restart_update": "更新を再開始", + "security_update.banner.action.retry_check": "再確認", + "security_update.banner.action.start_now": "今すぐ更新", + "security_update.banner.action.view_details": "詳細を表示", + "security_update.banner.title": "保存済み設定を安全に更新できます", + "security_update.bootstrap.legacy.connection.message": "この接続は、現在のアプリのローカル設定にまだ保存されています。安全更新の完了後、新しい安全ストレージへ移動されます。", + "security_update.bootstrap.legacy.global_proxy.message": "グローバルプロキシ設定は、現在のアプリのローカル設定にまだ保存されています。安全更新の完了後、新しい安全ストレージへ移動されます。", + "security_update.bootstrap.legacy.global_proxy.title": "グローバルプロキシ", + "security_update.error.capability_unavailable": "安全更新機能は利用できません", + "security_update.intro.action.details": "詳細を表示", + "security_update.intro.action.later": "後で通知", + "security_update.intro.action.start_now": "今すぐ更新", + "security_update.intro.description": "保存済みの接続、プロキシ、関連サービス設定を新しい安全ストレージに移すため、この更新をローカルで一度実行します。更新前にローカルバックアップが自動作成されます。完了しなかった場合も、システムは現在利用可能な設定を保持し、後で続行できます。", + "security_update.intro.subtitle": "新しい安全ストレージを使う前に、ローカル設定の更新が必要です。", + "security_update.intro.title": "保存済み設定の安全更新", + "security_update.item_status.failed": "失敗", + "security_update.item_status.needs_attention": "対応待ち", + "security_update.item_status.pending": "更新待ち", + "security_update.item_status.skipped": "スキップ済み", + "security_update.item_status.updated": "更新済み", + "security_update.progress.default_detail": "更新中も現在利用可能な設定は保持されます。しばらくお待ちください。", + "security_update.repair.warning.connection_not_found": "該当する接続が見つかりません。先に最新状態を再確認してください。", + "security_update.settings.action.close": "閉じる", + "security_update.settings.action.restart_update": "更新を再開始", + "security_update.settings.action.retry_check": "再確認", + "security_update.settings.action.start": "更新を開始", + "security_update.settings.backup_path": "バックアップ場所:", + "security_update.settings.current_status": "現在の状態:{{status}}", + "security_update.settings.empty_pending": "現在、対応待ち項目はありません", + "security_update.settings.item_default_message": "この項目は、安全更新を完了する前に追加対応が必要です。", + "security_update.settings.item_severity": "レベル:{{severity}}", + "security_update.settings.item_status": "状態:{{status}}", + "security_update.settings.last_error": "最新のエラー:", + "security_update.settings.pending_list": "対応待ち一覧", + "security_update.settings.recent_result": "最新の結果", + "security_update.settings.scope_title": "影響範囲", + "security_update.settings.subtitle": "保存済み設定の安全更新状態と対応待ち項目を管理します。", + "security_update.settings.summary.failed": "失敗", + "security_update.settings.summary.pending": "対応待ち", + "security_update.settings.summary.skipped": "スキップ済み", + "security_update.settings.summary.total": "合計", + "security_update.settings.summary.updated": "更新済み", + "security_update.settings.title": "安全更新", + "security_update.severity.high": "高リスク", + "security_update.severity.low": "低リスク", + "security_update.severity.medium": "中リスク", + "security_update.status.completed.description": "保存済み設定の安全更新が完了しました。", + "security_update.status.completed.label": "完了", + "security_update.status.in_progress.description": "保存済み設定の安全ストレージを確認し、更新しています。", + "security_update.status.in_progress.label": "更新中", + "security_update.status.needs_attention.description": "更新はまだ完了していません。一部の設定に対応が必要です。", + "security_update.status.needs_attention.label": "対応待ち", + "security_update.status.not_detected.description": "現在、対応が必要な安全更新はありません。", + "security_update.status.not_detected.label": "未検出", + "security_update.status.pending.description": "実行可能な安全更新があります。今すぐ開始するか、後で続行できます。", + "security_update.status.pending.label": "更新待ち", + "security_update.status.postponed.description": "この安全更新は延期されています。現在利用可能な設定は引き続き保持されます。", + "security_update.status.postponed.label": "更新待ち", + "security_update.status.rolled_back.description": "この更新は完了しませんでした。システムは現在利用可能な設定を保持しました。", + "security_update.status.rolled_back.label": "ロールバック済み", + "settings.language.description": "GoNavi の表示言語を選択します。", + "settings.language.english": "English", + "settings.language.follow_system": "システムに従う", + "settings.language.german": "Deutsch", + "settings.language.japanese": "日本語", + "settings.language.restart_hint": "一部のエディターやシステムレベルのメニューでは、完全に反映するためにウィンドウを開き直す必要があります。", + "settings.language.russian": "Русский", + "settings.language.simplified_chinese": "简体中文", + "settings.language.title": "言語", + "settings.language.traditional_chinese": "繁體中文", + "settings.title": "設定", + "sidebar.action.backup_database_count": "データベースをバックアップ({{count}})", + "sidebar.action.backup_schema_data": "バックアップ(構造+データ)", + "sidebar.action.batch_databases": "データベースを一括処理", + "sidebar.action.batch_tables": "テーブルを一括処理", + "sidebar.action.cancel": "キャンセル", + "sidebar.action.clear_selection": "すべて解除", + "sidebar.action.clear_tables": "テーブルをクリア", + "sidebar.action.close": "閉じる", + "sidebar.action.continue": "続行", + "sidebar.action.delete": "削除", + "sidebar.action.export_data_only": "データのみ(INSERT)", + "sidebar.action.export_database_schema_count": "データベース構造をエクスポート({{count}})", + "sidebar.action.export_schema": "構造をエクスポート", + "sidebar.action.invert_selection": "選択を反転", "sidebar.action.locate_current_tab": "現在のタブを特定", + "sidebar.action.locate_current_table": "現在開いているテーブルを特定", + "sidebar.action.new_group": "新しいグループ", + "sidebar.action.pin_table": "テーブルを固定", + "sidebar.action.select_all": "すべて選択", + "sidebar.action.unpin_table": "テーブル固定を解除", + "sidebar.active_connection.actions": "接続操作", + "sidebar.active_connection.current_host_database": "現在の Host とデータベース", + "sidebar.active_connection.no_database_selected": "データベース未選択", + "sidebar.active_connection.no_host_selected": "Host 未選択", "sidebar.ai_prompt.explain.detail": "フィールドの意味、主キー/インデックス、想定される関連、典型的なクエリ場面、リスクを重点的に説明してください。", "sidebar.ai_prompt.explain.intro": "テーブル {{table}} の構造と業務上の意味を説明してください。", "sidebar.ai_prompt.query.detail": "内容には、データプレビュー用クエリ、主要フィールドで絞り込むクエリ、集計または統計クエリを含めてください。", "sidebar.ai_prompt.query.intro": "テーブル {{table}} をもとに、よく使う SQL クエリを 3 件生成してください。", "sidebar.aria.switch_connection": "接続 {{name}} に切り替え", + "sidebar.badge.recommended": "推奨", + "sidebar.batch_databases": "一括データベース", + "sidebar.batch_tables": "一括テーブル", + "sidebar.batch.filtered_count": "{{filtered}} / {{total}} 件のオブジェクトを表示", + "sidebar.batch.group.tables": "テーブル", + "sidebar.batch.group.views": "ビュー", + "sidebar.batch.no_matching_objects": "一致するオブジェクトはありません", + "sidebar.batch.selected_databases": "{{selected}} / {{total}} 件のデータベースを選択中", + "sidebar.batch.selected_objects": "{{selected}} / {{total}} 件のオブジェクトを選択中", "sidebar.command_search.action.ask_ai.title": "AI に質問", "sidebar.command_search.action.new_connection.meta": "データベース、ランタイム、またはその他のデータソース接続を作成", "sidebar.command_search.action.new_connection.title": "新規データソース", @@ -7187,49 +6408,480 @@ "sidebar.command_search.footer.navigate": "移動", "sidebar.command_search.footer.object_only": "テーブルオブジェクトのみ", "sidebar.command_search.footer.select": "選択", + "sidebar.command_search.label": "テーブル、接続、操作を検索", + "sidebar.command_search.no_filter_content": "フィルター内容はありません", + "sidebar.command_search.no_synced_filter": "同期済みのサイドバーフィルターはありません", + "sidebar.command_search.object_kind.all": "すべて", + "sidebar.command_search.object_kind.events": "イベント", + "sidebar.command_search.object_kind.filter_aria": "オブジェクトフィルター", + "sidebar.command_search.object_kind.routines": "ルーチン", + "sidebar.command_search.object_kind.tables": "テーブル", + "sidebar.command_search.object_kind.views": "ビュー", + "sidebar.command_search.placeholder": "テーブル、接続、操作を検索... または AI に質問", "sidebar.command_search.recent_sql_fallback": "SQL 記録", + "sidebar.command_search.reset_filter": "サイドバーフィルターをリセット", + "sidebar.command_search.scope.compact_smart": "スマート", + "sidebar.command_search.scope.database": "データベース", + "sidebar.command_search.scope.description": "「スマート」は最も可能性の高い一致項目を自動で探します。手動モードでは条件を組み合わせて絞り込めます。", + "sidebar.command_search.scope.host": "Host", + "sidebar.command_search.scope.manual_help": "スマートは他の項目と同時に使えません。検索対象がオブジェクト、データベース、Host、タグとはっきりしている場合は、手動範囲に切り替えると結果のノイズを減らせます。", + "sidebar.command_search.scope.manual_title": "手動範囲", + "sidebar.command_search.scope.multi_select": "複数選択に対応", + "sidebar.command_search.scope.object": "テーブルオブジェクト", + "sidebar.command_search.scope.recommended": "推奨", + "sidebar.command_search.scope.smart": "スマート", + "sidebar.command_search.scope.smart_help": "通常の検索に適しており、名前、データベース、Host、タグなどよく使う項目を自動で対象にします。", + "sidebar.command_search.scope.summary_smart": "スマート", + "sidebar.command_search.scope.tag": "タグ", + "sidebar.command_search.scope.title": "検索範囲", + "sidebar.command_search.scope.tooltip": "検索範囲: {{scope}}", "sidebar.command_search.section.actions": "操作", "sidebar.command_search.section.ai": "AI · 質問", "sidebar.command_search.section.goto": "移動", "sidebar.command_search.section.recent": "最近のクエリ", + "sidebar.command_search.sync_to_filter_aria": "左側フィルターに同期", + "sidebar.command_search.sync_to_filter_tooltip": "入力内容を左側フィルターに同期", + "sidebar.copy_object_name.copied": "{{label}}をクリップボードにコピーしました", + "sidebar.copy_object_name.empty": "{{label}}が空のためコピーできません", + "sidebar.copy_object_name.failed": "{{label}}のコピーに失敗しました: {{error}}", + "sidebar.copy_object_name.label.event": "イベント名", + "sidebar.copy_object_name.label.materialized_view": "マテリアライズドビュー名", + "sidebar.copy_object_name.label.table": "テーブル名", + "sidebar.copy_object_name.label.view": "ビュー名", + "sidebar.error.unknown": "不明なエラー", + "sidebar.external_sql_modal.action.create": "作成", + "sidebar.external_sql_modal.action.rename": "名前を変更", + "sidebar.external_sql_modal.field.directory_name": "ディレクトリ名", + "sidebar.external_sql_modal.field.sql_file_name": "SQL ファイル名", + "sidebar.external_sql_modal.help.directory": "ディレクトリは外部 SQL ディレクトリツリーにのみ表示され、SQL 以外のファイルは引き続き表示されません", + "sidebar.external_sql_modal.help.sql_file": ".sql 拡張子を省略すると自動で補完されます", + "sidebar.external_sql_modal.placeholder.directory_name": "例: reports", + "sidebar.external_sql_modal.placeholder.sql_file_name": "例: report.sql", + "sidebar.external_sql_modal.title.create_directory": "ディレクトリを新規作成", + "sidebar.external_sql_modal.title.create_file": "SQL ファイルを新規作成", + "sidebar.external_sql_modal.title.rename_directory": "ディレクトリ名を変更", + "sidebar.external_sql_modal.title.rename_file": "SQL ファイル名を変更", + "sidebar.external_sql_modal.validation.directory_name_no_separator": "ディレクトリ名にパス区切り文字を含めることはできません", + "sidebar.external_sql_modal.validation.directory_name_required": "ディレクトリ名を入力してください", + "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "ファイル名にパス区切り文字を含めることはできません", + "sidebar.external_sql_modal.validation.sql_file_name_required": "SQL ファイル名を入力してください", + "sidebar.external_sql.directory_fallback": "SQL ディレクトリ", + "sidebar.external_sql.root": "外部 SQL ファイル", + "sidebar.field.database_name": "データベース名", + "sidebar.field.new_database_name": "新しいデータベース名", + "sidebar.field.new_table_name": "新しいテーブル名", + "sidebar.field.new_view_name": "新しいビュー名", + "sidebar.field.schema_name": "schema 名", + "sidebar.field.select_connection": "接続を選択", + "sidebar.field.select_connections": "接続を選択", + "sidebar.field.select_database": "データベースを選択", + "sidebar.field.tag_name": "グループ名", + "sidebar.filter.all_objects": "すべてのオブジェクト", + "sidebar.filter.scope_all": "選択対象:すべてのオブジェクト", + "sidebar.filter.scope_filtered": "選択対象:現在の絞り込み結果", + "sidebar.filter.tables_only": "テーブルのみ", + "sidebar.filter.views_only": "ビューのみ", + "sidebar.jvm.action.diagnostic": "診断強化", + "sidebar.jvm.action.monitoring": "継続監視", + "sidebar.jvm.tab.audit": "JVM 監査", + "sidebar.jvm.tab.diagnostic": "JVM 診断", + "sidebar.jvm.tab.monitoring": "JVM 監視", + "sidebar.jvm.tab.overview": "JVM 概要", + "sidebar.jvm.tab.resource": "JVM リソース", + "sidebar.locate.object.materialized_view": "マテリアライズドビュー", + "sidebar.locate.object.routine": "関数/プロシージャ", + "sidebar.locate.object.table": "テーブル", + "sidebar.locate.object.trigger": "トリガー", + "sidebar.locate.object.view": "ビュー", + "sidebar.menu.add_sql_directory": "SQL ディレクトリを追加", + "sidebar.menu.backup_all_tables_sql": "すべてのテーブルをバックアップ(スキーマ + データ SQL)", "sidebar.menu.backup_current_schema_sql": "現在の schema の全テーブルをバックアップ(構造とデータ SQL)", + "sidebar.menu.backup_table_sql": "テーブルをバックアップ(SQL)", "sidebar.menu.bind_to_connection": "接続にバインド", + "sidebar.menu.browse_keys": "キーを参照", + "sidebar.menu.browse_materialized_view_data": "マテリアライズドビューのデータを参照", + "sidebar.menu.browse_view_data": "ビューデータを参照", + "sidebar.menu.clear_table": "テーブルをクリア", + "sidebar.menu.close_database": "データベースを閉じる", "sidebar.menu.copy_object_name": "名前をコピー", "sidebar.menu.copy_table_name": "テーブル名をコピー", + "sidebar.menu.copy_table_structure": "テーブル構造をコピー", + "sidebar.menu.create_database": "新規データベース", "sidebar.menu.create_event": "新規イベント", + "sidebar.menu.create_function": "新規関数", + "sidebar.menu.create_procedure": "新規プロシージャ", + "sidebar.menu.create_table": "新規テーブル", + "sidebar.menu.create_view": "新規ビュー", + "sidebar.menu.danger_operations": "危険操作", + "sidebar.menu.delete_connection": "接続を削除", + "sidebar.menu.delete_database": "データベースを削除", + "sidebar.menu.delete_local_directory": "ローカルディレクトリを削除", + "sidebar.menu.delete_query": "クエリを削除", + "sidebar.menu.delete_routine": "{{type}} を削除", "sidebar.menu.delete_schema": "schema を削除", + "sidebar.menu.delete_sql_directory": "ディレクトリを削除", + "sidebar.menu.delete_sql_file": "SQL ファイルを削除", + "sidebar.menu.delete_table": "テーブルを削除", + "sidebar.menu.delete_tag": "グループを削除", + "sidebar.menu.delete_view": "ビューを削除", + "sidebar.menu.design_table": "テーブルを設計", + "sidebar.menu.disconnect": "切断", + "sidebar.menu.duplicate_connection": "接続を複製", + "sidebar.menu.edit_connection": "接続を編集", + "sidebar.menu.edit_definition": "定義を編集", "sidebar.menu.edit_schema": "schema を編集", + "sidebar.menu.edit_tag": "グループを編集", + "sidebar.menu.edit_view": "ビューを編集", + "sidebar.menu.export_all_table_schema_sql": "すべてのテーブル構造を SQL としてエクスポート", + "sidebar.menu.export_csv": "CSV としてエクスポート", "sidebar.menu.export_current_schema_sql": "現在の schema のテーブル構造をエクスポート(SQL)", + "sidebar.menu.export_html": "HTML としてエクスポート", + "sidebar.menu.export_json": "JSON としてエクスポート", + "sidebar.menu.export_markdown": "Markdown としてエクスポート", + "sidebar.menu.export_table_data": "テーブルデータをエクスポート", + "sidebar.menu.export_xlsx": "XLSX としてエクスポート", + "sidebar.menu.materialized_view_definition": "マテリアライズドビュー定義", + "sidebar.menu.move_out_of_tag": "グループから外す", + "sidebar.menu.move_to_tag": "グループへ移動", + "sidebar.menu.new_command_window": "新規コマンドウィンドウ", + "sidebar.menu.new_query": "新規クエリ", + "sidebar.menu.new_sql_directory": "ディレクトリを新規作成", + "sidebar.menu.new_sql_directory_in_directory": "このディレクトリにディレクトリを新規作成", + "sidebar.menu.new_sql_file": "SQL ファイルを新規作成", + "sidebar.menu.new_sql_file_in_directory": "このディレクトリに SQL ファイルを新規作成", "sidebar.menu.new_table": "新規テーブル", + "sidebar.menu.open_query": "クエリを開く", + "sidebar.menu.open_sql_file": "SQL ファイルを開く", + "sidebar.menu.redis_monitor": "Redis 監視", + "sidebar.menu.refresh": "更新", + "sidebar.menu.refresh_directory": "ディレクトリを更新", + "sidebar.menu.remove_directory": "ディレクトリを削除", + "sidebar.menu.rename_database": "データベース名を変更", + "sidebar.menu.rename_query": "クエリ名を変更", + "sidebar.menu.rename_sql_directory": "ディレクトリ名を変更", + "sidebar.menu.rename_sql_file": "SQL ファイル名を変更", + "sidebar.menu.rename_table": "テーブル名を変更", + "sidebar.menu.rename_view": "ビュー名を変更", + "sidebar.menu.sort_by_frequency": "使用頻度順に並べ替え", + "sidebar.menu.sort_by_name": "名前順に並べ替え", "sidebar.menu.table_structure": "テーブル構造", + "sidebar.menu.truncate_table": "テーブルを切り詰め", + "sidebar.menu.view_definition": "ビュー定義", + "sidebar.menu.view_object_definition": "定義を表示", + "sidebar.menu.view_routine_definition": "定義を表示", + "sidebar.message.add_sql_directory_database_required": "SQL ディレクトリを追加する前にデータベースを選択してください。", "sidebar.message.ai_table_context_missing": "現在のテーブルには接続コンテキストがないため、AI に送信できません。", + "sidebar.message.backing_up_database": "データベース {{database}} をバックアップしています...", + "sidebar.message.backing_up_selected_objects": "選択した {{count}} 件のオブジェクトをバックアップしています...", + "sidebar.message.backing_up_selected_tables": "選択した {{count}} 件のテーブルをバックアップしています...", + "sidebar.message.clear_failed": "クリアに失敗しました: {{error}}", + "sidebar.message.clear_success": "クリア成功。", + "sidebar.message.clearing_selected_tables": "選択した {{count}} 件のテーブルをクリアしています...", + "sidebar.message.connection_config_not_found": "接続設定が見つかりません。", + "sidebar.message.connection_deleted": "接続を削除しました。", + "sidebar.message.connection_failed": "接続に失敗しました: {{error}}", "sidebar.message.connection_release_failed": "接続の解放に失敗しました", "sidebar.message.connection_release_failed_from_sidebar": "接続はサイドバーから切断されましたが、バックエンド接続の解放に失敗しました", + "sidebar.message.create_failed": "作成に失敗しました: {{error}}", + "sidebar.message.create_sql_directory_failed": "ディレクトリの作成に失敗しました: {{error}}", + "sidebar.message.create_sql_file_failed": "SQL ファイルの作成に失敗しました: {{error}}", + "sidebar.message.database_closed": "データベースを閉じました。", + "sidebar.message.database_created": "データベースを作成しました。", + "sidebar.message.database_deleted": "データベースを削除しました。", + "sidebar.message.database_export_failed": "{{database}} のエクスポートに失敗しました: {{error}}", + "sidebar.message.database_export_success": "{{database}} をエクスポートしました。", + "sidebar.message.database_name_required": "データベース名を入力してください。", + "sidebar.message.database_name_unchanged": "データベース名は変更されていません。", + "sidebar.message.database_renamed": "データベース名を変更しました。", + "sidebar.message.delete_connection_backend_unavailable": "このビルドでは接続の削除を利用できません。", + "sidebar.message.delete_connection_failed": "接続の削除に失敗しました。", + "sidebar.message.delete_failed": "削除に失敗しました: {{error}}", + "sidebar.message.delete_sql_directory_failed": "SQL ディレクトリの削除に失敗しました:{{error}}", + "sidebar.message.delete_sql_file_failed": "SQL ファイルの削除に失敗しました:{{error}}", + "sidebar.message.disconnected": "切断しました。", + "sidebar.message.duplicate_backend_unavailable": "このビルドでは接続の複製を利用できません。", + "sidebar.message.duplicate_empty_result": "複製された接続が返されませんでした。", + "sidebar.message.duplicate_failed": "接続の複製に失敗しました。", + "sidebar.message.duplicated_connection": "接続 {{name}} を複製しました。", + "sidebar.message.export_failed": "エクスポートに失敗しました: {{error}}", + "sidebar.message.export_success": "エクスポート成功。", + "sidebar.message.export_success_skipped_views": "エクスポートが完了しました。{{count}} 件のビューはデータエクスポートから除外されました。", + "sidebar.message.export_tables_same_database_required": "同じデータベースのテーブルを選択してください。", + "sidebar.message.exporting_database_backup": "{{database}} をバックアップしています(スキーマとデータ)...", + "sidebar.message.exporting_database_schema": "{{database}} のスキーマをエクスポートしています...", + "sidebar.message.exporting_schema_backup": "スキーマ {{schema}} をバックアップしています(構造とデータ)...", + "sidebar.message.exporting_schema_structure": "スキーマ {{schema}} の構造をエクスポートしています...", + "sidebar.message.exporting_selected_object_data": "選択した {{count}} 件のオブジェクトのデータ({{format}})をエクスポートしています...", + "sidebar.message.exporting_selected_object_schema": "選択した {{count}} 件のオブジェクトのスキーマをエクスポートしています...", + "sidebar.message.exporting_selected_table_schema": "選択した {{count}} 件のテーブルのスキーマをエクスポートしています...", + "sidebar.message.exporting_table_format": "{{table}} を {{format}} としてエクスポートしています...", + "sidebar.message.external_sql_directory_added": "SQL ディレクトリを追加しました。", + "sidebar.message.external_sql_directory_context_missing": "SQL ディレクトリのコンテキストがありません。", + "sidebar.message.external_sql_directory_delete_target_missing": "削除する SQL ディレクトリが見つかりません。", + "sidebar.message.external_sql_directory_not_found": "外部 SQL ディレクトリが見つかりません。", + "sidebar.message.external_sql_directory_parent_missing": "ディレクトリを作成する場所が見つかりません。", + "sidebar.message.external_sql_directory_read_failed": "SQL ディレクトリ {{name}} の読み込みに失敗しました: {{error}}", + "sidebar.message.external_sql_directory_refreshed": "SQL ディレクトリを更新しました。", + "sidebar.message.external_sql_directory_removed": "SQL ディレクトリを削除しました。", + "sidebar.message.external_sql_directory_rename_sync_failed": "ディレクトリの名前は変更されましたが、外部 SQL ディレクトリ一覧を同期できません。ディレクトリを追加し直してください。", + "sidebar.message.external_sql_directory_rename_target_missing": "名前を変更できるディレクトリが見つかりません。", + "sidebar.message.external_sql_file_delete_target_missing": "削除する SQL ファイルが見つかりません。", + "sidebar.message.external_sql_file_parent_missing": "SQL ファイルを作成するディレクトリが見つかりません。", + "sidebar.message.external_sql_file_rename_target_missing": "名前を変更できる SQL ファイルが見つかりません。", + "sidebar.message.jvm_provider_probe_exception": "JVM プロバイダーの検出に失敗しました: {{error}}", + "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "JVM Provider の検出中に例外が発生しました: {{error}}。診断強化の入口は引き続き利用できます。", + "sidebar.message.jvm_provider_probe_failed": "JVM プロバイダーの検出に失敗しました: {{error}}", + "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "JVM Provider の検出に失敗しました: {{error}}。診断強化の入口は引き続き利用できます。", + "sidebar.message.jvm_resources_backend_unavailable": "このビルドでは JVM リソースの参照を利用できません。", + "sidebar.message.load_database_list_failed": "データベースの読み込みに失敗しました: {{error}}", + "sidebar.message.load_jvm_resources_failed": "JVM リソースの読み込みに失敗しました: {{error}}", + "sidebar.message.load_table_list_failed": "テーブルの読み込みに失敗しました: {{error}}", + "sidebar.message.load_tables_failed": "オブジェクトの読み込みに失敗しました: {{error}}", + "sidebar.message.locate_connection_not_found_for_object": "現在のオブジェクトに対応する接続が見つかりません", + "sidebar.message.locate_connection_not_in_tree": "左側ツリーで現在の接続が見つかりません", "sidebar.message.locate_current_tab_unavailable": "現在のタブには特定できる内容がありません", + "sidebar.message.locate_current_table_unavailable": "現在のタブには特定できるテーブルがありません", + "sidebar.message.locate_database_loading": "データベースノードはまだ読み込み中です: {{database}}。しばらくしてから再試行してください", + "sidebar.message.locate_database_not_found": "左側ツリーでデータベースが見つかりません: {{database}}", + "sidebar.message.locate_external_sql_file_not_found": "外部 SQL ディレクトリで SQL ファイルが見つかりません: {{path}}", + "sidebar.message.locate_object_loading": "{{database}} の {{object}} オブジェクトはまだ読み込み中です。しばらくしてから再試行してください", + "sidebar.message.locate_object_not_found": "左側ツリーで {{object}} が見つかりません: {{name}}。データベースノードを更新して再試行してください", "sidebar.message.message_publish_success": "テストメッセージを {{destination}} に送信しました", "sidebar.message.message_publish_success_with_count": "テストメッセージを {{destination}} に送信しました({{count}} 件を送信)", "sidebar.message.message_publish_target_fallback": "対象", "sidebar.message.message_publish_unsupported": "現在のオブジェクトはメッセージ送信テストに対応していません", + "sidebar.message.no_visible_databases": "表示可能なデータベースまたはスキーマが返されませんでした。権限を確認するか、右クリックメニューから更新してください。", + "sidebar.message.operation_create_failed": "作成に失敗しました: {{error}}", + "sidebar.message.operation_drop_failed": "削除に失敗しました: {{error}}", + "sidebar.message.operation_rename_failed": "名前の変更に失敗しました: {{error}}", + "sidebar.message.read_file_failed": "ファイルの読み込みに失敗しました: {{error}}", + "sidebar.message.read_sql_file_failed": "SQL ファイルの読み込みに失敗しました: {{error}}", + "sidebar.message.rename_failed": "名前の変更に失敗しました: {{error}}", + "sidebar.message.rename_sql_directory_failed": "ディレクトリの名前変更に失敗しました: {{error}}", + "sidebar.message.rename_sql_file_failed": "SQL ファイルの名前変更に失敗しました: {{error}}", + "sidebar.message.routine_deleted": "{{type}} を削除しました。", "sidebar.message.saved_query_delete_failed": "クエリの削除に失敗しました: {{error}}", + "sidebar.message.saved_query_deleted": "保存済みクエリを削除しました。", + "sidebar.message.saved_query_name_unchanged": "新しいクエリ名は現在の名前と同じです。", "sidebar.message.saved_query_rebind_failed": "クエリのバインドに失敗しました: {{error}}", "sidebar.message.saved_query_rebind_success": "クエリを {{name}} にバインドしました", "sidebar.message.saved_query_rename_failed": "クエリ名の変更に失敗しました: {{error}}", + "sidebar.message.saved_query_renamed": "クエリ名を変更しました。", + "sidebar.message.schema_create_unsupported": "このデータベースでは schema を作成できません。", + "sidebar.message.schema_created": "schema を作成しました。", "sidebar.message.schema_deleted": "schema を削除しました。", "sidebar.message.schema_edit_unsupported": "この入口では現在のノードの schema を編集できません。", + "sidebar.message.schema_export_target_missing": "対象のスキーマが見つからないため、エクスポートできません。", "sidebar.message.schema_name_unchanged": "schema 名は変更されていません。", "sidebar.message.schema_renamed": "schema 名を変更しました。", "sidebar.message.schema_target_delete_missing": "削除対象の schema が見つかりません。", "sidebar.message.schema_target_edit_missing": "編集対象の schema が見つかりません。", + "sidebar.message.schema_target_missing": "schema を作成するデータベースを選択してください。", + "sidebar.message.select_connection_or_database_first": "先に接続またはデータベースを選択してください。", + "sidebar.message.select_database_required": "データベースを 1 件以上選択してください。", + "sidebar.message.select_host_before_large_sql_file": "大きな SQL ファイルを実行する前に Host を選択してください。", + "sidebar.message.select_object_required": "オブジェクトを 1 件以上選択してください。", + "sidebar.message.select_sql_directory_failed": "SQL ディレクトリの選択に失敗しました: {{error}}", + "sidebar.message.sidebar_filter_reset": "サイドバーフィルターをリセットしました。", + "sidebar.message.sidebar_filter_sync_disabled": "左側フィルターの同期を無効にしました。", + "sidebar.message.sidebar_filter_sync_enabled": "左側フィルターの同期を有効にしました。", + "sidebar.message.sphinx_unsupported_objects": "この Sphinx インスタンスは次のオブジェクト機能を公開していません: {{objects}}。互換モードを適用しました。", + "sidebar.message.sql_directory_created": "ディレクトリを作成しました。", + "sidebar.message.sql_directory_deleted": "SQL ディレクトリを削除しました。", + "sidebar.message.sql_directory_name_required": "ディレクトリ名は必須です。", + "sidebar.message.sql_directory_path_invalid": "SQL ディレクトリのパスが無効です。", + "sidebar.message.sql_directory_renamed": "ディレクトリの名前を変更しました。", + "sidebar.message.sql_file_context_incomplete": "SQL ファイルのコンテキストが不完全です。", + "sidebar.message.sql_file_created": "SQL ファイルを作成しました。", + "sidebar.message.sql_file_deleted": "SQL ファイルを削除しました。", + "sidebar.message.sql_file_name_required": "SQL ファイル名は必須です。", + "sidebar.message.sql_file_path_incomplete": "SQL ファイルのパスが不完全なため開けません。", + "sidebar.message.sql_file_renamed": "SQL ファイルの名前を変更しました。", + "sidebar.message.table_data_action_failed": "{{action}} に失敗しました: {{error}}", + "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", + "sidebar.message.table_data_action_success": "{{action}} が完了しました。", + "sidebar.message.table_deleted": "テーブルを削除しました。", + "sidebar.message.table_name_required": "テーブル名を入力してください。", + "sidebar.message.table_name_unchanged": "テーブル名は変更されていません。", + "sidebar.message.table_pinned": "テーブルを固定しました", + "sidebar.message.table_renamed": "テーブル名を変更しました。", + "sidebar.message.table_structure_copied": "テーブル構造をコピーしました。", + "sidebar.message.table_unpinned": "テーブルの固定を解除しました", + "sidebar.message.view_deleted": "ビューを削除しました。", + "sidebar.message.view_name_required": "ビュー名を入力してください。", + "sidebar.message.view_name_unchanged": "ビュー名は変更されていません。", + "sidebar.message.view_renamed": "ビュー名を変更しました。", + "sidebar.message.visual_new_table_unsupported": "このデータソースでは、ビジュアルな新規テーブル作成はまだサポートされていません。", + "sidebar.modal.batch_databases.description": "データベース単位で構造を一括エクスポートするか、構造とデータを含むバックアップを生成します。", + "sidebar.modal.batch_databases.selection_hint": "接続を選択すると、その接続で一括エクスポート可能なデータベース一覧を読み込みます。", + "sidebar.modal.batch_databases.title": "データベース一括操作", + "sidebar.modal.batch_tables.description": "オブジェクト単位で構造、データ、または完全バックアップを一括エクスポートします。", + "sidebar.modal.batch_tables.selection_hint": "先に接続とデータベースを選択し、その後エクスポート範囲と対象オブジェクトを決めてください。", + "sidebar.modal.batch_tables.title": "オブジェクト一括操作", + "sidebar.modal.confirm_clear_selected_tables.content": "{{connection}} / {{database}} の選択したオブジェクトのデータをクリアしますか?この操作は元に戻せません。", + "sidebar.modal.confirm_clear_selected_tables.title": "選択したテーブルのクリアを確認", + "sidebar.modal.confirm_delete_connection.content": "接続 {{name}} を削除しますか?", + "sidebar.modal.confirm_delete_database.content": "{{name}} を削除しますか?この操作は元に戻せません。", + "sidebar.modal.confirm_delete_database.title": "データベースを削除", + "sidebar.modal.confirm_delete_routine.content": "{{type}} {{name}} を削除しますか?この操作は元に戻せません。", + "sidebar.modal.confirm_delete_routine.title": "{{type}} を削除", + "sidebar.modal.confirm_delete_saved_query.content": "保存済みクエリ「{{name}}」を削除しますか?この操作は元に戻せません。", "sidebar.modal.confirm_delete_schema.content": "schema {{name}} を削除しますか?schema とその中のすべてのオブジェクトが削除されます。この操作は元に戻せません。", "sidebar.modal.confirm_delete_schema.title": "schema を削除", + "sidebar.modal.confirm_delete_sql_directory.content": "\"{{name}}\" を削除しますか?この操作はローカルディスク上のディレクトリを削除し、空のディレクトリのみ削除できます。", + "sidebar.modal.confirm_delete_sql_directory.title": "SQL ディレクトリを削除", + "sidebar.modal.confirm_delete_sql_file.content": "\"{{name}}\" を削除しますか?この操作はローカルディスク上のファイルを削除し、元に戻せません。", + "sidebar.modal.confirm_delete_sql_file.title": "SQL ファイルを削除", + "sidebar.modal.confirm_delete_table.content": "{{name}} を削除しますか?この操作は元に戻せません。", + "sidebar.modal.confirm_delete_table.title": "テーブルを削除", + "sidebar.modal.confirm_delete_tag.content": "グループ「{{name}}」を削除しますか?中の接続は削除されません。", + "sidebar.modal.confirm_delete_view.content": "{{name}} を削除しますか?この操作は元に戻せません。", + "sidebar.modal.confirm_delete_view.title": "ビューを削除", + "sidebar.modal.confirm_delete.title": "削除の確認", + "sidebar.modal.confirm_table_data_action.content": "{{action}} {{table}} を実行しますか?この操作は元に戻せません。", + "sidebar.modal.confirm_table_data_action.title": "{{action}} の確認", + "sidebar.modal.create_database.title": "データベースを作成", + "sidebar.modal.rename_database.title": "データベース名を変更: {{name}}", "sidebar.modal.rename_schema.title": "schema を編集: {{name}}", + "sidebar.modal.rename_table.title": "テーブル名を変更: {{name}}", + "sidebar.modal.rename_view.title": "ビュー名を変更: {{name}}", + "sidebar.modal.tag.create_description": "接続を整理するためのグループを作成します。", + "sidebar.modal.tag.create_title": "グループを作成", + "sidebar.modal.tag.edit_description": "グループ名と含める接続を更新します。", + "sidebar.modal.tag.edit_title": "グループを編集", + "sidebar.object_group.events": "イベント", + "sidebar.object_group.materialized_views": "マテリアライズドビュー", + "sidebar.object_group.routines": "関数とプロシージャ", + "sidebar.object_group.tables": "テーブル", + "sidebar.object_group.triggers": "トリガー", + "sidebar.object_group.views": "ビュー", + "sidebar.object.function": "関数", + "sidebar.object.procedure": "プロシージャ", + "sidebar.object.view": "ビュー", + "sidebar.placeholder.filter_table_view": "テーブルまたはビューを絞り込み", + "sidebar.placeholder.select_connection": "接続を選択", + "sidebar.placeholder.select_connection_first": "先に接続を選択してください", + "sidebar.placeholder.tag_name": "グループ名", + "sidebar.punctuation.list_separator": "、", + "sidebar.rail.object_actions": "オブジェクト領域のクイック操作", + "sidebar.rail.system_actions": "システム操作", + "sidebar.search.manual_scope": "手動範囲", + "sidebar.search.multi_select_supported": "複数選択に対応", + "sidebar.search.placeholder": "検索...", + "sidebar.search.scope_description": "サイドバー検索の対象範囲を選択します。", + "sidebar.search.scope_hint": "スマートモードでは、コンテキストに応じて名前、ホスト、データベース、オブジェクトを検索します。", + "sidebar.search.scope_title": "検索範囲", + "sidebar.search.scope_tooltip": "現在の検索範囲: {{scope}}", + "sidebar.search.scope.database": "データベース", + "sidebar.search.scope.host": "ホスト", + "sidebar.search.scope.object": "オブジェクト", + "sidebar.search.scope.smart": "スマート", + "sidebar.search.scope.smart_description": "選択中のノードに応じて検索範囲を自動的に絞り込みます。", + "sidebar.search.scope.smart_short": "スマート", + "sidebar.search.scope.tag": "タグ", + "sidebar.sql_directory.default_name": "SQL ディレクトリ", + "sidebar.sql_file_exec.cancel": "実行をキャンセル", + "sidebar.sql_file_exec.executed_label": "実行済み: ", + "sidebar.sql_file_exec.file_size": "ファイルサイズ: ", + "sidebar.sql_file_exec.rows_separator": " 行 | 失敗: ", + "sidebar.sql_file_exec.rows_suffix": " 行", + "sidebar.sql_file_exec.status_label": "ステータス: ", + "sidebar.sql_file_exec.status.cancelled": "キャンセル済み", + "sidebar.sql_file_exec.status.done": "完了", + "sidebar.sql_file_exec.status.error": "エラー", + "sidebar.sql_file_exec.status.running": "実行中", + "sidebar.sql_file_exec.title": "外部 SQL ファイルを実行", + "sidebar.sql_file.default_name": "SQL ファイル", + "sidebar.sql_template.duckdb_macro_hint": "関数のような動作には SQL Macro を使用してください", + "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB はまだストアドプロシージャをサポートしていません", + "sidebar.sql_template.edit_routine": "{{type}} {{name}} を編集", + "sidebar.sql_template.edit_view": "ビュー {{name}} を編集", + "sidebar.sql_template.modify_then_execute": "変更して実行", + "sidebar.status.pinned": "固定済み", + "sidebar.tab.create_function": "新規関数", + "sidebar.tab.create_procedure": "新規プロシージャ", + "sidebar.tab.create_view": "新規ビュー", + "sidebar.tab.design_table": "テーブル設計({{table}})", + "sidebar.tab.edit_event": "イベントを編集: {{name}}", + "sidebar.tab.edit_routine": "{{type}} を編集: {{name}}", + "sidebar.tab.edit_view": "ビューを編集: {{name}}", + "sidebar.tab.event": "イベント: {{name}}", + "sidebar.tab.materialized_view_definition": "マテリアライズドビュー: {{name}}", "sidebar.tab.new_event": "新規イベント", + "sidebar.tab.new_query": "新規クエリ", + "sidebar.tab.new_query_database": "新規クエリ({{database}})", + "sidebar.tab.new_table": "新規テーブル - {{database}}", "sidebar.tab.recent_query": "最近のクエリ", + "sidebar.tab.redis_command": "コマンド - {{database}}", + "sidebar.tab.redis_monitor": "監視 - {{database}}", + "sidebar.tab.routine_definition": "{{type}}: {{name}}", + "sidebar.tab.table_overview": "テーブル概要 - {{database}}{{schema}}", + "sidebar.tab.table_structure": "テーブル構造({{table}})", + "sidebar.tab.trigger": "トリガー: {{name}}", + "sidebar.tab.view_definition": "ビュー: {{name}}", + "sidebar.table_action.clear.label": "テーブルをクリア", + "sidebar.table_action.clear.progress": "クリア中", + "sidebar.table_action.truncate.label": "テーブルを切り詰め", + "sidebar.table_action.truncate.progress": "切り詰め中", + "sidebar.table_folder.columns": "列", + "sidebar.table_folder.foreign_keys": "外部キー", + "sidebar.table_folder.indexes": "インデックス", + "sidebar.table_folder.triggers": "トリガー", + "sidebar.tree.all_saved_queries": "すべての保存済みクエリ", + "sidebar.tree.default_database": "既定データベース", + "sidebar.tree.default_schema": "既定スキーマ", + "sidebar.tree.saved_queries": "保存済みクエリ", + "sidebar.tree.unknown_connection": "不明な接続", + "sidebar.tree.unmatched_saved_queries": "未一致", + "sidebar.tree.untitled_query": "無題のクエリ", + "sidebar.v2_database_menu.backup_all_tables_sql": "すべてのテーブルをバックアップ · スキーマ + データ SQL", + "sidebar.v2_database_menu.export_all_table_schema_sql": "すべてのテーブル構造をエクスポート · SQL", + "sidebar.v2_database_menu.export_backup_section": "エクスポートとバックアップ", + "sidebar.v2_database_menu.meta": "{{dialect}} · データベース操作", + "sidebar.v2_database_menu.new_external_catalog": "新しい外部 Catalog", + "sidebar.v2_database_menu.new_materialized_view": "マテリアライズドビューを作成", + "sidebar.v2_database_menu.new_schema": "新しい schema", + "sidebar.v2_database_menu.refresh_object_tree": "オブジェクトツリーを更新", "sidebar.v2_schema_menu.backup_current_schema_sql": "現在のスキーマ内の全テーブルをバックアップ · スキーマ + データ", "sidebar.v2_schema_menu.delete_schema_cascade": "スキーマを削除 · DROP CASCADE", "sidebar.v2_schema_menu.edit_schema": "スキーマを編集", "sidebar.v2_schema_menu.export_current_schema_sql": "現在のスキーマのテーブル構造をエクスポート · SQL", "sidebar.v2_schema_menu.meta": "{{database}} · スキーマ操作", + "sidebar.v2_table_group_menu.current_database": "現在のデータベース", + "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} テーブル · {{sort}}順で並べ替え中", + "sidebar.v2_table_group_menu.sort_frequency": "使用頻度", + "sidebar.v2_table_group_menu.sort_name": "名前", + "sidebar.v2_table_group_menu.title": "テーブル", + "sidebar.v2_table_menu.ai_explain_table": "AI でこのテーブルを説明", + "sidebar.v2_table_menu.ai_generate_query": "AI でクエリを生成", + "sidebar.v2_table_menu.backup_sql_dump": "バックアップ · {{keyword}}", + "sidebar.v2_table_menu.copy_section": "コピー", + "sidebar.v2_table_menu.copy_table_as_insert": "テーブル全体を {{keyword}} としてコピー", + "sidebar.v2_table_menu.copy_table_name": "テーブル名をコピー", + "sidebar.v2_table_menu.design_table_detail": "列 / インデックス / 外部キー", + "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", + "sidebar.v2_table_menu.maintenance_section": "メンテナンス", + "sidebar.v2_table_menu.meta.idle": "更新をクリックして統計情報を読み込み", + "sidebar.v2_table_menu.meta.loading": "テーブル統計情報を読み込み中...", + "sidebar.v2_table_menu.meta.rows": "{{count}} 行", + "sidebar.v2_table_menu.meta.rows_empty": "— 行", + "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} データ · {{indexes}} インデックス", + "sidebar.v2_table_menu.meta.unavailable": "テーブル統計情報を利用できません", + "sidebar.v2_table_menu.metadata_section": "メタデータ", + "sidebar.v2_table_menu.new_rollup": "{{keyword}} を新規作成", + "sidebar.v2_table_menu.open_data": "データを表示", + "sidebar.v2_table_menu.open_export_workbench": "エクスポートワークベンチを開く…", + "sidebar.v2_table_menu.open_in_new_tab": "新しいタブで開く", + "sidebar.v2_table_menu.refresh_stats": "統計情報を更新", + "sidebar.v2_table_menu.rename_compact": "名前を変更…", + "sidebar.v2_table_menu.truncate_table": "テーブルを切り詰め", + "sidebar.v2_table_menu.view_in_er": "ER 図で表示", + "sidebar.validation.name_required": "名前を入力してください。", + "sidebar.validation.new_database_name_required": "新しいデータベース名を入力してください。", + "sidebar.validation.new_table_name_required": "新しいテーブル名を入力してください。", + "sidebar.validation.new_view_name_required": "新しいビュー名を入力してください。", + "sidebar.validation.schema_name_required": "schema 名を入力してください。", + "sidebar.validation.tag_name_required": "グループ名を入力してください。", "snippet_settings.action.close": "閉じる", "snippet_settings.action.delete": "削除", "snippet_settings.action.new": "新規スニペット", @@ -7307,6 +6959,66 @@ "store.fallback.connection_name": "接続 {{index}}", "store.fallback.connection_tag_name": "タグ {{index}}", "store.fallback.sql_snippet_name": "スニペット {{index}}", + "tab_manager.close_aria": "{{title}} を閉じる", + "tab_manager.empty.action.open_ai": "AI を開く", + "tab_manager.empty.aria.start_workbench": "GoNavi 開始ワークベンチ", + "tab_manager.empty.eyebrow.connections": "{{count}} 件の接続", + "tab_manager.empty.eyebrow.workbench": "ワークベンチ", + "tab_manager.empty.hero.description": "データソースを選択し、クエリエディターを開くか、AI パネルでコンテキストを保ったまま続行します。", + "tab_manager.empty.hero.title": "接続、クエリ、分析は 1 つのワークベンチから始まります。", + "tab_manager.empty.quick.ai_assist.description": "SQL の説明、クエリ生成、結果レビュー", + "tab_manager.empty.quick.ai_assist.title": "AI 支援を開始", + "tab_manager.empty.quick.aria": "クイックワークフロー", + "tab_manager.empty.quick.configure_source.description": "URI、SSH、プロキシ、ドライバーを 1 か所で設定", + "tab_manager.empty.quick.configure_source.title": "データソースを設定", + "tab_manager.empty.quick.heading": "クイックワークフロー", + "tab_manager.empty.quick.sql_workspace.description": "現在のコンテキストでクエリエディターを開く", + "tab_manager.empty.quick.sql_workspace.title": "SQL ワークスペースを開始", + "tab_manager.hover.fallback.database_not_specified": "未指定", + "tab_manager.hover.fallback.host_not_configured": "未設定", + "tab_manager.hover.fallback.unbound_connection": "未バインドの接続", + "tab_manager.hover.kind.design": "テーブル設計", + "tab_manager.hover.kind.event": "イベント", + "tab_manager.hover.kind.fallback": "タブ", + "tab_manager.hover.kind.jvm_audit": "JVM 監査", + "tab_manager.hover.kind.jvm_diagnostic": "JVM 診断", + "tab_manager.hover.kind.jvm_monitoring": "JVM 監視", + "tab_manager.hover.kind.jvm_overview": "JVM 概要", + "tab_manager.hover.kind.jvm_resource": "JVM リソース", + "tab_manager.hover.kind.materialized_view": "マテリアライズドビュー", + "tab_manager.hover.kind.query": "SQL クエリ", + "tab_manager.hover.kind.redis_command": "Redis コマンド", + "tab_manager.hover.kind.redis_keys": "Redis Key", + "tab_manager.hover.kind.redis_monitor": "Redis 監視", + "tab_manager.hover.kind.routine": "関数 / プロシージャ", + "tab_manager.hover.kind.sql_analysis": "SQL 分析ワークベンチ", + "tab_manager.hover.kind.table": "テーブルデータ", + "tab_manager.hover.kind.table_export": "エクスポートワークベンチ", + "tab_manager.hover.kind.table_overview": "テーブル概要", + "tab_manager.hover.kind.trigger": "トリガー", + "tab_manager.hover.kind.view": "ビュー", + "tab_manager.hover.label.connection": "接続", + "tab_manager.hover.label.database": "データベース", + "tab_manager.hover.label.object": "オブジェクト", + "tab_manager.hover.label.type": "種類", + "tab_manager.kind_badge.design": "設計", + "tab_manager.kind_badge.event": "イベント", + "tab_manager.kind_badge.fallback": "タブ", + "tab_manager.kind_badge.jvm": "JVM", + "tab_manager.kind_badge.materialized_view": "MV", + "tab_manager.kind_badge.query": "SQL", + "tab_manager.kind_badge.redis": "Redis", + "tab_manager.kind_badge.routine": "関数", + "tab_manager.kind_badge.sql_analysis": "分析", + "tab_manager.kind_badge.table": "表", + "tab_manager.kind_badge.table_export": "エクスポート", + "tab_manager.kind_badge.table_overview": "DB", + "tab_manager.kind_badge.trigger": "トリガー", + "tab_manager.kind_badge.view": "ビュー", + "tab_manager.menu.close_all": "すべてのタブを閉じる", + "tab_manager.menu.close_left": "左側のタブを閉じる", + "tab_manager.menu.close_other": "他のタブを閉じる", + "tab_manager.menu.close_right": "右側のタブを閉じる", "tab_manager.menu.tab_display_settings": "タブ設定", "tab_manager.sql_file_close.close_tabs": "タブを閉じる", "tab_manager.sql_file_close.continue_close": "閉じる処理を続行", @@ -7324,24 +7036,305 @@ "tab_manager.sql_file_close.save_failed": "{{title}} の保存に失敗しました: {{detail}}", "tab_manager.sql_file_close.saved": "SQL ファイルを保存しました", "tab_manager.sql_file_close.unknown_error": "不明なエラー", + "table_designer.action.add": "追加", + "table_designer.action.add_after_selected": "選択した列の後に追加", + "table_designer.action.add_column": "列を追加", + "table_designer.action.apply": "適用", + "table_designer.action.cancel": "キャンセル", + "table_designer.action.copy_selected_to_new_table": "選択列を新しいテーブルへコピー", + "table_designer.action.create": "作成", + "table_designer.action.create_table": "新しいテーブルを作成", + "table_designer.action.delete": "削除", + "table_designer.action.edit": "編集", + "table_designer.action.execute": "実行", + "table_designer.action.refresh": "更新", + "table_designer.action.refresh_anyway": "更新を続行", + "table_designer.action.save": "保存", + "table_designer.action.table_comment": "テーブルコメント", + "table_designer.action.view_statement": "文を表示", + "table_designer.column.actions": "操作", + "table_designer.column.auto_increment": "自動採番", + "table_designer.column.comment": "コメント", + "table_designer.column.default": "デフォルト", + "table_designer.column.name": "名前", + "table_designer.column.not_null": "NOT NULL", + "table_designer.column.primary_key": "主キー", + "table_designer.column.type": "型", + "table_designer.empty.triggers": "このテーブルにはトリガーがありません", + "table_designer.fallback.empty": "(空)", + "table_designer.fallback.unknown_error": "不明なエラー", + "table_designer.fallback.unnamed_foreign_key": "(名前なし外部キー)", + "table_designer.fallback.unnamed_index": "(名前なしインデックス)", + "table_designer.foreign_key.column.constraint_name": "制約名", + "table_designer.foreign_key.column.fields": "列", + "table_designer.foreign_key.column.ref_fields": "参照列", + "table_designer.foreign_key.column.ref_table": "参照テーブル", + "table_designer.index.column.fields": "列", + "table_designer.index.column.name": "インデックス名", + "table_designer.index.column.type": "インデックス型", + "table_designer.index.column.uniqueness": "一意性", + "table_designer.index.kind.fulltext": "全文インデックス", + "table_designer.index.kind.normal": "通常インデックス", + "table_designer.index.kind.normal_nonclustered": "通常インデックス(非クラスター化)", + "table_designer.index.kind.primary_clustered": "主キーインデックス(クラスター化)", + "table_designer.index.kind.spatial": "空間インデックス", + "table_designer.index.kind.unique": "一意インデックス", + "table_designer.index.uniqueness.normal": "通常", + "table_designer.index.uniqueness.unique": "一意", + "table_designer.label.create_statement": "{{name}} の CREATE 文", + "table_designer.label.create_statement_plain": "CREATE 文", + "table_designer.message.add_at_least_one_column": "少なくとも1列追加してください", + "table_designer.message.columns_copied_to_new_table": "{{count}} 列を新しいテーブル {{table}} にコピーしました", + "table_designer.message.connection_not_found": "接続が見つかりません", + "table_designer.message.delete_failed": "削除に失敗しました: {{detail}}", + "table_designer.message.drop_old_trigger_failed": "既存トリガーの削除に失敗しました: {{detail}}", "table_designer.message.duckdb_primary_key_change_unsupported": "DuckDB では現在、主キーのないテーブルに主キーを追加する場合のみ対応しています。既存の主キーの変更または削除にはテーブルの再作成が必要です。", + "table_designer.message.execution_failed": "実行に失敗しました: {{detail}}", + "table_designer.message.execution_failed_plain": "実行に失敗しました", + "table_designer.message.execution_failed_prefix": "実行に失敗しました: ", + "table_designer.message.foreign_key_column_count_mismatch": "ローカル列数と参照列数を一致させてください", + "table_designer.message.foreign_key_created": "外部キーを追加しました", + "table_designer.message.foreign_key_delete_unsupported": "このデータベースではここからこの外部キーを削除できません", + "table_designer.message.foreign_key_deleted": "外部キーを削除しました", + "table_designer.message.foreign_key_maintenance_unsupported": "このデータベースではここから外部キーを管理できません", + "table_designer.message.foreign_key_name_exists": "外部キー制約名はすでに存在します: {{name}}", + "table_designer.message.foreign_key_name_required": "外部キー制約名を入力してください", + "table_designer.message.foreign_key_updated": "外部キーを更新しました", + "table_designer.message.index_create_sql_placeholder": "インデックス作成 SQL はまだ利用できません", + "table_designer.message.index_create_sql_unavailable": "インデックス作成 SQL を取得できません", + "table_designer.message.index_created": "インデックスを追加しました", + "table_designer.message.index_delete_named_unsupported": "このデータベースではインデックス \"{{name}}\" を削除できません", + "table_designer.message.index_delete_unsupported": "このデータベースではこのインデックスを削除できません", + "table_designer.message.index_deleted": "インデックスを削除しました", + "table_designer.message.index_kind_unsupported": "このデータベースはこのインデックス種別をサポートしていません", + "table_designer.message.index_maintenance_unsupported": "このデータベースではここからインデックスを管理できません", + "table_designer.message.index_name_exists": "インデックス名はすでに存在します: {{name}}", + "table_designer.message.index_name_required": "インデックス名を入力してください", + "table_designer.message.index_restore_failed": "{{detail}}。元のインデックスの復元に失敗しました: {{restoreDetail}}", + "table_designer.message.index_restore_unavailable": "{{detail}}。元のインデックスを自動復元できません。早めに確認してください。", + "table_designer.message.index_restored_after_failure": "{{detail}}。元のインデックスを自動復元しました。", + "table_designer.message.index_updated": "インデックスを更新しました", + "table_designer.message.indexes_deleted": "{{count}} 件のインデックスを削除しました", + "table_designer.message.load_columns_failed": "列の読み込みに失敗しました: {{detail}}", + "table_designer.message.no_changes_detected": "変更は検出されませんでした", + "table_designer.message.no_copyable_columns": "コピーできる列が選択されていません", + "table_designer.message.no_index_changes": "インデックスの変更は検出されませんでした", + "table_designer.message.only_normal_unique_index_supported": "このデータベースでは通常インデックスと一意インデックスのみ管理できます", + "table_designer.message.ref_columns_required": "参照列を少なくとも1つ入力してください", + "table_designer.message.ref_table_required": "参照テーブルを入力してください", + "table_designer.message.relational_index_unsupported": "このデータソースはリレーショナルインデックス管理をサポートしていません", + "table_designer.message.schema_saved_alter": "テーブル構造を更新しました。", + "table_designer.message.schema_saved_create": "テーブルを作成しました。", + "table_designer.message.select_at_least_one_column": "少なくとも1列選択してください", + "table_designer.message.select_column_before_insert": "挿入する前に列を選択してください。", + "table_designer.message.select_columns_to_copy": "コピーする列を先に選択してください", + "table_designer.message.select_index_to_delete": "削除するインデックスを先に選択してください", + "table_designer.message.select_local_columns": "ローカル列を少なくとも1つ選択してください", + "table_designer.message.select_one_foreign_key": "外部キーを1つ選択してください", + "table_designer.message.select_one_index": "インデックスを1つ選択してください", + "table_designer.message.statement_execution_failed_prefix": "{{current}}/{{total}} 件目の文の実行に失敗しました: ", + "table_designer.message.switch_index_kind": "「インデックス種別」を {{kind}} インデックスに切り替えてください", + "table_designer.message.table_comment_unsupported": "このデータベースではここからテーブルコメントを編集できません", + "table_designer.message.table_comment_updated": "テーブルコメントを更新しました", + "table_designer.message.table_name_required": "テーブル名を入力してください", + "table_designer.message.target_table_required": "コピー先テーブル名を入力してください", + "table_designer.message.trigger_created": "トリガーを作成しました", + "table_designer.message.trigger_deleted": "トリガーを削除しました", + "table_designer.message.trigger_updated": "トリガーを更新しました", + "table_designer.modal.column_comment_title": "列コメント", + "table_designer.modal.column_comment_title_named": "列コメント - {{name}}", + "table_designer.modal.confirm_sql_title": "SQL 変更の確認", + "table_designer.modal.copy_columns_title": "選択列を新しいテーブルへコピー", + "table_designer.modal.delete_foreign_key_content": "外部キー制約 \"{{name}}\" を削除しますか?", + "table_designer.modal.delete_foreign_key_title": "外部キーの削除", + "table_designer.modal.delete_index_many": "次の {{count}} 件のインデックスを削除しますか?\n{{names}}", + "table_designer.modal.delete_index_one": "インデックス {{names}} を削除しますか?", + "table_designer.modal.delete_index_title": "インデックスの削除", + "table_designer.modal.delete_trigger_content": "トリガー \"{{name}}\" を削除しますか?この操作は元に戻せません。", + "table_designer.modal.delete_trigger_title": "トリガーの削除", + "table_designer.modal.foreign_key_create_title": "外部キーを追加", + "table_designer.modal.foreign_key_edit_title": "外部キーを編集", + "table_designer.modal.index_create_title": "インデックスを追加", + "table_designer.modal.index_edit_title": "インデックスを編集", + "table_designer.modal.table_comment_title": "テーブルコメントを編集", + "table_designer.modal.trigger_create_title": "トリガーを追加", + "table_designer.modal.trigger_detail_title": "トリガー詳細", + "table_designer.modal.trigger_detail_title_named": "トリガー: {{name}}", + "table_designer.modal.trigger_edit_title": "トリガーを編集", + "table_designer.modal.unsaved_changes_content": "更新すると、現在の下書きにある未保存の列変更は破棄されます。更新して下書きを上書きしますか?", + "table_designer.modal.unsaved_changes_title": "未保存の列変更があります", + "table_designer.notice.foreign_key_readonly": "このデータベースではここから外部キーを編集できません。表示のみです。", + "table_designer.notice.foreign_key_replace_hint": "外部キーを編集すると、古い外部キーを削除してから新しい外部キーを作成します。", + "table_designer.notice.index_readonly": "このデータベースではここからインデックスを編集できません。表示のみです。", + "table_designer.notice.index_restore_hint": "インデックス編集で新しいインデックスの作成に失敗した場合、元のインデックスの自動復元を試みます。", + "table_designer.notice.sql_irreversible": "SQL を十分に確認してください。実行後は元に戻せません。", + "table_designer.notice.sql_statement_irreversible": "SQL 文を十分に確認してください。実行後は元に戻せません。", + "table_designer.notice.trigger_replace_hint": "トリガーを編集すると、元のトリガーを削除してから新しいトリガーを作成します。", + "table_designer.option.default": "デフォルト", + "table_designer.option.recommended_suffix": "(推奨)", + "table_designer.placeholder.column_comment": "列コメントを入力してください", + "table_designer.placeholder.foreign_key_name": "外部キー制約名(例: fk_order_user)", + "table_designer.placeholder.index_columns": "インデックス列を選択してください。選択順が使われます", + "table_designer.placeholder.index_name": "インデックス名(例: idx_user_name)", + "table_designer.placeholder.local_columns": "ローカル列を選択してください。順序は参照列と一致させてください", + "table_designer.placeholder.primary_index_name": "主キーインデックスの固定名: PRIMARY", + "table_designer.placeholder.ref_columns": "参照列を入力してください。複数指定できます", + "table_designer.placeholder.ref_table": "参照テーブル。db.table 形式を使用できます", + "table_designer.placeholder.table_comment": "テーブルコメントを入力してください", + "table_designer.placeholder.table_name": "テーブル名を入力してください", + "table_designer.placeholder.target_table_name": "コピー先テーブル名を入力してください", "table_designer.schema_sql.doris.primary_key_hint": "-- Doris の主キー/Key モデル変更はテーブルモデルに合わせた手動移行が必要です。MySQL 専用の DROP/ADD PRIMARY KEY は生成していません。", + "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB では COMMENT ON COLUMN による列コメントの永続化はできません。列 {{column}} のコメントはデザイナーのプレビュー内にのみ保持されます。", "table_designer.schema_sql.duckdb.primary_key_hint": "-- DuckDB では現在、主キーがないテーブルへの PRIMARY KEY 追加のみサポートされます。既存主キーの変更や削除にはテーブル再作成が必要です。", + "table_designer.schema_sql.limited_column_hint": "-- {{dialect}} の列制約、デフォルト値、コメント構文は MySQL と異なります。MySQL 専用句は生成していません。実行前に対象DB向けの SQL を補ってください。", + "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite では列属性を直接変更できません。列 {{column}} は、新しいテーブルの作成、データ移行、旧テーブルの置き換えで対応してください。", + "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server で古い主キーを削除するには元の制約名が必要です。削除前にインデックスタブで確認してください。", + "table_designer.schema_sql.tdengine.timestamp_hint": "-- TDengine の通常テーブルには通常 TIMESTAMP 時間列が必要です。実行前にテーブルモデルを確認してください。", + "table_designer.selection.columns_selected": "{{count}} 列を選択中", + "table_designer.selection.foreign_key_selected": "選択中: {{name}}", + "table_designer.selection.indexes_selected": "{{count}} 件のインデックスを選択中", + "table_designer.selection.trigger_prompt": "クリックしてトリガーを選択", + "table_designer.selection.trigger_selected": "選択中: {{name}}", + "table_designer.sql_preview.change.add": "追加の変更", + "table_designer.sql_preview.change.comment": "コメントの変更", + "table_designer.sql_preview.change.constraint": "制約の変更", + "table_designer.sql_preview.change.create": "新規テーブル構造", "table_designer.sql_preview.change.create_index": "インデックス作成", + "table_designer.sql_preview.change.drop": "削除の変更", + "table_designer.sql_preview.change.modify": "列属性の変更", + "table_designer.sql_preview.change.rename": "名前変更の変更", + "table_designer.starrocks.bucket_mode.auto": "バケット数を自動設定", + "table_designer.starrocks.bucket_mode.number": "固定バケット数", + "table_designer.starrocks.distribution.hash": "ハッシュ分散", + "table_designer.starrocks.distribution.none": "分散なし", + "table_designer.starrocks.distribution.random": "ランダム分散", + "table_designer.starrocks.key_model.aggregate": "集計キー", + "table_designer.starrocks.key_model.duplicate": "重複キー", + "table_designer.starrocks.key_model.unique": "一意キー", + "table_designer.starrocks.placeholder.bucket_count": "バケット数", + "table_designer.starrocks.placeholder.distribution_columns": "分散列(例: user_id)", + "table_designer.starrocks.placeholder.key_columns": "キー列(例: id, date)", + "table_designer.starrocks.placeholder.partition_clause": "パーティション句(例: PARTITION BY RANGE(date_col)(...))", + "table_designer.starrocks.table_kind.external": "外部テーブル", + "table_designer.starrocks.table_kind.olap": "OLAP テーブル", + "table_designer.status.read_only": "読み取り専用", + "table_designer.summary.columns": "{{count}} 列", + "table_designer.summary.indexes": "インデックス数: {{count}}、インデックス列: {{fields}}", + "table_designer.tab.columns": "列", "table_designer.tab.edit_trigger_title": "トリガーを編集: {{name}}", + "table_designer.tab.foreign_keys": "外部キー", + "table_designer.tab.indexes": "インデックス", + "table_designer.tab.triggers": "トリガー", + "table_designer.table_comment.current": "現在のコメント: {{comment}}", + "table_designer.title.default_database": "既定データベース", + "table_designer.title.schema_designer": "スキーマデザイナー", + "table_designer.title.untitled_table": "未命名テーブル", + "table_designer.tooltip.edit_comment_popup": "ポップアップでコメントを編集", + "table_designer.trigger.column.event": "イベント", + "table_designer.trigger.column.name": "名前", + "table_designer.trigger.column.timing": "タイミング", + "table_designer.trigger.definition_unavailable": "完全なトリガー定義を取得できません", + "table_designer.trigger.field.event": "イベント", + "table_designer.trigger.field.timing": "タイミング", + "table_designer.trigger.template.body_comment": "トリガー処理", + "table_designer.trigger.template.enter_create": "CREATE TRIGGER 文を入力してください", + "table_overview.action.show_more": "さらにテーブルを表示(残り {{count}})", + "table_overview.empty.no_matches": "一致する結果はありません", + "table_overview.empty.no_tables": "テーブルがありません", + "table_overview.menu.backup_table_sql": "テーブルをバックアップ (SQL)", + "table_overview.menu.clear_table": "テーブルを空にする", + "table_overview.menu.copy_structure": "テーブル構造をコピー", "table_overview.menu.copy_table_name": "テーブル名をコピー", + "table_overview.menu.danger_operations": "危険な操作", + "table_overview.menu.delete_table": "テーブルを削除", + "table_overview.menu.design_table": "テーブルを設計", + "table_overview.menu.export_csv": "CSV をエクスポート", + "table_overview.menu.export_html": "HTML をエクスポート", + "table_overview.menu.export_json": "JSON をエクスポート", + "table_overview.menu.export_markdown": "Markdown をエクスポート", + "table_overview.menu.export_table_data": "テーブルデータをエクスポート", + "table_overview.menu.export_xlsx": "XLSX をエクスポート", + "table_overview.menu.new_query": "新規クエリ", + "table_overview.menu.rename_table": "テーブル名を変更", "table_overview.menu.table_structure": "テーブル構造", + "table_overview.menu.truncate_table": "テーブルを切り詰め", + "table_overview.message.copy_structure_failed": "テーブル構造のコピーに失敗しました: {{detail}}", + "table_overview.message.copy_structure_success": "テーブル構造をクリップボードにコピーしました", "table_overview.message.copy_table_name_empty": "テーブル名が空のためコピーできません", "table_overview.message.copy_table_name_failed": "テーブル名のコピーに失敗しました: {{detail}}", "table_overview.message.copy_table_name_success": "テーブル名をクリップボードにコピーしました", + "table_overview.message.delete_table_failed": "テーブルの削除に失敗しました: {{detail}}", + "table_overview.message.delete_table_success": "テーブルを削除しました", + "table_overview.message.export_failed": "エクスポートに失敗しました: {{detail}}", + "table_overview.message.export_success": "エクスポートに成功しました", + "table_overview.message.exporting_table_format": "{{table}} を {{format}} としてエクスポートしています...", + "table_overview.message.load_tables_failed": "テーブル情報の読み込みに失敗しました: {{detail}}", + "table_overview.message.pinned": "テーブルをピン留めしました", + "table_overview.message.rename_table_failed": "テーブル名の変更に失敗しました: {{detail}}", + "table_overview.message.rename_table_success": "テーブル名を変更しました", + "table_overview.message.table_data_action_failed": "{{action}} に失敗しました: {{detail}}", + "table_overview.message.table_data_action_loading": "{{table}} に {{action}} を実行しています...", + "table_overview.message.table_data_action_success": "{{action}} が成功しました", + "table_overview.message.unknown_error": "不明なエラー", + "table_overview.message.unpinned": "テーブルのピン留めを解除しました", + "table_overview.metric.data_size": "データサイズ", + "table_overview.metric.engine": "エンジン", + "table_overview.metric.index_size": "インデックスサイズ", + "table_overview.metric.relative_size": "相対サイズ", + "table_overview.modal.delete_table.content": "テーブル \"{{table}}\" を削除しますか?この操作は元に戻せません。", + "table_overview.modal.delete_table.title": "テーブルを削除", + "table_overview.modal.rename_table.placeholder": "新しいテーブル名を入力", + "table_overview.modal.rename_table.title": "テーブル名を変更", + "table_overview.modal.table_data_action.content": "{{action}} はテーブル \"{{table}}\" のすべてのデータを完全に削除します。この操作は元に戻せません。続行しますか?", + "table_overview.modal.table_data_action.title": "{{action}} の確認", + "table_overview.placeholder.search": "テーブル名またはコメントを検索...", + "table_overview.row.engine_table": "{{engine}} テーブル", + "table_overview.row.open_hint": "ダブルクリックでデータを開き、右クリックでその他の操作を表示", + "table_overview.section.all": "すべて", + "table_overview.section.pinned": "ピン留め", + "table_overview.sort.name": "名前", + "table_overview.sort.rows": "行数", + "table_overview.sort.size": "サイズ", + "table_overview.status.hidden_count_hint": "未描画が {{count}} 件あります。さらに読み込むか検索範囲を絞り込んでください。", + "table_overview.status.loading_tables": "テーブル情報を読み込み中...", + "table_overview.status.matching_rendered": "{{matched}} テーブルに一致、{{rendered}} 件を描画中", + "table_overview.status.updating_filter": "絞り込み結果を更新中...", "table_overview.tab.design_table_title": "テーブル設計({{table}})", "table_overview.tab.table_structure_title": "テーブル構造({{table}})", + "table_overview.table_data_action.clear.label": "テーブルをクリア", + "table_overview.table_data_action.truncate.label": "テーブルを切り捨て", + "table_overview.toolbar.summary": "{{count}} テーブル · {{rows}} 行 · {{size}}", + "table_overview.tooltip.card_view": "カード表示", + "table_overview.tooltip.list_view": "リスト表示", + "table_overview.tooltip.refresh": "更新", + "table_overview.tooltip.sort": "並べ替え", + "table_overview.validation.table_name_required": "テーブル名は必須です", + "table_overview.validation.table_name_unchanged": "新しいテーブル名は現在の名前と同じです", "trigger_viewer.action.edit_object": "オブジェクトを編集", "trigger_viewer.edit_sql.compatibility_hint": "現在のデータベースと構文互換性があることを確認してから実行してください", "trigger_viewer.edit_sql.empty_definition": "現在のトリガー定義は空です。CREATE TRIGGER 文を補完してから実行してください", "trigger_viewer.edit_sql.fragment_definition": "現在のデータソースはトリガー定義の断片のみを返しました。CREATE TRIGGER 文を補完してから実行してください", "trigger_viewer.edit_sql.header": "トリガーを編集: {{name}}", "trigger_viewer.edit_sql.replace_hint": "テーブル設計の変更では元のトリガーを削除してから新しいトリガーを作成します。実行前に確認してください", + "trigger_viewer.editor.definition_not_found": "トリガー定義が見つかりません", + "trigger_viewer.editor.sphinx.compat_queries_hint": "複数の互換クエリを実行しました。バージョン機能の制限、または未対応のオブジェクト種類が原因の可能性があります。", + "trigger_viewer.editor.sphinx.empty_result": "現在の Sphinx インスタンス{{version}}はトリガー定義を返しませんでした。", + "trigger_viewer.editor.sphinx.failed_message_label": "返された失敗メッセージ", + "trigger_viewer.editor.sphinx.failed_message_unknown": "返された失敗メッセージ: 不明なエラー", + "trigger_viewer.editor.sphinx.unsupported_query": "現在の Sphinx インスタンス{{version}}はトリガー定義の問い合わせをサポートしていません。", + "trigger_viewer.editor.sphinx.version_suffix": "(バージョン: {{version}})", + "trigger_viewer.editor.unsupported.duckdb": "DuckDB はトリガーをサポートしていません", + "trigger_viewer.editor.unsupported.generic": "このデータベース種類ではトリガー定義の表示はサポートされていません", + "trigger_viewer.editor.unsupported.mongodb": "MongoDB はトリガーをサポートしていません", + "trigger_viewer.editor.unsupported.tdengine": "TDengine はトリガーをサポートしていません", + "trigger_viewer.error.connection_not_found": "データベース接続が見つかりません", + "trigger_viewer.error.load_failed": "読み込みに失敗しました", + "trigger_viewer.error.query_failed": "トリガー定義の取得に失敗しました", + "trigger_viewer.error.query_failed_detail": "トリガー定義の取得に失敗しました: {{detail}}", + "trigger_viewer.error.trigger_name_empty": "トリガー名が空です", + "trigger_viewer.field.database": "データベース", + "trigger_viewer.field.trigger": "トリガー", + "trigger_viewer.loading.definition": "トリガー定義を読み込み中...", "trigger_viewer.tab.edit_trigger_title": "トリガーを編集: {{name}}", "trigger_viewer.warning.refresh_latest_failed": "最新の定義を更新できませんでした", "data_export.dialog.action.start": "エクスポートを開始", @@ -7455,5 +7448,133 @@ "data_export.workbench.target.batch_tables": "{{database}} · {{count}} 個のオブジェクト", "data_export.workbench.target.current_database": "現在のデータベース", "data_export.workbench.task.export_target": "{{name}} をエクスポート", - "data_export.workbench.title": "エクスポートワークベンチ" + "data_export.workbench.title": "エクスポートワークベンチ", + "data_grid.export.scope.all_results_cached": "すべての結果(現在のキャッシュ {{count}} 件)", + "data_grid.export.scope.all_results_cached_description": "現在のクエリを再実行できない場合は、現在のキャッシュ内のすべての結果をエクスポートします。", + "data_grid.export.scope.all_results_requery": "すべての結果(再クエリ)", + "data_grid.export.scope.all_results_requery_description": "現在のページやキャッシュだけをエクスポートしないよう、バックエンドで SQL を再実行します。", + "data_grid.export.scope.current_page": "現在のページ({{count}} 件)", + "data_grid.export.scope.current_page_description": "現在のページ キャッシュをそのままエクスポートします。", + "data_grid.export.scope.current_page_requery_description": "現在のページ条件でバックエンドに再クエリしてから現在のページをエクスポートします。", + "data_grid.export.scope.current_page_unavailable_description": "現在のページはフロントエンドの一時状態に依存するため、クイックエクスポートの利用を推奨します。", + "data_grid.export.scope.filtered_results_all": "絞り込み結果(すべて)", + "data_grid.export.scope.filtered_results_all_requery_description": "現在の絞り込み条件でデータベースを再クエリし、絞り込み結果をすべてエクスポートします。", + "data_grid.export.scope.filtered_results_all_unavailable_description": "現在のデータソースまたは状態では、ワークベンチで絞り込みエクスポートを再現できません。", + "data_grid.export.scope.selected_rows": "選択した行", + "data_grid.export.scope.selected_rows_count": "選択した行({{count}} 件)", + "data_grid.export.scope.selected_rows_description": "現在の結果セットでチェック済みの行のみをエクスポートします。", + "sidebar.message.table_export_target_missing": "テーブル名を特定できないため、エクスポートできません。", + "sidebar.tab.batch_export_databases": "データベースを一括エクスポート", + "sidebar.tab.batch_export_objects": "オブジェクトを一括エクスポート", + "sidebar.tab.batch_export_objects_database": "{{database}} のオブジェクトを一括エクスポート", + "data_export.message.already_running": "すでにエクスポート タスクが実行中です。完了してから新しいエクスポートを開始してください。", + "data_export.message.export_failed": "エクスポート失敗: {{error}}", + "data_export.message.export_success": "エクスポート成功", + "data_export.progress.stage.waiting_file_selection": "エクスポート ファイルの選択を待機中", + "sql_analysis.workbench.validation.sql_required": "診断する SQL を入力してください", + "sql_analysis.workbench.alert.connection_missing_title": "このワークベンチに対応する接続は利用できなくなりました", + "sql_analysis.workbench.alert.connection_missing_description": "有効な接続を選び直してから SQL 分析ワークベンチを開き直してください。", + "sql_analysis.workbench.title": "SQL 分析ワークベンチ", + "sql_analysis.workbench.view.slow_query": "遅い SQL", + "sql_analysis.workbench.view.diagnose": "SQL 診断", + "sql_analysis.workbench.editor.placeholder": "診断する SQL を入力するか、遅い SQL 一覧の項目をクリックして取り込みます", + "sql_analysis.workbench.editor.hint": "遅い SQL 一覧の項目をクリックしてそのまま取り込めます", + "sql_analysis.workbench.action.run": "診断を実行", + "sql_analysis.explain.error.query_required": "クエリが空です", + "sql_analysis.explain.error.run_failed": "診断に失敗しました", + "sql_analysis.explain.loading": "EXPLAIN を実行して実行計画を解析しています...", + "sql_analysis.explain.error.title": "診断に失敗しました: ", + "sql_analysis.explain.empty": "SQL を入力して診断を実行してください", + "sql_analysis.explain.view.plan": "実行計画", + "sql_analysis.explain.view.raw": "原文", + "sql_analysis.explain.meta.node_count": "{{count}} ノード", + "sql_analysis.explain.raw.empty": "(原文なし)", + "sql_analysis.explain_graph.label.table": "テーブル: ", + "sql_analysis.explain_graph.label.index": "インデックス: ", + "sql_analysis.explain_graph.metric.est_rows": "推定", + "sql_analysis.explain_graph.metric.actual_rows": "実測", + "sql_analysis.explain_graph.metric.cost": "コスト", + "sql_analysis.explain_graph.flag.full_scan": "フルスキャン", + "sql_analysis.explain_graph.flag.filesort": "追加ソート", + "sql_analysis.explain_graph.flag.temp_table": "一時テーブル", + "sql_analysis.sidebar.stats.title": "実行統計", + "sql_analysis.sidebar.stats.total_cost": "総コスト", + "sql_analysis.sidebar.stats.total_duration": "総時間", + "sql_analysis.sidebar.stats.rows_read": "読み取り行数", + "sql_analysis.sidebar.stats.buffer_hit": "バッファヒット", + "sql_analysis.sidebar.stats.max_est_rows": "単一ノード最大推定行数", + "sql_analysis.sidebar.warning.full_scan": "フルテーブルスキャンがあります", + "sql_analysis.sidebar.warning.filesort": "追加ソートがあります", + "sql_analysis.sidebar.warning.temp_table": "一時テーブルを使用しています", + "sql_analysis.sidebar.node.title": "ノード詳細", + "sql_analysis.sidebar.node.op_type": "操作種別", + "sql_analysis.sidebar.node.op_detail": "操作詳細", + "sql_analysis.sidebar.node.table": "テーブル", + "sql_analysis.sidebar.node.index": "インデックス", + "sql_analysis.sidebar.node.est_rows": "推定行数", + "sql_analysis.sidebar.node.actual_rows": "実測行数", + "sql_analysis.sidebar.node.loops": "ループ回数", + "sql_analysis.sidebar.node.cost": "コスト", + "sql_analysis.sidebar.node.duration": "所要時間", + "sql_analysis.sidebar.node.buffer_hit": "バッファヒット", + "sql_analysis.sidebar.node.flags": "フラグ", + "sql_analysis.sidebar.node.extra": "Extra フィールド ({{count}})", + "sql_analysis.sidebar.suggestions.title": "インデックス提案 ({{count}})", + "sql_analysis.sidebar.suggestions.empty": "目立った性能問題は見つかりませんでした", + "sql_analysis.sidebar.suggestions.rows": "{{count}} 行", + "sql_analysis.sidebar.suggestions.table": "テーブル: {{table}}", + "sql_analysis.slow_query.error.load_failed": "読み込みに失敗しました", + "sql_analysis.slow_query.message.cleared": "遅いクエリ履歴をクリアしました", + "sql_analysis.slow_query.error.clear_failed": "クリアに失敗しました", + "sql_analysis.slow_query.sort.duration": "実行時間順", + "sql_analysis.slow_query.sort.rows_read": "読み取り行数順", + "sql_analysis.slow_query.sort.recent": "時間順", + "sql_analysis.slow_query.tooltip.clear_current": "現在の接続の履歴をクリア", + "sql_analysis.slow_query.loading": "遅いクエリ履歴を読み込んでいます...", + "sql_analysis.slow_query.error.title": "読み込みに失敗しました: ", + "sql_analysis.slow_query.empty": "遅いクエリ履歴はまだありません(しきい値 {{threshold}}ms)", + "sql_analysis.slow_query.title": "遅い SQL 履歴", + "sql_analysis.slow_query.current_connection": "(現在の接続)", + "sql_analysis.slow_query.metric.rows_read": "読み取り", + "sql_analysis.slow_query.metric.rows_returned": "返却", + "sql_analysis.slow_query.preview.empty": "(SQL プレビューなし)", + "sql_analysis.slow_query.relative.just_now": "たった今", + "sql_analysis.slow_query.relative.minutes_ago": "{{count}} 分前", + "sql_analysis.slow_query.relative.hours_ago": "{{count}} 時間前", + "sql_analysis.slow_query.relative.days_ago": "{{count}} 日前", + "sql_analysis.slow_query.rail.tooltip.no_connection": "先にデータベース接続タブを開いてください", + "sql_analysis.slow_query.rail.tooltip.open": "現在の接続の SQL 分析ワークベンチを開く", + "sql_analysis.slow_query.rail.aria_label": "遅い SQL ワークベンチ", + "sql_analysis.backend.error.query_required": "クエリを空にすることはできません", + "sql_analysis.backend.error.select_only": "診断は SELECT / WITH クエリのみサポートします。更新系は EXPLAIN PLAN モードを使用してください(PR2 対応)。", + "sql_analysis.backend.error.unsupported_db_type": "現在のデータソース({{dbType}})はまだ SQL 診断をサポートしていません。第1期では MySQL/PostgreSQL/SQLite/ClickHouse/Oracle/SQLServer/OceanBase をサポートします。", + "sql_analysis.backend.message.completed": "診断が完了しました", + "query_history.backend.error.connection_fingerprint_invalid": "接続フィンガープリントを解析できません", + "query_history.backend.message.loaded": "読み込み完了", + "query_history.backend.message.cleared": "遅いクエリ履歴をクリアしました", + "connection.backend.error.readonly_action_blocked": "この接続では本番保護が有効なため、{{action}}は実行できません。", + "connection.backend.action.create_database": "データベースを作成", + "connection.backend.action.create_schema": "スキーマを作成", + "connection.backend.action.rename_schema": "スキーマ名を変更", + "connection.backend.action.drop_schema": "スキーマを削除", + "connection.backend.action.rename_database": "データベース名を変更", + "connection.backend.action.drop_database": "データベースを削除", + "connection.backend.action.rename_table": "テーブル名を変更", + "connection.backend.action.drop_table": "テーブルを削除", + "connection.backend.action.drop_view": "ビューを削除", + "connection.backend.action.drop_function_or_procedure": "関数またはストアドプロシージャを削除", + "connection.backend.action.rename_view": "ビュー名を変更", + "connection.backend.action.import_data": "データをインポート", + "connection.backend.action.apply_result_changes": "結果セットの変更を適用", + "connection.backend.action.preview_result_changes": "結果セットの変更をプレビュー", + "connection.backend.action.clear_table": "テーブルデータを削除", + "connection.backend.action.truncate_table": "テーブルを TRUNCATE", + "connection.backend.action.data_sync_write": "同期データを書き込む", + "connection_modal.field.readOnly.label": "本番接続ガード", + "connection_modal.field.readOnly.help": "有効にすると、この接続では問い合わせのみ許可されます。インポート、スキーマ変更、データ書き込み、同期先としての利用は拒否されます。", + "connection_modal.field.readOnly.checkbox": "この接続を本番接続として扱い、問い合わせのみ許可する", + "query_editor.message.connection_readonly_blocked": "この接続では本番保護が有効なため、問い合わせ操作のみ実行できます。", + "query_editor.results_panel.message.action.copy": "コピー", + "query_editor.results_panel.message.copy_unsupported": "現在の環境ではクリップボードへコピーできません", + "query_editor.results_panel.message.copy_failed": "メッセージのコピーに失敗しました: {{detail}}" } diff --git a/shared/i18n/ru-RU.json b/shared/i18n/ru-RU.json index b5af115..5a0ebb4 100644 --- a/shared/i18n/ru-RU.json +++ b/shared/i18n/ru-RU.json @@ -1,4863 +1,4 @@ { - "common.cancel": "Отмена", - "redis.db_alias.menu.set": "Задать псевдоним", - "redis.db_alias.modal.title": "Псевдоним для {{db}}", - "redis.db_alias.modal.placeholder": "напр. cache, sessions (оставьте пустым для сброса)", - "common.back_to_previous": "Назад", - "common.close": "Закрыть", - "common.confirm": "Подтвердить", - "common.continue": "Продолжить", - "common.delete": "Удалить", - "common.edit": "Изменить", - "common.error": "Ошибка", - "common.loading": "Загрузка", - "common.named_item": "{{name}}", - "common.ok": "OK", - "common.refresh": "Обновить", - "common.save": "Сохранить", - "common.search": "Поиск", - "common.success": "Успешно", - "common.unknown": "Неизвестно", - "common.warning": "Предупреждение", - "connection.sidebar.group.untitled": "Группа без имени", - "connection.sidebar.group.meta": "{{count}} подключений · Группа подключений", - "connection.sidebar.group.badge": "Группа", - "connection.sidebar.group.edit": "Изменить группу", - "connection.sidebar.group.delete": "Удалить группу", - "connection.sidebar.group.deleteConfirmTitle": "Подтвердить удаление", - "connection.sidebar.group.deleteConfirmContent": "Удалить группу \"{{name}}\"? Подключения внутри останутся.", - "connection.sidebar.group.expandAria": "Развернуть группу подключений {{name}}", - "connection.sidebar.group.collapseAria": "Свернуть группу подключений {{name}}", - "connection.sidebar.menu.section": "Подключение", - "connection.sidebar.menu.groupSection": "Группы подключений", - "connection.sidebar.menu.copy": "Копировать подключение", - "connection.sidebar.menu.disconnect": "Отключить", - "connection.sidebar.menu.delete": "Удалить подключение", - "connection.sidebar.menu.hostFallback": "Адрес не указан", - "connection.sidebar.menu.hostBadge": "HOST", - "connection.sidebar.menu.moveToTag": "Переместить в тег", - "connection.sidebar.menu.moveOutTag": "Убрать из тега", - "connection.sidebar.menu.moveToUngrouped": "Убрать из группы", - "connection.sidebar.menu.createDatabase": "Новая база данных", - "connection.sidebar.menu.refresh": "Обновить подключение", - "connection.sidebar.menu.current": "Текущий", - "connection.sidebar.duplicate.backendUnavailable": "Не удалось скопировать подключение: интерфейс бэкенда недоступен", - "connection.sidebar.duplicate.noResult": "Не удалось скопировать подключение: бэкенд не вернул результат", - "connection.sidebar.duplicate.success": "Подключение скопировано: {{name}}", - "connection.sidebar.duplicate.failureFallback": "Не удалось скопировать подключение", - "connection.sidebar.disconnect.success": "Подключение отключено", - "connection.sidebar.delete.confirmTitle": "Подтвердить удаление", - "connection.sidebar.delete.confirmContent": "Удалить подключение \"{{name}}\"?", - "connection.sidebar.delete.backendUnavailable": "Не удалось удалить подключение: интерфейс бэкенда недоступен", - "connection.sidebar.delete.success": "Подключение удалено", - "connection.sidebar.delete.failureFallback": "Не удалось удалить подключение", - "find_in_database.title": "Поиск в базе данных - {{dbName}}", - "find_in_database.placeholder.keyword": "Введите строку для поиска...", - "find_in_database.match.contains": "Содержит", - "find_in_database.match.exact": "Точное совпадение", - "find_in_database.message.keyword_required": "Введите ключевое слово для поиска", - "find_in_database.message.connection_config_not_found": "Конфигурация подключения не найдена", - "find_in_database.message.get_tables_failed": "Не удалось получить список таблиц: {{detail}}", - "find_in_database.message.no_tables": "В текущей базе данных нет таблиц", - "find_in_database.message.no_matches": "Совпадающие данные не найдены", - "find_in_database.message.search_failed": "Ошибка поиска: {{detail}}", - "find_in_database.column.table_name": "Таблица", - "find_in_database.column.matched_columns": "Совпавшие столбцы", - "find_in_database.column.match_count": "Строк с совпадениями", - "find_in_database.column.action": "Действия", - "find_in_database.tooltip.collapse_details": "Свернуть подробности", - "find_in_database.tooltip.view_details": "Показать подробности", - "find_in_database.progress.searching_table": "Поиск в {{table}}... ({{current}}/{{total}})", - "find_in_database.summary.found_tables": "Найдено таблиц с совпадающими данными: {{count}}", - "find_in_database.summary.searching": " (поиск продолжается...)", - "find_in_database.detail.title": "{{table}} - подробности строк с совпадениями", - "find_in_database.detail.row_count": "{{count}} строк", - "import_preview.title": "Предпросмотр импорта данных", - "import_preview.action.start": "Начать импорт", - "import_preview.status.loading_preview": "Загрузка данных предпросмотра...", - "import_preview.status.importing": "Импорт данных...", - "import_preview.progress.processed_rows": "Обработано {{current}} / {{total}} строк", - "import_preview.progress.success_count": "Успешно {{count}}", - "import_preview.progress.error_count": "Ошибок {{count}}", - "import_preview.preview.summary": "{{rows}} строк и {{columns}} полей", - "import_preview.preview.description": "Ниже показаны первые 5 строк. Начните импорт после проверки данных.", - "import_preview.preview.field_list": "Список полей:", - "import_preview.preview.table_title": "Предпросмотр данных (первые 5 строк):", - "import_preview.error.preview_failed": "Не удалось выполнить предпросмотр", - "import_preview.error.preview_failed_detail": "Не удалось выполнить предпросмотр: {{detail}}", - "import_preview.error.connection_config_not_found": "Конфигурация подключения не найдена", - "import_preview.error.import_failed": "Не удалось выполнить импорт", - "import_preview.error.import_failed_detail": "Не удалось выполнить импорт: {{detail}}", - "import_preview.result.completed": "Импорт завершен", - "import_preview.result.success_rows": "Успешно импортировано строк: {{count}}", - "import_preview.result.failed_rows": "Строк с ошибками: {{count}}", - "import_preview.result.error_logs": "Журнал ошибок:", - "log_panel.title": "Журнал выполнения SQL", - "log_panel.short_title": "Логи", - "log_panel.description": "Фиксирует статус выполнения, длительность и ошибки для быстрого анализа.", - "log_panel.action.clear": "Очистить журнал", - "log_panel.action.close": "Закрыть панель", - "log_panel.empty": "Нет журналов выполнения SQL", - "log_panel.column.time": "Время", - "log_panel.column.status": "Статус", - "log_panel.column.duration": "Длительность", - "log_panel.column.sql_message": "SQL / сообщение", - "log_panel.affected_rows": "Затронуто строк: {{count}}", - "table_overview.status.loading_tables": "Загрузка сведений о таблицах...", - "table_overview.message.load_tables_failed": "Не удалось загрузить сведения о таблицах: {{detail}}", - "table_overview.message.pinned": "Таблица закреплена", - "table_overview.message.unpinned": "Закрепление таблицы снято", - "table_overview.message.copy_structure_success": "Структура таблицы скопирована в буфер обмена", - "table_overview.message.copy_structure_failed": "Не удалось скопировать структуру таблицы: {{detail}}", - "table_overview.message.exporting_table_format": "Экспорт {{table}} в формате {{format}}...", - "table_overview.message.export_success": "Экспорт выполнен", - "table_overview.message.export_failed": "Ошибка экспорта: {{detail}}", - "table_overview.message.delete_table_success": "Таблица удалена", - "table_overview.message.delete_table_failed": "Не удалось удалить таблицу: {{detail}}", - "table_overview.table_data_action.truncate.label": "Усечь таблицу", - "table_overview.table_data_action.clear.label": "Очистить таблицу", - "table_overview.modal.table_data_action.title": "Подтвердите {{action}}", - "table_overview.modal.table_data_action.content": "{{action}} безвозвратно удалит все данные в таблице \"{{table}}\". Это действие нельзя отменить. Продолжить?", - "table_overview.message.table_data_action_loading": "Выполняется {{action}} для {{table}}...", - "table_overview.message.table_data_action_success": "{{action}} выполнено", - "table_overview.message.table_data_action_failed": "{{action}} завершилось ошибкой: {{detail}}", - "table_overview.message.rename_table_success": "Таблица переименована", - "table_overview.message.rename_table_failed": "Не удалось переименовать таблицу: {{detail}}", - "table_overview.message.unknown_error": "Неизвестная ошибка", - "table_overview.modal.delete_table.title": "Удалить таблицу", - "table_overview.modal.delete_table.content": "Удалить таблицу \"{{table}}\"? Это действие нельзя отменить.", - "table_overview.modal.rename_table.title": "Переименовать таблицу", - "table_overview.modal.rename_table.placeholder": "Введите новое имя таблицы", - "table_overview.validation.table_name_required": "Имя таблицы обязательно", - "table_overview.validation.table_name_unchanged": "Новое имя таблицы совпадает с текущим", - "table_overview.toolbar.summary": "{{count}} табл. · {{rows}} строк · {{size}}", - "table_overview.placeholder.search": "Поиск по именам таблиц или комментариям...", - "table_overview.tooltip.sort": "Сортировка", - "table_overview.tooltip.card_view": "Карточки", - "table_overview.tooltip.list_view": "Список", - "table_overview.tooltip.refresh": "Обновить", - "table_overview.sort.name": "Имя", - "table_overview.sort.rows": "Строки", - "table_overview.sort.size": "Размер", - "table_overview.metric.data_size": "Размер данных", - "table_overview.metric.index_size": "Размер индекса", - "table_overview.metric.relative_size": "Относительный размер", - "table_overview.metric.engine": "Движок", - "table_overview.section.all": "Все", - "table_overview.section.pinned": "Закрепленные", - "table_overview.row.engine_table": "Таблица {{engine}}", - "table_overview.row.open_hint": "Дважды щелкните, чтобы открыть данные; щелкните правой кнопкой для дополнительных действий", - "table_overview.status.updating_filter": "Обновление результатов фильтра...", - "table_overview.status.matching_rendered": "Найдено таблиц: {{matched}}, отображается: {{rendered}}", - "table_overview.status.hidden_count_hint": "Еще не отображено: {{count}}. Загрузите больше или сузьте поиск.", - "table_overview.empty.no_matches": "Совпадений нет", - "table_overview.empty.no_tables": "Таблиц нет", - "table_overview.action.show_more": "Показать еще таблицы (осталось {{count}})", - "table_overview.menu.new_query": "Новый запрос", - "table_overview.menu.design_table": "Конструктор таблицы", - "table_overview.menu.copy_structure": "Копировать структуру таблицы", - "table_overview.menu.backup_table_sql": "Резервная копия таблицы (SQL)", - "table_overview.menu.rename_table": "Переименовать таблицу", - "table_overview.menu.danger_operations": "Опасные операции", - "table_overview.menu.truncate_table": "Усечь таблицу", - "table_overview.menu.clear_table": "Очистить таблицу", - "table_overview.menu.delete_table": "Удалить таблицу", - "table_overview.menu.export_table_data": "Экспорт данных таблицы", - "table_overview.menu.export_csv": "Экспорт CSV", - "table_overview.menu.export_xlsx": "Экспорт XLSX", - "table_overview.menu.export_json": "Экспорт JSON", - "table_overview.menu.export_markdown": "Экспорт Markdown", - "table_overview.menu.export_html": "Экспорт HTML", - "settings.language.description": "Выберите язык интерфейса GoNavi.", - "settings.language.english": "English", - "settings.language.follow_system": "Как в системе", - "settings.language.german": "Deutsch", - "settings.language.japanese": "日本語", - "settings.language.restart_hint": "Для полного применения в некоторых редакторах и системных меню может потребоваться заново открыть окно.", - "settings.language.russian": "Русский", - "settings.language.simplified_chinese": "简体中文", - "settings.language.title": "Язык", - "settings.language.traditional_chinese": "繁體中文", - "settings.title": "Настройки", - "app.about.action.check_updates": "Проверить обновления", - "app.about.action.download_progress": "Ход загрузки", - "app.about.action.download_update": "Скачать обновление", - "app.about.action.mute_this_version": "Не напоминать в этот раз", - "app.about.community.ai_book": "AI全书", - "app.about.description": "Просмотр версии, ссылок на репозиторий, статуса обновлений и загрузок.", - "app.about.field.author": "Автор", - "app.about.field.community": "Сообщество", - "app.about.field.update_status": "Статус обновления", - "app.about.field.version": "Версия", - "app.about.message.load_failed": "Не удалось получить информацию о приложении: {{error}}", - "app.about.project_links": "Ссылки проекта", - "app.about.title": "О GoNavi", - "app.ai_panel.action.close": "Закрыть панель", - "app.ai_panel.action.reload": "Перезагрузить", - "app.ai_panel.aria.close": "Закрыть AI-панель", - "app.ai_panel.error.description": "Обычно это происходит из-за того, что после hot reload в режиме разработки перестают работать лениво загружаемые ресурсы. Полный белый экран уже предотвращен, можно сразу повторить попытку.", - "app.ai_panel.error.title": "Не удалось загрузить AI-панель", - "app.data_root.action.migrate_and_switch": "Перенести существующие данные и переключиться", - "app.data_root.action.open_current": "Открыть текущий каталог", - "app.data_root.action.restore_default_directory": "Восстановить каталог по умолчанию", - "app.data_root.action.select": "Выбрать каталог", - "app.data_root.action.switch_only": "Только переключиться на выбранный каталог", - "app.data_root.apply_method": "Способ применения", - "app.data_root.current_directory": "Текущий каталог", - "app.data_root.default_directory": "Каталог по умолчанию", - "app.data_root.description": "Единое управление корневым каталогом файловых данных, таких как подключения, прокси, настройки AI и драйверы.", - "app.data_root.driver_directory": "Каталог драйверов", - "app.data_root.backend.dialog.select_directory": "Выбрать каталог данных GoNavi", - "app.data_root.backend.error.create_target_failed": "Не удалось создать целевой каталог данных: {{detail}}", - "app.data_root.backend.error.create_bootstrap_directory_failed": "Не удалось создать каталог начальной загрузки по умолчанию: {{detail}}", - "app.data_root.backend.error.create_data_directory_failed": "Не удалось создать каталог данных: {{detail}}", - "app.data_root.backend.error.directory_empty": "Каталог данных не может быть пустым", - "app.data_root.backend.error.directory_unavailable": "Каталог данных не существует или недоступен", - "app.data_root.backend.error.migrate_directory_failed": "Не удалось перенести каталог ({{entry}}): {{detail}}", - "app.data_root.backend.error.migrate_file_failed": "Не удалось перенести файл ({{entry}}): {{detail}}", - "app.data_root.backend.error.open_directory_failed": "Не удалось открыть каталог данных: {{detail}}", - "app.data_root.backend.error.open_directory_unsupported": "Открытие каталогов не поддерживается на этой платформе: {{platform}}", - "app.data_root.backend.error.read_source_failed": "Не удалось прочитать исходные данные ({{entry}}): {{detail}}", - "app.data_root.backend.message.migrated_restart": "Данные перенесены, выполнено переключение на новый каталог. Перезапустите приложение, чтобы завершить переключение всех модулей.", - "app.data_root.backend.message.opened": "Каталог данных открыт", - "app.data_root.backend.message.unchanged": "Каталог данных не изменился", - "app.data_root.backend.message.updated_restart": "Каталог данных обновлен. Перезапустите приложение, чтобы AI и другие работающие модули полностью переключились на новый каталог.", - "app.data_root.message.apply_failed": "Не удалось применить каталог данных", - "app.data_root.message.apply_failed_with_error": "Не удалось применить каталог данных: {{error}}", - "app.data_root.message.load_failed": "Не удалось загрузить сведения о каталоге данных", - "app.data_root.message.load_failed_with_error": "Не удалось загрузить сведения о каталоге данных: {{error}}", - "app.data_root.message.open_failed": "Не удалось открыть каталог данных", - "app.data_root.message.open_failed_with_error": "Не удалось открыть каталог данных: {{error}}", - "app.data_root.message.select_failed": "Не удалось выбрать каталог данных", - "app.data_root.message.select_failed_with_error": "Не удалось выбрать каталог данных: {{error}}", - "app.data_root.message.select_valid_first": "Сначала выберите допустимый каталог данных", - "app.data_root.message.updated": "Каталог данных обновлен", - "app.data_root.placeholder.select_new_directory": "Выберите новый каталог данных", - "app.data_root.restart_hint": "После переключения рекомендуется перезапустить приложение, чтобы AI и другие долгоживущие модули полностью перешли в новый каталог. Конфиденциальные пароли остаются в системном secret store и не переносятся вместе с файловыми каталогами.", - "app.data_root.switch_target": "Цель переключения", - "app.data_root.title": "Место хранения данных", - "app.proxy.description": "Единая настройка проверки обновлений, управления драйверами и сетевого выхода для подключений без отдельного прокси.", - "app.proxy.enable": "Включить глобальный прокси", - "app.proxy.host": "Хост прокси", - "app.proxy.host_placeholder": "Пример: 127.0.0.1", - "app.proxy.message.invalid_enabled": "Глобальный прокси включен, но хост или порт недействительны. Сейчас он считается отключенным.", - "app.proxy.message.save_failed": "Не удалось настроить глобальный прокси: {{error}}", - "app.proxy.password_optional": "Пароль (необязательно)", - "app.proxy.port": "Порт", - "app.proxy.scope_hint": "* Применяется к проверке обновлений, сетевым запросам управления драйверами и подключениям к базе данных без отдельного прокси", - "app.proxy.section_title": "Глобальный прокси", - "app.proxy.title": "Настройки глобального прокси", - "app.proxy.type": "Тип прокси", - "app.proxy.username_optional": "Имя пользователя (необязательно)", - "proxy.backend.error.unsupported_type": "Неподдерживаемый тип прокси: {{type}}", - "proxy.backend.error.host_empty": "Хост прокси пуст", - "proxy.backend.error.port_invalid": "Недопустимый порт прокси: {{port}}", - "proxy.backend.error.remote_addr_invalid": "Недопустимый удалённый адрес: {{address}}", - "proxy.backend.error.listen_failed": "Не удалось создать локальный слушатель прокси: {{detail}}", - "proxy.backend.error.socks5_dialer_failed": "Не удалось создать dialer для SOCKS5-прокси: {{detail}}", - "proxy.backend.error.socks5_connect_failed": "Не удалось подключиться через SOCKS5-прокси: {{detail}}", - "proxy.backend.error.http_connect_failed": "Не удалось подключиться к HTTP-прокси: {{detail}}", - "proxy.backend.error.http_connect_write_failed": "Не удалось отправить запрос HTTP CONNECT: {{detail}}", - "proxy.backend.error.http_connect_read_failed": "Не удалось прочитать ответ HTTP CONNECT: {{detail}}", - "proxy.backend.error.http_connect_status_failed": "HTTP-прокси CONNECT завершился ошибкой: {{status}}", - "app.startup_readiness.loading_local_config": "Загрузка локальной конфигурации...", - "app.startup_readiness.loading_security_config": "Загрузка конфигурации безопасности...", - "app.security_update.error.capability_unavailable": "Функция безопасного обновления недоступна", - "app.security_update.message.completed": "Безопасное обновление сохраненных конфигураций завершено", - "app.security_update.message.needs_attention": "Обновление еще не завершено. Несколько конфигураций требуют внимания.", - "app.security_update.message.not_finished_retry_later": "Безопасное обновление не завершено. Повторите попытку позже.", - "app.security_update.message.postpone_failed": "Сейчас не удалось отложить это безопасное обновление", - "app.security_update.message.rolled_back": "Это обновление не завершено. Система сохранила текущую рабочую конфигурацию.", - "app.security_update.stage.checking_saved_config": "Проверка сохраненных конфигураций", - "app.security_update.stage.updating_secure_storage": "Обновление безопасного хранилища", - "app.security_update.stage.verifying_result": "Проверка результата обновления", - "security_update.banner.title": "Сохраненные конфигурации можно безопасно обновить", - "security_update.banner.action.start_now": "Обновить сейчас", - "security_update.banner.action.view_details": "Показать сведения", - "security_update.banner.action.restart_update": "Запустить обновление заново", - "security_update.banner.action.retry_check": "Проверить снова", - "security_update.backend.issue.ai_provider.migration_required": "Конфигурация AI-провайдера все еще сохранена в текущей конфигурации приложения. После завершения безопасного обновления она будет перенесена в новое безопасное хранилище.", - "security_update.backend.issue.ai_provider.missing_or_resave": "Конфигурация AI-провайдера больше не существует или ее нужно сохранить заново перед завершением безопасного обновления.", - "security_update.backend.issue.ai_provider.secret_missing": "Для конфигурации AI-провайдера нужно добавить данные перед завершением безопасного обновления.", - "security_update.backend.issue.connection.incomplete": "Для конфигурации подключения нужно добавить данные перед завершением безопасного обновления.", - "security_update.backend.issue.connection.missing_or_resave": "Конфигурация подключения больше не существует или ее нужно сохранить заново перед завершением безопасного обновления.", - "security_update.backend.issue.connection.password_missing": "Пароль подключения потерян. Сохраните его заново перед продолжением.", - "security_update.backend.issue.global_proxy.missing_or_resave": "Настройки глобального прокси больше не существуют или их нужно сохранить заново перед завершением безопасного обновления.", - "security_update.backend.issue.global_proxy.password_incomplete": "Для пароля глобального прокси нужно добавить данные перед завершением безопасного обновления.", - "security_update.backend.issue.global_proxy.password_missing": "Пароль глобального прокси потерян. Сохраните его заново перед продолжением.", - "security_update.backend.issue.global_proxy.title": "Глобальный прокси", - "security_update.backend.issue.system.message": "Текущая среда не смогла завершить это безопасное обновление. Повторите попытку позже.", - "security_update.backend.issue.system.title": "Безопасное обновление не завершено", - "security_update.intro.title": "Безопасное обновление сохраненных конфигураций", - "security_update.intro.subtitle": "Перед использованием нового безопасного хранилища нужно выполнить локальное обновление конфигурации.", - "security_update.intro.description": "Чтобы сохраненные подключения, прокси и связанные настройки служб использовали новое безопасное хранилище, это обновление нужно один раз выполнить локально. Перед обновлением автоматически создается локальная резервная копия. Если обновление не завершится, система сохранит текущую рабочую конфигурацию, а вы сможете продолжить позже.", - "security_update.intro.action.details": "Показать сведения", - "security_update.intro.action.later": "Напомнить позже", - "security_update.intro.action.start_now": "Обновить сейчас", - "security_update.progress.default_detail": "Текущая рабочая конфигурация будет сохранена во время обновления. Подождите.", - "security_update.settings.title": "Безопасное обновление", - "security_update.settings.subtitle": "Управление статусом безопасного обновления и ожидающими пунктами сохраненных конфигураций.", - "security_update.settings.action.retry_check": "Проверить снова", - "security_update.settings.action.restart_update": "Запустить обновление заново", - "security_update.settings.action.start": "Начать обновление", - "security_update.settings.action.close": "Закрыть", - "security_update.settings.current_status": "Текущий статус: {{status}}", - "security_update.settings.scope_title": "Область влияния", - "security_update.settings.summary.total": "Всего", - "security_update.settings.summary.updated": "Обновлено", - "security_update.settings.summary.pending": "Ожидает обработки", - "security_update.settings.summary.skipped": "Пропущено", - "security_update.settings.summary.failed": "Ошибки", - "security_update.settings.pending_list": "Ожидающие пункты", - "security_update.settings.empty_pending": "Ожидающих пунктов нет", - "security_update.settings.item_status": "Статус: {{status}}", - "security_update.settings.item_severity": "Уровень: {{severity}}", - "security_update.settings.item_default_message": "Этот пункт требует дополнительной обработки перед завершением безопасного обновления.", - "security_update.settings.recent_result": "Последний результат", - "security_update.settings.backup_path": "Расположение резервной копии: ", - "security_update.settings.last_error": "Последняя ошибка: ", - "security_update.status.pending.label": "Ожидает обновления", - "security_update.status.pending.description": "Доступно безопасное обновление. Можно начать сейчас или продолжить позже.", - "security_update.status.postponed.label": "Ожидает обновления", - "security_update.status.postponed.description": "Это безопасное обновление отложено. Текущая рабочая конфигурация сохранена.", - "security_update.status.in_progress.label": "Обновляется", - "security_update.status.in_progress.description": "Проверяется и обновляется безопасное хранилище сохраненных конфигураций.", - "security_update.status.needs_attention.label": "Требует внимания", - "security_update.status.needs_attention.description": "Обновление еще не завершено. Несколько конфигураций требуют внимания.", - "security_update.status.completed.label": "Завершено", - "security_update.status.completed.description": "Безопасное обновление сохраненных конфигураций завершено.", - "security_update.status.rolled_back.label": "Откат выполнен", - "security_update.status.rolled_back.description": "Это обновление не завершено. Система сохранила текущую рабочую конфигурацию.", - "security_update.status.not_detected.label": "Не обнаружено", - "security_update.status.not_detected.description": "Сейчас нет безопасных обновлений, требующих внимания.", - "security_update.action.open_connection": "Открыть подключение", - "security_update.action.open_proxy_settings": "Настройки прокси", - "security_update.action.open_ai_settings": "Настройки AI", - "security_update.action.retry_update": "Проверить снова", - "security_update.action.view_details": "Показать сведения", - "security_update.item_status.pending": "Ожидает обновления", - "security_update.item_status.updated": "Обновлено", - "security_update.item_status.needs_attention": "Требует внимания", - "security_update.item_status.skipped": "Пропущено", - "security_update.item_status.failed": "Ошибка", - "security_update.severity.high": "Высокий риск", - "security_update.severity.medium": "Средний риск", - "security_update.severity.low": "Низкий риск", - "security_update.repair.warning.connection_not_found": "Соответствующее подключение не найдено. Сначала проверьте актуальный статус.", - "security_update.bootstrap.legacy.connection.message": "Это подключение все еще сохранено в локальной конфигурации текущего приложения. После завершения безопасного обновления оно будет перенесено в новое безопасное хранилище.", - "security_update.bootstrap.legacy.global_proxy.title": "Глобальный прокси", - "security_update.bootstrap.legacy.global_proxy.message": "Глобальные настройки прокси все еще сохранены в локальной конфигурации текущего приложения. После завершения безопасного обновления они будут перенесены в новое безопасное хранилище.", - "security_update.error.capability_unavailable": "Функция безопасного обновления недоступна", - "app.settings.description": "Управление общими настройками: язык, прокси, тема, AI и сведения о приложении.", - "app.settings.entry.about.description": "Просмотр версии, ссылок на репозиторий и статуса обновлений.", - "app.settings.entry.about.title": "О GoNavi", - "app.settings.entry.ai.description": "Управление поставщиками моделей, ключами и поведением по умолчанию.", - "app.settings.entry.ai.title": "Настройки AI", - "app.settings.entry.proxy.description": "Настройка проверки обновлений, управления драйверами и общего сетевого доступа.", - "app.settings.entry.proxy.title": "Глобальный прокси", - "app.settings.entry.theme.description": "Переключение светлой или темной темы и настройка внешнего вида интерфейса.", - "app.settings.entry.theme.title": "Тема и внешний вид", - "app.settings.title": "Центр настроек", - "app.shortcuts.action.focusSidebarSearch.description": "Перейти к полю поиска в левом дереве подключений", - "app.shortcuts.action.focusSidebarSearch.label": "Фокус на поиске боковой панели", - "app.shortcuts.action.newConnection.description": "Создать новое подключение к базе данных, runtime или другому источнику данных", - "app.shortcuts.action.newConnection.label": "Новый источник данных", - "app.shortcuts.action.newQueryTab.description": "Создать новую вкладку SQL-запроса", - "app.shortcuts.action.newQueryTab.label": "Новая вкладка запроса", - "app.shortcuts.action.openShortcutManager.description": "Открыть панель настройки горячих клавиш", - "app.shortcuts.action.openShortcutManager.label": "Открыть управление горячими клавишами", - "app.shortcuts.action.record": "Записать", - "app.shortcuts.action.resetWindowZoom.description": "Запустить вручную, если после восстановления из панели задач Windows шрифт стал аномально крупным; один раз переключает максимизацию, чтобы WebView2 пересчитал метрики шрифта", - "app.shortcuts.action.resetWindowZoom.label": "Сбросить масштаб окна", - "app.shortcuts.action.restore_defaults": "Восстановить значения по умолчанию", - "app.shortcuts.action.runQuery.description": "Выполнить SQL на текущей странице запроса", - "app.shortcuts.action.runQuery.label": "Выполнить SQL", - "app.shortcuts.action.saveQuery.description": "Сохранить текущую вкладку запроса; для безымянных запросов откроется окно сохранения", - "app.shortcuts.action.saveQuery.label": "Сохранить запрос", - "app.shortcuts.action.selectCurrentStatement.description": "Выбрать SQL-оператор под курсором в редакторе запросов", - "app.shortcuts.action.selectCurrentStatement.label": "Выбрать текущий оператор", - "app.shortcuts.action.sendAIChatMessage.description": "Отправить текущее сообщение из поля ввода AI; Shift+Enter всегда вставляет новую строку", - "app.shortcuts.action.sendAIChatMessage.label": "Отправить AI-чат", - "app.shortcuts.action.switchToNextTab.description": "Переключиться вправо среди открытых вкладок", - "app.shortcuts.action.switchToNextTab.label": "Следующая вкладка", - "app.shortcuts.action.switchToPreviousTab.description": "Переключиться влево среди открытых вкладок", - "app.shortcuts.action.switchToPreviousTab.label": "Предыдущая вкладка", - "app.shortcuts.action.toggleAIPanel.description": "Открыть правую панель аналитики данных AI", - "app.shortcuts.action.toggleAIPanel.label": "Открыть аналитику данных AI", - "app.shortcuts.action.toggleLogPanel.description": "Открыть или закрыть панель журнала выполнения SQL", - "app.shortcuts.action.toggleLogPanel.label": "Переключить панель журнала", - "app.shortcuts.action.toggleMacFullscreen.description": "Переключение нативного полноэкранного режима в режиме нативных элементов окна macOS", - "app.shortcuts.action.toggleMacFullscreen.label": "Переключить нативный полноэкранный режим", - "app.shortcuts.action.toggleTheme.description": "Переключение между светлой и темной темами", - "app.shortcuts.action.toggleTheme.label": "Переключить тему", - "app.shortcuts.action.diagnoseQuery.description": "Выполнить EXPLAIN для текущего SQL и показать план выполнения с предложениями индексов", - "app.shortcuts.action.diagnoseQuery.label": "SQL-диагностика", - "app.shortcuts.action.showSlowQueries.description": "Просмотр истории медленных SQL-запросов для текущего подключения (порог по умолчанию 500мс)", - "app.shortcuts.action.showSlowQueries.label": "История медленных SQL", - "app.shortcuts.capture_hint": "Нажмите сочетание клавиш после нажатия \"Записать\". Нажмите Esc, чтобы отменить запись. Для глобальных горячих клавиш рекомендуется модификатор; отправка AI-чата поддерживает только комбинации с Enter, а Shift+Enter сохраняет перенос строки.", - "app.shortcuts.capture_waiting": "Нажмите сочетание клавиш...", - "app.shortcuts.context.datagrid": "Таблица данных", - "app.shortcuts.context.global": "Браузер", - "app.shortcuts.context.monaco": "Редактор", - "app.shortcuts.description": "Просматривайте, записывайте и включайте распространенные глобальные горячие клавиши в одном месте.", - "app.shortcuts.message.ai_send_limit": "Горячая клавиша отправки AI-чата поддерживает только Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter; Shift+Enter сохраняет перенос строки", - "app.shortcuts.message.conflict": "Конфликт с \"{{action}}\". Выберите другое сочетание клавиш.", - "app.shortcuts.message.modifier_required": "Сочетание клавиш должно содержать хотя бы одну из клавиш Ctrl / Alt / Shift / Meta", - "app.shortcuts.message.reserved_conflict_info": "Переопределяет стандартную горячую клавишу редактора \"{{labels}}\"", - "app.shortcuts.message.reserved_conflict_warning": "Конфликт с {{contexts}} \"{{labels}}\"; может не работать", - "app.shortcuts.message.restored_defaults": "Горячие клавиши по умолчанию восстановлены", - "app.shortcuts.reserved.browser_close_tab": "Браузер закрыть вкладку", - "app.shortcuts.reserved.browser_new_incognito_window": "Браузер новое инкогнито-окно", - "app.shortcuts.reserved.browser_new_tab": "Браузер новая вкладка", - "app.shortcuts.reserved.browser_new_window": "Браузер новое окно", - "app.shortcuts.reserved.browser_print": "Браузер печать", - "app.shortcuts.reserved.browser_save": "Браузер сохранить", - "app.shortcuts.reserved.datagrid_copy": "Копировать таблицу данных", - "app.shortcuts.reserved.editor_add_selection": "Редактор добавить выделение", - "app.shortcuts.reserved.editor_delete_line": "Редактор удалить строку", - "app.shortcuts.reserved.editor_find": "Редактор поиск", - "app.shortcuts.reserved.editor_find_global": "Редактор глобальный поиск", - "app.shortcuts.reserved.editor_goto_line": "Редактор перейти к строке", - "app.shortcuts.reserved.editor_insert_line_after": "Редактор вставить строку ниже", - "app.shortcuts.reserved.editor_insert_line_before": "Редактор вставить строку выше", - "app.shortcuts.reserved.editor_quick_open": "Редактор быстрое открытие", - "app.shortcuts.reserved.editor_rename_symbol": "Редактор переименовать символ", - "app.shortcuts.reserved.editor_replace": "Редактор замена", - "app.shortcuts.title": "Управление горячими клавишами", - "app.sidebar.ai_assistant": "AI-ассистент", - "app.sidebar.resize_width": "Перетащите, чтобы изменить ширину", - "app.sidebar.settings": "Настройки", - "app.sidebar.sql_execution_log": "Журнал выполнения SQL", - "app.sidebar.tools": "Инструменты", - "app.tools.entry.snippets.description": "Управление SQL-сниппетами и автодополнением по префиксу.", - "app.tools.entry.snippets.title": "Управление сниппетами", - "app.theme.action.restore_defaults": "Восстановить значения по умолчанию", - "app.theme.appearance.blur_hint": "* Управляет размытием только внутренних оверлейных слоев приложения", - "app.theme.appearance.blur_title": "Гауссово размытие (Blur)", - "app.theme.appearance.enable_transparency_blur": "Включить прозрачность и размытие", - "app.theme.appearance.enable_transparency_blur_hint": "При отключении текущие пороги сохраняются и будут восстановлены при повторном включении.", - "app.theme.appearance.font_size_title": "Базовый размер шрифта (Font Size)", - "app.theme.appearance.opacity_title": "Непрозрачность фона (Opacity)", - "app.theme.appearance.transparency_blur_title": "Эффекты прозрачности и размытия", - "app.theme.appearance.ui_scale_hint": "* Для небольших экранов рекомендуется 85%-95%", - "app.theme.appearance.ui_scale_title": "Масштаб UI (UI Scale)", - "app.theme.appearance.windows_acrylic_hint": "Windows использует системный эффект Acrylic. Сила размытия управляется системой.", - "app.theme.appearance_settings_description": "Единая настройка масштаба, размера шрифта, прозрачности и размытия.", - "app.theme.appearance_settings_title": "Настройки внешнего вида", - "app.theme.data_table.column_width_hint": "В стандартном режиме ширина столбца по умолчанию 200px; в компактном режиме 140px. Вручную измененные ширины столбцов сохраняются в приоритете.", - "app.theme.data_table.column_width_mode": "Режим ширины столбцов таблицы данных", - "app.theme.data_table.column_width_mode.compact": "Компактный 140px", - "app.theme.data_table.column_width_mode.standard": "Стандартный 200px", - "app.theme.data_table.title": "Отображение таблицы данных", - "app.theme.data_table.vertical_borders": "Показывать вертикальные разделители таблицы данных", - "app.theme.data_table.vertical_borders_hint": "Влияет только на DataGrid на страницах таблиц данных и не затрагивает другие табличные компоненты.", - "app.theme.mac_window.restart_hint": "* Пользовательские кнопки справа вверху скрыты. Если системный стиль окна не обновился сразу, перезапустите приложение.", - "app.theme.mac_window.title": "Управление окном macOS", - "app.theme.mac_window.use_native_controls": "Использовать нативные элементы управления окном macOS", - "app.theme.mac_window.use_native_controls_hint": "Показывает красную, желтую и зеленую кнопки слева вверху и отдает приоритет нативному полноэкранному поведению macOS.", - "app.theme.mode.dark.description": "Подходит для слабого освещения и более спокойного визуального восприятия.", - "app.theme.mode.dark.label": "Темная тема", - "app.theme.mode.light.description": "Подходит для яркой среды и более легкой визуальной иерархии.", - "app.theme.mode.light.label": "Светлая тема", - "app.theme.mode_title": "Режим темы", - "app.theme.nav.appearance.description": "Масштаб, шрифт и прозрачность", - "app.theme.nav.appearance.title": "Параметры внешнего вида", - "app.theme.nav.theme.description": "Переключение светлой и темной темы", - "app.theme.nav.theme.title": "Режим темы", - "app.theme.navigation_title": "Навигация по настройкам", - "app.theme.startup_window.fullscreen": "Полный экран при запуске", - "app.theme.startup_window.fullscreen_windows": "Полный экран при запуске (Windows обрабатывает это как максимизацию)", - "app.theme.startup_window.hint": "* Вступает в силу при следующем запуске", - "app.theme.startup_window.title": "Окно запуска", - "app.theme.startup_window.windows_hint": "* В Windows этот параметр обрабатывается как \"максимизировать при запуске\" и вступает в силу при следующем запуске", - "app.theme.theme_settings_description": "Переключение светлой и темной тем с сохранением единого визуального стиля.", - "app.theme.theme_settings_title": "Настройки темы", - "app.theme.ui_version.badge.new": "NEW", - "app.theme.ui_version.beta_warning": "Новый UI все еще находится в Beta, поэтому некоторые экраны могут отличаться от старого UI. При необходимости можно переключиться обратно в любой момент.", - "app.theme.ui_version.description": "Переключайте общий внешний вид, сохраняя доступ ко всем функциям. Новая версия использует более компактную информационную иерархию и более современный визуальный язык.", - "app.theme.ui_version.legacy.badge": "По умолчанию", - "app.theme.ui_version.legacy.description": "Текущий стабильный интерфейс, в котором полностью доступны все функции.", - "app.theme.ui_version.legacy.label": "Старый UI", - "app.theme.ui_version.platform_hint": "Windows, macOS и Linux поддерживают переключение. Изменения применяются сразу, а некоторые модальные окна используют новый стиль при следующем открытии.", - "app.theme.ui_version.sidebar_search.command": "Новый командный поиск", - "app.theme.ui_version.sidebar_search.filter": "Старый фильтр боковой панели", - "app.theme.ui_version.sidebar_search.hint": "Новый командный поиск удобен для перехода к подключениям, таблицам и действиям. Включите синхронизацию на панели, чтобы постоянно фильтровать левое дерево; старый фильтр боковой панели показывает поле ввода напрямую и сохраняет текст фильтра.", - "app.theme.ui_version.sidebar_search.title": "Новый режим поиска в левой боковой панели", - "app.theme.tab_display.title": "Отображение меток вкладок", - "app.theme.tab_display.description": "Настройте порядок отображения имени подключения, типа объекта, имени объекта, базы данных, Schema и Host/IP. В двухстрочном режиме контекст можно вынести во вторую строку.", - "app.theme.tab_display.layout.single": "Одна строка", - "app.theme.tab_display.layout.double": "Две строки", - "app.theme.tab_display.badge.current": "Текущий", - "app.theme.tab_display.row.primary": "Основная строка", - "app.theme.tab_display.row.secondary": "Вторая строка", - "app.theme.tab_display.action.move_up": "Вверх", - "app.theme.tab_display.action.move_down": "Вниз", - "app.theme.tab_display.preview.prefix": "Текущий предпросмотр: ", - "app.theme.tab_display.preview.default_label": "Метка по умолчанию", - "app.theme.tab_display.preview.secondary": ", вторая строка {{labels}}", - "app.theme.tab_display.preview.focused": "; выбрано {{label}}", - "app.theme.tab_display.element.connection.label": "Подключение", - "app.theme.tab_display.element.connection.description": "Псевдоним подключения или имя среды, например DEV", - "app.theme.tab_display.element.kind.label": "Тип объекта", - "app.theme.tab_display.element.kind.description": "Метки типов, например SQL / TABLE / VIEW", - "app.theme.tab_display.element.object.label": "Имя объекта", - "app.theme.tab_display.element.object.description": "Основные имена, например таблицы, запроса или ресурса", - "app.theme.tab_display.element.database.label": "База данных", - "app.theme.tab_display.element.database.description": "Текущее имя DB / catalog", - "app.theme.tab_display.element.schema.label": "Schema", - "app.theme.tab_display.element.schema.description": "Префикс schema / owner", - "app.theme.tab_display.element.host.label": "Host/IP", - "app.theme.tab_display.element.host.description": "Краткий адрес целевого подключения", - "app.theme.ui_version.title": "Версия интерфейса", - "app.theme.ui_version.v2.badge": "Beta", - "app.theme.ui_version.v2.description": "Переработанный компактный интерфейс с усиленным входом AI и обзором таблиц.", - "app.theme.ui_version.v2.label": "Новый UI", - "app.tools.description": "Единое управление конфигурацией подключений, синхронизацией, драйверами и горячими клавишами.", - "app.tools.group.config.description": "Импорт/экспорт, каталог данных и обслуживание сохраненных конфигураций.", - "app.tools.group.config.title": "Подключения и конфигурация", - "app.tools.group.workflow.description": "Сравнение структуры, просмотр различий и запуск синхронизации.", - "app.tools.group.workflow.title": "Потоки данных", - "app.tools.group.workspace.description": "Драйверы, сниппеты кода и глобальные горячие клавиши.", - "app.tools.group.workspace.title": "Редактор и драйверы", - "app.tools.entry.data_root.description": "Просмотр, переключение или перенос локального места хранения данных.", - "app.tools.entry.data_root.title": "Каталог данных", - "app.tools.entry.drivers.description": "Установка, обновление или удаление драйверов баз данных.", - "app.tools.entry.drivers.title": "Управление драйверами", - "app.tools.entry.export.description": "Экспорт текущих подключений и видимых полей конфигурации.", - "app.tools.entry.export.title": "Экспорт конфигурации подключений", - "app.tools.entry.import.description": "Восстановление списка подключений из локального файла.", - "app.tools.entry.import.title": "Импорт конфигурации подключений", - "app.tools.entry.security_update.description": "Просмотр статуса безопасного обновления сохраненных конфигураций.", - "app.tools.entry.security_update.status_description": "Текущий статус: {{status}}", - "app.tools.entry.security_update.title": "Безопасное обновление", - "app.window_zoom.message.fullscreen_exit_first": "Нельзя сбросить масштаб в полноэкранном режиме. Сначала выйдите из полноэкранного режима.", - "app.window_zoom.message.reset_failed": "Не удалось сбросить масштаб окна", - "app.window_zoom.message.reset_success": "Масштаб окна сброшен", - "app.window_zoom.message.reset_success_fallback": "Масштаб окна сброшен (резервный вариант)", - "app.window_zoom.message.windows_only": "Эта функция доступна только в Windows", - "app.tools.entry.shortcuts.description": "Просмотр и настройка глобальных горячих клавиш.", - "app.tools.entry.shortcuts.title": "Управление горячими клавишами", - "app.tools.entry.schema_compare.description": "Сравнивает различия структуры исходной и целевой таблиц, только предварительный просмотр без выполнения.", - "app.tools.entry.schema_compare.title": "Сравнение схем", - "app.tools.entry.data_compare.description": "Анализирует добавленные, обновленные, удаленные и неизмененные строки по первичному ключу.", - "app.tools.entry.data_compare.title": "Сравнение данных", - "app.tools.entry.sync.description": "Открыть рабочий процесс синхронизации между источниками.", - "app.tools.entry.sync.title": "Синхронизация данных", - "app.tools.title": "Центр инструментов", - "app.connection_package.action.start_export": "Начать экспорт", - "app.connection_package.action.start_import": "Начать импорт", - "app.connection_package.dialog.export_title": "Экспорт подключений", - "app.connection_package.dialog.file_password_placeholder": "Введите пароль защиты файла (необязательно)", - "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "Пароли зашифрованы. Для передачи через публичную сеть рекомендуется задать пароль защиты файла.", - "app.connection_package.dialog.help.exclude_passwords": "Будут экспортированы только настройки подключений. Пароли не включаются.", - "app.connection_package.dialog.help.share_file_password_separately": "Передайте пароль получателю по отдельному каналу. Не отправляйте его вместе с файлом.", - "app.connection_package.dialog.import_password_title": "Введите пароль импорта", - "app.connection_package.dialog.option.include_passwords": "Экспортировать пароли подключений", - "app.connection_package.dialog.option.use_file_password": "Задать пароль защиты файла", - "app.connection_package.dialog.restore_password_placeholder": "Введите пароль пакета восстановления", - "app.connection_package.error.export_capability_unavailable": "Экспорт не выполнен: текущий backend не предоставляет новую возможность экспорта", - "app.connection_package.error.file_password_required": "Пароль защиты файла не может быть пустым", - "app.connection_package.error.import_capability_unavailable": "Импорт не выполнен: текущий backend не предоставляет новую возможность импорта", - "app.connection_package.error.import_no_connections": "Импорт не выполнен: backend не вернул список подключений", - "app.connection_package.error.missing_import_payload": "Импорт не выполнен: содержимое пакета восстановления для импорта не найдено", - "app.connection_package.error.refresh_failed_no_connections": "Импорт выполнен, но обновить список подключений не удалось: backend не вернул список подключений", - "app.connection_package.error.restore_password_required": "Пароль пакета восстановления не может быть пустым", - "app.connection_package.message.export_failed": "Экспорт не выполнен", - "app.connection_package.message.export_succeeded": "Экспорт выполнен", - "app.connection_package.message.import_failed": "Импорт не выполнен", - "app.connection_package.message.import_failed_with_error": "Импорт не выполнен: {{error}}", - "app.connection_package.message.imported_connections": "Импортировано подключений: {{count}}", - "app.connection_package.message.imported_with_missing_passwords": "Импортировано подключений: {{count}}. В некоторых подключениях нет паролей; отредактируйте эти подключения, введите пароли и сохраните.", - "app.connection.message.editable_load_failed": "Не удалось загрузить сведения сохраненного подключения. Вместо этого будет открыта маскированная конфигурация.", - "app.connection.message.editable_load_failed_with_detail": "Не удалось загрузить сведения сохраненного подключения: {{detail}}. Вместо этого будет открыта маскированная конфигурация.", - "app.connection_package.message.no_connections_to_export": "Нет подключений для экспорта", - "app.connection_package.message.unsupported_file_format": "Ошибка формата файла: поддерживаются только пакеты восстановления GoNavi, старые массивы подключений JSON или MySQL Workbench XML", - "app.browser_mock.export_sql_unsupported": "Браузерный mock не поддерживает экспорт SQL-файлов", - "app.browser_mock.import_connection_package_unsupported": "Браузерный mock не поддерживает импорт пакетов восстановления; поддерживаются только старые массивы подключений JSON", - "app.browser_mock.export_connection_package_unsupported": "Браузерный mock не поддерживает экспорт пакетов восстановления", - "app.browser_mock.mcp_http.not_running": "Служба GoNavi MCP HTTP не запущена", - "app.browser_mock.mcp_http.started": "Служба GoNavi MCP HTTP запущена", - "app.browser_mock.mcp_http.stopped": "Служба GoNavi MCP HTTP остановлена", - "app.browser_mock.mcp_server.command_required": "Команда MCP не может быть пустой", - "app.browser_mock.mcp_server.test_success": "Проверка MCP mock выполнена успешно", - "app.browser_mock.mcp_tool.unavailable": "Браузерный mock не подключен к реальной службе MCP", - "app.browser_mock.mcp_client.claude_code.installed": "Пользовательская конфигурация MCP для Claude Code записана. Перезапустите Claude CLI, после чего GoNavi появится в User MCPs в /mcp.", - "app.browser_mock.mcp_client.claude_code.not_detected": "Пользовательская конфигурация GoNavi MCP для Claude Code не обнаружена", - "app.browser_mock.mcp_client.codex.installed": "Пользовательская конфигурация MCP для Codex записана. Перезапустите Codex CLI или настольное приложение, чтобы увидеть GoNavi.", - "app.browser_mock.mcp_client.codex.path_mismatch": "В Codex обнаружена запись GoNavi MCP, но она не совпадает с текущим путем установки GoNavi. Рекомендуется обновить.", - "app.browser_mock.provider.test_failed_detail": "Проверка подключения не удалась: {{detail}}", - "app.browser_mock.provider.test_success": "Проверка подключения к конечной точке выполнена успешно", - "app.update.action.hide_to_background": "Скрыть в фон", - "app.update.action.install_update": "Установить обновление", - "app.update.action.open_install_directory": "Открыть каталог установки", - "app.update.backend.error.check_failed": "Не удалось проверить обновления: {{detail}}", - "app.update.backend.error.check_http_status": "Не удалось проверить обновления: HTTP {{status}}", - "app.update.backend.error.download_failed": "Не удалось скачать обновление: {{detail}}", - "app.update.backend.error.install_unsupported": "Установка обновления не поддерживается на этой платформе: {{platform}}", - "app.update.backend.error.latest_version_unparseable": "Не удалось разобрать номер последней версии", - "app.update.backend.error.online_update_unsupported": "Онлайн-обновление не поддерживается на этой платформе: {{platform}}", - "app.update.backend.error.package_download_http_failed": "Не удалось скачать пакет обновления: HTTP {{status}}", - "app.update.backend.error.package_file_busy": "Не удалось скачать обновление, потому что файл занят: {{detail}}", - "app.update.backend.error.release_version_unparseable": "Не удалось разобрать версию релиза", - "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS не содержит пакет обновления для текущей платформы", - "app.update.backend.error.sha256sums_download_failed": "Не удалось скачать SHA256SUMS: HTTP {{status}}", - "app.update.backend.error.sha256sums_missing": "Release не предоставляет SHA256SUMS", - "app.update.backend.error.update_package_not_found": "Пакет обновления не найден: {{name}}", - "app.update.backend.message.app_directory_unavailable": "Нет доступа к каталогу приложения: {{path}}", - "app.update.backend.message.app_directory_unresolved_download": "Не удалось определить текущий каталог приложения, поэтому обновление нельзя скачать", - "app.update.backend.message.check_first": "Сначала проверьте обновления", - "app.update.backend.message.checksum_failed": "Проверка контрольной суммы пакета обновления не пройдена. Повторите попытку.", - "app.update.backend.message.checksum_missing": "Отсутствует контрольная сумма пакета обновления (SHA256SUMS)", - "app.update.backend.message.create_workspace_failed": "Не удалось создать рабочий каталог обновления в каталоге приложения: {{path}}", - "app.update.backend.message.download_in_progress": "Пакет обновления загружается. Повторите попытку позже.", - "app.update.backend.message.install_launch_failed": "Не удалось запустить установщик обновления: {{detail}}", - "app.update.backend.message.install_launch_failed_with_log": "Не удалось запустить установщик обновления: {{detail}} (журнал обновления: {{path}})", - "app.update.backend.message.install_started": "Установка обновления начата", - "app.update.backend.message.install_started_with_log": "Установка обновления начата. Путь к журналу: {{path}}", - "app.update.backend.message.latest": "Уже установлена последняя версия", - "app.update.backend.message.no_downloaded_package": "Скачанный пакет обновления не найден", - "app.update.backend.message.no_update_package": "Доступный пакет обновления не найден", - "app.update.backend.message.open_directory_failed": "Не удалось открыть каталог обновления: {{detail}}", - "app.update.backend.message.open_directory_unsupported": "Открытие каталогов не поддерживается на этой платформе: {{platform}}", - "app.update.backend.message.opened_install_directory": "Каталог установки открыт: {{path}}", - "app.update.backend.message.package_already_downloaded": "Пакет обновления уже скачан", - "app.update.backend.message.package_directory_unavailable": "Каталог обновления не существует или недоступен", - "app.update.backend.message.package_directory_unresolved": "Не удалось определить каталог обновления", - "app.update.backend.message.package_downloaded": "Пакет обновления скачан", - "app.update.backend.message.package_path_empty": "Путь к пакету обновления пуст", - "app.update.backend.message.update_found": "Найдена новая версия: {{version}}", - "app.update.download_title": "Скачать обновление", - "app.update.download_title_with_version": "Скачать обновление {{version}}", - "app.update.message.check_failed": "Не удалось проверить обновления: {{error}}", - "app.update.message.download_completed": "Загрузка обновления завершена", - "app.update.message.download_completed_with_path": "Загрузка обновления завершена. Путь к пакету: {{path}}", - "app.update.message.download_failed": "Не удалось скачать обновление: {{error}}", - "app.update.message.install_failed": "Не удалось установить обновление: {{error}}", - "app.update.message.open_install_directory_failed": "Не удалось открыть каталог установки: {{error}}", - "app.update.message.opened_install_directory": "Каталог установки открыт. Завершите замену вручную.", - "app.update.message.package_ready": "Пакет обновления готов ({{version}})", - "app.update.message.package_ready_with_path": "Пакет обновления готов ({{version}}), путь: {{path}}", - "app.update.message.update_found": "Найдена новая версия: {{version}}", - "app.update.status.available_downloaded": "Найдена новая версия {{version}} (скачана; нажмите \"Ход загрузки\", чтобы установить)", - "app.update.status.available_not_downloaded": "Найдена новая версия {{version}} (не скачана)", - "app.update.status.check_failed": "Не удалось проверить обновления: {{error}}", - "app.update.status.checking": "Проверка обновлений...", - "app.update.status.latest": "Уже установлена последняя версия ({{version}})", - "app.update.status.not_checked": "Не проверено", - "connection.delete": "Удалить подключение", - "connection.edit": "Изменить подключение", - "connection.new": "Новое подключение", - "connection.test": "Проверить подключение", - "connection.unnamed": "Безымянное подключение", - "database.unnamed": "База данных без имени", - "database.label": "База данных", - "connection.copy_suffix": " - копия", - "query.format": "Форматировать SQL", - "query.new": "Новый запрос", - "query.run": "Выполнить", - "query.save": "Сохранить запрос", - "saved_query.default_name": "Запрос {{index}}", - "query.stop": "Остановить", - "message_publish_modal.title": "Тестовая отправка сообщения", - "message_publish_modal.title_with_connection": "Тестовая отправка сообщения · {{connectionName}}", - "message_publish_modal.action.send": "Отправить", - "message_publish_modal.error.build_command_failed": "Не удалось создать команду отправки", - "message_publish_modal.error.send_failed_detail": "Отправка не удалась: {{detail}}", - "message_publish_modal.error.unknown_error": "Неизвестная ошибка", - "message_publish_modal.field.exchange.label": "Exchange (необязательно)", - "message_publish_modal.field.exchange.extra": "Оставьте пустым, чтобы использовать exchange по умолчанию. Если указан пользовательский exchange, убедитесь, что для целевой Queue создан binding.", - "message_publish_modal.field.exchange.placeholder": "Пример: events.topic", - "message_publish_modal.field.routing_key.label": "Routing Key (необязательно)", - "message_publish_modal.field.routing_key.extra": "Оставьте пустым, чтобы по умолчанию использовать имя текущей Queue.", - "message_publish_modal.field.routing_key.placeholder": "Пример: orders.queue", - "message_publish_modal.field.qos.extra": "0 означает at most once, 1 означает at least once, 2 означает exactly once.", - "message_publish_modal.field.retain.label": "Retain-сообщение", - "message_publish_modal.field.tag.label": "Tag (необязательно)", - "message_publish_modal.field.tag.extra": "Оставьте пустым, чтобы не фильтровать и не записывать Tag.", - "message_publish_modal.field.delay_level.label": "Delay Level (необязательно)", - "message_publish_modal.field.delay_level.extra": "RocketMQ использует фиксированные уровни задержки. 0 означает немедленную отправку.", - "message_publish_modal.field.body_mode.label": "Тип тела сообщения", - "message_publish_modal.field.body.label": "Тело сообщения", - "message_publish_modal.field.body.required": "Введите тело сообщения", - "message_publish_modal.field.body.extra": "В режиме JSON требуется корректный JSON. В текстовом режиме содержимое отправляется как есть.", - "message_publish_modal.field.body.placeholder": "Введите тело сообщения", - "message_publish_modal.field.headers.label": "Headers (необязательно)", - "message_publish_modal.field.headers.extra": "Должно быть JSON-объектом, например {{example}}.", - "message_publish_modal.field.properties.label": "Properties (необязательно)", - "message_publish_modal.field.properties.extra": "Должно быть JSON-объектом, например {{example}}.", - "message_publish_modal.option.no_delay": "Без задержки", - "message_publish_modal.option.text": "Текст", - "message_publish_modal.footer.success_prefix": "При успешной отправке возвращается", - "message_publish_modal.footer.success_suffix": ", чтобы подтвердить, было ли отправлено это тестовое сообщение.", - "message_publish.field.body": "Тело сообщения", - "message_publish.field.message_key": "Ключ сообщения", - "message_publish.error.destination_required": "Введите целевой Topic / Queue", - "message_publish.error.required_field": "Введите {{field}}", - "message_publish.error.invalid_json_detail": "{{field}} не является корректным JSON: {{detail}}", - "message_publish.error.json_object_required": "{{field}} должен быть JSON-объектом", - "message_publish.error.mqtt_wildcard_topic": "Topic для отправки MQTT не может содержать подстановочные символы + или #", - "message_publish.error.unsupported_type": "Текущий источник данных не поддерживает тестовую отправку сообщений: {{type}}", - "message_publish.presentation.rabbitmq.destination_placeholder": "Пример: orders.queue", - "message_publish.presentation.rabbitmq.destination_required": "Введите Queue", - "message_publish.presentation.rabbitmq.alert": "Эта форма автоматически собирает RabbitMQ publish JSON-команду и отправляет тестовое сообщение через Management API.", - "message_publish.presentation.rabbitmq.success_hint": "Если Exchange пустой, используется exchange по умолчанию, а имя Queue применяется как routing key.", - "message_publish.presentation.rocketmq.destination_placeholder": "Пример: orders.events", - "message_publish.presentation.topic_required": "Введите Topic", - "message_publish.presentation.rocketmq.alert": "Эта форма автоматически собирает RocketMQ publish JSON-команду и отправляет тестовое сообщение через NameServer/Broker.", - "message_publish.presentation.rocketmq.success_hint": "Tag, Keys, Delay Level и Properties записываются в атрибуты сообщения RocketMQ.", - "message_publish.presentation.keys_label": "Ключи сообщения Keys (необязательно)", - "message_publish.presentation.rocketmq.key_placeholder": "Можно ввести несколько значений Key через запятую", - "message_publish.presentation.rocketmq.tag_placeholder": "Пример: TagA", - "message_publish.presentation.mqtt.destination_placeholder": "Пример: devices/device-001/telemetry", - "message_publish.presentation.mqtt.alert": "Эта форма автоматически собирает MQTT publish JSON-команду и отправляет тестовое сообщение напрямую через broker.", - "message_publish.presentation.mqtt.success_hint": "QoS и retain можно задать отдельно. Пустые поля используют значения по умолчанию из текущего подключения.", - "message_publish.presentation.kafka.destination_placeholder": "Пример: orders.events", - "message_publish.presentation.kafka.alert": "Эта форма автоматически собирает Kafka publish JSON-команду и вызывает backend для тестовой отправки.", - "message_publish.presentation.kafka.success_hint": "Headers отправляются как Kafka Record Headers.", - "message_publish.presentation.key_label": "Ключ сообщения Key (необязательно)", - "message_publish.presentation.kafka.key_placeholder": "Необязательно. В режиме JSON введите одну корректную строку JSON.", - "connection_modal.action.browse": "Выбрать...", - "connection_modal.action.disable": "Отключить", - "connection_modal.action.discover_members": "Обнаружить участников", - "connection_modal.action.enable_and_prefer": "Включить и предпочесть", - "connection_modal.badge.current_editing": "Редактируется", - "connection_modal.badge.preferred": "Предпочтительный", - "connection_modal.field.additional_hosts": "Дополнительные хосты", - "connection_modal.field.additional_srv_hosts_optional": "Дополнительные SRV-хосты (необязательно)", - "connection_modal.field.auth_source": "База аутентификации (authSource)", - "connection_modal.field.cluster_additional_hosts": "Дополнительные узлы кластера", - "connection_modal.field.connection_timeout_seconds": "Тайм-аут подключения (секунды)", - "connection_modal.field.connection_timeout_seconds_ascii": "Тайм-аут подключения (секунды)", - "connection_modal.field.default_database_optional": "База данных по умолчанию (необязательно)", - "connection_modal.field.display_databases_optional": "Отображаемые базы данных (необязательно)", - "connection_modal.field.file_path_absolute": "Путь к файлу (абсолютный)", - "connection_modal.field.host_address": "Адрес хоста", - "connection_modal.field.password_optional": "Пароль (необязательно)", - "connection_modal.field.port": "Порт", - "connection_modal.field.port_plain": "Порт", - "connection_modal.field.private_key_path_optional": "Путь к закрытому ключу (необязательно)", - "connection_modal.field.proxy_host": "Хост прокси", - "connection_modal.field.proxy_password_optional": "Пароль прокси (необязательно)", - "connection_modal.field.proxy_type": "Тип прокси", - "connection_modal.field.proxy_username_optional": "Имя пользователя прокси (необязательно)", - "connection_modal.field.replica_hosts": "Список хостов реплик", - "connection_modal.field.replica_password_optional": "Пароль реплики (необязательно)", - "connection_modal.field.replica_set_optional": "Replica Set (необязательно)", - "connection_modal.field.replica_set_password_optional": "Пароль Replica Set (необязательно)", - "connection_modal.field.replica_set_username_optional": "Имя пользователя Replica Set (необязательно)", - "connection_modal.field.replica_username_optional": "Имя пользователя реплики (необязательно)", - "connection_modal.field.save_password": "Сохранить пароль", - "connection_modal.field.service_name": "Имя сервиса", - "connection_modal.field.defaultDatabase.placeholder": "Например: appdb", - "connection_modal.field.serviceName.placeholder": "Например: ORCLPDB1", - "connection_modal.field.clickHouseProtocol.auto": "Авто", - "connection_modal.field.oceanBaseProtocol.label": "Протокол OceanBase", - "connection_modal.field.oceanBaseProtocol.help.primary": "Для арендаторов MySQL выберите MySQL, для арендаторов Oracle выберите Oracle. GoNavi автоматически выбирает режим по порту: для порта OB MySQL wire используется внедрение возможностей OBClient (тот же путь, что и в Navicat), для порта OBProxy Oracle listener используется стандартный TNS.", - "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "Если при подключении к Oracle-арендатору возникает \"Error 1235\" или сбой рукопожатия OBClient, в поле \"Параметры подключения\" можно через {{attributes}} переопределить OBClient capability, которую GoNavi внедряет по умолчанию.", - "connection_modal.field.ssh_host": "SSH-хост", - "connection_modal.field.ssh_password": "SSH-пароль", - "connection_modal.field.ssh_user": "SSH-пользователь", - "connection_modal.field.ssl_cert_path": "Путь к SSL-сертификату", - "connection_modal.field.ssl_key_path": "Путь к SSL-ключу", - "connection_modal.field.tunnel_host": "Хост HTTP Tunnel", - "connection_modal.field.tunnel_password_optional": "Пароль HTTP Tunnel (необязательно)", - "connection_modal.field.tunnel_username_optional": "Имя пользователя HTTP Tunnel (необязательно)", - "connection_modal.field.username": "Имя пользователя", - "connection_modal.field.username.optional_placeholder": "Оставьте пустым, если аутентификация отключена", - "connection_modal.help.additional_hosts": "Необязательные участники MongoDB, разделенные запятой, точкой с запятой или пробелом.", - "connection_modal.help.additional_srv_hosts": "Необязательные дополнительные SRV-хосты для обнаружения MongoDB.", - "connection_modal.help.connection_timeout": "Применяется к тестам подключения и загрузке метаданных. Диапазон: 1-300 секунд.", - "connection_modal.help.custom_driver": "Поддерживаются: mysql, postgres, sqlite, oracle, dm, kingbase. Алиасы: postgresql/pgx, dm8, kingbase8/kingbasees/kingbasev8. Расширение драйверов через JDBC Jar сейчас не поддерживается.", - "connection_modal.help.default_database": "Оставьте пустым, чтобы использовать базу данных сервера по умолчанию.", - "connection_modal.help.oracle_service_name": "Имя сервиса Oracle, например ORCLPDB1.", - "connection_modal.help.private_key_path": "Используйте закрытый ключ для SSH-аутентификации. Оставьте пароль пустым, если ключ не зашифрован.", - "connection_modal.help.redis_cluster_hosts": "Дополнительные узлы Redis Cluster, разделенные запятой, точкой с запятой или пробелом.", - "connection_modal.help.replica_hosts": "Хосты реплик в формате host:port, разделенные запятой, точкой с запятой или пробелом.", - "connection_modal.help.select_after_test": "Сначала выполните тест подключения, чтобы загрузить доступные базы данных.", - "connection_modal.jvm.access_mode_description": "Выберите режимы доступа JVM для этого подключения и предпочтительный режим.", - "connection_modal.jvm.access_mode_title": "Режимы доступа", - "connection_modal.jvm.agent_api_key_optional": "Ключ API Agent (необязательно)", - "connection_modal.jvm.agent_description": "Подключение через GoNavi Agent, когда прямой сетевой доступ ограничен.", - "connection_modal.jvm.agent_help": "Базовый URL сервиса GoNavi Agent.", - "connection_modal.jvm.agent_url": "URL Agent", - "connection_modal.jvm.diagnostic.agent_bridge_description": "Использовать диагностический Endpoint GoNavi Agent Bridge.", - "connection_modal.jvm.diagnostic.arthas_tunnel_description": "Использовать Arthas Tunnel для доступа к целевой JVM.", - "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Базовый URL сервера Arthas Tunnel.", - "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", - "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", - "connection_modal.jvm.diagnostic.arthas_tunnel_url": "URL Arthas Tunnel", - "connection_modal.jvm.diagnostic.bridge_help": "Базовый URL диагностического моста GoNavi.", - "connection_modal.jvm.diagnostic.bridge_url": "URL диагностического моста", - "connection_modal.jvm.diagnostic.mutating_commands": "Изменяющие команды", - "connection_modal.jvm.diagnostic.mutating_commands_description": "Разрешить команды, которые могут изменить состояние выполнения. Используйте только в контролируемых средах.", - "connection_modal.jvm.diagnostic.observe_commands": "Команды наблюдения", - "connection_modal.jvm.diagnostic.observe_commands_description": "Разрешить команды только для чтения, такие как dashboard, thread и сведения JVM.", - "connection_modal.jvm.diagnostic.target_agent_id": "ID целевого Agent", - "connection_modal.jvm.diagnostic.target_agent_id_help": "Agent ID, зарегистрированный в Arthas Tunnel.", - "connection_modal.jvm.diagnostic.target_id": "ID цели", - "connection_modal.jvm.diagnostic.target_id_help": "Идентификатор цели для диагностического моста. Оставьте пустым, если мост выбирает цель по умолчанию.", - "connection_modal.jvm.diagnostic.trace_commands": "Команды трассировки", - "connection_modal.jvm.diagnostic.trace_commands_description": "Разрешить trace и watch команды, которые добавляют нагрузку во время выполнения.", - "connection_modal.jvm.diagnostic_api_key_optional": "Ключ API диагностики (необязательно)", - "connection_modal.jvm.diagnostic_description": "Включить необязательные диагностические команды для устранения неполадок JVM.", - "connection_modal.jvm.diagnostic_disabled_hint": "Диагностическое расширение отключено. Включайте его только для диагностики во время выполнения.", - "connection_modal.jvm.diagnostic_timeout_seconds": "Тайм-аут диагностики (секунды)", - "connection_modal.jvm.diagnostic_title": "Диагностическое расширение", - "connection_modal.jvm.diagnostic_transport": "Диагностический транспорт", - "connection_modal.jvm.endpoint_api_key_optional": "Ключ API Endpoint (необязательно)", - "connection_modal.jvm.endpoint_description": "Подключаться к предоставленному сервисом Endpoint вместо прямого JMX.", - "connection_modal.jvm.endpoint_help": "Базовый URL Endpoint управления JVM.", - "connection_modal.jvm.endpoint_url": "URL Endpoint", - "connection_modal.jvm.environment": "Среда", - "connection_modal.jvm.environment.dev": "Разработка", - "connection_modal.jvm.environment.dev_description": "Тестовая среда с меньшим риском.", - "connection_modal.jvm.environment.prod": "Продакшен", - "connection_modal.jvm.environment.prod_description": "Производственная среда; рекомендуется режим только для чтения.", - "connection_modal.jvm.environment.uat": "UAT", - "connection_modal.jvm.environment.uat_description": "Среда проверки перед продакшеном.", - "connection_modal.jvm.jmx_description": "Подключение через JMX с хостом, портом и необязательными учетными данными.", - "connection_modal.jvm.jmx_host_override_optional": "Переопределение хоста JMX (необязательно)", - "connection_modal.jvm.jmx_password_optional": "Пароль JMX (необязательно)", - "connection_modal.jvm.jmx_port": "Порт JMX", - "connection_modal.jvm.jmx_username_optional": "Имя пользователя JMX (необязательно)", - "connection_modal.jvm.mode.agent_description": "Использовать GoNavi Agent для сред за firewall или NAT.", - "connection_modal.jvm.mode.endpoint_description": "Использовать HTTP Endpoint, предоставленный целевым сервисом.", - "connection_modal.jvm.mode.jmx_description": "Использовать стандартный удаленный доступ JMX.", - "connection_modal.jvm.preferred_mode_hint": "Текущий предпочтительный режим: {{mode}}", - "connection_modal.jvm.read_only_first": "Предпочитать операции только для чтения", - "connection_modal.jvm.security_policy": "Политика безопасности", - "connection_modal.message.srv_with_ssh_dns_warning": "SRV вместе с SSH Tunnel может зависеть от локального DNS. Если разрешение не удается, используйте стандартные хосты.", - "connection_modal.messageQueue.kafka.defaultTopic.label": "Topic по умолчанию (необязательно)", - "connection_modal.messageQueue.kafka.defaultTopic.help": "Если поле пустое, Topic нужно явно указать в SQL. После заполнения SHOW, CONSUME или SELECT могут сразу выполнять предварительный просмотр.", - "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "Например: orders.events", - "connection_modal.messageQueue.rocketmq.defaultTopic.label": "Topic по умолчанию (необязательно)", - "connection_modal.messageQueue.rocketmq.defaultTopic.help": "Если поле пустое, Topic нужно явно указать в SQL. В параметрах подключения можно дополнительно задать groupId, namespace, tag, pullBatchSize и startOffset.", - "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "Например: orders.events", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "Topic / Filter по умолчанию (необязательно)", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "Если поле пустое, Topic нужно явно указать в SQL. После заполнения SHOW, CONSUME или SELECT могут сразу выполнять предварительный просмотр. Поддерживаются /, + и #.", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "Например: devices/+/telemetry", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "Virtual Host по умолчанию (необязательно)", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "Если поле пустое, по умолчанию используется /. После заполнения редактор запросов использует текущий vhost как контекст просмотра Queue и тестовой отправки.", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "Например: / или orders-vhost", - "connection_modal.messageQueue.topology.cluster.label": "Режим кластера", - "connection_modal.messageQueue.kafka.topology.single.label": "Один Broker", - "connection_modal.messageQueue.kafka.topology.single.description": "Настраивает один bootstrap broker для локальной или простой среды.", - "connection_modal.messageQueue.kafka.topology.cluster.description": "Настраивает несколько bootstrap broker, чтобы повысить успешность обнаружения и failover.", - "connection_modal.messageQueue.rocketmq.topology.single.label": "Один NameServer", - "connection_modal.messageQueue.rocketmq.topology.single.description": "Настраивает один NameServer для локальной или простой среды.", - "connection_modal.messageQueue.rocketmq.topology.cluster.description": "Настраивает несколько NameServer, чтобы повысить успешность обнаружения маршрутов и failover.", - "connection_modal.messageQueue.mqtt.topology.single.label": "Один Broker", - "connection_modal.messageQueue.mqtt.topology.single.description": "Настраивает один broker для локальной или простой среды.", - "connection_modal.messageQueue.mqtt.topology.cluster.description": "Настраивает несколько broker, чтобы повысить успешность обнаружения подключения и failover.", - "connection_modal.messageQueue.kafka.extraBrokers.label": "Дополнительные адреса Broker", - "connection_modal.messageQueue.kafka.extraBrokers.help": "Введите несколько адресов broker в формате host:port и нажмите Enter для подтверждения.", - "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "Например: 10.10.0.12:9092, 10.10.0.13:9092", - "connection_modal.messageQueue.rocketmq.extraNameServers.label": "Дополнительные адреса NameServer", - "connection_modal.messageQueue.rocketmq.extraNameServers.help": "Введите несколько адресов NameServer в формате host:port и нажмите Enter для подтверждения.", - "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "Например: 10.10.0.12:9876, 10.10.0.13:9876", - "connection_modal.messageQueue.mqtt.extraBrokers.label": "Дополнительные адреса Broker", - "connection_modal.messageQueue.mqtt.extraBrokers.help": "Введите несколько адресов broker в формате host:port и нажмите Enter для подтверждения.", - "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "Например: 10.10.0.12:1883, 10.10.0.13:1883", - "connection_modal.redis.topology.single.label": "Одиночный режим", - "connection_modal.redis.topology.single.description": "Подключение к одному узлу Redis.", - "connection_modal.redis.topology.cluster.label": "Режим кластера", - "connection_modal.redis.topology.cluster.description": "Redis Cluster с несколькими seed-узлами.", - "connection_modal.redis.topology.sentinel.label": "Режим Sentinel", - "connection_modal.redis.topology.sentinel.description": "Обнаруживает primary-узел через Sentinel для высокой доступности primary-replica.", - "connection_modal.redis.hosts.sentinel.label": "Дополнительные адреса узлов Sentinel", - "connection_modal.redis.hosts.sentinel.help": "Указанный выше host используется как первый Sentinel. Введите здесь другие узлы Sentinel в формате host:port.", - "connection_modal.redis.hosts.sentinel.placeholder": "Например: 10.10.0.12:26379, 10.10.0.13:26379", - "connection_modal.redis.hosts.cluster.label": "Дополнительные адреса узлов кластера", - "connection_modal.redis.hosts.cluster.help": "Указанный выше host используется как primary-узел. Введите здесь другие seed-узлы в формате host:port.", - "connection_modal.redis.hosts.cluster.placeholder": "Например: 10.10.0.12:6379, 10.10.0.13:6379", - "connection_modal.redis.sentinel.master.label": "Имя Sentinel master", - "connection_modal.redis.sentinel.master.help": "Введите имя monitor из конфигурации Sentinel, например mymaster.", - "connection_modal.redis.sentinel.master.required": "Введите имя Sentinel master", - "connection_modal.redis.sentinel.master.placeholder": "Например: mymaster", - "connection_modal.redis.credentials.primary.label": "Пароль (необязательно)", - "connection_modal.redis.credentials.primary.placeholder.empty": "Пароль Redis, если задан requirepass", - "connection_modal.redis.credentials.primary.placeholder.retained": "Сохраненный пароль Redis", - "connection_modal.redis.credentials.sentinelUser.label": "Имя пользователя Sentinel (необязательно)", - "connection_modal.redis.credentials.sentinelUser.placeholder": "Оставьте пустым, если Sentinel не использует имя пользователя ACL", - "connection_modal.redis.credentials.sentinelPassword.label": "Пароль Sentinel (необязательно)", - "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Пароль аутентификации самого Sentinel. Оставьте пустым, чтобы ничего не отправлять.", - "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "Сохраненный пароль Sentinel", - "connection_modal.redis.credentials.sentinelPassword.clear": "Очистить сохраненный пароль Sentinel", - "connection_modal.redis.credentials.sentinelPassword.description": "Пароль Sentinel уже сохранен. Оставьте поле пустым, чтобы продолжить использовать его, или введите новое значение для замены.", - "connection_modal.redis.databaseScope.label": "Показываемые базы данных (пусто значит все)", - "connection_modal.redis.databaseScope.help": "Можно выбрать после успешной проверки подключения", - "connection_modal.redis.databaseScope.placeholder": "Выберите базы данных для показа", - "connection_modal.mongodb.auth.auto": "Авто", - "connection_modal.mongodb.auth.auto_description": "Позволить драйверу выбрать механизм аутентификации.", - "connection_modal.mongodb.auth.aws_iam_description": "Использовать аутентификацию AWS IAM. Учетные данные AWS IAM должны быть в среде выполнения.", - "connection_modal.mongodb.auth.none": "Без аутентификации", - "connection_modal.mongodb.auth.none_description": "Подключаться без аутентификации MongoDB.", - "connection_modal.mongodb.auth.scram_sha1_description": "Использовать аутентификацию SCRAM-SHA-1.", - "connection_modal.mongodb.auth.scram_sha256_description": "Использовать аутентификацию SCRAM-SHA-256.", - "connection_modal.mongodb.auth_mechanism": "Механизм аутентификации", - "connection_modal.mongodb.topology.single.label": "Одиночный режим", - "connection_modal.mongodb.topology.replica.label": "Replica Set / несколько узлов", - "connection_modal.mongodb.discovery.standard.label": "Стандартный адрес", - "connection_modal.mongodb.discovery.standard.description": "Подключение напрямую через host:port или список узлов Replica Set.", - "connection_modal.mongodb.discovery.srv.label": "SRV-адрес", - "connection_modal.mongodb.discovery.srv.description": "Использовать mongodb+srv, чтобы DNS обнаружил целевые узлы.", - "connection_modal.mongodb.discovery.current": "Текущий", - "connection_modal.mongodb.discovery.srv_ssh_warning": "Если SRV и SSH Tunnel включены одновременно, может потребоваться локальное DNS-разрешение.", - "connection_modal.mongodb.replica.hosts.srv.label": "Дополнительные SRV-хосты (необязательно)", - "connection_modal.mongodb.replica.hosts.srv.help": "Введите несколько имен кандидатов host в формате host. Если оставить пустым, используется только host выше.", - "connection_modal.mongodb.replica.hosts.srv.placeholder": "Например: cluster-a.example.com, cluster-b.example.com", - "connection_modal.mongodb.replica.hosts.standard.label": "Дополнительные адреса узлов", - "connection_modal.mongodb.replica.hosts.standard.help": "Введите несколько адресов узлов в формате host:port и нажмите Enter для подтверждения.", - "connection_modal.mongodb.replica.hosts.standard.placeholder": "Например: 10.10.0.12:27017, 10.10.0.13:27017", - "connection_modal.mongodb.replica.set.label": "Имя Replica Set (необязательно)", - "connection_modal.mongodb.replica.set.placeholder": "Например: rs0", - "connection_modal.mongodb.replica.user.label": "Имя пользователя Replica Set (необязательно)", - "connection_modal.mongodb.replica.user.placeholder": "Оставьте пустым, чтобы использовать основное имя пользователя", - "connection_modal.mongodb.replica.password.label": "Пароль Replica Set (необязательно)", - "connection_modal.mongodb.replica.password.placeholder.empty": "Оставьте пустым, чтобы использовать основной пароль", - "connection_modal.mongodb.replica.password.placeholder.retained": "Сохраненный пароль Replica Set", - "connection_modal.mongodb.replica.password.clear": "Очистить сохраненный пароль Replica Set", - "connection_modal.mongodb.replica.password.description": "Пароль Replica Set уже сохранен. Оставьте поле пустым, чтобы продолжить использовать его, или введите новое значение для замены.", - "connection_modal.mongodb.members.role": "Роль", - "connection_modal.mongodb.members.health": "Состояние", - "connection_modal.mongodb.members.health.ok": "Норма", - "connection_modal.mongodb.members.health.error": "Ошибка", - "connection_modal.mongodb.policy.auth_source.label": "База аутентификации (authSource)", - "connection_modal.mongodb.policy.auth_source.placeholder": "По умолчанию используется database или admin", - "connection_modal.mongodb.read_preference": "readPreference", - "connection_modal.mongodb.read_preference.nearest": "Направлять чтение к ближайшему участнику.", - "connection_modal.mongodb.read_preference.primary": "Читать только с primary.", - "connection_modal.mongodb.read_preference.primary_preferred": "Предпочитать primary, при необходимости переходить на secondary.", - "connection_modal.mongodb.read_preference.secondary": "Читать только с secondary.", - "connection_modal.mongodb.read_preference.secondary_preferred": "Предпочитать secondary, при необходимости переходить на primary.", - "connection_modal.mongodb.srv_address": "SRV-адрес", - "connection_modal.mongodb.srv_address_description": "Использовать запись MongoDB SRV для обнаружения хостов.", - "connection_modal.mongodb.standard_address": "Стандартный адрес", - "connection_modal.mongodb.standard_address_description": "Использовать хост и порт, а также необязательный список участников.", - "connection_modal.network.http_tunnel": "HTTP Tunnel", - "connection_modal.network.http_tunnel_description": "Перенаправлять трафик базы данных через HTTP Tunnel.", - "connection_modal.network.http_tunnel_disabled_hint": "Включите HTTP Tunnel, чтобы настроить хост, порт и учетные данные Tunnel.", - "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel нельзя использовать вместе с SSH Tunnel или прокси.", - "connection_modal.network.http_tunnel_panel_description": "Настройте шлюз HTTP Tunnel для этого подключения.", - "connection_modal.network.proxy": "Прокси", - "connection_modal.network.proxy_disabled_hint": "Включите прокси, чтобы направить это подключение через SOCKS5 или HTTP CONNECT.", - "connection_modal.network.proxy_panel_description": "Настройте параметры прокси для этого подключения.", - "connection_modal.network.proxy_type.http_description": "Использовать прокси HTTP CONNECT.", - "connection_modal.network.proxy_type.socks5_description": "Использовать прокси SOCKS5.", - "connection_modal.network.ssh_disabled_hint": "Включите SSH Tunnel для подключения через bastion host.", - "connection_modal.network.ssh_panel_description": "Настройте хост SSH Tunnel, учетные данные и необязательный закрытый ключ.", - "connection_modal.network.ssh_tunnel": "SSH Tunnel", - "connection_modal.network.ssh_tunnel_description": "Подключаться к базе данных через SSH Tunnel.", - "connection_modal.network.ssl_description": "Шифровать подключение к базе данных с помощью SSL/TLS.", - "connection_modal.network.ssl_tls": "SSL/TLS", - "connection_modal.network.ssl_disabled_hint": "Включите SSL/TLS для настройки политики сертификатов.", - "connection_modal.network.ssl_mode": "Режим SSL", - "connection_modal.network.ssl_mode.preferred_description": "Сначала попробовать SSL и откатиться, если сервер не требует шифрования.", - "connection_modal.network.ssl_mode.required_description": "Требовать SSL и завершать ошибкой, если шифрованное подключение невозможно.", - "connection_modal.network.ssl_mode.skip_verify_description": "Использовать SSL, но пропустить проверку сертификата. Только для тестов или самоподписанных сертификатов.", - "connection_modal.network.ssl_panel_description": "Настройте политику SSL/TLS для этого подключения.", - "connection_modal.placeholder.absolute_path": "/absolute/path/to/file", - "connection_modal.placeholder.agent_api_key": "Необязательный ключ API Agent", - "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", - "connection_modal.placeholder.custom_dsn_example": "Пример: DSN конкретного драйвера", - "connection_modal.placeholder.default_database_or_admin": "база данных по умолчанию или admin", - "connection_modal.placeholder.diagnostic_api_key": "Необязательный ключ API диагностики", - "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", - "connection_modal.placeholder.diagnostic_target_id": "ID цели", - "connection_modal.placeholder.empty_without_auth": "Оставьте пустым без аутентификации", - "connection_modal.placeholder.endpoint_api_key": "Необязательный ключ API Endpoint", - "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", - "connection_modal.placeholder.example_appdb": "appdb", - "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", - "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", - "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", - "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", - "connection_modal.placeholder.example_rs0": "rs0", - "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", - "connection_modal.placeholder.no_auth": "Без аутентификации", - "connection_modal.placeholder.proxy_host": "127.0.0.1", - "connection_modal.placeholder.redis_password": "Пароль Redis", - "connection_modal.placeholder.select_databases": "Выберите базы данных для отображения", - "connection_modal.placeholder.select_redis_databases": "Выберите базы Redis для отображения", - "connection_modal.placeholder.ssh_host": "bastion.example.com", - "connection_modal.placeholder.ssl_cert_path": "/absolute/path/client.crt", - "connection_modal.placeholder.ssl_key_path": "/absolute/path/client.key", - "connection_modal.placeholder.tunnel_host": "tunnel.example.com", - "connection_modal.placeholder.use_primary_host": "Использовать основной хост", - "connection_modal.placeholder.use_primary_password": "Использовать основной пароль", - "connection_modal.placeholder.use_primary_password_short": "Использовать основной пароль", - "connection_modal.placeholder.use_primary_port": "Использовать основной порт", - "connection_modal.placeholder.use_primary_username": "Использовать основное имя пользователя", - "connection_modal.placeholder.use_primary_username_short": "Использовать основное имя пользователя", - "connection_modal.secret.clear_saved_mongo_replica_password": "Очистить сохраненный пароль реплики MongoDB", - "connection_modal.secret.clear_saved_password": "Очистить сохраненный пароль", - "connection_modal.secret.clear_saved_proxy_password": "Очистить сохраненный пароль прокси", - "connection_modal.secret.clear_saved_replica_password": "Очистить сохраненный пароль реплики", - "connection_modal.secret.clear_saved_ssh_password": "Очистить сохраненный SSH-пароль", - "connection_modal.secret.clear_saved_tunnel_password": "Очистить сохраненный пароль HTTP Tunnel", - "connection_modal.secret.error.saved_connection_missing": "Сохраненный секрет для текущего подключения не найден. Повторно введите пароль, сохраните и попробуйте снова.", - "connection_modal.secret.error.store_unavailable": "Безопасное хранилище секретов сейчас недоступно. Проверьте системную связку ключей или диспетчер учетных данных и попробуйте снова.", - "connection_modal.secret.saved_mongo_replica_password": "Сохраненный пароль реплики MongoDB", - "connection_modal.secret.saved_mongo_replica_password_description": "Пароль реплики MongoDB уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", - "connection_modal.secret.saved_password": "Сохраненный пароль", - "connection_modal.secret.saved_placeholder": "•••••• (оставьте пустым, чтобы продолжить использовать {{label}})", - "connection_modal.secret.saved_primary_password_description": "Пароль основного подключения уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", - "connection_modal.secret.saved_proxy_password": "Сохраненный пароль прокси", - "connection_modal.secret.saved_proxy_password_description": "Пароль прокси уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", - "connection_modal.secret.saved_redis_password": "Сохраненный пароль Redis", - "connection_modal.secret.saved_redis_password_description": "Пароль Redis уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", - "connection_modal.secret.saved_replica_password": "Сохраненный пароль реплики", - "connection_modal.secret.saved_replica_password_description": "Пароль реплики уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", - "connection_modal.secret.saved_ssh_password": "Сохраненный SSH-пароль", - "connection_modal.secret.saved_ssh_password_description": "SSH-пароль уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", - "connection_modal.secret.saved_tunnel_password": "Сохраненный пароль HTTP Tunnel", - "connection_modal.secret.saved_tunnel_password_description": "Пароль HTTP Tunnel уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", - "connection_modal.section.advanced_connection": "Расширенное подключение", - "connection_modal.section.config_sections": "Разделы конфигурации", - "connection_modal.status.disabled": "Отключено", - "connection_modal.status.enabled": "Включено", - "connection_modal.status.healthy": "Исправен", - "connection_modal.status.unhealthy": "Неисправен", - "connection_modal.switch.off": "Выкл", - "connection_modal.switch.on": "Вкл", - "connection_modal.table.health": "Состояние", - "connection_modal.table.role": "Роль", - "connection_modal.topology.cluster": "Кластер", - "connection_modal.topology.mongodb_replica": "Replica Set", - "connection_modal.topology.mongodb_replica_description": "Подключиться к MongoDB Replica Set и при необходимости обнаружить участников.", - "connection_modal.topology.mongodb_single_description": "Подключиться к одному хосту MongoDB.", - "connection_modal.topology.mysql_replica_description": "Использовать основное подключение и необязательные хосты реплик.", - "connection_modal.topology.mysql_single_description": "Подключиться к одному MySQL-совместимому узлу.", - "connection_modal.topology.primary_replica": "Primary/replica", - "connection_modal.topology.redis_cluster_description": "Подключиться к Redis Cluster и указать дополнительные узлы.", - "connection_modal.topology.redis_single_description": "Подключиться к одному узлу Redis.", - "connection_modal.topology.single": "Один узел", - "connection_modal.validation.address_or_path_required": "Введите адрес хоста или путь к файлу", - "connection_modal.validation.agent_url_required": "Введите URL Agent", - "connection_modal.validation.arthas_tunnel_url_required": "Введите URL Arthas Tunnel", - "connection_modal.validation.dameng_ssl_cert_path_required": "Введите путь к SSL-сертификату Dameng", - "connection_modal.validation.dameng_ssl_key_path_required": "Введите путь к SSL-ключу Dameng", - "connection_modal.validation.diagnostic_bridge_url_required": "Введите URL диагностического моста", - "connection_modal.validation.diagnostic_target_required": "Введите диагностическую цель", - "connection_modal.validation.diagnostic_timeout_range_1_300": "Тайм-аут диагностики должен быть от 1 до 300 секунд", - "connection_modal.validation.endpoint_url_required": "Введите URL Endpoint", - "connection_modal.validation.jvm_access_mode_required": "Выберите хотя бы один режим доступа JVM", - "connection_modal.validation.jvm_preferred_mode_required": "Выберите предпочтительный режим доступа JVM", - "connection_modal.validation.oracle_service_required": "Введите имя сервиса Oracle", - "connection_modal.validation.port_required": "Введите порт", - "connection_modal.validation.proxy_host_required": "Введите хост прокси", - "connection_modal.validation.proxy_port_required": "Введите порт прокси", - "connection_modal.validation.ssh_host_required": "Введите SSH-хост", - "connection_modal.validation.ssh_port_required": "Введите SSH-порт", - "connection_modal.validation.ssh_user_required": "Введите SSH-пользователя", - "connection_modal.validation.timeout_range_1_300": "Тайм-аут должен быть от 1 до 300 секунд", - "connection_modal.validation.tunnel_host_required": "Введите хост HTTP Tunnel", - "connection_modal.validation.tunnel_port_required": "Введите порт HTTP Tunnel", - "connection_modal.validation.username_required": "Введите имя пользователя", - "sidebar.batch_databases": "Пакетные базы данных", - "sidebar.batch_tables": "Пакетные таблицы", - "connection_modal.ssl_hint.mysql_like": "Включите SSL, если MySQL/MariaDB/Doris/Sphinx требует защищенную передачу. Для самоподписанных сертификатов сначала проверьте Preferred или Skip Verify.", - "connection_modal.ssl_hint.dameng": "Для SSL в Dameng нужны пути к клиентскому сертификату и закрытому ключу (sslCertPath / sslKeyPath).", - "connection_modal.ssl_hint.sqlserver": "Для SQL Server в продакшене используйте Required и отключите TrustServerCertificate.", - "connection_modal.ssl_hint.mongodb": "Подключения MongoDB можно защитить через TLS. Если проверка сертификата мешает тесту, сначала используйте Skip Verify.", - "connection_modal.ssl_hint.default": "Предпочитайте Required. Используйте Skip Verify только для тестов или самоподписанных сертификатов.", - "connection_modal.secret.new_value_replaces_saved": "Введено новое значение. При сохранении оно заменит текущие сохраненные данные.", - "connection_modal.badge.current": "Текущий", - "connection_modal.message.driver_not_enabled_with_name": "Драйвер {{name}} не установлен или не включен. Сначала установите или включите его в управлении драйверами.", - "connection_modal.driver.current": "Текущий", - "connection_modal.message.driver_unavailable_title": "Драйвер {{name}} недоступен", - "connection_modal.action.open_driver_manager": "Открыть управление драйверами", - "connection_modal.action.cancel": "Отмена", - "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", - "connection_modal.message.uri_generated": "URI сформирован", - "connection_modal.message.uri_generate_failed": "Операция не удалась", - "connection_modal.message.uri_required": "Заполните обязательное поле", - "connection_modal.message.uri_type_mismatch": "Тип URI не соответствует выбранному источнику данных", - "connection_modal.message.uri_parsed": "URI разобран и перенесен в форму", - "connection_modal.message.uri_parse_failed": "Операция не удалась", - "connection_modal.message.uri_empty_copy": "URI пуст: нечего копировать", - "connection_modal.message.uri_copied": "URI скопирован", - "connection_modal.message.copy_failed": "Операция не удалась", - "connection_modal.message.select_ssh_key_failed": "Не удалось выбрать закрытый ключ SSH: {{error}}", - "connection_modal.error.unknown": "Неизвестная ошибка", - "connection_modal.message.select_database_file_failed": "Не удалось выбрать файл базы данных: {{error}}", - "connection_modal.message.save_backend_unavailable": "Операция не удалась", - "connection_modal.message.save_updated_disconnected": "Конфигурация сохранена (не подключено)", - "connection_modal.message.save_created_disconnected": "Конфигурация сохранена (без подключения).", - "connection_modal.message.save_security_refresh_failed": "Операция не удалась", - "connection_modal.message.save_failed": "Операция не удалась", - "connection_modal.message.test_requires_new_password": "Перед проверкой введите новый пароль подключения.", - "connection_modal.secret.blocking.redis_sentinel": "Перед проверкой введите новый пароль Sentinel или отмените очистку сохраненного пароля Sentinel", - "connection_modal.test.redis_database_list_timeout": "Подключение успешно, но загрузка списка баз данных Redis превысила время ожидания (>{{seconds}} сек.)", - "connection_modal.test.redis_database_list_failure": "Подключение успешно, но не удалось загрузить список баз данных Redis: {{detail}}", - "connection_modal.message.test_requires_new_ssh_password": "Перед проверкой введите новый SSH-пароль.", - "connection_modal.message.test_requires_new_proxy_password": "Перед проверкой введите новый пароль прокси.", - "connection_modal.message.test_requires_new_tunnel_password": "Перед проверкой введите новый пароль HTTP Tunnel.", - "connection_modal.message.test_requires_new_replica_password": "Перед проверкой введите новый пароль реплики.", - "connection_modal.message.test_requires_new_mongo_replica_password": "Перед проверкой введите новый пароль MongoDB Replica Set.", - "connection_modal.message.test_requires_new_mongodb_password": "Перед проверкой введите новый пароль MongoDB.", - "connection_modal.message.driver_not_enabled": "Драйвер не установлен или не включен.", - "connection_modal.message.connection_params_incomplete": "Параметры подключения неполные.", - "connection_modal.message.test_timeout": "Время операции истекло через {{seconds}} с", - "connection_modal.message.database_list_timeout": "Время операции истекло через {{seconds}} с", - "connection_modal.message.no_visible_schema": "Видимые схемы не возвращены.", - "connection_modal.message.no_visible_databases": "Видимые базы данных не возвращены.", - "connection_modal.message.database_list_failed": "Не удалось загрузить список баз данных: {{error}}", - "connection_modal.message.connection_rejected": "Подключение отклонено.", - "connection_modal.message.required_fields_before_test": "Заполните обязательные поля перед проверкой подключения.", - "connection_modal.message.test_failed_detail": "Проверка не удалась: {{detail}}", - "connection_modal.error.unknown_exception": "Неизвестная ошибка", - "connection_modal.message.member_discovery_failed": "Операция не удалась", - "connection_modal.message.member_discovery_success": "Обнаружено участников: {{count}}", - "connection_modal.message.unsupported_jvm_modes": "Выбранный режим доступа JVM не поддерживается", - "connection_modal.message.unsupported_jvm_diagnostic_transport": "Выбранный диагностический транспорт JVM не поддерживается", - "connection_modal.message.dameng_ssl_cert_required": "Заполните обязательное поле", - "connection_modal.message.http_tunnel_host_required": "Заполните обязательное поле", - "connection_modal.message.http_tunnel_port_invalid": "Недопустимый порт HTTP Tunnel", - "connection_modal.message.unsupported_jvm_modes_current": "Это подключение содержит неподдерживаемые режимы доступа JVM", - "connection_modal.group.relational": "Реляционные базы данных", - "connection_modal.group.chinese_databases": "Китайские базы данных", - "connection_modal.step1.group.nosql": "Базы данных NoSQL", - "connection_modal.step1.group.relational": "Реляционные базы данных", - "connection_modal.step1.group.domestic": "Отечественные базы данных", - "connection_modal.step1.group.timeseries": "Базы данных временных рядов", - "connection_modal.step1.group.other": "Другое", - "connection_modal.group.time_series": "Базы данных временных рядов", - "connection_modal.group.other": "Другое", - "connection_modal.db_type.custom": "Пользовательский", - "connection_modal.layout.mysql_compatible": "MySQL-совместимое подключение", - "connection_modal.layout.mongodb": "Подключение MongoDB", - "connection_modal.layout.redis": "Подключение Redis", - "connection_modal.layout.postgres_compatible": "PostgreSQL-совместимое подключение", - "connection_modal.layout.oracle": "Подключение Oracle", - "connection_modal.layout.file": "Подключение к файловой базе данных", - "connection_modal.layout.custom": "Подключение через пользовательский драйвер", - "connection_modal.layout.jvm": "Подключение к среде JVM", - "connection_modal.layout.generic_sql": "Универсальное SQL-подключение", - "connection_modal.db_type_hint.custom": "Подключение с пользовательским драйвером и DSN.", - "connection_modal.db_type_hint.redis": "Подключение к Redis Standalone или Redis Cluster.", - "connection_modal.db_type_hint.mongodb": "Подключение к MongoDB Standalone, Replica Set или SRV-адресам.", - "connection_modal.db_type_hint.file": "Выберите локальный файл базы данных SQLite или DuckDB.", - "connection_modal.db_type_hint.standard": "Введите хост, порт, данные аутентификации и необязательную базу данных.", - "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", - "connection_modal.step1.hint.custom": "Пользовательский драйвер и DSN", - "connection_modal.step1.hint.redis": "Одиночный узел / кластер", - "connection_modal.step1.hint.mongodb": "Одиночный узел / Replica Set", - "connection_modal.step1.hint.oceanBase": "MySQL / Oracle арендатор", - "connection_modal.step1.hint.file": "Подключение к локальному файлу", - "connection_modal.step1.hint.standard": "Стандартная конфигурация подключения", - "connection_modal.step.select_source": "Выбор источника данных", - "connection_modal.step.select_source_description": "Выберите тип создаваемого подключения.", - "connection_modal.message.driver_not_enabled_with_name_short": "Драйвер {{name}} не установлен или не включен. Сначала откройте управление драйверами.", - "connection_modal.section.basic.title": "Основная информация", - "connection_modal.section.basic.description": "Назовите подключение и укажите цель, драйвер и данные аутентификации.", - "connection_modal.field.connection_name": "Имя подключения", - "connection_modal.placeholder.jvm_name": "jvm имя", - "connection_modal.placeholder.connection_name": "подключение имя", - "connection_modal.field.uri": "URI", - "connection_modal.help.uri": "Вставьте или сформируйте URI подключения.", - "connection_modal.action.generate_uri": "Сформировать URI", - "connection_modal.action.parse_uri": "Разобрать URI", - "connection_modal.action.copy_uri": "Копировать URI", - "connection_modal.secret.clear_saved_uri": "Очистить сохраненный URI", - "connection_modal.secret.saved_uri_description": "URI подключения уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", - "connection_modal.field.driver_name": "драйвер имя", - "connection_modal.field.driver.placeholder": "Например: mysql, postgres", - "connection_modal.validation.driver_name_required": "Введите имя драйвера.", - "connection_modal.placeholder.driver_name": "драйвер имя", - "connection_modal.field.dsn": "DSN", - "connection_modal.field.dsn.placeholder": "Например: user:pass@tcp(localhost:3306)/dbname?charset=utf8", - "connection_modal.validation.custom_dsn_required": "Введите строку подключения.", - "connection_modal.validation.custom_dsn_required_when_clearing_saved": "Введите новую строку подключения или отмените очистку сохраненного DSN.", - "connection_modal.secret.clear_saved_dsn": "Очистить сохраненный DSN", - "connection_modal.secret.saved_dsn_description": "DSN уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", - "connection_modal.message.unsupported_jvm_modes_detected": "Обнаружены неподдерживаемые режимы доступа JVM", - "connection_modal.jvm.target_title": "Цель JVM", - "connection_modal.jvm.target_description": "Настройте хост, порт и способ доступа к Endpoint управления JVM.", - "connection_modal.field.host": "Хост", - "connection_modal.validation.jvm_host_required": "Введите хост JVM.", - "connection_modal.field.primary_port": "Основной порт", - "connection_modal.validation.jvm_port_required": "Введите порт JVM.", - "connection_modal.section.network.title": "Сеть и безопасность", - "connection_modal.section.network.description": "Настройте SSL/TLS, SSH Tunnel, прокси и HTTP Tunnel.", - "connection_modal.message.current_driver_not_enabled": "Текущий драйвер не установлен или не включен.", - "connection_modal.section.basic.jvm_description": "Настройте цель JVM, режимы доступа и учетные данные.", - "connection_modal.section.basic.sql_description": "Настройте цель, драйвер, учетные данные и область баз данных.", - "connection_modal.section.network.nav_description": "Настройте сеть и безопасность для этого подключения.", - "connection_modal.section.appearance.title": "Внешний вид", - "connection_modal.section.appearance.description": "Задайте значок и цвет подключения в боковой панели.", - "connection_modal.appearance.icon": "Значок", - "connection_modal.appearance.current_icon": "Текущий значок: {{icon}}", - "connection_modal.db_icon_label.custom": "Пользовательский", - "connection_modal.appearance.color": "Цвет", - "connection_modal.appearance.custom_color": "Пользовательский цвет", - "connection_modal.appearance.preview": "Предпросмотр", - "connection_modal.placeholder.connection_name_fallback": "Имя подключения", - "connection_modal.action.reset_default": "Сбросить по умолчанию", - "connection_modal.message.connection_failed": "Не удалось подключиться", - "connection_modal.action.previous_step": "Назад", - "connection_modal.message.connection_success": "Подключение успешно", - "connection_modal.action.view_reason": "Показать причину", - "connection_modal.action.test": "Проверить подключение", - "connection_modal.action.save": "Сохранить", - "connection_modal.title.select_type": "Выберите тип источника данных", - "connection_modal.title.select_type_description": "Выберите один из поддерживаемых типов источников данных.", - "connection_modal.title.edit": "Изменить подключение", - "connection_modal.title.edit_description": "Измените конфигурацию подключения {{type}}.", - "connection_modal.title.create": "Новое подключение {{type}}", - "connection_modal.title.create_description": "Введите и сохраните конфигурацию подключения.", - "connection_modal.test_error.title": "Сведения об ошибке проверки подключения", - "connection_modal.test_error.description": "Просмотрите полный текст ошибки, возвращенной backend.", - "connection_modal.action.close": "Закрыть", - "connection_modal.test_error.empty": "Нет сведений об ошибке", - "sidebar.message.duplicate_backend_unavailable": "Дублирование подключений недоступно в этой сборке.", - "sidebar.message.duplicate_empty_result": "Дублированное подключение не было возвращено.", - "sidebar.message.duplicated_connection": "Подключение {{name}} продублировано.", - "sidebar.message.duplicate_failed": "Не удалось дублировать подключение.", - "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "Не удалось проверить JVM Provider: {{error}}. Вход в режим расширенной диагностики остается доступным.", - "sidebar.message.jvm_provider_probe_failed": "Не удалось проверить провайдеры JVM: {{error}}", - "sidebar.error.unknown": "Неизвестная ошибка", - "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "Во время проверки JVM Provider возникло исключение: {{error}}. Вход в режим расширенной диагностики остается доступным.", - "sidebar.message.jvm_provider_probe_exception": "Проверка провайдеров JVM завершилась ошибкой: {{error}}", - "sidebar.message.connection_failed": "Ошибка подключения: {{error}}", - "sidebar.message.load_jvm_resources_failed": "Не удалось загрузить ресурсы JVM: {{error}}", - "sidebar.message.load_tables_failed": "Не удалось загрузить объекты: {{error}}", - "sidebar.message.table_pinned": "Таблица закреплена", - "sidebar.message.table_unpinned": "Таблица откреплена", - "sidebar.message.table_structure_copied": "Структура таблицы скопирована.", - "sidebar.message.exporting_table_format": "Экспорт {{table}} в формате {{format}}...", - "sidebar.message.export_success": "Экспорт выполнен.", - "sidebar.message.export_failed": "Ошибка экспорта: {{error}}", - "sidebar.message.backing_up_database": "Создается резервная копия базы данных {{database}}...", - "sidebar.message.exporting_database_schema": "Экспортируется структура базы данных {{database}}...", - "sidebar.message.exporting_database_backup": "Создается резервная копия {{database}} (структура и данные)...", - "sidebar.message.schema_export_target_missing": "Целевая схема не найдена, экспорт невозможен.", - "sidebar.message.exporting_schema_structure": "Экспортируется структура схемы {{schema}}...", - "sidebar.message.exporting_schema_backup": "Создается резервная копия схемы {{schema}} (структура и данные)...", - "sidebar.message.export_tables_same_database_required": "Выберите таблицы из одной базы данных.", - "sidebar.message.backing_up_selected_tables": "Создается резервная копия выбранных таблиц: {{count}}...", - "sidebar.message.exporting_selected_table_schema": "Экспортируется структура выбранных таблиц: {{count}}...", - "sidebar.message.load_database_list_failed": "Не удалось загрузить базы данных: {{error}}", - "sidebar.message.load_table_list_failed": "Не удалось загрузить таблицы: {{error}}", - "sidebar.message.locate_external_sql_file_not_found": "SQL-файл не найден во внешних SQL-каталогах: {{path}}", - "sidebar.message.locate_connection_not_found_for_object": "Подключение для текущего объекта не найдено", - "sidebar.message.locate_connection_not_in_tree": "Текущее подключение не найдено в левом дереве", - "sidebar.message.locate_database_loading": "Узел базы данных ещё загружается: {{database}}. Повторите попытку позже", - "sidebar.message.locate_database_not_found": "База данных не найдена в левом дереве: {{database}}", - "sidebar.message.locate_object_loading": "Объекты базы данных для {{object}} в {{database}} ещё загружаются. Повторите попытку позже", - "sidebar.message.locate_object_not_found": "{{object}} не найден в левом дереве: {{name}}. Обновите узел базы данных и повторите попытку", - "sidebar.message.select_object_required": "Выберите хотя бы один объект.", - "sidebar.message.backing_up_selected_objects": "Создается резервная копия выбранных объектов: {{count}}...", - "sidebar.message.exporting_selected_object_data": "Экспортируются данные {{format}} для выбранных объектов: {{count}}...", - "sidebar.message.exporting_selected_object_schema": "Экспортируется структура выбранных объектов: {{count}}...", - "sidebar.message.export_success_skipped_views": "Экспорт завершен. Представления пропущены при экспорте данных: {{count}}.", - "sidebar.modal.confirm_clear_selected_tables.title": "Подтвердите очистку выбранных таблиц", - "sidebar.modal.confirm_clear_selected_tables.content": "Очистить данные выбранных объектов в {{connection}} / {{database}}? Это действие нельзя отменить.", - "sidebar.action.continue": "Продолжить", - "sidebar.action.cancel": "Отмена", - "sidebar.action.delete": "Удалить", - "sidebar.message.clearing_selected_tables": "Очищаются выбранные таблицы: {{count}}...", - "sidebar.message.clear_success": "Очистка завершена.", - "sidebar.message.clear_failed": "Ошибка очистки: {{error}}", - "sidebar.message.select_database_required": "Выберите хотя бы одну базу данных.", - "sidebar.message.database_export_success": "{{database}} экспортирована.", - "sidebar.message.database_export_failed": "Не удалось экспортировать {{database}}: {{error}}", - "sidebar.message.connection_config_not_found": "Конфигурация подключения не найдена.", - "sidebar.sql_file_exec.title": "Запустить внешний SQL-файл", - "sidebar.message.read_file_failed": "Не удалось прочитать файл: {{error}}", - "sidebar.message.select_connection_or_database_first": "Сначала выберите подключение или базу данных.", - "sidebar.message.schema_create_unsupported": "Эта база данных не поддерживает создание schema.", - "sidebar.message.schema_target_missing": "Выберите базу данных для создания schema.", - "sidebar.message.schema_created": "schema создана.", - "sidebar.message.operation_create_failed": "Не удалось создать: {{error}}", - "sidebar.sql_file.default_name": "SQL-файл", - "sidebar.message.sql_file_context_incomplete": "Контекст SQL-файла неполный.", - "sidebar.message.sql_file_path_incomplete": "Путь к SQL-файлу неполный, открыть файл невозможно.", - "sidebar.message.select_host_before_large_sql_file": "Выберите Host перед запуском большого SQL-файла.", - "sidebar.message.read_sql_file_failed": "Не удалось прочитать SQL-файл: {{error}}", - "sidebar.message.external_sql_file_parent_missing": "Не найден каталог для создания SQL-файла.", - "sidebar.message.external_sql_file_rename_target_missing": "Не найден SQL-файл для переименования.", - "sidebar.message.external_sql_file_delete_target_missing": "SQL-файл для удаления не найден.", - "sidebar.message.external_sql_directory_parent_missing": "Не найдено место для создания каталога.", - "sidebar.message.external_sql_directory_rename_target_missing": "Не найден каталог для переименования.", - "sidebar.message.external_sql_directory_delete_target_missing": "SQL-каталог для удаления не найден.", - "sidebar.message.sql_file_name_required": "Имя SQL-файла обязательно.", - "sidebar.message.sql_directory_name_required": "Имя каталога обязательно.", - "sidebar.message.create_sql_file_failed": "Не удалось создать SQL-файл: {{error}}", - "sidebar.message.sql_file_created": "SQL-файл создан.", - "sidebar.message.rename_sql_file_failed": "Не удалось переименовать SQL-файл: {{error}}", - "sidebar.message.sql_file_renamed": "SQL-файл переименован.", - "sidebar.message.delete_sql_file_failed": "Не удалось удалить SQL-файл: {{error}}", - "sidebar.message.sql_file_deleted": "SQL-файл удален.", - "sidebar.message.create_sql_directory_failed": "Не удалось создать каталог: {{error}}", - "sidebar.message.sql_directory_created": "Каталог создан.", - "sidebar.message.rename_sql_directory_failed": "Не удалось переименовать каталог: {{error}}", - "sidebar.message.external_sql_directory_rename_sync_failed": "Каталог переименован, но список внешних SQL-каталогов не удалось синхронизировать. Добавьте каталог заново.", - "sidebar.message.sql_directory_renamed": "Каталог переименован.", - "sidebar.message.delete_sql_directory_failed": "Не удалось удалить SQL-каталог: {{error}}", - "sidebar.message.sql_directory_deleted": "SQL-каталог удален.", - "sidebar.message.add_sql_directory_database_required": "Выберите базу данных перед добавлением SQL-каталога.", - "sidebar.message.select_sql_directory_failed": "Не удалось выбрать SQL-каталог: {{error}}", - "sidebar.message.sql_directory_path_invalid": "Путь к SQL-каталогу недействителен.", - "sidebar.sql_directory.default_name": "SQL-каталог", - "sidebar.message.external_sql_directory_added": "SQL-каталог добавлен.", - "sidebar.message.external_sql_directory_not_found": "SQL-каталог не найден.", - "sidebar.message.external_sql_directory_removed": "SQL-каталог удален.", - "sidebar.message.external_sql_directory_context_missing": "Контекст SQL-каталога отсутствует.", - "sidebar.message.external_sql_directory_refreshed": "SQL-каталог обновлен.", - "sidebar.message.database_created": "База данных создана.", - "sidebar.message.create_failed": "Не удалось создать: {{error}}", - "sidebar.modal.confirm_delete_database.title": "Удалить базу данных", - "sidebar.modal.confirm_delete_database.content": "Удалить {{name}}? Это действие нельзя отменить.", - "sidebar.modal.confirm_delete_sql_file.title": "Удалить SQL-файл", - "sidebar.modal.confirm_delete_sql_file.content": "Удалить \"{{name}}\"? Это удалит локальный файл с диска без возможности восстановления.", - "sidebar.modal.confirm_delete_sql_directory.title": "Удалить SQL-каталог", - "sidebar.modal.confirm_delete_sql_directory.content": "Удалить \"{{name}}\"? Это удалит локальный каталог с диска; удалить можно только пустой каталог.", - "sidebar.modal.confirm_delete_table.title": "Удалить таблицу", - "sidebar.modal.confirm_delete_table.content": "Удалить {{name}}? Это действие нельзя отменить.", - "sidebar.modal.confirm_table_data_action.title": "Подтвердите {{action}}", - "sidebar.modal.confirm_table_data_action.content": "Выполнить {{action}} для {{table}}? Это действие нельзя отменить.", - "sidebar.modal.confirm_delete_view.title": "Удалить представление", - "sidebar.modal.confirm_delete_view.content": "Удалить {{name}}? Это действие нельзя отменить.", - "sidebar.modal.confirm_delete_routine.title": "Удалить {{type}}", - "sidebar.modal.confirm_delete_routine.content": "Удалить {{type}} {{name}}? Это действие нельзя отменить.", - "sidebar.search.scope.smart": "Умный", - "sidebar.search.scope_title": "Область поиска", - "sidebar.search.scope_description": "Выберите, где должен искать сайдбар.", - "sidebar.badge.recommended": "Рекомендуется", - "sidebar.search.scope.smart_description": "Автоматически сужает поиск по выбранному узлу.", - "sidebar.search.manual_scope": "Ручная область", - "sidebar.search.multi_select_supported": "Можно выбрать несколько областей", - "sidebar.search.scope_hint": "В умном режиме поиск учитывает контекст и ищет по именам, хостам, базам данных и объектам.", - "sidebar.modal.confirm_delete.title": "Подтвердите удаление", - "sidebar.modal.confirm_delete_tag.content": "Удалить группу \"{{name}}\"? Подключения внутри нее не будут удалены.", - "sidebar.menu.edit_connection": "изменить подключение", - "sidebar.menu.delete_connection": "удалить подключение", - "sidebar.modal.confirm_delete_connection.content": "Удалить {{name}}?", - "sidebar.message.delete_connection_backend_unavailable": "Удаление подключений недоступно в этой сборке.", - "sidebar.message.connection_deleted": "Подключение удалено.", - "sidebar.message.delete_connection_failed": "Не удалось удалить подключение.", - "sidebar.modal.confirm_delete_saved_query.content": "Удалить сохраненный запрос \"{{name}}\"? Это действие нельзя отменить.", - "sidebar.search.placeholder": "Поиск...", - "sidebar.punctuation.list_separator": ", ", - "sidebar.command_search.label": "Искать таблицы, подключения, действия", - "sidebar.command_search.placeholder": "Искать таблицы, подключения, действия... или спросить AI", - "sidebar.command_search.sync_to_filter_tooltip": "Синхронизировать ввод с левым фильтром", - "sidebar.command_search.sync_to_filter_aria": "Синхронизировать с левым фильтром", - "sidebar.command_search.reset_filter": "Сбросить фильтр боковой панели", - "sidebar.command_search.no_synced_filter": "Нет синхронизированного фильтра боковой панели", - "sidebar.command_search.no_filter_content": "Нет текста фильтра", - "sidebar.command_search.object_kind.all": "Все", - "sidebar.command_search.object_kind.tables": "Таблицы", - "sidebar.command_search.object_kind.views": "Представления", - "sidebar.command_search.object_kind.routines": "Подпрограммы", - "sidebar.command_search.object_kind.events": "События", - "sidebar.command_search.object_kind.filter_aria": "Фильтр объектов", - "sidebar.command_search.scope.smart": "Умный", - "sidebar.command_search.scope.object": "Объекты таблиц", - "sidebar.command_search.scope.database": "База данных", - "sidebar.command_search.scope.host": "Host", - "sidebar.command_search.scope.tag": "Теги", - "sidebar.command_search.scope.summary_smart": "Умный", - "sidebar.command_search.scope.title": "Область поиска", - "sidebar.command_search.scope.description": "\"Умный\" автоматически подбирает наиболее вероятные совпадения; ручной режим позволяет комбинировать измерения фильтрации.", - "sidebar.command_search.scope.recommended": "Рекомендуется", - "sidebar.command_search.scope.smart_help": "Подходит для ежедневного поиска: автоматически охватывает имена, базы данных, Host и теги.", - "sidebar.command_search.scope.manual_title": "Ручная область", - "sidebar.command_search.scope.multi_select": "Можно выбрать несколько", - "sidebar.command_search.scope.manual_help": "Умный режим взаимоисключается с другими пунктами. Если точно известно, что нужно искать объекты, базы данных, Host или теги, переключитесь на ручную область, чтобы уменьшить шум в результатах.", - "sidebar.command_search.scope.tooltip": "Область поиска: {{scope}}", - "sidebar.command_search.scope.compact_smart": "Умно", - "sidebar.search.scope_tooltip": "Текущая область поиска: {{scope}}", - "sidebar.search.scope.smart_short": "Умный", - "sidebar.rail.object_actions": "Быстрые действия в области объектов", - "sidebar.rail.system_actions": "Системные действия", - "sidebar.action.new_group": "Новая группа", - "sidebar.action.batch_tables": "Пакетные операции с таблицами", - "sidebar.action.batch_databases": "Пакетные операции с базами данных", - "sidebar.action.locate_current_table": "Найти текущую открытую таблицу", - "sidebar.action.pin_table": "Закрепить таблицу", - "sidebar.action.unpin_table": "Открепить таблицу", - "sidebar.status.pinned": "Закреплено", - "sidebar.v2_table_menu.meta.rows_empty": "— строк", - "sidebar.v2_table_menu.meta.rows": "{{count}} строк", - "sidebar.v2_table_menu.meta.idle": "Нажмите обновить, чтобы загрузить статистику", - "sidebar.v2_table_menu.meta.loading": "Загрузка статистики таблицы...", - "sidebar.v2_table_menu.meta.unavailable": "Статистика таблицы недоступна", - "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} данные · {{indexes}} индексы", - "sidebar.v2_table_menu.open_data": "Просмотреть данные", - "sidebar.v2_table_menu.design_table_detail": "столбцы / индексы / внешние ключи", - "sidebar.v2_table_menu.open_in_new_tab": "Открыть в новой вкладке", - "sidebar.v2_table_menu.metadata_section": "Метаданные", - "sidebar.v2_table_menu.view_in_er": "Показать в ER-диаграмме", - "sidebar.v2_table_menu.copy_section": "Копировать", - "sidebar.v2_table_menu.copy_table_name": "Копировать имя таблицы", - "sidebar.copy_object_name.label.table": "Имя таблицы", - "sidebar.copy_object_name.label.view": "Имя представления", - "sidebar.copy_object_name.label.materialized_view": "Имя материализованного представления", - "sidebar.copy_object_name.label.event": "Имя события", - "sidebar.copy_object_name.empty": "{{label}} пусто, копирование невозможно", - "sidebar.copy_object_name.copied": "{{label}} скопировано в буфер обмена", - "sidebar.copy_object_name.failed": "Не удалось скопировать {{label}}: {{error}}", - "sidebar.v2_table_menu.copy_table_as_insert": "Копировать всю таблицу как {{keyword}}", - "sidebar.v2_table_menu.maintenance_section": "Обслуживание", - "sidebar.v2_table_menu.rename_compact": "Переименовать...", - "sidebar.v2_table_menu.new_rollup": "Новый {{keyword}}", - "sidebar.v2_table_menu.backup_sql_dump": "Резервная копия · {{keyword}}", - "sidebar.v2_table_menu.refresh_stats": "Обновить статистику", - "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", - "sidebar.v2_table_menu.open_export_workbench": "Открыть рабочую область экспорта…", - "sidebar.v2_table_menu.truncate_table": "Усечь таблицу", - "sidebar.v2_table_menu.ai_explain_table": "Объяснить эту таблицу с помощью AI", - "sidebar.v2_table_menu.ai_generate_query": "Сгенерировать запрос с помощью AI", - "sidebar.v2_table_group_menu.title": "Таблицы", - "sidebar.v2_table_group_menu.current_database": "Текущая база данных", - "sidebar.v2_table_group_menu.sort_name": "имени", - "sidebar.v2_table_group_menu.sort_frequency": "частоте использования", - "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} таблиц · сортировка по {{sort}}", - "sidebar.message.locate_current_table_unavailable": "В текущей вкладке нет таблицы, которую можно найти", - "sidebar.locate.object.table": "Таблица", - "sidebar.locate.object.view": "Представление", - "sidebar.locate.object.materialized_view": "Материализованное представление", - "sidebar.locate.object.routine": "Функция/процедура", - "sidebar.locate.object.trigger": "Триггер", - "sidebar.active_connection.current_host_database": "Текущий Host и база данных", - "sidebar.active_connection.no_database_selected": "База данных не выбрана", - "sidebar.active_connection.no_host_selected": "Host не выбран", - "sidebar.active_connection.actions": "Действия с подключением", - "sidebar.modal.tag.edit_title": "Изменить группу", - "sidebar.modal.tag.create_title": "Создать группу", - "sidebar.modal.tag.edit_description": "Обновите имя группы и входящие в нее подключения.", - "sidebar.modal.tag.create_description": "Создайте группу для организации подключений.", - "sidebar.field.tag_name": "Имя группы", - "sidebar.validation.tag_name_required": "Введите имя группы.", - "sidebar.placeholder.tag_name": "Имя группы", - "sidebar.field.select_connections": "Выберите подключения", - "sidebar.modal.create_database.title": "Создать базу данных", - "sidebar.field.database_name": "Имя базы данных", - "sidebar.validation.name_required": "Введите имя.", - "sidebar.modal.rename_database.title": "Переименовать базу данных: {{name}}", - "sidebar.field.new_database_name": "Новое имя базы данных", - "sidebar.validation.new_database_name_required": "Введите новое имя базы данных.", - "sidebar.field.schema_name": "Имя schema", - "sidebar.validation.schema_name_required": "Введите имя schema.", - "sidebar.modal.rename_table.title": "Переименовать таблицу: {{name}}", - "sidebar.field.new_table_name": "Новое имя таблицы", - "sidebar.validation.new_table_name_required": "Введите новое имя таблицы.", - "sidebar.modal.rename_view.title": "Переименовать представление: {{name}}", - "sidebar.field.new_view_name": "Новое имя представления", - "sidebar.validation.new_view_name_required": "Введите новое имя представления.", - "sidebar.modal.batch_tables.title": "Пакетные операции с таблицами", - "sidebar.modal.batch_tables.description": "Выберите таблицы и представления, затем экспортируйте или очистите их одной операцией.", - "sidebar.action.clear_tables": "Очистить таблицы", - "sidebar.action.export_schema": "Экспортировать структуру", - "sidebar.action.export_data_only": "Экспортировать только данные", - "sidebar.action.backup_schema_data": "Создать резервную копию структуры и данных", - "sidebar.field.select_connection": "Подключение", - "sidebar.placeholder.select_connection": "Выберите подключение", - "sidebar.field.select_database": "База данных", - "sidebar.placeholder.select_connection_first": "Сначала выберите подключение", - "sidebar.modal.batch_tables.selection_hint": "Выберите таблицы или представления для этой пакетной операции.", - "sidebar.placeholder.filter_table_view": "Фильтр таблиц и представлений", - "sidebar.filter.all_objects": "Все объекты", - "sidebar.filter.tables_only": "Только таблицы", - "sidebar.filter.views_only": "Только представления", - "sidebar.filter.scope_filtered": "Отфильтрованные результаты", - "sidebar.filter.scope_all": "Все результаты", - "sidebar.batch.filtered_count": "Показано объектов: {{filtered}} / {{total}}", - "sidebar.action.select_all": "Выбрать все", - "sidebar.action.clear_selection": "Снять выбор", - "sidebar.action.invert_selection": "Инвертировать выбор", - "sidebar.batch.selected_objects": "Выбрано объектов: {{selected}} / {{total}}", - "sidebar.modal.batch_databases.title": "Пакетные операции с базами данных", - "sidebar.modal.batch_databases.description": "Выберите базы данных и экспортируйте схемы или полные резервные копии.", - "sidebar.action.export_database_schema_count": "Экспортировать структуру баз данных ({{count}})", - "sidebar.action.backup_database_count": "Создать резервные копии баз данных ({{count}})", - "sidebar.modal.batch_databases.selection_hint": "Выберите базы данных из выбранного подключения.", - "sidebar.batch.selected_databases": "Выбрано баз данных: {{selected}} / {{total}}", - "sidebar.sql_file_exec.cancel": "Отменить выполнение", - "sidebar.action.close": "Закрыть", - "sidebar.sql_file_exec.file_size": "Размер файла: ", - "sidebar.sql_file_exec.status_label": "Статус: ", - "sidebar.sql_file_exec.status.running": "Выполняется", - "sidebar.sql_file_exec.status.done": "Готово", - "sidebar.sql_file_exec.status.cancelled": "Отменено", - "sidebar.sql_file_exec.status.error": "Ошибка", - "sidebar.sql_file_exec.executed_label": "Выполнено: ", - "sidebar.sql_file_exec.rows_separator": " строк | Ошибок: ", - "sidebar.sql_file_exec.rows_suffix": " строк", - "connection_modal.config_section.identity.title": "Идентификация", - "connection_modal.config_section.identity.description": "Настройте Идентификация.", - "connection_modal.config_section.uri.title": "URI подключения", - "connection_modal.config_section.uri.description": "Введите, сформируйте или разберите URI подключения.", - "connection_modal.config_section.target.title": "Адрес назначения", - "connection_modal.config_section.target.description": "Настройте Адрес назначения.", - "connection_modal.config_section.fileTarget.title": "Файловая база данных", - "connection_modal.config_section.fileTarget.description": "Настройте Файловая база данных.", - "connection_modal.config_section.connectionMode.title": "Режим подключения", - "connection_modal.config_section.connectionMode.description": "Настройте Режим подключения.", - "connection_modal.config_section.mongoDiscovery.title": "Обнаружение MongoDB", - "connection_modal.config_section.mongoDiscovery.description": "Настройте Обнаружение MongoDB.", - "connection_modal.config_section.replica.title": "Реплики", - "connection_modal.config_section.replica.description": "Настройте Реплики.", - "connection_modal.config_section.service.title": "Сервис и база данных", - "connection_modal.config_section.service.description": "Настройте Сервис и база данных.", - "connection_modal.config_section.mongoPolicy.title": "Политика MongoDB", - "connection_modal.config_section.mongoPolicy.description": "Настройте Политика MongoDB.", - "connection_modal.config_section.credentials.title": "Учетные данные", - "connection_modal.config_section.credentials.description": "Настройте Учетные данные.", - "connection_modal.config_section.databaseScope.title": "Область баз данных", - "connection_modal.config_section.databaseScope.description": "Настройте Область баз данных.", - "connection_modal.config_section.customDriver.title": "Пользовательский драйвер", - "connection_modal.config_section.customDriver.description": "Настройте Пользовательский драйвер.", - "connection_modal.config_section.customDsn.title": "Пользовательский DSN", - "connection_modal.config_section.customDsn.description": "Настройте Пользовательский DSN.", - "connection_modal.config_section.jvmRuntime.title": "Среда JVM", - "connection_modal.config_section.jvmRuntime.description": "Настройте Среда JVM.", - "connection_modal.field.password": "Пароль", - "sidebar.menu.refresh": "Обновить", - "sidebar.search.scope.object": "Объект", - "sidebar.search.scope.database": "База данных", - "sidebar.search.scope.host": "Хост", - "sidebar.search.scope.tag": "Тег", - "sidebar.tree.saved_queries": "Сохраненные запросы", - "sidebar.tree.untitled_query": "Запрос без имени", - "sidebar.tree.default_database": "База данных по умолчанию", - "sidebar.tree.unknown_connection": "Неизвестное подключение", - "sidebar.tree.unmatched_saved_queries": "Несопоставленные", - "sidebar.tree.all_saved_queries": "Все сохраненные запросы", - "sidebar.tree.default_schema": "Схема по умолчанию", - "sidebar.object_group.tables": "Таблицы", - "sidebar.object_group.views": "Представления", - "sidebar.object_group.routines": "Функции и процедуры", - "sidebar.object_group.triggers": "Триггеры", - "sidebar.object_group.events": "События", - "sidebar.object_group.materialized_views": "Материализованные представления", - "sidebar.table_folder.columns": "Столбцы", - "sidebar.table_folder.indexes": "Индексы", - "sidebar.table_folder.foreign_keys": "Внешние ключи", - "sidebar.table_folder.triggers": "Триггеры", - "sidebar.object.view": "Представление", - "sidebar.object.function": "Функция", - "sidebar.object.procedure": "Процедура", - "sidebar.table_action.truncate.label": "Очистить таблицу через TRUNCATE", - "sidebar.table_action.truncate.progress": "Выполняется TRUNCATE", - "sidebar.table_action.clear.label": "Очистить таблицу", - "sidebar.table_action.clear.progress": "Очищается", - "sidebar.tab.table_structure": "Структура таблицы ({{table}})", - "sidebar.tab.design_table": "Проектирование таблицы ({{table}})", - "sidebar.tab.new_table": "Новая таблица - {{database}}", - "sidebar.tab.table_overview": "Обзор таблицы - {{database}}{{schema}}", - "sidebar.tab.trigger": "Триггер: {{name}}", - "sidebar.tab.event": "Событие: {{name}}", - "sidebar.tab.edit_event": "Изменить событие: {{name}}", - "sidebar.tab.materialized_view_definition": "Материализованное представление: {{name}}", - "sidebar.tab.view_definition": "Представление: {{name}}", - "sidebar.tab.edit_view": "Изменить представление: {{name}}", - "sidebar.tab.create_view": "Новое представление", - "sidebar.tab.routine_definition": "{{type}}: {{name}}", - "sidebar.tab.edit_routine": "Изменить {{type}}: {{name}}", - "sidebar.tab.create_function": "Новая функция", - "sidebar.tab.create_procedure": "Новая процедура", - "sidebar.tab.new_query": "Новый запрос", - "sidebar.tab.new_query_database": "Новый запрос ({{database}})", - "sidebar.tab.redis_command": "Команда - {{database}}", - "sidebar.tab.redis_monitor": "Мониторинг - {{database}}", - "tab_manager.menu.close_all": "Закрыть все вкладки", - "tab_manager.menu.close_left": "Закрыть вкладки слева", - "tab_manager.menu.close_other": "Закрыть остальные вкладки", - "tab_manager.menu.close_right": "Закрыть вкладки справа", - "tab_manager.close_aria": "Закрыть {{title}}", - "tab_manager.kind_badge.query": "SQL", - "tab_manager.kind_badge.table": "Таблица", - "tab_manager.kind_badge.design": "Дизайн", - "tab_manager.kind_badge.table_overview": "БД", - "tab_manager.kind_badge.redis": "Redis", - "tab_manager.kind_badge.jvm": "JVM", - "tab_manager.kind_badge.trigger": "Триггер", - "tab_manager.kind_badge.materialized_view": "MV", - "tab_manager.kind_badge.view": "Вид", - "tab_manager.kind_badge.event": "Событие", - "tab_manager.kind_badge.routine": "Функция", - "tab_manager.kind_badge.table_export": "Экспорт", - "tab_manager.kind_badge.sql_analysis": "Анализ", - "tab_manager.kind_badge.fallback": "Вкладка", - "tab_manager.empty.action.open_ai": "Открыть AI", - "tab_manager.empty.aria.start_workbench": "Стартовая рабочая область GoNavi", - "tab_manager.empty.eyebrow.connections": "{{count}} подключений", - "tab_manager.empty.eyebrow.workbench": "РАБОЧАЯ ОБЛАСТЬ", - "tab_manager.empty.hero.description": "Выберите источник данных, откройте редактор запросов или продолжите с контекстом в AI-панели.", - "tab_manager.empty.hero.title": "Подключения, запросы и анализ начинаются в одной рабочей области.", - "tab_manager.empty.quick.ai_assist.description": "Объяснение SQL, генерация запросов и проверка результатов", - "tab_manager.empty.quick.ai_assist.title": "Открыть AI-помощь", - "tab_manager.empty.quick.aria": "Быстрый рабочий процесс", - "tab_manager.empty.quick.configure_source.description": "Настроить URI, SSH, прокси и драйвер в одном месте", - "tab_manager.empty.quick.configure_source.title": "Настроить источник данных", - "tab_manager.empty.quick.heading": "Быстрый рабочий процесс", - "tab_manager.empty.quick.sql_workspace.description": "Открыть редактор запросов с текущим контекстом", - "tab_manager.empty.quick.sql_workspace.title": "Запустить рабочую область SQL", - "tab_manager.hover.fallback.database_not_specified": "Не указано", - "tab_manager.hover.fallback.host_not_configured": "Не настроено", - "tab_manager.hover.fallback.unbound_connection": "Непривязанное подключение", - "tab_manager.hover.kind.design": "Дизайн таблицы", - "tab_manager.hover.kind.event": "Событие", - "tab_manager.hover.kind.fallback": "Вкладка", - "tab_manager.hover.kind.jvm_audit": "Аудит JVM", - "tab_manager.hover.kind.jvm_diagnostic": "Диагностика JVM", - "tab_manager.hover.kind.jvm_monitoring": "Мониторинг JVM", - "tab_manager.hover.kind.jvm_overview": "Обзор JVM", - "tab_manager.hover.kind.jvm_resource": "Ресурс JVM", - "tab_manager.hover.kind.materialized_view": "Материализованное представление", - "tab_manager.hover.kind.query": "SQL-запрос", - "tab_manager.hover.kind.redis_command": "Команда Redis", - "tab_manager.hover.kind.redis_keys": "Redis Key", - "tab_manager.hover.kind.redis_monitor": "Монитор Redis", - "tab_manager.hover.kind.routine": "Функция / процедура", - "tab_manager.hover.kind.table": "Данные таблицы", - "tab_manager.hover.kind.table_export": "Рабочая область экспорта", - "tab_manager.hover.kind.sql_analysis": "Рабочая область анализа SQL", - "tab_manager.hover.kind.table_overview": "Обзор таблицы", - "tab_manager.hover.kind.trigger": "Триггер", - "tab_manager.hover.kind.view": "Представление", - "tab_manager.hover.label.connection": "Подключение", - "tab_manager.hover.label.database": "База данных", - "tab_manager.hover.label.object": "Объект", - "tab_manager.hover.label.type": "Тип", - "sidebar.message.no_visible_databases": "Видимые базы данных или схемы не возвращены. Проверьте права учетной записи или обновите через контекстное меню.", - "sidebar.message.visual_new_table_unsupported": "Этот источник данных пока не поддерживает визуальное создание таблиц.", - "sidebar.message.jvm_resources_backend_unavailable": "Просмотр ресурсов JVM недоступен в этой сборке.", - "sidebar.message.external_sql_directory_read_failed": "Не удалось прочитать SQL-каталог {{name}}: {{error}}", - "sidebar.message.sphinx_unsupported_objects": "Этот экземпляр Sphinx не предоставляет следующие возможности объектов: {{objects}}. Применен режим совместимости.", - "sidebar.message.sidebar_filter_sync_enabled": "Синхронизация левого фильтра включена.", - "sidebar.message.sidebar_filter_sync_disabled": "Синхронизация левого фильтра отключена.", - "sidebar.message.sidebar_filter_reset": "Фильтр боковой панели сброшен.", - "sidebar.message.database_name_required": "Введите имя базы данных.", - "sidebar.message.database_name_unchanged": "Имя базы данных не изменилось.", - "sidebar.message.database_renamed": "База данных переименована.", - "sidebar.message.database_deleted": "База данных удалена.", - "sidebar.message.table_name_required": "Введите имя таблицы.", - "sidebar.message.table_name_unchanged": "Имя таблицы не изменилось.", - "sidebar.message.table_renamed": "Таблица переименована.", - "sidebar.message.table_deleted": "Таблица удалена.", - "sidebar.message.view_name_required": "Введите имя представления.", - "sidebar.message.view_name_unchanged": "Имя представления не изменилось.", - "sidebar.message.view_deleted": "Представление удалено.", - "sidebar.message.view_renamed": "Представление переименовано.", - "sidebar.message.routine_deleted": "{{type}} удалена.", - "sidebar.message.rename_failed": "Не удалось переименовать: {{error}}", - "sidebar.message.delete_failed": "Не удалось удалить: {{error}}", - "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", - "sidebar.message.table_data_action_success": "{{action}} завершено.", - "sidebar.message.table_data_action_failed": "{{action}} завершилось ошибкой: {{error}}", - "sidebar.message.disconnected": "Отключено.", - "sidebar.message.database_closed": "База данных закрыта.", - "sidebar.message.saved_query_deleted": "Запрос удален.", - "sidebar.message.saved_query_name_unchanged": "Имя запроса не изменилось.", - "sidebar.message.saved_query_renamed": "Запрос переименован.", - "sidebar.menu.sort_by_name": "Сортировать по имени", - "sidebar.menu.sort_by_frequency": "Сортировать по частоте использования", - "sidebar.menu.create_view": "Новое представление", - "sidebar.menu.create_function": "Новая функция", - "sidebar.menu.create_procedure": "Новая процедура", - "sidebar.menu.edit_tag": "Изменить группу", - "sidebar.menu.delete_tag": "Удалить группу", - "sidebar.menu.new_command_window": "Новое командное окно", - "sidebar.menu.redis_monitor": "Redis мониторинг", - "sidebar.menu.duplicate_connection": "Дублировать подключение", - "sidebar.menu.disconnect": "Отключить", - "sidebar.menu.move_out_of_tag": "Убрать из группы", - "sidebar.menu.create_database": "Новая база данных", - "sidebar.menu.new_query": "Новый запрос", - "sidebar.menu.move_to_tag": "Переместить в группу", - "sidebar.menu.browse_keys": "Просмотреть ключи", - "sidebar.menu.create_table": "Новая таблица", - "sidebar.menu.rename_database": "Переименовать базу данных", - "sidebar.menu.danger_operations": "Опасные операции", - "sidebar.menu.delete_database": "Удалить базу данных", - "sidebar.menu.export_all_table_schema_sql": "Экспортировать структуру всех таблиц в SQL", - "sidebar.menu.backup_all_tables_sql": "Создать резервную копию всех таблиц (схема + данные SQL)", - "sidebar.menu.close_database": "Закрыть базу данных", - "sidebar.menu.browse_view_data": "Просмотреть данные представления", - "sidebar.menu.view_definition": "Определение представления", - "sidebar.menu.browse_materialized_view_data": "Просмотреть данные материализованного представления", - "sidebar.menu.materialized_view_definition": "Определение материализованного представления", - "sidebar.menu.view_object_definition": "Показать определение", - "sidebar.menu.edit_view": "Редактировать представление", - "sidebar.menu.rename_view": "Переименовать представление", - "sidebar.menu.delete_view": "Удалить представление", - "sidebar.menu.view_routine_definition": "Показать определение", - "sidebar.menu.edit_definition": "Редактировать определение", - "sidebar.menu.delete_routine": "Удалить {{type}}", - "sidebar.menu.design_table": "Проектировать таблицу", - "sidebar.menu.copy_table_structure": "Копировать структуру таблицы", - "sidebar.menu.backup_table_sql": "Создать резервную копию таблицы (SQL)", - "sidebar.menu.rename_table": "Переименовать таблицу", - "sidebar.menu.truncate_table": "Усечь таблицу", - "sidebar.menu.clear_table": "Очистить таблицу", - "sidebar.menu.delete_table": "Удалить таблицу", - "sidebar.menu.export_table_data": "Экспортировать данные таблицы", - "sidebar.menu.export_csv": "Экспортировать CSV", - "sidebar.menu.export_xlsx": "Экспортировать XLSX", - "sidebar.menu.export_json": "Экспортировать JSON", - "sidebar.menu.export_markdown": "Экспортировать Markdown", - "sidebar.menu.export_html": "Экспортировать HTML", - "sidebar.menu.open_query": "Открыть запрос", - "sidebar.menu.rename_query": "Переименовать запрос", - "sidebar.menu.delete_query": "Удалить запрос", - "sidebar.menu.add_sql_directory": "Добавить SQL-каталог", - "sidebar.menu.refresh_directory": "Обновить каталог", - "sidebar.menu.remove_directory": "Удалить каталог", - "sidebar.menu.open_sql_file": "Открыть SQL-файл", - "sidebar.menu.new_sql_file": "Создать SQL-файл", - "sidebar.menu.new_sql_directory": "Создать каталог", - "sidebar.menu.rename_sql_directory": "Переименовать каталог", - "sidebar.menu.delete_local_directory": "Удалить локальный каталог", - "sidebar.menu.delete_sql_directory": "Удалить каталог", - "sidebar.menu.rename_sql_file": "Переименовать SQL-файл", - "sidebar.menu.new_sql_file_in_directory": "Создать SQL-файл в этом каталоге", - "sidebar.menu.new_sql_directory_in_directory": "Создать каталог в этом каталоге", - "sidebar.menu.delete_sql_file": "Удалить SQL-файл", - "sidebar.batch.group.tables": "Таблицы", - "sidebar.batch.group.views": "Представления", - "sidebar.batch.no_matching_objects": "Нет подходящих объектов", - "sidebar.sql_template.edit_view": "Изменить представление {{name}}", - "sidebar.sql_template.modify_then_execute": "Изменить и выполнить", - "sidebar.sql_template.edit_routine": "Изменить {{type}} {{name}}", - "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB пока не поддерживает хранимые процедуры", - "sidebar.sql_template.duckdb_macro_hint": "Используйте SQL Macro для поведения, похожего на функцию", - "connection_modal.network.ssl_mode.preferred": "Предпочтительно", - "connection_modal.network.ssl_mode.required": "Обязательно", - "connection_modal.network.ssl_mode.skip_verify": "Без проверки", - "sidebar.external_sql.root": "Внешние SQL-файлы", - "sidebar.external_sql.directory_fallback": "SQL-каталог", - "sidebar.external_sql_modal.title.create_file": "Создать SQL-файл", - "sidebar.external_sql_modal.title.rename_file": "Переименовать SQL-файл", - "sidebar.external_sql_modal.title.create_directory": "Создать каталог", - "sidebar.external_sql_modal.title.rename_directory": "Переименовать каталог", - "sidebar.external_sql_modal.action.create": "Создать", - "sidebar.external_sql_modal.action.rename": "Переименовать", - "sidebar.external_sql_modal.field.directory_name": "Имя каталога", - "sidebar.external_sql_modal.field.sql_file_name": "Имя SQL-файла", - "sidebar.external_sql_modal.validation.directory_name_required": "Введите имя каталога", - "sidebar.external_sql_modal.validation.sql_file_name_required": "Введите имя SQL-файла", - "sidebar.external_sql_modal.validation.directory_name_no_separator": "Имя каталога не должно содержать разделители пути", - "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "Имя файла не должно содержать разделители пути", - "sidebar.external_sql_modal.help.directory": "Каталог отображается только в дереве внешних SQL-каталогов; файлы не SQL по-прежнему скрыты", - "sidebar.external_sql_modal.help.sql_file": "Если суффикс .sql не указан, он будет добавлен автоматически", - "sidebar.external_sql_modal.placeholder.directory_name": "Например: reports", - "sidebar.external_sql_modal.placeholder.sql_file_name": "Например: report.sql", - "sidebar.jvm.action.monitoring": "Непрерывный мониторинг", - "sidebar.jvm.action.diagnostic": "Расширенная диагностика", - "sidebar.jvm.tab.overview": "Обзор JVM", - "sidebar.jvm.tab.resource": "Ресурсы JVM", - "sidebar.jvm.tab.audit": "Аудит JVM", - "sidebar.jvm.tab.diagnostic": "Диагностика JVM", - "sidebar.jvm.tab.monitoring": "Мониторинг JVM", - "jvm.backend.message.connect_success": "Подключение JVM успешно выполнено", - "jvm.backend.error.preview_confirmation_missing": "Токен подтверждения предварительного просмотра отсутствует. Перед отправкой выполните предварительный просмотр еще раз.", - "jvm.backend.error.confirmation_token_missing": "Токен подтверждения отсутствует. Сначала завершите подтверждение предварительного просмотра.", - "jvm.backend.error.confirmation_token_invalid": "Токен подтверждения недействителен. Выполните предварительный просмотр и подтвердите снова.", - "jvm.backend.error.confirmation_token_expired": "Срок действия токена подтверждения истек. Выполните предварительный просмотр и подтвердите снова.", - "jvm.backend.error.preview_context_hash_failed": "Не удалось создать контекст предварительного просмотра JVM: {{detail}}", - "jvm.backend.error.preview_payload_hash_failed": "Не удалось создать digest Payload предварительного просмотра JVM: {{detail}}", - "jvm.backend.error.change_blocked_by_guard": "Текущее изменение заблокировано Guard", - "jvm.backend.error.change_blocked_read_only": "Текущее подключение доступно только для чтения, поэтому запись заблокирована", - "jvm.backend.error.change_resource_id_required": "ID ресурса JVM обязателен", - "jvm.backend.error.change_action_required": "Действие изменения JVM обязательно", - "jvm.backend.error.change_reason_required": "Причина изменения JVM обязательна", - "jvm.backend.error.change_confirmation_token_failed": "Не удалось создать токен подтверждения изменения JVM: {{detail}}", - "jvm.backend.error.disallowed_mode": "Текущее подключение не разрешает режим {{mode}}", - "jvm.backend.error.resource_path_invalid": "Недопустимый путь ресурса JVM: {{detail}}", - "jvm.backend.error.audit_write_blocked": "Не удалось записать запись аудита, изменение JVM заблокировано: {{detail}}", - "jvm.backend.warning.failed_audit_write_failed": "Не удалось записать аудит сбоя: {{detail}}", - "jvm.backend.warning.terminal_audit_write_failed": "Не удалось записать финальный аудит: {{detail}}", - "jvm.backend.separator.message_warning": "; ", - "jvm.backend.capability.reason.read_only": "Текущее подключение доступно только для чтения", - "jvm.backend.monitoring.error.snapshot_unsupported": "Снимок мониторинга {{provider}} пока не поддерживается", - "jvm.backend.monitoring.error.session_not_found": "Сеанс мониторинга JVM для {{connectionId}} {{providerMode}} не найден", - "jvm.backend.monitoring.warning.sample_auto_stopped": "Сбор данных мониторинга завершился с ошибкой {{count}} раз подряд, поэтому этот сеанс был автоматически остановлен", - "jvm.backend.connection_error.suggestion": "Рекомендация: {{detail}}", - "jvm.backend.connection_error.technical_detail": "Технические сведения: {{detail}}", - "jvm.backend.connection_error.generic": "Подключение JVM не удалось", - "jvm.backend.connection_error.endpoint.base_url_required": "Подключение Endpoint не удалось: Endpoint Base URL отсутствует.", - "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Подключение Endpoint не удалось: Endpoint Base URL недействителен.", - "jvm.backend.connection_error.endpoint.base_url_invalid.help": "Укажите полный URL http:// или https://, который указывает на корневой путь management API, реализующего GoNavi JVM HTTP contract, например http://127.0.0.1:19090/manage/jvm.", - "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Подключение Endpoint не удалось: поддерживаются только HTTP или HTTPS.", - "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "Измените Endpoint Base URL на адрес, начинающийся с http:// или https://.", - "jvm.backend.connection_error.endpoint.not_found.summary": "Подключение Endpoint не удалось: целевой адрес ответил, но management API GoNavi JVM не найден.", - "jvm.backend.connection_error.endpoint.not_found.help": "Убедитесь, что Base URL указывает на корневой путь management API JVM, а не на бизнес-endpoint, health check или домашнюю страницу gateway.", - "jvm.backend.connection_error.endpoint.connection_refused.summary": "Подключение Endpoint не удалось: целевой management API не слушает порт или адрес недоступен.", - "jvm.backend.connection_error.endpoint.connection_refused.help": "Убедитесь, что Base URL указывает на management API, реализующий GoNavi JVM HTTP contract, и проверьте прослушивание сервиса, port mapping и правила firewall.", - "jvm.backend.connection_error.endpoint.unauthorized.summary": "Подключение Endpoint не удалось: целевой management API ответил, но API Key отсутствует или недействителен.", - "jvm.backend.connection_error.endpoint.unauthorized.help": "Проверьте, совпадает ли Endpoint API Key в подключении с конфигурацией целевого сервиса.", - "jvm.backend.connection_error.endpoint.forbidden.summary": "Подключение Endpoint не удалось: целевой management API отклонил этот запрос.", - "jvm.backend.connection_error.endpoint.forbidden.help": "Убедитесь, что источник клиента, настройки authentication и access policy разрешают GoNavi доступ к этому management API.", - "jvm.backend.connection_error.endpoint.timeout.summary": "Подключение Endpoint не удалось: истекло время ожидания доступа к целевому management API.", - "jvm.backend.connection_error.endpoint.timeout.help": "Убедитесь, что Base URL доступен, целевой сервис запущен, и при необходимости увеличьте connection timeout.", - "jvm.backend.connection_error.agent.base_url_required": "Подключение Agent не удалось: Agent Base URL отсутствует.", - "jvm.backend.connection_error.agent.base_url_invalid.summary": "Подключение Agent не удалось: Agent Base URL недействителен.", - "jvm.backend.connection_error.agent.base_url_invalid.help": "Укажите полный URL http:// или https://, например http://127.0.0.1:19090/gonavi/agent/jvm.", - "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Подключение Agent не удалось: поддерживаются только HTTP или HTTPS.", - "jvm.backend.connection_error.agent.scheme_unsupported.help": "Измените Agent Base URL на адрес, начинающийся с http:// или https://.", - "jvm.backend.connection_error.agent.connection_refused.summary": "Подключение Agent не удалось: целевой management port Agent не слушается или адрес недоступен.", - "jvm.backend.connection_error.agent.connection_refused.help": "Убедитесь, что Java service запущен с GoNavi Agent через `-javaagent`, и проверьте Base URL, port mapping и правила firewall.", - "jvm.backend.connection_error.agent.unauthorized.summary": "Подключение Agent не удалось: Agent ответил, но API Key отсутствует или недействителен.", - "jvm.backend.connection_error.agent.unauthorized.help": "Проверьте, совпадает ли Agent API Key в подключении с параметрами запуска целевого сервиса.", - "jvm.backend.connection_error.agent.forbidden.summary": "Подключение Agent не удалось: Agent отклонил этот запрос.", - "jvm.backend.connection_error.agent.forbidden.help": "Убедитесь, что источник клиента, настройки authentication и access policy Agent разрешают GoNavi доступ.", - "jvm.backend.connection_error.agent.timeout.summary": "Подключение Agent не удалось: истекло время ожидания доступа к management port Agent.", - "jvm.backend.connection_error.agent.timeout.help": "Убедитесь, что целевой адрес доступен, Agent запущен, и при необходимости увеличьте connection timeout.", - "jvm.backend.connection_error.jmx.host_required": "Подключение JMX не удалось: host отсутствует.", - "jvm.backend.connection_error.jmx.port_invalid": "Подключение JMX не удалось: port недействителен. Укажите допустимый port от 1 до 65535.", - "jvm.backend.connection_error.jmx.java_missing.summary": "Подключение JMX не удалось: на текущей машине не найден runtime `java`, поэтому GoNavi не может запустить JMX helper.", - "jvm.backend.connection_error.jmx.java_missing.help": "Сначала установите JRE/JDK или укажите правильный исполняемый файл `java` через переменную окружения GONAVI_JMX_JAVA_BIN.", - "jvm.backend.connection_error.jmx.non_jrmp.summary": "Подключение JMX не удалось: {{target}} не является стандартным удаленным management port JMX; это похоже на бизнес-порт или HTTP port.", - "jvm.backend.connection_error.jmx.non_jrmp.help": "Используйте фактический JMX port, открытый приложением, а не бизнес `server.port`. Если сервис только включает `-Dcom.sun.management.jmxremote`, но не задает `jmxremote.port`, удаленное подключение невозможно.", - "jvm.backend.connection_error.jmx.no_such_object.summary": "Подключение JMX не удалось: на {{target}} есть RMI service, но это не пригодный JMX RMIServer port.", - "jvm.backend.connection_error.jmx.no_such_object.help": "Обычно это означает, что указан port RMI registry, debug port или другой port Java service. Проверьте настройки `jmxremote.port` и `jmxremote.rmi.port`.", - "jvm.backend.connection_error.jmx.connection_reset.summary": "Подключение JMX не удалось: сервис на {{target}} закрыл соединение; port не является совместимым стандартным JMX RMI port.", - "jvm.backend.connection_error.jmx.connection_reset.help": "Убедитесь, что настроенный port является открытым JMX port JVM, а не бизнес-портом, debug port или проксированным port.", - "jvm.backend.connection_error.jmx.connection_refused.summary": "Подключение JMX не удалось: не удалось подключиться к {{target}}, потому что port не слушается или сеть недоступна.", - "jvm.backend.connection_error.jmx.connection_refused.help": "Убедитесь, что на целевой JVM включен remote JMX, и проверьте host, firewall, port mapping, SSH и настройки proxy.", - "jvm.backend.connection_error.jmx.auth.summary": "Подключение JMX не удалось: {{target}} требует authentication или текущие credentials недействительны.", - "jvm.backend.connection_error.jmx.auth.help": "Проверьте, отключена ли authentication у целевого JMX. Если authentication требуется, укажите username и password перед подключением.", - "jvm.backend.connection_error.jmx.timeout.summary": "Подключение JMX не удалось: время ожидания подключения к {{target}} истекло.", - "jvm.backend.connection_error.jmx.timeout.help": "Убедитесь, что port доступен, сеть не заблокирована, и при необходимости увеличьте connection timeout.", - "jvm.backend.diagnostic.error.disabled": "Для этого подключения не включен режим расширенной диагностики JVM", - "jvm.backend.diagnostic.error.session_id_required": "Diagnostic session ID обязателен. Сначала создайте session.", - "jvm.backend.diagnostic.error.command_required": "Diagnostic command не может быть пустой", - "jvm.backend.diagnostic.error.cancel_identifiers_required": "Для cancel command требуются sessionId и commandId", - "jvm.backend.diagnostic.error.audit_write_blocked": "Не удалось записать diagnostic audit record, выполнение command заблокировано: {{detail}}", - "jvm.backend.diagnostic.error.execute_canceled": "Запрос выполнения диагностики отменен: {{detail}}", - "jvm.backend.diagnostic.error.transport_unsupported": "Неподдерживаемый транспорт диагностики JVM: {{transport}}", - "jvm.backend.diagnostic.warning.audit_write_failed": "Не удалось записать audit record: {{detail}}", - "jvm.backend.diagnostic.message.command_completed": "Diagnostic command выполнена", - "jvm.backend.diagnostic.message.cancel_requested": "Cancel request отправлен; ожидание остановки command диагностическим bridge", - "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas command выполнена", - "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas command отменена", - "jvm.backend.diagnostic.policy.observe_not_allowed": "Observe diagnostic commands не включены для этого подключения: {{command}}", - "jvm.backend.diagnostic.policy.trace_not_allowed": "Trace diagnostic commands не включены для этого подключения: {{command}}", - "jvm.backend.diagnostic.policy.mutating_not_allowed": "High-risk diagnostic commands не включены для этого подключения: {{command}}", - "jvm.backend.diagnostic.policy.read_only_observe_only": "Текущее подключение доступно только для чтения. Разрешены только observe diagnostic commands", - "jvm.backend.diagnostic.policy.multiline_not_supported": "Diagnostic command не поддерживает переносы строк или несколько commands", - "jvm.backend.diagnostic.arthas.base_url_required": "Требуется адрес Arthas Tunnel", - "jvm.backend.diagnostic.arthas.base_url_invalid": "Адрес Arthas Tunnel недействителен: {{detail}}", - "jvm.backend.diagnostic.arthas.target_id_required": "Требуется target ID для Arthas Tunnel (targetId / agentId)", - "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel поддерживает только адреса http/https/ws/wss: {{scheme}}", - "jvm.backend.diagnostic.arthas.session_missing": "Diagnostic session не существует. Создайте Arthas Tunnel session заново.", - "jvm.backend.diagnostic.arthas.session_config_changed": "Конфигурация Arthas Tunnel session изменилась. Создайте diagnostic session заново.", - "jvm.backend.diagnostic.arthas.command_already_running": "В этой Arthas Tunnel session уже выполняется command. Дождитесь завершения или сначала отмените ее.", - "jvm.backend.diagnostic.arthas.no_running_command": "В этой Arthas Tunnel session нет выполняющейся command.", - "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "Активная command в этой Arthas Tunnel session не совпадает с command для отмены.", - "jvm.backend.diagnostic.arthas.connection_not_ready": "Подключение Arthas Tunnel еще не готово. Повторите попытку позже.", - "jvm.backend.diagnostic.arthas.http_failed": "Подключение Arthas Tunnel не удалось: HTTP {{status}}", - "jvm.backend.diagnostic.arthas.connect_timeout": "WebSocket-подключение Arthas Tunnel не получило ответ за {{timeout}} и завершилось по timeout", - "jvm.backend.diagnostic.arthas.connect_canceled": "WebSocket-подключение Arthas Tunnel отменено", - "jvm.backend.diagnostic.arthas.connect_failed": "WebSocket-подключение Arthas Tunnel не удалось: {{detail}}", - "jvm.backend.diagnostic.arthas.request_encode_failed": "Не удалось закодировать запрос Arthas Tunnel: {{detail}}", - "jvm.backend.diagnostic.arthas.write_deadline_failed": "Не удалось задать write deadline Arthas Tunnel: {{detail}}", - "jvm.backend.diagnostic.arthas.send_timeout": "Отправка terminal command в Arthas Tunnel не получила ответ за {{timeout}} и завершилась по timeout", - "jvm.backend.diagnostic.arthas.send_canceled": "Отправка terminal command в Arthas Tunnel отменена", - "jvm.backend.diagnostic.arthas.send_failed": "Не удалось отправить terminal command в Arthas Tunnel: {{detail}}", - "jvm.backend.diagnostic.arthas.read_deadline_failed": "Не удалось задать read deadline Arthas Tunnel: {{detail}}", - "jvm.backend.diagnostic.arthas.read_timeout": "Чтение вывода Arthas Tunnel не получило ответ за {{timeout}} и завершилось по timeout", - "jvm.backend.diagnostic.arthas.read_canceled": "Чтение вывода Arthas Tunnel отменено", - "jvm.backend.diagnostic.arthas.read_failed": "Не удалось прочитать вывод Arthas Tunnel: {{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed": "Подключение Arthas Tunnel закрыто: {{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed_code": "Подключение Arthas Tunnel закрыто: code={{code}}", - "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel command завершилась по timeout за {{timeout}}", - "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel command отменена", - "jvm.backend.diagnostic.arthas.target_not_found": "Целевой instance не найден. Проверьте targetId / agentId и убедитесь, что tunnel client онлайн.", - "jvm.backend.diagnostic.arthas.target_not_found_with_id": "Целевой instance {{target}} не найден. Проверьте targetId / agentId и убедитесь, что tunnel client онлайн.", - "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Не удалось закодировать terminal command Arthas Tunnel: {{detail}}", - "jvm_resource.error.connection_missing": "Подключение не существует или было удалено.", - "jvm_resource.error.resource_path_empty": "Путь к ресурсу пуст.", - "jvm_resource.error.get_value_unavailable": "Чтение значения JVM недоступно в этой сборке.", - "jvm_resource.error.read_failed": "Не удалось прочитать ресурс JVM.", - "jvm_resource.error.ai_plan_missing_context": "В плане AI отсутствует исходный контекст. Сначала создайте его заново на странице целевого ресурса JVM.", - "jvm_resource.error.ai_plan_context_mismatch": "Текущая вкладка JVM не совпадает с исходным контекстом плана AI, поэтому автоматическое применение отклонено.", - "jvm_resource.error.ai_plan_to_draft_failed": "Сейчас не удалось преобразовать план AI в черновик предварительного просмотра JVM.", - "jvm_resource.message.ai_plan_draft_filled": "Черновик заполнен из плана AI для {{resourceId}}. Перед подтверждением записи сначала просмотрите изменение.", - "jvm_ai_plan.error.resource_locator_missing": "В плане AI отсутствует пригодная информация для поиска ресурса.", - "jvm_ai_plan.error.reason_missing": "В плане AI отсутствует причина изменения.", - "jvm_ai_plan.error.action_missing": "В плане AI отсутствует исполняемое action.", - "jvm_ai_plan.error.payload_json_object_required": "Текущий предварительный просмотр JVM требует, чтобы payload оставался JSON-объектом.", - "jvm_ai_plan.snapshot.unavailable": "Текущий снимок ресурса еще не был успешно загружен.", - "jvm_ai_plan.actions.none": "Текущий ресурс не объявляет поддерживаемые действия. Если вы создаете план, указывайте action только когда его можно явно вывести из снимка, и оставляйте payload JSON-объектом.", - "jvm_ai_plan.actions.label": " ({{label}})", - "jvm_ai_plan.actions.description": ": {{description}}", - "jvm_ai_plan.actions.payload_fields": "; поля payload: {{fields}}", - "jvm_ai_plan.actions.field_separator": ", ", - "jvm_ai_plan.actions.required_suffix": "(required)", - "jvm_ai_plan.prompt.resource_path_missing": "(путь ресурса не указан)", - "jvm_ai_plan.prompt.environment_unknown": "unknown", - "jvm_ai_plan.prompt.intro": "Проанализируйте следующий ресурс JVM и создайте структурированный план изменения для GoNavi \"Предварительный просмотр изменения\".", - "jvm_ai_plan.prompt.connection_name": "Имя подключения: {{connectionName}}", - "jvm_ai_plan.prompt.target_host": "Целевой хост: {{host}}", - "jvm_ai_plan.prompt.provider_mode": "Режим Provider: {{providerMode}}", - "jvm_ai_plan.prompt.environment": "Среда: {{environmentLabel}}", - "jvm_ai_plan.prompt.connection_policy.read_only": "Подключение только для чтения. Можно создать только план и анализ рисков; нельзя предполагать, что выполнение уже произошло.", - "jvm_ai_plan.prompt.connection_policy.writable": "Подключение доступно для записи, но изменение все равно сначала должно быть просмотрено и подтверждено вручную.", - "jvm_ai_plan.prompt.connection_policy": "Политика подключения: {{policy}}", - "jvm_ai_plan.prompt.resource_path": "Текущий путь ресурса: {{resourcePath}}", - "jvm_ai_plan.prompt.snapshot_title": "Текущий снимок ресурса:", - "jvm_ai_plan.prompt.supported_actions_title": "Поддерживаемые действия для текущего ресурса:", - "jvm_ai_plan.prompt.output_requirements_title": "Требования к выводу:", - "jvm_ai_plan.prompt.requirement.single_json_block": "1. Сначала можно добавить короткий анализ, но ответ должен содержать ровно один блок кода ```json.", - "jvm_ai_plan.prompt.requirement.fields": "2. Поля JSON внутри блока кода должны быть строго такими: targetType, selector, action, payload, reason.", - "jvm_ai_plan.prompt.requirement.resource_path": "3. Предпочитайте selector.resourcePath с текущим путем ресурса {{resourcePath}}. Не придумывайте другой путь.", - "jvm_ai_plan.prompt.requirement.action": "4. Предпочитайте выбирать action из \"Поддерживаемые действия для текущего ресурса\"; выводите его из снимка только если поддерживаемые действия не объявлены.", - "jvm_ai_plan.prompt.requirement.payload": "5. payload должен быть обернут как JSON-объект. Не выводите скрипты, команды или сырые двоичные данные. Если нужно текстовое значение, оберните его как {\"format\":\"text\",\"value\":\"...\"}.", - "jvm_ai_plan.prompt.requirement.no_execute": "6. Не утверждайте, что изменение уже выполнено, и не выводите скрипты или команды.", - "jvm_ai_plan.prompt.example_title": "Пример JSON:", - "jvm_ai_plan.prompt.example_reason": "Исправить грязное значение кэша", - "jvm_resource.error.reason_required": "Укажите причину изменения.", - "jvm_resource.error.payload_object_required": "Payload должен быть JSON-объектом.", - "jvm_resource.error.resource_id_empty": "ID ресурса пуст, поэтому невозможно создать черновик изменения.", - "jvm_resource.error.preview_unavailable": "Предварительный просмотр изменений JVM недоступен в этой сборке.", - "jvm_resource.error.draft_invalid": "Черновик изменения недействителен.", - "jvm_resource.error.preview_failed": "Не удалось предварительно просмотреть изменение JVM.", - "jvm_resource.error.preview_result_invalid": "Результат предварительного просмотра имеет неверный формат.", - "jvm_resource.error.apply_unavailable": "Выполнение изменений JVM недоступно в этой сборке.", - "jvm_resource.error.preview_required": "Перед подтверждением выполнения сначала просмотрите изменение.", - "jvm_resource.error.context_changed": "Контекст ресурса изменился. Перед выполнением снова выполните предварительный просмотр.", - "jvm_resource.error.confirmation_missing": "Отсутствует токен подтверждения. Перед выполнением снова выполните предварительный просмотр.", - "jvm_resource.presentation.action.set.label": "Установить свойство", - "jvm_resource.presentation.action.set.description": "Обновляет доступное для записи значение свойства текущего ресурса.", - "jvm_resource.presentation.action.invoke.label": "Вызвать операцию", - "jvm_resource.presentation.action.invoke.description": "Вызывает управляющую операцию, предоставляемую текущим ресурсом.", - "jvm_resource.presentation.action.put.label": "Записать ресурс", - "jvm_resource.presentation.action.put.description": "Записывает содержимое payload в текущий ресурс JVM.", - "jvm_resource.presentation.action.clear.label": "Очистить ресурс", - "jvm_resource.presentation.action.clear.description": "Очищает данные или состояние в текущем ресурсе JVM.", - "jvm_resource.presentation.action.evict.label": "Вытеснить кэш", - "jvm_resource.presentation.action.evict.description": "Вытесняет целевой элемент кэша из текущей среды выполнения JVM.", - "jvm_resource.presentation.action.remove.label": "Удалить запись", - "jvm_resource.presentation.action.remove.description": "Удаляет указанную запись из текущего ресурса.", - "jvm_resource.presentation.action.delete.label": "Удалить ресурс", - "jvm_resource.presentation.action.delete.description": "Удаляет текущий ресурс или отменяет его регистрацию.", - "jvm_resource.presentation.action.refresh.label": "Обновить ресурс", - "jvm_resource.presentation.action.refresh.description": "Обновляет состояние выполнения текущего ресурса.", - "jvm_resource.presentation.action.reload.label": "Перезагрузить", - "jvm_resource.presentation.action.reload.description": "Перезагружает текущий ресурс или его конфигурацию.", - "jvm_resource.presentation.action.reset.label": "Сбросить состояние", - "jvm_resource.presentation.action.reset.description": "Возвращает текущий ресурс в начальное состояние или состояние по умолчанию.", - "jvm_resource.presentation.unnamed_action": "Действие без имени", - "jvm_resource.presentation.risk.low": "Низкий", - "jvm_resource.presentation.risk.medium": "Средний", - "jvm_resource.presentation.risk.high": "Высокий", - "jvm_resource.presentation.risk.unknown": "Неизвестно", - "jvm_resource.presentation.audit_result.unknown": "Неизвестно", - "jvm_resource.presentation.audit_result.applied": "Выполнено", - "jvm_resource.presentation.audit_result.success": "Успешно", - "jvm_resource.presentation.audit_result.warning": "Предупреждение", - "jvm_resource.presentation.audit_result.blocked": "Заблокировано", - "jvm_resource.presentation.audit_result.failed": "Ошибка", - "jvm_resource.error.apply_failed": "Не удалось выполнить изменение JVM.", - "jvm_resource.message.apply_success": "Изменение JVM выполнено.", - "jvm_resource.title": "Рабочая область ресурсов JVM", - "jvm_resource.badge.read_only": "Подключение только для чтения", - "jvm_resource.badge.writable": "Подключение с записью", - "jvm_resource.action.audit": "Журнал аудита", - "jvm_resource.action.generate_ai_plan": "Создать план AI", - "jvm_resource.action.ask_ai_plan": "Попросить AI создать план", - "jvm_resource.card.snapshot": "Снимок ресурса", - "jvm_resource.field.resource_id": "ID ресурса", - "jvm_resource.field.resource_type": "Тип ресурса", - "jvm_resource.field.format": "Формат", - "jvm_resource.field.version": "Версия", - "jvm_resource.field.available_actions": "Доступные действия", - "jvm_resource.section.resource_value": "Значение ресурса", - "jvm_resource.section.metadata": "Метаданные", - "jvm_resource.empty.no_resource_data": "Нет данных ресурса", - "jvm_resource.card.change_draft": "Черновик изменения", - "jvm_resource.field.resource_path": "Путь к ресурсу", - "jvm_resource.field.target_resource": "Целевой ресурс", - "jvm_resource.field.resource_version": "Версия ресурса", - "jvm_resource.field.draft_source": "Источник черновика", - "jvm_resource.draft_source.ai_plan": "Черновик с помощью AI", - "jvm_resource.draft_source.manual": "Ручное редактирование", - "jvm_resource.section.supported_actions": "Поддерживаемые действия ресурса", - "jvm_resource.field.payload_fields": "Поля Payload: ", - "jvm_resource.marker.required_suffix": " (обязательно)", - "jvm_resource.list_separator": ", ", - "jvm_resource.field.action": "Действие", - "jvm_resource.placeholder.action_jmx": "Например, set или invoke", - "jvm_resource.placeholder.action_default": "Например, put / clear / evict", - "jvm_resource.message.current_action": "Текущее действие: ", - "jvm_resource.field.reason": "Причина изменения", - "jvm_resource.placeholder.reason": "Введите причину этого изменения ресурса JVM", - "jvm_resource.field.payload": "Payload (JSON)", - "jvm_resource.message.payload_hint": "Предварительный просмотр использует текущий черновик. Подтверждение выполнения использует последний успешный запрос предварительного просмотра. После изменения черновика выполните просмотр снова.", - "jvm_resource.message.payload_template_applied": "Для текущего действия заполнен рекомендуемый шаблон.", - "jvm_resource.action.preview_change": "Предпросмотр изменения", - "jvm_overview.connection_missing.message": "Подключение не существует или было удалено", - "jvm_overview.error.capability_load_failed": "Не удалось прочитать возможности режима JVM", - "jvm_overview.eyebrow": "Среда выполнения JVM", - "jvm_overview.title": "Обзор среды выполнения JVM", - "jvm_overview.badge.read_only": "Подключение только для чтения", - "jvm_overview.badge.writable": "Подключение с записью", - "jvm_overview.card.connection_summary": "Сводка подключения", - "jvm_overview.card.mode_capability": "Возможности режимов", - "jvm_overview.field.current_mode": "Текущий режим", - "jvm_overview.field.allowed_modes": "Разрешенные режимы", - "jvm_overview.field.jmx_address": "JMX-адрес", - "jvm_overview.field.endpoint": "Endpoint", - "jvm_overview.field.agent": "Agent", - "jvm_overview.field.resource_browse": "Просмотр ресурсов", - "jvm_overview.value.enabled": "Включено", - "jvm_overview.value.not_configured": "Не настроено", - "jvm_overview.value.resource_browse_lazy_load": "Ленивая загрузка после раскрытия узла режима на боковой панели", - "jvm_overview.empty.capabilities": "Нет данных о возможностях режима", - "jvm_overview.capability.can_browse": "Можно просматривать", - "jvm_overview.capability.cannot_browse": "Нельзя просматривать", - "jvm_overview.capability.writable": "Запись разрешена", - "jvm_overview.capability.read_only": "Только чтение", - "jvm_overview.capability.preview_supported": "Предпросмотр поддерживается", - "jvm_overview.capability.preview_unsupported": "Предпросмотр не поддерживается", - "jvm_monitoring_dashboard.connection_missing.message": "Подключение не существует или было удалено", - "jvm_monitoring_dashboard.error.history_unavailable": "Метод backend JVMGetMonitoringHistory недоступен", - "jvm_monitoring_dashboard.error.history_load_failed": "Не удалось загрузить историю мониторинга", - "jvm_monitoring_dashboard.error.start_unavailable": "Метод backend JVMStartMonitoring недоступен", - "jvm_monitoring_dashboard.error.start_failed": "Не удалось запустить мониторинг", - "jvm_monitoring_dashboard.error.stop_unavailable": "Метод backend JVMStopMonitoring недоступен", - "jvm_monitoring_dashboard.error.stop_failed": "Не удалось остановить мониторинг", - "jvm_monitoring_dashboard.title": "Непрерывный мониторинг JVM", - "jvm_monitoring_dashboard.status.sampling": "Идет сбор", - "jvm_monitoring_dashboard.status.stopped": "Не запущено", - "jvm_monitoring_dashboard.action.refresh": "Обновить", - "jvm_monitoring_dashboard.action.start": "Запустить мониторинг", - "jvm_monitoring_dashboard.action.stop": "Остановить мониторинг", - "jvm_monitoring_dashboard.degraded.message": "Возможности мониторинга снижены", - "jvm_monitoring_dashboard.empty.title": "Непрерывный мониторинг еще не запущен", - "jvm_monitoring_dashboard.empty.description": "После нажатия \"Запустить мониторинг\" GoNavi сохраняет результаты сбора данных для этого подключения в текущем сеансе; переключение вкладок не останавливает сбор данных.", - "jvm_diagnostic.workbench.eyebrow": "Диагностика JVM", - "jvm_diagnostic.workbench.title": "Рабочая область диагностики JVM", - "jvm_diagnostic.workbench.status.session_established": "Сеанс установлен", - "jvm_diagnostic.workbench.status.no_session": "Нет сеанса", - "jvm_diagnostic.workbench.status.command_running": "Команда выполняется", - "jvm_diagnostic.workbench.action.probe": "Проверить возможности", - "jvm_diagnostic.workbench.action.restart_session": "Пересоздать сеанс", - "jvm_diagnostic.workbench.action.start_session": "Создать сеанс", - "jvm_diagnostic.workbench.action.execute_command": "Выполнить команду", - "jvm_diagnostic.workbench.action.cancel_command": "Отменить команду", - "jvm_diagnostic.connection_missing.message": "Подключение не существует или было удалено", - "jvm_diagnostic.error.probe_unavailable": "Метод backend JVMProbeDiagnosticCapabilities недоступен", - "jvm_diagnostic.error.probe_failed": "Не удалось проверить диагностические возможности", - "jvm_diagnostic.error.start_unavailable": "Метод бэкенда JVMStartDiagnosticSession недоступен", - "jvm_diagnostic.error.start_failed": "Не удалось создать диагностический сеанс", - "jvm_diagnostic.error.history_load_failed": "Не удалось загрузить историю диагностики", - "jvm_diagnostic.error.execute_unavailable": "Метод бэкенда JVMExecuteDiagnosticCommand недоступен", - "jvm_diagnostic.error.execute_session_required": "Перед выполнением команды создайте диагностический сеанс", - "jvm_diagnostic.error.execute_command_required": "Диагностическая команда обязательна", - "jvm_diagnostic.error.execute_failed": "Не удалось выполнить диагностическую команду", - "jvm_diagnostic.error.cancel_unavailable": "Метод бэкенда JVMCancelDiagnosticCommand недоступен", - "jvm_diagnostic.error.cancel_failed": "Не удалось отменить диагностическую команду", - "jvm_diagnostic.message.cancel_sent": "Запрос на отмену отправлен", - "jvm_diagnostic.session.default_title": "Консоль диагностики JVM", - "jvm_diagnostic.session.default_reason": "Сеанс запущен из консоли", - "jvm_diagnostic.ai_plan.error.transport_mismatch": "Диагностический transport в AI-плане: {{planTransport}}, он не совпадает с текущей консолью {{currentTransport}}. Перед применением создайте план заново.", - "jvm_diagnostic.ai_plan.message.filled": "Диагностический AI-план перенесен в консоль", - "jvm_diagnostic.session_capability.title": "Сеанс и возможности", - "jvm_diagnostic.session_capability.description": "Текущий канал, права и быстрое обслуживание", - "jvm_diagnostic.session_capability.status.session_established": "Сеанс установлен", - "jvm_diagnostic.session_capability.status.no_session": "Нет сеанса", - "jvm_diagnostic.session_capability.status.command_running": "Команда выполняется", - "jvm_diagnostic.session_capability.status.idle": "Ожидание", - "jvm_diagnostic.session_capability.session_id_hint": "ID сеанса появится здесь после создания сеанса.", - "jvm_diagnostic.session_capability.note": "Проверка возможностей не выполняет команды; перед выполнением команды нужно создать сеанс. История аудита показывает последние записи команд и может содержать записи прошлых сеансов даже без текущего сеанса.", - "jvm_diagnostic.session_capability.action.clear_output": "Очистить вывод", - "jvm_diagnostic.session_capability.action.refresh_history": "Обновить историю", - "jvm_diagnostic.workflow.probe.title": "Проверить возможности", - "jvm_diagnostic.workflow.probe.description": "Считывает только диагностический канал, потоковый вывод и права на команды, не создавая сеанс.", - "jvm_diagnostic.workflow.session.title": "Создать сеанс", - "jvm_diagnostic.workflow.session.description": "Создает диагностический контекст, чтобы последующие команды были привязаны к этому сеансу.", - "jvm_diagnostic.workflow.command.title": "Выполнить команду", - "jvm_diagnostic.workflow.command.description": "После создания сеанса отображаются редактор команды, поле причины и шаблоны.", - "jvm_diagnostic.capability.empty.title": "Возможности еще не проверены", - "jvm_diagnostic.capability.empty.description": "Проверка возможностей только считывает права канала и политику команд. Она не создает сеанс и не выполняет команды.", - "jvm_diagnostic.capability_result.title": "Результаты проверки возможностей", - "jvm_diagnostic.capability_result.session_allowed": "Сеансы доступны", - "jvm_diagnostic.capability_result.session_denied": "Сеансы недоступны", - "jvm_diagnostic.capability_result.streaming_supported": "Потоковый вывод", - "jvm_diagnostic.capability_result.streaming_unsupported": "Потоковая передача не поддерживается", - "jvm_diagnostic.capability_result.observe_allowed": "Команды Observe", - "jvm_diagnostic.capability_result.observe_denied": "Observe запрещен", - "jvm_diagnostic.capability_result.trace_allowed": "Команды Trace", - "jvm_diagnostic.capability_result.mutating_allowed": "Команды высокого риска", - "jvm_diagnostic.no_session.title": "Начать диагностический сеанс", - "jvm_diagnostic.no_session.description": "Сначала создайте сеанс, затем появятся редактор команд и шаблоны", - "jvm_diagnostic.no_session.alert.title": "Ввод команды появится после создания сеанса", - "jvm_diagnostic.no_session.alert.description": "Это не дает принять несвязанный с сеансом ввод за готовую к выполнению команду и привязывает аудит, поток вывода и отмену к одному сеансу.", - "jvm_diagnostic.no_session.action.start": "Создать диагностический сеанс", - "jvm_diagnostic.no_session.action.probe": "Сначала проверить возможности", - "jvm_diagnostic.command_input.title": "Ввод команды", - "jvm_diagnostic.command_input.description": "Поддерживает автодополнение. Нажмите Ctrl/Cmd + Enter для запуска.", - "jvm_diagnostic.command_input.command_label": "Диагностическая команда", - "jvm_diagnostic.command_input.command_description": "Введите команду Arthas/диагностики, например thread -n 5, dashboard или jvm; шаблоны ниже заполняют ее одним щелчком.", - "jvm_diagnostic.command_input.reason_label": "Причина (необязательно)", - "jvm_diagnostic.command_input.reason_placeholder": "Например: исследовать высокую нагрузку CPU, подтвердить блокировку потоков или найти медленный метод", - "jvm_diagnostic.command_input.reason_help": "Используется для записей аудита и контекста AI. Не отправляется в целевую JVM как команда Arthas.", - "jvm_diagnostic.command_templates.title": "Шаблоны команд", - "jvm_diagnostic.output.title": "Вывод в реальном времени", - "jvm_diagnostic.output.description": "Добавляется из потока событий backend", - "jvm_diagnostic.output.empty.description": "Оперативного вывода пока нет. После выполнения команды вывод бэкенда будет появляться здесь в хронологическом порядке.", - "jvm_diagnostic.output.local_pending": "Диагностическая команда отправлена; ожидание вывода backend: {{command}}", - "jvm_diagnostic.output.frontend_completed_fallback": "Вызов диагностической команды вернулся, но терминальное событие backend не было получено. Frontend завершил состояние ожидания как fallback.", - "jvm_diagnostic.presentation.category.observe": "Команды наблюдения", - "jvm_diagnostic.presentation.category.trace": "Команды трассировки", - "jvm_diagnostic.presentation.category.mutating": "Команды высокого риска", - "jvm_diagnostic.presentation.phase.running": "Выполняется", - "jvm_diagnostic.presentation.phase.completed": "Завершено", - "jvm_diagnostic.presentation.phase.failed": "Не удалось", - "jvm_diagnostic.presentation.phase.canceling": "Отмена", - "jvm_diagnostic.presentation.phase.diagnostic": "Диагностическое событие", - "jvm_diagnostic.presentation.event.diagnostic": "Диагностический вывод", - "jvm_diagnostic.presentation.event.chunk": "Фрагмент вывода", - "jvm_diagnostic.presentation.event.done": "Выполнение завершено", - "jvm_diagnostic.presentation.chunk.empty_event": "Пустое событие", - "jvm_diagnostic.history.title": "История аудита", - "jvm_diagnostic.history.description": "Последние команды и состояние выполнения", - "jvm_diagnostic.history.current_session": "Текущий сеанс", - "jvm_diagnostic.history.no_session": "Диагностический сеанс еще не создан", - "jvm_diagnostic.history.recent_records": "Последние записи", - "jvm_diagnostic.history.reason_missing": "Причина диагностики не указана", - "jvm_diagnostic.history.no_records": "История диагностики отсутствует", - "jvm_audit.eyebrow": "Аудит JVM", - "jvm_audit.title": "Аудит изменений JVM", - "jvm_audit.card.records": "Записи аудита", - "jvm_audit.description.current_range": "Текущий диапазон: последние {{limit}} записей", - "jvm_audit.option.last_records": "Последние {{limit}} записей", - "jvm_audit.action.refresh": "Обновить", - "jvm_audit.column.time": "Время", - "jvm_audit.column.mode": "Режим", - "jvm_audit.column.action": "Действие", - "jvm_audit.column.resource": "Ресурс", - "jvm_audit.column.reason": "Причина", - "jvm_audit.column.source": "Источник", - "jvm_audit.column.result": "Результат", - "jvm_audit.source.ai_plan": "С помощью AI", - "jvm_audit.source.manual": "Вручную", - "jvm_audit.error.connection_missing": "Подключение не существует или было удалено.", - "jvm_audit.error.backend_unavailable": "Метод бэкенда JVMListAuditRecords недоступен.", - "jvm_audit.error.load_failed": "Не удалось загрузить записи аудита JVM{{separator}}{{detail}}", - "jvm_audit.empty.load_failed": "Записи аудита сейчас недоступны", - "jvm_audit.empty.no_records": "Нет записей аудита", - "query_editor.placeholder.connection": "Выберите подключение", - "query_editor.placeholder.database": "Выберите базу данных", - "query_editor.max_rows.tooltip": "Максимальное число возвращаемых строк. Для SELECT автоматически добавляется LIMIT, чтобы большие результаты не блокировали интерфейс.", - "query_editor.max_rows.option_500": "Макс. строк: 500", - "query_editor.max_rows.option_1000": "Макс. строк: 1000", - "query_editor.max_rows.option_5000": "Макс. строк: 5000", - "query_editor.max_rows.option_20000": "Макс. строк: 20000", - "query_editor.max_rows.option_unlimited": "Макс. строк: без ограничения", - "query_editor.action.run": "Выполнить", - "query_editor.action.run_with_shortcut": "Выполнить ({{shortcut}})", - "query_editor.action.stop": "Остановить", - "query_editor.action.save": "Сохранить", - "query_editor.action.save_with_shortcut": "Сохранить ({{shortcut}})", - "query_editor.completion.documentation.comment": "Комментарий: {{comment}}", - "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + щелчок, чтобы переключиться на эту базу данных", - "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть эту таблицу", - "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть это представление", - "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть это материализованное представление", - "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть этот триггер", - "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть эту хранимую процедуру", - "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть эту функцию", - "query_editor.object_info.database": "База данных", - "query_editor.object_info.table": "Таблица", - "query_editor.object_info.column": "Столбец", - "query_editor.object_info.materialized_view": "Материализованное представление", - "query_editor.object_info.label.database": "База данных", - "query_editor.object_info.label.table": "Таблица", - "query_editor.object_info.label.type": "Тип", - "query_editor.object_info.label.schema": "Схема", - "query_editor.object_info.label.separator": ": ", - "query_editor.action.more": "Еще", - "query_editor.action.format": "Форматировать", - "query_editor.action.format_sql": "Форматировать SQL", - "query_editor.action.resize_editor": "Перетащите, чтобы изменить высоту", - "query_editor.action.ai_generate_sql": "AI: сгенерировать SQL", - "query_editor.action.ai_explain_sql": "AI: объяснить SQL", - "query_editor.action.ai_optimize_sql": "AI: оптимизировать SQL", - "query_editor.action.ai_generate_sql_menu": "Сгенерировать SQL", - "query_editor.action.ai_explain_sql_menu": "Объяснить SQL", - "query_editor.action.ai_optimize_sql_menu": "Оптимизировать SQL", - "query_editor.action.ai_schema_analysis": "Анализ схемы", - "query_editor.action.show_results_panel": "Показать область результатов", - "query_editor.action.hide_results_panel": "Скрыть область результатов", - "query_editor.action.show_results_panel_with_shortcut": "Показать область результатов ({{shortcut}})", - "query_editor.action.hide_results_panel_with_shortcut": "Скрыть область результатов ({{shortcut}})", - "query_editor.action.results": "Результаты", - "query_editor.transaction.delay.immediate": "Сразу", - "query_editor.transaction.mode.tooltip": "Как в DBeaver: когда SQL-редактор выполняет DML, например INSERT/UPDATE/DELETE/MERGE/REPLACE, GoNavi сначала открывает управляемую транзакцию. В ручном режиме нужно выполнить commit/rollback; в автоматическом режиме после успешного выполнения автоматически запускается COMMIT.", - "query_editor.transaction.mode.manual": "Вручную", - "query_editor.transaction.mode.auto": "Авто", - "query_editor.transaction.status.auto_commit_countdown": "Автоматический commit через {{seconds}}s", - "query_editor.transaction.status.auto_committing": "Выполняется автоматический commit", - "query_editor.transaction.action.commit": "Commit", - "query_editor.transaction.action.commit_with_count": "Commit ({{count}})", - "query_editor.transaction.action.rollback": "Rollback", - "query_editor.transaction.message.pending_managed_transaction": "В SQL-редакторе уже есть незавершённая транзакция. Перед выполнением нового DML-оператора выполните commit или rollback.", - "query_editor.action.show_object_info": "Показать сведения об объекте", - "query_editor.action.rename_query": "Переименовать запрос", - "query_editor.action.export_sql_file": "Экспортировать SQL-файл", - "query_editor.format.keyword_upper": "Ключевые слова в верхнем регистре", - "query_editor.format.keyword_lower": "Ключевые слова в нижнем регистре", - "query_editor.format.restore_last_format": "Вернуть состояние до последнего форматирования", - "query_editor.format.snippet_settings": "Настройки сниппетов...", - "query_editor.format.shortcut_settings": "Настройки сочетаний клавиш...", - "query_editor.message.format_failed": "Ошибка форматирования: возможно, синтаксис SQL неверен.", - "query_editor.message.no_format_restore_snapshot": "Нет сохранённого состояния SQL до форматирования для восстановления.", - "query_editor.message.format_restore_success": "Восстановлено состояние SQL до форматирования.", - "query_editor.message.page_query_failed": "Ошибка запроса страницы: {{error}}", - "query_editor.message.page_query_empty": "Запрос страницы не вернул набор результатов.", - "query_editor.message.refresh_failed": "Не удалось обновить: {{error}}", - "query_editor.message.select_database_first": "Сначала выберите базу данных.", - "query_editor.message.connection_not_found": "Подключение не найдено.", - "query_editor.message.unsupported_source": "Этот источник данных не поддерживает редактор SQL-запросов. Используйте соответствующую страницу.", - "query_editor.message.no_executable_sql": "Нет SQL для выполнения.", - "query_editor.message.no_selectable_sql": "Нет SQL-инструкции для выбора.", - "query_editor.message.statement_failed_prefix": "Ошибка в инструкции {{index}}: ", - "query_editor.message.execution_success": "Выполнение успешно.", - "query_editor.message.execution_multi_success": "Выполнено инструкций: {{statements}}, создано наборов результатов: {{results}}.", - "query_editor.message.execution_result_sets_success": "Выполнение завершено, создано наборов результатов: {{results}}.", - "query_editor.message.execution_failed_with_error": "Ошибка выполнения запроса: {{error}}", - "query_editor.message.cancel_no_running": "Нет выполняющегося запроса для отмены.", - "query_editor.message.cancel_success": "Запрос отменен.", - "query_editor.message.cancel_failed": "Не удалось отменить запрос: {{error}}", - "query_editor.message.read_only_no_safe_locator": "Первичный ключ или подходящий уникальный индекс не обнаружен, поэтому изменения нельзя безопасно зафиксировать.", - "query_editor.message.read_only_index_metadata_unavailable": "Не удалось загрузить метаданные уникального индекса, поэтому изменения нельзя безопасно зафиксировать.", - "query_editor.message.read_only_table_locator_metadata_unavailable": "Не удалось загрузить метаданные первичного ключа/уникального индекса для {{table}}, поэтому изменения нельзя безопасно зафиксировать.", - "query_editor.message.read_only_system_metadata": "Результаты запросов к системным метаданным остаются доступными только для чтения.", - "query_editor.message.read_only_oracle_rowid_injection_unavailable": "В Oracle-запросе используется *, поэтому столбец-локатор ROWID не удалось автоматически внедрить. Результат остается только для чтения.", - "query_editor.message.read_only_warning_with_detail": "Результаты запроса остаются доступными только для чтения: {{detail}}", - "query_editor.message.object_info_target_not_found": "Текущий курсор не указывает на распознанную таблицу или колонку.", - "query_editor.message.insert_success": "Код вставлен в текущую позицию курсора.", - "query_editor.message.append_success": "Код добавлен.", - "query_editor.message.saved": "Запрос сохранен.", - "query_editor.message.sql_file_saved": "SQL-файл сохранен.", - "query_editor.message.save_sql_file_failed": "Не удалось сохранить SQL-файл: {{error}}", - "query_editor.message.save_query_failed": "Не удалось сохранить запрос: {{error}}", - "query_editor.message.export_sql_file_success": "Файл SQL экспортирован.", - "query_editor.message.export_sql_file_failed": "Не удалось экспортировать файл SQL: {{error}}", - "query_editor.message.save_first_before_rename": "Сначала сохраните запрос, а затем переименуйте его.", - "query_editor.message.renamed": "Запрос переименован.", - "query_editor.empty_state.title": "Ожидание выполнения SQL", - "query_editor.empty_state.description": "Запустите запрос, и результаты отобразятся ниже в новой таблице данных.", - "query_editor.result.tab_title": "Результат {{index}} ({{count}})", - "query_editor.result.tab_title_success": "Результат {{index}} ✓", - "query_editor.result.close": "Закрыть результат", - "query_editor.result.execution_success": "Выполнение успешно", - "query_editor.result.affected_rows": "Затронуто строк: {{count}}", - "query_editor.result.execution_failed": "Ошибка выполнения", - "query_editor.result.ai_diagnose": "AI-диагностика", - "query_editor.results_panel.tooltip.hide": "Скрыть область результатов", - "query_editor.results_panel.tooltip.hide_with_shortcut": "Скрыть область результатов ({{shortcut}})", - "query_editor.results_panel.menu.close_other": "Закрыть другие вкладки", - "query_editor.results_panel.menu.close_left": "Закрыть вкладки слева", - "query_editor.results_panel.menu.close_right": "Закрыть вкладки справа", - "query_editor.results_panel.menu.close_all": "Закрыть все вкладки", - "query_editor.results_panel.action.hide": "Скрыть", - "query_editor.results_panel.aria.hide": "Скрыть область результатов", - "query_editor.results_panel.tab.message": "Сообщение {{index}}", - "query_editor.results_panel.tab.result": "Результат {{index}}", - "query_editor.results_panel.message.title": "Сообщения выполнения", - "query_editor.results_panel.panel.title": "Область результатов", - "query_editor.save_modal.title": "Сохранить запрос", - "query_editor.save_modal.rename_title": "Переименовать запрос", - "query_editor.save_modal.rename_ok": "Переименовать", - "query_editor.save_modal.name_label": "Имя запроса", - "query_editor.save_modal.name_required": "Введите имя запроса.", - "query_editor.save_modal.name_placeholder": "Например: запросить всех пользователей", - "query_editor.save_modal.unnamed": "Запрос без имени", - "query_editor.ai_prompt.default_source": "База данных", - "query_editor.ai_prompt.default_database": "По умолчанию", - "query_editor.ai_prompt.context": "Контекст: {{type}} {{name}}, выбранная база данных {{database}}.\n", - "query_editor.ai_prompt.generate": "Сгенерируй запрос на основе текущей схемы базы данных.", - "query_editor.ai_prompt.explain": "Объясни логику выполнения этой SQL-инструкции:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.optimize": "Проанализируй эту SQL-инструкцию на проблемы производительности и предложи оптимизацию:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.schema": "Проанализируй текущую схему базы данных и предложи улучшения производительности и дизайна.", - "query_editor.ai_prompt.diagnose": "При выполнении этого SQL возникла ошибка:\n```sql\n{{sql}}\n```\n\nБаза данных вернула ошибку:\n```text\n{{error}}\n```\n\nПроанализируй причину и предложи исправление.", - "query_editor.slash_command.query.label": "Запрос на естественном языке", - "query_editor.slash_command.query.description": "Опишите, что нужно запросить", - "query_editor.slash_command.query.prompt": "Напиши SQL-запрос для этого требования:", - "query_editor.slash_command.sql.label": "Сгенерировать SQL", - "query_editor.slash_command.sql.description": "Описать требование и сгенерировать инструкцию", - "query_editor.slash_command.sql.prompt": "Сгенерируй SQL для этого требования:", - "query_editor.slash_command.explain.label": "Объяснить SQL", - "query_editor.slash_command.explain.description": "Объяснить логику выбранного SQL", - "query_editor.slash_command.explain.prompt": "Объясни логику выполнения этой SQL-инструкции:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.optimize.label": "Анализ оптимизации", - "query_editor.slash_command.optimize.description": "Проанализировать узкие места производительности SQL", - "query_editor.slash_command.optimize.prompt": "Проанализируй эту SQL-инструкцию на проблемы производительности и предложи оптимизацию:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.schema.label": "Ревью дизайна таблиц", - "query_editor.slash_command.schema.description": "Проверить качество структуры таблиц", - "query_editor.slash_command.schema.prompt": "Проверь дизайн связанных таблиц, включая типы полей, нормализацию, индексы и предложения по улучшению.", - "query_editor.slash_command.index.label": "Рекомендации по индексам", - "query_editor.slash_command.index.description": "Рекомендовать стратегию индексов", - "query_editor.slash_command.index.prompt": "На основе текущей структуры таблиц и типичных сценариев запросов предложи стратегию индексов и при необходимости добавь SQL.", - "query_editor.slash_command.diff.label": "Сравнение таблиц", - "query_editor.slash_command.diff.description": "Сравнить различия таблиц и создать изменения", - "query_editor.slash_command.diff.prompt": "Сравни структуры двух таблиц и сгенерируй ALTER-инструкции для миграции со старой версии на новую.", - "query_editor.slash_command.mock.label": "Тестовые данные", - "query_editor.slash_command.mock.description": "Сгенерировать тестовые INSERT-данные", - "query_editor.slash_command.mock.prompt": "Сгенерируй 10 осмысленных тестовых INSERT-строк для связанной таблицы.", - "query_editor.completion.detail.aggregate": "Агрегатная функция", - "query_editor.completion.detail.string": "Строковая функция", - "query_editor.completion.detail.math": "Математическая функция", - "query_editor.completion.detail.date_time": "Функция даты и времени", - "query_editor.completion.detail.conditional": "Условная функция", - "query_editor.completion.detail.conversion": "Функция преобразования типа", - "query_editor.completion.detail.json": "JSON-функция", - "query_editor.completion.detail.utility": "Служебная функция", - "query_editor.completion.detail.info": "Информационная функция", - "query_editor.completion.detail.window": "Оконная функция", - "query_editor.completion.detail.sql_function": "SQL-функция", - "query_editor.completion.detail.aggregate_count": "Агрегат - подсчет", - "query_editor.completion.detail.string_concat": "Строка - конкатенация", - "query_editor.completion.detail.math_abs": "Математика - абсолютное значение", - "query_editor.completion.detail.date_now": "Дата - текущая дата и время", - "query_editor.completion.detail.conditional_if": "Условие - IF", - "query_editor.completion.detail.conversion_cast": "Преобразование - приведение типа", - "query_editor.completion.detail.json_extract": "JSON - извлечь значение", - "query_editor.completion.detail.crypto_md5": "Хеш - MD5", - "query_editor.completion.detail.info_database": "Информация - текущая база данных", - "query_editor.completion.detail.window_row_number": "Окно - номер строки", - "query_editor.completion.detail.modifier_distinct": "Модификатор - уникальные значения", - "query_editor.completion.action.absolute_value": "абсолютное значение", - "query_editor.completion.action.approximate_distinct": "приблизительные уникальные значения", - "query_editor.completion.action.approximate_distinct_count": "приблизительный подсчет уникальных значений", - "query_editor.completion.action.approximate_percentile": "приблизительный перцентиль", - "query_editor.completion.action.approximate_quantile": "приблизительный квантиль", - "query_editor.completion.action.array_aggregation": "агрегация массива", - "query_editor.completion.action.array_length": "длина массива", - "query_editor.completion.action.average": "среднее", - "query_editor.completion.action.bitmap_aggregation": "агрегация Bitmap", - "query_editor.completion.action.bitmap_construction": "построить Bitmap", - "query_editor.completion.action.bitmap_count": "количество Bitmap", - "query_editor.completion.action.boolean_and_aggregation": "булева AND-агрегация", - "query_editor.completion.action.boolean_or_aggregation": "булева OR-агрегация", - "query_editor.completion.action.character_length": "длина строки", - "query_editor.completion.action.concat_with_separator": "конкатенация с разделителем", - "query_editor.completion.action.concatenation": "конкатенация", - "query_editor.completion.action.condition_mapping": "сопоставление условий", - "query_editor.completion.action.conditional_check": "проверка условия", - "query_editor.completion.action.count": "подсчет", - "query_editor.completion.action.current_database": "текущая база данных", - "query_editor.completion.action.current_date": "текущая дата", - "query_editor.completion.action.current_date_time": "текущая дата и время", - "query_editor.completion.action.current_time": "текущее время", - "query_editor.completion.action.current_timestamp": "текущая временная метка", - "query_editor.completion.action.current_user": "текущий пользователь", - "query_editor.completion.action.database_current_time": "текущее время базы данных", - "query_editor.completion.action.date_addition": "прибавление даты", - "query_editor.completion.action.date_conversion": "преобразовать в дату", - "query_editor.completion.action.date_difference": "разница дат", - "query_editor.completion.action.date_field_extraction": "извлечь поле даты", - "query_editor.completion.action.date_formatting": "форматирование даты", - "query_editor.completion.action.date_subtraction": "вычитание даты", - "query_editor.completion.action.date_truncation": "усечение даты", - "query_editor.completion.action.date_value": "дата", - "query_editor.completion.action.datetime_conversion": "преобразовать в дату и время", - "query_editor.completion.action.datetime_value": "дата и время", - "query_editor.completion.action.decimal_truncation": "усечь десятичные знаки", - "query_editor.completion.action.dense_rank": "плотный ранг", - "query_editor.completion.action.distinct_array_aggregation": "агрегация уникальных массивов", - "query_editor.completion.action.e_power": "степень числа e", - "query_editor.completion.action.elapsed_time": "прошедшее время", - "query_editor.completion.action.epoch_seconds": "секунды эпохи", - "query_editor.completion.action.exact_distinct": "точные уникальные значения", - "query_editor.completion.action.first_non_null": "вернуть первое не-NULL значение", - "query_editor.completion.action.first_value": "первое значение", - "query_editor.completion.action.format_as_text": "форматировать как текст", - "query_editor.completion.action.group_concatenation": "групповая конкатенация", - "query_editor.completion.action.guid_generation": "сгенерировать GUID", - "query_editor.completion.action.hexadecimal": "шестнадцатеричное значение", - "query_editor.completion.action.high_precision_current_time": "текущее время высокой точности", - "query_editor.completion.action.hll_aggregation": "HLL-агрегация", - "query_editor.completion.action.hll_hash": "HLL-хеш", - "query_editor.completion.action.instant_rate_of_change": "мгновенная скорость изменения", - "query_editor.completion.action.int64_conversion": "преобразовать в Int64", - "query_editor.completion.action.interpolation": "интерполяция", - "query_editor.completion.action.json_string_extraction": "извлечение JSON-строки", - "query_editor.completion.action.json_unquote": "убрать кавычки JSON", - "query_editor.completion.action.json_value_extraction": "извлечение JSON-значения", - "query_editor.completion.action.json_value_set": "задать JSON-значение", - "query_editor.completion.action.jsonb_path_extraction": "извлечение пути JSONB", - "query_editor.completion.action.julian_day": "юлианский день", - "query_editor.completion.action.last_insert_id": "последний ID вставки", - "query_editor.completion.action.last_row": "последняя строка", - "query_editor.completion.action.last_value": "последнее значение", - "query_editor.completion.action.least_squares": "метод наименьших квадратов", - "query_editor.completion.action.left_padding": "дополнить слева", - "query_editor.completion.action.left_space_trimming": "убрать пробелы слева", - "query_editor.completion.action.left_substring": "извлечь слева", - "query_editor.completion.action.length": "длина", - "query_editor.completion.action.list_aggregation": "агрегация списка", - "query_editor.completion.action.list_unnest": "развернуть список", - "query_editor.completion.action.log_base_10": "логарифм по основанию 10", - "query_editor.completion.action.log_base_2": "логарифм по основанию 2", - "query_editor.completion.action.logarithm": "логарифм", - "query_editor.completion.action.lowercase": "преобразовать в нижний регистр", - "query_editor.completion.action.maximum": "максимум", - "query_editor.completion.action.md5_hash": "MD5-хеш", - "query_editor.completion.action.minimum": "минимум", - "query_editor.completion.action.modulo": "остаток от деления", - "query_editor.completion.action.month_addition": "добавить месяцы", - "query_editor.completion.action.month_difference": "разница месяцев", - "query_editor.completion.action.month_end_date": "дата конца месяца", - "query_editor.completion.action.next_row": "следующая строка", - "query_editor.completion.action.null_branch": "ветвь NULL", - "query_editor.completion.action.null_if_equal": "вернуть NULL при равенстве", - "query_editor.completion.action.null_replacement": "замена NULL", - "query_editor.completion.action.number_conversion": "преобразовать в число", - "query_editor.completion.action.number_formatting": "форматирование числа", - "query_editor.completion.action.position_lookup": "найти позицию", - "query_editor.completion.action.power_operation": "возведение в степень", - "query_editor.completion.action.previous_row": "предыдущая строка", - "query_editor.completion.action.quantile": "квантиль", - "query_editor.completion.action.random_number": "случайное число", - "query_editor.completion.action.rank": "ранг", - "query_editor.completion.action.rate_of_change": "скорость изменения", - "query_editor.completion.action.regex_match": "совпадение по регулярному выражению", - "query_editor.completion.action.regex_replace": "замена по регулярному выражению", - "query_editor.completion.action.replacement": "замена", - "query_editor.completion.action.right_padding": "дополнить справа", - "query_editor.completion.action.right_space_trimming": "убрать пробелы справа", - "query_editor.completion.action.right_substring": "извлечь справа", - "query_editor.completion.action.round_down": "округлить вниз", - "query_editor.completion.action.round_up": "округлить вверх", - "query_editor.completion.action.rounding": "округление", - "query_editor.completion.action.row_number": "номер строки", - "query_editor.completion.action.set_lookup": "поиск по множеству", - "query_editor.completion.action.sha1_hash": "SHA1-хеш", - "query_editor.completion.action.sha2_hash": "SHA2-хеш", - "query_editor.completion.action.space_trimming": "убрать пробелы", - "query_editor.completion.action.spread": "разброс", - "query_editor.completion.action.sql_literal": "SQL-литерал", - "query_editor.completion.action.square_root": "квадратный корень", - "query_editor.completion.action.string_aggregation": "агрегация строк", - "query_editor.completion.action.string_conversion": "преобразовать в строку", - "query_editor.completion.action.string_repetition": "повторить строку", - "query_editor.completion.action.string_reversal": "обратить строку", - "query_editor.completion.action.string_to_date": "преобразовать строку в дату", - "query_editor.completion.action.string_to_timestamp": "преобразовать строку во временную метку", - "query_editor.completion.action.struct_construction": "построить структуру", - "query_editor.completion.action.substring_extraction": "извлечение подстроки", - "query_editor.completion.action.sum": "сумма", - "query_editor.completion.action.time_difference": "разница времени", - "query_editor.completion.action.time_value": "время", - "query_editor.completion.action.time_weighted_average": "среднее, взвешенное по времени", - "query_editor.completion.action.timestamp_difference": "разница временных меток", - "query_editor.completion.action.truncate_date_or_number": "усечь дату или число", - "query_editor.completion.action.try_conversion": "попытаться преобразовать", - "query_editor.completion.action.type_conversion": "преобразование типа", - "query_editor.completion.action.unix_time_to_datetime": "преобразовать Unix-время в дату и время", - "query_editor.completion.action.unix_timestamp": "Unix-временная метка", - "query_editor.completion.action.uppercase": "преобразовать в верхний регистр", - "query_editor.completion.action.uuid_generation": "сгенерировать UUID", - "query_editor.completion.action.value_formatting": "форматирование значения", - "query_editor.completion.action.version": "версия", - "data_grid.action.apply": "Применить", - "data_grid.ai_prompt.analyze_page": "Проанализируй следующие данные результата запроса (первые {{count}} строк-образцов):\n```json\n{{json}}\n```\n\nОпредели особенности данных, найди закономерности или дай бизнес-выводы.", - "data_grid.batch_fill.set_null": "Установить NULL", - "data_grid.batch_fill.title": "Массовое заполнение ({{count}} ячеек)", - "data_grid.batch_fill.value_placeholder": "Введите значение для заполнения", - "data_grid.cell_editor.now": "Сейчас", - "data_grid.cell_editor.title": "Редактировать ячейку", - "data_grid.cell_editor.title_with_column": "Редактировать ячейку: {{column}}", - "data_grid.column.comment_tooltip": "Комментарий: {{comment}}", - "data_grid.column.drag_tooltip": "Перетащите, чтобы изменить порядок столбцов", - "data_grid.column.foreign_key_jump_title": "Перейти к таблице внешнего ключа: {{tableName}}", - "data_grid.column.foreign_key_tooltip": "Внешний ключ: {{target}}", - "data_grid.column.resize_tooltip": "Перетащите, чтобы изменить ширину столбца; двойной щелчок подгонит автоматически", - "data_grid.column.type_tooltip": "Тип: {{type}}", - "data_grid.column_quick_find.placeholder": "Перейти к столбцу...", - "data_grid.column_quick_find.tooltip": "Введите имя столбца, затем нажмите Enter или кнопку перехода, чтобы перейти к этому столбцу", - "data_grid.ai_insight.prompt": "Проанализируй следующие результаты запроса (первые {{count}} строк примера):\n```json\n{{json}}\n```\n\nПроанализируй характеристики данных, найди закономерности или предложи бизнес-инсайты.", - "data_grid.datetime_picker.now": "Сейчас", - "data_grid.column_settings.column_visibility": "Видимость столбцов", - "data_grid.column_settings.display_settings": "Настройки отображения", - "data_grid.column_settings.field_info": "Информация о поле", - "data_grid.column_settings.hide_all": "Скрыть все", - "data_grid.column_settings.remember_column_order": "Запомнить пользовательский порядок столбцов", - "data_grid.column_settings.remember_hidden_columns": "Запомнить настройки скрытых столбцов", - "data_grid.column_settings.reset_hidden": "Сбросить скрытые столбцы", - "data_grid.column_settings.reset_hidden_success": "Все столбцы снова отображаются", - "data_grid.column_settings.reset_order": "Сбросить порядок", - "data_grid.column_settings.reset_order_success": "Порядок столбцов по умолчанию восстановлен", - "data_grid.column_settings.search_columns_placeholder": "Поиск по именам столбцов...", - "data_grid.column_settings.show_all": "Показать все", - "data_grid.column_settings.show_comments": "Показывать комментарии столбцов в заголовке", - "data_grid.column_settings.show_types": "Показывать типы столбцов в заголовке", - "data_grid.context_menu.auto_fit_column": "Подогнать ширину столбца по содержимому", - "data_grid.context_menu.clear_column_sort": "Сбросить сортировку этого поля", - "data_grid.context_menu.column_display_section": "Отображение поля", - "data_grid.context_menu.column_no_comment": "Нет комментария", - "data_grid.context_menu.column_unknown_type": "Неизвестный тип", - "data_grid.context_menu.column_unnamed_field": "Поле без имени", - "data_grid.context_menu.copy_as_csv": "Копировать как CSV", - "data_grid.context_menu.copy_as_delete": "Копировать как DELETE", - "data_grid.context_menu.copy_as_insert": "Копировать как INSERT", - "data_grid.context_menu.copy_as_json": "Копировать как JSON", - "data_grid.context_menu.copy_as_markdown": "Копировать как Markdown", - "data_grid.context_menu.copy_as_update": "Копировать как UPDATE", - "data_grid.context_menu.copy_column_data": "Копировать данные столбца", - "data_grid.context_menu.copy_field_name": "Копировать имя поля", - "data_grid.context_menu.copy_row_data": "Копировать данные строки", - "data_grid.context_menu.current_marker": "Текущий", - "data_grid.context_menu.current_row": "Текущая строка", - "data_grid.context_menu.current_cell": "Текущая ячейка", - "data_grid.context_menu.edit_section": "Редактировать", - "data_grid.context_menu.edit_row": "Редактировать эту строку", - "data_grid.context_menu.copy_row_as_new": "Копировать эту строку как новую", - "data_grid.context_menu.undo_cell_change": "Отменить изменение этой ячейки", - "data_grid.context_menu.export_as_csv": "Экспортировать как CSV", - "data_grid.context_menu.export_as_excel": "Экспортировать как Excel", - "data_grid.context_menu.export_as_html": "Экспортировать как HTML", - "data_grid.context_menu.export_as_json": "Экспортировать как JSON", - "data_grid.context_menu.export_selected": "Экспортировать выбранные данные", - "data_grid.context_menu.fill_to_selected_rows": "Заполнить выбранные строки ({{count}})", - "data_grid.context_menu.hide_column": "Скрыть это поле", - "data_grid.context_menu.hide_column_comment": "Скрыть комментарий поля", - "data_grid.context_menu.hide_column_type": "Скрыть тип поля", - "data_grid.context_menu.paste_copied_columns": "Вставить скопированные столбцы (с теми же именами)", - "data_grid.context_menu.paste_row_as_new": "Вставить как новую строку", - "data_grid.context_menu.paste_row_as_new_count": "Вставить как новую строку ({{count}})", - "data_grid.context_menu.show_column_comment": "Показать комментарий поля", - "data_grid.context_menu.show_column_type": "Показать тип поля", - "data_grid.context_menu.sort_ascending": "Сортировать по возрастанию", - "data_grid.context_menu.sort_descending": "Сортировать по убыванию", - "data_grid.context_menu.sort_section": "Сортировка", - "data_grid.copy_sql.error.missing_safe_where": "В текущем наборе результатов нет первичного или уникального ключа, который безопасно определяет строку, и он не покрывает все столбцы таблицы, поэтому условие WHERE нельзя сформировать.", - "data_grid.copy_sql.error.missing_table_name": "Текущий набор результатов не связан с явным именем таблицы, поэтому {{mode}} SQL нельзя сформировать.", - "data_grid.copy_sql.error.no_copyable_fields": "В текущем наборе результатов нет полей, которые можно скопировать, поэтому SQL нельзя сформировать.", - "data_grid.data_panel.click_cell_description": "Щелкните ячейку таблицы, чтобы просмотреть данные полностью", - "data_grid.data_panel.click_cell_title": "Щелкните ячейку для просмотра данных", - "data_grid.data_panel.title": "Предпросмотр данных", - "data_grid.ddl.copy": "Копировать DDL", - "data_grid.ddl.layout_bottom": "Снизу", - "data_grid.ddl.layout_side": "Боковая панель", - "data_grid.ddl.loading": "Загрузка DDL...", - "data_grid.ddl.reload": "Перезагрузить", - "data_grid.ddl.sidebar_aria": "Боковая панель DDL таблицы", - "data_grid.ddl.view": "Показать DDL", - "data_grid.error_boundary.description": "При отображении таблицы данных произошла ошибка. Возможно, формат данных недопустим.", - "data_grid.error_boundary.retry": "Повторить", - "data_grid.error_boundary.title": "Ошибка отображения", - "data_grid.export.all_data": "Экспортировать все данные", - "data_grid.export.all_rows": "Экспорт всех строк ({{count}})", - "data_grid.export.all_rows_requery": "Экспортировать всё (повторный запрос)", - "data_grid.export.current_page": "Экспортировать текущую страницу ({{count}} строк)", - "data_grid.export.current_page_rows": "Экспорт текущей страницы ({{count}} строк)", - "data_grid.export.group_filtered_results": "Отфильтрованные результаты", - "data_grid.export.group_full_table": "Вся таблица", - "data_grid.export.no_selection_prompt": "Строки не выбраны. Выберите область экспорта:", - "data_grid.export.options_title": "Параметры экспорта", - "data_grid.export.query_result_title": "Экспорт результатов запроса", - "data_grid.export.scope_prompt": "Выберите область экспорта:", - "data_grid.export.selected_rows": "Экспорт выбранных строк ({{count}})", - "data_grid.table_fallback.query_result": "Результат запроса", - "data_grid.metadata_view.fields_badge": "Поля", - "data_grid.metadata_view.er_table_badge": "Таблица", - "data_grid.metadata_view.er_field_badge": "Поле", - "data_grid.metadata_view.er_current_badge": "Текущая таблица", - "data_grid.metadata_view.er_reference_badge": "Ссылается на", - "data_grid.metadata_view.er_referenced_by_badge": "На нее ссылаются", - "data_grid.metadata_view.er_related_table_count": "Связанных таблиц: {{count}}", - "data_grid.metadata_view.er_relation_count": "Связей: {{count}}", - "data_grid.metadata_view.er_hidden_columns": "Еще {{count}} полей", - "data_grid.metadata_view.er_expand_hidden_columns": "Показать еще {{count}} полей", - "data_grid.metadata_view.er_expand_fields": "Развернуть все поля", - "data_grid.metadata_view.er_collapse_fields": "Свернуть сводку полей", - "data_grid.metadata_view.er_relation_depth": "Глубина {{count}}", - "data_grid.metadata_view.er_expand_relations": "Развернуть следующий уровень", - "data_grid.metadata_view.er_reset_relations": "Сбросить до одного уровня", - "data_grid.metadata_view.er_empty": "Для этой таблицы не найдено связей по внешним ключам", - "data_grid.metadata_view.er_partial_warning": "Часть связей не удалось загрузить. Диаграмма может быть неполной.", - "data_grid.metadata_view.er_open_table": "Открыть таблицу", - "data_grid.metadata_view.field_count": "{{count}} полей", - "data_grid.metadata_view.column_name": "Имя", - "data_grid.metadata_view.column_type": "Тип", - "data_grid.metadata_view.default_value": "Значение по умолчанию", - "data_grid.metadata_view.comment": "Комментарий", - "data_grid.filter.add_condition": "Добавить условие", - "data_grid.filter.add_sort": "Добавить сортировку", - "data_grid.filter.apply": "Применить", - "data_grid.filter.apply_where": "Применить WHERE", - "data_grid.filter.clear": "Очистить", - "data_grid.filter.custom_where_placeholder": "Введите пользовательское выражение WHERE (без WHERE), например: status IN ('A','B')", - "data_grid.filter.disable_all": "Отключить все", - "data_grid.filter.enable_all": "Включить все", - "data_grid.filter.enabled": "Включено", - "data_grid.filter.end_value_placeholder": "Конечное значение", - "data_grid.filter.first_condition": "Первое", - "data_grid.filter.invalid_quick_where": "Условие WHERE не может содержать точки с запятой или SQL-комментарии", - "data_grid.filter.list_values_placeholder": "Разделяйте несколько значений запятыми или переносами строк", - "data_grid.filter.logic.and": "И (AND)", - "data_grid.filter.logic.or": "Или (OR)", - "data_grid.filter.mongodb_query_placeholder": "Введите объект MongoDB-запроса в JSON, например {\"status\":\"A\"}", - "data_grid.filter.no_value_placeholder": "Значение не требуется", - "data_grid.filter.op.between": "Между", - "data_grid.filter.op.contains": "Содержит", - "data_grid.filter.op.custom": "[Пользовательское]", - "data_grid.filter.op.ends_with": "Заканчивается на", - "data_grid.filter.op.in_list": "В списке", - "data_grid.filter.op.is_empty": "Пусто", - "data_grid.filter.op.is_not_empty": "Не пусто", - "data_grid.filter.op.is_not_null": "Не NULL", - "data_grid.filter.op.is_null": "NULL", - "data_grid.filter.op.not_between": "Не между", - "data_grid.filter.op.not_contains": "Не содержит", - "data_grid.filter.op.not_ends_with": "Не заканчивается на", - "data_grid.filter.op.not_in_list": "Не в списке", - "data_grid.filter.op.not_starts_with": "Не начинается с", - "data_grid.filter.op.starts_with": "Начинается с", - "data_grid.filter.quick_where_placeholder": "Введите условие после WHERE, например status = 1 AND name LIKE 'A%'", - "data_grid.filter.search_field_placeholder": "Поиск по именам полей", - "data_grid.filter.select_sort_field_placeholder": "Выберите поле сортировки", - "data_grid.filter.sort_asc": "По возрастанию", - "data_grid.filter.sort_desc": "По убыванию", - "data_grid.filter.sort_label": "Сортировка", - "data_grid.filter.start_value_placeholder": "Начальное значение", - "data_grid.filter.suggestion.column": "Столбец", - "data_grid.filter.suggestion.keyword": "Ключевое слово", - "data_grid.filter.suggestion.operator": "Оператор", - "data_grid.filter.then_label": "Затем", - "data_grid.json_editor.apply_changes": "Применить изменения", - "data_grid.json_editor.description": "Редактируйте в текущем порядке результатов. В режиме JSON нельзя добавлять или удалять записи. Для этого используйте табличный режим.", - "data_grid.json_editor.format": "Форматировать JSON", - "data_grid.json_editor.invalid_format": "Недопустимый формат JSON: {{error}}", - "data_grid.json_editor.title": "Редактировать набор результатов JSON", - "data_grid.message.cell_edit_mode_entered": "Режим редактирования ячеек включен. Перетаскивайте, чтобы выбрать несколько ячеек.", - "data_grid.message.cell_edit_mode_exited": "Режим редактирования ячеек отключен.", - "data_grid.message.change_set_build_failed": "Не удалось построить набор изменений", - "data_grid.message.change_set_build_failed_detail": "Не удалось построить набор изменений: {{detail}}", - "data_grid.message.column_order_reset": "Порядок столбцов по умолчанию восстановлен", - "data_grid.message.column_quick_find_not_found": "Столбец поля не найден: {{query}}", - "data_grid.message.column_quick_find_not_rendered": "Столбец поля \"{{column}}\" сейчас не отрисован, поэтому его нельзя найти.", - "data_grid.message.column_visibility_reset": "Все столбцы восстановлены", - "data_grid.message.auto_commit_failed": "Автофиксация не удалась: {{detail}}", - "data_grid.message.auto_commit_success": "Автофиксация выполнена", - "data_grid.message.commit_failed": "Не удалось зафиксировать изменения: {{detail}}", - "data_grid.message.undo_added_row_hint": "Для новых строк используйте удаление выбранных строк или откат всей таблицы.", - "data_grid.message.undo_cell_original_missing": "Исходные данные этой ячейки не найдены, поэтому отменить изменение нельзя.", - "data_grid.message.undo_cell_success": "Изменение ячейки отменено", - "data_grid.message.copied_columns": "Скопировано столбцов: {{count}}. Их можно вставить в целевые строки.", - "data_grid.message.copied_rows": "Скопировано строк: {{count}}. Их можно вставить как новые строки.", - "data_grid.message.copied_to_clipboard": "Скопировано в буфер обмена", - "data_grid.message.copy_columns_first": "Сначала скопируйте значения столбцов", - "data_grid.message.copy_columns_same_row_only": "При копировании значений столбцов выбирайте ячейки только из одной строки", - "data_grid.message.copy_rows_first": "Сначала скопируйте строки", - "data_grid.message.copy_sql_not_supported": "Этот источник данных не поддерживает копирование SQL. Используйте копирование JSON/CSV/Markdown.", - "data_grid.message.current_record_not_editable": "Текущую запись нельзя редактировать", - "data_grid.message.current_row_no_copyable_content": "В текущей строке нет копируемого содержимого", - "data_grid.message.ddl_copied": "DDL скопирован в буфер обмена", - "data_grid.message.ddl_copy_failed": "Не удалось скопировать DDL", - "data_grid.message.ddl_load_failed": "Не удалось загрузить DDL", - "data_grid.message.ddl_missing_context": "У текущей таблицы отсутствует подключение или имя таблицы, поэтому DDL нельзя просмотреть", - "data_grid.message.drag_select_cells_to_copy": "Сначала перетащите, чтобы выбрать ячейки для копирования", - "data_grid.message.export_failed": "Не удалось экспортировать: {{detail}}", - "data_grid.message.export_success": "Экспорт завершен", - "data_grid.message.export_with_uncommitted_changes": "Есть незафиксированные изменения. Для экспорта будут использованы видимые данные таблицы. Если нужны полные данные длинных полей, сначала зафиксируйте изменения.", - "data_grid.message.exporting": "Экспорт...", - "data_grid.message.exporting_all": "Экспорт всех данных...", - "data_grid.message.exporting_rows": "Экспорт строк: {{count}}...", - "data_grid.message.filled_cells": "Заполнено ячеек: {{count}}", - "data_grid.message.filled_rows": "Заполнено строк: {{count}}", - "data_grid.message.current_field_not_editable": "Текущее поле недоступно для редактирования", - "data_grid.message.filtered_export_not_supported": "Этот источник данных не поддерживает экспорт отфильтрованных результатов", - "data_grid.message.filtered_export_uses_committed_data": "Есть незафиксированные изменения. Для экспорта отфильтрованных результатов используются зафиксированные данные базы.", - "data_grid.message.import_done": "Импорт завершен", - "data_grid.message.json_applied": "Изменения JSON применены к текущему набору результатов. Можно продолжить и зафиксировать транзакцию.", - "data_grid.message.json_invalid": "Недопустимый JSON: {{detail}}", - "data_grid.message.json_parse_failed": "Не удалось разобрать JSON: {{detail}}", - "data_grid.message.json_record_count_mismatch": "Количество записей не совпадает: сейчас {{current}} строк, в JSON {{json}} строк. В этом режиме не добавляйте и не удаляйте записи.", - "data_grid.message.json_record_missing_row_key": "В записи {{index}} отсутствует идентификатор строки, поэтому ее нельзя применить", - "data_grid.message.json_record_not_object": "Запись {{index}} не является объектом, поэтому ее нельзя применить", - "data_grid.message.json_view_must_be_array": "JSON-представление должно быть массивом, где каждый элемент соответствует одной записи", - "data_grid.message.keep_one_visible_column": "Оставьте хотя бы один видимый столбец", - "data_grid.message.locate_record_to_edit": "Сначала найдите запись для редактирования", - "data_grid.message.locator_column_value_empty": "Значение столбца локатора {{column}} пустое, поэтому изменения нельзя безопасно отправить.", - "data_grid.message.no_changes_to_commit": "Нет изменений для фиксации", - "data_grid.message.no_copyable_cells": "Копируемые ячейки не распознаны", - "data_grid.message.no_copyable_columns": "Копируемые столбцы не распознаны", - "data_grid.message.no_copyable_rows": "Копируемые строки не распознаны", - "data_grid.message.no_data_changes": "Данные не изменились", - "data_grid.message.no_ddl_to_copy": "Нет DDL для копирования", - "data_grid.message.no_field_name": "Имя поля не распознано", - "data_grid.message.no_safe_locator": "Для текущего результата нет безопасного способа определить строку, поэтому изменения нельзя отправить.", - "data_grid.message.no_filter_applied": "Сейчас не применено ни одно условие фильтра", - "data_grid.message.no_rows_selected": "Строки не выбраны", - "data_grid.message.no_other_rows_to_fill": "Нет других выбранных строк, которые можно заполнить", - "data_grid.message.no_pasteable_editable_fields": "Нет редактируемых полей, которые можно вставить", - "data_grid.message.no_pasteable_rows": "Нет строк, которые можно вставить", - "data_grid.message.pasted_columns_to_rows": "Вставлено в {{rows}} строк, всего {{cells}} ячеек", - "data_grid.message.pasted_rows_as_new": "Вставлено новых строк: {{count}}. Проверьте их перед фиксацией.", - "data_grid.message.preview_sql_failed": "Не удалось сформировать предпросмотр SQL", - "data_grid.message.preview_sql_failed_detail": "Не удалось сформировать предпросмотр SQL: {{detail}}", - "data_grid.preview_sql.copied": "Скопировано", - "data_grid.preview_sql.no_changes": "Нет изменений", - "data_grid.preview_sql.summary": "{{deletes}} DELETE, {{updates}} UPDATE, {{inserts}} INSERT", - "data_grid.preview_sql.title": "Предпросмотр изменений", - "data_grid.message.result_set_no_copyable_content": "В текущем наборе результатов нет копируемого содержимого", - "data_grid.message.saved": "Сохранено", - "data_grid.message.select_cells_to_fill": "Сначала выберите ячейки для заполнения", - "data_grid.message.select_file_failed": "Не удалось выбрать файл: {{detail}}", - "data_grid.message.select_rows_to_copy": "Сначала выберите строки для копирования", - "data_grid.message.select_rows_to_fill": "Сначала выберите строки для заполнения", - "data_grid.message.select_same_row_cells_to_copy": "Сначала выберите ячейки в одной строке для копирования", - "data_grid.message.select_target_rows": "Сначала выберите целевые строки", - "data_grid.message.selected_cells_no_update": "Выбранные ячейки не требуют обновления", - "data_grid.message.selection_no_copyable_content": "В текущем выделении нет копируемого содержимого", - "data_grid.message.target_row_not_found": "Целевая строка не найдена. Обновите данные и повторите попытку.", - "data_grid.message.target_rows_cannot_only_source": "Целевые строки не могут состоять только из исходной строки. Выберите другую строку.", - "data_grid.message.target_rows_no_update": "Целевые строки не требуют обновления", - "data_grid.message.transaction_committed": "Транзакция зафиксирована", - "data_viewer.message.result_not_ready": "Текущий набор результатов еще не готов. Сначала загрузите данные один раз.", - "data_viewer.message.query_failed": "Ошибка запроса", - "data_viewer.message.query_timeout": "Запрос превысил тайм-аут подключения и был прерван. Увеличьте тайм-аут подключения или сократите область запроса и повторите попытку.", - "data_viewer.message.duckdb_query_timeout": "Запрос DuckDB превысил тайм-аут подключения и был прерван. Увеличьте тайм-аут подключения или сократите область сортировки/фильтрации и повторите попытку.", - "data_viewer.message.connection_not_found": "Подключение не найдено", - "data_viewer.message.fetch_data_failed_detail": "Ошибка при получении данных: {{detail}}", - "data_viewer.message.total_count_failed": "Не удалось подсчитать общее количество строк", - "data_viewer.message.total_count_failed_detail": "Не удалось подсчитать общее количество строк: {{detail}}", - "data_viewer.message.total_count_parse_failed": "Не удалось разобрать результат подсчета общего количества строк", - "data_viewer.message.mongo_filter_invalid_detail": "Недопустимое условие фильтра MongoDB: {{detail}}", - "data_viewer.message.mongo_filter_parse_failed": "Не удалось разобрать", - "data_viewer.message.sort_buffer_retry_succeeded": "Буфер сортировки был автоматически увеличен, повторный запрос выполнен успешно.", - "data_viewer.read_only.reason.mongo_id_missing": "В наборе результатов MongoDB отсутствует _id, поэтому изменения нельзя безопасно отправить.", - "data_viewer.read_only.reason.metadata_unavailable": "Не удалось загрузить метаданные первичного ключа или уникального индекса, поэтому изменения нельзя безопасно отправить.", - "data_viewer.read_only.reason.index_metadata_unavailable": "Не удалось загрузить метаданные уникального индекса, поэтому изменения нельзя безопасно отправить.", - "data_viewer.read_only.reason.no_safe_locator": "Первичный ключ или пригодный уникальный индекс не найден, поэтому изменения нельзя безопасно отправить.", - "data_viewer.read_only.reason.oracle_rowid_missing": "Первичный ключ или пригодный уникальный индекс не найден, а Oracle ROWID отсутствует в результате, поэтому изменения нельзя безопасно отправить.", - "data_viewer.read_only.reason.primary_key_column_missing": "В наборе результатов отсутствует столбец первичного ключа {{columns}}, поэтому изменения нельзя безопасно отправить.", - "data_viewer.read_only.warning.table": "Таблица {{target}} остается только для чтения: {{reason}}", - "data_viewer.read_only.warning.collection": "Коллекция {{target}} остается только для чтения: {{reason}}", - "data_viewer.sql_log.phase.main_query": "Основной запрос", - "data_viewer.sql_log.phase.complex_type_fallback_retry": "Повтор с резервной обработкой сложного типа", - "data_viewer.sql_log.phase.sort_buffer_retry": "Повтор ({{size}} sort_buffer)", - "definition_viewer.object.view": "Представление", - "definition_viewer.object.materialized_view": "Материализованное представление", - "definition_viewer.object.routine": "Функция/процедура", - "definition_viewer.object.event": "Событие", - "definition_viewer.loading.view_definition": "Загрузка определения представления...", - "definition_viewer.loading.routine_definition": "Загрузка определения функции/процедуры...", - "definition_viewer.loading.event_definition": "Загрузка определения события...", - "definition_viewer.error.load_failed": "Не удалось загрузить", - "definition_viewer.error.connection_not_found": "Подключение к базе данных не найдено", - "definition_viewer.error.view_name_empty": "Имя представления пустое", - "definition_viewer.error.event_name_empty": "Имя события пустое", - "definition_viewer.error.routine_name_empty": "Имя функции/процедуры пустое", - "definition_viewer.error.query_failed": "Не удалось запросить определение", - "definition_viewer.error.query_failed_detail": "Не удалось запросить определение: {{detail}}", - "definition_viewer.field.database": "База данных", - "definition_viewer.field.type": "Тип", - "definition_viewer.editor.unsupported_view_definition": "Этот тип базы данных не поддерживает просмотр определений представлений", - "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite не поддерживает управление определениями функций/процедур", - "definition_viewer.editor.unsupported_routine_definition": "Этот тип базы данных не поддерживает просмотр определений функций/процедур", - "definition_viewer.editor.unsupported_event_definition": "Этот тип базы данных не поддерживает просмотр определений событий", - "definition_viewer.editor.unsupported_object_definition": "Просмотр определения этого объекта не поддерживается", - "definition_viewer.editor.view_definition_not_found": "Определение представления не найдено", - "definition_viewer.editor.routine_definition_not_found": "Определение функции/процедуры не найдено", - "definition_viewer.editor.event_definition_not_found": "Определение события не найдено", - "definition_viewer.editor.object_definition_not_found": "Определение {{object}} не найдено", - "definition_viewer.editor.metadata_fallback.header": "Текущий источник данных не вернул исполняемый текст определения; возвращены метаданные", - "definition_viewer.editor.metadata_fallback.name_label": "Имя", - "definition_viewer.editor.metadata_fallback.type_label": "Тип", - "definition_viewer.editor.event_fragment_fallback.header": "Текущий источник данных не вернул полный оператор CREATE EVENT; возвращен фрагмент определения события", - "definition_viewer.editor.sphinx.empty_result": "Текущий экземпляр Sphinx{{version}} не вернул определение {{object}}.", - "definition_viewer.editor.sphinx.compat_queries_hint": "Было выполнено несколько совместимых запросов. Причиной могут быть ограничения версии или неподдерживаемый тип объекта.", - "definition_viewer.editor.sphinx.unsupported_query": "Текущий экземпляр Sphinx{{version}} не поддерживает запрос определений {{object}}.", - "definition_viewer.editor.sphinx.failed_message_label": "Возвращенное сообщение об ошибке", - "definition_viewer.editor.sphinx.failed_message_unknown": "Возвращенное сообщение об ошибке: неизвестная ошибка", - "definition_viewer.editor.sphinx.version_suffix": " (версия: {{version}})", - "trigger_viewer.loading.definition": "Загрузка определения триггера...", - "trigger_viewer.error.load_failed": "Не удалось загрузить", - "trigger_viewer.error.connection_not_found": "Подключение к базе данных не найдено", - "trigger_viewer.error.trigger_name_empty": "Имя триггера пустое", - "trigger_viewer.error.query_failed": "Не удалось запросить определение триггера", - "trigger_viewer.error.query_failed_detail": "Не удалось запросить определение триггера: {{detail}}", - "trigger_viewer.field.trigger": "Триггер", - "trigger_viewer.field.database": "База данных", - "trigger_viewer.editor.unsupported.duckdb": "DuckDB не поддерживает триггеры", - "trigger_viewer.editor.unsupported.tdengine": "TDengine не поддерживает триггеры", - "trigger_viewer.editor.unsupported.mongodb": "MongoDB не поддерживает триггеры", - "trigger_viewer.editor.unsupported.generic": "Этот тип базы данных не поддерживает просмотр определений триггеров", - "trigger_viewer.editor.definition_not_found": "Определение триггера не найдено", - "trigger_viewer.editor.sphinx.version_suffix": " (версия: {{version}})", - "trigger_viewer.editor.sphinx.empty_result": "Текущий экземпляр Sphinx{{version}} не вернул определение триггера.", - "trigger_viewer.editor.sphinx.compat_queries_hint": "Выполнено несколько совместимых запросов. Причиной могут быть ограничения версии или неподдерживаемый тип объекта.", - "trigger_viewer.editor.sphinx.unsupported_query": "Текущий экземпляр Sphinx{{version}} не поддерживает запрос определений триггеров.", - "trigger_viewer.editor.sphinx.failed_message_label": "Возвращенное сообщение об ошибке", - "trigger_viewer.editor.sphinx.failed_message_unknown": "Возвращенное сообщение об ошибке: неизвестная ошибка", - "data_grid.modal.export_options.all_data": "Экспортировать все данные", - "data_grid.modal.export_options.current_page": "Экспортировать текущую страницу ({{count}} строк)", - "data_grid.modal.export_options.filtered_results": "Отфильтрованные результаты", - "data_grid.modal.export_options.no_rows_selected": "Строки не выбраны. Выберите область экспорта:", - "data_grid.modal.export_options.title": "Параметры экспорта", - "data_grid.modal.export_options.whole_table": "Вся таблица", - "data_grid.page_find.next": "Далее", - "data_grid.page_find.placeholder": "Поиск на текущей странице...", - "data_grid.page_find.previous": "Назад", - "data_grid.page_find.summary": "{{occurrences}} совпадений / {{cells}} ячеек", - "data_grid.page_find.tooltip": "Ищет только по строкам, загруженным на текущей странице. Условия WHERE не меняются.", - "data_grid.preview_panel.no_cell_description": "Нажмите ячейку таблицы, чтобы посмотреть полные данные", - "data_grid.preview_panel.no_cell_title": "Нажмите ячейку, чтобы посмотреть данные", - "data_grid.record_view.edit_current": "Редактировать текущую запись", - "data_grid.record_view.edit_json": "Редактировать JSON", - "data_grid.record_view.empty": "В текущем наборе результатов нет данных", - "data_grid.record_view.json_record_count": "Текущий набор результатов: {{count}} записей", - "data_grid.record_view.next": "Следующая", - "data_grid.record_view.previous": "Предыдущая", - "data_grid.record_view.record_position": "Запись {{current}} / {{total}}", - "data_grid.pagination.jump_action": "ОК", - "data_grid.pagination.jump_aria": "Перейти на страницу", - "data_grid.pagination.jump_label": "Перейти", - "data_grid.pagination.page.current": "Страница {{current}}", - "data_grid.pagination.page.known": "Страница {{current}} / {{totalPages}}", - "data_grid.pagination.page_size_aria": "Строк на странице", - "data_grid.pagination.page_size_option": "{{count}} строк / страница", - "data_grid.pagination.result_set": "Набор результатов", - "data_grid.pagination.summary.approximate": "Сейчас {{current}} строк / около {{total}} строк", - "data_grid.pagination.summary.cancelled": "Сейчас {{current}} строк / подсчет отменен", - "data_grid.pagination.summary.counting": "Сейчас {{current}} строк / подсчет общего числа...", - "data_grid.pagination.summary.counting_exact": "Сейчас {{current}} строк / подсчет точного общего числа...", - "data_grid.pagination.summary.empty": "Сейчас 0 строк / всего 0 строк", - "data_grid.pagination.summary.known": "Сейчас {{current}} строк / всего {{total}} строк", - "data_grid.pagination.summary.not_counted": "Сейчас {{current}} строк / общее число не подсчитано", - "data_grid.secondary.column_display": "Отображение столбцов", - "data_grid.secondary.data_preview": "Предпросмотр данных", - "data_grid.secondary.er_diagram": "ER-диаграмма", - "data_grid.secondary.jump_column": "Перейти к столбцу", - "data_grid.secondary.live": "активно", - "data_grid.secondary.object_design": "Дизайн объекта", - "data_grid.embedded_designer.title": "Проектирование таблицы ({{tableName}})", - "data_grid.secondary.pending_changes": "Не отправлено {{count}}", - "data_grid.secondary.row_count": "{{count}} строк", - "data_grid.secondary.view_ddl": "Показать DDL", - "data_grid.row_editor.popup_edit": "Редактировать во всплывающем окне", - "data_grid.row_editor.title": "Редактировать строку", - "data_grid.toolbar.add_row": "Добавить строку", - "data_grid.toolbar.ai_insight": "AI-анализ данных", - "data_grid.toolbar.ai_insight_short": "AI-анализ", - "data_grid.toolbar.ai_insight_tooltip": "Попросить AI проанализировать данные текущей страницы запроса", - "data_grid.toolbar.batch_fill": "Массовое заполнение ({{count}})", - "data_grid.toolbar.cancel_count": "Отменить подсчет", - "data_grid.toolbar.cancel_count_tooltip": "Отменить этот подсчет точного общего числа. Текущий просмотр не изменится.", - "data_grid.toolbar.cell_editor": "Редактор ячеек", - "data_grid.toolbar.commit": "Зафиксировать транзакцию ({{count}})", - "data_grid.toolbar.commit_label": "Зафиксировать транзакцию", - "data_grid.toolbar.commit_delay.seconds": "{{seconds}} с", - "data_grid.toolbar.commit_mode.auto": "Автофиксация", - "data_grid.toolbar.commit_mode.auto_countdown": "Фиксация через {{seconds}}s", - "data_grid.toolbar.commit_mode.manual": "Ручная фиксация", - "data_grid.toolbar.commit_mode.tooltip": "Управляет фиксацией изменений данных таблицы. Ручная фиксация безопаснее; автофиксация выполняется через выбранную задержку после последнего изменения.", - "data_grid.toolbar.copied_columns_count": "Скопировано столбцов: {{count}}", - "data_grid.toolbar.copy": "Копировать", - "data_grid.toolbar.copy_row": "Копировать строку", - "data_grid.toolbar.copy_selection": "Копировать выделение ({{count}})", - "data_grid.toolbar.copy_selection_columns": "Копировать значения столбцов из выделения ({{count}})", - "data_grid.toolbar.count_total": "Подсчитать всего", - "data_grid.toolbar.count_total_tooltip": "Подсчитать точное общее число с текущим фильтром", - "data_grid.toolbar.delete_selected": "Удалить выбранное", - "data_grid.toolbar.export": "Экспорт", - "data_grid.toolbar.filter": "Фильтр", - "data_grid.toolbar.import": "Импорт", - "data_grid.toolbar.paste_row": "Вставить строку", - "data_grid.toolbar.paste_row_count": "Вставить строку ({{count}})", - "data_grid.toolbar.paste_to_selected_rows": "Вставить в выбранные строки ({{count}})", - "data_grid.toolbar.preview_sql": "Предпросмотр SQL", - "data_grid.toolbar.preview_sql_generate": "Сформировать предпросмотр SQL", - "data_grid.toolbar.refresh": "Обновить", - "data_grid.toolbar.rollback": "Откат", - "data_grid.toolbar.selected_count": "Выбрано: {{count}}", - "data_grid.toolbar.undo_delete": "Отменить удаление", - "data_grid.view.edit_current_record": "Редактировать текущую запись", - "data_grid.view.edit_json": "Редактировать JSON", - "data_grid.view.empty_result": "В текущем наборе результатов нет данных", - "data_grid.view.next_record": "Следующая запись", - "data_grid.view.previous_record": "Предыдущая запись", - "data_grid.view.record_count": "Текущий набор результатов: {{count}} записей", - "data_grid.view.record_position": "Запись {{current}} / {{total}}", - "data_grid.view.result_view": "Просмотр результата", - "data_grid.view.table": "Таблица", - "data_grid.view.text": "Текст", - "table_designer.action.add": "Добавить", - "table_designer.action.add_after_selected": "Добавить после выбранного столбца", - "table_designer.action.add_column": "Добавить столбец", - "table_designer.action.apply": "Применить", - "table_designer.action.cancel": "Отмена", - "table_designer.action.copy_selected_to_new_table": "Скопировать выбранное в новую таблицу", - "table_designer.action.create": "Создать", - "table_designer.action.create_table": "Создать таблицу", - "table_designer.action.delete": "Удалить", - "table_designer.action.edit": "Изменить", - "table_designer.action.execute": "Выполнить", - "table_designer.action.refresh": "Обновить", - "table_designer.action.refresh_anyway": "Все равно обновить", - "table_designer.action.save": "Сохранить", - "table_designer.action.table_comment": "Комментарий таблицы", - "table_designer.action.view_statement": "Показать оператор", - "table_designer.column.actions": "Действия", - "table_designer.column.auto_increment": "Автоинкремент", - "table_designer.column.comment": "Комментарий", - "table_designer.column.default": "По умолчанию", - "table_designer.column.name": "Имя", - "table_designer.column.not_null": "NOT NULL", - "table_designer.column.primary_key": "Первичный ключ", - "table_designer.column.type": "Тип", - "table_designer.empty.triggers": "У этой таблицы нет триггеров", - "table_designer.fallback.empty": "(пусто)", - "table_designer.fallback.unknown_error": "Неизвестная ошибка", - "table_designer.fallback.unnamed_foreign_key": "(внешний ключ без имени)", - "table_designer.fallback.unnamed_index": "(индекс без имени)", - "table_designer.foreign_key.column.constraint_name": "Имя ограничения", - "table_designer.foreign_key.column.fields": "Поля", - "table_designer.foreign_key.column.ref_fields": "Ссылочные поля", - "table_designer.foreign_key.column.ref_table": "Ссылочная таблица", - "table_designer.index.column.fields": "Поля", - "table_designer.index.column.name": "Имя индекса", - "table_designer.index.column.type": "Тип индекса", - "table_designer.index.column.uniqueness": "Уникальность", - "table_designer.index.kind.fulltext": "Полнотекстовый индекс", - "table_designer.index.kind.normal": "Обычный индекс", - "table_designer.index.kind.normal_nonclustered": "Обычный индекс (некластеризованный)", - "table_designer.index.kind.primary_clustered": "Индекс первичного ключа (кластеризованный)", - "table_designer.index.kind.spatial": "Пространственный индекс", - "table_designer.index.kind.unique": "Уникальный индекс", - "table_designer.index.uniqueness.normal": "Обычный", - "table_designer.index.uniqueness.unique": "Уникальный", - "table_designer.label.create_statement": "CREATE-оператор для {{name}}", - "table_designer.label.create_statement_plain": "CREATE-оператор", - "table_designer.message.add_at_least_one_column": "Добавьте хотя бы один столбец", - "table_designer.message.columns_copied_to_new_table": "{{count}} столбцов скопировано в новую таблицу {{table}}", - "table_designer.message.connection_not_found": "Подключение не найдено", - "table_designer.message.delete_failed": "Не удалось удалить: {{detail}}", - "table_designer.message.drop_old_trigger_failed": "Не удалось удалить старый триггер: {{detail}}", - "table_designer.message.execution_failed": "Не удалось выполнить: {{detail}}", - "table_designer.message.execution_failed_plain": "Не удалось выполнить", - "table_designer.message.execution_failed_prefix": "Не удалось выполнить: ", - "table_designer.message.foreign_key_column_count_mismatch": "Количество локальных полей должно совпадать с количеством ссылочных полей", - "table_designer.message.foreign_key_created": "Внешний ключ создан", - "table_designer.message.foreign_key_delete_unsupported": "Эта база данных не поддерживает удаление этого внешнего ключа здесь", - "table_designer.message.foreign_key_deleted": "Внешний ключ удален", - "table_designer.message.foreign_key_maintenance_unsupported": "Эта база данных не поддерживает управление внешними ключами здесь", - "table_designer.message.foreign_key_name_exists": "Ограничение внешнего ключа уже существует: {{name}}", - "table_designer.message.foreign_key_name_required": "Введите имя ограничения внешнего ключа", - "table_designer.message.foreign_key_updated": "Внешний ключ обновлен", - "table_designer.message.index_created": "Индекс создан", - "table_designer.message.index_create_sql_unavailable": "Не удалось получить SQL создания индекса", - "table_designer.message.index_create_sql_placeholder": "SQL создания индекса пока недоступен", - "table_designer.message.index_delete_named_unsupported": "Эта база данных не поддерживает удаление индекса \"{{name}}\"", - "table_designer.message.index_delete_unsupported": "Эта база данных не поддерживает удаление этого индекса", - "table_designer.message.index_deleted": "Индекс удален", - "table_designer.message.index_kind_unsupported": "Эта база данных не поддерживает этот тип индекса", - "table_designer.message.index_maintenance_unsupported": "Эта база данных не поддерживает управление индексами здесь", - "table_designer.message.index_name_exists": "Имя индекса уже существует: {{name}}", - "table_designer.message.index_name_required": "Введите имя индекса", - "table_designer.message.index_restore_failed": "{{detail}}; не удалось восстановить исходный индекс: {{restoreDetail}}", - "table_designer.message.index_restore_unavailable": "{{detail}}; исходный индекс не удалось восстановить автоматически. Проверьте его как можно скорее.", - "table_designer.message.index_restored_after_failure": "{{detail}}; исходный индекс восстановлен автоматически.", - "table_designer.message.index_updated": "Индекс обновлен", - "table_designer.message.indexes_deleted": "{{count}} индексов удалено", - "table_designer.message.load_columns_failed": "Не удалось загрузить столбцы: {{detail}}", - "table_designer.message.no_changes_detected": "Изменения не обнаружены", - "table_designer.message.no_copyable_columns": "Не выбраны столбцы для копирования", - "table_designer.message.no_index_changes": "Изменения индекса не обнаружены", - "table_designer.message.only_normal_unique_index_supported": "Эта база данных поддерживает управление только обычными и уникальными индексами", - "table_designer.message.ref_columns_required": "Введите хотя бы одно ссылочное поле", - "table_designer.message.ref_table_required": "Введите ссылочную таблицу", - "table_designer.message.relational_index_unsupported": "Этот источник данных не поддерживает управление реляционными индексами", - "table_designer.message.schema_saved_alter": "Структура таблицы обновлена.", - "table_designer.message.schema_saved_create": "Таблица создана.", - "table_designer.message.select_at_least_one_column": "Выберите хотя бы один столбец", - "table_designer.message.select_column_before_insert": "Перед вставкой выберите столбец.", - "table_designer.message.select_columns_to_copy": "Сначала выберите столбцы для копирования", - "table_designer.message.select_index_to_delete": "Сначала выберите индекс для удаления", - "table_designer.message.select_local_columns": "Выберите хотя бы одно локальное поле", - "table_designer.message.select_one_foreign_key": "Сначала выберите один внешний ключ", - "table_designer.message.select_one_index": "Сначала выберите один индекс", - "table_designer.message.statement_execution_failed_prefix": "Не удалось выполнить оператор {{current}}/{{total}}: ", - "table_designer.message.switch_index_kind": "Переключите категорию индекса на индекс {{kind}}", - "table_designer.message.table_comment_unsupported": "Эта база данных не поддерживает редактирование комментария таблицы здесь", - "table_designer.message.table_comment_updated": "Комментарий таблицы обновлен", - "table_designer.message.table_name_required": "Введите имя таблицы", - "table_designer.message.target_table_required": "Введите имя целевой таблицы", - "table_designer.message.trigger_created": "Триггер создан", - "table_designer.message.trigger_deleted": "Триггер удален", - "table_designer.message.trigger_updated": "Триггер обновлен", - "table_designer.modal.column_comment_title": "Комментарий столбца", - "table_designer.modal.column_comment_title_named": "Комментарий столбца - {{name}}", - "table_designer.modal.confirm_sql_title": "Подтверждение изменений SQL", - "table_designer.modal.copy_columns_title": "Скопировать выбранные столбцы в новую таблицу", - "table_designer.modal.delete_foreign_key_content": "Удалить ограничение внешнего ключа \"{{name}}\"?", - "table_designer.modal.delete_foreign_key_title": "Удаление внешнего ключа", - "table_designer.modal.delete_index_many": "Удалить эти индексы ({{count}})?\n{{names}}", - "table_designer.modal.delete_index_one": "Удалить индекс {{names}}?", - "table_designer.modal.delete_index_title": "Удаление индекса", - "table_designer.modal.delete_trigger_content": "Удалить триггер \"{{name}}\"? Это действие нельзя отменить.", - "table_designer.modal.delete_trigger_title": "Удаление триггера", - "table_designer.modal.foreign_key_create_title": "Добавить внешний ключ", - "table_designer.modal.foreign_key_edit_title": "Изменить внешний ключ", - "table_designer.modal.index_create_title": "Добавить индекс", - "table_designer.modal.index_edit_title": "Изменить индекс", - "table_designer.modal.table_comment_title": "Изменить комментарий таблицы", - "table_designer.modal.trigger_create_title": "Добавить триггер", - "table_designer.modal.trigger_detail_title": "Сведения о триггере", - "table_designer.modal.trigger_detail_title_named": "Триггер: {{name}}", - "table_designer.modal.trigger_edit_title": "Изменить триггер", - "table_designer.modal.unsaved_changes_content": "При обновлении несохраненные изменения столбцов в текущем черновике будут потеряны. Все равно обновить и перезаписать черновик?", - "table_designer.modal.unsaved_changes_title": "Есть несохраненные изменения столбцов", - "table_designer.notice.foreign_key_readonly": "Эта база данных не поддерживает редактирование внешних ключей здесь. Доступен только просмотр.", - "table_designer.notice.foreign_key_replace_hint": "При изменении внешнего ключа сначала удаляется старый внешний ключ, затем создается новый.", - "table_designer.notice.index_readonly": "Эта база данных не поддерживает редактирование индексов здесь. Доступен только просмотр.", - "table_designer.notice.index_restore_hint": "Если при изменении индекса создание нового индекса завершится ошибкой, система попытается восстановить исходный индекс.", - "table_designer.notice.sql_irreversible": "Внимательно проверьте SQL. После выполнения действие нельзя отменить.", - "table_designer.notice.sql_statement_irreversible": "Внимательно проверьте оператор SQL. После выполнения действие нельзя отменить.", - "table_designer.notice.trigger_replace_hint": "При изменении триггера сначала удаляется исходный триггер, затем создается новый.", - "table_designer.option.default": "По умолчанию", - "table_designer.option.recommended_suffix": "(рекомендуется)", - "table_designer.placeholder.column_comment": "Введите комментарий столбца", - "table_designer.placeholder.foreign_key_name": "Имя ограничения внешнего ключа, например fk_order_user", - "table_designer.placeholder.index_columns": "Выберите столбцы индекса; используется порядок выбора", - "table_designer.placeholder.index_name": "Имя индекса, например idx_user_name", - "table_designer.placeholder.local_columns": "Выберите локальные поля; порядок должен совпадать со ссылочными полями", - "table_designer.placeholder.primary_index_name": "Индекс первичного ключа использует фиксированное имя: PRIMARY", - "table_designer.placeholder.ref_columns": "Введите ссылочные поля; можно указать несколько", - "table_designer.placeholder.ref_table": "Ссылочная таблица; поддерживается db.table", - "table_designer.placeholder.table_comment": "Введите комментарий таблицы", - "table_designer.placeholder.table_name": "Введите имя таблицы", - "table_designer.placeholder.target_table_name": "Введите имя целевой таблицы", - "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB не может сохранять комментарии столбцов через COMMENT ON COLUMN. Комментарий для столбца {{column}} останется только в предпросмотре дизайнера.", - "table_designer.schema_sql.limited_column_hint": "-- Синтаксис ограничений столбцов, значений по умолчанию и комментариев в {{dialect}} отличается от MySQL. Специфичные для MySQL фразы пропущены; добавьте SQL для целевого диалекта перед выполнением.", - "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite не может напрямую изменять свойства столбцов. Для столбца {{column}} создайте новую таблицу, перенесите данные и замените старую таблицу.", - "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server требует исходное имя ограничения для удаления старого первичного ключа. Перед удалением проверьте его на вкладке индексов.", - "table_designer.schema_sql.tdengine.timestamp_hint": "-- Обычным таблицам TDengine обычно нужен столбец времени TIMESTAMP. Перед выполнением проверьте модель таблицы.", - "table_designer.starrocks.table_kind.olap": "OLAP-таблица", - "table_designer.starrocks.table_kind.external": "Внешняя таблица", - "table_designer.starrocks.key_model.duplicate": "Дублирующий ключ", - "table_designer.starrocks.key_model.unique": "Уникальный ключ", - "table_designer.starrocks.key_model.aggregate": "Агрегатный ключ", - "table_designer.starrocks.placeholder.key_columns": "Ключевые столбцы, например id, date", - "table_designer.starrocks.placeholder.partition_clause": "Секция партиционирования, например PARTITION BY RANGE(date_col)(...)", - "table_designer.starrocks.distribution.hash": "Хеш-распределение", - "table_designer.starrocks.distribution.random": "Случайное распределение", - "table_designer.starrocks.distribution.none": "Без распределения", - "table_designer.starrocks.placeholder.distribution_columns": "Столбцы распределения, например user_id", - "table_designer.starrocks.bucket_mode.auto": "Авточисло сегментов", - "table_designer.starrocks.bucket_mode.number": "Фиксированное число сегментов", - "table_designer.starrocks.placeholder.bucket_count": "Число сегментов", - "table_designer.selection.columns_selected": "Выбрано столбцов: {{count}}", - "table_designer.selection.foreign_key_selected": "Выбрано: {{name}}", - "table_designer.selection.indexes_selected": "Выбрано индексов: {{count}}", - "table_designer.selection.trigger_prompt": "Щелкните, чтобы выбрать триггер", - "table_designer.selection.trigger_selected": "Выбрано: {{name}}", - "table_designer.sql_preview.change.add": "Добавление", - "table_designer.sql_preview.change.comment": "Изменение комментария", - "table_designer.sql_preview.change.constraint": "Изменение ограничения", - "table_designer.sql_preview.change.create": "Структура новой таблицы", - "table_designer.sql_preview.change.drop": "Удаление", - "table_designer.sql_preview.change.modify": "Изменение свойств столбца", - "table_designer.sql_preview.change.rename": "Переименование", - "table_designer.summary.indexes": "Индексов: {{count}}, индексных полей: {{fields}}", - "table_designer.summary.columns": "{{count}} столбцов", - "table_designer.status.read_only": "Только чтение", - "table_designer.title.untitled_table": "Таблица без имени", - "table_designer.title.default_database": "База данных по умолчанию", - "table_designer.title.schema_designer": "Конструктор схемы", - "table_designer.tab.columns": "Столбцы", - "table_designer.tab.foreign_keys": "Внешние ключи", - "table_designer.tab.indexes": "Индексы", - "table_designer.tab.triggers": "Триггеры", - "table_designer.table_comment.current": "Текущий комментарий: {{comment}}", - "table_designer.tooltip.edit_comment_popup": "Редактировать комментарий во всплывающем окне", - "table_designer.trigger.column.event": "Событие", - "table_designer.trigger.column.name": "Имя", - "table_designer.trigger.column.timing": "Момент", - "table_designer.trigger.definition_unavailable": "Не удалось получить полное определение триггера", - "table_designer.trigger.field.event": "Событие", - "table_designer.trigger.field.timing": "Момент", - "table_designer.trigger.template.body_comment": "Логика триггера", - "table_designer.trigger.template.enter_create": "Введите оператор CREATE TRIGGER", - "redis_command.action.clear_console": "Очистить консоль", - "redis_command.action.execute": "Выполнить (Cmd+Enter)", - "redis_command.completion.detail": "Команда Redis", - "redis_command.message.command_required": "Введите команду для выполнения", - "redis_command.output.empty_hint": "Выполняйте команды в этой консоли; результаты отображаются как возвращены.", - "redis_command.output.selection_tip": "Подсказка: выделите строки и нажмите Ctrl + Enter, чтобы выполнить только выделение.", - "redis_command.output.title": "Вывод выполнения", - "redis_command.state.connection_not_found": "Подключение не найдено", - "redis_command.title.console": "Консоль Redis", - "redis.backend.message.connect_success": "Подключение выполнено", - "redis.backend.message.set_success": "Значение задано", - "redis.backend.message.select_db_success": "База данных переключена", - "redis.backend.message.rename_success": "Переименование выполнено", - "redis.backend.message.delete_success": "Удаление выполнено", - "redis.backend.message.add_success": "Добавление выполнено", - "redis.backend.message.flush_success": "Очистка выполнена", - "redis.backend.error.command_required": "Command не может быть пустым", - "redis.backend.error.argument_required": "{{name}} обязателен", - "redis.backend.error.argument_invalid_type": "{{name}} имеет недопустимый тип", - "redis.backend.error.address_required": "Адрес подключения Redis не может быть пустым", - "redis.backend.error.node_address_required": "Адрес узла Redis не может быть пустым", - "redis.backend.error.invalid_node_address": "Недопустимый адрес узла Redis: {{address}}", - "redis.backend.error.invalid_port": "Недопустимый порт Redis: {{address}}", - "redis_monitor.action.pause_refresh": "Приостановить обновление", - "redis_monitor.action.refresh_now": "Обновить сейчас", - "redis_monitor.action.resume_refresh": "Возобновить обновление", - "redis_monitor.chart.clients_keys": "Сведения о подключениях (клиенты и Keys)", - "redis_monitor.chart.cpu_usage": "Использование CPU", - "redis_monitor.chart.memory": "Расход памяти", - "redis_monitor.chart.qps": "Пропускная способность запросов (QPS)", - "redis_monitor.message.fetch_failed": "Не удалось получить сведения Redis: {{detail}}", - "redis_monitor.metric.blocked_clients": "Заблокировано: {{value}}", - "redis_monitor.metric.clients": "Клиенты", - "redis_monitor.metric.days": "Дней: {{value}}", - "redis_monitor.metric.memory_peak": "Пик: {{value}}", - "redis_monitor.metric.memory_used": "Используемая память", - "redis_monitor.metric.ops": "Пропускная способность (OPS)", - "redis_monitor.metric.uptime": "Время работы", - "redis_monitor.series.clients": "Клиенты", - "redis_monitor.series.rss_memory": "Память RSS", - "redis_monitor.series.system": "Система", - "redis_monitor.series.total_keys": "Всего Keys", - "redis_monitor.series.used_memory": "Используемая память", - "redis_monitor.series.user": "Пользователь", - "redis_monitor.server_details.title": "Подробные параметры сервера", - "redis_monitor.state.connection_not_found": "Подключение не найдено", - "redis_monitor.title.instance": "Монитор Redis-инстанса", - "redis_viewer.action.add_field": "Добавить поле", - "redis_viewer.action.add_list_head": "Добавить в начало", - "redis_viewer.action.add_list_tail": "Добавить в конец", - "redis_viewer.action.add_member": "Добавить участника", - "redis_viewer.action.add_stream_entry": "Добавить запись", - "redis_viewer.action.clear_group_selection": "Снять выбор", - "redis_viewer.action.clear_selection": "Снять выбор", - "redis_viewer.action.copy": "Копировать", - "redis_viewer.action.copy_key_name": "Копировать имя Key", - "redis_viewer.action.copy_value": "Копировать значение", - "redis_viewer.action.delete_key": "Удалить Key", - "redis_viewer.action.delete_selected": "Удалить выбранное ({{count}})", - "redis_viewer.action.edit": "Редактировать", - "redis_viewer.action.load_more": "Загрузить еще", - "redis_viewer.action.new_key": "Создать", - "redis_viewer.action.refresh": "Обновить", - "redis_viewer.action.rename_key": "Переименовать Key", - "redis_viewer.action.select_all_loaded": "Выбрать все загруженные", - "redis_viewer.action.select_group": "Выбрать", - "redis_viewer.action.set_ttl": "Задать TTL", - "redis_viewer.aria.collapse_group": "Свернуть группу", - "redis_viewer.aria.expand_group": "Развернуть группу", - "redis_viewer.confirm.delete_field": "Удалить это поле?", - "redis_viewer.confirm.delete_key": "Удалить Key \"{{key}}\"?", - "redis_viewer.confirm.delete_member": "Удалить этого участника?", - "redis_viewer.confirm.delete_selected": "Удалить выбранные Keys: {{count}}?", - "redis_viewer.confirm.delete_stream_entry": "Удалить эту запись Stream?", - "redis_viewer.field.field_name": "Имя поля", - "redis_viewer.field.fields_json": "Поля JSON:", - "redis_viewer.field.key": "Key", - "redis_viewer.field.member": "Участник:", - "redis_viewer.field.new_key_name": "Новое имя Key", - "redis_viewer.field.new_score": "Новая оценка:", - "redis_viewer.field.score": "Оценка:", - "redis_viewer.field.stream_id": "ID (необязательно, по умолчанию *):", - "redis_viewer.field.ttl_seconds": "TTL (секунды)", - "redis_viewer.field.value": "Значение", - "redis_viewer.help.ttl_forever": "-1 означает без срока действия", - "redis_viewer.hint.binary_readonly": "Двоичные данные нельзя редактировать", - "redis_viewer.hint.switch_auto_to_edit": "Переключитесь в режим Auto для редактирования", - "redis_viewer.label.encoding": "Кодировка: {{encoding}}", - "redis_viewer.label.keys_count": "Keys: {{count}}", - "redis_viewer.label.node_count": "Узлов: {{count}}", - "redis_viewer.label.length": "Длина: {{count}}", - "redis_viewer.label.original_key": "Исходный Key: {{key}}", - "redis_viewer.message.add_failed": "Не удалось добавить: {{detail}}", - "redis_viewer.message.add_success": "Добавлено", - "redis_viewer.message.add_success_with_id": "Добавлено {{id}}", - "redis_viewer.message.copied": "Скопировано", - "redis_viewer.message.copy_failed": "Не удалось скопировать", - "redis_viewer.message.create_failed": "Не удалось создать: {{detail}}", - "redis_viewer.message.create_success": "Создано", - "redis_viewer.message.delete_failed": "Не удалось удалить: {{detail}}", - "redis_viewer.message.delete_success": "Удалено", - "redis_viewer.message.deleted_keys": "Удалено Keys: {{count}}", - "redis_viewer.message.fields_json_invalid": "Поля JSON недействительны", - "redis_viewer.message.fields_must_be_json_object": "Поля должны быть объектом JSON", - "redis_viewer.message.fields_required": "Укажите хотя бы одно поле", - "redis_viewer.message.key_check_failed": "Не удалось проверить целевой Key: {{detail}}", - "redis_viewer.message.key_missing_removed": "Key больше не существует или истек и был удален из списка", - "redis_viewer.message.key_name_copied": "Имя Key скопировано", - "redis_viewer.message.load_keys_failed": "Не удалось загрузить Keys: {{detail}}", - "redis_viewer.message.new_key_name_required": "Введите новое имя Key", - "redis_viewer.message.rename_failed": "Не удалось переименовать: {{detail}}", - "redis_viewer.message.rename_same_key": "Новое имя Key должно отличаться от исходного", - "redis_viewer.message.rename_success": "Key переименован", - "redis_viewer.message.save_failed": "Не удалось сохранить: {{detail}}", - "redis_viewer.message.save_success": "Сохранено", - "redis_viewer.message.set_failed": "Не удалось задать значение: {{detail}}", - "redis_viewer.message.stream_entry_not_deleted": "Запись Stream не удалена; возможно, ее уже нет", - "redis_viewer.message.target_key_exists": "Целевой Key уже существует: {{key}}", - "redis_viewer.message.ttl_set_success": "TTL обновлен", - "redis_viewer.message.update_failed": "Не удалось обновить: {{detail}}", - "redis_viewer.message.update_success": "Обновлено", - "redis_viewer.message.value_load_failed": "Не удалось получить значение: {{detail}}", - "redis_viewer.modal.add_element": "Добавить элемент", - "redis_viewer.modal.add_element_head": "Добавить элемент в начало", - "redis_viewer.modal.add_field": "Добавить поле", - "redis_viewer.modal.add_member": "Добавить участника", - "redis_viewer.modal.add_stream_entry": "Добавить запись Stream", - "redis_viewer.modal.edit_field": "Редактировать поле: {{field}}", - "redis_viewer.modal.edit_index": "Редактировать индекс {{index}}", - "redis_viewer.modal.edit_value": "Редактировать значение", - "redis_viewer.modal.new_key": "Новый Key", - "redis_viewer.modal.rename_key": "Переименовать Key", - "redis_viewer.modal.set_ttl": "Задать TTL", - "redis_viewer.modal.update_score": "Обновить оценку", - "redis_viewer.notice.large_keyspace_mode": "Включен режим производительности для большого keyspace. Отрисовка узлов упрощена, сохраняется до {{count}} развернутых групп.", - "redis_viewer.placeholder.key_name": "Имя Key", - "redis_viewer.placeholder.member_value": "Введите значение участника", - "redis_viewer.placeholder.new_element_value": "Введите значение нового элемента", - "redis_viewer.placeholder.new_key_name": "new:key:name", - "redis_viewer.placeholder.new_member_value": "Введите значение нового участника", - "redis_viewer.placeholder.search_exact": "Введите полный Key или namespace для точного поиска", - "redis_viewer.placeholder.search_fuzzy": "Поиск Keys (нечеткое совпадение)", - "redis_viewer.placeholder.stream_id": "Например: * или 1723110000000-0", - "redis_viewer.placeholder.value": "Значение", - "redis_viewer.search.exact": "Точно", - "redis_viewer.search.fuzzy": "Нечетко", - "redis_viewer.topology.cluster": "Cluster", - "redis_viewer.topology.sentinel": "Sentinel", - "redis_viewer.topology.single": "Одиночный", - "redis_viewer.state.connection_not_found": "Подключение не найдено", - "redis_viewer.state.empty_selection": "Выберите Key, чтобы просмотреть детали", - "redis_viewer.table.action": "Действия", - "redis_viewer.table.field": "Поле", - "redis_viewer.table.fields": "Поля", - "redis_viewer.table.index": "Индекс", - "redis_viewer.table.member": "Участник", - "redis_viewer.table.score": "Оценка", - "redis_viewer.table.value": "Значение", - "redis_viewer.title.active_key": "Активный Key", - "redis_viewer.title.key_explorer": "Обозреватель Keys", - "redis_viewer.title.namespace_key": "Пространство имен / Key", - "redis_viewer.title.type_ttl": "Тип / TTL", - "redis_viewer.tooltip.copy_fields_json": "Копировать поля JSON", - "redis_viewer.tooltip.copy_id": "Копировать ID", - "redis_viewer.tooltip.copy_key_name": "Копировать имя Key", - "redis_viewer.tooltip.copy_value": "Копировать значение", - "redis_viewer.tooltip.resize_panels": "Перетащите, чтобы изменить размер", - "redis_viewer.ttl.days_hours": "{{days}} д. {{hours}} ч.", - "redis_viewer.ttl.expired": "Истек", - "redis_viewer.ttl.forever": "Постоянный", - "redis_viewer.ttl.hours_minutes": "{{hours}} ч. {{minutes}} мин.", - "redis_viewer.ttl.minutes_seconds": "{{minutes}} мин. {{seconds}} сек.", - "redis_viewer.ttl.seconds": "{{seconds}} сек.", - "redis_viewer.validation.key_required": "Введите Key", - "redis_viewer.validation.new_key_name_required": "Введите новое имя Key", - "redis_viewer.validation.value_required": "Введите значение", - "redis_viewer.view.auto": "Auto", - "redis_viewer.view.hex": "Hex", - "redis_viewer.view.text": "Исходный текст", - "redis_viewer.view.title": "Режим просмотра", - "ai_chat.header.default_session_title": "Новый чат", - "ai_chat.header.export_time": "Время экспорта:", - "ai_chat.header.export_user": "Вы", - "ai_chat.header.tooltip.close": "Закрыть панель", - "ai_chat.header.tooltip.export_markdown": "Экспортировать как Markdown", - "ai_chat.header.tooltip.history": "История чатов", - "ai_chat.header.tooltip.new_chat": "Новый чат", - "ai_chat.header.tooltip.new_chat_clear": "Новый чат (очистить текущий)", - "ai_chat.header.tooltip.settings": "Настройки AI", - "ai_chat.header.session.connected": "{{title}} · Подключено", - "ai_chat.header.mode_tabs.aria_label": "Режим работы AI", - "ai_chat.header.mode.chat": "Чат", - "ai_chat.header.mode.insights": "Автоинсайты", - "ai_chat.header.mode.history": "История", - "ai_chat.header.action.export": "Экспорт", - "ai_chat.history.action.new_chat": "Начать новый чат", - "ai_chat.history.default_session_title": "Новый чат", - "ai_chat.history.empty.no_matches": "Нет подходящих чатов", - "ai_chat.history.search.placeholder": "Поиск по истории...", - "ai_chat.history.title": "История чатов", - "ai_chat.history.tooltip.collapse": "Свернуть", - "ai_chat.history.tooltip.delete": "Удалить", - "ai_chat.welcome.description.default": "Я ваш помощник по базам данных. Я могу помочь создавать SQL-запросы, анализировать схемы, объяснять логику выполнения и оптимизировать производительность базы данных.", - "ai_chat.welcome.description.with_context": "Связано структур таблиц: {{count}}. Используйте быстрые действия ниже, чтобы начать анализ.", - "ai_chat.welcome.title": "Здравствуйте, я GoNavi AI", - "ai_chat.quick_action.explain_schema": "🔍 Объяснить схему", - "ai_chat.quick_action.explain_schema.hint.with_context": "Пояснить поля и ограничения", - "ai_chat.quick_action.explain_schema.prompt.with_context": "Подробно объясните замысел дизайна и значения полей этих таблиц: {{tables}}", - "ai_chat.quick_action.explain_schema.title": "Объяснить схему", - "ai_chat.quick_action.explain_sql": "🔍 Объяснить SQL", - "ai_chat.quick_action.explain_sql.hint.default": "Объяснить логику выполнения", - "ai_chat.quick_action.explain_sql.prompt.default": "Объясните логику выполнения этого SQL-выражения:\n```sql\n\n```", - "ai_chat.quick_action.explain_sql.title": "Объяснить SQL", - "ai_chat.quick_action.generate_sql": "📝 Создать SQL", - "ai_chat.quick_action.generate_sql.hint.default": "Создать запрос из естественного языка", - "ai_chat.quick_action.generate_sql.hint.with_context": "Создать запрос из естественного языка", - "ai_chat.quick_action.generate_sql.prompt.default": "Создайте запрос на основе текущей структуры таблиц базы данных:", - "ai_chat.quick_action.generate_sql.prompt.with_context": "Создайте часто используемый запрос для этих структур таблиц: {{tables}}", - "ai_chat.quick_action.generate_sql.title": "Создать SQL", - "ai_chat.quick_action.optimize": "⚡ Советы по оптимизации", - "ai_chat.quick_action.optimize.hint.default": "Советы по производительности и индексам", - "ai_chat.quick_action.optimize.hint.with_context": "Индексы, нормализация и риски", - "ai_chat.quick_action.optimize.prompt.default": "Проанализируйте производительность этого SQL-выражения и предложите оптимизации:\n```sql\n\n```", - "ai_chat.quick_action.optimize.prompt.with_context": "Проанализируйте дизайн структуры этих таблиц и предложите оптимизации индексов и производительности запросов: {{tables}}", - "ai_chat.quick_action.optimize.title": "Советы по оптимизации", - "ai_chat.quick_action.schema_analysis": "🏗️ Анализ схемы", - "ai_chat.quick_action.schema_analysis.hint.default": "Анализ качества структуры", - "ai_chat.quick_action.schema_analysis.hint.with_context": "Связи таблиц и граф зависимостей", - "ai_chat.quick_action.schema_analysis.prompt.default": "Проанализируйте текущую структуру таблиц базы данных и предложите оптимизации.", - "ai_chat.quick_action.schema_analysis.prompt.with_context": "Выполните полный Schema-анализ этих таблиц, включая выбор типов данных, проверку нормализации и предложения по улучшению: {{tables}}", - "ai_chat.quick_action.schema_analysis.title": "Анализ Schema", - "ai_chat.quick_action.table_separator": ", ", - "ai_chat.welcome.suggestion.channel_distribution.default": "Распределение каналов заказов за последние 7 дней", - "ai_chat.welcome.suggestion.channel_distribution.with_context": "Распределение ключевых каналов за последние 7 дней", - "ai_chat.welcome.suggestion.cleanup.default": "Помоги написать SQL для очистки аномальных данных", - "ai_chat.welcome.suggestion.cleanup.with_context": "Помоги написать SQL для отключения аномальных каналов", - "ai_chat.welcome.suggestion.divider": "Или задайте вопрос напрямую", - "ai_chat.welcome.suggestion.low_rows.default": "Почему в текущем результате так мало строк?", - "ai_chat.welcome.suggestion.low_rows.with_context": "Почему в {{table}} так мало строк?", - "ai_chat.input.action.send": "Отправить", - "ai_chat.input.action.stop": "Остановить генерацию", - "ai_chat.input.context.connection_tooltip": "Текущий контекст запроса данных", - "ai_chat.input.context.memory_tooltip": "Использование памяти текущего сеанса. При достижении лимита {{limit}} начнется автоматическое сжатие.", - "ai_chat.input.context.tag_label": "Связанный контекст ({{count}})", - "ai_chat.input.message.context_added": "Структуры таблиц добавлены в контекст: {{count}}", - "ai_chat.input.message.context_load_failed": "Не удалось загрузить контекст таблиц: {{detail}}", - "ai_chat.input.message.context_removed": "Структуры таблиц удалены из контекста: {{count}}", - "ai_chat.input.message.context_synced": "Контекст синхронизирован: добавлено {{added}}, удалено {{removed}}", - "ai_chat.input.message.fetch_table_schema_failed": "Не удалось загрузить структуру {{table}}: {{detail}}", - "ai_chat.input.message.fetch_tables_failed": "Не удалось загрузить таблицы: {{detail}}", - "ai_chat.input.message.select_database_context_first": "Перед добавлением контекста чата выберите базу данных слева", - "ai_chat.input.message.selection_unchanged": "Выбор таблиц не изменился", - "ai_chat.input.modal.empty_tables": "Нет таблиц, соответствующих «{{query}}»", - "ai_chat.input.modal.invert_matching": "Инвертировать найденные результаты", - "ai_chat.input.modal.ok": "Синхронизировать выбранные таблицы с контекстом", - "ai_chat.input.modal.search_table.placeholder": "Поиск таблиц в текущей базе данных...", - "ai_chat.input.modal.select_all_matching": "Выбрать все найденные таблицы ({{count}})", - "ai_chat.input.modal.switch_database.placeholder": "Сменить базу данных", - "ai_chat.input.modal.title": "Добавить контекст схемы таблиц базы данных", - "ai_chat.input.model.placeholder": "Выберите модель", - "ai_chat.input.placeholder": "Введите сообщение... ({{shortcut}}, Shift+Enter — новая строка, / — команды)", - "ai_chat.input.slash.diff.desc": "Сравнить две таблицы и создать изменения", - "ai_chat.input.slash.diff.label": "🔄 Сравнение таблиц", - "ai_chat.input.slash.diff.prompt": "Сравните различия структуры этих двух таблиц и создайте ALTER-выражения для миграции со старой версии на новую:", - "ai_chat.input.slash.explain.desc": "Объяснить логику выбранного SQL", - "ai_chat.input.slash.explain.label": "💡 Объяснить SQL", - "ai_chat.input.slash.explain.prompt": "Объясните логику выполнения этого SQL и назначение каждого шага:\n```sql\n\n```", - "ai_chat.input.slash.index.desc": "Рекомендовать оптимальный план индексов", - "ai_chat.input.slash.index.label": "📊 Рекомендации по индексам", - "ai_chat.input.slash.index.prompt": "Рекомендуйте оптимальный план индексов на основе текущей структуры таблиц и типовых сценариев запросов, а также предоставьте DDL:", - "ai_chat.input.slash.mock.desc": "Создать тестовые данные INSERT", - "ai_chat.input.slash.mock.label": "🎲 Тестовые данные", - "ai_chat.input.slash.mock.prompt": "Создайте 10 реалистичных для бизнеса INSERT-выражений с тестовыми данными для текущих связанных таблиц:", - "ai_chat.input.slash.optimize.desc": "Анализировать узкие места производительности SQL", - "ai_chat.input.slash.optimize.label": "⚡ Анализ оптимизации", - "ai_chat.input.slash.optimize.prompt": "Проанализируйте этот SQL на проблемы производительности и предоставьте оптимизированную версию:\n```sql\n\n```", - "ai_chat.input.slash.query.desc": "Опишите, что хотите запросить", - "ai_chat.input.slash.query.label": "🔍 Запрос на естественном языке", - "ai_chat.input.slash.query.prompt": "Напишите SQL-запрос:", - "ai_chat.input.slash.schema.desc": "Оценить качество проектирования таблиц", - "ai_chat.input.slash.schema.label": "🏗️ Ревью дизайна таблиц", - "ai_chat.input.slash.schema.prompt": "Проведите ревью текущего связанного дизайна таблиц, включая типы полей, нормализацию, стратегию индексов и предложения по улучшению:", - "ai_chat.input.slash.sql.desc": "Описать требования и создать выражения", - "ai_chat.input.slash.sql.label": "📝 Создать SQL", - "ai_chat.input.slash.sql.prompt": "Создайте SQL по следующим требованиям:", - "ai_chat.input.tooltip.attach_table_context": "Добавить контекст таблиц базы данных", - "ai_chat.input.tooltip.upload_image": "Загрузить изображение или скриншот", - "ai_chat.tools.mcp_fallback_description": "MCP-инструмент {{toolName}} от {{serverName}}", - "ai_chat.composer_notice.missing_model.description": "Откройте список моделей ниже и выберите модель. Если список пуст, проверьте конечную точку поставщика и API Key.", - "ai_chat.composer_notice.missing_model.title": "Сначала выберите модель", - "ai_chat.composer_notice.missing_provider.description": "Сначала добавьте и включите поставщика моделей в настройках AI.", - "ai_chat.composer_notice.missing_provider.title": "Нет доступного поставщика", - "ai_chat.composer_notice.model_fetch_failed.default_description": "Проверьте конечную точку поставщика, API Key или права учетной записи, затем снова откройте список моделей.", - "ai_chat.composer_notice.model_fetch_failed.detail_description": "Детали поставщика: {{detail}}", - "ai_chat.composer_notice.model_fetch_failed.title": "Не удалось загрузить список моделей", - "ai_chat.message.action.copy_full": "Копировать весь текст", - "ai_chat.message.action.copied": "Скопировано", - "ai_chat.message.action.delete": "Удалить сообщение", - "ai_chat.message.action.edit": "Редактировать это сообщение, удалить последующие записи и отправить заново", - "ai_chat.message.action.retry": "Сгенерировать заново из предыдущего сообщения пользователя", - "ai_chat.message.action.copy_error_raw": "Копировать исходный текст ошибки", - "ai_chat.message.action.copied_error_raw": "Исходный текст ошибки скопирован", - "ai_chat.message.role.user": "Вы", - "ai_chat.message.image_alt": "Вложенное изображение {{index}}", - "ai_chat.message.code.copy": "Копировать код", - "ai_chat.message.code.copied": "Скопировано", - "ai_chat.message.code.insert": "Вставить", - "ai_chat.message.code.insert_tooltip": "Вставить этот SQL в рабочую область запросов для быстрого изменения или выполнения", - "ai_chat.message.code.execute": "Выполнить", - "ai_chat.message.code.execute_tooltip": "Выполнить сейчас с учетом политики безопасности AI", - "ai_chat.message.code.executing": "Выполняется...", - "ai_chat.message.code.preview": "Предпросмотр", - "ai_chat.message.code.preview_tooltip": "Просмотреть результаты запроса в чате, максимум 20 строк", - "ai_chat.message.code.expand_all": "Развернуть весь код", - "ai_chat.message.code.collapse": "Свернуть код", - "ai_chat.message.code.preview_result": "Результат предпросмотра (строк: {{rows}}, столбцов: {{columns}})", - "ai_chat.message.code.preview_collapse": "Свернуть", - "ai_chat.message.code.view_result": "Показать результат (строк: {{rows}})", - "ai_chat.message.code.query_no_result": "Запрос не вернул результатов", - "ai_chat.message.code.execute_failed": "Выполнение не удалось", - "ai_chat.message.security.blocked": "🔒 Политика безопасности заблокировала этот SQL: текущий уровень безопасности не разрешает операции {{operationType}}. Измените уровень безопасности в настройках AI.", - "ai_chat.message.security.confirm_title": "⚠️ Подтверждение безопасности", - "ai_chat.message.security.default_warning": "Этот SQL является операцией {{operationType}}. Выполнить?", - "ai_chat.message.security.confirm_execute": "Выполнить", - "ai_chat.message.thinking.title": "Ход рассуждений", - "ai_chat.message.thinking.active": "Идет рассуждение...", - "ai_chat.message.thinking.count": "({{count}} симв.)", - "ai_chat.message.tool_result.title": "Результат проверки ({{name}})", - "ai_chat.message.tool_result.char_count": "{{count}} симв.", - "ai_chat.message.tool_result.no_data": "Нет данных", - "ai_chat.message.tool_call.get_connections": "Загрузить доступные подключения", - "ai_chat.message.tool_call.get_databases": "Сканировать список баз данных", - "ai_chat.message.tool_call.get_tables": "Анализировать сведения о структуре таблиц", - "ai_chat.message.tool_call.get_columns": "Проверить реальные определения столбцов", - "ai_chat.message.tool_call.get_table_ddl": "Извлечь выражение CREATE TABLE", - "ai_chat.message.tool_call.execute_sql": "Выполнить проверку SQL только для чтения", - "ai_chat.message.tool_call.running": "Выполняются проверки данных...", - "ai_chat.message.tool_call.done": "Проверки данных завершены ({{count}})", - "ai_chat.message.wait.connecting": "Подключение", - "ai_chat.message.jvm.apply_preview": "Применить к предпросмотру JVM", - "ai_chat.message.jvm.apply_diagnostic": "Применить к диагностической консоли", - "ai_chat.message.jvm.missing_plan_context": "В этом плане JVM отсутствует контекст исходной вкладки. Сгенерируйте его заново на целевой странице ресурса JVM.", - "ai_chat.message.jvm.plan_target_not_found": "Не найдена вкладка ресурса, соответствующая этому плану JVM. Откройте исходный целевой ресурс перед применением.", - "ai_chat.message.jvm.missing_diagnostic_context": "В этом диагностическом плане отсутствует контекст исходной вкладки. Сгенерируйте его заново в целевой диагностической консоли.", - "ai_chat.message.jvm.diagnostic_target_not_found": "Не найдена вкладка диагностической консоли, соответствующая этому плану. Откройте исходную целевую консоль перед применением.", - "ai_chat.message.mermaid.parse_failed": "Не удалось разобрать Mermaid: {{detail}}", - "ai_chat.message.mermaid.render_failed": "Ошибка отрисовки Mermaid: {{detail}}", - "ai_chat.panel.history.empty": "Истории чатов пока нет", - "ai_chat.panel.insight.context.linked_title": "Связано таблиц: {{count}}", - "ai_chat.panel.insight.context.empty_title": "Структура таблиц пока не связана", - "ai_chat.panel.insight.context.linked_body": "В этот диалог включен контекст структуры для {{tables}}.", - "ai_chat.panel.insight.context.empty_body": "При открытии AI со страницы таблицы текущая таблица связывается автоматически. Контекст также можно добавить вручную над полем ввода.", - "ai_chat.panel.insight.context.table_separator": ", ", - "ai_chat.panel.insight.context.more_tables_suffix": " и другие таблицы", - "ai_chat.panel.insight.query.slowest_title": "Самый медленный недавний запрос {{duration}}ms", - "ai_chat.panel.insight.query.empty_title": "Пока нет образцов длительности запросов", - "ai_chat.panel.insight.query.empty_body": "После выполнения запроса здесь появятся SQL-подсказки для анализа оптимизации.", - "ai_chat.panel.insight.status.failed_title": "Недавние сбои запросов: {{count}}", - "ai_chat.panel.insight.status.ok_title": "Недавние запросы в норме", - "ai_chat.panel.insight.status.recent_body": "Записано недавних SQL: {{count}}. Можно сразу попросить AI объяснить или оптимизировать их.", - "ai_chat.panel.insight.status.empty_body": "Журналов SQL пока нет.", - "ai_chat.panel.insight.write.detected_title": "Обнаружено операций записи: {{count}}", - "ai_chat.panel.insight.write.readonly_title": "Сейчас основной режим - анализ только для чтения", - "ai_chat.panel.insight.write.detected_body": "Для SQL с записью перед фиксацией лучше сгенерировать предпросмотр и операторы отката.", - "ai_chat.panel.insight.write.readonly_body": "По умолчанию AI сначала объясняет, генерирует SELECT, анализирует Schema и оптимизирует индексы.", - "ai_chat.panel.render_error.title": "Это сообщение AI не удалось отрисовать, поэтому оно изолировано", - "ai_chat.panel.render_error.description": "Остальная переписка остается доступной. Можно удалить это проблемное сообщение и продолжить.", - "ai_chat.panel.render_error.unknown": "Неизвестная ошибка отрисовки", - "ai_chat.panel.render_error.retry": "Повторить отрисовку", - "ai_chat.panel.render_error.delete": "Удалить это сообщение", - "ai_chat.panel.status.memory_compressing": "⚙️ Диалог перегружен. Запускается сжатие памяти...", - "ai_chat.panel.status.memory_compress_failed": "❌ Сжатие памяти не удалось. Продолжаем с исходным контекстом...", - "ai_chat.panel.status.memory_summary": "[Автоматическое перестроение памяти] Длинная история сжата в резюме:\n\n{{summary}}", - "ai_chat.panel.status.memory_probe_summary": "[Автоматическое перестроение памяти] Длинная история проверок и чат сжаты в резюме:\n\n{{summary}}", - "ai_chat.panel.prompt.memory_summary": "Это история слишком длинного диалога. Чтобы освободить место в контексте и сохранить ядро памяти, внимательно прочитай ее и подготовь сильно сжатое структурированное резюме на основе технических фактов, исследованного состояния структур данных, центрального запроса пользователя и текущего прогресса.\nПримечания:\n1. Будь объективным и точным; не пропускай важную бизнес-логику и найденные имена таблиц/полей.\n2. Убери незначимые шаги выполнения, вежливые фразы и сами JSON-возвраты.\n3. Удерживай объем примерно в 1000-2000 слов и выводи только сжатый Markdown.\n4. Начинай сразу с резюме; не добавляй приветствия.", - "ai_chat.panel.prompt.jvm_diagnostic": "Ты диагностический помощник JVM в GoNavi. Текущая вкладка — Arthas-совместимый диагностический рабочий стол, цель — вывести структурированный диагностический план, который можно вставить обратно в диагностическую консоль.\n\nТекущее подключение: {{connectionName}}\nЦелевой хост: {{host}}\nДиагностический transport: {{transport}}\nСреда: {{environment}}\nПолитика подключения: {{readOnlyPolicy}}\nРазрешения команд: observe={{observePolicy}}, trace={{tracePolicy}}, mutating={{mutatingPolicy}}\n\nПравила ответа:\n1. Можно начать с короткого анализа, но ответ должен содержать ровно один блок ```json.\n2. Поля JSON строго ограничены intent, transport, command, riskLevel, reason, expectedSignals.\n3. Поле transport должно совпадать с диагностическим transport выше; не выдумывай другой transport.\n4. command должен быть одной диагностической командой без shell-приглашения, склейки строк, нескольких команд или code fence.\n5. riskLevel может быть только low, medium или high.\n6. expectedSignals должен быть массивом строк с сигналами, за которыми нужно следить после выполнения.\n7. Если разрешения запрещают категорию операций, не выводи команды этой категории; если запрос нельзя выполнить, прямо объясни ограничение.", - "ai_chat.panel.jvm_diagnostic.policy.read_only": "По умолчанию отвечай в режиме диагностики только для чтения; генерируй только команды observe, trace и устранения неполадок и не предполагай, что что-либо уже выполнено.", - "ai_chat.panel.jvm_diagnostic.policy.plan_first": "Диагностические команды можно генерировать, но всегда сначала давай план и оставляй пользователю решение о выполнении.", - "ai_chat.panel.jvm_diagnostic.permission.allowed": "разрешено", - "ai_chat.panel.jvm_diagnostic.permission.forbidden": "запрещено", - "ai_chat.panel.prompt.jvm_runtime": "Ты помощник GoNavi для анализа JVM runtime. Текущий контекст — не SQL, а рабочий стол ресурсов JVM.\n\nТекущее подключение: {{connectionName}}\nЦелевой хост: {{host}}\nProvider mode: {{providerMode}}\nСреда: {{environment}}\nПолитика подключения: {{connectionPolicy}}\nСтатус resourcePath: {{resourcePathStatus}}\n\nПравила ответа:\n1. Можно объяснять структуру ресурсов, риски, рекомендации по изменениям и рекомендации по откату.\n2. Если пользователь просит создать план изменения JVM, выведи ровно один блок ```json и строго ограничь поля JSON списком targetType, selector, action, payload, reason.\n3. Для action предпочитай значения, уже объявленные в текущем снимке ресурса или метаданных как supportedActions; если текущий ресурс их не объявляет, выводи их осторожно по содержимому снимка.\n4. Для selector.resourcePath предпочитай текущий resourcePath; если текущий путь неизвестен, прямо скажи, что точное наведение невозможно, и не выдумывай путь.\n5. payload должен использовать только {\"format\":\"json\",\"value\":{...}} или {\"format\":\"text\",\"value\":\"...\"}; не выводи скрипты, команды или голые значения.\n6. Не выводи скрипты, команды или утверждения вроде уже успешно выполнено.", - "ai_chat.panel.jvm_runtime.policy.read_only": "Подключение только для чтения; только анализируй и генерируй планы изменений, и никогда не предполагай, что записи уже выполнены.", - "ai_chat.panel.jvm_runtime.policy.preview_required": "Подключение доступно для записи, но каждое изменение должно сначала создать предпросмотр и дождаться подтверждения человеком.", - "ai_chat.panel.jvm_runtime.resource_path.current": "Текущий resourcePath: {{resourcePath}}", - "ai_chat.panel.jvm_runtime.resource_path.missing": "Конкретный resourcePath сейчас не выбран.", - "ai_chat.panel.prompt.sql.context_tables": "Ты профессиональный помощник по базам данных. Текущий тип базы данных: {{dbDisplayType}}. Генерируй SQL в этом диалекте. Ниже приведен связанный DDL структуры таблиц, предоставленный пользователем; учитывай его в первую очередь при ответе:\n\n{{ddlChunks}}", - "ai_chat.panel.prompt.sql.current_database": "Ты профессиональный помощник по базам данных. Текущий тип базы данных: {{dbDisplayType}}, текущее имя базы данных: {{targetDbName}}. Если пользователю нужна информация о конкретной таблице или текущей базе, можно активно вызвать предоставленный инструмент get_tables, чтобы получить сведения о таблицах.", - "ai_chat.panel.prompt.sql.no_context": "Ты профессиональный помощник по базам данных. Пользователь сейчас не выбрал в интерфейсе конкретную базу данных или таблицу как контекст.\n\nВажные правила:\n1. Если нужно помочь пользователю найти целевую таблицу, никогда не угадывай имена таблиц. Обязательно вызывай инструменты, чтобы получить реальные данные.\n2. Полный процесс: get_connections → get_databases → get_tables → get_columns → сгенерировать SQL. Нельзя пропускать ни один шаг.\n3. [Приоритет подключений - критично] После получения списка подключений ищи в таком порядке:\n - Первый приоритет: подключения, у которых host равен localhost, 127.0.0.1 или означает локальную машину\n - Второй приоритет: подключения, у которых name или host содержит dev или local, либо host является внутренним IP, например 10.x, 192.168.x или 172.16-31.x\n - Третий приоритет: другие подключения, например test или production\n Если целевая таблица найдена в подключении с более высоким приоритетом, используй это подключение напрямую и не ищи дальше в подключениях с более низким приоритетом.\n4. Если целевая таблица не найдена в текущей базе данных, продолжай проверять другие базы; не сдавайся.\n5. Останавливайся только после проверки всех возможных баз данных или после того, как целевая таблица явно найдена.\n6. На общие вопросы, не связанные с запросами к базе данных, отвечай обычно.\n\nПравила генерации SQL (критично, строго соблюдать):\n7. [Точность полей - абсолютное правило] Перед генерацией SQL обязательно вызови get_columns, чтобы получить реальный список полей целевой таблицы. Каждое имя поля в SQL должно точно совпадать со значением field, возвращенным get_columns, включая регистр. Не выдумывай, не сокращай и не выводи имена полей по предположению. Например, если поле называется channel, пиши channel, а не pay_channel.\n8. При генерации SQL не используй квалифицированный префикс формата \"database.table\"; пиши только само имя таблицы.\n9. При отчете о результатах имя/ID подключения и имя базы данных должны строго происходить из фактических параметров одного и того же вызова get_tables. Не смешивай connectionId одного подключения с dbName другого.\n10. Если есть несколько баз с похожими именами, ясно сообщи пользователю, в какой именно базе находится целевая таблица.\n11. [Обязательно] Первая строка каждого SQL-блока должна содержать комментарий объявления контекста строго в таком формате: -- @context connectionId= dbName=<имя базы данных>. connectionId и dbName должны происходить из одного успешного вызова get_tables, то есть из фактических значений параметров, переданных тобой в этот вызов. Пример:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\nТекущие доступные подключения: [{{connList}}]", - "ai_chat.panel.prompt.sql.no_connections": "Ты профессиональный помощник по базам данных. Сейчас в приложении нет доступных подключений к базам данных.\n\nЕсли вопрос пользователя требует структуры базы данных или SQL, сначала объясни, что get_connections, get_databases, get_tables и get_columns не могут получить реальные сведения о базе без существующего подключения, затем попроси пользователя создать подключение и повторить попытку. Не угадывай connectionId, dbName, имена таблиц или имена полей.\n\nНа общие вопросы, не связанные с запросами к базе данных, отвечай обычно.", - "ai_chat.panel.model_control.force_tool_call": "Используй function call напрямую, чтобы вызвать инструмент и выполнить операцию; не ограничивайся текстовым описанием плана.", - "ai_chat.panel.model_control.continue_after_summary": "На основе последнего состояния и результатов исследования выше продолжи незавершенный анализ или выполни следующий шаг.", - "ai_chat.panel.local_tool.get_connections.description": "Если нужно запросить или изменить данные в базе, но пользователь не выбрал контекст подключения, получает все подключения к базам данных, доступные в приложении. Возвращаемые данные включают ID подключения (id) и имя (name).", - "ai_chat.panel.local_tool.get_databases.description": "Получает имена всех баз данных (Database/Schema) в указанном подключении (connectionId).", - "ai_chat.panel.local_tool.get_tables.description": "После того как целевое подключение и dbName известны, если пользователь спрашивает о таблице или неявно упоминает ее, но точный tableName неизвестен, вызови этот инструмент, чтобы получить список всех имен таблиц в этой базе данных (только имена таблиц) и определить целевую таблицу.", - "ai_chat.panel.local_tool.get_columns.description": "Получает список field для указанной таблицы, включая имена field, типы, признак NULL, значения по умолчанию, комментарии и другие метаданные. Перед генерацией SQL обязательно вызови этот инструмент, чтобы подтвердить реальные имена field; не угадывай имена field.", - "ai_chat.panel.local_tool.get_table_ddl.description": "Получает полный CREATE TABLE DDL для указанной таблицы, включая fields, индексы, ограничения и полную информацию о структуре.", - "ai_chat.panel.local_tool.execute_sql.description": "Выполняет SQL-запрос в указанном подключении и базе данных, затем возвращает результат. Управляется уровнем безопасности: в режиме только для чтения разрешены только SELECT/SHOW/DESCRIBE и похожие операции запроса. Возвращает не более 50 строк.", - "ai_chat.panel.local_tool.param.connection_id": "connectionId (ID подключения)", - "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId (из get_connections)", - "ai_chat.panel.local_tool.param.db_name": "dbName (имя базы данных)", - "ai_chat.panel.local_tool.param.table_name": "tableName (имя таблицы)", - "ai_chat.panel.local_tool.param.sql": "SQL-выражение для выполнения", - "ai_chat.panel.tool_error.connection_not_found": "Подключение не найдено", - "ai_chat.panel.tool_error.unknown_function": "Неизвестная функция: {{functionName}}", - "ai_chat.panel.tool_error.fetch_databases_failed": "Не удалось получить список баз данных: {{detail}}", - "ai_chat.panel.tool_error.fetch_tables_failed": "Не удалось получить список таблиц: {{detail}}", - "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ Ниже приведен точный список полей таблицы {{tableName}}. При создании SQL используй только эти значения field как имена столбцов, строго без изменений. Не изменяй, не сокращай и не придумывай имена полей.\nДоступные поля: {{fieldNames}}\nПодробности: {{detailJson}}", - "ai_chat.panel.tool_error.fetch_columns_failed": "Не удалось получить список столбцов: {{detail}}", - "ai_chat.panel.tool_error.fetch_table_ddl_failed": "Не удалось получить выражение CREATE TABLE: {{detail}}", - "ai_chat.panel.tool_error.sql_blocked": "Политика безопасности заблокировала этот запрос: текущий уровень безопасности не разрешает {{operationType}} SQL. Покажите SQL пользователю и попросите выполнить его вручную.", - "ai_chat.panel.tool_error.sql_execute_failed": "Не удалось выполнить SQL", - "ai_chat.panel.tool_error.sql_execute_exception": "Исключение при выполнении SQL: {{detail}}", - "ai_chat.panel.error.unknown": "Неизвестная ошибка", - "ai_chat.panel.error.http_server": "Ошибка сервера HTTP {{code}}", - "ai_chat.panel.error.html_response": "Сервер вернул необычный HTML-ответ; возможно, истекло время ожидания шлюза или служба недоступна", - "ai_chat.panel.error.truncated_suffix": "...(обрезано)", - "ai_chat.panel.notice.fetch_models_failed": "Не удалось получить список моделей: {{detail}}", - "ai_chat.panel.message.error": "❌ Ошибка: {{detail}}", - "ai_chat.panel.message.empty_response": "❌ Модель не вернула содержимое. Возможны ограничение частоты, перегрузка контекста или отказ.", - "ai_chat.panel.message.request_interrupted": "❌ Запрос прерван: конкретный ответ не получен.", - "ai_chat.panel.message.service_not_ready": "❌ AI Service не готов", - "ai_chat.panel.message.send_failed": "❌ Не удалось отправить: {{detail}}", - "ai_chat.panel.probe.max_rounds": "⚠️ Вызовы инструментов достигли лимита {{count}} раундов и были остановлены. Отправьте новое сообщение, чтобы продолжить исследование.", - "ai_chat.panel.probe.consecutive_failed": "⚠️ Проверки завершились ошибкой 3 раунда подряд и были остановлены. Проверьте состояние подключения и повторите попытку.", - "ai_chat.panel.status.summarizing_probe": "Сводка результатов проверок", - "ai_chat.panel.status.returning_runtime_data": "Передача данных выполнения модели", - "ai_chat.panel.status.deep_reasoning": "Модель выполняет глубокое рассуждение", - "ai_chat.panel.status.waiting_instruction": "Ожидание инструкции операции", - "ai_chat.panel.status.analyzing_chain": "Глубокий анализ цепочки и логики", - "ai_chat.panel.status.model_connecting": "Подключение к модели", - "ai_chat.panel.status.waking_engine": "Пробуждение механизма рассуждений", - "ai_chat.panel.status.waiting_response": "Ожидание ответа модели", - "ai_chat.panel.session.default_title": "Новый чат", - "ai_settings.title": "Настройки AI", - "ai_settings.subtitle": "Настройка моделей AI, уровня безопасности и контекста", - "ai_settings.nav.title": "Навигация настроек", - "ai_settings.nav.providers.title": "Поставщики моделей", - "ai_settings.nav.providers.description": "Настройка конечных точек моделей и секретов", - "ai_settings.nav.safety.title": "Контроль безопасности", - "ai_settings.nav.safety.description": "Ограничение уровня риска операций AI", - "ai_settings.nav.context.title": "Контекст", - "ai_settings.nav.context.description": "Настройка контекста схемы базы данных", - "ai_settings.nav.tools.title": "Встроенные инструменты", - "ai_settings.nav.tools.description": "Просмотр доступных AI зондов данных", - "ai_settings.nav.prompts.title": "Встроенные промпты", - "ai_settings.nav.prompts.description": "Просмотр системных базовых требований", - "ai_settings.provider.empty.title": "Поставщик модели не настроен", - "ai_settings.provider.empty.description": "Добавьте поставщика, чтобы начать использовать AI-ассистента", - "ai_settings.provider.no_model": "Модель не выбрана", - "ai_settings.provider.next_provider": "следующий поставщик", - "ai_settings.provider.action.add": "Добавить поставщика модели", - "ai_settings.provider.action.edit": "Редактировать", - "ai_settings.provider.action.delete": "Удалить", - "ai_settings.provider.confirm_delete": "Удалить этого поставщика?", - "ai_settings.provider.editor.add_title": "Добавить поставщика модели", - "ai_settings.provider.editor.edit_title": "Редактировать поставщика модели", - "ai_settings.provider_preset.openai.label": "OpenAI", - "ai_settings.provider_preset.openai.desc": "Серия GPT-5.4 / 5.3", - "ai_settings.provider_preset.deepseek.label": "DeepSeek", - "ai_settings.provider_preset.deepseek.desc": "Модели DeepSeek-V4 / R1", - "ai_settings.provider_preset.qwen_bailian.label": "Qwen (Bailian общий)", - "ai_settings.provider_preset.qwen_bailian.desc": "Anthropic-совместимая конечная точка Bailian / удаленный список моделей", - "ai_settings.provider_preset.qwen_coding_plan.label": "Qwen (Coding Plan)", - "ai_settings.provider_preset.qwen_coding_plan.desc": "Прокси-цепочка Claude Code CLI / официальный список поддерживаемых моделей", - "ai_settings.provider_preset.zhipu.label": "Zhipu GLM", - "ai_settings.provider_preset.zhipu.desc": "Модели GLM-5 / GLM-5-Turbo", - "ai_settings.provider_preset.moonshot.label": "Kimi", - "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5 (Anthropic-совместимый)", - "ai_settings.provider_preset.anthropic.label": "Claude", - "ai_settings.provider_preset.anthropic.desc": "Модели Claude Opus/Sonnet", - "ai_settings.provider_preset.gemini.label": "Gemini", - "ai_settings.provider_preset.gemini.desc": "Серия Gemini 3.1 / 2.5", - "ai_settings.provider_preset.volcengine_ark.label": "Volcengine Ark", - "ai_settings.provider_preset.volcengine_ark.desc": "Общий инференс Ark / модели Doubao", - "ai_settings.provider_preset.volcengine_coding.label": "Volcengine Coding Plan", - "ai_settings.provider_preset.volcengine_coding.desc": "Среда Ark Code / Coding Plan", - "ai_settings.provider_preset.minimax.label": "MiniMax", - "ai_settings.provider_preset.minimax.desc": "Серия M3 / M2.7 (Anthropic-совместимая)", - "ai_settings.provider_preset.ollama.label": "Ollama", - "ai_settings.provider_preset.ollama.desc": "Локально развернутые модели с открытым кодом", - "ai_settings.provider_preset.custom.label": "Пользовательский", - "ai_settings.provider_preset.custom.desc": "Пользовательская конечная точка API", - "ai_settings.form.section.service_type": "Тип сервиса", - "ai_settings.form.section.basic": "Основная информация", - "ai_settings.form.section.auth_connection": "Аутентификация и подключение", - "ai_settings.form.provider_name": "Имя поставщика", - "ai_settings.form.provider_name_required": "Введите имя", - "ai_settings.form.provider_name_placeholder": "Пример: собственная OpenAI-совместимая конечная точка / частная модель", - "ai_settings.form.api_format": "Формат API", - "ai_settings.form.model_list": "Список доступных моделей (необязательно)", - "ai_settings.form.model_list_placeholder": "Укажите ID моделей; оставьте пустым, чтобы получить их с сервера", - "ai_settings.form.api_key": "API Key", - "ai_settings.form.api_key_required": "Введите API Key", - "ai_settings.form.api_key_keep_placeholder": "Оставьте пустым, чтобы продолжить использовать сохраненный секрет", - "ai_settings.form.api_key_placeholder": "sk-... / ваш API Key", - "ai_settings.form.api_key_saved_hint": "API Key уже сохранен. Оставьте поле пустым, чтобы использовать его дальше, или введите новое значение для замены.", - "ai_settings.form.clear_saved_api_key": "Очистить сохраненный API Key", - "ai_settings.form.api_endpoint": "API Endpoint (URL)", - "ai_settings.form.api_endpoint_required": "Введите корректный URL конечной точки", - "ai_settings.action.back": "Назад", - "ai_settings.action.save": "Сохранить", - "ai_settings.action.test": "Проверить подключение", - "ai_settings.action.retest": "Проверить снова", - "ai_settings.action.connection_ok": "Подключение в порядке", - "ai_settings.message.deleted": "Удалено", - "ai_settings.message.deleted_and_switched": "Удалено, выполнено автоматическое переключение на «{{name}}»", - "ai_settings.message.delete_failed": "Не удалось удалить", - "ai_settings.message.delete_failed_detail": "Не удалось удалить: {{detail}}", - "ai_settings.message.saved": "Сохранено", - "ai_settings.message.save_failed": "Не удалось сохранить", - "ai_settings.message.save_failed_detail": "Не удалось сохранить: {{detail}}", - "ai_settings.message.switched": "Переключено", - "ai_settings.message.switch_failed": "Не удалось переключить", - "ai_settings.message.switch_failed_detail": "Не удалось переключить: {{detail}}", - "ai_settings.message.test_requires_new_api_key": "Перед проверкой подключения введите новый API Key или отмените очистку сохраненного секрета", - "ai_settings.message.test_success": "Подключение успешно", - "ai_settings.message.test_failed": "Проверка не удалась", - "ai_settings.message.test_failed_detail": "Проверка не удалась: {{detail}}", - "ai_settings.message.unknown_error": "Неизвестная ошибка", - "ai_settings.safety.description": "Управляет типами SQL-операций, которые AI может выполнять, чтобы защитить данные", - "ai_settings.safety.readonly.label": "Режим только чтения", - "ai_settings.safety.readonly.desc": "AI может выполнять только SELECT и похожие запросы. Это самый безопасный режим.", - "ai_settings.safety.readwrite.label": "Режим чтения и записи", - "ai_settings.safety.readwrite.desc": "AI может выполнять INSERT/UPDATE/DELETE. Для рискованных операций требуется подтверждение.", - "ai_settings.safety.full.label": "Полный режим", - "ai_settings.safety.full.desc": "AI может выполнять все операции, включая DDL. Для операций высокого риска предупреждения показываются автоматически.", - "ai_settings.context.description": "Управляет объемом контекста базы данных, отправляемым AI", - "ai_settings.context.schema_only.label": "Только схема", - "ai_settings.context.schema_only.desc": "AI получает только структуру таблиц и столбцов", - "ai_settings.context.with_samples.label": "С примерами данных", - "ai_settings.context.with_samples.desc": "Добавляет небольшой объем примеров данных, чтобы AI лучше понимал их особенности", - "ai_settings.context.with_results.label": "С результатами запросов", - "ai_settings.context.with_results.desc": "Передает последние результаты запросов как контекст", - "ai_settings.prompts.description": "Ниже показаны системные AI-промпты, встроенные в текущую версию GoNavi. Они доступны только для чтения и динамически добавляются в контекст запроса для соответствующих сценариев.", - "ai_settings.prompts.message.saved": "Пользовательские промпты сохранены", - "ai_settings.prompts.message.save_failed": "Не удалось сохранить пользовательские промпты", - "ai_settings.mcp_server.message.saved": "Служба MCP сохранена", - "ai_settings.mcp_server.message.save_failed": "Не удалось сохранить службу MCP", - "ai_settings.mcp_server.message.deleted": "Служба MCP удалена", - "ai_settings.mcp_server.message.delete_failed": "Не удалось удалить службу MCP", - "ai_settings.mcp_server.message.test_success": "Подключение к службе MCP успешно", - "ai_settings.mcp_server.message.test_failed": "Проверка службы MCP не удалась", - "ai_settings.mcp_server.message.test_request_failed": "Не удалось выполнить проверку службы MCP", - "ai_settings.clipboard.error.unsupported": "Копирование в буфер обмена не поддерживается в текущей среде", - "ai_settings.mcp_http.error.control_unsupported_runtime": "Текущая среда выполнения не поддерживает управление службой MCP HTTP", - "ai_settings.mcp_http.error.start_unsupported_version": "Эта версия не поддерживает запуск службы MCP HTTP", - "ai_settings.mcp_http.error.stop_unsupported_version": "Эта версия не поддерживает остановку службы MCP HTTP", - "ai_settings.mcp_http.message.started": "Служба GoNavi MCP HTTP запущена", - "ai_settings.mcp_http.message.stopped": "Служба GoNavi MCP HTTP остановлена", - "ai_settings.mcp_http.message.toggle_failed": "Не удалось переключить службу GoNavi MCP HTTP", - "ai_settings.mcp_http.message.url_unavailable": "Нет MCP HTTP URL для копирования", - "ai_settings.mcp_http.message.url_copied": "MCP HTTP URL скопирован", - "ai_settings.mcp_http.message.authorization_header_required": "Сначала запустите службу MCP HTTP, чтобы создать Authorization Header", - "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header скопирован", - "ai_settings.mcp_http.status.not_running": "Служба GoNavi MCP HTTP не запущена", - "ai_settings.skill.message.saved": "Skill сохранен", - "ai_settings.skill.message.save_failed": "Не удалось сохранить Skill", - "ai_settings.skill.message.deleted": "Skill удален", - "ai_settings.skill.message.delete_failed": "Не удалось удалить Skill", - "ai_settings.tools.description": "При работе с вопросами по базам данных AI-ассистент может автоматически вызывать эти встроенные инструменты, чтобы получить реальные данные без ручного вмешательства.", - "ai_settings.tools.workflow": "💡 Процесс: get_connections → get_databases → get_tables → get_columns → сформировать SQL", - "ai_settings.tools.params_label": "Параметры:", - "ai_settings.tools.builtin_tool_label": "Встроенный инструмент", - "ai_settings.tools.search.aria_label": "Поиск встроенных инструментов", - "ai_settings.tools.search.placeholder": "Поиск инструментов, процессов или параметров, например mcp / lineLimit / allowMutating / transaction", - "ai_settings.tools.search.clear": "Очистить", - "ai_settings.tools.summary": "Показано {{flowVisible}}/{{flowTotal}} рекомендуемых процессов и {{toolVisible}}/{{toolTotal}} встроенных инструментов.", - "ai_settings.tools.empty.no_matches": "Подходящих встроенных инструментов нет. Попробуйте более общие ключевые слова, например mcp, logs, connection, transaction, shortcuts или schema.", - "ai_settings.tools.parameters.hint_title": "Подсказки по параметрам", - "ai_settings.tools.parameters.type_label": "Тип: {{type}}", - "ai_settings.tools.parameters.required": "Обязательный", - "ai_settings.tools.parameters.optional": "Необязательный", - "ai_settings.tools.parameters.enum_values": "Допустимые значения: {{values}}", - "ai_settings.tools.parameters.default_value": "По умолчанию: {{value}}", - "ai_settings.tools.parameters.example": "Пример:", - "ai_settings.tools.params.none": "Без параметров", - "ai_settings.tools.get_connections.desc": "Получить все доступные подключения к базам данных", - "ai_settings.tools.get_connections.detail": "Возвращает ID подключения, имя, тип (MySQL/PostgreSQL и т. д.) и адрес Host. AI использует эти сведения, чтобы выбрать подключение для первичного исследования.", - "ai_settings.tools.get_databases.desc": "Получить все базы данных в выбранном подключении", - "ai_settings.tools.get_databases.detail": "Передайте connectionId, чтобы получить список имен баз данных или схем в этом подключении.", - "ai_settings.tools.get_tables.desc": "Получить все имена таблиц в базе данных", - "ai_settings.tools.get_tables.detail": "Передайте connectionId и dbName, чтобы получить список таблиц. AI использует его для поиска целевой таблицы, о которой говорит пользователь.", - "ai_settings.tools.get_columns.desc": "Получить структуру столбцов таблицы", - "ai_settings.tools.get_columns.detail": "Передайте connectionId, dbName и tableName, чтобы получить имя, тип, признак NULL, значение по умолчанию и комментарий каждого столбца. Перед генерацией SQL AI должен вызвать этот инструмент, чтобы подтвердить реальные имена столбцов.", - "ai_settings.tools.get_table_ddl.desc": "Получить DDL таблицы", - "ai_settings.tools.get_table_ddl.detail": "Передайте connectionId, dbName и tableName, чтобы получить полный оператор CREATE TABLE, включая определения столбцов, индексы, ограничения и метаданные.", - "ai_settings.tools.execute_sql.desc": "Выполнить SQL-запрос и вернуть результат", - "ai_settings.tools.execute_sql.detail": "Передайте connectionId, dbName и sql, чтобы выполнить SQL в целевой базе данных и вернуть до 50 строк результата. Применяется уровень безопасности; в режиме только чтения разрешены только SELECT/SHOW/DESCRIBE.", - "driver_manager.title": "Управление драйверами", - "driver_manager.action.refresh": "Обновить", - "driver_manager.action.network_check": "Проверка сети", - "driver_manager.action.close": "Закрыть", - "driver_manager.action.open_global_proxy_settings": "Открыть настройки глобального прокси", - "driver_manager.action.open_directory": "Открыть каталог драйверов", - "driver_manager.action.import_directory": "Импортировать каталог драйверов", - "driver_manager.action.import_package": "Импортировать пакет драйвера", - "driver_manager.action.install_enable": "Установить и включить", - "driver_manager.action.remove": "Удалить", - "driver_manager.action.logs": "Журнал", - "driver_manager.column.data_source": "Источник данных", - "driver_manager.column.package_size": "Размер пакета", - "driver_manager.column.status": "Состояние", - "driver_manager.column.progress": "Ход установки", - "driver_manager.column.version": "Версия драйвера", - "driver_manager.column.actions": "Действия", - "driver_manager.description.install_required": "Для источников данных, кроме MySQL / Redis / Oracle / PostgreSQL, перед подключением нужно установить и включить драйвер.", - "driver_manager.directory_info.title": "Каталог драйверов и повторное использование", - "driver_manager.directory_info.details_label": "Показать каталог драйверов и пояснение о повторном использовании", - "driver_manager.directory_info.reuse_help": "Автоматически скачанные и вручную импортированные драйверы сохраняются в этом каталоге. Их можно повторно использовать при последующих обновлениях версий.", - "driver_manager.directory_info.root_dir": "Корневой каталог драйверов: {{path}}", - "driver_manager.directory_info.log_file": "Файл журнала выполнения: {{path}}", - "driver_manager.empty.default": "Нет данных о драйверах", - "driver_manager.empty.search": "Нет драйверов, совпадающих с «{{keyword}}»", - "driver_manager.filter_summary.match": "Совпадений {{filtered}} / {{total}}", - "driver_manager.filter_summary.total": "Драйверов: {{total}}", - "driver_manager.import.directory_help": "Если загрузка из приложения не работает, сначала вручную скачайте пакет драйвера в этот каталог, затем используйте «Импортировать пакет драйвера» или «Импортировать каталог драйверов», чтобы завершить установку.", - "driver_manager.import.single_file_help": "Строчное действие «Импортировать пакет драйвера» предназначено только для отдельного файла драйвера или архива, например `mariadb-driver-agent`, `mariadb-driver-agent.exe` или `GoNavi-DriverAgents.zip`. Прямой импорт JDBC Jar не поддерживается; для пакетного импорта используйте «Импортировать каталог драйверов» выше.", - "driver.guidance.customConnectionDriverHelp": "Поддерживаются: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase; псевдонимы: postgresql/pgx, open_gauss/open-gauss, dm8, kingbase8/kingbasees/kingbasev8. Укажите имя драйвера Go database/sql, уже зарегистрированного в GoNavi. Не вводите напрямую имя системного драйвера ODBC/JDBC и не импортируйте JDBC Jar.", - "driver_manager.local_source.file": "файл", - "driver_manager.local_source.directory": "каталог", - "driver_manager.log.start_auto_install": "Начата автоматическая установка", - "driver_manager.log.done_auto_install": "Автоматическая установка завершена{{version}}", - "driver_manager.log.start_local_import": "Начат локальный импорт{{version}} ({{source}}): {{path}}", - "driver_manager.log.done_local_import": "Установка через локальный импорт завершена{{version}}", - "driver_manager.log.skip_installed_dedupe": "Драйвер уже установлен; импорт каталога пропущен из-за устранения дублей", - "driver_manager.log.force_overwrite_reinstall": "Включен режим перезаписи установленных драйверов; будет выполнен повторный импорт", - "driver_manager.log.skip_slim_build": "Текущий пакет выпуска является slim-сборкой; импорт каталога пропущен", - "driver_manager.log.start_remove": "Начато удаление драйвера", - "driver_manager.log.done_remove": "Удаление драйвера завершено", - "driver_manager.log.progress_line": "{{status}}: {{message}} ({{percent}} %)", - "driver_manager.log_modal.title": "Журнал драйвера - {{name}}", - "driver_manager.log_modal.install_dir": "Каталог установки: {{path}}", - "driver_manager.log_modal.executable_path": "Исполняемый файл драйвера: {{path}}", - "driver_manager.log_modal.empty": "Для этого драйвера пока нет журналов операций.", - "driver_manager.message.load_status_failed": "Не удалось загрузить состояние драйверов", - "driver_manager.message.load_status_failed_detail": "Не удалось загрузить состояние драйверов: {{detail}}", - "driver_manager.message.network_check_failed": "Проверка сети для драйверов не удалась", - "driver_manager.message.network_check_failed_detail": "Проверка сети для драйверов не удалась: {{detail}}", - "driver_manager.message.network_check_completed": "Проверка сети для драйверов завершена", - "driver_manager.message.load_version_failed": "Не удалось загрузить список версий для {{name}}", - "driver_manager.message.load_version_failed_detail": "Не удалось загрузить список версий для {{name}}: {{detail}}", - "driver_manager.message.install_start": "Начата установка", - "driver_manager.message.install_failed": "Не удалось установить {{name}}", - "driver_manager.message.install_failed_detail": "Не удалось установить {{name}}: {{detail}}", - "driver_manager.message.install_success": "{{name}}{{version}} установлен и включен", - "driver_manager.message.local_path_required": "Выберите допустимый локальный источник импорта: {{source}}", - "driver_manager.message.local_import_start": "Начат импорт локального пакета драйвера", - "driver_manager.message.local_import_failed": "Не удалось импортировать локальный пакет драйвера для {{name}}", - "driver_manager.message.local_import_failed_detail": "Не удалось импортировать локальный пакет драйвера для {{name}}: {{detail}}", - "driver_manager.message.local_import_success": "Локальный пакет драйвера для {{name}}{{version}} установлен и включен", - "driver_manager.message.select_local_file_failed": "Не удалось выбрать локальный файл пакета драйвера", - "driver_manager.message.select_local_file_failed_detail": "Не удалось выбрать локальный файл пакета драйвера: {{detail}}", - "driver_manager.message.local_file_required": "Выберите допустимый файл пакета драйвера", - "driver_manager.message.select_local_directory_failed": "Не удалось выбрать локальный каталог пакета драйвера", - "driver_manager.message.select_local_directory_failed_detail": "Не удалось выбрать локальный каталог пакета драйвера: {{detail}}", - "driver_manager.message.local_directory_required": "Выберите допустимый каталог пакета драйвера", - "driver_manager.message.no_external_drivers_to_import": "Нет внешних драйверов для импорта", - "driver_manager.message.skip.dedupe": "Пропущено дублей: {{count}}", - "driver_manager.message.skip.slim": "Пропущено slim-сборок: {{count}}", - "driver_manager.message.skip_suffix": ", {{items}}", - "driver_manager.message.overwrite_suffix": " (с перезаписью установленных)", - "driver_manager.message.directory_import_completed": "Импорт каталога завершен{{mode}}: успешно {{success}}{{skip}}", - "driver_manager.message.directory_import_completed_with_failure": "Импорт каталога завершен{{mode}}: успешно {{success}}, с ошибкой {{failed}}{{skip}}", - "driver_manager.message.directory_import_failed": "Импорт каталога не удался{{mode}}: с ошибкой {{failed}}{{skip}}", - "driver_manager.message.open_directory_failed": "Не удалось открыть каталог драйверов", - "driver_manager.message.open_directory_failed_detail": "Не удалось открыть каталог драйверов: {{detail}}", - "driver_manager.message.remove_failed": "Не удалось удалить {{name}}", - "driver_manager.message.remove_failed_detail": "Не удалось удалить {{name}}: {{detail}}", - "driver_manager.message.remove_success": "{{name}} удален", - "driver_manager.network.alert.download_chain_unreachable": "Важно: домены маршрута загрузки драйверов недоступны", - "driver_manager.network.alert.download_network_unreachable": "Важно: сеть загрузки драйверов недоступна", - "driver_manager.network.summary.download_chain_unreachable": "GitHub API доступен, но домены ресурсов для загрузки драйверов недоступны.", - "driver_manager.network.summary.unreachable_proxy_configured": "Некоторые точки загрузки драйверов недоступны. Проверьте, что настроенный прокси работает, и повторите попытку.", - "driver_manager.network.summary.proxy_recommended": "Некоторые точки загрузки драйверов недоступны. Перед установкой настройте прокси HTTP/HTTPS/SOCKS5.", - "driver_manager.network.summary.unreachable": "Некоторые точки загрузки драйверов недоступны. Проверьте сеть и повторите попытку.", - "driver_manager.network.summary.reachable_with_proxy": "Сеть загрузки драйверов доступна через настроенный прокси.", - "driver_manager.network.summary.reachable": "Сеть загрузки драйверов доступна. Драйверы можно устанавливать напрямую.", - "driver_manager.network.chain_alert.description": "Страницы GitHub могут открываться, но загрузка пакетов драйверов перенаправляется на домены ресурсов. Сначала включите глобальный прокси в верхнем пункте GoNavi «Прокси», указав локальный адрес и порт приложения прокси.", - "driver_manager.network.chain_alert.allow_hosts": "Если ошибка сохраняется, разрешите эти узлы в правилах прокси: {{hosts}}. Если правила изменить нельзя, рассмотрите включение режима TUN.", - "driver_manager.network.proxy_env_detected": "Обнаружены переменные окружения прокси: {{keys}}", - "driver_manager.network.details_label": "Показать детали проверки сети", - "driver_manager.network.github_latency": "Задержка подключения через прокси к GitHub: {{status}}{{latency}}{{detail}}", - "driver_manager.network.reachable": "доступно", - "driver_manager.network.unreachable": "недоступно", - "driver_manager.network.no_result": "нет результата", - "driver_manager.network.latency_value": ", {{latency}}ms", - "driver_manager.network.error_value": ", {{detail}}", - "driver_manager.network.no_proxy_env": "Системные переменные окружения прокси не обнаружены.", - "driver_manager.network.checking": "Проверяется сеть загрузки драйверов...", - "driver_manager.network.not_checked": "Проверка сети еще не завершена", - "driver_manager.progress.local_package_start": "Начата установка локального пакета драйвера", - "driver_manager.progress.metadata_write": "Запись метаданных драйвера", - "driver_manager.progress.local_package_done": "Импорт локального пакета драйвера завершен", - "driver_manager.progress.install_start": "Начата установка", - "driver_manager.progress.pure_go_enabled": "Установка завершена; чистый Go-драйвер включен", - "driver_manager.progress.agent_install_start": "Начата установка агента драйвера {{name}}", - "driver_manager.progress.agent_install_done": "Установка агента драйвера {{name}} завершена", - "driver_manager.progress.download_prebuilt_agent": "Загрузка предварительно собранного агента драйвера {{name}}", - "driver_manager.progress.download_bundle": "Загрузка комплекта драйвера {{name}}", - "driver_manager.progress.extract_agent_from_bundle": "Извлечение агента {{name}} из комплекта драйверов", - "driver_manager.progress.unzip_agent": "Распаковка агента драйвера {{name}}", - "driver_manager.progress.source_build_preferred": "Сначала используется локальная сборка из исходников для агента драйвера {{name}}", - "driver_manager.progress.dev_build_fallback": "Предварительно собранный пакет не найден; пробуем локальную сборку для разработки", - "driver_manager.progress.plan.source_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); эта версия разрешает только локальную сборку из исходников", - "driver_manager.progress.plan.source_first": "Подготовка установки агента драйвера {{name}} (версия {{version}}); сначала локальная сборка из исходников, затем резервная загрузка", - "driver_manager.progress.plan.direct_then_bundle": "Подготовка установки агента драйвера {{name}} (версия {{version}}); сначала {{direct}} прямых ссылок на готовую сборку, затем {{bundle}} источников комплектов драйверов", - "driver_manager.progress.plan.explicit_direct": "Подготовка установки агента драйвера {{name}} (версия {{version}}); только явные ресурсы версии, пробуем {{direct}} прямых ссылок на готовую сборку", - "driver_manager.progress.plan.direct_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); пробуем {{direct}} прямых ссылок на готовую сборку", - "driver_manager.progress.plan.bundle_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); прямые ссылки на готовую сборку не указаны, пробуем {{bundle}} источников комплектов драйверов", - "driver_manager.progress.plan.source_fallback": "Подготовка установки агента драйвера {{name}} (версия {{version}}); если ресурсы выпуска не совпадут, будет локальная сборка из исходников", - "driver_manager.progress.fallback.direct_to_bundle": "Прямые ссылки на готовую сборку не подошли; переключаемся на комплект драйверов ({{name}}, осталось источников: {{bundle}})", - "driver_manager.progress.fallback.explicit_skip_bundle": "Прямые ссылки на готовую сборку не подошли; разрешены только явные ресурсы, комплект драйверов пропускается ({{name}})", - "driver_manager.progress.fallback.bundle_available": "Прямая ссылка недоступна; переключаемся на комплект драйверов ({{name}}, осталось источников: {{bundle}})", - "driver_manager.progress.fallback.source_build": "Ресурсы выпуска не подошли; готовится резервная локальная сборка из исходников ({{name}})", - "driver_manager.progress.backend_empty": "Backend не вернул деталей прогресса", - "driver_manager.progress.backend_detail": "Деталь backend: {{detail}}", - "driver_manager.progress.status.start": "СТАРТ", - "driver_manager.progress.status.downloading": "ЗАГРУЗКА", - "driver_manager.progress.status.done": "ГОТОВО", - "driver_manager.progress.status.error": "ОШИБКА", - "driver_manager.progress.status.unknown": "НЕИЗВЕСТНО", - "driver_manager.option.force_overwrite_installed": "Перезаписывать установленные", - "driver_manager.punctuation.list_separator": ", ", - "driver_manager.search.placeholder": "Поиск по имени или типу драйвера, например DuckDB или clickhouse", - "driver_manager.search.built_in": "встроенный", - "driver_manager.search.external": "внешний", - "driver_manager.status.calculating": "Вычисляется...", - "driver_manager.status.built_in_available": "Встроенный доступен", - "driver_manager.status.installing_percent": "Установка {{percent}}%", - "driver_manager.status.enabled": "Включен", - "driver_manager.status.installed": "Установлен", - "driver_manager.status.disabled": "Не включен", - "driver_manager.status.full_required": "Требуется Full-версия", - "driver_manager.version.default": "Версия по умолчанию", - "driver_manager.version.inline_suffix": " (версия {{version}})", - "driver_manager.version.group.year": "{{year}} год", - "driver_manager.version.group.other": "Другое", - "driver_manager.version.placeholder.select": "Выберите версию драйвера", - "driver_manager.version.placeholder.load_on_expand": "Разверните, чтобы загрузить версии", - "driver_manager.version.installed_locked_with_version": "{{version}} (установлена; удалите, чтобы изменить)", - "driver_manager.version.installed_locked": "Установлено (удалите, чтобы изменить)", - "driver_manager.version.mongodb_hint": "Сейчас поддерживаются только MongoDB 1.17.x и 2.x. Более старые версии 1.x недоступны для установки.", - "driver_manager.backend.dialog.select_download_directory": "Выберите каталог загрузки драйверов", - "driver_manager.backend.dialog.select_package_file": "Выберите файл пакета драйвера (не JDBC Jar)", - "driver_manager.backend.dialog.select_package_directory": "Выберите каталог пакета драйвера", - "driver_manager.backend.driver_fallback_name": "драйвер", - "driver_manager.backend.package_size.built_in": "Встроенный", - "driver_manager.backend.package_size.to_be_published": "Ожидает публикации", - "driver_manager.backend.version.unlabeled": "Версия без метки", - "driver_manager.backend.version.latest_suffix": " (последняя)", - "driver_manager.backend.version.recommended_suffix": " (рекомендуется)", - "driver_manager.backend.message.unsupported_builtin_manifest_url": "Неподдерживаемый URL встроенного манифеста драйверов: {{url}}", - "driver_manager.backend.message.jdbc_jar_unsupported": "Прямой импорт файлов JDBC Jar не поддерживается. GoNavi использует Go-драйверы и дополнительные пакеты driver-agent; используйте пакет драйвера или каталог драйвера. Для подключения к Kingbase предпочтительно выберите тип подключения Kingbase либо укажите kingbase / kingbase8 в пользовательском подключении.", - "driver_manager.backend.message.runtime_directory_configured": "Каталог среды выполнения драйверов настроен", - "driver_manager.backend.message.opened_directory": "Каталог драйверов открыт: {{path}}", - "driver_manager.backend.message.log_hint": " (подробный журнал: {{path}})", - "driver_manager.backend.message.local_import_failed_detail": "Не удалось импортировать локальный пакет драйвера: {{detail}}", - "driver_manager.backend.message.metadata_write_failed_detail": "Не удалось записать метаданные драйвера: {{detail}}", - "driver_manager.backend.message.driver_install_success": "Драйвер успешно установлен", - "driver_manager.backend.message.download_failed_detail": "Не удалось скачать и установить драйвер: {{detail}}", - "driver_manager.backend.message.package_removed": "Пакет драйвера удален", - "driver_manager.backend.error.unknown": "Неизвестная ошибка", - "driver_manager.backend.error.unsupported_driver_type": "Неподдерживаемый тип драйвера", - "driver_manager.backend.error.builtin_download_not_required": "Встроенным драйверам не требуется загрузка пакетов расширения", - "driver_manager.backend.error.builtin_install_not_required": "Встроенным драйверам не требуется установка пакетов расширения", - "driver_manager.backend.error.builtin_version_not_required": "Встроенным драйверам не требуется выбор версии", - "driver_manager.backend.error.builtin_package_not_required": "У встроенных драйверов нет установочных пакетов", - "driver_manager.backend.error.builtin_remove_not_allowed": "Встроенные драйверы нельзя удалить", - "driver_manager.backend.error.optional_go_only": "Здесь можно устанавливать и включать только дополнительные Go-драйверы", - "driver_manager.backend.error.package_size_unsupported": "Этот драйвер не поддерживает запрос размера установочного пакета", - "driver_manager.backend.error.version_empty": "Версия пустая", - "driver_manager.backend.error.asset_name_empty": "Имя ресурса драйвера пустое", - "driver_manager.backend.error.mongo_version_unsupported": "Версия MongoDB {{version}} не поддерживается; поддерживаются только 1.17.x и 2.x", - "driver_manager.backend.error.open_directory_unsupported": "На этой платформе нельзя открывать каталоги: {{platform}}", - "driver_manager.backend.error.open_directory_failed": "Не удалось открыть каталог драйверов: {{detail}}", - "driver_manager.backend.error.create_directory_failed": "Не удалось создать каталог драйверов: {{detail}}", - "driver_manager.backend.error.remove_package_failed": "Не удалось удалить пакет драйвера: {{detail}}", - "driver_manager.backend.error.manifest_scheme_unsupported": "Неподдерживаемая схема URL манифеста драйверов: {{scheme}}", - "driver_manager.backend.error.manifest_fetch_failed": "Не удалось получить манифест драйверов: {{detail}}", - "driver_manager.backend.error.manifest_parse_failed": "Не удалось разобрать манифест драйверов: {{detail}}", - "driver_manager.backend.error.manifest_url_empty": "URL манифеста драйверов пуст", - "driver_manager.backend.error.manifest_too_large": "Манифест драйверов превышает ограничение размера", - "driver_manager.backend.error.local_manifest_url_invalid": "Недопустимый локальный URL манифеста драйверов", - "driver_manager.backend.error.file_manifest_url_invalid": "Недопустимый файловый URL манифеста драйверов", - "driver_manager.backend.error.driver_type_empty": "Тип драйвера пуст", - "driver_manager.backend.error.no_driver_versions": "Доступные версии драйвера не найдены", - "driver_manager.backend.error.module_path_empty": "Путь модуля пуст", - "driver_manager.backend.error.module_version_list_empty": "Список версий модуля пуст", - "driver_manager.backend.error.module_version_list_fetch_failed": "Не удалось получить список версий модуля: {{detail}}", - "driver_manager.backend.error.module_version_list_read_failed": "Не удалось прочитать список версий модуля: {{detail}}", - "driver_manager.backend.error.driver_version_list_fetch_failed": "Не удалось получить список версий драйвера: {{detail}}", - "driver_manager.backend.error.driver_version_list_parse_failed": "Не удалось разобрать список версий драйвера: {{detail}}", - "driver_manager.backend.error.cache_key_empty": "Cache key пуст", - "driver_manager.backend.error.release_empty": "Release пуст", - "driver_manager.backend.error.bundle_index_asset_missing": "Ресурс индекса комплекта драйверов не найден", - "driver_manager.backend.error.bundle_index_empty": "Индекс комплекта драйверов пуст", - "driver_manager.backend.error.bundle_index_fetch_failed": "Не удалось получить индекс комплекта драйверов: {{detail}}", - "driver_manager.backend.error.bundle_index_parse_failed": "Не удалось разобрать индекс комплекта драйверов: {{detail}}", - "driver_manager.backend.error.tag_empty": "Tag пуст", - "driver_manager.backend.error.api_url_empty": "API URL пуст", - "driver_manager.backend.error.release_info_fetch_failed": "Не удалось получить сведения Release: {{detail}}", - "driver_manager.backend.error.local_package_path_empty": "Путь локального пакета драйвера пуст", - "driver_manager.backend.error.local_directory_path_empty": "Путь локального каталога драйверов пуст", - "driver_manager.backend.error.file_path_empty": "Путь файла пуст", - "driver_manager.backend.error.download_url_empty": "Download URL пуст", - "driver_manager.backend.error.bundle_url_empty": "URL загрузки комплекта драйверов пуст", - "driver_manager.backend.error.read_local_package_failed": "Не удалось прочитать локальный пакет драйвера: {{detail}}", - "driver_manager.backend.error.read_local_directory_failed": "Не удалось прочитать локальный каталог драйверов: {{detail}}", - "driver_manager.backend.error.scan_local_directory_failed": "Не удалось просканировать локальный каталог драйверов: {{detail}}", - "driver_manager.backend.error.open_local_package_failed": "Не удалось открыть локальный пакет драйвера: {{detail}}", - "driver_manager.backend.error.read_local_package_entry_failed": "Не удалось прочитать запись локального пакета драйвера: {{detail}}", - "driver_manager.backend.error.download_failed": "Загрузка не удалась: {{detail}}", - "driver_manager.backend.error.bundle_download_failed": "Не удалось скачать комплект драйверов: {{detail}}", - "driver_manager.backend.error.open_bundle_failed": "Не удалось открыть комплект драйверов: {{detail}}", - "driver_manager.backend.error.read_bundle_entry_failed": "Не удалось прочитать запись комплекта драйверов: {{detail}}", - "driver_manager.backend.error.source_build_failed": "Локальная сборка из исходников не удалась: {{detail}}", - "driver_manager.backend.error.prebuilt_downloads_failed": "Не удалось скачать готовый пакет: {{detail}}", - "driver_manager.backend.status.built_in_available": "Встроенный драйвер готов к подключению", - "driver_manager.backend.status.optional_enabled": "Go-драйвер включен и готов к подключению", - "driver_manager.backend.status.installed_pending_with_version": "Драйвер установлен (версия: {{version}}) и ожидает активации", - "driver_manager.backend.status.installed_pending": "Драйвер установлен и ожидает активации", - "driver_manager.backend.status.optional_disabled_with_version": "Не включен (версия: {{version}})", - "driver_manager.backend.status.optional_disabled_generic": "Не включен", - "driver_manager.backend.status.needs_update": "Требуется переустановка, чтобы применить обновления драйвера.", - "driver_manager.backend.status.installed_revision": "установленная revision {{revision}}.", - "driver_manager.backend.status.expected_revision": "требуемая revision {{revision}}.", - "driver_manager.backend.status.affected_connections": "Затрагивает {{count}} сохраненных подключений", - "driver_manager.backend.status.unrecognized_driver_type": "Неизвестный тип источника данных", - "driver_manager.backend.status.slim_build_required": "{{name}} не входит в текущий slim build. Установите Full-версию, чтобы использовать этот драйвер.", - "driver_manager.backend.status.agent_path_failed": "Не удалось определить путь агента драйвера {{name}}. Переустановите и включите его в Driver Manager.", - "driver_manager.backend.status.agent_missing": "Агент драйвера {{name}} отсутствует. Переустановите и включите его в Driver Manager.", - "driver_manager.backend.status.optional_disabled": "Go-драйвер {{name}} не включен. Установите и включите его в Driver Manager.", - "driver_manager.backend.status.agent_unavailable_reinstall": "Агент драйвера {{name}} недоступен: {{detail}}. Переустановите и включите его в Driver Manager.", - "driver_manager.backend.status.agent_arch_incompatible_detail": "Архитектура агента драйвера {{name}} несовместима: файл={{file}}, текущий процесс={{process}}. Переустановите и включите его в Driver Manager.", - "driver_manager.backend.network.probe.github_driver_release": "Релизы драйверов GitHub", - "driver_manager.backend.network.probe.github_release_asset_domain": "Домен ресурсов GitHub Release", - "driver_manager.backend.network.probe.go_module_proxy": "Прокси модулей Go", - "driver_manager.backend.network.error.probe_url_empty": "URL проверки пуст", - "driver_manager.backend.network.error.probe_host_missing": "В URL проверки отсутствует хост", - "driver_manager.backend.network.summary.download_chain_unreachable": "GitHub API доступен, но цепочка загрузки драйверов недоступна. Сначала включите глобальный прокси GoNavi, разрешите github.com, api.github.com, release-assets.githubusercontent.com, objects.githubusercontent.com и raw.githubusercontent.com в правилах прокси, а если ошибка останется, рассмотрите режим TUN.", - "driver_manager.backend.progress.plan.source_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); эта версия разрешает только локальную сборку из исходников", - "driver_manager.backend.progress.plan.source_first": "Подготовка установки агента драйвера {{name}} (версия {{version}}); сначала локальная сборка из исходников, затем резервная загрузка", - "driver_manager.backend.progress.plan.direct_then_bundle": "Подготовка установки агента драйвера {{name}} (версия {{version}}); сначала {{direct}} прямых ссылок на готовую сборку, затем {{bundle}} источников комплектов драйверов", - "driver_manager.backend.progress.plan.explicit_direct": "Подготовка установки агента драйвера {{name}} (версия {{version}}); только явные ресурсы версии, пробуем {{direct}} прямых ссылок на готовую сборку", - "driver_manager.backend.progress.plan.direct_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); пробуем {{direct}} прямых ссылок на готовую сборку", - "driver_manager.backend.progress.plan.bundle_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); прямые ссылки на готовую сборку не указаны, пробуем {{bundle}} источников комплектов драйверов", - "driver_manager.backend.progress.plan.source_fallback": "Подготовка установки агента драйвера {{name}} (версия {{version}}); если ресурсы выпуска не совпадут, будет локальная сборка из исходников", - "driver_manager.backend.progress.fallback.direct_to_bundle": "Прямые ссылки на готовую сборку не подошли; переключаемся на комплект драйверов ({{name}}, осталось источников: {{bundle}})", - "driver_manager.backend.progress.fallback.explicit_skip_bundle": "Прямые ссылки на готовую сборку не подошли; разрешены только явные ресурсы, комплект драйверов пропускается ({{name}})", - "driver_manager.backend.progress.fallback.bundle_available": "Прямая ссылка недоступна; переключаемся на комплект драйверов ({{name}}, осталось источников: {{bundle}})", - "driver_manager.backend.progress.fallback.source_build": "Ресурсы выпуска не подошли; готовится резервная локальная сборка из исходников ({{name}})", - "data_sync.action.analyze_diff": "Анализировать различия", - "data_sync.action.cancel": "Отмена", - "data_sync.action.close": "Закрыть", - "data_sync.action.continue_sync": "Продолжить синхронизацию", - "data_sync.action.next": "Далее", - "data_sync.action.previous": "Назад", - "data_sync.action.start_sync": "Начать синхронизацию", - "data_sync.action.view": "Просмотреть", - "data_sync.compare_entry.action.return_to_compare": "Вернуться к сравнению", - "data_sync.compare_entry.alert.data": "Это режим сравнения данных: он только анализирует различия строк по первичному ключу и не выполняет запись.", - "data_sync.compare_entry.alert.schema": "Это режим сравнения структуры: он только анализирует различия схемы и формирует SQL для проверки, не применяя изменения.", - "data_sync.compare_entry.option.auto_add_columns": "Сформировать совместимый SQL изменений для отсутствующих столбцов целевой таблицы (только предпросмотр, без выполнения)", - "data_sync.compare_entry.option.source_dataset.query": "Сравнить по результату SQL", - "data_sync.compare_entry.option.source_dataset.table": "Сравнить по таблице", - "data_sync.compare_entry.preview.selection_hint": "Выбор строк влияет только на область предпросмотра SQL и не выполняет запись данных.", - "data_sync.compare_entry.preview.sql.data_help": "Предпросмотр SQL формируется по выбранным вставкам, обновлениям, удалениям и диапазонам строк только для проверки различий.", - "data_sync.compare_entry.preview.sql.schema_help": "Предпросмотр SQL показывает предлагаемые операторы различий структуры только для проверки.", - "data_sync.compare_entry.result.completed": "Сравнение завершено", - "data_sync.compare_entry.result.failed": "Сравнение не удалось", - "data_sync.compare_entry.result.running": "Идет сравнение", - "data_sync.compare_entry.result.running_description": "Текущий этап: {{stage}}{{table}}", - "data_sync.compare_entry.result.stage_fallback": "Выполняется", - "data_sync.compare_entry.result.success_summary": "Успешно сравнено таблиц: {{tables}}.", - "data_sync.compare_entry.result.table_suffix": ", таблица: {{table}}", - "data_sync.compare_entry.title.analysis_log": "Журнал анализа", - "data_sync.compare_entry.workflow_help": "Этот вход только анализирует различия и показывает предпросмотр. Он не синхронизирует, не создает таблицы, не добавляет столбцы и не удаляет данные.", - "data_sync.entry_mode.compare.action.start": "Начать сравнение", - "data_sync.entry_mode.compare.option_title": "Параметры сравнения", - "data_sync.entry_mode.compare.result_title": "Результат сравнения", - "data_sync.entry_mode.data_compare.badge": "Сравнение данных", - "data_sync.entry_mode.data_compare.description": "Сравнивает данные исходной и целевой таблиц по первичному ключу и показывает вставки, обновления и удаления.", - "data_sync.entry_mode.data_compare.hero_description": "Подходит для проверки согласованности данных. Выполняет только анализ различий и построчный предпросмотр без записи.", - "data_sync.entry_mode.data_compare.table_select_label": "Выберите таблицы для сравнения данных:", - "data_sync.entry_mode.data_compare.title": "Сравнение данных", - "data_sync.entry_mode.schema_compare.badge": "Сравнение структуры", - "data_sync.entry_mode.schema_compare.description": "Формирует различия структуры, риски совместимости и SQL для проверки между исходной и целевой таблицами.", - "data_sync.entry_mode.schema_compare.hero_description": "Подходит для проверки различий структуры перед выпуском. Выполняет только анализ и предпросмотр без применения изменений структуры.", - "data_sync.entry_mode.schema_compare.table_select_label": "Выберите таблицы для сравнения структуры:", - "data_sync.entry_mode.schema_compare.title": "Сравнение структуры таблиц", - "data_sync.entry_mode.sync.hero_description": "Подходит, когда целевые таблицы уже существуют. Сначала анализируйте различия, затем выполняйте выбранные вставки, обновления или удаления.", - "data_sync.alert.auto_create_scope": "Автоматическое создание таблиц сейчас поддерживает только MySQL в Kingbase. Переносятся столбцы, первичные ключи, обычные индексы, уникальные индексы и составные индексы; полнотекстовые, пространственные, префиксные и функциональные индексы явно пропускаются.", - "data_sync.alert.auto_create_planner_scope": "Автоматическое создание таблиц сейчас поддерживает только MySQL в Kingbase. Переносятся столбцы, первичные ключи, обычные индексы, уникальные индексы и составные индексы; полнотекстовые, пространственные, префиксные и функциональные индексы явно пропускаются.", - "data_sync.alert.existing_target_only": "Синхронизация данных по умолчанию выполняется с существующими целевыми таблицами. Переключитесь на межбазовую миграцию, если нужны создание таблиц и импорт.", - "data_sync.alert.full_overwrite": "Полная перезапись очищает данные целевых таблиц. Используйте ее осторожно.", - "data_sync.alert.migration_mode": "Активна межбазовая миграция. Используйте ее для переноса таблиц в другой источник данных с автоматическим созданием и импортом.", - "data_sync.alert.query_mode": "Синхронизация результата SQL сейчас поддерживает пользовательский SQL источника в одну существующую целевую таблицу. Результат запроса должен содержать столбец первичного ключа целевой таблицы.", - "data_sync.alert.sync_mode": "Активна синхронизация данных. Используйте ее для инкрементальной синхронизации или импорта с перезаписью, когда целевые таблицы уже существуют.", - "data_sync.badge.migration_mode": "Режим миграции", - "data_sync.badge.source_pending": "Источник не выбран", - "data_sync.badge.source_selected": "Источник выбран", - "data_sync.badge.sync_mode": "Режим синхронизации", - "data_sync.badge.table_count": "{{count}} табл.", - "data_sync.backend.error.restore_source_secret_failed": "Не удалось восстановить секрет подключения к исходной базе данных: {{detail}}", - "data_sync.backend.error.restore_target_secret_failed": "Не удалось восстановить секрет подключения к целевой базе данных: {{detail}}", - "data_sync.backend.error.connect_source_failed": "Не удалось подключиться к исходной базе данных: {{detail}}", - "data_sync.backend.error.connect_target_failed": "Не удалось подключиться к целевой базе данных: {{detail}}", - "data_sync.backend.error.init_source_driver_failed": "Не удалось инициализировать драйвер исходной базы данных: {{detail}}", - "data_sync.backend.error.init_target_driver_failed": "Не удалось инициализировать драйвер целевой базы данных: {{detail}}", - "data_sync.backend.error.preview_composite_pk_unsupported": "Составной первичный ключ ({{columns}}) не поддерживается для предпросмотра данных", - "data_sync.backend.error.preview_pk_required": "Нет первичного ключа, предпросмотр данных не поддерживается", - "data_sync.backend.error.target_pk_required_for_query_diff": "В целевой таблице нет первичного ключа, поэтому анализ различий SQL-набора результатов не поддерживается", - "data_sync.backend.result.analyzed_tables": "Анализ различий завершен для {{count}} таблиц", - "data_sync.backend.result.analyzed_target_tables": "Анализ различий завершен для {{count}} целевых таблиц", - "data_sync.backend.summary.diff_completed": "Анализ различий завершен", - "data_sync.backend.summary.source_query_diff_completed": "Анализ различий SQL-набора результатов завершен", - "data_sync.backend.validation.query_mode_data_only": "Синхронизация SQL-набора результатов сейчас поддерживает только синхронизацию данных", - "data_sync.backend.validation.single_target_table_required": "Для синхронизации SQL-набора результатов требуется ровно одна целевая таблица", - "data_sync.backend.validation.source_query_required": "SQL исходного запроса обязателен", - "data_sync.backend.validation.target_table_required": "Целевая таблица обязательна", - "data_sync.backend.warning.index_columns_missing": "У индекса {{name}} нет определения столбцов, он пропущен", - "data_sync.backend.warning.index_prefix_length_unsupported": "Индекс {{name}} использует длину префикса и пока не может быть автоматически мигрирован", - "data_sync.backend.warning.index_type_unsupported": "Индекс {{name}}, тип={{type}}, пока не может быть автоматически мигрирован", - "data_sync.confirm.full_overwrite.content": "Полная перезапись сначала очищает целевую таблицу, а затем вставляет строки. Подтвердите, что целевая база данных сохранена в резервной копии.", - "data_sync.confirm.full_overwrite.ok": "Продолжить", - "data_sync.confirm.full_overwrite.title": "Подтвердите полную перезапись", - "data_sync.modal.full_overwrite_title": "Подтвердите полную перезапись", - "data_sync.modal.full_overwrite_content": "Полная перезапись сначала очищает целевую таблицу, а затем вставляет строки. Подтвердите, что целевая база данных сохранена в резервной копии.", - "data_sync.modal.full_overwrite_ok": "Продолжить", - "data_sync.diff.column.delete": "Удаление", - "data_sync.diff.column.insert": "Вставка", - "data_sync.diff.column.plan": "План", - "data_sync.diff.column.preview": "Предпросмотр", - "data_sync.diff.column.risk": "Риск", - "data_sync.diff.column.same": "Совпадает", - "data_sync.diff.column.table": "Таблица", - "data_sync.diff.column.target_table": "Целевая таблица", - "data_sync.diff.column.update": "Обновление", - "data_sync.diff.more_warnings": "Еще {{count}} не показано", - "data_sync.diff.target_exists": "Есть", - "data_sync.diff.target_missing": "Нет", - "data_sync.diff.title": "Результат сравнения", - "data_sync.diff.warning_title": "Предварительная проверка нашла риски или понижение возможностей. Проверьте их перед выполнением.", - "data_sync.message.precheck_warnings": "Предварительная проверка нашла риски или понижение возможностей. Проверьте их перед выполнением.", - "data_sync.message.more_items_collapsed": "Еще {{count}} не показано", - "data_sync.table.table_name": "Таблица", - "data_sync.table.target_table": "Целевая таблица", - "data_sync.table.target_exists": "Есть", - "data_sync.table.target_missing": "Нет", - "data_sync.table.plan": "План", - "data_sync.table.insert": "Вставка", - "data_sync.table.update": "Обновление", - "data_sync.table.delete": "Удаление", - "data_sync.table.same": "Совпадает", - "data_sync.table.risk": "Риск", - "data_sync.table.preview": "Предпросмотр", - "data_sync.title.compare_result": "Результат сравнения", - "data_sync.field.connection": "Подключение", - "data_sync.field.database": "База данных", - "data_sync.field.migration_content": "Содержимое миграции", - "data_sync.field.migration_mode": "Режим миграции", - "data_sync.field.mongo_collection_name": "Имя коллекции Mongo (необязательно)", - "data_sync.field.source_dataset_mode": "Способ данных источника", - "data_sync.field.source_query_sql": "SQL-запрос источника", - "data_sync.field.sync_content": "Содержимое синхронизации", - "data_sync.field.sync_mode": "Режим синхронизации", - "data_sync.field.target_table": "Целевая таблица", - "data_sync.field.target_table_requirement": "Требование к целевой таблице", - "data_sync.field.target_table_strategy": "Стратегия целевой таблицы", - "data_sync.field.workflow_type": "Тип операции", - "data_sync.help.mongo_collection_mongo_to_redis": "Для MongoDB в Redis обычно достаточно выбрать исходную коллекцию. Оставьте поле пустым, если явное резервное имя коллекции не требуется.", - "data_sync.help.mongo_collection_redis_to_mongo": "Оставьте пустым, чтобы использовать имя коллекции по умолчанию. Если поле заполнено, этот запуск запишет пространство ключей Redis в указанную коллекцию Mongo.", - "data_sync.help.workflow_type": "Выберите, синхронизирует ли этот запуск существующие целевые таблицы или выполняет межбазовую миграцию. Страница подстроит более безопасные значения по умолчанию под тип операции.", - "data_sync.help.select_tables": "Выберите таблицы для синхронизации:", - "data_sync.help.source_query_mode": "Введите SQL-запрос источника и выберите одну целевую таблицу. Анализ различий напрямую сравнит этот результат с целевой таблицей.", - "data_sync.hero.migration_description": "Перенос исходных таблиц в другую базу данных с созданием таблиц по стратегии, импортом данных и добавлением совместимых индексов.", - "data_sync.hero.migration_title": "Миграция между источниками данных", - "data_sync.hero.sync_description": "Используйте существующие целевые таблицы, сначала сравните различия, затем выполните выбранные вставки, обновления или удаления.", - "data_sync.hero.sync_title": "Синхронизация данных", - "data_sync.log.level.error": "Ошибка", - "data_sync.log.level.info": "Информация", - "data_sync.log.level.warn": "Предупреждение", - "data_sync.log.title": "Журнал выполнения", - "data_sync.message.analysis_complete": "Анализ различий завершен", - "data_sync.message.analysis_failed": "Анализ различий не выполнен", - "data_sync.message.analysis_failed_detail": "Анализ различий не выполнен: {{detail}}", - "data_sync.message.analyze_before_sync": "Перед запуском синхронизации проанализируйте различия", - "data_sync.message.close_blocked_running": "Синхронизация выполняется. Окно пока нельзя закрыть.", - "data_sync.message.fetch_source_databases_failed": "Не удалось получить базы данных источника", - "data_sync.message.fetch_source_databases_failed_detail": "Не удалось получить базы данных источника: {{detail}}", - "data_sync.message.fetch_tables_failed": "Не удалось получить таблицы", - "data_sync.message.fetch_tables_failed_detail": "Не удалось получить таблицы: {{detail}}", - "data_sync.message.fetch_target_databases_failed": "Не удалось получить целевые базы данных", - "data_sync.message.fetch_target_databases_failed_detail": "Не удалось получить целевые базы данных: {{detail}}", - "data_sync.message.preview_load_failed": "Не удалось загрузить предпросмотр различий", - "data_sync.message.preview_load_failed_detail": "Не удалось загрузить предпросмотр различий: {{detail}}", - "data_sync.message.select_connections_first": "Сначала выберите подключения", - "data_sync.message.select_databases_first": "Сначала выберите базы данных", - "data_sync.message.select_source_database": "Выберите базу данных источника", - "data_sync.message.select_target_database": "Выберите целевую базу данных", - "data_sync.message.sync_execution_failed": "Не удалось выполнить синхронизацию", - "data_sync.message.sync_execution_failed_detail": "Не удалось выполнить синхронизацию: {{detail}}", - "data_sync.option.auto_add_columns": "Автоматически добавить недостающие целевые столбцы (сейчас поддерживаются цели MySQL и MySQL в Kingbase; режим результата SQL не поддерживается)", - "data_sync.option.content.both": "Синхронизировать схему и данные", - "data_sync.option.content.data": "Только данные", - "data_sync.option.content.schema": "Только схема", - "data_sync.option.create_indexes": "Автоматически переносить совместимые обычные и уникальные индексы (только при автоматическом создании таблиц)", - "data_sync.option.source_dataset.query": "Синхронизация по результату SQL", - "data_sync.option.source_dataset.table": "Синхронизация по таблицам", - "data_sync.option.show_same_tables": "Показывать совпадающие таблицы", - "data_sync.option.sync_mode.full_overwrite": "Полная перезапись (очистить целевую таблицу перед вставкой)", - "data_sync.option.sync_mode.insert_only": "Только вставка (без сравнения с целью; таблицы без первичных ключей пропускаются)", - "data_sync.option.sync_mode.insert_update": "Инкрементальная синхронизация (сравнить различия, затем выбрать вставки, обновления и удаления)", - "data_sync.option.target_strategy.auto_create_if_missing": "Автоматически создать целевую таблицу, если она отсутствует", - "data_sync.option.target_strategy.existing_only": "Использовать только существующие целевые таблицы", - "data_sync.option.target_strategy.smart": "Умный режим (если есть, импортировать напрямую; если нет, создать автоматически)", - "data_sync.option.workflow.migration": "Межбазовая миграция (автоматическое создание и импорт)", - "data_sync.option.workflow.sync": "Синхронизация данных (сравнение и синхронизация с существующими целевыми таблицами)", - "data_sync.placeholder.mongo_collection_name": "Введите имя коллекции Mongo", - "data_sync.placeholder.source_query_sql": "Пример: SELECT id, name, email FROM users WHERE status = 'active'", - "data_sync.placeholder.target_table": "Выберите одну целевую таблицу", - "data_sync.preview.action.copy_sql": "Копировать SQL", - "data_sync.preview.column.changed_columns": "Измененные столбцы", - "data_sync.preview.column.data": "Данные", - "data_sync.preview.column.detail": "Подробности", - "data_sync.preview.column.primary_key": "Первичный ключ", - "data_sync.preview.data_summary": "Вставка {{inserts}}, обновление {{updates}}, удаление {{deletes}} (предпросмотр показывает до 200 строк на тип)", - "data_sync.preview.delete_warning": "Удаление по умолчанию не выбрано. Включайте его только после проверки влияния на бизнес.", - "data_sync.preview.loading": "Загрузка предпросмотра различий...", - "data_sync.preview.message.copy_failed": "Не удалось скопировать. Скопируйте вручную.", - "data_sync.preview.message.sql_copied": "SQL скопирован", - "data_sync.preview.schema_plan_help": "Ниже показаны операторы, запланированные для этого запуска синхронизации схемы.", - "data_sync.preview.schema_statement_count": "Обнаружено операторов изменения схемы: {{count}}", - "data_sync.preview.schema_warning_title": "Предпросмотр схемы содержит риски или понижение возможностей", - "data_sync.preview.selection_hint.delete": "Если строки не выбраны, будут синхронизированы все различия удаления. Снимите Удаление в результате сравнения, чтобы пропустить удаления.", - "data_sync.preview.selection_hint.insert": "Если строки не выбраны, будут синхронизированы все различия вставки. Снимите Вставку в результате сравнения, чтобы пропустить вставки.", - "data_sync.preview.selection_hint.update": "Если строки не выбраны, будут синхронизированы все различия обновления. Снимите Обновление в результате сравнения, чтобы пропустить обновления.", - "data_sync.preview.side.source": "Источник", - "data_sync.preview.side.target": "Цель", - "data_sync.preview.sql.data_help": "Предпросмотр SQL создается из выбранных вставок, обновлений, удалений и диапазона строк для проверки.", - "data_sync.preview.sql.no_data_sql": "-- Для текущего выбора нет SQL для предпросмотра", - "data_sync.preview.sql.no_schema_changes": "-- Для текущей таблицы нет исполняемых изменений схемы", - "data_sync.preview.sql.schema_help": "Предпросмотр SQL показывает операторы изменения схемы, которые будут выполнены, для проверки.", - "data_sync.preview.sql.schema_statement_count": "Операторов изменения схемы: {{count}}", - "data_sync.preview.sql.statement_count": "Операторов: {{count}} (предпросмотр данных показывает до 200 строк на тип)", - "data_sync.preview.tab.delete": "Удаление({{count}})", - "data_sync.preview.tab.insert": "Вставка({{count}})", - "data_sync.preview.tab.schema": "Схема({{count}})", - "data_sync.preview.tab.sql": "SQL({{count}})", - "data_sync.preview.tab.update": "Обновление({{count}})", - "data_sync.preview.title": "Предпросмотр различий: {{table}}", - "data_sync.preview.update_detail_title": "Подробности обновления: {{table}} / {{pk}}", - "data_sync.plan.use_existing_target": "Импорт в существующую целевую таблицу", - "data_sync.plan.target_missing_manual_create": "Целевая таблица отсутствует; сначала создайте ее вручную", - "data_sync.plan.target_missing_auto_create": "Целевая таблица отсутствует; она будет автоматически создана перед импортом", - "data_sync.plan.target_missing_cannot_sync": "Целевая таблица отсутствует; синхронизацию выполнить нельзя", - "data_sync.plan.target_missing_auto_create_all": "Целевая таблица отсутствует; при выполнении она будет автоматически создана, затем будут импортированы все исходные данные", - "data_sync.plan.schema_changes_detected": "Обнаружено структурных изменений: {{count}}", - "data_sync.plan.add_missing_columns_before_import": "Дополнить отсутствующие поля перед импортом: {{count}}", - "data_sync.plan.missing_columns_no_executable_sql": "В целевой таблице отсутствуют поля: {{count}}, но исполняемый SQL для дополнения не создан", - "data_sync.plan.missing_columns_auto_add_unsupported": "В целевой таблице отсутствуют поля: {{count}}, и автоматическое дополнение не поддерживается для этой пары баз данных", - "data_sync.plan.missing_columns_auto_add_disabled": "В целевой таблице отсутствуют поля: {{count}}, и автоматическое дополнение не включено", - "data_sync.plan.schema_only_no_data_diff": "Синхронизируется только структура; анализ различий данных не выполнялся", - "data_sync.plan.schema_only": "Синхронизация только структуры", - "data_sync.plan.schema_preview": "Предпросмотр структуры", - "data_sync.plan.schema_aligned": "Структура таблицы уже совпадает", - "data_sync.plan.auto_create_unsupported": "Автоматическое создание таблиц не поддерживается для этой пары баз данных", - "data_sync.plan.tdengine_time_column_missing": "В исходной таблице не найден столбец времени, который можно сопоставить с первым столбцом TDengine; автоматическое создание таблицы невозможно", - "data_sync.plan.use_existing_target_collection": "Импорт в существующую целевую коллекцию", - "data_sync.plan.target_collection_missing_manual_create": "Целевая коллекция отсутствует; сначала создайте ее вручную", - "data_sync.plan.target_collection_missing_auto_create": "Целевая коллекция отсутствует; она будет автоматически создана перед импортом", - "data_sync.plan.redis_key_to_mongodb_document": "Создать документы MongoDB из Redis Keys и импортировать их", - "data_sync.plan.migrate_to_collection": "Миграция в коллекцию {{collection}}", - "data_sync.plan.migrate_to_target": "Миграция в {{target}}", - "data_sync.plan.source_query_preview": "Предпросмотр синхронизации SQL-результата", - "data_sync.plan.migration_kernel_planning": "Эта пара баз данных перешла в этап планирования миграции и ожидает вывода структуры и генерации целевого диалекта", - "data_sync.plan.backend_summary": "Сводка плана", - "data_sync.progress.stage.analysis_started": "Начат анализ различий", - "data_sync.progress.stage.analysis_completed": "Анализ различий завершен", - "data_sync.progress.stage.sync_started": "Синхронизация начата", - "data_sync.progress.stage.connecting_source": "Подключение к исходной базе данных", - "data_sync.progress.stage.connecting_target": "Подключение к целевой базе данных", - "data_sync.progress.stage.analyzing_table": "Анализ таблицы ({{current}}/{{total}})", - "data_sync.progress.stage.syncing_table": "Синхронизация таблицы ({{current}}/{{total}})", - "data_sync.progress.stage.table_completed": "Обработка таблицы завершена", - "data_sync.progress.stage.creating_target_table": "Создание целевой таблицы", - "data_sync.progress.stage.syncing_schema": "Синхронизация структуры таблицы", - "data_sync.progress.stage.creating_indexes": "Создание индексов", - "data_sync.progress.stage.reading_source": "Чтение данных исходной таблицы", - "data_sync.progress.stage.reading_target": "Чтение данных целевой таблицы", - "data_sync.progress.stage.comparing_diff": "Сравнение различий", - "data_sync.progress.stage.clearing_target": "Очистка целевой таблицы", - "data_sync.progress.stage.checking_columns": "Проверка согласованности полей", - "data_sync.progress.stage.applying_changes": "Применение изменений", - "data_sync.progress.stage.completed": "Синхронизация завершена", - "data_sync.progress.stage.failed": "Синхронизация не удалась", - "data_sync.progress.stage.redis_keyspace_started": "Начата миграция пространства ключей Redis", - "data_sync.progress.stage.creating_target_collection": "Создание целевой коллекции", - "data_sync.progress.stage.migrating_key": "Миграция Key ({{current}}/{{total}})", - "data_sync.progress.stage.mongodb_keyspace_started": "Начата миграция пространства ключей MongoDB", - "data_sync.progress.stage.migrating_collection": "Миграция коллекции ({{current}}/{{total}})", - "data_sync.progress.stage.collection_completed": "Обработка коллекции завершена", - "data_sync.progress.stage.backend_update": "Обработка обновления прогресса", - "data_sync.progress.stage.analyzing_diff": "Анализ различий", - "data_sync.progress.stage.executing": "Выполнение", - "data_sync.progress.stage.preparing": "Подготовка", - "data_sync.query_mode.help": "Введите SQL-запрос источника и выберите одну целевую таблицу. Анализ различий напрямую сравнит этот результат с целевой таблицей.", - "data_sync.result.completed": "Синхронизация завершена", - "data_sync.result.failed": "Синхронизация не выполнена", - "data_sync.result.failed_description": "Синхронизация не завершилась.", - "data_sync.result.failed_detail": "Синхронизация не выполнена: {{detail}}", - "data_sync.result.running": "Синхронизация выполняется", - "data_sync.result.running_description": "Текущий этап: {{stage}}{{table}}", - "data_sync.result.success_summary": "Успешно синхронизировано таблиц: {{tables}}. Вставлено: {{inserted}}, обновлено: {{updated}}", - "data_sync.result.table_suffix": ", таблица: {{table}}", - "data_sync.section.migration_options": "Параметры миграции", - "data_sync.section.source_database": "База данных источника", - "data_sync.section.sync_options": "Параметры синхронизации", - "data_sync.section.target_database": "Целевая база данных", - "data_sync.title.source_database": "База данных источника", - "data_sync.title.target_database": "Целевая база данных", - "data_sync.title.migration_options": "Параметры миграции", - "data_sync.title.sync_options": "Параметры синхронизации", - "data_sync.title.execution_log": "Журнал выполнения", - "data_sync.step.configure": "Настроить источник и цель", - "data_sync.step.result": "Результат выполнения", - "data_sync.step.select_tables": "Выбрать таблицы", - "data_sync.table_picker.help": "Выберите таблицы для синхронизации:", - "data_sync.table_picker.item_unit": "элемент", - "data_sync.table_picker.items_unit": "элементы", - "data_sync.table_picker.not_found": "Нет данных", - "data_sync.table_picker.search_placeholder": "Поиск таблиц...", - "data_sync.table_picker.selected_title": "Выбранные таблицы", - "data_sync.table_picker.show_same": "Показывать совпадающие таблицы", - "data_sync.table_picker.source_title": "Таблицы источника", - "data_sync.transfer.source_tables": "???????? ???????", - "data_sync.transfer.selected_tables": "Выбранные таблицы", - "data_sync.transfer.item_unit": "элемент", - "data_sync.transfer.items_unit": "элементы", - "data_sync.transfer.search_placeholder": "Поиск таблиц...", - "data_sync.transfer.empty": "Нет данных", - "data_sync.title.migration_description": "Создание таблиц, импорт данных и предварительная проверка рисков от источника до цели.", - "data_sync.title.migration_workbench": "Рабочая область межбазовой миграции", - "data_sync.title.sync_description": "Сравнение различий, запуск синхронизации и подтверждение результатов с существующими целевыми таблицами.", - "data_sync.title.sync_workbench": "Рабочая область синхронизации данных", - "data_sync.title.migration": "Миграция между источниками данных", - "data_sync.title.sync": "Синхронизация данных", - "data_sync.validation.query_mode_data_only": "Синхронизация результата SQL поддерживает только синхронизацию данных", - "data_sync.validation.single_target_table_required": "Для синхронизации результата SQL нужна ровно одна целевая таблица", - "data_sync.validation.source_query_required": "Введите SQL-запрос источника", - "data_sync.validation.table_required": "Выберите хотя бы одну таблицу", - "data_sync.plan.use_existing_target_table": "Импорт в существующую целевую таблицу", - "data_sync.plan.missing_columns_auto_add": "Дополнить отсутствующие поля перед импортом: {{count}}", - "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "В исходной таблице не найден столбец времени, который можно сопоставить с первым столбцом TDengine; автоматическое создание таблицы невозможно", - "data_sync.plan.redis_mongo_keyspace_import": "Создать документы MongoDB из Redis Keys и импортировать их", - "data_sync.plan.redis_mongo_target_collection_missing_manual": "Целевая коллекция отсутствует; сначала создайте ее вручную", - "data_sync.plan.redis_mongo_target_collection_auto_create": "Целевая коллекция отсутствует; она будет автоматически создана перед импортом", - "data_sync.backend.summary.redis_mongo_planned_action": "Миграция в коллекцию {{collection}}", - "data_sync.backend.summary.mongo_redis_planned_action": "Миграция в {{target}}", - "data_sync.plan.mongo_relational_kernel_planned": "Эта пара баз данных перешла в этап планирования миграции и ожидает вывода структуры и генерации целевого диалекта", - "data_sync.progress.stage.redis_mongo_creating_collection": "Создание целевой коллекции", - "data_sync.progress.stage.redis_mongo_migrating_key": "Миграция Key ({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_migrating_collection": "Миграция коллекции ({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_collection_completed": "Обработка коллекции завершена", - "data_sync.backend.error.apply_changes_unsupported": "Целевой драйвер не поддерживает применение изменений данных", - "data_sync.backend.error.apply_source_query_changes_failed": "Не удалось применить изменения набора результатов SQL: {{detail}}", - "data_sync.backend.error.clear_target_failed": "Не удалось очистить целевую таблицу: {{detail}}", - "data_sync.backend.error.connect_source_mongodb_failed": "Не удалось подключиться к исходной MongoDB: {{detail}}", - "data_sync.backend.error.connect_source_redis_failed": "Не удалось подключиться к исходному Redis: {{detail}}", - "data_sync.backend.error.connect_target_mongodb_failed": "Не удалось подключиться к целевой MongoDB: {{detail}}", - "data_sync.backend.error.connect_target_redis_failed": "Не удалось подключиться к целевому Redis: {{detail}}", - "data_sync.backend.error.diff_composite_pk_unsupported": "Составной первичный ключ ({{columns}}) не поддерживается для синхронизации с сравнением различий", - "data_sync.backend.error.diff_pk_required": "Первичный ключ отсутствует. Синхронизация с сравнением различий не поддерживается; для прямого импорта используйте режим insert-only или full-overwrite.", - "data_sync.backend.error.execute_source_query_failed": "Не удалось выполнить исходный запрос: {{detail}}", - "data_sync.backend.error.init_source_mongodb_driver_failed": "Не удалось инициализировать драйвер исходной MongoDB: {{detail}}", - "data_sync.backend.error.init_target_mongodb_driver_failed": "Не удалось инициализировать драйвер целевой MongoDB: {{detail}}", - "data_sync.backend.error.inspect_mongodb_collection_failed": "Не удалось проверить целевую MongoDB collection: {{detail}}", - "data_sync.backend.error.list_mongodb_collections_failed": "Не удалось получить список MongoDB collection: {{detail}}", - "data_sync.backend.error.load_target_columns_failed": "Не удалось загрузить столбцы целевой таблицы: {{detail}}", - "data_sync.backend.error.mongo_document_write_unsupported": "Целевой драйвер не поддерживает запись MongoDB document", - "data_sync.backend.error.mongo_redis_analyze_collection_failed": "Не удалось проанализировать MongoDB collection {{collection}}: {{detail}}", - "data_sync.backend.error.mongo_redis_document_key_missing": "В MongoDB document отсутствует поле key", - "data_sync.backend.error.mongo_redis_document_type_missing": "В MongoDB document для Redis Key {{key}} отсутствует поле {{field}}", - "data_sync.backend.error.mongo_redis_empty_target_value": "Целевое значение Redis Key {{key}} пустое", - "data_sync.backend.error.mongo_redis_unsupported_type": "Redis Key {{key}} не поддерживает тип {{type}}", - "data_sync.backend.error.mongo_redis_value_invalid": "У Redis Key {{key}} недопустимый {{type}} payload; фактический тип={{actual}}", - "data_sync.backend.error.mongo_redis_write_key_failed": "Не удалось записать Redis Key {{key}}: {{detail}}", - "data_sync.backend.error.read_redis_key_failed": "Не удалось прочитать Redis Key {{key}}: {{detail}}", - "data_sync.backend.error.read_source_table_failed": "Не удалось прочитать исходную таблицу: {{detail}}", - "data_sync.backend.error.read_target_redis_key_failed": "Не удалось прочитать целевой Redis Key {{key}}: {{detail}}", - "data_sync.backend.error.read_target_table_failed": "Не удалось прочитать целевую таблицу: {{detail}}", - "data_sync.backend.error.redis_mongo_analyze_changes_failed": "Не удалось проанализировать изменения миграции Redis: {{detail}}", - "data_sync.backend.error.redis_mongo_apply_changes_failed": "Не удалось применить изменения миграции Redis: {{detail}}", - "data_sync.backend.error.redis_mongo_build_changes_failed": "Не удалось построить изменения миграции Redis: {{detail}}", - "data_sync.backend.error.redis_mongo_create_collection_failed": "Не удалось создать целевую MongoDB collection: {{detail}}", - "data_sync.backend.error.scan_redis_keys_failed": "Не удалось просканировать Redis Key: {{detail}}", - "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "Целевая таблица имеет составной первичный ключ ({{columns}}), поэтому анализ различий набора результатов SQL не поддерживается", - "data_sync.backend.error.target_table_columns_missing": "Целевая таблица {{table}} отсутствует или ее определения столбцов не удалось прочитать", - "data_sync.backend.result.mongo_redis_analyzed_collections": "Проанализировано {{count}} MongoDB collection для миграции в Redis", - "data_sync.backend.result.mongo_redis_completed": "Миграция MongoDB keyspace завершена; обработано collection: {{collections}}, Redis Key: {{keys}}", - "data_sync.backend.result.mongo_redis_no_collections": "Нет MongoDB collection, доступных для миграции", - "data_sync.backend.result.mongo_redis_no_documents": "Нет MongoDB Redis document, доступных для миграции", - "data_sync.backend.result.redis_mongo_analyzed_keys": "Проанализировано {{count}} Redis Key для миграции в MongoDB", - "data_sync.backend.result.redis_mongo_completed": "Миграция Redis keyspace завершена; обработано Redis Key: {{count}}", - "data_sync.backend.result.redis_mongo_no_keys": "Нет Redis Key, доступных для миграции", - "data_sync.backend.summary.mongo_redis_diff": "При выполнении будет вставлено {{inserts}} Redis Key и обновлено {{updates}} Redis Key", - "data_sync.backend.summary.mongo_redis_empty_collection": "В collection не найдены document, пригодные для миграции", - "data_sync.backend.summary.mongo_redis_same_keys": "Соответствующие Redis Key уже актуальны", - "data_sync.backend.summary.mongo_redis_warning_document_format": "Поддерживаются только document с полями key/type/ttl/value", - "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB -> Redis понижает полную перезапись до инкрементальной синхронизации, чтобы не удалять другие Redis Key в DB", - "data_sync.backend.summary.mongo_redis_warning_keyspace": "Document в MongoDB collection будут записаны в Redis по семантике keyspace", - "data_sync.backend.summary.redis_mongo_insert_document": "При выполнении будет вставлен новый MongoDB document", - "data_sync.backend.summary.redis_mongo_same_document": "Соответствующий MongoDB document уже актуален", - "data_sync.backend.summary.redis_mongo_update_document": "При выполнении будет обновлен существующий MongoDB document", - "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key будет записан как MongoDB document", - "data_sync.plan.data_import_without_diff": "Текущий режим импортирует данные исходной таблицы без сравнения различий.", - "data_sync.plan.mongo_relational_entry_warning": "Для миграции {{objectKind}} из {{sourceType}} в {{targetType}} сейчас доступно только уведомление о планировании вывода структуры", - "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis -> MongoDB мигрирует по семантике keyspace и не выполняет проверку структуры таблиц", - "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Семантика Redis TTL и порядка collection сохраняется как поля document, но может быть не полностью эквивалентной", - "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "Текущая стратегия требует существующую целевую MongoDB collection; при выполнении она не будет создана автоматически", - "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state пока не мигрируются", - "data_sync.plan.target_missing_preview_unavailable": "Целевая таблица отсутствует. Предпросмотр различий недоступен.", - "data_sync.progress.stage.redis_mongo_started": "Миграция Redis -> MongoDB keyspace начата", - "data_sync.progress.stage.mongo_redis_started": "Миграция MongoDB -> Redis keyspace начата", - "data_sync.schema_inference.mongo_relational_issue": "Вывод структуры для {{sourceType}} -> {{targetType}} все еще в разработке; сейчас доступно только уведомление о планировании миграции.", - "data_sync.schema_inference.mongo_relational_resolution": "В следующих итерациях определения столбцов и политики деградации типов будут создаваться по выборочным данным.", - "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "Семантика ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view пока не мигрируется автоматически в цели PG-like", - "data_sync.backend.warning.auto_create_pair_unsupported": "Автоматическое создание таблиц сейчас поддерживает только MySQL -> Kingbase; текущая пара={{sourceType}} -> {{targetType}}", - "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "Столбец {{column}} типа {{type}} деградирован до json", - "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "Столбец {{column}} типа {{type}} деградирован до jsonb", - "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "Столбец {{column}} enum типа {{type}} деградирован до varchar(255)", - "data_sync.backend.warning.clickhouse_order_by_tuple_used": "Первичный ключ источника не обнаружен, поэтому ClickHouse будет использовать ORDER BY tuple(); производительность запросов может снизиться", - "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse не сохраняет семантику реляционных внешних ключей или уникальных ограничений; мигрируются только столбцы и данные", - "data_sync.backend.warning.clickhouse_source_metadata_limited": "Метаданные индексов и ограничений источника ClickHouse ограничены; обратная миграция фокусируется на столбцах и данных", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "Источник ClickHouse не вернул сведения о первичном ключе, поэтому целевая таблица MySQL не создаст первичный ключ автоматически", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "Источник ClickHouse не вернул сведения о первичном ключе, поэтому целевая таблица PG-like не создаст первичный ключ автоматически", - "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "Для целей ClickHouse рекомендуется insert-only или полная перезапись; семантика update/delete отличается от традиционных реляционных баз данных", - "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления MySQL; он деградирован до text", - "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления PG-like; он деградирован до text", - "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "Столбец {{column}} типа {{type}} сопоставлен с numeric(20,0), чтобы избежать переполнения unsigned", - "data_sync.backend.warning.column_type_degraded_clickhouse_string": "Столбец {{column}} типа {{type}} деградирован до String", - "data_sync.backend.warning.column_type_empty_clickhouse_string": "Тип столбца {{column}} пуст и деградирован до String", - "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "Столбец {{column}} является пользовательским типом и деградирован до String", - "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "AUTO_INCREMENT столбца {{column}} не сохраняется в ClickHouse как семантика автоинкремента", - "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "Бинарный тип столбца {{column}} деградирован до String", - "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "Столбец {{column}} типа {{type}} деградирован до String", - "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления ClickHouse; он деградирован до String", - "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "Семантика identity/auto-increment столбца {{column}} не сохраняется в ClickHouse", - "data_sync.backend.warning.target_existing_only_required": "Текущая стратегия требует существующую целевую таблицу, поэтому при выполнении она не будет создана автоматически.", - "data_sync.backend.warning.target_exists_data_only_no_indexes": "Целевая таблица уже существует. Будет выполнен только импорт данных; существующие индексы и ограничения не будут автоматически перестроены.", - "data_sync.backend.warning.target_missing_columns": "В целевой таблице отсутствует {{count}} столбцов: {{columns}}", - "data_sync.backend.warning.target_table_existing_only_required": "Текущая стратегия требует существующую целевую таблицу, поэтому при выполнении она не будет создана автоматически.", - "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "Семантика источника ORDER BY/PARTITION/TTL/Projection/materialized-view пока не мигрируется автоматически в TDengine", - "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "Индексы источника, внешние ключи, триггеры, уникальные ограничения и семантика auto-increment пока не мигрируются автоматически в TDengine", - "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "Индексы источника, внешние ключи, триггеры, уникальные ограничения, identity и sequence пока не мигрируются автоматически в TDengine", - "data_sync.unsupported.tdengine_source_relational_semantics": "Индексы TDengine, внешние ключи, триггеры, supertable, TTL и другая семантика временных рядов пока не мигрируются автоматически", - "data_sync.unsupported.tdengine_target_missing_timestamp": "Первый столбец TDengine regular table должен быть TIMESTAMP; в текущей исходной таблице нет напрямую сопоставимого столбца времени", - "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "Семантика исходных supertable, TAGS, TTL, retention policy и индексов пока не мигрируется автоматически в TDengine regular table", - "data_sync.warning.target_exists_strategy_no_auto_create": "Текущая стратегия требует существующую целевую таблицу, поэтому при выполнении она не будет создана автоматически.", - "data_sync.warning.target_missing_columns": "В целевой таблице отсутствует {{count}} столбцов: {{columns}}", - "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "Источники TDengine пока не добавляют столбцы автоматически в существующую целевую таблицу; сначала проверьте целевую структуру", - "data_sync.warning.tdengine_source_mysql_type_fallback": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления MySQL; он деградирован до {{targetType}}", - "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "Столбец {{column}} типа {{type}} сопоставлен с {{targetType}}, чтобы избежать переполнения unsigned", - "data_sync.warning.tdengine_source_pglike_type_fallback": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления PG-like; он деградирован до {{targetType}}", - "data_sync.warning.tdengine_source_semantics_degraded": "TDengine -> реляционные цели сейчас мигрирует только столбцы и данные; supertable, связь TAG, retention policy и другая семантика временных рядов могут быть деградированы или потеряны", - "data_sync.warning.tdengine_source_tag_column_degraded": "Столбец {{column}} является TDengine TAG и будет деградирован до обычного столбца в реляционной цели", - "data_sync.warning.tdengine_source_tag_column_mapped": "Столбец {{column}} является TDengine TAG и сопоставлен как обычный столбец", - "data_sync.warning.tdengine_target_auto_create_basic_table_only": "auto-create для цели TDengine сейчас создает только базовую таблицу; индексы, внешние ключи, триггеры, supertable/TAGS/TTL не мигрируются автоматически", - "data_sync.warning.tdengine_target_auto_increment_not_migrated": "Семантика auto-increment столбца {{column}} не мигрируется в TDengine", - "data_sync.warning.tdengine_target_binary_type_fallback": "Столбец {{column}} типа {{type}} деградирован до {{targetType}} по строковой семантике", - "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "Столбец {{column}} типа {{type}} повышен до первого столбца TDengine TIMESTAMP", - "data_sync.warning.tdengine_target_empty_type_fallback": "Тип столбца {{column}} пуст и деградирован до {{targetType}}", - "data_sync.warning.tdengine_target_enum_type_fallback": "Столбец {{column}} enum типа {{type}} деградирован до {{targetType}}", - "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "Цели TDengine пока не добавляют столбцы автоматически в существующую целевую таблицу; сначала проверьте целевую структуру", - "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "Не удалось разобрать длину FixedString столбца {{column}}; он деградирован до {{targetType}}", - "data_sync.warning.tdengine_target_identity_not_migrated": "Семантика auto-increment/identity столбца {{column}} не мигрируется в TDengine", - "data_sync.warning.tdengine_target_insert_only": "Цели TDengine сейчас поддерживают только записи INSERT; различия update/delete будут отклонены при выполнении", - "data_sync.warning.tdengine_target_json_regular_table_fallback": "Столбец {{column}} типа {{type}} не сохраняет семантику TAG в TDengine regular table и деградирован до {{targetType}}", - "data_sync.warning.tdengine_target_json_tag_only_fallback": "Столбец {{column}} типа {{type}} деградирован до {{targetType}}, потому что TDengine JSON применяется только к TAG", - "data_sync.warning.tdengine_target_missing_time_column": "В исходной таблице нет сопоставимого столбца времени, поэтому автоматическое создание таблицы недоступно. Перед продолжением вручную подготовьте целевую таблицу TDengine и столбец времени.", - "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "Семантика первичного ключа столбца {{column}} не мигрируется в TDengine как реляционное ограничение", - "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления TDengine для того же типа базы данных; он деградирован до {{targetType}}", - "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "Столбец {{column}} является TDengine TAG и после миграции в regular table будет деградирован до обычного столбца", - "data_sync.warning.tdengine_target_time_only_type_fallback": "Для столбца {{column}} типа {{type}} нет стабильного сопоставления TDengine time-only; он деградирован до {{targetType}}", - "data_sync.warning.tdengine_target_timestamp_column_reordered": "Базовые таблицы TDengine требуют столбец времени первым; столбец {{column}} перемещен на первую позицию", - "data_sync.warning.tdengine_target_type_fallback": "Столбец {{column}} типа {{type}} деградирован до {{targetType}}", - "data_sync.warning.tdengine_target_type_no_mapping_fallback": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления TDengine; он деградирован до {{targetType}}", - "data_sync.warning.tdengine_target_user_defined_type_fallback": "Столбец {{column}} является пользовательским типом и деградирован до {{targetType}}", - "data_sync.backend.error.analyze_prepare_secrets_failed": "Не удалось подготовить секреты анализа синхронизации данных: {{detail}}", - "data_sync.backend.error.apply_changes_failed": "Не удалось применить изменения: {{detail}}", - "data_sync.backend.error.auto_add_column_failed": "Не удалось автоматически добавить столбец: столбец={{column}}, ошибка={{detail}}", - "data_sync.backend.error.build_migration_plan_failed": "Не удалось построить план миграции: таблица={{table}}, ошибка={{detail}}", - "data_sync.backend.error.create_indexes_failed": "Не удалось создать индексы: таблица={{table}}, ошибка={{detail}}", - "data_sync.backend.error.create_table_sql_empty": "Не удалось автоматически создать таблицу {{table}}: create-table SQL пуст", - "data_sync.backend.error.create_target_table_failed": "Не удалось создать целевую таблицу: таблица={{table}}, ошибка={{detail}}", - "data_sync.backend.error.exec_ddl_statement_failed": "Сбой на этапе {{stage}}: SQL={{sql}}, ошибка={{detail}}", - "data_sync.backend.error.mongo_read_source_samples_failed": "Не удалось прочитать образцы исходной MongoDB collection: {{detail}}", - "data_sync.backend.error.pre_create_table_sql_failed": "Не удалось предварительно выполнить create-table SQL: таблица={{table}}, ошибка={{detail}}", - "data_sync.backend.error.prepare_secrets_failed": "Не удалось подготовить секреты синхронизации данных: {{detail}}", - "data_sync.backend.error.preview_failed": "Не удалось выполнить предпросмотр синхронизации данных: {{detail}}", - "data_sync.backend.error.preview_prepare_secrets_failed": "Не удалось подготовить секреты предпросмотра синхронизации данных: {{detail}}", - "data_sync.backend.error.read_source_table_failed_with_table": "Не удалось прочитать исходную таблицу {{table}}: {{detail}}", - "data_sync.backend.error.read_target_table_failed_with_table": "Не удалось прочитать целевую таблицу {{table}}: {{detail}}", - "data_sync.backend.error.refresh_columns_after_create_failed": "Не удалось загрузить столбцы после создания целевой таблицы: таблица={{table}}, ошибка={{detail}}", - "data_sync.backend.error.source_collection_no_migratable_fields": "Из исходной MongoDB collection не удалось вывести мигрируемые поля: {{collection}}", - "data_sync.backend.error.source_table_columns_failed": "Не удалось получить столбцы исходной таблицы: {{detail}}", - "data_sync.backend.error.source_table_missing_or_no_columns": "Исходная таблица отсутствует или не имеет определений столбцов: {{table}}", - "data_sync.backend.error.sync_table_schema_failed": "Не удалось синхронизировать структуру таблицы: таблица={{table}}, ошибка={{detail}}", - "data_sync.backend.error.target_collection_check_failed": "Не удалось проверить целевую MongoDB collection: {{detail}}", - "data_sync.backend.error.target_table_columns_failed": "Не удалось получить столбцы целевой таблицы: {{detail}}", - "data_sync.backend.label.content_data_only": "Только данные", - "data_sync.backend.label.content_schema_and_data": "Структура и данные", - "data_sync.backend.label.content_schema_only": "Только структура", - "data_sync.backend.label.mode_full_overwrite": "Полная перезапись", - "data_sync.backend.label.mode_insert_only": "Только вставка", - "data_sync.backend.label.mode_insert_update": "Инкрементальная синхронизация", - "data_sync.backend.label.target_strategy_auto_create_if_missing": "Автоматически создать цель при отсутствии", - "data_sync.backend.label.target_strategy_existing_only": "Использовать только существующую цель", - "data_sync.backend.label.target_strategy_smart": "Автоматическая обработка цели", - "data_sync.backend.log.auto_add_columns_completed": "Автоматическое добавление столбцов завершено: успешно={{succeeded}}, ошибок={{failed}}", - "data_sync.backend.log.change_counts": "Требуется вставить {{inserts}} строк, обновить {{updates}} строк, удалить {{deletes}} строк", - "data_sync.backend.log.connecting_source": "Подключение к исходной базе данных: {{host}}...", - "data_sync.backend.log.connecting_target": "Подключение к целевой базе данных: {{host}}...", - "data_sync.backend.log.data_already_consistent": "Данные уже согласованы; изменения не требуются.", - "data_sync.backend.log.ddl_statement_succeeded": "Таблица {{table}}, этап {{stage}} выполнен успешно: {{sql}}", - "data_sync.backend.log.fatal_error": "Критическая ошибка: {{message}}", - "data_sync.backend.log.missing_columns_auto_add_disabled": "В целевой таблице отсутствует {{count}} столбцов, но автоматическое добавление отключено; они будут проигнорированы: {{columns}}", - "data_sync.backend.log.missing_columns_auto_add_started": "В целевой таблице отсутствует {{count}} столбцов; запускается автоматическое добавление: {{columns}}", - "data_sync.backend.log.mongo_redis_keyspace_options": "Миграция keyspace MongoDB -> Redis; режим={{mode}}; цель={{target}}", - "data_sync.backend.log.mongo_redis_migrating_key": "Запись Redis Key {{key}}", - "data_sync.backend.log.mongo_redis_syncing_collection": "Синхронизация MongoDB collection {{collection}}", - "data_sync.backend.log.redis_mongo_keyspace_options": "Миграция keyspace Redis -> MongoDB; режим={{mode}}; стратегия цели={{strategy}}", - "data_sync.backend.log.redis_mongo_migrating_key": "Миграция Redis Key {{key}}", - "data_sync.backend.log.source_query_no_changes": "Набор результатов SQL и целевая таблица согласованы; применять изменения не требуется", - "data_sync.backend.log.source_query_sync_completed": "Синхронизация набора результатов SQL завершена: вставки={{inserts}}, обновления={{updates}}, удаления={{deletes}}", - "data_sync.backend.log.source_query_sync_source": "Источник синхронизации: набор результатов SQL -> целевая таблица {{table}}; режим: {{mode}}", - "data_sync.backend.log.sync_options": "Содержимое синхронизации: {{content}}; режим: {{mode}}; автодобавление столбцов: {{autoAddColumns}}; стратегия целевой таблицы: {{targetTableStrategy}}; создание индексов: {{createIndexes}}", - "data_sync.backend.log.syncing_table": "Синхронизация таблицы: {{table}}", - "data_sync.backend.log.table_no_operations_skipped": "Для таблицы {{table}} не выбраны операции, она пропущена", - "data_sync.backend.log.target_table_created": "Целевая таблица успешно создана: {{table}}", - "data_sync.backend.log.target_table_no_operations": "Для целевой таблицы {{table}} не выбраны операции, она пропущена", - "data_sync.backend.log.unknown_sync_content_data_only": "Неизвестное содержимое синхронизации {{content}}; автоматически выбран режим только данных", - "data_sync.backend.result.preview_ready": "Предпросмотр синхронизации данных готов", - "data_sync.backend.result.sync_completed": "Синхронизация завершена: таблиц={{tables}}, вставлено={{rowsInserted}}, обновлено={{rowsUpdated}}, удалено={{rowsDeleted}}", - "data_sync.plan.mongo_target_collection_missing_auto_create": "Целевая MongoDB collection {{collection}} отсутствует. Она будет автоматически создана перед импортом.", - "data_sync.plan.mongo_target_collection_missing_manual_create": "Целевая MongoDB collection {{collection}} отсутствует. Сначала создайте ее вручную.", - "data_sync.backend.warning.apply_changes_unsupported": "Целевой драйвер не поддерживает применение изменений данных.", - "data_sync.backend.warning.auto_add_column_sql_generation_failed": "Не удалось создать SQL для автоматического добавления столбца {{column}}: {{detail}}", - "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "Столбец {{column}} является автоинкрементным; {{feature}} не будет автоматически создан заново при добавлении в существующую целевую таблицу", - "data_sync.backend.warning.column_default_expression_skipped": "Значение по умолчанию {{default}} столбца {{column}} содержит выражение и пока не мигрируется автоматически", - "data_sync.backend.warning.column_empty_string_default_not_preserved": "Пустая строка как значение по умолчанию столбца {{column}} не сохранена", - "data_sync.backend.warning.column_type_degraded": "Столбец {{column}} типа {{sourceType}} деградирован до {{targetType}}", - "data_sync.backend.warning.column_type_empty_degraded": "Тип столбца {{column}} пуст и деградирован до {{targetType}}", - "data_sync.backend.warning.column_type_mapped": "Столбец {{column}} типа {{sourceType}} сопоставлен с {{targetType}}", - "data_sync.backend.warning.column_type_no_mapping_degraded": "Для столбца {{column}} типа {{sourceType}} нет отдельного сопоставления; он деградирован до {{targetType}}", - "data_sync.backend.warning.column_user_defined_degraded": "Столбец {{column}} является пользовательским типом и деградирован до {{targetType}}", - "data_sync.backend.warning.composite_pk_skipped": "Таблица {{table}} имеет составной первичный ключ ({{columns}}); синхронизация различий пока не поддерживается и пропущена", - "data_sync.backend.warning.full_overwrite_clearing_target": "Режим полной перезаписи: целевая таблица {{table}} будет очищена", - "data_sync.backend.warning.load_target_columns_skip_check_failed": "Не удалось получить столбцы целевой таблицы; проверка согласованности столбцов пропущена: {{detail}}", - "data_sync.backend.warning.mongo_redis_document_format": "MongoDB -> Redis сейчас поддерживает только documents с полями key/type/ttl/value", - "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "При миграции MongoDB -> Redis полная перезапись понижается до инкрементальной синхронизации", - "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "Столбец {{column}} является unsigned bigint auto_increment; он деградирован до {{targetType}}, семантика автоинкремента не сохранена", - "data_sync.backend.warning.refresh_columns_after_add_failed": "Не удалось обновить целевые столбцы после добавления: таблица={{table}}, ошибка={{detail}}", - "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "При миграции Redis -> MongoDB полная перезапись понижается до инкрементальной синхронизации", - "data_sync.backend.warning.source_indexes_read_failed": "Не удалось прочитать индексы исходной таблицы; миграция индексов пропущена: {{detail}}", - "data_sync.backend.warning.table_pk_required_skipped": "У таблицы {{table}} нет первичного ключа; текущий режим требует сравнения различий, таблица пропущена", - "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "Целевая таблица для {{table}} отсутствует; текущая стратегия не разрешает автоматическое создание таблицы, поэтому она пропущена", - "data_sync.backend.warning.unknown_content_default_data": "Неизвестное содержимое синхронизации {{content}}; автоматически выбран режим только данных", - "data_sync.backend.warning.unknown_mode_default_insert_update": "Неизвестный режим синхронизации {{mode}}; автоматически выбрана инкрементальная синхронизация", - "data_sync.schema_sync.error.create_statement_empty": "Оператор create-table пуст", - "data_sync.schema_sync.error.create_target_table_failed": "Не удалось создать целевую таблицу {{table}}: {{detail}}", - "data_sync.schema_sync.error.get_columns_after_create_failed": "Не удалось получить столбцы после создания целевой таблицы {{table}}: {{detail}}", - "data_sync.schema_sync.error.get_create_statement_failed": "Не удалось получить оператор create-table для исходной таблицы {{table}}: {{detail}}", - "data_sync.schema_sync.error.get_source_columns_failed": "Не удалось получить столбцы исходной таблицы {{table}}: {{detail}}", - "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "Целевая таблица {{table}} отсутствует, а тип источника {{sourceType}} пока не поддерживает автоматическое создание таблицы: {{detail}}", - "data_sync.schema_sync.log.add_column_failed": "Не удалось добавить столбец: таблица={{table}}, столбец={{column}}, ошибка={{detail}}", - "data_sync.schema_sync.log.column_added": "Столбец добавлен: таблица={{table}}, столбец={{column}}, тип={{type}}", - "data_sync.schema_sync.log.completed": "Синхронизация структуры завершена для {{table}}; добавлено столбцов: {{count}}", - "data_sync.schema_sync.log.schema_aligned": "Структура таблицы согласована: {{table}}", - "data_sync.schema_sync.log.target_created": "Целевая таблица успешно создана: {{table}}", - "data_sync.schema_sync.log.target_missing_create": "Целевая таблица {{table}} отсутствует; выполняется попытка создать структуру таблицы", - "data_sync.schema_sync.warning.target_unsupported": "Тип целевой базы данных={{targetType}} пока не поддерживает синхронизацию структуры; таблица {{table}} пропущена", - "data_sync.unsupported.mongo_index_columns_missing": "У индекса {{name}} нет определения столбцов, он пропущен", - "data_sync.unsupported.mongo_index_create_command_failed": "Не удалось создать команду MongoDB createIndexes для индекса {{name}}: {{detail}}", - "data_sync.unsupported.mongo_index_prefix_length": "Индекс {{name}} использует длину префикса; эквивалентная миграция в MongoDB пока не поддерживается", - "data_sync.warning.mongo_field_mixed_bson_types": "Поле {{field}} содержит несколько типов значений BSON и деградировано до совместимого типа", - "data_sync.warning.mongo_index_type_normalized": "Индекс {{name}}, тип={{type}}, будет мигрирован в MongoDB как обычный индекс", - "data_sync.warning.mongo_source_collection_index_read_failed": "Не удалось прочитать индексы исходной MongoDB collection; миграция индексов пропущена: {{detail}}", - "data_sync.warning.mongo_source_empty_sample_id_only": "В исходной MongoDB collection нет образцов данных; из `_id` будет создан только базовый столбец первичного ключа", - "data_sync.warning.mongo_source_primary_key_missing": "Из исходной MongoDB collection не удалось вывести стабильный первичный ключ; целевая таблица не создаст первичный ключ автоматически", - "data_sync.warning.mongo_source_table_index_read_failed": "Не удалось прочитать индексы исходной таблицы; миграция индексов пропущена: {{detail}}", - "data_sync.warning.mongo_target_collection_existing_only_required": "Текущая стратегия требует существующую целевую MongoDB collection, поэтому при выполнении она не будет создана автоматически", - "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB является целью с гибкой структурой; структура полей следует записываемым document, проверки целевых столбцов не выполняются", - "file.backend.dialog.export_connections": "Экспорт подключений", - "file.backend.dialog.export_data": "Экспорт данных", - "file.backend.dialog.export_database_sql": "Экспорт {{database}} (SQL)", - "file.backend.dialog.export_query_result": "Экспорт результата запроса", - "file.backend.dialog.export_table": "Экспорт {{table}}", - "file.backend.dialog.export_tables_sql": "Экспорт таблиц (SQL)", - "file.backend.dialog.import_data": "Импорт в {{table}}", - "file.backend.dialog.select_config_file": "Выберите файл конфигурации", - "file.backend.dialog.select_database_file": "Выберите файл базы данных", - "file.backend.dialog.select_duckdb_file": "Выберите файл данных DuckDB", - "file.backend.dialog.select_sql_directory": "Выберите каталог SQL", - "file.backend.dialog.select_sql_file": "Выберите SQL-файл", - "file.backend.dialog.select_sqlite_file": "Выберите файл данных SQLite", - "file.backend.dialog.select_ssh_key_file": "Выберите файл приватного ключа SSH", - "file.backend.html_export.document_title": "Экспорт данных GoNavi", - "file.backend.html_export.empty_rows": "(0 строк)", - "file.backend.html_export.heading": "Экспорт данных GoNavi", - "file.backend.html_export.meta": "Строк: {{rowCount}} · Столбцов: {{columnCount}} · Создано: {{generatedAt}}", - "file.backend.sql_dump.database": "База данных: {{database}}", - "file.backend.sql_dump.empty_rows": "(0 строк)", - "file.backend.sql_dump.generated_at": "Создано: {{generatedAt}}", - "file.backend.sql_dump.table": "Таблица: {{objectName}}", - "file.backend.sql_dump.title": "Экспорт GoNavi SQL", - "file.backend.sql_dump.view": "Представление: {{objectName}}", - "file.backend.sql_dump.view_data_skipped": "Экспорт данных представления пропущен (INSERT для представлений не выводится).", - "file.backend.error.batch_commit_unsupported": "Текущий тип базы данных не поддерживает пакетный commit", - "file.backend.error.connection_export_file_too_large": "Файл экспорта подключений слишком большой", - "file.backend.error.connection_import_file_too_large": "Файл импорта подключений слишком большой", - "file.backend.error.connection_package_decrypt_failed": "Пароль файла неверен или файл поврежден", - "file.backend.error.connection_package_password_required": "Пароль пакета восстановления не может быть пустым", - "file.backend.error.connection_package_payload_too_large": "Содержимое пакета подключений слишком большое", - "file.backend.error.connection_package_unsupported": "Неподдерживаемый формат пакета восстановления подключений", - "file.backend.error.database_name_required": "Имя базы данных не может быть пустым", - "file.backend.error.directory_path_required": "Путь к каталогу не может быть пустым", - "file.backend.error.export_unsupported_format": "Неподдерживаемый формат экспорта: {{format}}", - "file.backend.error.file_path_empty": "Путь к файлу пуст", - "file.backend.error.file_path_required": "Путь к файлу не может быть пустым", - "file.backend.error.import_file_empty": "Путь к файлу не может быть пустым", - "file.backend.error.import_csv_empty_or_missing_header": "CSV пуст или отсутствует строка заголовка", - "file.backend.error.import_csv_open_failed": "Не удалось открыть CSV: {{detail}}", - "file.backend.error.import_csv_read_failed": "Не удалось прочитать CSV: {{detail}}", - "file.backend.error.import_excel_empty_or_missing_header": "Excel пуст или отсутствует строка заголовка", - "file.backend.error.import_excel_no_sheets": "В файле Excel нет листов", - "file.backend.error.import_excel_parse_failed": "Не удалось разобрать Excel: {{detail}}", - "file.backend.error.import_excel_read_failed": "Не удалось прочитать Excel: {{detail}}", - "file.backend.error.import_json_parse_failed": "Не удалось разобрать JSON: {{detail}}", - "file.backend.error.import_json_root_not_array": "Корень JSON должен быть массивом", - "file.backend.error.import_unsupported_format": "Неподдерживаемый формат файла", - "file.backend.error.invalid_export_mode": "Недопустимый режим экспорта", - "file.backend.error.mysql_workbench_no_connections": "В XML не найдены допустимые конфигурации подключений", - "file.backend.error.mysql_workbench_parse_failed": "Не удалось разобрать XML MySQL Workbench: {{detail}}", - "file.backend.error.open_file_failed": "Не удалось открыть файл: {{detail}}", - "file.backend.error.query_required": "Запрос не может быть пустым", - "file.backend.error.read_file_error_summary": "Ошибка чтения файла: {{detail}}. Выполнено: {{count}}.", - "file.backend.error.read_file_info_failed": "Не удалось прочитать информацию о файле: {{detail}}", - "file.backend.error.selected_path_not_directory": "Выбранный путь не является каталогом", - "file.backend.error.selected_path_not_sql_file": "Выбранный путь не является SQL-файлом", - "file.backend.error.select_with_query_required": "Поддерживается экспорт только SELECT/WITH-запросов", - "file.backend.error.task_not_found": "Задача не найдена", - "file.backend.error.table_data_batch_limit": "За один раз можно обработать не более {{max}} таблиц; сейчас выбрано {{count}}", - "file.backend.error.table_data_clear_failed": "Не удалось очистить {{table}}: {{detail}}", - "file.backend.error.table_data_clear_failed_partial": "Не удалось очистить {{table}}: {{detail}}. Предупреждение: первые {{count}} таблиц уже очищены, их нельзя восстановить", - "file.backend.error.table_data_mode_unsupported": "Неподдерживаемый режим очистки данных таблицы: {{mode}}", - "file.backend.error.table_data_no_tables": "Таблицы не выбраны", - "file.backend.error.table_data_truncate_failed": "Не удалось выполнить TRUNCATE для {{table}}: {{detail}}", - "file.backend.error.table_data_truncate_failed_partial": "Не удалось выполнить TRUNCATE для {{table}}: {{detail}}. Предупреждение: для первых {{count}} таблиц уже выполнен TRUNCATE, их нельзя восстановить", - "file.backend.error.table_data_truncate_unsupported": "Текущий тип базы данных {{type}} не поддерживает TRUNCATE для таблиц. Используйте очистку", - "file.backend.error.write_failed": "Ошибка записи: {{detail}}", - "file.backend.message.cancel_requested": "Запрос на отмену отправлен", - "file.backend.message.execution_cancelled": "Выполнение отменено. Выполнено: {{executed}}, ошибок: {{failed}}, длительность: {{duration}}.", - "file.backend.message.execution_completed": "Выполнение завершено. Успешно: {{success}}, ошибок: {{failed}}, длительность: {{duration}}.", - "file.backend.message.execution_error_detail_header": "Сведения об ошибках (первые {{count}}):", - "file.backend.message.execution_more_errors": "...еще {{count}} ошибок не показано", - "file.backend.message.export_completed": "Экспорт завершен", - "file.backend.message.import_no_data": "Нет данных для импорта", - "file.backend.message.import_row_failed": "Ошибка импорта строки {{index}}: {{detail}}", - "file.backend.message.import_summary": "Импортировано: {{imported}}, ошибок: {{failed}}", - "file.backend.message.statement_failed": "Ошибка выполнения инструкции {{index}}: {{detail}}\n SQL: {{sql}}", - "file.backend.message.table_data_clear_succeeded": "Очистка выполнена успешно", - "file.backend.message.table_data_truncate_succeeded": "TRUNCATE выполнен успешно", - "file.backend.message.transaction_committed": "Транзакция успешно закоммичена", - "file.backend.message.user_cancelled": "Пользователь отменил выполнение", - "file.backend.filter.all_files": "Все файлы", - "file.backend.filter.all_files_pattern": "Все файлы (*.*)", - "file.backend.filter.connection_package": "Пакет подключений GoNavi (*.gonavi-conn)", - "file.backend.filter.database_files": "Файлы баз данных", - "file.backend.filter.data_files": "Файлы данных", - "file.backend.filter.duckdb_files": "Файлы DuckDB", - "file.backend.filter.json_files": "Файлы JSON (*.json)", - "file.backend.filter.mysql_workbench_connections": "Подключения MySQL Workbench (*.xml)", - "file.backend.filter.private_key_files": "Файлы приватных ключей", - "file.backend.filter.sql_files": "Файлы SQL (*.sql)", - "file.backend.filter.sqlite_files": "Файлы SQLite", - "ai_service.backend.message.provider_test_success": "Проверка подключения к эндпоинту выполнена успешно", - "ai_service.backend.error.provider_test_failed": "Проверка подключения не удалась: {{detail}}", - "ai_service.backend.error.provider_auth_failed": "API Key недействителен или запрос был отклонен (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_status_failed": "Эндпоинт вернул неожиданный статус (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_server_error": "Вышестоящий сервер вернул внутреннюю ошибку (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_request_create_failed": "Не удалось создать запрос: {{detail}}", - "ai_service.backend.error.provider_request_serialize_failed": "Не удалось сериализовать запрос: {{detail}}", - "ai_service.backend.error.provider_secret_read_failed": "Не удалось прочитать Provider secret: {{detail}}", - "ai_service.backend.error.provider_secret_save_failed": "Не удалось сохранить Provider secret: {{detail}}", - "ai_service.backend.error.provider_secret_saved_read_failed": "Не удалось прочитать сохраненный Provider secret: {{detail}}", - "ai_service.backend.error.provider_secret_delete_failed": "Не удалось удалить Provider secret: {{detail}}", - "ai_service.backend.error.provider_secret_load_failed": "Не удалось загрузить AI Provider secret (provider={{provider}}): {{detail}}", - "ai_service.backend.error.config_rewrite_failed": "Не удалось перезаписать конфигурацию AI: {{detail}}", - "ai_service.backend.error.config_read_failed": "Не удалось прочитать конфигурацию AI: {{detail}}", - "ai_service.backend.error.config_load_failed": "Не удалось загрузить конфигурацию AI: {{detail}}", - "ai_service.backend.error.config_serialize_failed": "Не удалось сериализовать конфигурацию AI: {{detail}}", - "ai_service.backend.error.config_dir_create_failed": "Не удалось создать каталог конфигурации: {{detail}}", - "ai_service.backend.error.config_write_failed": "Не удалось записать конфигурацию AI: {{detail}}", - "ai_service.backend.error.daily_secret_store_unavailable": "Daily secret store недоступен: {{detail}}", - "ai_service.backend.error.secret_store_unavailable": "Secret store недоступен: {{detail}}", - "ai_service.backend.error.provider_secret_bundle_parse_failed": "Не удалось разобрать provider secret bundle: {{detail}}", - "ai_service.backend.error.models_request_create_failed": "Не удалось создать запрос списка моделей: {{detail}}", - "ai_service.backend.error.models_request_failed": "Не удалось запросить список моделей: {{detail}}", - "ai_service.backend.error.models_http_status_failed": "Эндпоинт списка моделей вернул неожиданный статус (HTTP {{status}}){{body}}", - "ai_service.backend.error.models_parse_failed": "Не удалось разобрать список моделей: {{detail}}", - "ai_service.backend.error.active_provider_not_found": "Активный AI Provider не найден", - "ai_service.backend.error.editable_provider_not_found": "AI Provider для редактирования не найден: {{detail}}", - "ai_service.backend.error.provider_not_configured": "AI Provider не настроен. Сначала настройте его в параметрах.", - "ai_service.backend.error.volcengine_coding_models_empty": "Текущий эндпоинт не вернул доступные модели Volcengine Coding Plan. Проверьте права аккаунта или переключитесь на Provider \"Volcengine Ark\"", - "ai_service.backend.error.session_missing": "Сеанс не существует", - "ai_service.backend.error.session_corrupt": "Данные сеанса повреждены", - "ai_service.backend.error.sessions_dir_create_failed": "Не удалось создать каталог sessions: {{detail}}", - "ai_service.backend.error.session_serialize_failed": "Не удалось сериализовать данные сеанса: {{detail}}", - "ai_service.backend.error.session_write_failed": "Не удалось сохранить сеанс: {{detail}}", - "ai_service.backend.error.session_delete_failed": "Не удалось удалить сеанс: {{detail}}", - "ai_service.backend.warning.sql_drop": "SQL высокого риска: DROP безвозвратно удаляет объекты базы данных", - "ai_service.backend.warning.sql_truncate": "SQL высокого риска: TRUNCATE удаляет все строки из таблицы", - "ai_service.backend.warning.sql_delete_without_where": "SQL высокого риска: DELETE без WHERE удалит все строки", - "ai_service.backend.warning.sql_update_without_where": "SQL высокого риска: UPDATE без WHERE обновит все строки", - "jvm_monitoring_charts.title.heap": "Память кучи", - "jvm_monitoring_charts.title.gc": "Сборка мусора", - "jvm_monitoring_charts.title.threads": "Потоки", - "jvm_monitoring_charts.title.classes": "Загрузка классов", - "jvm_monitoring_charts.empty.heap.no_samples": "Пока нет выборок памяти кучи", - "jvm_monitoring_charts.empty.heap.metric_unavailable": "Текущий источник мониторинга не предоставляет метрики памяти кучи", - "jvm_monitoring_charts.empty.gc.no_samples": "Пока нет выборок сборки мусора", - "jvm_monitoring_charts.empty.gc.metric_unavailable": "Текущий источник мониторинга не предоставляет метрики сборки мусора", - "jvm_monitoring_charts.empty.threads.no_samples": "Пока нет выборок потоков", - "jvm_monitoring_charts.empty.threads.metric_unavailable": "Текущий источник мониторинга не предоставляет метрики потоков", - "jvm_monitoring_charts.empty.classes.no_samples": "Пока нет выборок загрузки классов", - "jvm_monitoring_charts.empty.classes.metric_unavailable": "Текущий источник мониторинга не предоставляет метрики загрузки классов", - "jvm_monitoring_charts.legend.heap_used": "Использовано кучи", - "jvm_monitoring_charts.legend.heap_committed": "Зарезервировано кучи", - "jvm_monitoring_charts.legend.gc_count": "Количество GC", - "jvm_monitoring_charts.legend.gc_time_ms": "Время GC (мс)", - "jvm_monitoring_charts.legend.thread_count": "Количество потоков", - "jvm_monitoring_charts.legend.daemon_thread_count": "Демон-потоки", - "jvm_monitoring_charts.legend.peak_thread_count": "Пиковое количество потоков", - "jvm_monitoring_charts.legend.loaded_classes": "Загруженные классы", - "jvm_monitoring_charts.legend.unloaded_classes": "Выгруженные классы", - "jvm_monitoring_status_cards.title.heap": "Память кучи", - "jvm_monitoring_status_cards.title.gc_pressure": "Нагрузка GC", - "jvm_monitoring_status_cards.title.threads": "Потоки", - "jvm_monitoring_status_cards.title.classes": "Загрузка классов", - "jvm_monitoring_status_cards.meta.heap_committed": "Зарезервировано {{value}}", - "jvm_monitoring_status_cards.meta.waiting_samples": "Ожидание выборок", - "jvm_monitoring_status_cards.meta.gc_total_time": "Всего {{value}}", - "jvm_monitoring_status_cards.meta.thread_peak": "Пик {{value}}", - "jvm_monitoring_status_cards.status.sampling": "Идет сбор", - "jvm_monitoring_status_cards.status.stopped": "Остановлено", - "jvm_monitoring_status_cards.thread_state.runnable_count": "Готово к выполнению {{count}}", - "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "Метрики диагностики", - "jvm_monitoring_detail_panel.title.thread_state_distribution": "Распределение состояний потоков", - "jvm_monitoring_detail_panel.title.recent_gc_details": "Последние сведения о сборке мусора", - "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "Возможности и деградация", - "jvm_monitoring_detail_panel.field.process_cpu": "CPU процесса", - "jvm_monitoring_detail_panel.field.system_cpu": "CPU системы", - "jvm_monitoring_detail_panel.field.process_physical_memory": "Физическая память процесса", - "jvm_monitoring_detail_panel.field.process_virtual_memory": "Виртуальная память процесса", - "jvm_monitoring_detail_panel.memory_missing.title": "Почему отсутствует физическая память процесса", - "jvm_monitoring_detail_panel.memory_missing.jmx": "Подключение JMX не предоставляет атрибут резидентной физической памяти процесса, поэтому сейчас можно читать только метрику виртуальной памяти процесса. Чтобы собирать физическую память процесса, переключитесь на HTTP endpoint или расширенный agent.", - "jvm_monitoring_detail_panel.memory_missing.default": "Текущий источник мониторинга не вернул метрику резидентной физической памяти процесса. Проверьте, что HTTP endpoint или расширенный agent собирает и передает физическую память процесса.", - "jvm_monitoring_detail_panel.empty.thread_states": "Пока нет выборок состояний потоков.", - "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "Текущий источник мониторинга не предоставляет событийные данные сборки мусора.", - "jvm_monitoring_detail_panel.empty.recent_gc_events": "В последнем окне нет событий сборки мусора.", - "jvm_monitoring_detail_panel.gc.before": "До сборки", - "jvm_monitoring_detail_panel.gc.after": "После сборки", - "jvm_monitoring_presentation.metric.heap_used": "Память heap", - "jvm_monitoring_presentation.metric.heap_non_heap": "Память non-heap", - "jvm_monitoring_presentation.metric.gc_count": "Количество сборок мусора", - "jvm_monitoring_presentation.metric.gc_time": "Время сборки мусора", - "jvm_monitoring_presentation.metric.gc_events": "Последние события сборки мусора", - "jvm_monitoring_presentation.metric.thread_count": "Количество потоков", - "jvm_monitoring_presentation.metric.thread_states": "Состояния потоков", - "jvm_monitoring_presentation.metric.class_loading": "Загрузка классов", - "jvm_monitoring_presentation.metric.cpu_process": "CPU процесса", - "jvm_monitoring_presentation.metric.cpu_system": "CPU системы", - "jvm_monitoring_presentation.metric.memory_rss": "Физическая память процесса", - "jvm_monitoring_presentation.metric.memory_virtual": "Виртуальная память процесса", - "jvm_monitoring_presentation.thread_state.new": "Новый", - "jvm_monitoring_presentation.thread_state.runnable": "Готов к выполнению", - "jvm_monitoring_presentation.thread_state.blocked": "Заблокирован", - "jvm_monitoring_presentation.thread_state.waiting": "Ожидает", - "jvm_monitoring_presentation.thread_state.timed_waiting": "Ожидает с тайм-аутом", - "jvm_monitoring_presentation.thread_state.terminated": "Завершен", - "jvm_monitoring_presentation.availability.missing_metrics": "Отсутствующие метрики: {{metrics}}", - "jvm_monitoring_presentation.availability.provider_warnings": "Предупреждение источника мониторинга: {{warnings}}", - "jvm_monitoring_presentation.availability.no_obvious_degradation": "В текущем сеансе мониторинга явная деградация не обнаружена.", - "jvm_change_preview_modal.title": "Предпросмотр изменения JVM", - "jvm_change_preview_modal.status.no_preview": "Нет результата предпросмотра", - "jvm_change_preview_modal.status.generated": "Предпросмотр создан", - "jvm_change_preview_modal.action.confirm_execute": "Подтвердить выполнение", - "jvm_change_preview_modal.action.close": "Закрыть", - "jvm_change_preview_modal.section.summary": "Сводка изменения", - "jvm_change_preview_modal.section.before": "До изменения", - "jvm_change_preview_modal.section.after": "После изменения", - "jvm_change_preview_modal.field.resource_id": "ID ресурса", - "jvm_change_preview_modal.field.version": "Версия", - "jvm_change_preview_modal.field.format": "Формат", - "jvm_change_preview_modal.risk.label": "Риск: {{level}}", - "jvm_change_preview_modal.risk.low": "Низкий", - "jvm_change_preview_modal.risk.medium": "Средний", - "jvm_change_preview_modal.risk.high": "Высокий", - "jvm_change_preview_modal.risk.unknown": "Неизвестно", - "jvm_change_preview_modal.permission.requires_confirmation": "Требуется подтверждение", - "jvm_change_preview_modal.permission.allowed": "Выполнение разрешено", - "jvm_change_preview_modal.permission.forbidden": "Выполнение запрещено", - "jvm_change_preview_modal.blocking.label": "Причина блокировки", - "jvm_change_preview_modal.blocking.alert_message": "Текущее изменение нельзя выполнить", - "jvm_diagnostic.completion.category.observe": "команда наблюдения", - "jvm_diagnostic.completion.category.trace": "команда трассировки", - "jvm_diagnostic.completion.category.mutating": "команда высокого риска", - "jvm_diagnostic.completion.category.control": "команда управления", - "jvm_diagnostic.completion.preset.category.observe": "команда наблюдения", - "jvm_diagnostic.completion.preset.category.trace": "команда трассировки", - "jvm_diagnostic.completion.preset.category.mutating": "команда высокого риска", - "jvm_diagnostic.completion.preset.thread-top.documentation": "Показывает самые загруженные потоки, чтобы быстро найти заблокированные потоки или потоки с высокой нагрузкой CPU.", - "jvm_diagnostic.completion.preset.dashboard.documentation": "Показывает сводку времени выполнения JVM.", - "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "Трассирует пути медленных вызовов методов.", - "jvm_diagnostic.completion.preset.watch-return.documentation": "Наблюдает параметры и возвращаемые значения.", - "jvm_diagnostic.completion.preset.ognl-sample.documentation": "Команда выражения высокого риска, по умолчанию показана только как пример.", - "jvm_diagnostic.completion.command.dashboard.documentation": "Показывает сводку времени выполнения JVM.", - "jvm_diagnostic.completion.command.jvm.documentation": "Показывает память JVM, потоки, загрузку классов, GC и аргументы запуска.", - "jvm_diagnostic.completion.command.thread.documentation": "Показывает горячие потоки, стеки потоков и заблокированные потоки.", - "jvm_diagnostic.completion.command.sc.documentation": "Ищет подходящую информацию о классах.", - "jvm_diagnostic.completion.command.sm.documentation": "Показывает сигнатуры методов класса.", - "jvm_diagnostic.completion.command.jad.documentation": "Декомпилирует указанный класс.", - "jvm_diagnostic.completion.command.sysprop.documentation": "Показывает системные свойства.", - "jvm_diagnostic.completion.command.sysenv.documentation": "Показывает переменные окружения.", - "jvm_diagnostic.completion.command.classloader.documentation": "Показывает информацию о загрузчиках классов.", - "jvm_diagnostic.completion.command.trace.documentation": "Трассирует временные пути вызовов методов.", - "jvm_diagnostic.completion.command.watch.documentation": "Наблюдает параметры, возвращаемые значения или исключения.", - "jvm_diagnostic.completion.command.stack.documentation": "Выводит стеки вызовов методов.", - "jvm_diagnostic.completion.command.monitor.documentation": "Периодически собирает статистику вызовов методов.", - "jvm_diagnostic.completion.command.tt.documentation": "Временной туннель методов для записи и повторного воспроизведения вызовов.", - "jvm_diagnostic.completion.command.ognl.documentation": "Выполняет выражение OGNL; по умолчанию требуется дополнительная авторизация.", - "jvm_diagnostic.completion.command.vmtool.documentation": "Напрямую работает с объектами JVM или выполняет действия VMTool.", - "jvm_diagnostic.completion.command.redefine.documentation": "Переопределяет байткод класса.", - "jvm_diagnostic.completion.command.retransform.documentation": "Повторно запускает преобразование класса.", - "jvm_diagnostic.completion.command.stop.documentation": "Останавливает текущую фоновую задачу.", - "jvm_diagnostic.completion.detail.execute_directly": "выполнить напрямую", - "jvm_diagnostic.completion.detail.thread_option": "параметр потока", - "jvm_diagnostic.completion.detail.class_search_template": "шаблон поиска класса", - "jvm_diagnostic.completion.detail.method_search_template": "шаблон поиска метода", - "jvm_diagnostic.completion.detail.decompile_template": "шаблон декомпиляции", - "jvm_diagnostic.completion.detail.system_property_template": "шаблон системного свойства", - "jvm_diagnostic.completion.detail.environment_variable_template": "шаблон переменной окружения", - "jvm_diagnostic.completion.detail.classloader_template": "шаблон загрузчика классов", - "jvm_diagnostic.completion.detail.trace_template": "шаблон trace", - "jvm_diagnostic.completion.detail.trace_option": "параметр trace", - "jvm_diagnostic.completion.detail.watch_template": "шаблон watch", - "jvm_diagnostic.completion.detail.watch_option": "параметр watch", - "jvm_diagnostic.completion.detail.stack_template": "шаблон stack", - "jvm_diagnostic.completion.detail.monitor_template": "шаблон monitor", - "jvm_diagnostic.completion.detail.time_tunnel_template": "шаблон временного туннеля", - "jvm_diagnostic.completion.detail.high_risk_template": "шаблон высокого риска", - "jvm_diagnostic.completion.argument.command_template.label": "шаблон {{command}}", - "jvm_diagnostic.completion.argument.detail_mode_d.label": "Подробный режим (-d)", - "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", - "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "Показывает текущую сводку времени выполнения JVM.", - "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", - "jvm_diagnostic.completion.argument.jvm.direct.documentation": "Показывает память JVM, потоки, загрузку классов, GC и аргументы запуска.", - "jvm_diagnostic.completion.argument.thread.busy_top.label": "Загруженные потоки TOP N (-n)", - "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "Показывает N потоков с наибольшей нагрузкой CPU.", - "jvm_diagnostic.completion.argument.thread.blocking.label": "Заблокированные потоки (-b)", - "jvm_diagnostic.completion.argument.thread.blocking.documentation": "Находит потоки, которые сейчас блокируют другие потоки.", - "jvm_diagnostic.completion.argument.thread.thread_id.label": "Указанный ID потока", - "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "Показывает подробную информацию о стеке указанного потока.", - "jvm_diagnostic.completion.argument.sc.class_pattern.label": "Шаблон класса", - "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "Ищет по шаблону имени класса.", - "jvm_diagnostic.completion.argument.sc.detail.documentation": "Выводит подробную информацию о классе.", - "jvm_diagnostic.completion.argument.sm.method_signature.label": "Шаблон сигнатуры метода", - "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "Показывает сигнатуры методов класса.", - "jvm_diagnostic.completion.argument.sm.detail.documentation": "Выводит подробные сигнатуры методов.", - "jvm_diagnostic.completion.argument.jad.template.label": "Шаблон декомпиляции", - "jvm_diagnostic.completion.argument.jad.template.documentation": "Декомпилирует указанный класс.", - "jvm_diagnostic.completion.argument.sysprop.property.label": "Показать свойство", - "jvm_diagnostic.completion.argument.sysprop.property.documentation": "Читает указанное системное свойство.", - "jvm_diagnostic.completion.argument.sysenv.variable.label": "Показать переменную окружения", - "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "Читает указанную переменную окружения.", - "jvm_diagnostic.completion.argument.classloader.tree.label": "Древовидный вид (-t)", - "jvm_diagnostic.completion.argument.classloader.tree.documentation": "Выводит дерево загрузчиков классов.", - "jvm_diagnostic.completion.argument.classloader.url_stat.label": "Вся статистика URL (--url-stat)", - "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "Показывает статистику URL загрузчиков классов.", - "jvm_diagnostic.completion.argument.classloader.hash.label": "Указанный Hash загрузчика классов", - "jvm_diagnostic.completion.argument.classloader.hash.documentation": "Показывает детали указанного загрузчика классов.", - "jvm_diagnostic.completion.argument.trace.template.documentation": "Трассирует цепочки медленных вызовов методов.", - "jvm_diagnostic.completion.argument.trace.condition.label": "Фильтр условия '#cost > 100'", - "jvm_diagnostic.completion.argument.trace.condition.documentation": "Добавляет выражение условия trace.", - "jvm_diagnostic.completion.argument.watch.template.documentation": "Наблюдает параметры, возвращаемые значения или исключения.", - "jvm_diagnostic.completion.argument.watch.expand_depth.label": "Глубина раскрытия -x 2", - "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "Задает глубину раскрытия объекта.", - "jvm_diagnostic.completion.argument.stack.template.documentation": "Выводит стеки вызовов методов.", - "jvm_diagnostic.completion.argument.monitor.template.documentation": "Собирает статистику вызовов методов с интервалом.", - "jvm_diagnostic.completion.argument.tt.record.label": "шаблон записи tt", - "jvm_diagnostic.completion.argument.tt.record.documentation": "Записывает вызовы указанного метода.", - "jvm_diagnostic.completion.argument.tt.list.label": "Показать список записей (-l)", - "jvm_diagnostic.completion.argument.tt.list.documentation": "Показывает текущий список записей.", - "jvm_diagnostic.completion.argument.tt.replay.label": "Воспроизвести запись (-i)", - "jvm_diagnostic.completion.argument.tt.replay.documentation": "Показывает детали указанной записи.", - "jvm_diagnostic.completion.argument.ognl.template.documentation": "Выполняет выражение OGNL; команды высокого риска по умолчанию ограничены политикой.", - "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", - "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "Получает экземпляры указанного класса; команды высокого риска по умолчанию ограничены политикой.", - "jvm_diagnostic.completion.argument.redefine.template.documentation": "Переопределяет путь к файлу байткода класса.", - "jvm_diagnostic.completion.argument.retransform.template.documentation": "Повторно преобразует указанный класс.", - "jvm_diagnostic.completion.argument.stop.direct.label": "stop", - "jvm_diagnostic.completion.argument.stop.direct.documentation": "Останавливает текущую фоновую задачу.", - "app.about.action.open_install_directory": "Открыть каталог установки", - "app.about.action.install_update": "Установить обновление", - "app.about.action.hide_to_background": "Скрыть в фон", - "app.about.download_progress.title": "Скачать обновление", - "app.about.download_progress.title_with_version": "Скачать обновление {{version}}", - "app.about.update_status.not_checked": "Не проверялось", - "app.about.update_status.checking": "Проверка обновлений...", - "app.about.update_status.check_failed": "Проверка обновлений не удалась: {{error}}", - "app.about.update_status.new_version_downloaded": "Найдена новая версия {{version}} (загружена; откройте ход загрузки для установки)", - "app.about.update_status.new_version_not_downloaded": "Найдена новая версия {{version}} (не загружена)", - "app.about.update_status.latest": "У вас установлена последняя версия ({{version}})", - "app.about.message.update_package_ready": "Пакет обновления готов ({{version}})", - "app.about.message.update_package_ready_with_path": "Пакет обновления готов ({{version}}), путь: {{path}}", - "app.about.message.download_completed": "Загрузка обновления завершена", - "app.about.message.download_completed_with_path": "Загрузка обновления завершена. Путь к пакету: {{path}}", - "app.about.message.download_failed_with_error": "Не удалось скачать обновление: {{error}}", - "app.about.message.install_directory_opened_manual_replace": "Каталог установки открыт. Завершите замену вручную.", - "app.about.message.open_install_directory_failed_with_error": "Не удалось открыть каталог установки: {{error}}", - "app.about.message.install_failed_with_error": "Не удалось установить обновление: {{error}}", - "app.about.message.check_failed_with_error": "Проверка обновлений не удалась: {{error}}", - "app.about.message.new_version_found": "Найдена новая версия {{version}}", - "app.theme.font_family.title": "Семейство шрифтов", - "app.theme.font_family.ui_title": "Семейство шрифтов UI", - "app.theme.font_family.mono_title": "Моноширинное семейство шрифтов", - "app.theme.font_family.load_failed": "Не удалось загрузить системные шрифты", - "app.theme.font_family.load_failed_fallback": "Не удалось загрузить системные шрифты. Используются стандартные наборы шрифтов: {{error}}", - "app.theme.font_family.loaded_ui_hint": "Считано {{count}} семейств шрифтов с этой системы. Введите текст для поиска. Очистите поле, чтобы вернуться к шрифту UI по умолчанию.", - "app.theme.font_family.loading_ui_hint": "Установленные шрифты текущей системы загружаются в реальном времени. Введите текст для поиска. Очистите поле, чтобы вернуться к шрифту UI по умолчанию.", - "app.theme.font_family.mono_fallback_hint": "Используются стандартные наборы шрифтов для кода. Применяется к моноширинному содержимому: SQL-редактору, блокам кода AI, журналам, DDL и таблицам данных.", - "app.theme.font_family.mono_hint": "Сначала показываются установленные системные шрифты; названия, близкие к Mono/Code/Console, выводятся выше. Применяется к моноширинному содержимому: SQL-редактору, блокам кода AI, журналам, DDL и таблицам данных.", - "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux не обнаружил китайские CJK-шрифты, поэтому интерфейс может показывать квадраты вместо символов. Установите: ", - "app.theme.font_family.linux_cjk_install_suffix": ", затем перезапустите GoNavi.", - "app.linux_cjk_font_banner.title": "Отсутствуют Linux CJK-шрифты", - "app.linux_cjk_font_banner.description": "Китайский текст может отображаться квадратами вместо символов. Установите шрифты, затем перезапустите GoNavi: ", - "app.linux_cjk_font_banner.action.open_font_settings": "Настройки шрифтов", - "app.theme.data_table.density": "Плотность таблицы", - "app.theme.data_table.density.comfortable": "Комфортная", - "app.theme.data_table.density.standard": "Стандартная", - "app.theme.data_table.density.compact": "Компактная", - "app.theme.data_table.density_hint": "Управляет высотой строк, шириной столбцов и отступами. Комфортная плотность удобна для больших экранов; компактная увеличивает плотность информации. Ширина столбцов, измененная вручную, сохраняется в приоритете.", - "app.theme.data_table.font_size": "Размер шрифта таблицы данных", - "app.theme.data_table.sidebar_tree_font_size": "Размер шрифта левого дерева схем", - "app.theme.data_table.follow_global": "Следовать глобально", - "sidebar.message.operation_rename_failed": "Не удалось переименовать: {{error}}", - "sidebar.message.operation_drop_failed": "Не удалось удалить: {{error}}", - "sidebar.v2_database_menu.meta": "{{dialect}} · Действия с базой данных", - "sidebar.v2_database_menu.new_schema": "Новая schema", - "sidebar.v2_database_menu.new_materialized_view": "Новое материализованное представление", - "sidebar.v2_database_menu.new_external_catalog": "Новый внешний Catalog", - "sidebar.v2_database_menu.refresh_object_tree": "Обновить дерево объектов", - "sidebar.v2_database_menu.export_backup_section": "Экспорт и резервное копирование", - "sidebar.v2_database_menu.export_all_table_schema_sql": "Экспортировать схемы всех таблиц · SQL", - "sidebar.v2_database_menu.backup_all_tables_sql": "Резервная копия всех таблиц · схема + данные SQL", - "ai_settings.message.load_provider_failed": "Не удалось прочитать конфигурацию поставщика", - "data_sync.field.schema": "Схема", - "data_sync.message.fetch_target_schemas_failed_detail": "Не удалось получить целевые схемы: {{detail}}", - "data_sync.message.select_target_schema": "Выберите целевую схему", - "connection_modal.field.readOnly.label": "Защита прод-подключения", - "connection_modal.field.readOnly.help": "Если включено, для этого подключения разрешены только запросы. Импорт, изменения схемы, запись данных и использование как цели синхронизации будут запрещены.", - "connection_modal.field.readOnly.checkbox": "Пометить это подключение как production и разрешить только запросы", - "query_editor.message.connection_readonly_blocked": "Для этого подключения включена защита production, разрешены только операции запроса.", - "query_editor.results_panel.message.action.copy": "Копировать", - "query_editor.results_panel.message.copy_unsupported": "Буфер обмена недоступен в текущей среде", - "query_editor.results_panel.message.copy_failed": "Не удалось скопировать сообщение: {{detail}}", "ai_chat.builtin_tools.database.execute_sql.desc": "Execute a SQL query and return results", "ai_chat.builtin_tools.database.execute_sql.detail": "Pass connectionId, dbName, and sql, then execute SQL on the target database and return results (up to 50 rows). Controlled by safety level; read-only mode only allows SELECT/SHOW/DESCRIBE.", "ai_chat.builtin_tools.database.execute_sql.parameters.connectionId.description": "Connection ID", @@ -5037,7 +178,38 @@ "ai_chat.builtin_tools.flows.upstream_request.title": "Trace AI upstream requests", "ai_chat.builtin_tools.flows.workspace_tabs.description": "See which SQL, table, or command tabs are open, then inspect the target tab for field checks, comparisons, and read-only validation.", "ai_chat.builtin_tools.flows.workspace_tabs.title": "Inventory the current workspace", + "ai_chat.composer_notice.missing_model.description": "Откройте список моделей ниже и выберите модель. Если список пуст, проверьте конечную точку поставщика и API Key.", + "ai_chat.composer_notice.missing_model.title": "Сначала выберите модель", + "ai_chat.composer_notice.missing_provider.description": "Сначала добавьте и включите поставщика моделей в настройках AI.", + "ai_chat.composer_notice.missing_provider.title": "Нет доступного поставщика", + "ai_chat.composer_notice.model_fetch_failed.default_description": "Проверьте конечную точку поставщика, API Key или права учетной записи, затем снова откройте список моделей.", + "ai_chat.composer_notice.model_fetch_failed.detail_description": "Детали поставщика: {{detail}}", + "ai_chat.composer_notice.model_fetch_failed.title": "Не удалось загрузить список моделей", + "ai_chat.header.action.export": "Экспорт", + "ai_chat.header.default_session_title": "Новый чат", + "ai_chat.header.export_time": "Время экспорта:", + "ai_chat.header.export_user": "Вы", + "ai_chat.header.mode_tabs.aria_label": "Режим работы AI", + "ai_chat.header.mode.chat": "Чат", + "ai_chat.header.mode.history": "История", + "ai_chat.header.mode.insights": "Автоинсайты", + "ai_chat.header.session.connected": "{{title}} · Подключено", + "ai_chat.header.tooltip.close": "Закрыть панель", + "ai_chat.header.tooltip.export_markdown": "Экспортировать как Markdown", + "ai_chat.header.tooltip.history": "История чатов", + "ai_chat.header.tooltip.new_chat": "Новый чат", + "ai_chat.header.tooltip.new_chat_clear": "Новый чат (очистить текущий)", + "ai_chat.header.tooltip.settings": "Настройки AI", + "ai_chat.history.action.new_chat": "Начать новый чат", + "ai_chat.history.default_session_title": "Новый чат", "ai_chat.history.empty.no_history": "Истории пока нет", + "ai_chat.history.empty.no_matches": "Нет подходящих чатов", + "ai_chat.history.search.placeholder": "Поиск по истории...", + "ai_chat.history.title": "История чатов", + "ai_chat.history.tooltip.collapse": "Свернуть", + "ai_chat.history.tooltip.delete": "Удалить", + "ai_chat.input.action.send": "Отправить", + "ai_chat.input.action.stop": "Остановить генерацию", "ai_chat.input.attachment.excel.worksheet_header": "[Лист: {{sheetName}}]", "ai_chat.input.attachment.kind.document": "Файл", "ai_chat.input.attachment.kind.excel": "Excel", @@ -5069,8 +241,10 @@ "ai_chat.input.attachment.warning.too_large": "Файл превышает {{size}}; сведения о файле были добавлены, но содержимое не считывалось.", "ai_chat.input.attachment.warning.unsupported_type": "Этот тип файла был прикреплён, но текст содержимого пока не извлекался; если модели нужно проанализировать содержимое, используйте markdown, txt, docx, xlsx или pdf.", "ai_chat.input.context.add": "Добавить", + "ai_chat.input.context.connection_tooltip": "Текущий контекст запроса данных", "ai_chat.input.context.current_count": "Текущий контекст · {{count}}", "ai_chat.input.context.label": "Связанный контекст", + "ai_chat.input.context.memory_tooltip": "Использование памяти текущего сеанса. При достижении лимита {{limit}} начнется автоматическое сжатие.", "ai_chat.input.context.selector.cancel": "Отмена", "ai_chat.input.context.selector.confirm": "Синхронизировать выбранные таблицы в контекст", "ai_chat.input.context.selector.database_placeholder": "Переключить базу данных", @@ -5080,7 +254,25 @@ "ai_chat.input.context.selector.search_placeholder": "Искать имена таблиц в текущей базе данных...", "ai_chat.input.context.selector.select_all": "Выбрать все совпавшие таблицы ({{count}})", "ai_chat.input.context.selector.title": "Привязать структуры таблиц к контексту", + "ai_chat.input.context.tag_label": "Связанный контекст ({{count}})", + "ai_chat.input.message.context_added": "Структуры таблиц добавлены в контекст: {{count}}", + "ai_chat.input.message.context_load_failed": "Не удалось загрузить контекст таблиц: {{detail}}", + "ai_chat.input.message.context_removed": "Структуры таблиц удалены из контекста: {{count}}", "ai_chat.input.message.context_sync_failed": "Не удалось синхронизировать контекст AI: {{detail}}", + "ai_chat.input.message.context_synced": "Контекст синхронизирован: добавлено {{added}}, удалено {{removed}}", + "ai_chat.input.message.fetch_table_schema_failed": "Не удалось загрузить структуру {{table}}: {{detail}}", + "ai_chat.input.message.fetch_tables_failed": "Не удалось загрузить таблицы: {{detail}}", + "ai_chat.input.message.select_database_context_first": "Перед добавлением контекста чата выберите базу данных слева", + "ai_chat.input.message.selection_unchanged": "Выбор таблиц не изменился", + "ai_chat.input.modal.empty_tables": "Нет таблиц, соответствующих «{{query}}»", + "ai_chat.input.modal.invert_matching": "Инвертировать найденные результаты", + "ai_chat.input.modal.ok": "Синхронизировать выбранные таблицы с контекстом", + "ai_chat.input.modal.search_table.placeholder": "Поиск таблиц в текущей базе данных...", + "ai_chat.input.modal.select_all_matching": "Выбрать все найденные таблицы ({{count}})", + "ai_chat.input.modal.switch_database.placeholder": "Сменить базу данных", + "ai_chat.input.modal.title": "Добавить контекст схемы таблиц базы данных", + "ai_chat.input.model.placeholder": "Выберите модель", + "ai_chat.input.placeholder": "Введите сообщение... ({{shortcut}}, Shift+Enter — новая строка, / — команды)", "ai_chat.input.placeholder_compact": "Введите сообщение... {{shortcut}} · / команды", "ai_chat.input.shortcut.disabled": "Отправка по горячей клавише отключена", "ai_chat.input.shortcut.send_with_combo": "{{shortcut}} — отправить", @@ -5110,11 +302,17 @@ "ai_chat.input.slash.connfail.keywords": "сбой подключения|cooldown|ошибка проверки|ssh|mysql", "ai_chat.input.slash.connfail.label": "🧯 Проба сбоев подключения", "ai_chat.input.slash.connfail.prompt": "Сначала вызовите inspect_recent_connection_failures, суммируйте реальные выводы из логов по недавним ошибкам подключения к базам данных, охлаждению подключений, сбоям проверки и исключениям SSH-туннелей; если уже есть понятный адрес или тип, дополнительно используйте inspect_current_connection или inspect_saved_connections, чтобы еще сузить область.", + "ai_chat.input.slash.diff.desc": "Сравнить две таблицы и создать изменения", "ai_chat.input.slash.diff.keywords": "diff|миграция|alter", + "ai_chat.input.slash.diff.label": "🔄 Сравнение таблиц", + "ai_chat.input.slash.diff.prompt": "Сравните различия структуры этих двух таблиц и создайте ALTER-выражения для миграции со старой версии на новую:", "ai_chat.input.slash.empty.description": "Сначала попробуйте эти частые точки входа, чтобы быстро перейти к генерации SQL, проверке AI или диагностике MCP.", "ai_chat.input.slash.empty.summary": "Сейчас доступно {{count}} slash-команд. Ищите по имени команды, описанию или ключевому слову.", "ai_chat.input.slash.empty.title": "Подходящих slash-команд не найдено", + "ai_chat.input.slash.explain.desc": "Объяснить логику выбранного SQL", "ai_chat.input.slash.explain.keywords": "объяснить|sql|логика", + "ai_chat.input.slash.explain.label": "💡 Объяснить SQL", + "ai_chat.input.slash.explain.prompt": "Объясните логику выполнения этого SQL и назначение каждого шага:\n```sql\n\n```", "ai_chat.input.slash.health.desc": "Запустить пробы для текущей конфигурации AI", "ai_chat.input.slash.health.keywords": "health|проверка состояния|ai конфигурация|зонд", "ai_chat.input.slash.health.label": "🩺 Проверка AI", @@ -5123,7 +321,10 @@ "ai_chat.input.slash.hotspots.keywords": "большой файл|раздутый|разделение|рефакторинг|hotspots|горячие точки кода|тысячи строк", "ai_chat.input.slash.hotspots.label": "🧱 Горячие точки кода", "ai_chat.input.slash.hotspots.prompt": "Сначала вызовите inspect_codebase_hotspots, прочитайте текущие горячие точки больших файлов фронтенда GoNavi, рекомендуемые срезы для разбиения и цели тестирования, а затем скажите, какой файл лучше разбирать следующим, какую границу выбрать и какие проверки нужно запустить. Ключевые слова:", + "ai_chat.input.slash.index.desc": "Рекомендовать оптимальный план индексов", "ai_chat.input.slash.index.keywords": "index|индекс|медленный запрос", + "ai_chat.input.slash.index.label": "📊 Рекомендации по индексам", + "ai_chat.input.slash.index.prompt": "Рекомендуйте оптимальный план индексов на основе текущей структуры таблиц и типовых сценариев запросов, а также предоставьте DDL:", "ai_chat.input.slash.mcp.desc": "Проверить сервисы MCP и состояние внешних клиентов", "ai_chat.input.slash.mcp.keywords": "mcp|codex|claude|openclaw|hermans|внешний клиент", "ai_chat.input.slash.mcp.label": "🪛 Разобрать подключение MCP", @@ -5144,19 +345,34 @@ "ai_chat.input.slash.mcptool.keywords": "mcp инструмент|аргументы mcp инструмента|schema|arguments|параметры|вызов инструмента|inputschema", "ai_chat.input.slash.mcptool.label": "🧩 Аргументы MCP-инструмента", "ai_chat.input.slash.mcptool.prompt": "Сначала вызовите inspect_mcp_setup, чтобы найти alias уже обнаруженного MCP-инструмента. Если я уже дал имя инструмента или ключевое слово, дополнительно вызовите inspect_mcp_tool_schema, прочитайте соответствующий inputSchema и скажите, какие параметры обязательны, какие типы полей, enum-значения, вложенные пути и как должен выглядеть arguments JSON.", + "ai_chat.input.slash.mock.desc": "Создать тестовые данные INSERT", "ai_chat.input.slash.mock.keywords": "mock|тестовые данные|insert", + "ai_chat.input.slash.mock.label": "🎲 Тестовые данные", + "ai_chat.input.slash.mock.prompt": "Создайте 10 реалистичных для бизнеса INSERT-выражений с тестовыми данными для текущих связанных таблиц:", + "ai_chat.input.slash.optimize.desc": "Анализировать узкие места производительности SQL", "ai_chat.input.slash.optimize.keywords": "оптимизация|индекс|производительность", + "ai_chat.input.slash.optimize.label": "⚡ Анализ оптимизации", + "ai_chat.input.slash.optimize.prompt": "Проанализируйте этот SQL на проблемы производительности и предоставьте оптимизированную версию:\n```sql\n\n```", + "ai_chat.input.slash.query.desc": "Опишите, что хотите запросить", "ai_chat.input.slash.query.keywords": "запрос|естественный язык|поиск данных", + "ai_chat.input.slash.query.label": "🔍 Запрос на естественном языке", + "ai_chat.input.slash.query.prompt": "Напишите SQL-запрос:", "ai_chat.input.slash.safety.desc": "Подтвердить границы чтения/записи и allowMutating", "ai_chat.input.slash.safety.keywords": "безопасность|только чтение|allowmutating|ddl|dml", "ai_chat.input.slash.safety.label": "🛡️ Безопасность записи", "ai_chat.input.slash.safety.prompt": "Сначала вызовите inspect_ai_safety, скажите, какие сейчас границы записи у AI и GoNavi MCP, работают ли они только на чтение и нужен ли allowMutating для execute_sql.", + "ai_chat.input.slash.schema.desc": "Оценить качество проектирования таблиц", "ai_chat.input.slash.schema.keywords": "schema|структура таблицы|дизайн", + "ai_chat.input.slash.schema.label": "🏗️ Ревью дизайна таблиц", + "ai_chat.input.slash.schema.prompt": "Проведите ревью текущего связанного дизайна таблиц, включая типы полей, нормализацию, стратегию индексов и предложения по улучшению:", "ai_chat.input.slash.shortcuts.desc": "Прочитать текущую конфигурацию сочетаний Win/Mac", "ai_chat.input.slash.shortcuts.keywords": "горячие клавиши|shortcuts|область результатов|mac|windows", "ai_chat.input.slash.shortcuts.label": "⌨️ Проба горячих клавиш", "ai_chat.input.slash.shortcuts.prompt": "Сначала вызовите inspect_shortcuts, расскажите текущую конфигурацию горячих клавиш GoNavi, особенно как на текущей платформе и на другой платформе выполняются SQL, переключение области результатов, открытие панели AI и отправка сообщений AI, и были ли изменены значения по умолчанию.", + "ai_chat.input.slash.sql.desc": "Описать требования и создать выражения", "ai_chat.input.slash.sql.keywords": "sql|создать|текст запроса", + "ai_chat.input.slash.sql.label": "📝 Создать SQL", + "ai_chat.input.slash.sql.prompt": "Создайте SQL по следующим требованиям:", "ai_chat.input.slash.tools.desc": "Выбрать нужную встроенную пробу по ключевому слову", "ai_chat.input.slash.tools.keywords": "каталог инструментов|встроенные инструменты|toolcatalog|подсказки параметров|arguments|маршрут зонда", "ai_chat.input.slash.tools.label": "🧰 Каталог инструментов", @@ -5194,8 +410,10 @@ "ai_chat.input.status.ready.description.with_context": "Сейчас подключено {{count}} контекстов со схемами таблиц. Можно отправлять запрос.", "ai_chat.input.status.ready.auto_model": "Выбрано автоматически", "ai_chat.input.status.ready.title": "AI готов: {{provider}} / {{model}}", + "ai_chat.input.tooltip.attach_table_context": "Добавить контекст таблиц базы данных", "ai_chat.input.tooltip.slash_command": "Слэш-команды", "ai_chat.input.tooltip.upload_attachment": "Загрузить вложение (изображения, Markdown, Word, Excel, PDF, текст)", + "ai_chat.input.tooltip.upload_image": "Загрузить изображение или скриншот", "ai_chat.inspection.ai_config.error.inspect_ai_chat_readiness": "Не удалось прочитать предварительные условия AI-чата", "ai_chat.inspection.ai_config.error.inspect_ai_guidance": "Не удалось прочитать текущую конфигурацию AI-промптов и Skills", "ai_chat.inspection.ai_config.error.inspect_ai_providers": "Не удалось прочитать текущую конфигурацию поставщика AI", @@ -6022,14 +1240,61 @@ "ai_chat.mcp_client.install.summary.missing": "Этот GoNavi MCP еще не подключен к {{label}}.", "ai_chat.mcp_client.install.summary.remote": "{{label}} обычно работает в облаке или на другой машине, поэтому для вызова этого GoNavi нужен удаленный MCP-мост.", "ai_chat.mcp_client.install.summary.stale": "В {{label}} уже есть старая запись GoNavi. После обновления она будет указывать на этот GoNavi.", + "ai_chat.message.action.copied": "Скопировано", + "ai_chat.message.action.copied_error_raw": "Исходный текст ошибки скопирован", + "ai_chat.message.action.copy_error_raw": "Копировать исходный текст ошибки", + "ai_chat.message.action.copy_full": "Копировать весь текст", + "ai_chat.message.action.delete": "Удалить сообщение", + "ai_chat.message.action.edit": "Редактировать это сообщение, удалить последующие записи и отправить заново", + "ai_chat.message.action.retry": "Сгенерировать заново из предыдущего сообщения пользователя", + "ai_chat.message.code.collapse": "Свернуть код", + "ai_chat.message.code.copied": "Скопировано", + "ai_chat.message.code.copy": "Копировать код", + "ai_chat.message.code.execute": "Выполнить", + "ai_chat.message.code.execute_failed": "Выполнение не удалось", + "ai_chat.message.code.execute_tooltip": "Выполнить сейчас с учетом политики безопасности AI", + "ai_chat.message.code.executing": "Выполняется...", + "ai_chat.message.code.expand_all": "Развернуть весь код", + "ai_chat.message.code.insert": "Вставить", + "ai_chat.message.code.insert_tooltip": "Вставить этот SQL в рабочую область запросов для быстрого изменения или выполнения", + "ai_chat.message.code.preview": "Предпросмотр", + "ai_chat.message.code.preview_collapse": "Свернуть", + "ai_chat.message.code.preview_result": "Результат предпросмотра (строк: {{rows}}, столбцов: {{columns}})", + "ai_chat.message.code.preview_tooltip": "Просмотреть результаты запроса в чате, максимум 20 строк", + "ai_chat.message.code.query_no_result": "Запрос не вернул результатов", + "ai_chat.message.code.view_result": "Показать результат (строк: {{rows}})", + "ai_chat.message.image_alt": "Вложенное изображение {{index}}", + "ai_chat.message.jvm.apply_diagnostic": "Применить к диагностической консоли", + "ai_chat.message.jvm.apply_preview": "Применить к предпросмотру JVM", + "ai_chat.message.jvm.diagnostic_target_not_found": "Не найдена вкладка диагностической консоли, соответствующая этому плану. Откройте исходную целевую консоль перед применением.", + "ai_chat.message.jvm.missing_diagnostic_context": "В этом диагностическом плане отсутствует контекст исходной вкладки. Сгенерируйте его заново в целевой диагностической консоли.", + "ai_chat.message.jvm.missing_plan_context": "В этом плане JVM отсутствует контекст исходной вкладки. Сгенерируйте его заново на целевой странице ресурса JVM.", + "ai_chat.message.jvm.plan_target_not_found": "Не найдена вкладка ресурса, соответствующая этому плану JVM. Откройте исходный целевой ресурс перед применением.", + "ai_chat.message.mermaid.parse_failed": "Не удалось разобрать Mermaid: {{detail}}", + "ai_chat.message.mermaid.render_failed": "Ошибка отрисовки Mermaid: {{detail}}", "ai_chat.message.render_error.body": "Остальная переписка доступна. Вы можете удалить это проблемное сообщение перед продолжением.", "ai_chat.message.render_error.delete": "Удалить это сообщение", "ai_chat.message.render_error.retry": "Повторить рендеринг", "ai_chat.message.render_error.title": "Это сообщение AI не удалось отобразить, поэтому оно изолировано", "ai_chat.message.render_error.unknown": "Неизвестная ошибка рендеринга", + "ai_chat.message.role.user": "Вы", + "ai_chat.message.security.blocked": "🔒 Политика безопасности заблокировала этот SQL: текущий уровень безопасности не разрешает операции {{operationType}}. Измените уровень безопасности в настройках AI.", + "ai_chat.message.security.confirm_execute": "Выполнить", + "ai_chat.message.security.confirm_title": "⚠️ Подтверждение безопасности", + "ai_chat.message.security.default_warning": "Этот SQL является операцией {{operationType}}. Выполнить?", + "ai_chat.message.thinking.active": "Идет рассуждение...", + "ai_chat.message.thinking.count": "({{count}} симв.)", + "ai_chat.message.thinking.title": "Ход рассуждений", + "ai_chat.message.tool_call.done": "Проверки данных завершены ({{count}})", + "ai_chat.message.tool_call.execute_sql": "Выполнить проверку SQL только для чтения", "ai_chat.message.tool_call.get_all_columns": "Суммировать столбцы по таблицам", + "ai_chat.message.tool_call.get_columns": "Проверить реальные определения столбцов", + "ai_chat.message.tool_call.get_connections": "Загрузить доступные подключения", + "ai_chat.message.tool_call.get_databases": "Сканировать список баз данных", "ai_chat.message.tool_call.get_foreign_keys": "Сопоставить связи внешних ключей", "ai_chat.message.tool_call.get_indexes": "Проверить определения индексов", + "ai_chat.message.tool_call.get_table_ddl": "Извлечь выражение CREATE TABLE", + "ai_chat.message.tool_call.get_tables": "Анализировать сведения о структуре таблиц", "ai_chat.message.tool_call.get_triggers": "Проверить логику триггеров", "ai_chat.message.tool_call.inspect_active_tab": "Прочитать текущую активную вкладку", "ai_chat.message.tool_call.inspect_ai_chat_readiness": "Прочитать состояние готовности AI-чата к отправке", @@ -6067,14 +1332,132 @@ "ai_chat.message.tool_call.inspect_table_bundle": "Получить полный снимок структуры таблицы", "ai_chat.message.tool_call.inspect_workspace_tabs": "Проверить текущие вкладки рабочей области", "ai_chat.message.tool_call.preview_table_rows": "Предпросмотр реальных примерных данных", + "ai_chat.message.tool_call.running": "Выполняются проверки данных...", + "ai_chat.message.tool_result.char_count": "{{count}} симв.", + "ai_chat.message.tool_result.no_data": "Нет данных", + "ai_chat.message.tool_result.title": "Результат проверки ({{name}})", + "ai_chat.message.wait.connecting": "Подключение", + "ai_chat.panel.error.html_response": "Сервер вернул необычный HTML-ответ; возможно, истекло время ожидания шлюза или служба недоступна", + "ai_chat.panel.error.http_server": "Ошибка сервера HTTP {{code}}", + "ai_chat.panel.error.truncated_suffix": "...(обрезано)", + "ai_chat.panel.error.unknown": "Неизвестная ошибка", + "ai_chat.panel.history.empty": "Истории чатов пока нет", + "ai_chat.panel.insight.context.empty_body": "При открытии AI со страницы таблицы текущая таблица связывается автоматически. Контекст также можно добавить вручную над полем ввода.", + "ai_chat.panel.insight.context.empty_title": "Структура таблиц пока не связана", + "ai_chat.panel.insight.context.linked_body": "В этот диалог включен контекст структуры для {{tables}}.", + "ai_chat.panel.insight.context.linked_title": "Связано таблиц: {{count}}", + "ai_chat.panel.insight.context.more_tables_suffix": " и другие таблицы", + "ai_chat.panel.insight.context.table_separator": ", ", + "ai_chat.panel.insight.query.empty_body": "После выполнения запроса здесь появятся SQL-подсказки для анализа оптимизации.", + "ai_chat.panel.insight.query.empty_title": "Пока нет образцов длительности запросов", + "ai_chat.panel.insight.query.slowest_title": "Самый медленный недавний запрос {{duration}}ms", + "ai_chat.panel.insight.status.empty_body": "Журналов SQL пока нет.", + "ai_chat.panel.insight.status.failed_title": "Недавние сбои запросов: {{count}}", + "ai_chat.panel.insight.status.ok_title": "Недавние запросы в норме", + "ai_chat.panel.insight.status.recent_body": "Записано недавних SQL: {{count}}. Можно сразу попросить AI объяснить или оптимизировать их.", + "ai_chat.panel.insight.write.detected_body": "Для SQL с записью перед фиксацией лучше сгенерировать предпросмотр и операторы отката.", + "ai_chat.panel.insight.write.detected_title": "Обнаружено операций записи: {{count}}", + "ai_chat.panel.insight.write.readonly_body": "По умолчанию AI сначала объясняет, генерирует SELECT, анализирует Schema и оптимизирует индексы.", + "ai_chat.panel.insight.write.readonly_title": "Сейчас основной режим - анализ только для чтения", + "ai_chat.panel.jvm_diagnostic.permission.allowed": "разрешено", + "ai_chat.panel.jvm_diagnostic.permission.forbidden": "запрещено", + "ai_chat.panel.jvm_diagnostic.policy.plan_first": "Диагностические команды можно генерировать, но всегда сначала давай план и оставляй пользователю решение о выполнении.", + "ai_chat.panel.jvm_diagnostic.policy.read_only": "По умолчанию отвечай в режиме диагностики только для чтения; генерируй только команды observe, trace и устранения неполадок и не предполагай, что что-либо уже выполнено.", + "ai_chat.panel.jvm_runtime.policy.preview_required": "Подключение доступно для записи, но каждое изменение должно сначала создать предпросмотр и дождаться подтверждения человеком.", + "ai_chat.panel.jvm_runtime.policy.read_only": "Подключение только для чтения; только анализируй и генерируй планы изменений, и никогда не предполагай, что записи уже выполнены.", + "ai_chat.panel.jvm_runtime.resource_path.current": "Текущий resourcePath: {{resourcePath}}", + "ai_chat.panel.jvm_runtime.resource_path.missing": "Конкретный resourcePath сейчас не выбран.", + "ai_chat.panel.local_tool.execute_sql.description": "Выполняет SQL-запрос в указанном подключении и базе данных, затем возвращает результат. Управляется уровнем безопасности: в режиме только для чтения разрешены только SELECT/SHOW/DESCRIBE и похожие операции запроса. Возвращает не более 50 строк.", + "ai_chat.panel.local_tool.get_columns.description": "Получает список field для указанной таблицы, включая имена field, типы, признак NULL, значения по умолчанию, комментарии и другие метаданные. Перед генерацией SQL обязательно вызови этот инструмент, чтобы подтвердить реальные имена field; не угадывай имена field.", + "ai_chat.panel.local_tool.get_connections.description": "Если нужно запросить или изменить данные в базе, но пользователь не выбрал контекст подключения, получает все подключения к базам данных, доступные в приложении. Возвращаемые данные включают ID подключения (id) и имя (name).", + "ai_chat.panel.local_tool.get_databases.description": "Получает имена всех баз данных (Database/Schema) в указанном подключении (connectionId).", + "ai_chat.panel.local_tool.get_table_ddl.description": "Получает полный CREATE TABLE DDL для указанной таблицы, включая fields, индексы, ограничения и полную информацию о структуре.", + "ai_chat.panel.local_tool.get_tables.description": "После того как целевое подключение и dbName известны, если пользователь спрашивает о таблице или неявно упоминает ее, но точный tableName неизвестен, вызови этот инструмент, чтобы получить список всех имен таблиц в этой базе данных (только имена таблиц) и определить целевую таблицу.", + "ai_chat.panel.local_tool.param.connection_id": "connectionId (ID подключения)", + "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId (из get_connections)", + "ai_chat.panel.local_tool.param.db_name": "dbName (имя базы данных)", + "ai_chat.panel.local_tool.param.sql": "SQL-выражение для выполнения", + "ai_chat.panel.local_tool.param.table_name": "tableName (имя таблицы)", + "ai_chat.panel.message.empty_response": "❌ Модель не вернула содержимое. Возможны ограничение частоты, перегрузка контекста или отказ.", + "ai_chat.panel.message.error": "❌ Ошибка: {{detail}}", + "ai_chat.panel.message.request_interrupted": "❌ Запрос прерван: конкретный ответ не получен.", + "ai_chat.panel.message.send_failed": "❌ Не удалось отправить: {{detail}}", + "ai_chat.panel.message.service_not_ready": "❌ AI Service не готов", + "ai_chat.panel.model_control.continue_after_summary": "На основе последнего состояния и результатов исследования выше продолжи незавершенный анализ или выполни следующий шаг.", + "ai_chat.panel.model_control.force_tool_call": "Используй function call напрямую, чтобы вызвать инструмент и выполнить операцию; не ограничивайся текстовым описанием плана.", + "ai_chat.panel.notice.fetch_models_failed": "Не удалось получить список моделей: {{detail}}", + "ai_chat.panel.probe.consecutive_failed": "⚠️ Проверки завершились ошибкой 3 раунда подряд и были остановлены. Проверьте состояние подключения и повторите попытку.", + "ai_chat.panel.probe.max_rounds": "⚠️ Вызовы инструментов достигли лимита {{count}} раундов и были остановлены. Отправьте новое сообщение, чтобы продолжить исследование.", + "ai_chat.panel.prompt.jvm_diagnostic": "Ты диагностический помощник JVM в GoNavi. Текущая вкладка — Arthas-совместимый диагностический рабочий стол, цель — вывести структурированный диагностический план, который можно вставить обратно в диагностическую консоль.\n\nТекущее подключение: {{connectionName}}\nЦелевой хост: {{host}}\nДиагностический transport: {{transport}}\nСреда: {{environment}}\nПолитика подключения: {{readOnlyPolicy}}\nРазрешения команд: observe={{observePolicy}}, trace={{tracePolicy}}, mutating={{mutatingPolicy}}\n\nПравила ответа:\n1. Можно начать с короткого анализа, но ответ должен содержать ровно один блок ```json.\n2. Поля JSON строго ограничены intent, transport, command, riskLevel, reason, expectedSignals.\n3. Поле transport должно совпадать с диагностическим transport выше; не выдумывай другой transport.\n4. command должен быть одной диагностической командой без shell-приглашения, склейки строк, нескольких команд или code fence.\n5. riskLevel может быть только low, medium или high.\n6. expectedSignals должен быть массивом строк с сигналами, за которыми нужно следить после выполнения.\n7. Если разрешения запрещают категорию операций, не выводи команды этой категории; если запрос нельзя выполнить, прямо объясни ограничение.", + "ai_chat.panel.prompt.jvm_runtime": "Ты помощник GoNavi для анализа JVM runtime. Текущий контекст — не SQL, а рабочий стол ресурсов JVM.\n\nТекущее подключение: {{connectionName}}\nЦелевой хост: {{host}}\nProvider mode: {{providerMode}}\nСреда: {{environment}}\nПолитика подключения: {{connectionPolicy}}\nСтатус resourcePath: {{resourcePathStatus}}\n\nПравила ответа:\n1. Можно объяснять структуру ресурсов, риски, рекомендации по изменениям и рекомендации по откату.\n2. Если пользователь просит создать план изменения JVM, выведи ровно один блок ```json и строго ограничь поля JSON списком targetType, selector, action, payload, reason.\n3. Для action предпочитай значения, уже объявленные в текущем снимке ресурса или метаданных как supportedActions; если текущий ресурс их не объявляет, выводи их осторожно по содержимому снимка.\n4. Для selector.resourcePath предпочитай текущий resourcePath; если текущий путь неизвестен, прямо скажи, что точное наведение невозможно, и не выдумывай путь.\n5. payload должен использовать только {\"format\":\"json\",\"value\":{...}} или {\"format\":\"text\",\"value\":\"...\"}; не выводи скрипты, команды или голые значения.\n6. Не выводи скрипты, команды или утверждения вроде уже успешно выполнено.", + "ai_chat.panel.prompt.memory_summary": "Это история слишком длинного диалога. Чтобы освободить место в контексте и сохранить ядро памяти, внимательно прочитай ее и подготовь сильно сжатое структурированное резюме на основе технических фактов, исследованного состояния структур данных, центрального запроса пользователя и текущего прогресса.\nПримечания:\n1. Будь объективным и точным; не пропускай важную бизнес-логику и найденные имена таблиц/полей.\n2. Убери незначимые шаги выполнения, вежливые фразы и сами JSON-возвраты.\n3. Удерживай объем примерно в 1000-2000 слов и выводи только сжатый Markdown.\n4. Начинай сразу с резюме; не добавляй приветствия.", + "ai_chat.panel.prompt.sql.context_tables": "Ты профессиональный помощник по базам данных. Текущий тип базы данных: {{dbDisplayType}}. Генерируй SQL в этом диалекте. Ниже приведен связанный DDL структуры таблиц, предоставленный пользователем; учитывай его в первую очередь при ответе:\n\n{{ddlChunks}}", + "ai_chat.panel.prompt.sql.current_database": "Ты профессиональный помощник по базам данных. Текущий тип базы данных: {{dbDisplayType}}, текущее имя базы данных: {{targetDbName}}. Если пользователю нужна информация о конкретной таблице или текущей базе, можно активно вызвать предоставленный инструмент get_tables, чтобы получить сведения о таблицах.", + "ai_chat.panel.prompt.sql.no_connections": "Ты профессиональный помощник по базам данных. Сейчас в приложении нет доступных подключений к базам данных.\n\nЕсли вопрос пользователя требует структуры базы данных или SQL, сначала объясни, что get_connections, get_databases, get_tables и get_columns не могут получить реальные сведения о базе без существующего подключения, затем попроси пользователя создать подключение и повторить попытку. Не угадывай connectionId, dbName, имена таблиц или имена полей.\n\nНа общие вопросы, не связанные с запросами к базе данных, отвечай обычно.", + "ai_chat.panel.prompt.sql.no_context": "Ты профессиональный помощник по базам данных. Пользователь сейчас не выбрал в интерфейсе конкретную базу данных или таблицу как контекст.\n\nВажные правила:\n1. Если нужно помочь пользователю найти целевую таблицу, никогда не угадывай имена таблиц. Обязательно вызывай инструменты, чтобы получить реальные данные.\n2. Полный процесс: get_connections → get_databases → get_tables → get_columns → сгенерировать SQL. Нельзя пропускать ни один шаг.\n3. [Приоритет подключений - критично] После получения списка подключений ищи в таком порядке:\n - Первый приоритет: подключения, у которых host равен localhost, 127.0.0.1 или означает локальную машину\n - Второй приоритет: подключения, у которых name или host содержит dev или local, либо host является внутренним IP, например 10.x, 192.168.x или 172.16-31.x\n - Третий приоритет: другие подключения, например test или production\n Если целевая таблица найдена в подключении с более высоким приоритетом, используй это подключение напрямую и не ищи дальше в подключениях с более низким приоритетом.\n4. Если целевая таблица не найдена в текущей базе данных, продолжай проверять другие базы; не сдавайся.\n5. Останавливайся только после проверки всех возможных баз данных или после того, как целевая таблица явно найдена.\n6. На общие вопросы, не связанные с запросами к базе данных, отвечай обычно.\n\nПравила генерации SQL (критично, строго соблюдать):\n7. [Точность полей - абсолютное правило] Перед генерацией SQL обязательно вызови get_columns, чтобы получить реальный список полей целевой таблицы. Каждое имя поля в SQL должно точно совпадать со значением field, возвращенным get_columns, включая регистр. Не выдумывай, не сокращай и не выводи имена полей по предположению. Например, если поле называется channel, пиши channel, а не pay_channel.\n8. При генерации SQL не используй квалифицированный префикс формата \"database.table\"; пиши только само имя таблицы.\n9. При отчете о результатах имя/ID подключения и имя базы данных должны строго происходить из фактических параметров одного и того же вызова get_tables. Не смешивай connectionId одного подключения с dbName другого.\n10. Если есть несколько баз с похожими именами, ясно сообщи пользователю, в какой именно базе находится целевая таблица.\n11. [Обязательно] Первая строка каждого SQL-блока должна содержать комментарий объявления контекста строго в таком формате: -- @context connectionId= dbName=<имя базы данных>. connectionId и dbName должны происходить из одного успешного вызова get_tables, то есть из фактических значений параметров, переданных тобой в этот вызов. Пример:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\nТекущие доступные подключения: [{{connList}}]", + "ai_chat.panel.render_error.delete": "Удалить это сообщение", + "ai_chat.panel.render_error.description": "Остальная переписка остается доступной. Можно удалить это проблемное сообщение и продолжить.", + "ai_chat.panel.render_error.retry": "Повторить отрисовку", + "ai_chat.panel.render_error.title": "Это сообщение AI не удалось отрисовать, поэтому оно изолировано", + "ai_chat.panel.render_error.unknown": "Неизвестная ошибка отрисовки", + "ai_chat.panel.session.default_title": "Новый чат", + "ai_chat.panel.status.analyzing_chain": "Глубокий анализ цепочки и логики", + "ai_chat.panel.status.deep_reasoning": "Модель выполняет глубокое рассуждение", + "ai_chat.panel.status.memory_compress_failed": "❌ Сжатие памяти не удалось. Продолжаем с исходным контекстом...", + "ai_chat.panel.status.memory_compressing": "⚙️ Диалог перегружен. Запускается сжатие памяти...", + "ai_chat.panel.status.memory_probe_summary": "[Автоматическое перестроение памяти] Длинная история проверок и чат сжаты в резюме:\n\n{{summary}}", + "ai_chat.panel.status.memory_summary": "[Автоматическое перестроение памяти] Длинная история сжата в резюме:\n\n{{summary}}", + "ai_chat.panel.status.model_connecting": "Подключение к модели", + "ai_chat.panel.status.returning_runtime_data": "Передача данных выполнения модели", + "ai_chat.panel.status.summarizing_probe": "Сводка результатов проверок", + "ai_chat.panel.status.waiting_instruction": "Ожидание инструкции операции", + "ai_chat.panel.status.waiting_response": "Ожидание ответа модели", + "ai_chat.panel.status.waking_engine": "Пробуждение механизма рассуждений", + "ai_chat.panel.tool_error.connection_not_found": "Подключение не найдено", "ai_chat.panel.tool_error.fetch_all_columns_failed": "Не удалось получить сводку столбцов по базе данных: {{detail}}", + "ai_chat.panel.tool_error.fetch_columns_failed": "Не удалось получить список столбцов: {{detail}}", + "ai_chat.panel.tool_error.fetch_databases_failed": "Не удалось получить список баз данных: {{detail}}", "ai_chat.panel.tool_error.fetch_foreign_keys_failed": "Не удалось получить связи внешних ключей: {{detail}}", "ai_chat.panel.tool_error.fetch_indexes_failed": "Не удалось получить определения индексов: {{detail}}", + "ai_chat.panel.tool_error.fetch_table_ddl_failed": "Не удалось получить выражение CREATE TABLE: {{detail}}", + "ai_chat.panel.tool_error.fetch_tables_failed": "Не удалось получить список таблиц: {{detail}}", "ai_chat.panel.tool_error.fetch_triggers_failed": "Не удалось получить определения триггеров: {{detail}}", "ai_chat.panel.tool_error.mcp_failed": "Не удалось вызвать инструмент MCP", "ai_chat.panel.tool_error.mcp_failed_with_detail": "Не удалось вызвать инструмент MCP: {{detail}}", "ai_chat.panel.tool_error.preview_table_rows_failed": "Не удалось просмотреть пример данных таблицы: {{detail}}", + "ai_chat.panel.tool_error.sql_blocked": "Политика безопасности заблокировала этот запрос: текущий уровень безопасности не разрешает {{operationType}} SQL. Покажите SQL пользователю и попросите выполнить его вручную.", + "ai_chat.panel.tool_error.sql_execute_exception": "Исключение при выполнении SQL: {{detail}}", + "ai_chat.panel.tool_error.sql_execute_failed": "Не удалось выполнить SQL", "ai_chat.panel.tool_error.table_name_required": "tableName не может быть пустым", + "ai_chat.panel.tool_error.unknown_function": "Неизвестная функция: {{functionName}}", + "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ Ниже приведен точный список полей таблицы {{tableName}}. При создании SQL используй только эти значения field как имена столбцов, строго без изменений. Не изменяй, не сокращай и не придумывай имена полей.\nДоступные поля: {{fieldNames}}\nПодробности: {{detailJson}}", + "ai_chat.quick_action.explain_schema": "🔍 Объяснить схему", + "ai_chat.quick_action.explain_schema.hint.with_context": "Пояснить поля и ограничения", + "ai_chat.quick_action.explain_schema.prompt.with_context": "Подробно объясните замысел дизайна и значения полей этих таблиц: {{tables}}", + "ai_chat.quick_action.explain_schema.title": "Объяснить схему", + "ai_chat.quick_action.explain_sql": "🔍 Объяснить SQL", + "ai_chat.quick_action.explain_sql.hint.default": "Объяснить логику выполнения", + "ai_chat.quick_action.explain_sql.prompt.default": "Объясните логику выполнения этого SQL-выражения:\n```sql\n\n```", + "ai_chat.quick_action.explain_sql.title": "Объяснить SQL", + "ai_chat.quick_action.generate_sql": "📝 Создать SQL", + "ai_chat.quick_action.generate_sql.hint.default": "Создать запрос из естественного языка", + "ai_chat.quick_action.generate_sql.hint.with_context": "Создать запрос из естественного языка", + "ai_chat.quick_action.generate_sql.prompt.default": "Создайте запрос на основе текущей структуры таблиц базы данных:", + "ai_chat.quick_action.generate_sql.prompt.with_context": "Создайте часто используемый запрос для этих структур таблиц: {{tables}}", + "ai_chat.quick_action.generate_sql.title": "Создать SQL", + "ai_chat.quick_action.optimize": "⚡ Советы по оптимизации", + "ai_chat.quick_action.optimize.hint.default": "Советы по производительности и индексам", + "ai_chat.quick_action.optimize.hint.with_context": "Индексы, нормализация и риски", + "ai_chat.quick_action.optimize.prompt.default": "Проанализируйте производительность этого SQL-выражения и предложите оптимизации:\n```sql\n\n```", + "ai_chat.quick_action.optimize.prompt.with_context": "Проанализируйте дизайн структуры этих таблиц и предложите оптимизации индексов и производительности запросов: {{tables}}", + "ai_chat.quick_action.optimize.title": "Советы по оптимизации", + "ai_chat.quick_action.schema_analysis": "🏗️ Анализ схемы", + "ai_chat.quick_action.schema_analysis.hint.default": "Анализ качества структуры", + "ai_chat.quick_action.schema_analysis.hint.with_context": "Связи таблиц и граф зависимостей", + "ai_chat.quick_action.schema_analysis.prompt.default": "Проанализируйте текущую структуру таблиц базы данных и предложите оптимизации.", + "ai_chat.quick_action.schema_analysis.prompt.with_context": "Выполните полный Schema-анализ этих таблиц, включая выбор типов данных, проверку нормализации и предложения по улучшению: {{tables}}", + "ai_chat.quick_action.schema_analysis.title": "Анализ Schema", + "ai_chat.quick_action.table_separator": ", ", "ai_chat.system.context.custom_prompt.database": "Пользователь добавил дополнительный пользовательский prompt для сеанса базы данных. Следуй ему, если он не противоречит правилам безопасности и фактам:\n{{content}}", "ai_chat.system.context.custom_prompt.global": "Пользователь добавил дополнительный пользовательский prompt для глобального контекста. Следуй ему, если он не противоречит правилам безопасности и фактам:\n{{content}}", "ai_chat.system.context.custom_prompt.jvm": "Пользователь добавил дополнительный пользовательский prompt для анализа JVM-ресурсов. Следуй ему, если он не противоречит правилам безопасности и фактам:\n{{content}}", @@ -6131,6 +1514,17 @@ "ai_chat.system.inspection_guidance.inspect_sql_editor_transaction": "Если пользователь спрашивает про SQL editor manual commit/autocommit, uncommitted transactions, будет ли DML auto-commit или transaction semantics, сначала вызови inspect_sql_editor_transaction и прочитай реальные commit settings и pending transactions.", "ai_chat.system.inspection_guidance.inspect_sql_risk": "Если пользователь просит execute, delete, update, run DDL, run bulk SQL или спрашивает, можно ли выполнить SQL / опасен ли он, сначала вызови inspect_sql_risk и проверь statement count, write/DDL risk, WHERE conditions и safety policy; при high risk сначала объясни и запроси confirmation.", "ai_chat.system.inspection_guidance.inspect_sql_snippets": "Если пользователь упоминает SQL snippets, snippet templates, template prefixes или common templates, сначала вызови inspect_sql_snippets и прочитай local SQL snippet library, не выдумывай существующие templates.", + "ai_chat.tools.mcp_fallback_description": "MCP-инструмент {{toolName}} от {{serverName}}", + "ai_chat.welcome.description.default": "Я ваш помощник по базам данных. Я могу помочь создавать SQL-запросы, анализировать схемы, объяснять логику выполнения и оптимизировать производительность базы данных.", + "ai_chat.welcome.description.with_context": "Связано структур таблиц: {{count}}. Используйте быстрые действия ниже, чтобы начать анализ.", + "ai_chat.welcome.suggestion.channel_distribution.default": "Распределение каналов заказов за последние 7 дней", + "ai_chat.welcome.suggestion.channel_distribution.with_context": "Распределение ключевых каналов за последние 7 дней", + "ai_chat.welcome.suggestion.cleanup.default": "Помоги написать SQL для очистки аномальных данных", + "ai_chat.welcome.suggestion.cleanup.with_context": "Помоги написать SQL для отключения аномальных каналов", + "ai_chat.welcome.suggestion.divider": "Или задайте вопрос напрямую", + "ai_chat.welcome.suggestion.low_rows.default": "Почему в текущем результате так мало строк?", + "ai_chat.welcome.suggestion.low_rows.with_context": "Почему в {{table}} так мало строк?", + "ai_chat.welcome.title": "Здравствуйте, я GoNavi AI", "ai_service.backend.builtin_prompt.body.data_analyze": "Ты AI-ассистент GoNavi, опытный эксперт по анализу данных с острым деловым чутьем. Изучи образец данных, полученный запросом пользователя, и извлеки из него скрытую ценную информацию.\n\nЦели анализа:\n1. Жесткая статистика: суммируй общее число строк и ключевые числовые метрики, например экстремумы, средние значения и агрегированные медианы.\n2. Тренды и аномалии: если в данных есть временные метки, выяви рост или снижение; если есть выбросы, явно выдели их.\n3. Поиск бизнес-ценности: не просто пересказывай данные. Объедини видимые паттерны с AI-суждением и дай одну конструктивную рекомендацию к действию для бизнес-руководителей или разработчиков.\n4. Формат представления: оформи анализ как краткий мини-отчет с заголовком и сжатыми пунктами, избегая плоского механического пересказа.", "ai_service.backend.builtin_prompt.body.general_chat": "Вы — AI-ассистент GoNavi, специализированная экспертная система, глубоко встроенная в клиент GoNavi для баз данных и кэшей.\nВаша цель — быть самым полезным вторым мозгом для разработчиков, DBA и специалистов по данным, предоставляя профессиональные, точные и перспективные решения для задач на стороне данных.\n\nКлючевой образ и тон взаимодействия:\n- Профессиональная основательность: уверенно оценивайте продукты баз данных, такие как MySQL, PostgreSQL, DuckDB и Redis, включая планы выполнения, индексацию и поведение хранения.\n- Прямота и практичность: избегайте пустых вступлений. Если намерение пользователя ясно, начинайте с элегантного кода или шагов, которые можно сразу применить.\n- Структурированность и читаемость: используйте заголовки Markdown, выделение и блоки кода с корректным идентификатором языка, например sql, json или bash.\n- Безопасность production прежде всего: если SQL может создать серьезный риск, например DELETE или UPDATE без WHERE либо запрос, способный заблокировать большую production-таблицу, сначала дайте четкое предупреждение.\n\nКарта возможностей:\n1. От естественного языка к операциям с данными: переводите человеческое намерение в точные запросы или команды.\n2. Объяснение выполнения: раскрывайте логику и последствия для производительности, стоящие за запросами.\n3. Экспертная оптимизация: находите узкие места и предлагайте стратегии индексации, переписывания или выполнения.\n4. Аналитика данных: извлекайте значимые закономерности из результатов, а не просто пересказывайте строки.\n5. Архитектурный обзор: оценивайте ограничения схемы и предлагайте пути развития, устойчивые к росту данных.\n\nПравила взаимодействия:\n- Используйте профессиональный, совместный стиль и адаптируйтесь к языку интерфейса, выбранному пользователем.\n- Когда пользователь просит код для базы данных, учитывайте лучшие практики соответствующего движка. Если точная версия неизвестна, берите за основу стандартный подход и отмечайте важные различия версий, например оконные функции MySQL 8.\n- Не отказывайте слишком быстро: если пользователь просит SQL, но подробная DDL не приложена, используйте контекст диалога и список простых имен таблиц, чтобы определить вероятную целевую таблицу. Если это невозможно, объясните, что известно, и уточните, какую таблицу нужно запросить.", "ai_service.backend.builtin_prompt.body.schema_insight": "Ты AI-ассистент GoNavi, главный архитектор баз данных, отвечающий за полный жизненный цикл базы. В этом режиме строго проверь предоставленные пользователем структуры таблиц с точки зрения нормализации и будущей эволюции.\n\nФокус проверки:\n1. Компромиссы нормализации: найди явные денормализованные решения и оцени, помогает ли избыточность производительности или является ошибкой проектирования.\n2. Надежность индексов: оцени выбор первичных ключей, например auto-increment против UUID, избыточные индексы, замедляющие запись, и пропущенные часто используемые составные индексы.\n3. Прогноз физического объема: проверь распределение типов данных, например слишком большие VARCHAR или ненужные BIGINT, которые могут расходовать хранилище впустую.\n4. Практические указания в коде: если есть структурные дефекты, не ограничивайся критикой. При необходимости предложи конкретные ALTER TABLE-скрипты для улучшения.", @@ -6159,6 +1553,15 @@ "ai_service.backend.database_context.unique_index": " (уникальный)", "ai_service.backend.database_context.value_no": "Нет", "ai_service.backend.database_context.value_yes": "Да", + "ai_service.backend.error.active_provider_not_found": "Активный AI Provider не найден", + "ai_service.backend.error.config_dir_create_failed": "Не удалось создать каталог конфигурации: {{detail}}", + "ai_service.backend.error.config_load_failed": "Не удалось загрузить конфигурацию AI: {{detail}}", + "ai_service.backend.error.config_read_failed": "Не удалось прочитать конфигурацию AI: {{detail}}", + "ai_service.backend.error.config_rewrite_failed": "Не удалось перезаписать конфигурацию AI: {{detail}}", + "ai_service.backend.error.config_serialize_failed": "Не удалось сериализовать конфигурацию AI: {{detail}}", + "ai_service.backend.error.config_write_failed": "Не удалось записать конфигурацию AI: {{detail}}", + "ai_service.backend.error.daily_secret_store_unavailable": "Daily secret store недоступен: {{detail}}", + "ai_service.backend.error.editable_provider_not_found": "AI Provider для редактирования не найден: {{detail}}", "ai_service.backend.error.mcp_command_required": "Команда MCP не может быть пустой", "ai_service.backend.error.mcp_http_executable_resolve_failed": "Не удалось определить текущий исполняемый файл GoNavi: {{detail}}", "ai_service.backend.error.mcp_http_health_status_failed": "healthz вернул HTTP {{statusCode}}", @@ -6172,16 +1575,86 @@ "ai_service.backend.error.mcp_tool_alias_invalid": "Недопустимый псевдоним инструмента MCP: {{alias}}", "ai_service.backend.error.mcp_tool_arguments_parse_failed": "Не удалось разобрать аргументы инструмента MCP: {{detail}}", "ai_service.backend.error.mcp_transport_unsupported": "Неподдерживаемый transport MCP: {{transport}}", + "ai_service.backend.error.models_http_status_failed": "Эндпоинт списка моделей вернул неожиданный статус (HTTP {{status}}){{body}}", + "ai_service.backend.error.models_parse_failed": "Не удалось разобрать список моделей: {{detail}}", + "ai_service.backend.error.models_request_create_failed": "Не удалось создать запрос списка моделей: {{detail}}", + "ai_service.backend.error.models_request_failed": "Не удалось запросить список моделей: {{detail}}", + "ai_service.backend.error.provider_auth_failed": "API Key недействителен или запрос был отклонен (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_server_error": "Вышестоящий сервер вернул внутреннюю ошибку (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_status_failed": "Эндпоинт вернул неожиданный статус (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_not_configured": "AI Provider не настроен. Сначала настройте его в параметрах.", + "ai_service.backend.error.provider_request_create_failed": "Не удалось создать запрос: {{detail}}", + "ai_service.backend.error.provider_request_serialize_failed": "Не удалось сериализовать запрос: {{detail}}", + "ai_service.backend.error.provider_secret_bundle_parse_failed": "Не удалось разобрать provider secret bundle: {{detail}}", + "ai_service.backend.error.provider_secret_delete_failed": "Не удалось удалить Provider secret: {{detail}}", + "ai_service.backend.error.provider_secret_load_failed": "Не удалось загрузить AI Provider secret (provider={{provider}}): {{detail}}", + "ai_service.backend.error.provider_secret_read_failed": "Не удалось прочитать Provider secret: {{detail}}", + "ai_service.backend.error.provider_secret_save_failed": "Не удалось сохранить Provider secret: {{detail}}", + "ai_service.backend.error.provider_secret_saved_read_failed": "Не удалось прочитать сохраненный Provider secret: {{detail}}", + "ai_service.backend.error.provider_test_failed": "Проверка подключения не удалась: {{detail}}", + "ai_service.backend.error.secret_store_unavailable": "Secret store недоступен: {{detail}}", + "ai_service.backend.error.session_corrupt": "Данные сеанса повреждены", + "ai_service.backend.error.session_delete_failed": "Не удалось удалить сеанс: {{detail}}", + "ai_service.backend.error.session_missing": "Сеанс не существует", + "ai_service.backend.error.session_serialize_failed": "Не удалось сериализовать данные сеанса: {{detail}}", + "ai_service.backend.error.session_write_failed": "Не удалось сохранить сеанс: {{detail}}", + "ai_service.backend.error.sessions_dir_create_failed": "Не удалось создать каталог sessions: {{detail}}", + "ai_service.backend.error.volcengine_coding_models_empty": "Текущий эндпоинт не вернул доступные модели Volcengine Coding Plan. Проверьте права аккаунта или переключитесь на Provider \"Volcengine Ark\"", "ai_service.backend.message.mcp_test_success": "Подключение к службе MCP успешно, найдено {{count}} инструментов", + "ai_service.backend.message.provider_test_success": "Проверка подключения к эндпоинту выполнена успешно", "ai_service.backend.message.skill_unnamed": "Skill без имени", "ai_service.backend.provider.image_fallback_prompt": "Опишите и проанализируйте это изображение.", "ai_service.backend.provider.image_omitted_notice": "[Изображение пропущено: текущая модель или вышестоящий API не поддерживает ввод изображений. Переключитесь на модель с поддержкой зрения и отправьте изображение повторно.]", + "ai_service.backend.warning.sql_delete_without_where": "SQL высокого риска: DELETE без WHERE удалит все строки", + "ai_service.backend.warning.sql_drop": "SQL высокого риска: DROP безвозвратно удаляет объекты базы данных", + "ai_service.backend.warning.sql_truncate": "SQL высокого риска: TRUNCATE удаляет все строки из таблицы", + "ai_service.backend.warning.sql_update_without_where": "SQL высокого риска: UPDATE без WHERE обновит все строки", + "ai_settings.action.back": "Назад", + "ai_settings.action.connection_ok": "Подключение в порядке", + "ai_settings.action.retest": "Проверить снова", + "ai_settings.action.save": "Сохранить", + "ai_settings.action.test": "Проверить подключение", + "ai_settings.clipboard.error.unsupported": "Копирование в буфер обмена не поддерживается в текущей среде", + "ai_settings.context.description": "Управляет объемом контекста базы данных, отправляемым AI", + "ai_settings.context.schema_only.desc": "AI получает только структуру таблиц и столбцов", + "ai_settings.context.schema_only.label": "Только схема", + "ai_settings.context.with_results.desc": "Передает последние результаты запросов как контекст", + "ai_settings.context.with_results.label": "С результатами запросов", + "ai_settings.context.with_samples.desc": "Добавляет небольшой объем примеров данных, чтобы AI лучше понимал их особенности", + "ai_settings.context.with_samples.label": "С примерами данных", + "ai_settings.form.api_endpoint": "API Endpoint (URL)", + "ai_settings.form.api_endpoint_required": "Введите корректный URL конечной точки", "ai_settings.form.api_endpoint_placeholder.codebuddy": "Оставьте пустым, чтобы использовать шлюз CodeBuddy CLI по умолчанию", + "ai_settings.form.api_format": "Формат API", + "ai_settings.form.api_key": "API Key", "ai_settings.form.api_key.codebuddy_optional": "API Key / Auth Token (необязательно)", "ai_settings.form.api_key.codebuddy_hint": "Оставьте пустым, чтобы использовать уже выполненный на этом компьютере вход в CodeBuddy CLI; если заполнить, приоритет будет у текущих учётных данных.", + "ai_settings.form.api_key_keep_placeholder": "Оставьте пустым, чтобы продолжить использовать сохраненный секрет", + "ai_settings.form.api_key_placeholder": "sk-... / ваш API Key", "ai_settings.form.api_key_placeholder.codebuddy": "Оставьте пустым для локальной сессии входа или введите API Key / Token для переопределения", + "ai_settings.form.api_key_required": "Введите API Key", + "ai_settings.form.api_key_saved_hint": "API Key уже сохранен. Оставьте поле пустым, чтобы использовать его дальше, или введите новое значение для замены.", + "ai_settings.form.clear_saved_api_key": "Очистить сохраненный API Key", + "ai_settings.form.model_list": "Список доступных моделей (необязательно)", + "ai_settings.form.model_list_placeholder": "Укажите ID моделей; оставьте пустым, чтобы получить их с сервера", "ai_settings.form.model_list_placeholder.codebuddy": "Необязательно: заранее укажите частые модели; если оставить пустым, CodeBuddy CLI или сервис выберет автоматически", "ai_settings.form.model_list_placeholder.cursor": "Необязательно: заранее укажите частые ID моделей Cursor; если оставить пустым, автоматически будет выбрана модель Cursor по умолчанию", + "ai_settings.form.provider_name": "Имя поставщика", + "ai_settings.form.provider_name_placeholder": "Пример: собственная OpenAI-совместимая конечная точка / частная модель", + "ai_settings.form.provider_name_required": "Введите имя", + "ai_settings.form.section.auth_connection": "Аутентификация и подключение", + "ai_settings.form.section.basic": "Основная информация", + "ai_settings.form.section.service_type": "Тип сервиса", + "ai_settings.mcp_http.error.control_unsupported_runtime": "Текущая среда выполнения не поддерживает управление службой MCP HTTP", + "ai_settings.mcp_http.error.start_unsupported_version": "Эта версия не поддерживает запуск службы MCP HTTP", + "ai_settings.mcp_http.error.stop_unsupported_version": "Эта версия не поддерживает остановку службы MCP HTTP", + "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header скопирован", + "ai_settings.mcp_http.message.authorization_header_required": "Сначала запустите службу MCP HTTP, чтобы создать Authorization Header", + "ai_settings.mcp_http.message.started": "Служба GoNavi MCP HTTP запущена", + "ai_settings.mcp_http.message.stopped": "Служба GoNavi MCP HTTP остановлена", + "ai_settings.mcp_http.message.toggle_failed": "Не удалось переключить службу GoNavi MCP HTTP", + "ai_settings.mcp_http.message.url_copied": "MCP HTTP URL скопирован", + "ai_settings.mcp_http.message.url_unavailable": "Нет MCP HTTP URL для копирования", "ai_settings.mcp_http.panel.addr_label": "Адрес прослушивания / порт", "ai_settings.mcp_http.panel.authorization_placeholder": "Bearer gnv_xxx (оставьте пустым для автогенерации)", "ai_settings.mcp_http.panel.copy_authorization": "Копировать Authorization", @@ -6194,6 +1667,7 @@ "ai_settings.mcp_http.panel.switch.off": "Выкл.", "ai_settings.mcp_http.panel.switch.on": "Вкл.", "ai_settings.mcp_http.panel.title": "Служба GoNavi MCP HTTP", + "ai_settings.mcp_http.status.not_running": "Служба GoNavi MCP HTTP не запущена", "ai_settings.mcp_server.argument_hints.action_separator": "; ", "ai_settings.mcp_server.argument_hints.argument_details": "Пояснения по аргументам", "ai_settings.mcp_server.argument_hints.business_arguments": "Обнаруженные бизнес-аргументы", @@ -6628,6 +2102,13 @@ "ai_settings.mcp_server.help.field_state.fixed": "Фиксировано", "ai_settings.mcp_server.help.field_state.optional": "Необязательно", "ai_settings.mcp_server.help.field_state.required": "Обязательно", + "ai_settings.mcp_server.message.delete_failed": "Не удалось удалить службу MCP", + "ai_settings.mcp_server.message.deleted": "Служба MCP удалена", + "ai_settings.mcp_server.message.save_failed": "Не удалось сохранить службу MCP", + "ai_settings.mcp_server.message.saved": "Служба MCP сохранена", + "ai_settings.mcp_server.message.test_failed": "Проверка службы MCP не удалась", + "ai_settings.mcp_server.message.test_request_failed": "Не удалось выполнить проверку службы MCP", + "ai_settings.mcp_server.message.test_success": "Подключение к службе MCP успешно", "ai_settings.mcp_server.quick_add.action.parse_and_add": "Разобрать и добавить черновик", "ai_settings.mcp_server.quick_add.description": "Выберите ближайший шаблон или вставьте полную команду запуска из README. GoNavi разделит её на command, args и env, затем создаст редактируемый черновик MCP.", "ai_settings.mcp_server.quick_add.templates_description": "Если вы не уверены, как разделить command и args, нажмите шаблон, чтобы создать черновик. На каждой карточке показана команда, которую GoNavi реально запустит.", @@ -6752,12 +2233,40 @@ "ai_settings.mcp_server.validation.summary.ready": "Текущую конфигурацию можно тестировать и сохранять.", "ai_settings.mcp_server.validation.summary.warnings": "Найдено пунктов для проверки: {{count}}. Тестирование и сохранение доступны.", "ai_settings.mcp_server.validation.title": "Проверка конфигурации", + "ai_settings.message.delete_failed": "Не удалось удалить", + "ai_settings.message.delete_failed_detail": "Не удалось удалить: {{detail}}", + "ai_settings.message.deleted": "Удалено", + "ai_settings.message.deleted_and_switched": "Удалено, выполнено автоматическое переключение на «{{name}}»", + "ai_settings.message.load_provider_failed": "Не удалось прочитать конфигурацию поставщика", + "ai_settings.message.save_failed": "Не удалось сохранить", + "ai_settings.message.save_failed_detail": "Не удалось сохранить: {{detail}}", + "ai_settings.message.saved": "Сохранено", + "ai_settings.message.switch_failed": "Не удалось переключить", + "ai_settings.message.switch_failed_detail": "Не удалось переключить: {{detail}}", + "ai_settings.message.switched": "Переключено", + "ai_settings.message.test_failed": "Проверка не удалась", + "ai_settings.message.test_failed_detail": "Проверка не удалась: {{detail}}", + "ai_settings.message.test_requires_new_api_key": "Перед проверкой подключения введите новый API Key или отмените очистку сохраненного секрета", + "ai_settings.message.test_success": "Подключение успешно", + "ai_settings.message.unknown_error": "Неизвестная ошибка", + "ai_settings.nav.context.description": "Настройка контекста схемы базы данных", + "ai_settings.nav.context.title": "Контекст", "ai_settings.nav.mcp.description": "Подключение GoNavi к внешним клиентам и управление источниками инструментов", "ai_settings.nav.mcp.title": "Сервисы MCP", + "ai_settings.nav.prompts.description": "Просмотр системных базовых требований", + "ai_settings.nav.prompts.title": "Встроенные промпты", + "ai_settings.nav.providers.description": "Настройка конечных точек моделей и секретов", + "ai_settings.nav.providers.title": "Поставщики моделей", + "ai_settings.nav.safety.description": "Ограничение уровня риска операций AI", + "ai_settings.nav.safety.title": "Контроль безопасности", "ai_settings.nav.skills.description": "Настройка переиспользуемых модулей промптов", "ai_settings.nav.skills.title": "Skills", + "ai_settings.nav.title": "Навигация настроек", + "ai_settings.nav.tools.description": "Просмотр доступных AI зондов данных", + "ai_settings.nav.tools.title": "Встроенные инструменты", "ai_settings.prompts.action.save": "Сохранить пользовательские промпты", "ai_settings.prompts.builtin.description": "Ниже показаны низкоуровневые AI-промпты, встроенные в текущую версию GoNavi. Они доступны только для чтения и добавляются в подходящий контекст запроса перед пользовательскими промптами выше.", + "ai_settings.prompts.description": "Ниже показаны системные AI-промпты, встроенные в текущую версию GoNavi. Они доступны только для чтения и динамически добавляются в контекст запроса для соответствующих сценариев.", "ai_settings.prompts.field.database.description": "Применяется только к сценариям базы данных и SQL, например «перед генерацией SQL обязательно проверить имена полей».", "ai_settings.prompts.field.database.title": "Дополнительный промпт для сессий базы данных", "ai_settings.prompts.field.global.description": "Применяется ко всем AI-сессиям, например «сначала дать вывод» или «отвечать кратко».", @@ -6766,16 +2275,65 @@ "ai_settings.prompts.field.jvm_diagnostic.title": "Дополнительный промпт для диагностики JVM", "ai_settings.prompts.field.jvm.description": "Применяется только к просмотру и анализу ресурсов JVM.", "ai_settings.prompts.field.jvm.title": "Дополнительный промпт для анализа ресурсов JVM", + "ai_settings.prompts.message.save_failed": "Не удалось сохранить пользовательские промпты", + "ai_settings.prompts.message.saved": "Пользовательские промпты сохранены", "ai_settings.prompts.placeholder.empty": "Оставьте пустым, чтобы ничего не добавлять", "ai_settings.prompts.user.description": "Этот текст добавляется после встроенных системных промптов как system message. Используйте его для личного стиля ответа, ограничений вывода или правил команды. В вопросах безопасности системные правила по-прежнему имеют приоритет.", "ai_settings.prompts.user.title": "Пользовательские промпты уровня пользователя", + "ai_settings.provider_preset.anthropic.desc": "Модели Claude Opus/Sonnet", + "ai_settings.provider_preset.anthropic.label": "Claude", + "ai_settings.provider_preset.custom.desc": "Пользовательская конечная точка API", + "ai_settings.provider_preset.custom.label": "Пользовательский", + "ai_settings.provider_preset.deepseek.desc": "Модели DeepSeek-V4 / R1", + "ai_settings.provider_preset.deepseek.label": "DeepSeek", + "ai_settings.provider_preset.gemini.desc": "Серия Gemini 3.1 / 2.5", + "ai_settings.provider_preset.gemini.label": "Gemini", + "ai_settings.provider_preset.minimax.desc": "Серия M3 / M2.7 (Anthropic-совместимая)", + "ai_settings.provider_preset.minimax.label": "MiniMax", + "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5 (Anthropic-совместимый)", + "ai_settings.provider_preset.moonshot.label": "Kimi", + "ai_settings.provider_preset.ollama.desc": "Локально развернутые модели с открытым кодом", + "ai_settings.provider_preset.ollama.label": "Ollama", + "ai_settings.provider_preset.openai.desc": "Серия GPT-5.4 / 5.3", + "ai_settings.provider_preset.openai.label": "OpenAI", + "ai_settings.provider_preset.qwen_bailian.desc": "Anthropic-совместимая конечная точка Bailian / удаленный список моделей", + "ai_settings.provider_preset.qwen_bailian.label": "Qwen (Bailian общий)", + "ai_settings.provider_preset.qwen_coding_plan.desc": "Прокси-цепочка Claude Code CLI / официальный список поддерживаемых моделей", + "ai_settings.provider_preset.qwen_coding_plan.label": "Qwen (Coding Plan)", + "ai_settings.provider_preset.volcengine_ark.desc": "Общий инференс Ark / модели Doubao", + "ai_settings.provider_preset.volcengine_ark.label": "Volcengine Ark", + "ai_settings.provider_preset.volcengine_coding.desc": "Среда Ark Code / Coding Plan", + "ai_settings.provider_preset.volcengine_coding.label": "Volcengine Coding Plan", + "ai_settings.provider_preset.zhipu.desc": "Модели GLM-5 / GLM-5-Turbo", + "ai_settings.provider_preset.zhipu.label": "Zhipu GLM", + "ai_settings.provider.action.add": "Добавить поставщика модели", + "ai_settings.provider.action.delete": "Удалить", + "ai_settings.provider.action.edit": "Редактировать", + "ai_settings.provider.confirm_delete": "Удалить этого поставщика?", + "ai_settings.provider.editor.add_title": "Добавить поставщика модели", + "ai_settings.provider.editor.edit_title": "Редактировать поставщика модели", + "ai_settings.provider.empty.description": "Добавьте поставщика, чтобы начать использовать AI-ассистента", + "ai_settings.provider.empty.title": "Поставщик модели не настроен", + "ai_settings.provider.next_provider": "следующий поставщик", + "ai_settings.provider.no_model": "Модель не выбрана", "ai_settings.provider.auto_model": "Выбрано автоматически", + "ai_settings.safety.description": "Управляет типами SQL-операций, которые AI может выполнять, чтобы защитить данные", + "ai_settings.safety.full.desc": "AI может выполнять все операции, включая DDL. Для операций высокого риска предупреждения показываются автоматически.", + "ai_settings.safety.full.label": "Полный режим", + "ai_settings.safety.readonly.desc": "AI может выполнять только SELECT и похожие запросы. Это самый безопасный режим.", + "ai_settings.safety.readonly.label": "Режим только чтения", + "ai_settings.safety.readwrite.desc": "AI может выполнять INSERT/UPDATE/DELETE. Для рискованных операций требуется подтверждение.", + "ai_settings.safety.readwrite.label": "Режим чтения и записи", "ai_settings.skill.action.add": "Добавить Skill", "ai_settings.skill.confirm_delete": "Удалить этот Skill?", "ai_settings.skill.description": "Skill - это не еще один большой промпт, а именованный модуль промпта + scope + зависимости от инструментов. На этом этапе храните его в основном репозитории. Отдельный репозиторий GitHub нужен только если позже будет распространяться общий skill pack.", "ai_settings.skill.description_placeholder": "Личная заметка, например: перед выводом SQL подтвердить имена полей и риски", "ai_settings.skill.empty": "Skills пока нет. Можно определить отдельные system prompts для сценариев базы данных, JVM и диагностики.", "ai_settings.skill.hint": "После включения он добавляется в сеанс по scope. Если нужного инструмента нет, этот Skill автоматически пропускается.", + "ai_settings.skill.message.delete_failed": "Не удалось удалить Skill", + "ai_settings.skill.message.deleted": "Skill удален", + "ai_settings.skill.message.save_failed": "Не удалось сохранить Skill", + "ai_settings.skill.message.saved": "Skill сохранен", "ai_settings.skill.name_placeholder": "Название Skill, например: SQL review / JVM diagnostic plan", "ai_settings.skill.required_tools_placeholder": "Необязательно: укажите, от каких инструментов зависит этот Skill", "ai_settings.skill.scope.database.desc": "Только для сценариев SQL / базы данных", @@ -6790,6 +2348,37 @@ "ai_settings.skill.status.disabled": "Отключен", "ai_settings.skill.status.enabled": "Включен", "ai_settings.skill.system_prompt_placeholder": "Введите system prompt, который должен добавить этот Skill. Сфокусируйтесь на одной четкой возможности и не дублируйте глобальные промпты.", + "ai_settings.subtitle": "Настройка моделей AI, уровня безопасности и контекста", + "ai_settings.title": "Настройки AI", + "ai_settings.tools.builtin_tool_label": "Встроенный инструмент", + "ai_settings.tools.description": "При работе с вопросами по базам данных AI-ассистент может автоматически вызывать эти встроенные инструменты, чтобы получить реальные данные без ручного вмешательства.", + "ai_settings.tools.empty.no_matches": "Подходящих встроенных инструментов нет. Попробуйте более общие ключевые слова, например mcp, logs, connection, transaction, shortcuts или schema.", + "ai_settings.tools.execute_sql.desc": "Выполнить SQL-запрос и вернуть результат", + "ai_settings.tools.execute_sql.detail": "Передайте connectionId, dbName и sql, чтобы выполнить SQL в целевой базе данных и вернуть до 50 строк результата. Применяется уровень безопасности; в режиме только чтения разрешены только SELECT/SHOW/DESCRIBE.", + "ai_settings.tools.get_columns.desc": "Получить структуру столбцов таблицы", + "ai_settings.tools.get_columns.detail": "Передайте connectionId, dbName и tableName, чтобы получить имя, тип, признак NULL, значение по умолчанию и комментарий каждого столбца. Перед генерацией SQL AI должен вызвать этот инструмент, чтобы подтвердить реальные имена столбцов.", + "ai_settings.tools.get_connections.desc": "Получить все доступные подключения к базам данных", + "ai_settings.tools.get_connections.detail": "Возвращает ID подключения, имя, тип (MySQL/PostgreSQL и т. д.) и адрес Host. AI использует эти сведения, чтобы выбрать подключение для первичного исследования.", + "ai_settings.tools.get_databases.desc": "Получить все базы данных в выбранном подключении", + "ai_settings.tools.get_databases.detail": "Передайте connectionId, чтобы получить список имен баз данных или схем в этом подключении.", + "ai_settings.tools.get_table_ddl.desc": "Получить DDL таблицы", + "ai_settings.tools.get_table_ddl.detail": "Передайте connectionId, dbName и tableName, чтобы получить полный оператор CREATE TABLE, включая определения столбцов, индексы, ограничения и метаданные.", + "ai_settings.tools.get_tables.desc": "Получить все имена таблиц в базе данных", + "ai_settings.tools.get_tables.detail": "Передайте connectionId и dbName, чтобы получить список таблиц. AI использует его для поиска целевой таблицы, о которой говорит пользователь.", + "ai_settings.tools.parameters.default_value": "По умолчанию: {{value}}", + "ai_settings.tools.parameters.enum_values": "Допустимые значения: {{values}}", + "ai_settings.tools.parameters.example": "Пример:", + "ai_settings.tools.parameters.hint_title": "Подсказки по параметрам", + "ai_settings.tools.parameters.optional": "Необязательный", + "ai_settings.tools.parameters.required": "Обязательный", + "ai_settings.tools.parameters.type_label": "Тип: {{type}}", + "ai_settings.tools.params_label": "Параметры:", + "ai_settings.tools.params.none": "Без параметров", + "ai_settings.tools.search.aria_label": "Поиск встроенных инструментов", + "ai_settings.tools.search.clear": "Очистить", + "ai_settings.tools.search.placeholder": "Поиск инструментов, процессов или параметров, например mcp / lineLimit / allowMutating / transaction", + "ai_settings.tools.summary": "Показано {{flowVisible}}/{{flowTotal}} рекомендуемых процессов и {{toolVisible}}/{{toolTotal}} встроенных инструментов.", + "ai_settings.tools.workflow": "💡 Процесс: get_connections → get_databases → get_tables → get_columns → сформировать SQL", "ai.service.mcp_client.claude_code.config_dir_create_failed": "Не удалось создать каталог конфигурации Claude Code: {{detail}}", "ai.service.mcp_client.claude_code.config_format_invalid": "Неверный формат конфигурации Claude Code: {{path}} должен быть {{expected}}", "ai.service.mcp_client.claude_code.config_parse_failed": "Не удалось разобрать конфигурацию Claude Code: {{detail}}", @@ -6816,12 +2405,111 @@ "ai.service.mcp_client.executable_path_failed": "Не удалось найти текущий исполняемый файл GoNavi: {{detail}}", "ai.service.mcp_client.remote.status.message": "{{label}} обычно работает в облаке или удаленной среде. Подключите его к Windows GoNavi через удаленный MCP-мост; пароли баз данных остаются на этой машине GoNavi.", "ai.service.mcp_client.user_home_dir_unavailable": "Не удалось определить домашний каталог текущего пользователя", + "app.about.action.check_updates": "Проверить обновления", + "app.about.action.download_progress": "Ход загрузки", + "app.about.action.download_update": "Скачать обновление", + "app.about.action.hide_to_background": "Скрыть в фон", + "app.about.action.install_update": "Установить обновление", + "app.about.action.mute_this_version": "Не напоминать в этот раз", + "app.about.action.open_install_directory": "Открыть каталог установки", + "app.about.community.ai_book": "AI全书", + "app.about.description": "Просмотр версии, ссылок на репозиторий, статуса обновлений и загрузок.", + "app.about.download_progress.title": "Скачать обновление", + "app.about.download_progress.title_with_version": "Скачать обновление {{version}}", + "app.about.field.author": "Автор", + "app.about.field.community": "Сообщество", + "app.about.field.update_status": "Статус обновления", + "app.about.field.version": "Версия", + "app.about.message.check_failed_with_error": "Проверка обновлений не удалась: {{error}}", + "app.about.message.download_completed": "Загрузка обновления завершена", + "app.about.message.download_completed_with_path": "Загрузка обновления завершена. Путь к пакету: {{path}}", + "app.about.message.download_failed_with_error": "Не удалось скачать обновление: {{error}}", + "app.about.message.install_directory_opened_manual_replace": "Каталог установки открыт. Завершите замену вручную.", + "app.about.message.install_failed_with_error": "Не удалось установить обновление: {{error}}", + "app.about.message.load_failed": "Не удалось получить информацию о приложении: {{error}}", + "app.about.message.new_version_found": "Найдена новая версия {{version}}", + "app.about.message.open_install_directory_failed_with_error": "Не удалось открыть каталог установки: {{error}}", + "app.about.message.update_package_ready": "Пакет обновления готов ({{version}})", + "app.about.message.update_package_ready_with_path": "Пакет обновления готов ({{version}}), путь: {{path}}", + "app.about.project_links": "Ссылки проекта", + "app.about.title": "О GoNavi", + "app.about.update_status.check_failed": "Проверка обновлений не удалась: {{error}}", + "app.about.update_status.checking": "Проверка обновлений...", + "app.about.update_status.latest": "У вас установлена последняя версия ({{version}})", + "app.about.update_status.new_version_downloaded": "Найдена новая версия {{version}} (загружена; откройте ход загрузки для установки)", + "app.about.update_status.new_version_not_downloaded": "Найдена новая версия {{version}} (не загружена)", + "app.about.update_status.not_checked": "Не проверялось", + "app.ai_panel.action.close": "Закрыть панель", + "app.ai_panel.action.reload": "Перезагрузить", + "app.ai_panel.aria.close": "Закрыть AI-панель", + "app.ai_panel.error.description": "Обычно это происходит из-за того, что после hot reload в режиме разработки перестают работать лениво загружаемые ресурсы. Полный белый экран уже предотвращен, можно сразу повторить попытку.", + "app.ai_panel.error.title": "Не удалось загрузить AI-панель", "app.backend.error.reset_webview_zoom_failed": "Не удалось сбросить масштаб WebView2: {{detail}}", + "app.browser_mock.export_connection_package_unsupported": "Браузерный mock не поддерживает экспорт пакетов восстановления", + "app.browser_mock.export_sql_unsupported": "Браузерный mock не поддерживает экспорт SQL-файлов", + "app.browser_mock.import_connection_package_unsupported": "Браузерный mock не поддерживает импорт пакетов восстановления; поддерживаются только старые массивы подключений JSON", + "app.browser_mock.mcp_client.claude_code.installed": "Пользовательская конфигурация MCP для Claude Code записана. Перезапустите Claude CLI, после чего GoNavi появится в User MCPs в /mcp.", + "app.browser_mock.mcp_client.claude_code.not_detected": "Пользовательская конфигурация GoNavi MCP для Claude Code не обнаружена", + "app.browser_mock.mcp_client.codex.installed": "Пользовательская конфигурация MCP для Codex записана. Перезапустите Codex CLI или настольное приложение, чтобы увидеть GoNavi.", + "app.browser_mock.mcp_client.codex.path_mismatch": "В Codex обнаружена запись GoNavi MCP, но она не совпадает с текущим путем установки GoNavi. Рекомендуется обновить.", + "app.browser_mock.mcp_http.not_running": "Служба GoNavi MCP HTTP не запущена", + "app.browser_mock.mcp_http.started": "Служба GoNavi MCP HTTP запущена", + "app.browser_mock.mcp_http.stopped": "Служба GoNavi MCP HTTP остановлена", + "app.browser_mock.mcp_server.command_required": "Команда MCP не может быть пустой", + "app.browser_mock.mcp_server.test_success": "Проверка MCP mock выполнена успешно", + "app.browser_mock.mcp_tool.unavailable": "Браузерный mock не подключен к реальной службе MCP", + "app.browser_mock.provider.test_failed_detail": "Проверка подключения не удалась: {{detail}}", + "app.browser_mock.provider.test_success": "Проверка подключения к конечной точке выполнена успешно", + "app.connection_package.action.start_export": "Начать экспорт", + "app.connection_package.action.start_import": "Начать импорт", + "app.connection_package.dialog.export_title": "Экспорт подключений", + "app.connection_package.dialog.file_password_placeholder": "Введите пароль защиты файла (необязательно)", + "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "Пароли зашифрованы. Для передачи через публичную сеть рекомендуется задать пароль защиты файла.", + "app.connection_package.dialog.help.exclude_passwords": "Будут экспортированы только настройки подключений. Пароли не включаются.", + "app.connection_package.dialog.help.share_file_password_separately": "Передайте пароль получателю по отдельному каналу. Не отправляйте его вместе с файлом.", + "app.connection_package.dialog.import_password_title": "Введите пароль импорта", + "app.connection_package.dialog.option.include_passwords": "Экспортировать пароли подключений", + "app.connection_package.dialog.option.use_file_password": "Задать пароль защиты файла", + "app.connection_package.dialog.restore_password_placeholder": "Введите пароль пакета восстановления", + "app.connection_package.error.export_capability_unavailable": "Экспорт не выполнен: текущий backend не предоставляет новую возможность экспорта", + "app.connection_package.error.file_password_required": "Пароль защиты файла не может быть пустым", + "app.connection_package.error.import_capability_unavailable": "Импорт не выполнен: текущий backend не предоставляет новую возможность импорта", + "app.connection_package.error.import_no_connections": "Импорт не выполнен: backend не вернул список подключений", + "app.connection_package.error.missing_import_payload": "Импорт не выполнен: содержимое пакета восстановления для импорта не найдено", + "app.connection_package.error.refresh_failed_no_connections": "Импорт выполнен, но обновить список подключений не удалось: backend не вернул список подключений", + "app.connection_package.error.restore_password_required": "Пароль пакета восстановления не может быть пустым", + "app.connection_package.message.export_failed": "Экспорт не выполнен", + "app.connection_package.message.export_succeeded": "Экспорт выполнен", + "app.connection_package.message.import_failed": "Импорт не выполнен", + "app.connection_package.message.import_failed_with_error": "Импорт не выполнен: {{error}}", + "app.connection_package.message.imported_connections": "Импортировано подключений: {{count}}", + "app.connection_package.message.imported_with_missing_passwords": "Импортировано подключений: {{count}}. В некоторых подключениях нет паролей; отредактируйте эти подключения, введите пароли и сохраните.", + "app.connection_package.message.no_connections_to_export": "Нет подключений для экспорта", + "app.connection_package.message.unsupported_file_format": "Ошибка формата файла: поддерживаются только пакеты восстановления GoNavi, старые массивы подключений JSON или MySQL Workbench XML", + "app.connection.message.editable_load_failed": "Не удалось загрузить сведения сохраненного подключения. Вместо этого будет открыта маскированная конфигурация.", + "app.connection.message.editable_load_failed_with_detail": "Не удалось загрузить сведения сохраненного подключения: {{detail}}. Вместо этого будет открыта маскированная конфигурация.", + "app.data_root.action.migrate_and_switch": "Перенести существующие данные и переключиться", + "app.data_root.action.open_current": "Открыть текущий каталог", + "app.data_root.action.restore_default_directory": "Восстановить каталог по умолчанию", + "app.data_root.action.select": "Выбрать каталог", + "app.data_root.action.switch_only": "Только переключиться на выбранный каталог", + "app.data_root.apply_method": "Способ применения", + "app.data_root.backend.dialog.select_directory": "Выбрать каталог данных GoNavi", + "app.data_root.backend.error.create_bootstrap_directory_failed": "Не удалось создать каталог начальной загрузки по умолчанию: {{detail}}", + "app.data_root.backend.error.create_data_directory_failed": "Не удалось создать каталог данных: {{detail}}", + "app.data_root.backend.error.create_target_failed": "Не удалось создать целевой каталог данных: {{detail}}", + "app.data_root.backend.error.directory_empty": "Каталог данных не может быть пустым", + "app.data_root.backend.error.directory_unavailable": "Каталог данных не существует или недоступен", + "app.data_root.backend.error.migrate_directory_failed": "Не удалось перенести каталог ({{entry}}): {{detail}}", + "app.data_root.backend.error.migrate_file_failed": "Не удалось перенести файл ({{entry}}): {{detail}}", + "app.data_root.backend.error.open_directory_failed": "Не удалось открыть каталог данных: {{detail}}", + "app.data_root.backend.error.open_directory_unsupported": "Открытие каталогов не поддерживается на этой платформе: {{platform}}", "app.data_root.backend.error.parse_migrated_security_update_manifest_failed": "Не удалось разобрать манифест резервной копии обновления безопасности после переноса: {{detail}}", "app.data_root.backend.error.parse_migrated_security_update_result_failed": "Не удалось разобрать результат обновления безопасности после переноса: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_manifest_failed": "Не удалось прочитать манифест резервной копии обновления безопасности после переноса: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_result_failed": "Не удалось прочитать результат обновления безопасности после переноса: {{detail}}", "app.data_root.backend.error.read_migrated_security_update_state_failed": "Не удалось прочитать состояние обновления безопасности после переноса: {{detail}}", + "app.data_root.backend.error.read_source_failed": "Не удалось прочитать исходные данные ({{entry}}): {{detail}}", "app.data_root.backend.error.read_source_root_failed": "Не удалось прочитать исходный каталог данных: {{detail}}", "app.data_root.backend.error.resolve_source_failed": "Не удалось определить исходный каталог данных: {{detail}}", "app.data_root.backend.error.resolve_target_failed": "Не удалось определить целевой каталог данных: {{detail}}", @@ -6829,11 +2517,539 @@ "app.data_root.backend.error.write_migrated_security_update_manifest_failed": "Не удалось записать манифест резервной копии обновления безопасности после переноса: {{detail}}", "app.data_root.backend.error.write_migrated_security_update_result_failed": "Не удалось записать результат обновления безопасности после переноса: {{detail}}", "app.data_root.backend.error.write_migrated_security_update_state_failed": "Не удалось записать состояние обновления безопасности после переноса: {{detail}}", + "app.data_root.backend.message.migrated_restart": "Данные перенесены, выполнено переключение на новый каталог. Перезапустите приложение, чтобы завершить переключение всех модулей.", + "app.data_root.backend.message.opened": "Каталог данных открыт", + "app.data_root.backend.message.unchanged": "Каталог данных не изменился", + "app.data_root.backend.message.updated_restart": "Каталог данных обновлен. Перезапустите приложение, чтобы AI и другие работающие модули полностью переключились на новый каталог.", + "app.data_root.current_directory": "Текущий каталог", + "app.data_root.default_directory": "Каталог по умолчанию", + "app.data_root.description": "Единое управление корневым каталогом файловых данных, таких как подключения, прокси, настройки AI и драйверы.", + "app.data_root.driver_directory": "Каталог драйверов", + "app.data_root.message.apply_failed": "Не удалось применить каталог данных", + "app.data_root.message.apply_failed_with_error": "Не удалось применить каталог данных: {{error}}", + "app.data_root.message.load_failed": "Не удалось загрузить сведения о каталоге данных", + "app.data_root.message.load_failed_with_error": "Не удалось загрузить сведения о каталоге данных: {{error}}", + "app.data_root.message.open_failed": "Не удалось открыть каталог данных", + "app.data_root.message.open_failed_with_error": "Не удалось открыть каталог данных: {{error}}", + "app.data_root.message.select_failed": "Не удалось выбрать каталог данных", + "app.data_root.message.select_failed_with_error": "Не удалось выбрать каталог данных: {{error}}", + "app.data_root.message.select_valid_first": "Сначала выберите допустимый каталог данных", + "app.data_root.message.updated": "Каталог данных обновлен", + "app.data_root.placeholder.select_new_directory": "Выберите новый каталог данных", + "app.data_root.restart_hint": "После переключения рекомендуется перезапустить приложение, чтобы AI и другие долгоживущие модули полностью перешли в новый каталог. Конфиденциальные пароли остаются в системном secret store и не переносятся вместе с файловыми каталогами.", + "app.data_root.switch_target": "Цель переключения", + "app.data_root.title": "Место хранения данных", + "app.linux_cjk_font_banner.action.open_font_settings": "Настройки шрифтов", + "app.linux_cjk_font_banner.description": "Китайский текст может отображаться квадратами вместо символов. Установите шрифты, затем перезапустите GoNavi: ", + "app.linux_cjk_font_banner.title": "Отсутствуют Linux CJK-шрифты", + "app.proxy.description": "Единая настройка проверки обновлений, управления драйверами и сетевого выхода для подключений без отдельного прокси.", + "app.proxy.enable": "Включить глобальный прокси", + "app.proxy.host": "Хост прокси", + "app.proxy.host_placeholder": "Пример: 127.0.0.1", "app.proxy.message.config_applied": "Конфигурация глобального прокси применена", + "app.proxy.message.invalid_enabled": "Глобальный прокси включен, но хост или порт недействительны. Сейчас он считается отключенным.", + "app.proxy.message.save_failed": "Не удалось настроить глобальный прокси: {{error}}", + "app.proxy.password_optional": "Пароль (необязательно)", + "app.proxy.port": "Порт", + "app.proxy.scope_hint": "* Применяется к проверке обновлений, сетевым запросам управления драйверами и подключениям к базе данных без отдельного прокси", + "app.proxy.section_title": "Глобальный прокси", + "app.proxy.title": "Настройки глобального прокси", + "app.proxy.type": "Тип прокси", + "app.proxy.username_optional": "Имя пользователя (необязательно)", + "app.security_update.error.capability_unavailable": "Функция безопасного обновления недоступна", + "app.security_update.message.completed": "Безопасное обновление сохраненных конфигураций завершено", + "app.security_update.message.needs_attention": "Обновление еще не завершено. Несколько конфигураций требуют внимания.", + "app.security_update.message.not_finished_retry_later": "Безопасное обновление не завершено. Повторите попытку позже.", + "app.security_update.message.postpone_failed": "Сейчас не удалось отложить это безопасное обновление", + "app.security_update.message.rolled_back": "Это обновление не завершено. Система сохранила текущую рабочую конфигурацию.", + "app.security_update.stage.checking_saved_config": "Проверка сохраненных конфигураций", + "app.security_update.stage.updating_secure_storage": "Обновление безопасного хранилища", + "app.security_update.stage.verifying_result": "Проверка результата обновления", + "app.settings.description": "Управление общими настройками: язык, прокси, тема, AI и сведения о приложении.", + "app.settings.entry.about.description": "Просмотр версии, ссылок на репозиторий и статуса обновлений.", + "app.settings.entry.about.title": "О GoNavi", + "app.settings.entry.ai.description": "Управление поставщиками моделей, ключами и поведением по умолчанию.", + "app.settings.entry.ai.title": "Настройки AI", + "app.settings.entry.proxy.description": "Настройка проверки обновлений, управления драйверами и общего сетевого доступа.", + "app.settings.entry.proxy.title": "Глобальный прокси", + "app.settings.entry.theme.description": "Переключение светлой или темной темы и настройка внешнего вида интерфейса.", + "app.settings.entry.theme.title": "Тема и внешний вид", + "app.settings.title": "Центр настроек", + "app.shortcuts.action.diagnoseQuery.description": "Выполнить EXPLAIN для текущего SQL и показать план выполнения с предложениями индексов", + "app.shortcuts.action.diagnoseQuery.label": "SQL-диагностика", + "app.shortcuts.action.focusSidebarSearch.description": "Перейти к полю поиска в левом дереве подключений", + "app.shortcuts.action.focusSidebarSearch.label": "Фокус на поиске боковой панели", + "app.shortcuts.action.newConnection.description": "Создать новое подключение к базе данных, runtime или другому источнику данных", + "app.shortcuts.action.newConnection.label": "Новый источник данных", + "app.shortcuts.action.newQueryTab.description": "Создать новую вкладку SQL-запроса", + "app.shortcuts.action.newQueryTab.label": "Новая вкладка запроса", + "app.shortcuts.action.openShortcutManager.description": "Открыть панель настройки горячих клавиш", + "app.shortcuts.action.openShortcutManager.label": "Открыть управление горячими клавишами", + "app.shortcuts.action.record": "Записать", + "app.shortcuts.action.resetWindowZoom.description": "Запустить вручную, если после восстановления из панели задач Windows шрифт стал аномально крупным; один раз переключает максимизацию, чтобы WebView2 пересчитал метрики шрифта", + "app.shortcuts.action.resetWindowZoom.label": "Сбросить масштаб окна", + "app.shortcuts.action.restore_defaults": "Восстановить значения по умолчанию", + "app.shortcuts.action.runQuery.description": "Выполнить SQL на текущей странице запроса", + "app.shortcuts.action.runQuery.label": "Выполнить SQL", + "app.shortcuts.action.saveQuery.description": "Сохранить текущую вкладку запроса; для безымянных запросов откроется окно сохранения", + "app.shortcuts.action.saveQuery.label": "Сохранить запрос", + "app.shortcuts.action.selectCurrentStatement.description": "Выбрать SQL-оператор под курсором в редакторе запросов", + "app.shortcuts.action.selectCurrentStatement.label": "Выбрать текущий оператор", + "app.shortcuts.action.sendAIChatMessage.description": "Отправить текущее сообщение из поля ввода AI; Shift+Enter всегда вставляет новую строку", + "app.shortcuts.action.sendAIChatMessage.label": "Отправить AI-чат", + "app.shortcuts.action.showSlowQueries.description": "Просмотр истории медленных SQL-запросов для текущего подключения (порог по умолчанию 500мс)", + "app.shortcuts.action.showSlowQueries.label": "История медленных SQL", + "app.shortcuts.action.switchToNextTab.description": "Переключиться вправо среди открытых вкладок", + "app.shortcuts.action.switchToNextTab.label": "Следующая вкладка", + "app.shortcuts.action.switchToPreviousTab.description": "Переключиться влево среди открытых вкладок", + "app.shortcuts.action.switchToPreviousTab.label": "Предыдущая вкладка", + "app.shortcuts.action.toggleAIPanel.description": "Открыть правую панель аналитики данных AI", + "app.shortcuts.action.toggleAIPanel.label": "Открыть аналитику данных AI", + "app.shortcuts.action.toggleLogPanel.description": "Открыть или закрыть панель журнала выполнения SQL", + "app.shortcuts.action.toggleLogPanel.label": "Переключить панель журнала", + "app.shortcuts.action.toggleMacFullscreen.description": "Переключение нативного полноэкранного режима в режиме нативных элементов окна macOS", + "app.shortcuts.action.toggleMacFullscreen.label": "Переключить нативный полноэкранный режим", "app.shortcuts.action.toggleQueryResultsPanel.description": "Показать или скрыть область результатов под редактором запросов", "app.shortcuts.action.toggleQueryResultsPanel.label": "Переключить область результатов", + "app.shortcuts.action.toggleTheme.description": "Переключение между светлой и темной темами", + "app.shortcuts.action.toggleTheme.label": "Переключить тему", + "app.shortcuts.capture_hint": "Нажмите сочетание клавиш после нажатия \"Записать\". Нажмите Esc, чтобы отменить запись. Для глобальных горячих клавиш рекомендуется модификатор; отправка AI-чата поддерживает только комбинации с Enter, а Shift+Enter сохраняет перенос строки.", + "app.shortcuts.capture_waiting": "Нажмите сочетание клавиш...", + "app.shortcuts.context.datagrid": "Таблица данных", + "app.shortcuts.context.global": "Браузер", + "app.shortcuts.context.monaco": "Редактор", + "app.shortcuts.description": "Просматривайте, записывайте и включайте распространенные глобальные горячие клавиши в одном месте.", + "app.shortcuts.message.ai_send_limit": "Горячая клавиша отправки AI-чата поддерживает только Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter; Shift+Enter сохраняет перенос строки", + "app.shortcuts.message.conflict": "Конфликт с \"{{action}}\". Выберите другое сочетание клавиш.", + "app.shortcuts.message.modifier_required": "Сочетание клавиш должно содержать хотя бы одну из клавиш Ctrl / Alt / Shift / Meta", + "app.shortcuts.message.reserved_conflict_info": "Переопределяет стандартную горячую клавишу редактора \"{{labels}}\"", + "app.shortcuts.message.reserved_conflict_warning": "Конфликт с {{contexts}} \"{{labels}}\"; может не работать", + "app.shortcuts.message.restored_defaults": "Горячие клавиши по умолчанию восстановлены", + "app.shortcuts.reserved.browser_close_tab": "Браузер закрыть вкладку", + "app.shortcuts.reserved.browser_new_incognito_window": "Браузер новое инкогнито-окно", + "app.shortcuts.reserved.browser_new_tab": "Браузер новая вкладка", + "app.shortcuts.reserved.browser_new_window": "Браузер новое окно", + "app.shortcuts.reserved.browser_print": "Браузер печать", + "app.shortcuts.reserved.browser_save": "Браузер сохранить", + "app.shortcuts.reserved.datagrid_copy": "Копировать таблицу данных", + "app.shortcuts.reserved.editor_add_selection": "Редактор добавить выделение", + "app.shortcuts.reserved.editor_delete_line": "Редактор удалить строку", + "app.shortcuts.reserved.editor_find": "Редактор поиск", + "app.shortcuts.reserved.editor_find_global": "Редактор глобальный поиск", + "app.shortcuts.reserved.editor_goto_line": "Редактор перейти к строке", + "app.shortcuts.reserved.editor_insert_line_after": "Редактор вставить строку ниже", + "app.shortcuts.reserved.editor_insert_line_before": "Редактор вставить строку выше", + "app.shortcuts.reserved.editor_quick_open": "Редактор быстрое открытие", + "app.shortcuts.reserved.editor_rename_symbol": "Редактор переименовать символ", + "app.shortcuts.reserved.editor_replace": "Редактор замена", + "app.shortcuts.title": "Управление горячими клавишами", + "app.sidebar.ai_assistant": "AI-ассистент", + "app.sidebar.resize_width": "Перетащите, чтобы изменить ширину", + "app.sidebar.settings": "Настройки", + "app.sidebar.sql_execution_log": "Журнал выполнения SQL", + "app.sidebar.tools": "Инструменты", + "app.startup_readiness.loading_local_config": "Загрузка локальной конфигурации...", + "app.startup_readiness.loading_security_config": "Загрузка конфигурации безопасности...", + "app.theme.action.restore_defaults": "Восстановить значения по умолчанию", + "app.theme.appearance_settings_description": "Единая настройка масштаба, размера шрифта, прозрачности и размытия.", + "app.theme.appearance_settings_title": "Настройки внешнего вида", + "app.theme.appearance.blur_hint": "* Управляет размытием только внутренних оверлейных слоев приложения", + "app.theme.appearance.blur_title": "Гауссово размытие (Blur)", + "app.theme.appearance.enable_transparency_blur": "Включить прозрачность и размытие", + "app.theme.appearance.enable_transparency_blur_hint": "При отключении текущие пороги сохраняются и будут восстановлены при повторном включении.", + "app.theme.appearance.font_size_title": "Базовый размер шрифта (Font Size)", + "app.theme.appearance.opacity_title": "Непрозрачность фона (Opacity)", + "app.theme.appearance.transparency_blur_title": "Эффекты прозрачности и размытия", + "app.theme.appearance.ui_scale_hint": "* Для небольших экранов рекомендуется 85%-95%", + "app.theme.appearance.ui_scale_title": "Масштаб UI (UI Scale)", + "app.theme.appearance.windows_acrylic_hint": "Windows использует системный эффект Acrylic. Сила размытия управляется системой.", + "app.theme.data_table.column_width_hint": "В стандартном режиме ширина столбца по умолчанию 200px; в компактном режиме 140px. Вручную измененные ширины столбцов сохраняются в приоритете.", + "app.theme.data_table.column_width_mode": "Режим ширины столбцов таблицы данных", + "app.theme.data_table.column_width_mode.compact": "Компактный 140px", + "app.theme.data_table.column_width_mode.standard": "Стандартный 200px", + "app.theme.data_table.density": "Плотность таблицы", + "app.theme.data_table.density_hint": "Управляет высотой строк, шириной столбцов и отступами. Комфортная плотность удобна для больших экранов; компактная увеличивает плотность информации. Ширина столбцов, измененная вручную, сохраняется в приоритете.", + "app.theme.data_table.density.comfortable": "Комфортная", + "app.theme.data_table.density.compact": "Компактная", + "app.theme.data_table.density.standard": "Стандартная", + "app.theme.data_table.follow_global": "Следовать глобально", + "app.theme.data_table.font_size": "Размер шрифта таблицы данных", + "app.theme.data_table.sidebar_tree_font_size": "Размер шрифта левого дерева схем", + "app.theme.data_table.title": "Отображение таблицы данных", + "app.theme.data_table.vertical_borders": "Показывать вертикальные разделители таблицы данных", + "app.theme.data_table.vertical_borders_hint": "Влияет только на DataGrid на страницах таблиц данных и не затрагивает другие табличные компоненты.", "app.theme.font_family.default_mono_option": "Шрифт кода по умолчанию", "app.theme.font_family.default_ui_option": "Шрифт UI по умолчанию", + "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux не обнаружил китайские CJK-шрифты, поэтому интерфейс может показывать квадраты вместо символов. Установите: ", + "app.theme.font_family.linux_cjk_install_suffix": ", затем перезапустите GoNavi.", + "app.theme.font_family.load_failed": "Не удалось загрузить системные шрифты", + "app.theme.font_family.load_failed_fallback": "Не удалось загрузить системные шрифты. Используются стандартные наборы шрифтов: {{error}}", + "app.theme.font_family.loaded_ui_hint": "Считано {{count}} семейств шрифтов с этой системы. Введите текст для поиска. Очистите поле, чтобы вернуться к шрифту UI по умолчанию.", + "app.theme.font_family.loading_ui_hint": "Установленные шрифты текущей системы загружаются в реальном времени. Введите текст для поиска. Очистите поле, чтобы вернуться к шрифту UI по умолчанию.", + "app.theme.font_family.mono_fallback_hint": "Используются стандартные наборы шрифтов для кода. Применяется к моноширинному содержимому: SQL-редактору, блокам кода AI, журналам, DDL и таблицам данных.", + "app.theme.font_family.mono_hint": "Сначала показываются установленные системные шрифты; названия, близкие к Mono/Code/Console, выводятся выше. Применяется к моноширинному содержимому: SQL-редактору, блокам кода AI, журналам, DDL и таблицам данных.", + "app.theme.font_family.mono_title": "Моноширинное семейство шрифтов", + "app.theme.font_family.title": "Семейство шрифтов", + "app.theme.font_family.ui_title": "Семейство шрифтов UI", + "app.theme.mac_window.restart_hint": "* Пользовательские кнопки справа вверху скрыты. Если системный стиль окна не обновился сразу, перезапустите приложение.", + "app.theme.mac_window.title": "Управление окном macOS", + "app.theme.mac_window.use_native_controls": "Использовать нативные элементы управления окном macOS", + "app.theme.mac_window.use_native_controls_hint": "Показывает красную, желтую и зеленую кнопки слева вверху и отдает приоритет нативному полноэкранному поведению macOS.", + "app.theme.mode_title": "Режим темы", + "app.theme.mode.dark.description": "Подходит для слабого освещения и более спокойного визуального восприятия.", + "app.theme.mode.dark.label": "Темная тема", + "app.theme.mode.light.description": "Подходит для яркой среды и более легкой визуальной иерархии.", + "app.theme.mode.light.label": "Светлая тема", + "app.theme.nav.appearance.description": "Масштаб, шрифт и прозрачность", + "app.theme.nav.appearance.title": "Параметры внешнего вида", + "app.theme.nav.theme.description": "Переключение светлой и темной темы", + "app.theme.nav.theme.title": "Режим темы", + "app.theme.navigation_title": "Навигация по настройкам", + "app.theme.startup_window.fullscreen": "Полный экран при запуске", + "app.theme.startup_window.fullscreen_windows": "Полный экран при запуске (Windows обрабатывает это как максимизацию)", + "app.theme.startup_window.hint": "* Вступает в силу при следующем запуске", + "app.theme.startup_window.title": "Окно запуска", + "app.theme.startup_window.windows_hint": "* В Windows этот параметр обрабатывается как \"максимизировать при запуске\" и вступает в силу при следующем запуске", + "app.theme.tab_display.action.move_down": "Вниз", + "app.theme.tab_display.action.move_up": "Вверх", + "app.theme.tab_display.badge.current": "Текущий", + "app.theme.tab_display.description": "Настройте порядок отображения имени подключения, типа объекта, имени объекта, базы данных, Schema и Host/IP. В двухстрочном режиме контекст можно вынести во вторую строку.", + "app.theme.tab_display.element.connection.description": "Псевдоним подключения или имя среды, например DEV", + "app.theme.tab_display.element.connection.label": "Подключение", + "app.theme.tab_display.element.database.description": "Текущее имя DB / catalog", + "app.theme.tab_display.element.database.label": "База данных", + "app.theme.tab_display.element.host.description": "Краткий адрес целевого подключения", + "app.theme.tab_display.element.host.label": "Host/IP", + "app.theme.tab_display.element.kind.description": "Метки типов, например SQL / TABLE / VIEW", + "app.theme.tab_display.element.kind.label": "Тип объекта", + "app.theme.tab_display.element.object.description": "Основные имена, например таблицы, запроса или ресурса", + "app.theme.tab_display.element.object.label": "Имя объекта", + "app.theme.tab_display.element.schema.description": "Префикс schema / owner", + "app.theme.tab_display.element.schema.label": "Schema", + "app.theme.tab_display.layout.double": "Две строки", + "app.theme.tab_display.layout.single": "Одна строка", + "app.theme.tab_display.preview.default_label": "Метка по умолчанию", + "app.theme.tab_display.preview.focused": "; выбрано {{label}}", + "app.theme.tab_display.preview.prefix": "Текущий предпросмотр: ", + "app.theme.tab_display.preview.secondary": ", вторая строка {{labels}}", + "app.theme.tab_display.row.primary": "Основная строка", + "app.theme.tab_display.row.secondary": "Вторая строка", + "app.theme.tab_display.title": "Отображение меток вкладок", + "app.theme.theme_settings_description": "Переключение светлой и темной тем с сохранением единого визуального стиля.", + "app.theme.theme_settings_title": "Настройки темы", + "app.theme.ui_version.badge.new": "NEW", + "app.theme.ui_version.beta_warning": "Новый UI все еще находится в Beta, поэтому некоторые экраны могут отличаться от старого UI. При необходимости можно переключиться обратно в любой момент.", + "app.theme.ui_version.description": "Переключайте общий внешний вид, сохраняя доступ ко всем функциям. Новая версия использует более компактную информационную иерархию и более современный визуальный язык.", + "app.theme.ui_version.legacy.badge": "По умолчанию", + "app.theme.ui_version.legacy.description": "Текущий стабильный интерфейс, в котором полностью доступны все функции.", + "app.theme.ui_version.legacy.label": "Старый UI", + "app.theme.ui_version.platform_hint": "Windows, macOS и Linux поддерживают переключение. Изменения применяются сразу, а некоторые модальные окна используют новый стиль при следующем открытии.", + "app.theme.ui_version.sidebar_search.command": "Новый командный поиск", + "app.theme.ui_version.sidebar_search.filter": "Старый фильтр боковой панели", + "app.theme.ui_version.sidebar_search.hint": "Новый командный поиск удобен для перехода к подключениям, таблицам и действиям. Включите синхронизацию на панели, чтобы постоянно фильтровать левое дерево; старый фильтр боковой панели показывает поле ввода напрямую и сохраняет текст фильтра.", + "app.theme.ui_version.sidebar_search.title": "Новый режим поиска в левой боковой панели", + "app.theme.ui_version.title": "Версия интерфейса", + "app.theme.ui_version.v2.badge": "Beta", + "app.theme.ui_version.v2.description": "Переработанный компактный интерфейс с усиленным входом AI и обзором таблиц.", + "app.theme.ui_version.v2.label": "Новый UI", + "app.tools.description": "Единое управление конфигурацией подключений, синхронизацией, драйверами и горячими клавишами.", + "app.tools.entry.data_compare.description": "Анализирует добавленные, обновленные, удаленные и неизмененные строки по первичному ключу.", + "app.tools.entry.data_compare.title": "Сравнение данных", + "app.tools.entry.data_root.description": "Просмотр, переключение или перенос локального места хранения данных.", + "app.tools.entry.data_root.title": "Каталог данных", + "app.tools.entry.drivers.description": "Установка, обновление или удаление драйверов баз данных.", + "app.tools.entry.drivers.title": "Управление драйверами", + "app.tools.entry.export.description": "Экспорт текущих подключений и видимых полей конфигурации.", + "app.tools.entry.export.title": "Экспорт конфигурации подключений", + "app.tools.entry.import.description": "Восстановление списка подключений из локального файла.", + "app.tools.entry.import.title": "Импорт конфигурации подключений", + "app.tools.entry.schema_compare.description": "Сравнивает различия структуры исходной и целевой таблиц, только предварительный просмотр без выполнения.", + "app.tools.entry.schema_compare.title": "Сравнение схем", + "app.tools.entry.security_update.description": "Просмотр статуса безопасного обновления сохраненных конфигураций.", + "app.tools.entry.security_update.status_description": "Текущий статус: {{status}}", + "app.tools.entry.security_update.title": "Безопасное обновление", + "app.tools.entry.shortcuts.description": "Просмотр и настройка глобальных горячих клавиш.", + "app.tools.entry.shortcuts.title": "Управление горячими клавишами", + "app.tools.entry.snippets.description": "Управление SQL-сниппетами и автодополнением по префиксу.", + "app.tools.entry.snippets.title": "Управление сниппетами", + "app.tools.entry.sync.description": "Открыть рабочий процесс синхронизации между источниками.", + "app.tools.entry.sync.title": "Синхронизация данных", + "app.tools.group.config.description": "Импорт/экспорт, каталог данных и обслуживание сохраненных конфигураций.", + "app.tools.group.config.title": "Подключения и конфигурация", + "app.tools.group.workflow.description": "Сравнение структуры, просмотр различий и запуск синхронизации.", + "app.tools.group.workflow.title": "Потоки данных", + "app.tools.group.workspace.description": "Драйверы, сниппеты кода и глобальные горячие клавиши.", + "app.tools.group.workspace.title": "Редактор и драйверы", + "app.tools.title": "Центр инструментов", + "app.update.action.hide_to_background": "Скрыть в фон", + "app.update.action.install_update": "Установить обновление", + "app.update.action.open_install_directory": "Открыть каталог установки", + "app.update.backend.error.check_failed": "Не удалось проверить обновления: {{detail}}", + "app.update.backend.error.check_http_status": "Не удалось проверить обновления: HTTP {{status}}", + "app.update.backend.error.download_failed": "Не удалось скачать обновление: {{detail}}", + "app.update.backend.error.install_unsupported": "Установка обновления не поддерживается на этой платформе: {{platform}}", + "app.update.backend.error.latest_version_unparseable": "Не удалось разобрать номер последней версии", + "app.update.backend.error.online_update_unsupported": "Онлайн-обновление не поддерживается на этой платформе: {{platform}}", + "app.update.backend.error.package_download_http_failed": "Не удалось скачать пакет обновления: HTTP {{status}}", + "app.update.backend.error.package_file_busy": "Не удалось скачать обновление, потому что файл занят: {{detail}}", + "app.update.backend.error.release_version_unparseable": "Не удалось разобрать версию релиза", + "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS не содержит пакет обновления для текущей платформы", + "app.update.backend.error.sha256sums_download_failed": "Не удалось скачать SHA256SUMS: HTTP {{status}}", + "app.update.backend.error.sha256sums_missing": "Release не предоставляет SHA256SUMS", + "app.update.backend.error.update_package_not_found": "Пакет обновления не найден: {{name}}", + "app.update.backend.message.app_directory_unavailable": "Нет доступа к каталогу приложения: {{path}}", + "app.update.backend.message.app_directory_unresolved_download": "Не удалось определить текущий каталог приложения, поэтому обновление нельзя скачать", + "app.update.backend.message.check_first": "Сначала проверьте обновления", + "app.update.backend.message.checksum_failed": "Проверка контрольной суммы пакета обновления не пройдена. Повторите попытку.", + "app.update.backend.message.checksum_missing": "Отсутствует контрольная сумма пакета обновления (SHA256SUMS)", + "app.update.backend.message.create_workspace_failed": "Не удалось создать рабочий каталог обновления в каталоге приложения: {{path}}", + "app.update.backend.message.download_in_progress": "Пакет обновления загружается. Повторите попытку позже.", + "app.update.backend.message.install_launch_failed": "Не удалось запустить установщик обновления: {{detail}}", + "app.update.backend.message.install_launch_failed_with_log": "Не удалось запустить установщик обновления: {{detail}} (журнал обновления: {{path}})", + "app.update.backend.message.install_started": "Установка обновления начата", + "app.update.backend.message.install_started_with_log": "Установка обновления начата. Путь к журналу: {{path}}", + "app.update.backend.message.latest": "Уже установлена последняя версия", + "app.update.backend.message.no_downloaded_package": "Скачанный пакет обновления не найден", + "app.update.backend.message.no_update_package": "Доступный пакет обновления не найден", + "app.update.backend.message.open_directory_failed": "Не удалось открыть каталог обновления: {{detail}}", + "app.update.backend.message.open_directory_unsupported": "Открытие каталогов не поддерживается на этой платформе: {{platform}}", + "app.update.backend.message.opened_install_directory": "Каталог установки открыт: {{path}}", + "app.update.backend.message.package_already_downloaded": "Пакет обновления уже скачан", + "app.update.backend.message.package_directory_unavailable": "Каталог обновления не существует или недоступен", + "app.update.backend.message.package_directory_unresolved": "Не удалось определить каталог обновления", + "app.update.backend.message.package_downloaded": "Пакет обновления скачан", + "app.update.backend.message.package_path_empty": "Путь к пакету обновления пуст", + "app.update.backend.message.update_found": "Найдена новая версия: {{version}}", + "app.update.download_title": "Скачать обновление", + "app.update.download_title_with_version": "Скачать обновление {{version}}", + "app.update.message.check_failed": "Не удалось проверить обновления: {{error}}", + "app.update.message.download_completed": "Загрузка обновления завершена", + "app.update.message.download_completed_with_path": "Загрузка обновления завершена. Путь к пакету: {{path}}", + "app.update.message.download_failed": "Не удалось скачать обновление: {{error}}", + "app.update.message.install_failed": "Не удалось установить обновление: {{error}}", + "app.update.message.open_install_directory_failed": "Не удалось открыть каталог установки: {{error}}", + "app.update.message.opened_install_directory": "Каталог установки открыт. Завершите замену вручную.", + "app.update.message.package_ready": "Пакет обновления готов ({{version}})", + "app.update.message.package_ready_with_path": "Пакет обновления готов ({{version}}), путь: {{path}}", + "app.update.message.update_found": "Найдена новая версия: {{version}}", + "app.update.status.available_downloaded": "Найдена новая версия {{version}} (скачана; нажмите \"Ход загрузки\", чтобы установить)", + "app.update.status.available_not_downloaded": "Найдена новая версия {{version}} (не скачана)", + "app.update.status.check_failed": "Не удалось проверить обновления: {{error}}", + "app.update.status.checking": "Проверка обновлений...", + "app.update.status.latest": "Уже установлена последняя версия ({{version}})", + "app.update.status.not_checked": "Не проверено", + "app.window_zoom.message.fullscreen_exit_first": "Нельзя сбросить масштаб в полноэкранном режиме. Сначала выйдите из полноэкранного режима.", + "app.window_zoom.message.reset_failed": "Не удалось сбросить масштаб окна", + "app.window_zoom.message.reset_success": "Масштаб окна сброшен", + "app.window_zoom.message.reset_success_fallback": "Масштаб окна сброшен (резервный вариант)", + "app.window_zoom.message.windows_only": "Эта функция доступна только в Windows", + "common.back_to_previous": "Назад", + "common.cancel": "Отмена", + "common.close": "Закрыть", + "common.confirm": "Подтвердить", + "common.continue": "Продолжить", + "common.delete": "Удалить", + "common.edit": "Изменить", + "common.error": "Ошибка", + "common.loading": "Загрузка", + "common.named_item": "{{name}}", + "common.ok": "OK", + "common.refresh": "Обновить", + "common.save": "Сохранить", + "common.search": "Поиск", + "common.success": "Успешно", + "common.unknown": "Неизвестно", + "common.warning": "Предупреждение", + "connection_modal.action.browse": "Выбрать...", + "connection_modal.action.cancel": "Отмена", + "connection_modal.action.close": "Закрыть", + "connection_modal.action.copy_uri": "Копировать URI", + "connection_modal.action.disable": "Отключить", + "connection_modal.action.discover_members": "Обнаружить участников", + "connection_modal.action.enable_and_prefer": "Включить и предпочесть", + "connection_modal.action.generate_uri": "Сформировать URI", + "connection_modal.action.open_driver_manager": "Открыть управление драйверами", + "connection_modal.action.parse_uri": "Разобрать URI", + "connection_modal.action.previous_step": "Назад", + "connection_modal.action.reset_default": "Сбросить по умолчанию", + "connection_modal.action.save": "Сохранить", + "connection_modal.action.test": "Проверить подключение", + "connection_modal.action.view_reason": "Показать причину", + "connection_modal.appearance.color": "Цвет", + "connection_modal.appearance.current_icon": "Текущий значок: {{icon}}", + "connection_modal.appearance.custom_color": "Пользовательский цвет", + "connection_modal.appearance.icon": "Значок", + "connection_modal.appearance.preview": "Предпросмотр", + "connection_modal.badge.current": "Текущий", + "connection_modal.badge.current_editing": "Редактируется", + "connection_modal.badge.preferred": "Предпочтительный", + "connection_modal.config_section.connectionMode.description": "Настройте Режим подключения.", + "connection_modal.config_section.connectionMode.title": "Режим подключения", + "connection_modal.config_section.credentials.description": "Настройте Учетные данные.", + "connection_modal.config_section.credentials.title": "Учетные данные", + "connection_modal.config_section.customDriver.description": "Настройте Пользовательский драйвер.", + "connection_modal.config_section.customDriver.title": "Пользовательский драйвер", + "connection_modal.config_section.customDsn.description": "Настройте Пользовательский DSN.", + "connection_modal.config_section.customDsn.title": "Пользовательский DSN", + "connection_modal.config_section.databaseScope.description": "Настройте Область баз данных.", + "connection_modal.config_section.databaseScope.title": "Область баз данных", + "connection_modal.config_section.fileTarget.description": "Настройте Файловая база данных.", + "connection_modal.config_section.fileTarget.title": "Файловая база данных", + "connection_modal.config_section.identity.description": "Настройте Идентификация.", + "connection_modal.config_section.identity.title": "Идентификация", + "connection_modal.config_section.jvmRuntime.description": "Настройте Среда JVM.", + "connection_modal.config_section.jvmRuntime.title": "Среда JVM", + "connection_modal.config_section.mongoDiscovery.description": "Настройте Обнаружение MongoDB.", + "connection_modal.config_section.mongoDiscovery.title": "Обнаружение MongoDB", + "connection_modal.config_section.mongoPolicy.description": "Настройте Политика MongoDB.", + "connection_modal.config_section.mongoPolicy.title": "Политика MongoDB", + "connection_modal.config_section.replica.description": "Настройте Реплики.", + "connection_modal.config_section.replica.title": "Реплики", + "connection_modal.config_section.service.description": "Настройте Сервис и база данных.", + "connection_modal.config_section.service.title": "Сервис и база данных", + "connection_modal.config_section.target.description": "Настройте Адрес назначения.", + "connection_modal.config_section.target.title": "Адрес назначения", + "connection_modal.config_section.uri.description": "Введите, сформируйте или разберите URI подключения.", + "connection_modal.config_section.uri.title": "URI подключения", + "connection_modal.db_icon_label.custom": "Пользовательский", + "connection_modal.db_type_hint.custom": "Подключение с пользовательским драйвером и DSN.", + "connection_modal.db_type_hint.file": "Выберите локальный файл базы данных SQLite или DuckDB.", + "connection_modal.db_type_hint.mongodb": "Подключение к MongoDB Standalone, Replica Set или SRV-адресам.", + "connection_modal.db_type_hint.redis": "Подключение к Redis Standalone или Redis Cluster.", + "connection_modal.db_type_hint.standard": "Введите хост, порт, данные аутентификации и необязательную базу данных.", + "connection_modal.db_type.custom": "Пользовательский", + "connection_modal.driver.current": "Текущий", + "connection_modal.error.unknown": "Неизвестная ошибка", + "connection_modal.error.unknown_exception": "Неизвестная ошибка", + "connection_modal.field.additional_hosts": "Дополнительные хосты", + "connection_modal.field.additional_srv_hosts_optional": "Дополнительные SRV-хосты (необязательно)", + "connection_modal.field.auth_source": "База аутентификации (authSource)", + "connection_modal.field.clickHouseProtocol.auto": "Авто", + "connection_modal.field.cluster_additional_hosts": "Дополнительные узлы кластера", + "connection_modal.field.connection_name": "Имя подключения", + "connection_modal.field.connection_timeout_seconds": "Тайм-аут подключения (секунды)", + "connection_modal.field.connection_timeout_seconds_ascii": "Тайм-аут подключения (секунды)", + "connection_modal.field.default_database_optional": "База данных по умолчанию (необязательно)", + "connection_modal.field.defaultDatabase.placeholder": "Например: appdb", + "connection_modal.field.display_databases_optional": "Отображаемые базы данных (необязательно)", + "connection_modal.field.driver_name": "драйвер имя", + "connection_modal.field.driver.placeholder": "Например: mysql, postgres", + "connection_modal.field.dsn": "DSN", + "connection_modal.field.dsn.placeholder": "Например: user:pass@tcp(localhost:3306)/dbname?charset=utf8", + "connection_modal.field.file_path_absolute": "Путь к файлу (абсолютный)", + "connection_modal.field.host": "Хост", + "connection_modal.field.host_address": "Адрес хоста", + "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "Если при подключении к Oracle-арендатору возникает \"Error 1235\" или сбой рукопожатия OBClient, в поле \"Параметры подключения\" можно через {{attributes}} переопределить OBClient capability, которую GoNavi внедряет по умолчанию.", + "connection_modal.field.oceanBaseProtocol.help.primary": "Для арендаторов MySQL выберите MySQL, для арендаторов Oracle выберите Oracle. GoNavi автоматически выбирает режим по порту: для порта OB MySQL wire используется внедрение возможностей OBClient (тот же путь, что и в Navicat), для порта OBProxy Oracle listener используется стандартный TNS.", + "connection_modal.field.oceanBaseProtocol.label": "Протокол OceanBase", + "connection_modal.field.password": "Пароль", + "connection_modal.field.password_optional": "Пароль (необязательно)", + "connection_modal.field.port": "Порт", + "connection_modal.field.port_plain": "Порт", + "connection_modal.field.primary_port": "Основной порт", + "connection_modal.field.private_key_path_optional": "Путь к закрытому ключу (необязательно)", + "connection_modal.field.proxy_host": "Хост прокси", + "connection_modal.field.proxy_password_optional": "Пароль прокси (необязательно)", + "connection_modal.field.proxy_type": "Тип прокси", + "connection_modal.field.proxy_username_optional": "Имя пользователя прокси (необязательно)", + "connection_modal.field.replica_hosts": "Список хостов реплик", + "connection_modal.field.replica_password_optional": "Пароль реплики (необязательно)", + "connection_modal.field.replica_set_optional": "Replica Set (необязательно)", + "connection_modal.field.replica_set_password_optional": "Пароль Replica Set (необязательно)", + "connection_modal.field.replica_set_username_optional": "Имя пользователя Replica Set (необязательно)", + "connection_modal.field.replica_username_optional": "Имя пользователя реплики (необязательно)", + "connection_modal.field.save_password": "Сохранить пароль", + "connection_modal.field.service_name": "Имя сервиса", + "connection_modal.field.serviceName.placeholder": "Например: ORCLPDB1", + "connection_modal.field.ssh_host": "SSH-хост", + "connection_modal.field.ssh_password": "SSH-пароль", + "connection_modal.field.ssh_user": "SSH-пользователь", + "connection_modal.field.ssl_cert_path": "Путь к SSL-сертификату", + "connection_modal.field.ssl_key_path": "Путь к SSL-ключу", + "connection_modal.field.tunnel_host": "Хост HTTP Tunnel", + "connection_modal.field.tunnel_password_optional": "Пароль HTTP Tunnel (необязательно)", + "connection_modal.field.tunnel_username_optional": "Имя пользователя HTTP Tunnel (необязательно)", + "connection_modal.field.uri": "URI", + "connection_modal.field.username": "Имя пользователя", + "connection_modal.field.username.optional_placeholder": "Оставьте пустым, если аутентификация отключена", + "connection_modal.group.chinese_databases": "Китайские базы данных", + "connection_modal.group.other": "Другое", + "connection_modal.group.relational": "Реляционные базы данных", + "connection_modal.group.time_series": "Базы данных временных рядов", + "connection_modal.help.additional_hosts": "Необязательные участники MongoDB, разделенные запятой, точкой с запятой или пробелом.", + "connection_modal.help.additional_srv_hosts": "Необязательные дополнительные SRV-хосты для обнаружения MongoDB.", + "connection_modal.help.connection_timeout": "Применяется к тестам подключения и загрузке метаданных. Диапазон: 1-300 секунд.", + "connection_modal.help.custom_driver": "Поддерживаются: mysql, postgres, sqlite, oracle, dm, kingbase. Алиасы: postgresql/pgx, dm8, kingbase8/kingbasees/kingbasev8. Расширение драйверов через JDBC Jar сейчас не поддерживается.", + "connection_modal.help.default_database": "Оставьте пустым, чтобы использовать базу данных сервера по умолчанию.", + "connection_modal.help.oracle_service_name": "Имя сервиса Oracle, например ORCLPDB1.", + "connection_modal.help.private_key_path": "Используйте закрытый ключ для SSH-аутентификации. Оставьте пароль пустым, если ключ не зашифрован.", + "connection_modal.help.redis_cluster_hosts": "Дополнительные узлы Redis Cluster, разделенные запятой, точкой с запятой или пробелом.", + "connection_modal.help.replica_hosts": "Хосты реплик в формате host:port, разделенные запятой, точкой с запятой или пробелом.", + "connection_modal.help.select_after_test": "Сначала выполните тест подключения, чтобы загрузить доступные базы данных.", + "connection_modal.help.uri": "Вставьте или сформируйте URI подключения.", + "connection_modal.jvm.access_mode_description": "Выберите режимы доступа JVM для этого подключения и предпочтительный режим.", + "connection_modal.jvm.access_mode_title": "Режимы доступа", + "connection_modal.jvm.agent_api_key_optional": "Ключ API Agent (необязательно)", + "connection_modal.jvm.agent_description": "Подключение через GoNavi Agent, когда прямой сетевой доступ ограничен.", + "connection_modal.jvm.agent_help": "Базовый URL сервиса GoNavi Agent.", + "connection_modal.jvm.agent_url": "URL Agent", + "connection_modal.jvm.diagnostic_api_key_optional": "Ключ API диагностики (необязательно)", + "connection_modal.jvm.diagnostic_description": "Включить необязательные диагностические команды для устранения неполадок JVM.", + "connection_modal.jvm.diagnostic_disabled_hint": "Диагностическое расширение отключено. Включайте его только для диагностики во время выполнения.", + "connection_modal.jvm.diagnostic_timeout_seconds": "Тайм-аут диагностики (секунды)", + "connection_modal.jvm.diagnostic_title": "Диагностическое расширение", + "connection_modal.jvm.diagnostic_transport": "Диагностический транспорт", + "connection_modal.jvm.diagnostic.agent_bridge_description": "Использовать диагностический Endpoint GoNavi Agent Bridge.", + "connection_modal.jvm.diagnostic.arthas_tunnel_description": "Использовать Arthas Tunnel для доступа к целевой JVM.", + "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Базовый URL сервера Arthas Tunnel.", + "connection_modal.jvm.diagnostic.arthas_tunnel_url": "URL Arthas Tunnel", + "connection_modal.jvm.diagnostic.bridge_help": "Базовый URL диагностического моста GoNavi.", + "connection_modal.jvm.diagnostic.bridge_url": "URL диагностического моста", + "connection_modal.jvm.diagnostic.mutating_commands": "Изменяющие команды", + "connection_modal.jvm.diagnostic.mutating_commands_description": "Разрешить команды, которые могут изменить состояние выполнения. Используйте только в контролируемых средах.", + "connection_modal.jvm.diagnostic.observe_commands": "Команды наблюдения", + "connection_modal.jvm.diagnostic.observe_commands_description": "Разрешить команды только для чтения, такие как dashboard, thread и сведения JVM.", + "connection_modal.jvm.diagnostic.target_agent_id": "ID целевого Agent", + "connection_modal.jvm.diagnostic.target_agent_id_help": "Agent ID, зарегистрированный в Arthas Tunnel.", + "connection_modal.jvm.diagnostic.target_id": "ID цели", + "connection_modal.jvm.diagnostic.target_id_help": "Идентификатор цели для диагностического моста. Оставьте пустым, если мост выбирает цель по умолчанию.", + "connection_modal.jvm.diagnostic.trace_commands": "Команды трассировки", + "connection_modal.jvm.diagnostic.trace_commands_description": "Разрешить trace и watch команды, которые добавляют нагрузку во время выполнения.", + "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", + "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", + "connection_modal.jvm.endpoint_api_key_optional": "Ключ API Endpoint (необязательно)", + "connection_modal.jvm.endpoint_description": "Подключаться к предоставленному сервисом Endpoint вместо прямого JMX.", + "connection_modal.jvm.endpoint_help": "Базовый URL Endpoint управления JVM.", + "connection_modal.jvm.endpoint_url": "URL Endpoint", + "connection_modal.jvm.environment": "Среда", + "connection_modal.jvm.environment.dev": "Разработка", + "connection_modal.jvm.environment.dev_description": "Тестовая среда с меньшим риском.", + "connection_modal.jvm.environment.prod": "Продакшен", + "connection_modal.jvm.environment.prod_description": "Производственная среда; рекомендуется режим только для чтения.", + "connection_modal.jvm.environment.uat": "UAT", + "connection_modal.jvm.environment.uat_description": "Среда проверки перед продакшеном.", + "connection_modal.jvm.jmx_description": "Подключение через JMX с хостом, портом и необязательными учетными данными.", + "connection_modal.jvm.jmx_host_override_optional": "Переопределение хоста JMX (необязательно)", + "connection_modal.jvm.jmx_password_optional": "Пароль JMX (необязательно)", + "connection_modal.jvm.jmx_port": "Порт JMX", + "connection_modal.jvm.jmx_username_optional": "Имя пользователя JMX (необязательно)", + "connection_modal.jvm.mode.agent_description": "Использовать GoNavi Agent для сред за firewall или NAT.", + "connection_modal.jvm.mode.endpoint_description": "Использовать HTTP Endpoint, предоставленный целевым сервисом.", + "connection_modal.jvm.mode.jmx_description": "Использовать стандартный удаленный доступ JMX.", + "connection_modal.jvm.preferred_mode_hint": "Текущий предпочтительный режим: {{mode}}", + "connection_modal.jvm.read_only_first": "Предпочитать операции только для чтения", + "connection_modal.jvm.security_policy": "Политика безопасности", + "connection_modal.jvm.target_description": "Настройте хост, порт и способ доступа к Endpoint управления JVM.", + "connection_modal.jvm.target_title": "Цель JVM", + "connection_modal.layout.custom": "Подключение через пользовательский драйвер", + "connection_modal.layout.file": "Подключение к файловой базе данных", + "connection_modal.layout.generic_sql": "Универсальное SQL-подключение", + "connection_modal.layout.jvm": "Подключение к среде JVM", + "connection_modal.layout.mongodb": "Подключение MongoDB", + "connection_modal.layout.mysql_compatible": "MySQL-совместимое подключение", + "connection_modal.layout.oracle": "Подключение Oracle", + "connection_modal.layout.postgres_compatible": "PostgreSQL-совместимое подключение", + "connection_modal.layout.redis": "Подключение Redis", "connection_modal.layoutKind.custom": "Пользовательский драйвер", "connection_modal.layoutKind.file": "Файловые базы данных", "connection_modal.layoutKind.genericSql": "Стандартный SQL", @@ -6846,18 +3062,1308 @@ "connection_modal.layoutKind.search": "Поисковые движки", "connection_modal.layoutKind.timeseries": "Базы данных временных рядов", "connection_modal.layoutKind.vector": "Векторные базы данных", + "connection_modal.message.connection_failed": "Не удалось подключиться", + "connection_modal.message.connection_params_incomplete": "Параметры подключения неполные.", + "connection_modal.message.connection_rejected": "Подключение отклонено.", + "connection_modal.message.connection_success": "Подключение успешно", + "connection_modal.message.copy_failed": "Операция не удалась", + "connection_modal.message.current_driver_not_enabled": "Текущий драйвер не установлен или не включен.", + "connection_modal.message.dameng_ssl_cert_required": "Заполните обязательное поле", + "connection_modal.message.database_list_failed": "Не удалось загрузить список баз данных: {{error}}", + "connection_modal.message.database_list_timeout": "Время операции истекло через {{seconds}} с", + "connection_modal.message.driver_not_enabled": "Драйвер не установлен или не включен.", + "connection_modal.message.driver_not_enabled_with_name": "Драйвер {{name}} не установлен или не включен. Сначала установите или включите его в управлении драйверами.", + "connection_modal.message.driver_not_enabled_with_name_short": "Драйвер {{name}} не установлен или не включен. Сначала откройте управление драйверами.", + "connection_modal.message.driver_unavailable_title": "Драйвер {{name}} недоступен", + "connection_modal.message.http_tunnel_host_required": "Заполните обязательное поле", + "connection_modal.message.http_tunnel_port_invalid": "Недопустимый порт HTTP Tunnel", + "connection_modal.message.member_discovery_failed": "Операция не удалась", + "connection_modal.message.member_discovery_success": "Обнаружено участников: {{count}}", + "connection_modal.message.no_visible_databases": "Видимые базы данных не возвращены.", + "connection_modal.message.no_visible_schema": "Видимые схемы не возвращены.", + "connection_modal.message.required_fields_before_test": "Заполните обязательные поля перед проверкой подключения.", + "connection_modal.message.save_backend_unavailable": "Операция не удалась", + "connection_modal.message.save_created_disconnected": "Конфигурация сохранена (без подключения).", + "connection_modal.message.save_failed": "Операция не удалась", + "connection_modal.message.save_security_refresh_failed": "Операция не удалась", + "connection_modal.message.save_updated_disconnected": "Конфигурация сохранена (не подключено)", + "connection_modal.message.select_database_file_failed": "Не удалось выбрать файл базы данных: {{error}}", + "connection_modal.message.select_ssh_key_failed": "Не удалось выбрать закрытый ключ SSH: {{error}}", + "connection_modal.message.srv_with_ssh_dns_warning": "SRV вместе с SSH Tunnel может зависеть от локального DNS. Если разрешение не удается, используйте стандартные хосты.", + "connection_modal.message.test_failed_detail": "Проверка не удалась: {{detail}}", + "connection_modal.message.test_requires_new_mongo_replica_password": "Перед проверкой введите новый пароль MongoDB Replica Set.", + "connection_modal.message.test_requires_new_mongodb_password": "Перед проверкой введите новый пароль MongoDB.", + "connection_modal.message.test_requires_new_password": "Перед проверкой введите новый пароль подключения.", + "connection_modal.message.test_requires_new_proxy_password": "Перед проверкой введите новый пароль прокси.", + "connection_modal.message.test_requires_new_replica_password": "Перед проверкой введите новый пароль реплики.", + "connection_modal.message.test_requires_new_ssh_password": "Перед проверкой введите новый SSH-пароль.", + "connection_modal.message.test_requires_new_tunnel_password": "Перед проверкой введите новый пароль HTTP Tunnel.", + "connection_modal.message.test_timeout": "Время операции истекло через {{seconds}} с", + "connection_modal.message.unsupported_jvm_diagnostic_transport": "Выбранный диагностический транспорт JVM не поддерживается", + "connection_modal.message.unsupported_jvm_modes": "Выбранный режим доступа JVM не поддерживается", + "connection_modal.message.unsupported_jvm_modes_current": "Это подключение содержит неподдерживаемые режимы доступа JVM", + "connection_modal.message.unsupported_jvm_modes_detected": "Обнаружены неподдерживаемые режимы доступа JVM", + "connection_modal.message.uri_copied": "URI скопирован", + "connection_modal.message.uri_empty_copy": "URI пуст: нечего копировать", + "connection_modal.message.uri_generate_failed": "Операция не удалась", + "connection_modal.message.uri_generated": "URI сформирован", + "connection_modal.message.uri_parse_failed": "Операция не удалась", + "connection_modal.message.uri_parsed": "URI разобран и перенесен в форму", + "connection_modal.message.uri_required": "Заполните обязательное поле", + "connection_modal.message.uri_type_mismatch": "Тип URI не соответствует выбранному источнику данных", + "connection_modal.messageQueue.kafka.defaultTopic.help": "Если поле пустое, Topic нужно явно указать в SQL. После заполнения SHOW, CONSUME или SELECT могут сразу выполнять предварительный просмотр.", + "connection_modal.messageQueue.kafka.defaultTopic.label": "Topic по умолчанию (необязательно)", + "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "Например: orders.events", + "connection_modal.messageQueue.kafka.extraBrokers.help": "Введите несколько адресов broker в формате host:port и нажмите Enter для подтверждения.", + "connection_modal.messageQueue.kafka.extraBrokers.label": "Дополнительные адреса Broker", + "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "Например: 10.10.0.12:9092, 10.10.0.13:9092", + "connection_modal.messageQueue.kafka.topology.cluster.description": "Настраивает несколько bootstrap broker, чтобы повысить успешность обнаружения и failover.", + "connection_modal.messageQueue.kafka.topology.single.description": "Настраивает один bootstrap broker для локальной или простой среды.", + "connection_modal.messageQueue.kafka.topology.single.label": "Один Broker", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "Если поле пустое, Topic нужно явно указать в SQL. После заполнения SHOW, CONSUME или SELECT могут сразу выполнять предварительный просмотр. Поддерживаются /, + и #.", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "Topic / Filter по умолчанию (необязательно)", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "Например: devices/+/telemetry", + "connection_modal.messageQueue.mqtt.extraBrokers.help": "Введите несколько адресов broker в формате host:port и нажмите Enter для подтверждения.", + "connection_modal.messageQueue.mqtt.extraBrokers.label": "Дополнительные адреса Broker", + "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "Например: 10.10.0.12:1883, 10.10.0.13:1883", + "connection_modal.messageQueue.mqtt.topology.cluster.description": "Настраивает несколько broker, чтобы повысить успешность обнаружения подключения и failover.", + "connection_modal.messageQueue.mqtt.topology.single.description": "Настраивает один broker для локальной или простой среды.", + "connection_modal.messageQueue.mqtt.topology.single.label": "Один Broker", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "Если поле пустое, по умолчанию используется /. После заполнения редактор запросов использует текущий vhost как контекст просмотра Queue и тестовой отправки.", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "Virtual Host по умолчанию (необязательно)", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "Например: / или orders-vhost", + "connection_modal.messageQueue.rocketmq.defaultTopic.help": "Если поле пустое, Topic нужно явно указать в SQL. В параметрах подключения можно дополнительно задать groupId, namespace, tag, pullBatchSize и startOffset.", + "connection_modal.messageQueue.rocketmq.defaultTopic.label": "Topic по умолчанию (необязательно)", + "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "Например: orders.events", + "connection_modal.messageQueue.rocketmq.extraNameServers.help": "Введите несколько адресов NameServer в формате host:port и нажмите Enter для подтверждения.", + "connection_modal.messageQueue.rocketmq.extraNameServers.label": "Дополнительные адреса NameServer", + "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "Например: 10.10.0.12:9876, 10.10.0.13:9876", + "connection_modal.messageQueue.rocketmq.topology.cluster.description": "Настраивает несколько NameServer, чтобы повысить успешность обнаружения маршрутов и failover.", + "connection_modal.messageQueue.rocketmq.topology.single.description": "Настраивает один NameServer для локальной или простой среды.", + "connection_modal.messageQueue.rocketmq.topology.single.label": "Один NameServer", + "connection_modal.messageQueue.topology.cluster.label": "Режим кластера", + "connection_modal.mongodb.auth_mechanism": "Механизм аутентификации", + "connection_modal.mongodb.auth.auto": "Авто", + "connection_modal.mongodb.auth.auto_description": "Позволить драйверу выбрать механизм аутентификации.", + "connection_modal.mongodb.auth.aws_iam_description": "Использовать аутентификацию AWS IAM. Учетные данные AWS IAM должны быть в среде выполнения.", + "connection_modal.mongodb.auth.none": "Без аутентификации", + "connection_modal.mongodb.auth.none_description": "Подключаться без аутентификации MongoDB.", + "connection_modal.mongodb.auth.scram_sha1_description": "Использовать аутентификацию SCRAM-SHA-1.", + "connection_modal.mongodb.auth.scram_sha256_description": "Использовать аутентификацию SCRAM-SHA-256.", + "connection_modal.mongodb.discovery.current": "Текущий", + "connection_modal.mongodb.discovery.srv_ssh_warning": "Если SRV и SSH Tunnel включены одновременно, может потребоваться локальное DNS-разрешение.", + "connection_modal.mongodb.discovery.srv.description": "Использовать mongodb+srv, чтобы DNS обнаружил целевые узлы.", + "connection_modal.mongodb.discovery.srv.label": "SRV-адрес", + "connection_modal.mongodb.discovery.standard.description": "Подключение напрямую через host:port или список узлов Replica Set.", + "connection_modal.mongodb.discovery.standard.label": "Стандартный адрес", + "connection_modal.mongodb.members.health": "Состояние", + "connection_modal.mongodb.members.health.error": "Ошибка", + "connection_modal.mongodb.members.health.ok": "Норма", + "connection_modal.mongodb.members.role": "Роль", + "connection_modal.mongodb.policy.auth_source.label": "База аутентификации (authSource)", + "connection_modal.mongodb.policy.auth_source.placeholder": "По умолчанию используется database или admin", + "connection_modal.mongodb.read_preference": "readPreference", + "connection_modal.mongodb.read_preference.nearest": "Направлять чтение к ближайшему участнику.", + "connection_modal.mongodb.read_preference.primary": "Читать только с primary.", + "connection_modal.mongodb.read_preference.primary_preferred": "Предпочитать primary, при необходимости переходить на secondary.", + "connection_modal.mongodb.read_preference.secondary": "Читать только с secondary.", + "connection_modal.mongodb.read_preference.secondary_preferred": "Предпочитать secondary, при необходимости переходить на primary.", + "connection_modal.mongodb.replica.hosts.srv.help": "Введите несколько имен кандидатов host в формате host. Если оставить пустым, используется только host выше.", + "connection_modal.mongodb.replica.hosts.srv.label": "Дополнительные SRV-хосты (необязательно)", + "connection_modal.mongodb.replica.hosts.srv.placeholder": "Например: cluster-a.example.com, cluster-b.example.com", + "connection_modal.mongodb.replica.hosts.standard.help": "Введите несколько адресов узлов в формате host:port и нажмите Enter для подтверждения.", + "connection_modal.mongodb.replica.hosts.standard.label": "Дополнительные адреса узлов", + "connection_modal.mongodb.replica.hosts.standard.placeholder": "Например: 10.10.0.12:27017, 10.10.0.13:27017", + "connection_modal.mongodb.replica.password.clear": "Очистить сохраненный пароль Replica Set", + "connection_modal.mongodb.replica.password.description": "Пароль Replica Set уже сохранен. Оставьте поле пустым, чтобы продолжить использовать его, или введите новое значение для замены.", + "connection_modal.mongodb.replica.password.label": "Пароль Replica Set (необязательно)", + "connection_modal.mongodb.replica.password.placeholder.empty": "Оставьте пустым, чтобы использовать основной пароль", + "connection_modal.mongodb.replica.password.placeholder.retained": "Сохраненный пароль Replica Set", + "connection_modal.mongodb.replica.set.label": "Имя Replica Set (необязательно)", + "connection_modal.mongodb.replica.set.placeholder": "Например: rs0", + "connection_modal.mongodb.replica.user.label": "Имя пользователя Replica Set (необязательно)", + "connection_modal.mongodb.replica.user.placeholder": "Оставьте пустым, чтобы использовать основное имя пользователя", + "connection_modal.mongodb.srv_address": "SRV-адрес", + "connection_modal.mongodb.srv_address_description": "Использовать запись MongoDB SRV для обнаружения хостов.", + "connection_modal.mongodb.standard_address": "Стандартный адрес", + "connection_modal.mongodb.standard_address_description": "Использовать хост и порт, а также необязательный список участников.", + "connection_modal.mongodb.topology.replica.label": "Replica Set / несколько узлов", + "connection_modal.mongodb.topology.single.label": "Одиночный режим", + "connection_modal.network.http_tunnel": "HTTP Tunnel", + "connection_modal.network.http_tunnel_description": "Перенаправлять трафик базы данных через HTTP Tunnel.", + "connection_modal.network.http_tunnel_disabled_hint": "Включите HTTP Tunnel, чтобы настроить хост, порт и учетные данные Tunnel.", + "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel нельзя использовать вместе с SSH Tunnel или прокси.", + "connection_modal.network.http_tunnel_panel_description": "Настройте шлюз HTTP Tunnel для этого подключения.", + "connection_modal.network.proxy": "Прокси", + "connection_modal.network.proxy_disabled_hint": "Включите прокси, чтобы направить это подключение через SOCKS5 или HTTP CONNECT.", + "connection_modal.network.proxy_panel_description": "Настройте параметры прокси для этого подключения.", + "connection_modal.network.proxy_type.http_description": "Использовать прокси HTTP CONNECT.", + "connection_modal.network.proxy_type.socks5_description": "Использовать прокси SOCKS5.", + "connection_modal.network.ssh_disabled_hint": "Включите SSH Tunnel для подключения через bastion host.", + "connection_modal.network.ssh_panel_description": "Настройте хост SSH Tunnel, учетные данные и необязательный закрытый ключ.", + "connection_modal.network.ssh_tunnel": "SSH Tunnel", + "connection_modal.network.ssh_tunnel_description": "Подключаться к базе данных через SSH Tunnel.", + "connection_modal.network.ssl_description": "Шифровать подключение к базе данных с помощью SSL/TLS.", + "connection_modal.network.ssl_disabled_hint": "Включите SSL/TLS для настройки политики сертификатов.", + "connection_modal.network.ssl_mode": "Режим SSL", + "connection_modal.network.ssl_mode.preferred": "Предпочтительно", + "connection_modal.network.ssl_mode.preferred_description": "Сначала попробовать SSL и откатиться, если сервер не требует шифрования.", + "connection_modal.network.ssl_mode.required": "Обязательно", + "connection_modal.network.ssl_mode.required_description": "Требовать SSL и завершать ошибкой, если шифрованное подключение невозможно.", + "connection_modal.network.ssl_mode.skip_verify": "Без проверки", + "connection_modal.network.ssl_mode.skip_verify_description": "Использовать SSL, но пропустить проверку сертификата. Только для тестов или самоподписанных сертификатов.", + "connection_modal.network.ssl_panel_description": "Настройте политику SSL/TLS для этого подключения.", + "connection_modal.network.ssl_tls": "SSL/TLS", + "connection_modal.placeholder.absolute_path": "/absolute/path/to/file", + "connection_modal.placeholder.agent_api_key": "Необязательный ключ API Agent", + "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", + "connection_modal.placeholder.connection_name": "подключение имя", + "connection_modal.placeholder.connection_name_fallback": "Имя подключения", + "connection_modal.placeholder.custom_dsn_example": "Пример: DSN конкретного драйвера", + "connection_modal.placeholder.default_database_or_admin": "база данных по умолчанию или admin", + "connection_modal.placeholder.diagnostic_api_key": "Необязательный ключ API диагностики", + "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", + "connection_modal.placeholder.diagnostic_target_id": "ID цели", + "connection_modal.placeholder.driver_name": "драйвер имя", + "connection_modal.placeholder.empty_without_auth": "Оставьте пустым без аутентификации", + "connection_modal.placeholder.endpoint_api_key": "Необязательный ключ API Endpoint", + "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", + "connection_modal.placeholder.example_appdb": "appdb", + "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", + "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", + "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", + "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", + "connection_modal.placeholder.example_rs0": "rs0", + "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", + "connection_modal.placeholder.jvm_name": "jvm имя", + "connection_modal.placeholder.no_auth": "Без аутентификации", + "connection_modal.placeholder.proxy_host": "127.0.0.1", + "connection_modal.placeholder.redis_password": "Пароль Redis", + "connection_modal.placeholder.select_databases": "Выберите базы данных для отображения", + "connection_modal.placeholder.select_redis_databases": "Выберите базы Redis для отображения", + "connection_modal.placeholder.ssh_host": "bastion.example.com", + "connection_modal.placeholder.ssl_cert_path": "/absolute/path/client.crt", + "connection_modal.placeholder.ssl_key_path": "/absolute/path/client.key", + "connection_modal.placeholder.tunnel_host": "tunnel.example.com", + "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", + "connection_modal.placeholder.use_primary_host": "Использовать основной хост", + "connection_modal.placeholder.use_primary_password": "Использовать основной пароль", + "connection_modal.placeholder.use_primary_password_short": "Использовать основной пароль", + "connection_modal.placeholder.use_primary_port": "Использовать основной порт", + "connection_modal.placeholder.use_primary_username": "Использовать основное имя пользователя", + "connection_modal.placeholder.use_primary_username_short": "Использовать основное имя пользователя", + "connection_modal.redis.credentials.primary.label": "Пароль (необязательно)", + "connection_modal.redis.credentials.primary.placeholder.empty": "Пароль Redis, если задан requirepass", + "connection_modal.redis.credentials.primary.placeholder.retained": "Сохраненный пароль Redis", + "connection_modal.redis.credentials.sentinelPassword.clear": "Очистить сохраненный пароль Sentinel", + "connection_modal.redis.credentials.sentinelPassword.description": "Пароль Sentinel уже сохранен. Оставьте поле пустым, чтобы продолжить использовать его, или введите новое значение для замены.", + "connection_modal.redis.credentials.sentinelPassword.label": "Пароль Sentinel (необязательно)", + "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Пароль аутентификации самого Sentinel. Оставьте пустым, чтобы ничего не отправлять.", + "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "Сохраненный пароль Sentinel", + "connection_modal.redis.credentials.sentinelUser.label": "Имя пользователя Sentinel (необязательно)", + "connection_modal.redis.credentials.sentinelUser.placeholder": "Оставьте пустым, если Sentinel не использует имя пользователя ACL", + "connection_modal.redis.databaseScope.help": "Можно выбрать после успешной проверки подключения", + "connection_modal.redis.databaseScope.label": "Показываемые базы данных (пусто значит все)", + "connection_modal.redis.databaseScope.placeholder": "Выберите базы данных для показа", + "connection_modal.redis.hosts.cluster.help": "Указанный выше host используется как primary-узел. Введите здесь другие seed-узлы в формате host:port.", + "connection_modal.redis.hosts.cluster.label": "Дополнительные адреса узлов кластера", + "connection_modal.redis.hosts.cluster.placeholder": "Например: 10.10.0.12:6379, 10.10.0.13:6379", + "connection_modal.redis.hosts.sentinel.help": "Указанный выше host используется как первый Sentinel. Введите здесь другие узлы Sentinel в формате host:port.", + "connection_modal.redis.hosts.sentinel.label": "Дополнительные адреса узлов Sentinel", + "connection_modal.redis.hosts.sentinel.placeholder": "Например: 10.10.0.12:26379, 10.10.0.13:26379", + "connection_modal.redis.sentinel.master.help": "Введите имя monitor из конфигурации Sentinel, например mymaster.", + "connection_modal.redis.sentinel.master.label": "Имя Sentinel master", + "connection_modal.redis.sentinel.master.placeholder": "Например: mymaster", + "connection_modal.redis.sentinel.master.required": "Введите имя Sentinel master", + "connection_modal.redis.topology.cluster.description": "Redis Cluster с несколькими seed-узлами.", + "connection_modal.redis.topology.cluster.label": "Режим кластера", + "connection_modal.redis.topology.sentinel.description": "Обнаруживает primary-узел через Sentinel для высокой доступности primary-replica.", + "connection_modal.redis.topology.sentinel.label": "Режим Sentinel", + "connection_modal.redis.topology.single.description": "Подключение к одному узлу Redis.", + "connection_modal.redis.topology.single.label": "Одиночный режим", + "connection_modal.secret.blocking.redis_sentinel": "Перед проверкой введите новый пароль Sentinel или отмените очистку сохраненного пароля Sentinel", + "connection_modal.secret.clear_saved_dsn": "Очистить сохраненный DSN", + "connection_modal.secret.clear_saved_mongo_replica_password": "Очистить сохраненный пароль реплики MongoDB", + "connection_modal.secret.clear_saved_password": "Очистить сохраненный пароль", + "connection_modal.secret.clear_saved_proxy_password": "Очистить сохраненный пароль прокси", + "connection_modal.secret.clear_saved_replica_password": "Очистить сохраненный пароль реплики", + "connection_modal.secret.clear_saved_ssh_password": "Очистить сохраненный SSH-пароль", + "connection_modal.secret.clear_saved_tunnel_password": "Очистить сохраненный пароль HTTP Tunnel", + "connection_modal.secret.clear_saved_uri": "Очистить сохраненный URI", "connection_modal.secret.error.saved_connection_deleted": "Сохраненное подключение не найдено. Возможно, оно было удалено. Обновите список и попробуйте еще раз.", + "connection_modal.secret.error.saved_connection_missing": "Сохраненный секрет для текущего подключения не найден. Повторно введите пароль, сохраните и попробуйте снова.", + "connection_modal.secret.error.store_unavailable": "Безопасное хранилище секретов сейчас недоступно. Проверьте системную связку ключей или диспетчер учетных данных и попробуйте снова.", + "connection_modal.secret.new_value_replaces_saved": "Введено новое значение. При сохранении оно заменит текущие сохраненные данные.", + "connection_modal.secret.saved_dsn_description": "DSN уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", + "connection_modal.secret.saved_mongo_replica_password": "Сохраненный пароль реплики MongoDB", + "connection_modal.secret.saved_mongo_replica_password_description": "Пароль реплики MongoDB уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", + "connection_modal.secret.saved_password": "Сохраненный пароль", + "connection_modal.secret.saved_placeholder": "•••••• (оставьте пустым, чтобы продолжить использовать {{label}})", + "connection_modal.secret.saved_primary_password_description": "Пароль основного подключения уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", + "connection_modal.secret.saved_proxy_password": "Сохраненный пароль прокси", + "connection_modal.secret.saved_proxy_password_description": "Пароль прокси уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", + "connection_modal.secret.saved_redis_password": "Сохраненный пароль Redis", + "connection_modal.secret.saved_redis_password_description": "Пароль Redis уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", + "connection_modal.secret.saved_replica_password": "Сохраненный пароль реплики", + "connection_modal.secret.saved_replica_password_description": "Пароль реплики уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", + "connection_modal.secret.saved_ssh_password": "Сохраненный SSH-пароль", + "connection_modal.secret.saved_ssh_password_description": "SSH-пароль уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", + "connection_modal.secret.saved_tunnel_password": "Сохраненный пароль HTTP Tunnel", + "connection_modal.secret.saved_tunnel_password_description": "Пароль HTTP Tunnel уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", + "connection_modal.secret.saved_uri_description": "URI подключения уже сохранен в защищенном хранилище. Оставьте поле пустым, чтобы сохранить его.", + "connection_modal.section.advanced_connection": "Расширенное подключение", + "connection_modal.section.appearance.description": "Задайте значок и цвет подключения в боковой панели.", + "connection_modal.section.appearance.title": "Внешний вид", + "connection_modal.section.basic.description": "Назовите подключение и укажите цель, драйвер и данные аутентификации.", + "connection_modal.section.basic.jvm_description": "Настройте цель JVM, режимы доступа и учетные данные.", + "connection_modal.section.basic.sql_description": "Настройте цель, драйвер, учетные данные и область баз данных.", + "connection_modal.section.basic.title": "Основная информация", + "connection_modal.section.config_sections": "Разделы конфигурации", + "connection_modal.section.network.description": "Настройте SSL/TLS, SSH Tunnel, прокси и HTTP Tunnel.", + "connection_modal.section.network.nav_description": "Настройте сеть и безопасность для этого подключения.", + "connection_modal.section.network.title": "Сеть и безопасность", + "connection_modal.ssl_hint.dameng": "Для SSL в Dameng нужны пути к клиентскому сертификату и закрытому ключу (sslCertPath / sslKeyPath).", + "connection_modal.ssl_hint.default": "Предпочитайте Required. Используйте Skip Verify только для тестов или самоподписанных сертификатов.", + "connection_modal.ssl_hint.mongodb": "Подключения MongoDB можно защитить через TLS. Если проверка сертификата мешает тесту, сначала используйте Skip Verify.", + "connection_modal.ssl_hint.mysql_like": "Включите SSL, если MySQL/MariaDB/Doris/Sphinx требует защищенную передачу. Для самоподписанных сертификатов сначала проверьте Preferred или Skip Verify.", + "connection_modal.ssl_hint.sqlserver": "Для SQL Server в продакшене используйте Required и отключите TrustServerCertificate.", + "connection_modal.status.disabled": "Отключено", + "connection_modal.status.enabled": "Включено", + "connection_modal.status.healthy": "Исправен", + "connection_modal.status.unhealthy": "Неисправен", + "connection_modal.step.select_source": "Выбор источника данных", + "connection_modal.step.select_source_description": "Выберите тип создаваемого подключения.", + "connection_modal.step1.group.domestic": "Отечественные базы данных", "connection_modal.step1.group.message_queue": "Очереди сообщений", + "connection_modal.step1.group.nosql": "Базы данных NoSQL", + "connection_modal.step1.group.other": "Другое", + "connection_modal.step1.group.relational": "Реляционные базы данных", + "connection_modal.step1.group.timeseries": "Базы данных временных рядов", "connection_modal.step1.group.vector": "Векторные базы данных", "connection_modal.step1.hint.chroma": "Просмотр Collection, векторный поиск и фильтрация метаданных", + "connection_modal.step1.hint.custom": "Пользовательский драйвер и DSN", "connection_modal.step1.hint.elasticsearch": "Просмотр индексов, проверка Mapping, JSON DSL и запросы query_string", + "connection_modal.step1.hint.file": "Подключение к локальному файлу", "connection_modal.step1.hint.goldendb": "Совместимость с MySQL / распределенные транзакции", + "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", + "connection_modal.step1.hint.mongodb": "Одиночный узел / Replica Set", + "connection_modal.step1.hint.oceanBase": "MySQL / Oracle арендатор", "connection_modal.step1.hint.qdrant": "Просмотр Collection, векторный поиск и фильтрация Payload", + "connection_modal.step1.hint.redis": "Одиночный узел / кластер", + "connection_modal.step1.hint.standard": "Стандартная конфигурация подключения", + "connection_modal.switch.off": "Выкл", + "connection_modal.switch.on": "Вкл", + "connection_modal.table.health": "Состояние", + "connection_modal.table.role": "Роль", + "connection_modal.test_error.description": "Просмотрите полный текст ошибки, возвращенной backend.", + "connection_modal.test_error.empty": "Нет сведений об ошибке", + "connection_modal.test_error.title": "Сведения об ошибке проверки подключения", + "connection_modal.test.redis_database_list_failure": "Подключение успешно, но не удалось загрузить список баз данных Redis: {{detail}}", + "connection_modal.test.redis_database_list_timeout": "Подключение успешно, но загрузка списка баз данных Redis превысила время ожидания (>{{seconds}} сек.)", + "connection_modal.title.create": "Новое подключение {{type}}", + "connection_modal.title.create_description": "Введите и сохраните конфигурацию подключения.", + "connection_modal.title.edit": "Изменить подключение", + "connection_modal.title.edit_description": "Измените конфигурацию подключения {{type}}.", + "connection_modal.title.select_type": "Выберите тип источника данных", + "connection_modal.title.select_type_description": "Выберите один из поддерживаемых типов источников данных.", + "connection_modal.topology.cluster": "Кластер", + "connection_modal.topology.mongodb_replica": "Replica Set", + "connection_modal.topology.mongodb_replica_description": "Подключиться к MongoDB Replica Set и при необходимости обнаружить участников.", + "connection_modal.topology.mongodb_single_description": "Подключиться к одному хосту MongoDB.", + "connection_modal.topology.mysql_replica_description": "Использовать основное подключение и необязательные хосты реплик.", + "connection_modal.topology.mysql_single_description": "Подключиться к одному MySQL-совместимому узлу.", + "connection_modal.topology.primary_replica": "Primary/replica", + "connection_modal.topology.redis_cluster_description": "Подключиться к Redis Cluster и указать дополнительные узлы.", + "connection_modal.topology.redis_single_description": "Подключиться к одному узлу Redis.", + "connection_modal.topology.single": "Один узел", + "connection_modal.validation.address_or_path_required": "Введите адрес хоста или путь к файлу", + "connection_modal.validation.agent_url_required": "Введите URL Agent", + "connection_modal.validation.arthas_tunnel_url_required": "Введите URL Arthas Tunnel", + "connection_modal.validation.custom_dsn_required": "Введите строку подключения.", + "connection_modal.validation.custom_dsn_required_when_clearing_saved": "Введите новую строку подключения или отмените очистку сохраненного DSN.", + "connection_modal.validation.dameng_ssl_cert_path_required": "Введите путь к SSL-сертификату Dameng", + "connection_modal.validation.dameng_ssl_key_path_required": "Введите путь к SSL-ключу Dameng", + "connection_modal.validation.diagnostic_bridge_url_required": "Введите URL диагностического моста", + "connection_modal.validation.diagnostic_target_required": "Введите диагностическую цель", + "connection_modal.validation.diagnostic_timeout_range_1_300": "Тайм-аут диагностики должен быть от 1 до 300 секунд", + "connection_modal.validation.driver_name_required": "Введите имя драйвера.", + "connection_modal.validation.endpoint_url_required": "Введите URL Endpoint", + "connection_modal.validation.jvm_access_mode_required": "Выберите хотя бы один режим доступа JVM", + "connection_modal.validation.jvm_host_required": "Введите хост JVM.", + "connection_modal.validation.jvm_port_required": "Введите порт JVM.", + "connection_modal.validation.jvm_preferred_mode_required": "Выберите предпочтительный режим доступа JVM", + "connection_modal.validation.oracle_service_required": "Введите имя сервиса Oracle", + "connection_modal.validation.port_required": "Введите порт", + "connection_modal.validation.proxy_host_required": "Введите хост прокси", + "connection_modal.validation.proxy_port_required": "Введите порт прокси", + "connection_modal.validation.ssh_host_required": "Введите SSH-хост", + "connection_modal.validation.ssh_port_required": "Введите SSH-порт", + "connection_modal.validation.ssh_user_required": "Введите SSH-пользователя", + "connection_modal.validation.timeout_range_1_300": "Тайм-аут должен быть от 1 до 300 секунд", + "connection_modal.validation.tunnel_host_required": "Введите хост HTTP Tunnel", + "connection_modal.validation.tunnel_port_required": "Введите порт HTTP Tunnel", + "connection_modal.validation.username_required": "Введите имя пользователя", + "connection.copy_suffix": " - копия", + "connection.delete": "Удалить подключение", + "connection.edit": "Изменить подключение", + "connection.new": "Новое подключение", "connection.oceanbase.error.unsupported_protocol": "OceanBase поддерживает только tenant-протоколы MySQL/Oracle; \"{{value}}\" не поддерживается. Переключитесь на MySQL или Oracle.", + "connection.sidebar.delete.backendUnavailable": "Не удалось удалить подключение: интерфейс бэкенда недоступен", + "connection.sidebar.delete.confirmContent": "Удалить подключение \"{{name}}\"?", + "connection.sidebar.delete.confirmTitle": "Подтвердить удаление", + "connection.sidebar.delete.failureFallback": "Не удалось удалить подключение", + "connection.sidebar.delete.success": "Подключение удалено", + "connection.sidebar.disconnect.success": "Подключение отключено", + "connection.sidebar.duplicate.backendUnavailable": "Не удалось скопировать подключение: интерфейс бэкенда недоступен", + "connection.sidebar.duplicate.failureFallback": "Не удалось скопировать подключение", + "connection.sidebar.duplicate.noResult": "Не удалось скопировать подключение: бэкенд не вернул результат", + "connection.sidebar.duplicate.success": "Подключение скопировано: {{name}}", + "connection.sidebar.group.badge": "Группа", + "connection.sidebar.group.collapseAria": "Свернуть группу подключений {{name}}", + "connection.sidebar.group.delete": "Удалить группу", + "connection.sidebar.group.deleteConfirmContent": "Удалить группу \"{{name}}\"? Подключения внутри останутся.", + "connection.sidebar.group.deleteConfirmTitle": "Подтвердить удаление", + "connection.sidebar.group.edit": "Изменить группу", + "connection.sidebar.group.expandAria": "Развернуть группу подключений {{name}}", + "connection.sidebar.group.meta": "{{count}} подключений · Группа подключений", + "connection.sidebar.group.untitled": "Группа без имени", + "connection.sidebar.menu.copy": "Копировать подключение", + "connection.sidebar.menu.createDatabase": "Новая база данных", + "connection.sidebar.menu.current": "Текущий", + "connection.sidebar.menu.delete": "Удалить подключение", + "connection.sidebar.menu.disconnect": "Отключить", + "connection.sidebar.menu.groupSection": "Группы подключений", + "connection.sidebar.menu.hostBadge": "HOST", + "connection.sidebar.menu.hostFallback": "Адрес не указан", + "connection.sidebar.menu.moveOutTag": "Убрать из тега", + "connection.sidebar.menu.moveToTag": "Переместить в тег", + "connection.sidebar.menu.moveToUngrouped": "Убрать из группы", + "connection.sidebar.menu.refresh": "Обновить подключение", + "connection.sidebar.menu.section": "Подключение", + "connection.test": "Проверить подключение", + "connection.unnamed": "Безымянное подключение", + "data_grid.action.apply": "Применить", + "data_grid.ai_insight.prompt": "Проанализируй следующие результаты запроса (первые {{count}} строк примера):\n```json\n{{json}}\n```\n\nПроанализируй характеристики данных, найди закономерности или предложи бизнес-инсайты.", + "data_grid.ai_prompt.analyze_page": "Проанализируй следующие данные результата запроса (первые {{count}} строк-образцов):\n```json\n{{json}}\n```\n\nОпредели особенности данных, найди закономерности или дай бизнес-выводы.", "data_grid.aria.row_number": "Номер строки", + "data_grid.batch_fill.set_null": "Установить NULL", + "data_grid.batch_fill.title": "Массовое заполнение ({{count}} ячеек)", + "data_grid.batch_fill.value_placeholder": "Введите значение для заполнения", + "data_grid.cell_editor.now": "Сейчас", + "data_grid.cell_editor.title": "Редактировать ячейку", + "data_grid.cell_editor.title_with_column": "Редактировать ячейку: {{column}}", + "data_grid.column_quick_find.placeholder": "Перейти к столбцу...", + "data_grid.column_quick_find.tooltip": "Введите имя столбца, затем нажмите Enter или кнопку перехода, чтобы перейти к этому столбцу", + "data_grid.column_settings.column_visibility": "Видимость столбцов", + "data_grid.column_settings.display_settings": "Настройки отображения", + "data_grid.column_settings.field_info": "Информация о поле", + "data_grid.column_settings.hide_all": "Скрыть все", + "data_grid.column_settings.remember_column_order": "Запомнить пользовательский порядок столбцов", + "data_grid.column_settings.remember_hidden_columns": "Запомнить настройки скрытых столбцов", + "data_grid.column_settings.reset_hidden": "Сбросить скрытые столбцы", + "data_grid.column_settings.reset_hidden_success": "Все столбцы снова отображаются", + "data_grid.column_settings.reset_order": "Сбросить порядок", + "data_grid.column_settings.reset_order_success": "Порядок столбцов по умолчанию восстановлен", + "data_grid.column_settings.search_columns_placeholder": "Поиск по именам столбцов...", + "data_grid.column_settings.show_all": "Показать все", + "data_grid.column_settings.show_comments": "Показывать комментарии столбцов в заголовке", + "data_grid.column_settings.show_types": "Показывать типы столбцов в заголовке", + "data_grid.column.comment_tooltip": "Комментарий: {{comment}}", + "data_grid.column.drag_tooltip": "Перетащите, чтобы изменить порядок столбцов", + "data_grid.column.foreign_key_jump_title": "Перейти к таблице внешнего ключа: {{tableName}}", + "data_grid.column.foreign_key_tooltip": "Внешний ключ: {{target}}", + "data_grid.column.resize_tooltip": "Перетащите, чтобы изменить ширину столбца; двойной щелчок подгонит автоматически", + "data_grid.column.type_tooltip": "Тип: {{type}}", + "data_grid.context_menu.auto_fit_column": "Подогнать ширину столбца по содержимому", + "data_grid.context_menu.clear_column_sort": "Сбросить сортировку этого поля", + "data_grid.context_menu.column_display_section": "Отображение поля", + "data_grid.context_menu.column_no_comment": "Нет комментария", + "data_grid.context_menu.column_unknown_type": "Неизвестный тип", + "data_grid.context_menu.column_unnamed_field": "Поле без имени", + "data_grid.context_menu.copy_as_csv": "Копировать как CSV", + "data_grid.context_menu.copy_as_delete": "Копировать как DELETE", + "data_grid.context_menu.copy_as_insert": "Копировать как INSERT", + "data_grid.context_menu.copy_as_json": "Копировать как JSON", + "data_grid.context_menu.copy_as_markdown": "Копировать как Markdown", + "data_grid.context_menu.copy_as_update": "Копировать как UPDATE", + "data_grid.context_menu.copy_column_data": "Копировать данные столбца", + "data_grid.context_menu.copy_field_name": "Копировать имя поля", + "data_grid.context_menu.copy_row_as_new": "Копировать эту строку как новую", + "data_grid.context_menu.copy_row_data": "Копировать данные строки", + "data_grid.context_menu.current_cell": "Текущая ячейка", + "data_grid.context_menu.current_marker": "Текущий", + "data_grid.context_menu.current_row": "Текущая строка", + "data_grid.context_menu.edit_row": "Редактировать эту строку", + "data_grid.context_menu.edit_section": "Редактировать", + "data_grid.context_menu.export_as_csv": "Экспортировать как CSV", + "data_grid.context_menu.export_as_excel": "Экспортировать как Excel", + "data_grid.context_menu.export_as_html": "Экспортировать как HTML", + "data_grid.context_menu.export_as_json": "Экспортировать как JSON", + "data_grid.context_menu.export_selected": "Экспортировать выбранные данные", + "data_grid.context_menu.fill_to_selected_rows": "Заполнить выбранные строки ({{count}})", + "data_grid.context_menu.hide_column": "Скрыть это поле", + "data_grid.context_menu.hide_column_comment": "Скрыть комментарий поля", + "data_grid.context_menu.hide_column_type": "Скрыть тип поля", + "data_grid.context_menu.paste_copied_columns": "Вставить скопированные столбцы (с теми же именами)", + "data_grid.context_menu.paste_row_as_new": "Вставить как новую строку", + "data_grid.context_menu.paste_row_as_new_count": "Вставить как новую строку ({{count}})", + "data_grid.context_menu.show_column_comment": "Показать комментарий поля", + "data_grid.context_menu.show_column_type": "Показать тип поля", + "data_grid.context_menu.sort_ascending": "Сортировать по возрастанию", + "data_grid.context_menu.sort_descending": "Сортировать по убыванию", + "data_grid.context_menu.sort_section": "Сортировка", + "data_grid.context_menu.undo_cell_change": "Отменить изменение этой ячейки", + "data_grid.copy_sql.error.missing_safe_where": "В текущем наборе результатов нет первичного или уникального ключа, который безопасно определяет строку, и он не покрывает все столбцы таблицы, поэтому условие WHERE нельзя сформировать.", + "data_grid.copy_sql.error.missing_table_name": "Текущий набор результатов не связан с явным именем таблицы, поэтому {{mode}} SQL нельзя сформировать.", + "data_grid.copy_sql.error.no_copyable_fields": "В текущем наборе результатов нет полей, которые можно скопировать, поэтому SQL нельзя сформировать.", + "data_grid.data_panel.click_cell_description": "Щелкните ячейку таблицы, чтобы просмотреть данные полностью", + "data_grid.data_panel.click_cell_title": "Щелкните ячейку для просмотра данных", + "data_grid.data_panel.title": "Предпросмотр данных", + "data_grid.datetime_picker.now": "Сейчас", + "data_grid.ddl.copy": "Копировать DDL", + "data_grid.ddl.layout_bottom": "Снизу", + "data_grid.ddl.layout_side": "Боковая панель", + "data_grid.ddl.loading": "Загрузка DDL...", + "data_grid.ddl.reload": "Перезагрузить", + "data_grid.ddl.sidebar_aria": "Боковая панель DDL таблицы", + "data_grid.ddl.view": "Показать DDL", + "data_grid.embedded_designer.title": "Проектирование таблицы ({{tableName}})", + "data_grid.error_boundary.description": "При отображении таблицы данных произошла ошибка. Возможно, формат данных недопустим.", + "data_grid.error_boundary.retry": "Повторить", + "data_grid.error_boundary.title": "Ошибка отображения", + "data_grid.export.all_data": "Экспортировать все данные", + "data_grid.export.all_rows": "Экспорт всех строк ({{count}})", + "data_grid.export.all_rows_requery": "Экспортировать всё (повторный запрос)", + "data_grid.export.current_page": "Экспортировать текущую страницу ({{count}} строк)", + "data_grid.export.current_page_rows": "Экспорт текущей страницы ({{count}} строк)", + "data_grid.export.group_filtered_results": "Отфильтрованные результаты", + "data_grid.export.group_full_table": "Вся таблица", + "data_grid.export.no_selection_prompt": "Строки не выбраны. Выберите область экспорта:", + "data_grid.export.options_title": "Параметры экспорта", + "data_grid.export.query_result_title": "Экспорт результатов запроса", + "data_grid.export.scope_prompt": "Выберите область экспорта:", + "data_grid.export.selected_rows": "Экспорт выбранных строк ({{count}})", + "data_grid.filter.add_condition": "Добавить условие", + "data_grid.filter.add_sort": "Добавить сортировку", + "data_grid.filter.apply": "Применить", + "data_grid.filter.apply_where": "Применить WHERE", + "data_grid.filter.clear": "Очистить", + "data_grid.filter.custom_where_placeholder": "Введите пользовательское выражение WHERE (без WHERE), например: status IN ('A','B')", + "data_grid.filter.disable_all": "Отключить все", + "data_grid.filter.enable_all": "Включить все", + "data_grid.filter.enabled": "Включено", + "data_grid.filter.end_value_placeholder": "Конечное значение", + "data_grid.filter.first_condition": "Первое", + "data_grid.filter.invalid_quick_where": "Условие WHERE не может содержать точки с запятой или SQL-комментарии", + "data_grid.filter.list_values_placeholder": "Разделяйте несколько значений запятыми или переносами строк", + "data_grid.filter.logic.and": "И (AND)", + "data_grid.filter.logic.or": "Или (OR)", + "data_grid.filter.mongodb_query_placeholder": "Введите объект MongoDB-запроса в JSON, например {\"status\":\"A\"}", + "data_grid.filter.no_value_placeholder": "Значение не требуется", + "data_grid.filter.op.between": "Между", + "data_grid.filter.op.contains": "Содержит", + "data_grid.filter.op.custom": "[Пользовательское]", + "data_grid.filter.op.ends_with": "Заканчивается на", + "data_grid.filter.op.in_list": "В списке", + "data_grid.filter.op.is_empty": "Пусто", + "data_grid.filter.op.is_not_empty": "Не пусто", + "data_grid.filter.op.is_not_null": "Не NULL", + "data_grid.filter.op.is_null": "NULL", + "data_grid.filter.op.not_between": "Не между", + "data_grid.filter.op.not_contains": "Не содержит", + "data_grid.filter.op.not_ends_with": "Не заканчивается на", + "data_grid.filter.op.not_in_list": "Не в списке", + "data_grid.filter.op.not_starts_with": "Не начинается с", + "data_grid.filter.op.starts_with": "Начинается с", + "data_grid.filter.quick_where_placeholder": "Введите условие после WHERE, например status = 1 AND name LIKE 'A%'", + "data_grid.filter.search_field_placeholder": "Поиск по именам полей", + "data_grid.filter.select_sort_field_placeholder": "Выберите поле сортировки", + "data_grid.filter.sort_asc": "По возрастанию", + "data_grid.filter.sort_desc": "По убыванию", + "data_grid.filter.sort_label": "Сортировка", + "data_grid.filter.start_value_placeholder": "Начальное значение", + "data_grid.filter.suggestion.column": "Столбец", + "data_grid.filter.suggestion.keyword": "Ключевое слово", + "data_grid.filter.suggestion.operator": "Оператор", + "data_grid.filter.then_label": "Затем", + "data_grid.json_editor.apply_changes": "Применить изменения", + "data_grid.json_editor.description": "Редактируйте в текущем порядке результатов. В режиме JSON нельзя добавлять или удалять записи. Для этого используйте табличный режим.", + "data_grid.json_editor.format": "Форматировать JSON", + "data_grid.json_editor.invalid_format": "Недопустимый формат JSON: {{error}}", + "data_grid.json_editor.title": "Редактировать набор результатов JSON", + "data_grid.message.auto_commit_failed": "Автофиксация не удалась: {{detail}}", + "data_grid.message.auto_commit_success": "Автофиксация выполнена", + "data_grid.message.cell_edit_mode_entered": "Режим редактирования ячеек включен. Перетаскивайте, чтобы выбрать несколько ячеек.", + "data_grid.message.cell_edit_mode_exited": "Режим редактирования ячеек отключен.", + "data_grid.message.change_set_build_failed": "Не удалось построить набор изменений", + "data_grid.message.change_set_build_failed_detail": "Не удалось построить набор изменений: {{detail}}", + "data_grid.message.column_order_reset": "Порядок столбцов по умолчанию восстановлен", + "data_grid.message.column_quick_find_not_found": "Столбец поля не найден: {{query}}", + "data_grid.message.column_quick_find_not_rendered": "Столбец поля \"{{column}}\" сейчас не отрисован, поэтому его нельзя найти.", + "data_grid.message.column_visibility_reset": "Все столбцы восстановлены", + "data_grid.message.commit_failed": "Не удалось зафиксировать изменения: {{detail}}", + "data_grid.message.copied_columns": "Скопировано столбцов: {{count}}. Их можно вставить в целевые строки.", + "data_grid.message.copied_rows": "Скопировано строк: {{count}}. Их можно вставить как новые строки.", + "data_grid.message.copied_to_clipboard": "Скопировано в буфер обмена", + "data_grid.message.copy_columns_first": "Сначала скопируйте значения столбцов", + "data_grid.message.copy_columns_same_row_only": "При копировании значений столбцов выбирайте ячейки только из одной строки", + "data_grid.message.copy_rows_first": "Сначала скопируйте строки", + "data_grid.message.copy_sql_not_supported": "Этот источник данных не поддерживает копирование SQL. Используйте копирование JSON/CSV/Markdown.", + "data_grid.message.current_field_not_editable": "Текущее поле недоступно для редактирования", + "data_grid.message.current_record_not_editable": "Текущую запись нельзя редактировать", + "data_grid.message.current_row_no_copyable_content": "В текущей строке нет копируемого содержимого", + "data_grid.message.ddl_copied": "DDL скопирован в буфер обмена", + "data_grid.message.ddl_copy_failed": "Не удалось скопировать DDL", + "data_grid.message.ddl_load_failed": "Не удалось загрузить DDL", + "data_grid.message.ddl_missing_context": "У текущей таблицы отсутствует подключение или имя таблицы, поэтому DDL нельзя просмотреть", + "data_grid.message.drag_select_cells_to_copy": "Сначала перетащите, чтобы выбрать ячейки для копирования", + "data_grid.message.export_failed": "Не удалось экспортировать: {{detail}}", + "data_grid.message.export_success": "Экспорт завершен", + "data_grid.message.export_with_uncommitted_changes": "Есть незафиксированные изменения. Для экспорта будут использованы видимые данные таблицы. Если нужны полные данные длинных полей, сначала зафиксируйте изменения.", + "data_grid.message.exporting": "Экспорт...", + "data_grid.message.exporting_all": "Экспорт всех данных...", + "data_grid.message.exporting_rows": "Экспорт строк: {{count}}...", + "data_grid.message.filled_cells": "Заполнено ячеек: {{count}}", + "data_grid.message.filled_rows": "Заполнено строк: {{count}}", + "data_grid.message.filtered_export_not_supported": "Этот источник данных не поддерживает экспорт отфильтрованных результатов", + "data_grid.message.filtered_export_uses_committed_data": "Есть незафиксированные изменения. Для экспорта отфильтрованных результатов используются зафиксированные данные базы.", + "data_grid.message.import_done": "Импорт завершен", + "data_grid.message.json_applied": "Изменения JSON применены к текущему набору результатов. Можно продолжить и зафиксировать транзакцию.", + "data_grid.message.json_invalid": "Недопустимый JSON: {{detail}}", + "data_grid.message.json_parse_failed": "Не удалось разобрать JSON: {{detail}}", + "data_grid.message.json_record_count_mismatch": "Количество записей не совпадает: сейчас {{current}} строк, в JSON {{json}} строк. В этом режиме не добавляйте и не удаляйте записи.", + "data_grid.message.json_record_missing_row_key": "В записи {{index}} отсутствует идентификатор строки, поэтому ее нельзя применить", + "data_grid.message.json_record_not_object": "Запись {{index}} не является объектом, поэтому ее нельзя применить", + "data_grid.message.json_view_must_be_array": "JSON-представление должно быть массивом, где каждый элемент соответствует одной записи", + "data_grid.message.keep_one_visible_column": "Оставьте хотя бы один видимый столбец", + "data_grid.message.locate_record_to_edit": "Сначала найдите запись для редактирования", + "data_grid.message.locator_column_value_empty": "Значение столбца локатора {{column}} пустое, поэтому изменения нельзя безопасно отправить.", + "data_grid.message.no_changes_to_commit": "Нет изменений для фиксации", + "data_grid.message.no_copyable_cells": "Копируемые ячейки не распознаны", + "data_grid.message.no_copyable_columns": "Копируемые столбцы не распознаны", + "data_grid.message.no_copyable_rows": "Копируемые строки не распознаны", + "data_grid.message.no_data_changes": "Данные не изменились", + "data_grid.message.no_ddl_to_copy": "Нет DDL для копирования", + "data_grid.message.no_field_name": "Имя поля не распознано", + "data_grid.message.no_filter_applied": "Сейчас не применено ни одно условие фильтра", + "data_grid.message.no_other_rows_to_fill": "Нет других выбранных строк, которые можно заполнить", + "data_grid.message.no_pasteable_editable_fields": "Нет редактируемых полей, которые можно вставить", + "data_grid.message.no_pasteable_rows": "Нет строк, которые можно вставить", + "data_grid.message.no_rows_selected": "Строки не выбраны", + "data_grid.message.no_safe_locator": "Для текущего результата нет безопасного способа определить строку, поэтому изменения нельзя отправить.", + "data_grid.message.pasted_columns_to_rows": "Вставлено в {{rows}} строк, всего {{cells}} ячеек", + "data_grid.message.pasted_rows_as_new": "Вставлено новых строк: {{count}}. Проверьте их перед фиксацией.", + "data_grid.message.preview_sql_failed": "Не удалось сформировать предпросмотр SQL", + "data_grid.message.preview_sql_failed_detail": "Не удалось сформировать предпросмотр SQL: {{detail}}", + "data_grid.message.result_set_no_copyable_content": "В текущем наборе результатов нет копируемого содержимого", "data_grid.message.rollback_failed": "Не удалось откатить транзакцию: {{detail}}", + "data_grid.message.saved": "Сохранено", + "data_grid.message.select_cells_to_fill": "Сначала выберите ячейки для заполнения", + "data_grid.message.select_file_failed": "Не удалось выбрать файл: {{detail}}", + "data_grid.message.select_rows_to_copy": "Сначала выберите строки для копирования", + "data_grid.message.select_rows_to_fill": "Сначала выберите строки для заполнения", + "data_grid.message.select_same_row_cells_to_copy": "Сначала выберите ячейки в одной строке для копирования", + "data_grid.message.select_target_rows": "Сначала выберите целевые строки", + "data_grid.message.selected_cells_no_update": "Выбранные ячейки не требуют обновления", + "data_grid.message.selection_no_copyable_content": "В текущем выделении нет копируемого содержимого", + "data_grid.message.target_row_not_found": "Целевая строка не найдена. Обновите данные и повторите попытку.", + "data_grid.message.target_rows_cannot_only_source": "Целевые строки не могут состоять только из исходной строки. Выберите другую строку.", + "data_grid.message.target_rows_no_update": "Целевые строки не требуют обновления", + "data_grid.message.transaction_committed": "Транзакция зафиксирована", "data_grid.message.transaction_rolled_back": "Транзакция отменена", + "data_grid.message.undo_added_row_hint": "Для новых строк используйте удаление выбранных строк или откат всей таблицы.", + "data_grid.message.undo_cell_original_missing": "Исходные данные этой ячейки не найдены, поэтому отменить изменение нельзя.", + "data_grid.message.undo_cell_success": "Изменение ячейки отменено", + "data_grid.metadata_view.column_name": "Имя", + "data_grid.metadata_view.column_type": "Тип", + "data_grid.metadata_view.comment": "Комментарий", + "data_grid.metadata_view.default_value": "Значение по умолчанию", + "data_grid.metadata_view.er_collapse_fields": "Свернуть сводку полей", + "data_grid.metadata_view.er_current_badge": "Текущая таблица", + "data_grid.metadata_view.er_empty": "Для этой таблицы не найдено связей по внешним ключам", + "data_grid.metadata_view.er_expand_fields": "Развернуть все поля", + "data_grid.metadata_view.er_expand_hidden_columns": "Показать еще {{count}} полей", + "data_grid.metadata_view.er_expand_relations": "Развернуть следующий уровень", + "data_grid.metadata_view.er_field_badge": "Поле", + "data_grid.metadata_view.er_hidden_columns": "Еще {{count}} полей", + "data_grid.metadata_view.er_open_table": "Открыть таблицу", + "data_grid.metadata_view.er_partial_warning": "Часть связей не удалось загрузить. Диаграмма может быть неполной.", + "data_grid.metadata_view.er_reference_badge": "Ссылается на", + "data_grid.metadata_view.er_referenced_by_badge": "На нее ссылаются", + "data_grid.metadata_view.er_related_table_count": "Связанных таблиц: {{count}}", + "data_grid.metadata_view.er_relation_count": "Связей: {{count}}", + "data_grid.metadata_view.er_relation_depth": "Глубина {{count}}", + "data_grid.metadata_view.er_reset_relations": "Сбросить до одного уровня", + "data_grid.metadata_view.er_table_badge": "Таблица", + "data_grid.metadata_view.field_count": "{{count}} полей", + "data_grid.metadata_view.fields_badge": "Поля", + "data_grid.modal.export_options.all_data": "Экспортировать все данные", + "data_grid.modal.export_options.current_page": "Экспортировать текущую страницу ({{count}} строк)", + "data_grid.modal.export_options.filtered_results": "Отфильтрованные результаты", + "data_grid.modal.export_options.no_rows_selected": "Строки не выбраны. Выберите область экспорта:", + "data_grid.modal.export_options.title": "Параметры экспорта", + "data_grid.modal.export_options.whole_table": "Вся таблица", + "data_grid.page_find.next": "Далее", + "data_grid.page_find.placeholder": "Поиск на текущей странице...", + "data_grid.page_find.previous": "Назад", + "data_grid.page_find.summary": "{{occurrences}} совпадений / {{cells}} ячеек", + "data_grid.page_find.tooltip": "Ищет только по строкам, загруженным на текущей странице. Условия WHERE не меняются.", + "data_grid.pagination.jump_action": "ОК", + "data_grid.pagination.jump_aria": "Перейти на страницу", + "data_grid.pagination.jump_label": "Перейти", + "data_grid.pagination.page_size_aria": "Строк на странице", + "data_grid.pagination.page_size_option": "{{count}} строк / страница", + "data_grid.pagination.page.current": "Страница {{current}}", + "data_grid.pagination.page.known": "Страница {{current}} / {{totalPages}}", + "data_grid.pagination.result_set": "Набор результатов", + "data_grid.pagination.summary.approximate": "Сейчас {{current}} строк / около {{total}} строк", + "data_grid.pagination.summary.cancelled": "Сейчас {{current}} строк / подсчет отменен", + "data_grid.pagination.summary.counting": "Сейчас {{current}} строк / подсчет общего числа...", + "data_grid.pagination.summary.counting_exact": "Сейчас {{current}} строк / подсчет точного общего числа...", + "data_grid.pagination.summary.empty": "Сейчас 0 строк / всего 0 строк", + "data_grid.pagination.summary.known": "Сейчас {{current}} строк / всего {{total}} строк", + "data_grid.pagination.summary.not_counted": "Сейчас {{current}} строк / общее число не подсчитано", + "data_grid.preview_panel.no_cell_description": "Нажмите ячейку таблицы, чтобы посмотреть полные данные", + "data_grid.preview_panel.no_cell_title": "Нажмите ячейку, чтобы посмотреть данные", + "data_grid.preview_sql.copied": "Скопировано", + "data_grid.preview_sql.no_changes": "Нет изменений", + "data_grid.preview_sql.summary": "{{deletes}} DELETE, {{updates}} UPDATE, {{inserts}} INSERT", + "data_grid.preview_sql.title": "Предпросмотр изменений", + "data_grid.record_view.edit_current": "Редактировать текущую запись", + "data_grid.record_view.edit_json": "Редактировать JSON", + "data_grid.record_view.empty": "В текущем наборе результатов нет данных", + "data_grid.record_view.json_record_count": "Текущий набор результатов: {{count}} записей", + "data_grid.record_view.next": "Следующая", + "data_grid.record_view.previous": "Предыдущая", + "data_grid.record_view.record_position": "Запись {{current}} / {{total}}", + "data_grid.row_editor.popup_edit": "Редактировать во всплывающем окне", + "data_grid.row_editor.title": "Редактировать строку", + "data_grid.secondary.column_display": "Отображение столбцов", + "data_grid.secondary.data_preview": "Предпросмотр данных", + "data_grid.secondary.er_diagram": "ER-диаграмма", + "data_grid.secondary.jump_column": "Перейти к столбцу", + "data_grid.secondary.live": "активно", + "data_grid.secondary.object_design": "Дизайн объекта", + "data_grid.secondary.pending_changes": "Не отправлено {{count}}", + "data_grid.secondary.row_count": "{{count}} строк", + "data_grid.secondary.view_ddl": "Показать DDL", + "data_grid.table_fallback.query_result": "Результат запроса", + "data_grid.toolbar.add_row": "Добавить строку", + "data_grid.toolbar.ai_insight": "AI-анализ данных", + "data_grid.toolbar.ai_insight_short": "AI-анализ", + "data_grid.toolbar.ai_insight_tooltip": "Попросить AI проанализировать данные текущей страницы запроса", + "data_grid.toolbar.batch_fill": "Массовое заполнение ({{count}})", + "data_grid.toolbar.cancel_count": "Отменить подсчет", + "data_grid.toolbar.cancel_count_tooltip": "Отменить этот подсчет точного общего числа. Текущий просмотр не изменится.", + "data_grid.toolbar.cell_editor": "Редактор ячеек", + "data_grid.toolbar.commit": "Зафиксировать транзакцию ({{count}})", + "data_grid.toolbar.commit_delay.seconds": "{{seconds}} с", + "data_grid.toolbar.commit_label": "Зафиксировать транзакцию", + "data_grid.toolbar.commit_mode.auto": "Автофиксация", + "data_grid.toolbar.commit_mode.auto_countdown": "Фиксация через {{seconds}}s", + "data_grid.toolbar.commit_mode.manual": "Ручная фиксация", + "data_grid.toolbar.commit_mode.tooltip": "Управляет фиксацией изменений данных таблицы. Ручная фиксация безопаснее; автофиксация выполняется через выбранную задержку после последнего изменения.", + "data_grid.toolbar.copied_columns_count": "Скопировано столбцов: {{count}}", + "data_grid.toolbar.copy": "Копировать", + "data_grid.toolbar.copy_row": "Копировать строку", + "data_grid.toolbar.copy_selection": "Копировать выделение ({{count}})", + "data_grid.toolbar.copy_selection_columns": "Копировать значения столбцов из выделения ({{count}})", + "data_grid.toolbar.count_total": "Подсчитать всего", + "data_grid.toolbar.count_total_tooltip": "Подсчитать точное общее число с текущим фильтром", + "data_grid.toolbar.delete_selected": "Удалить выбранное", + "data_grid.toolbar.export": "Экспорт", + "data_grid.toolbar.filter": "Фильтр", + "data_grid.toolbar.import": "Импорт", + "data_grid.toolbar.paste_row": "Вставить строку", + "data_grid.toolbar.paste_row_count": "Вставить строку ({{count}})", + "data_grid.toolbar.paste_to_selected_rows": "Вставить в выбранные строки ({{count}})", + "data_grid.toolbar.preview_sql": "Предпросмотр SQL", + "data_grid.toolbar.preview_sql_generate": "Сформировать предпросмотр SQL", + "data_grid.toolbar.refresh": "Обновить", + "data_grid.toolbar.rollback": "Откат", + "data_grid.toolbar.selected_count": "Выбрано: {{count}}", + "data_grid.toolbar.undo_delete": "Отменить удаление", + "data_grid.view.edit_current_record": "Редактировать текущую запись", + "data_grid.view.edit_json": "Редактировать JSON", + "data_grid.view.empty_result": "В текущем наборе результатов нет данных", + "data_grid.view.next_record": "Следующая запись", + "data_grid.view.previous_record": "Предыдущая запись", + "data_grid.view.record_count": "Текущий набор результатов: {{count}} записей", + "data_grid.view.record_position": "Запись {{current}} / {{total}}", + "data_grid.view.result_view": "Просмотр результата", + "data_grid.view.table": "Таблица", + "data_grid.view.text": "Текст", + "data_sync.action.analyze_diff": "Анализировать различия", + "data_sync.action.cancel": "Отмена", + "data_sync.action.close": "Закрыть", + "data_sync.action.continue_sync": "Продолжить синхронизацию", + "data_sync.action.next": "Далее", + "data_sync.action.previous": "Назад", + "data_sync.action.start_sync": "Начать синхронизацию", + "data_sync.action.view": "Просмотреть", + "data_sync.alert.auto_create_planner_scope": "Автоматическое создание таблиц сейчас поддерживает только MySQL в Kingbase. Переносятся столбцы, первичные ключи, обычные индексы, уникальные индексы и составные индексы; полнотекстовые, пространственные, префиксные и функциональные индексы явно пропускаются.", + "data_sync.alert.auto_create_scope": "Автоматическое создание таблиц сейчас поддерживает только MySQL в Kingbase. Переносятся столбцы, первичные ключи, обычные индексы, уникальные индексы и составные индексы; полнотекстовые, пространственные, префиксные и функциональные индексы явно пропускаются.", + "data_sync.alert.existing_target_only": "Синхронизация данных по умолчанию выполняется с существующими целевыми таблицами. Переключитесь на межбазовую миграцию, если нужны создание таблиц и импорт.", + "data_sync.alert.full_overwrite": "Полная перезапись очищает данные целевых таблиц. Используйте ее осторожно.", + "data_sync.alert.migration_mode": "Активна межбазовая миграция. Используйте ее для переноса таблиц в другой источник данных с автоматическим созданием и импортом.", + "data_sync.alert.query_mode": "Синхронизация результата SQL сейчас поддерживает пользовательский SQL источника в одну существующую целевую таблицу. Результат запроса должен содержать столбец первичного ключа целевой таблицы.", + "data_sync.alert.sync_mode": "Активна синхронизация данных. Используйте ее для инкрементальной синхронизации или импорта с перезаписью, когда целевые таблицы уже существуют.", + "data_sync.backend.error.analyze_prepare_secrets_failed": "Не удалось подготовить секреты анализа синхронизации данных: {{detail}}", + "data_sync.backend.error.apply_changes_failed": "Не удалось применить изменения: {{detail}}", + "data_sync.backend.error.apply_changes_unsupported": "Целевой драйвер не поддерживает применение изменений данных", + "data_sync.backend.error.apply_source_query_changes_failed": "Не удалось применить изменения набора результатов SQL: {{detail}}", + "data_sync.backend.error.auto_add_column_failed": "Не удалось автоматически добавить столбец: столбец={{column}}, ошибка={{detail}}", + "data_sync.backend.error.build_migration_plan_failed": "Не удалось построить план миграции: таблица={{table}}, ошибка={{detail}}", + "data_sync.backend.error.clear_target_failed": "Не удалось очистить целевую таблицу: {{detail}}", + "data_sync.backend.error.connect_source_failed": "Не удалось подключиться к исходной базе данных: {{detail}}", + "data_sync.backend.error.connect_source_mongodb_failed": "Не удалось подключиться к исходной MongoDB: {{detail}}", + "data_sync.backend.error.connect_source_redis_failed": "Не удалось подключиться к исходному Redis: {{detail}}", + "data_sync.backend.error.connect_target_failed": "Не удалось подключиться к целевой базе данных: {{detail}}", + "data_sync.backend.error.connect_target_mongodb_failed": "Не удалось подключиться к целевой MongoDB: {{detail}}", + "data_sync.backend.error.connect_target_redis_failed": "Не удалось подключиться к целевому Redis: {{detail}}", + "data_sync.backend.error.create_indexes_failed": "Не удалось создать индексы: таблица={{table}}, ошибка={{detail}}", + "data_sync.backend.error.create_table_sql_empty": "Не удалось автоматически создать таблицу {{table}}: create-table SQL пуст", + "data_sync.backend.error.create_target_table_failed": "Не удалось создать целевую таблицу: таблица={{table}}, ошибка={{detail}}", + "data_sync.backend.error.diff_composite_pk_unsupported": "Составной первичный ключ ({{columns}}) не поддерживается для синхронизации с сравнением различий", + "data_sync.backend.error.diff_pk_required": "Первичный ключ отсутствует. Синхронизация с сравнением различий не поддерживается; для прямого импорта используйте режим insert-only или full-overwrite.", + "data_sync.backend.error.exec_ddl_statement_failed": "Сбой на этапе {{stage}}: SQL={{sql}}, ошибка={{detail}}", + "data_sync.backend.error.execute_source_query_failed": "Не удалось выполнить исходный запрос: {{detail}}", + "data_sync.backend.error.init_source_driver_failed": "Не удалось инициализировать драйвер исходной базы данных: {{detail}}", + "data_sync.backend.error.init_source_mongodb_driver_failed": "Не удалось инициализировать драйвер исходной MongoDB: {{detail}}", + "data_sync.backend.error.init_target_driver_failed": "Не удалось инициализировать драйвер целевой базы данных: {{detail}}", + "data_sync.backend.error.init_target_mongodb_driver_failed": "Не удалось инициализировать драйвер целевой MongoDB: {{detail}}", + "data_sync.backend.error.inspect_mongodb_collection_failed": "Не удалось проверить целевую MongoDB collection: {{detail}}", + "data_sync.backend.error.list_mongodb_collections_failed": "Не удалось получить список MongoDB collection: {{detail}}", + "data_sync.backend.error.load_target_columns_failed": "Не удалось загрузить столбцы целевой таблицы: {{detail}}", + "data_sync.backend.error.mongo_document_write_unsupported": "Целевой драйвер не поддерживает запись MongoDB document", + "data_sync.backend.error.mongo_read_source_samples_failed": "Не удалось прочитать образцы исходной MongoDB collection: {{detail}}", + "data_sync.backend.error.mongo_redis_analyze_collection_failed": "Не удалось проанализировать MongoDB collection {{collection}}: {{detail}}", + "data_sync.backend.error.mongo_redis_document_key_missing": "В MongoDB document отсутствует поле key", + "data_sync.backend.error.mongo_redis_document_type_missing": "В MongoDB document для Redis Key {{key}} отсутствует поле {{field}}", + "data_sync.backend.error.mongo_redis_empty_target_value": "Целевое значение Redis Key {{key}} пустое", + "data_sync.backend.error.mongo_redis_unsupported_type": "Redis Key {{key}} не поддерживает тип {{type}}", + "data_sync.backend.error.mongo_redis_value_invalid": "У Redis Key {{key}} недопустимый {{type}} payload; фактический тип={{actual}}", + "data_sync.backend.error.mongo_redis_write_key_failed": "Не удалось записать Redis Key {{key}}: {{detail}}", + "data_sync.backend.error.pre_create_table_sql_failed": "Не удалось предварительно выполнить create-table SQL: таблица={{table}}, ошибка={{detail}}", + "data_sync.backend.error.prepare_secrets_failed": "Не удалось подготовить секреты синхронизации данных: {{detail}}", + "data_sync.backend.error.preview_composite_pk_unsupported": "Составной первичный ключ ({{columns}}) не поддерживается для предпросмотра данных", + "data_sync.backend.error.preview_failed": "Не удалось выполнить предпросмотр синхронизации данных: {{detail}}", + "data_sync.backend.error.preview_pk_required": "Нет первичного ключа, предпросмотр данных не поддерживается", + "data_sync.backend.error.preview_prepare_secrets_failed": "Не удалось подготовить секреты предпросмотра синхронизации данных: {{detail}}", + "data_sync.backend.error.read_redis_key_failed": "Не удалось прочитать Redis Key {{key}}: {{detail}}", + "data_sync.backend.error.read_source_table_failed": "Не удалось прочитать исходную таблицу: {{detail}}", + "data_sync.backend.error.read_source_table_failed_with_table": "Не удалось прочитать исходную таблицу {{table}}: {{detail}}", + "data_sync.backend.error.read_target_redis_key_failed": "Не удалось прочитать целевой Redis Key {{key}}: {{detail}}", + "data_sync.backend.error.read_target_table_failed": "Не удалось прочитать целевую таблицу: {{detail}}", + "data_sync.backend.error.read_target_table_failed_with_table": "Не удалось прочитать целевую таблицу {{table}}: {{detail}}", + "data_sync.backend.error.redis_mongo_analyze_changes_failed": "Не удалось проанализировать изменения миграции Redis: {{detail}}", + "data_sync.backend.error.redis_mongo_apply_changes_failed": "Не удалось применить изменения миграции Redis: {{detail}}", + "data_sync.backend.error.redis_mongo_build_changes_failed": "Не удалось построить изменения миграции Redis: {{detail}}", + "data_sync.backend.error.redis_mongo_create_collection_failed": "Не удалось создать целевую MongoDB collection: {{detail}}", + "data_sync.backend.error.refresh_columns_after_create_failed": "Не удалось загрузить столбцы после создания целевой таблицы: таблица={{table}}, ошибка={{detail}}", + "data_sync.backend.error.restore_source_secret_failed": "Не удалось восстановить секрет подключения к исходной базе данных: {{detail}}", + "data_sync.backend.error.restore_target_secret_failed": "Не удалось восстановить секрет подключения к целевой базе данных: {{detail}}", + "data_sync.backend.error.scan_redis_keys_failed": "Не удалось просканировать Redis Key: {{detail}}", + "data_sync.backend.error.source_collection_no_migratable_fields": "Из исходной MongoDB collection не удалось вывести мигрируемые поля: {{collection}}", + "data_sync.backend.error.source_table_columns_failed": "Не удалось получить столбцы исходной таблицы: {{detail}}", + "data_sync.backend.error.source_table_missing_or_no_columns": "Исходная таблица отсутствует или не имеет определений столбцов: {{table}}", + "data_sync.backend.error.sync_table_schema_failed": "Не удалось синхронизировать структуру таблицы: таблица={{table}}, ошибка={{detail}}", + "data_sync.backend.error.target_collection_check_failed": "Не удалось проверить целевую MongoDB collection: {{detail}}", + "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "Целевая таблица имеет составной первичный ключ ({{columns}}), поэтому анализ различий набора результатов SQL не поддерживается", + "data_sync.backend.error.target_pk_required_for_query_diff": "В целевой таблице нет первичного ключа, поэтому анализ различий SQL-набора результатов не поддерживается", + "data_sync.backend.error.target_table_columns_failed": "Не удалось получить столбцы целевой таблицы: {{detail}}", + "data_sync.backend.error.target_table_columns_missing": "Целевая таблица {{table}} отсутствует или ее определения столбцов не удалось прочитать", + "data_sync.backend.label.content_data_only": "Только данные", + "data_sync.backend.label.content_schema_and_data": "Структура и данные", + "data_sync.backend.label.content_schema_only": "Только структура", + "data_sync.backend.label.mode_full_overwrite": "Полная перезапись", + "data_sync.backend.label.mode_insert_only": "Только вставка", + "data_sync.backend.label.mode_insert_update": "Инкрементальная синхронизация", + "data_sync.backend.label.target_strategy_auto_create_if_missing": "Автоматически создать цель при отсутствии", + "data_sync.backend.label.target_strategy_existing_only": "Использовать только существующую цель", + "data_sync.backend.label.target_strategy_smart": "Автоматическая обработка цели", + "data_sync.backend.log.auto_add_columns_completed": "Автоматическое добавление столбцов завершено: успешно={{succeeded}}, ошибок={{failed}}", + "data_sync.backend.log.change_counts": "Требуется вставить {{inserts}} строк, обновить {{updates}} строк, удалить {{deletes}} строк", + "data_sync.backend.log.connecting_source": "Подключение к исходной базе данных: {{host}}...", + "data_sync.backend.log.connecting_target": "Подключение к целевой базе данных: {{host}}...", + "data_sync.backend.log.data_already_consistent": "Данные уже согласованы; изменения не требуются.", + "data_sync.backend.log.ddl_statement_succeeded": "Таблица {{table}}, этап {{stage}} выполнен успешно: {{sql}}", + "data_sync.backend.log.fatal_error": "Критическая ошибка: {{message}}", + "data_sync.backend.log.missing_columns_auto_add_disabled": "В целевой таблице отсутствует {{count}} столбцов, но автоматическое добавление отключено; они будут проигнорированы: {{columns}}", + "data_sync.backend.log.missing_columns_auto_add_started": "В целевой таблице отсутствует {{count}} столбцов; запускается автоматическое добавление: {{columns}}", + "data_sync.backend.log.mongo_redis_keyspace_options": "Миграция keyspace MongoDB -> Redis; режим={{mode}}; цель={{target}}", + "data_sync.backend.log.mongo_redis_migrating_key": "Запись Redis Key {{key}}", + "data_sync.backend.log.mongo_redis_syncing_collection": "Синхронизация MongoDB collection {{collection}}", + "data_sync.backend.log.redis_mongo_keyspace_options": "Миграция keyspace Redis -> MongoDB; режим={{mode}}; стратегия цели={{strategy}}", + "data_sync.backend.log.redis_mongo_migrating_key": "Миграция Redis Key {{key}}", + "data_sync.backend.log.source_query_no_changes": "Набор результатов SQL и целевая таблица согласованы; применять изменения не требуется", + "data_sync.backend.log.source_query_sync_completed": "Синхронизация набора результатов SQL завершена: вставки={{inserts}}, обновления={{updates}}, удаления={{deletes}}", + "data_sync.backend.log.source_query_sync_source": "Источник синхронизации: набор результатов SQL -> целевая таблица {{table}}; режим: {{mode}}", + "data_sync.backend.log.sync_options": "Содержимое синхронизации: {{content}}; режим: {{mode}}; автодобавление столбцов: {{autoAddColumns}}; стратегия целевой таблицы: {{targetTableStrategy}}; создание индексов: {{createIndexes}}", + "data_sync.backend.log.syncing_table": "Синхронизация таблицы: {{table}}", + "data_sync.backend.log.table_no_operations_skipped": "Для таблицы {{table}} не выбраны операции, она пропущена", + "data_sync.backend.log.target_table_created": "Целевая таблица успешно создана: {{table}}", + "data_sync.backend.log.target_table_no_operations": "Для целевой таблицы {{table}} не выбраны операции, она пропущена", + "data_sync.backend.log.unknown_sync_content_data_only": "Неизвестное содержимое синхронизации {{content}}; автоматически выбран режим только данных", + "data_sync.backend.result.analyzed_tables": "Анализ различий завершен для {{count}} таблиц", + "data_sync.backend.result.analyzed_target_tables": "Анализ различий завершен для {{count}} целевых таблиц", + "data_sync.backend.result.mongo_redis_analyzed_collections": "Проанализировано {{count}} MongoDB collection для миграции в Redis", + "data_sync.backend.result.mongo_redis_completed": "Миграция MongoDB keyspace завершена; обработано collection: {{collections}}, Redis Key: {{keys}}", + "data_sync.backend.result.mongo_redis_no_collections": "Нет MongoDB collection, доступных для миграции", + "data_sync.backend.result.mongo_redis_no_documents": "Нет MongoDB Redis document, доступных для миграции", + "data_sync.backend.result.preview_ready": "Предпросмотр синхронизации данных готов", + "data_sync.backend.result.redis_mongo_analyzed_keys": "Проанализировано {{count}} Redis Key для миграции в MongoDB", + "data_sync.backend.result.redis_mongo_completed": "Миграция Redis keyspace завершена; обработано Redis Key: {{count}}", + "data_sync.backend.result.redis_mongo_no_keys": "Нет Redis Key, доступных для миграции", + "data_sync.backend.result.sync_completed": "Синхронизация завершена: таблиц={{tables}}, вставлено={{rowsInserted}}, обновлено={{rowsUpdated}}, удалено={{rowsDeleted}}", + "data_sync.backend.summary.diff_completed": "Анализ различий завершен", + "data_sync.backend.summary.mongo_redis_diff": "При выполнении будет вставлено {{inserts}} Redis Key и обновлено {{updates}} Redis Key", + "data_sync.backend.summary.mongo_redis_empty_collection": "В collection не найдены document, пригодные для миграции", + "data_sync.backend.summary.mongo_redis_planned_action": "Миграция в {{target}}", + "data_sync.backend.summary.mongo_redis_same_keys": "Соответствующие Redis Key уже актуальны", + "data_sync.backend.summary.mongo_redis_warning_document_format": "Поддерживаются только document с полями key/type/ttl/value", + "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB -> Redis понижает полную перезапись до инкрементальной синхронизации, чтобы не удалять другие Redis Key в DB", + "data_sync.backend.summary.mongo_redis_warning_keyspace": "Document в MongoDB collection будут записаны в Redis по семантике keyspace", + "data_sync.backend.summary.redis_mongo_insert_document": "При выполнении будет вставлен новый MongoDB document", + "data_sync.backend.summary.redis_mongo_planned_action": "Миграция в коллекцию {{collection}}", + "data_sync.backend.summary.redis_mongo_same_document": "Соответствующий MongoDB document уже актуален", + "data_sync.backend.summary.redis_mongo_update_document": "При выполнении будет обновлен существующий MongoDB document", + "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key будет записан как MongoDB document", + "data_sync.backend.summary.source_query_diff_completed": "Анализ различий SQL-набора результатов завершен", + "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "Семантика ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view пока не мигрируется автоматически в цели PG-like", + "data_sync.backend.validation.query_mode_data_only": "Синхронизация SQL-набора результатов сейчас поддерживает только синхронизацию данных", + "data_sync.backend.validation.single_target_table_required": "Для синхронизации SQL-набора результатов требуется ровно одна целевая таблица", + "data_sync.backend.validation.source_query_required": "SQL исходного запроса обязателен", + "data_sync.backend.validation.target_table_required": "Целевая таблица обязательна", + "data_sync.backend.warning.apply_changes_unsupported": "Целевой драйвер не поддерживает применение изменений данных.", + "data_sync.backend.warning.auto_add_column_sql_generation_failed": "Не удалось создать SQL для автоматического добавления столбца {{column}}: {{detail}}", + "data_sync.backend.warning.auto_create_pair_unsupported": "Автоматическое создание таблиц сейчас поддерживает только MySQL -> Kingbase; текущая пара={{sourceType}} -> {{targetType}}", + "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "Столбец {{column}} является автоинкрементным; {{feature}} не будет автоматически создан заново при добавлении в существующую целевую таблицу", + "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "Столбец {{column}} типа {{type}} деградирован до json", + "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "Столбец {{column}} типа {{type}} деградирован до jsonb", + "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "Столбец {{column}} enum типа {{type}} деградирован до varchar(255)", + "data_sync.backend.warning.clickhouse_order_by_tuple_used": "Первичный ключ источника не обнаружен, поэтому ClickHouse будет использовать ORDER BY tuple(); производительность запросов может снизиться", + "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse не сохраняет семантику реляционных внешних ключей или уникальных ограничений; мигрируются только столбцы и данные", + "data_sync.backend.warning.clickhouse_source_metadata_limited": "Метаданные индексов и ограничений источника ClickHouse ограничены; обратная миграция фокусируется на столбцах и данных", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "Источник ClickHouse не вернул сведения о первичном ключе, поэтому целевая таблица MySQL не создаст первичный ключ автоматически", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "Источник ClickHouse не вернул сведения о первичном ключе, поэтому целевая таблица PG-like не создаст первичный ключ автоматически", + "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "Для целей ClickHouse рекомендуется insert-only или полная перезапись; семантика update/delete отличается от традиционных реляционных баз данных", + "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления MySQL; он деградирован до text", + "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления PG-like; он деградирован до text", + "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "Столбец {{column}} типа {{type}} сопоставлен с numeric(20,0), чтобы избежать переполнения unsigned", + "data_sync.backend.warning.column_default_expression_skipped": "Значение по умолчанию {{default}} столбца {{column}} содержит выражение и пока не мигрируется автоматически", + "data_sync.backend.warning.column_empty_string_default_not_preserved": "Пустая строка как значение по умолчанию столбца {{column}} не сохранена", + "data_sync.backend.warning.column_type_degraded": "Столбец {{column}} типа {{sourceType}} деградирован до {{targetType}}", + "data_sync.backend.warning.column_type_degraded_clickhouse_string": "Столбец {{column}} типа {{type}} деградирован до String", + "data_sync.backend.warning.column_type_empty_clickhouse_string": "Тип столбца {{column}} пуст и деградирован до String", + "data_sync.backend.warning.column_type_empty_degraded": "Тип столбца {{column}} пуст и деградирован до {{targetType}}", + "data_sync.backend.warning.column_type_mapped": "Столбец {{column}} типа {{sourceType}} сопоставлен с {{targetType}}", + "data_sync.backend.warning.column_type_no_mapping_degraded": "Для столбца {{column}} типа {{sourceType}} нет отдельного сопоставления; он деградирован до {{targetType}}", + "data_sync.backend.warning.column_user_defined_degraded": "Столбец {{column}} является пользовательским типом и деградирован до {{targetType}}", + "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "Столбец {{column}} является пользовательским типом и деградирован до String", + "data_sync.backend.warning.composite_pk_skipped": "Таблица {{table}} имеет составной первичный ключ ({{columns}}); синхронизация различий пока не поддерживается и пропущена", + "data_sync.backend.warning.full_overwrite_clearing_target": "Режим полной перезаписи: целевая таблица {{table}} будет очищена", + "data_sync.backend.warning.index_columns_missing": "У индекса {{name}} нет определения столбцов, он пропущен", + "data_sync.backend.warning.index_prefix_length_unsupported": "Индекс {{name}} использует длину префикса и пока не может быть автоматически мигрирован", + "data_sync.backend.warning.index_type_unsupported": "Индекс {{name}}, тип={{type}}, пока не может быть автоматически мигрирован", + "data_sync.backend.warning.load_target_columns_skip_check_failed": "Не удалось получить столбцы целевой таблицы; проверка согласованности столбцов пропущена: {{detail}}", + "data_sync.backend.warning.mongo_redis_document_format": "MongoDB -> Redis сейчас поддерживает только documents с полями key/type/ttl/value", + "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "При миграции MongoDB -> Redis полная перезапись понижается до инкрементальной синхронизации", + "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "AUTO_INCREMENT столбца {{column}} не сохраняется в ClickHouse как семантика автоинкремента", + "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "Бинарный тип столбца {{column}} деградирован до String", + "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "Столбец {{column}} типа {{type}} деградирован до String", + "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления ClickHouse; он деградирован до String", + "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "Столбец {{column}} является unsigned bigint auto_increment; он деградирован до {{targetType}}, семантика автоинкремента не сохранена", + "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "Семантика identity/auto-increment столбца {{column}} не сохраняется в ClickHouse", + "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "При миграции Redis -> MongoDB полная перезапись понижается до инкрементальной синхронизации", + "data_sync.backend.warning.refresh_columns_after_add_failed": "Не удалось обновить целевые столбцы после добавления: таблица={{table}}, ошибка={{detail}}", + "data_sync.backend.warning.source_indexes_read_failed": "Не удалось прочитать индексы исходной таблицы; миграция индексов пропущена: {{detail}}", + "data_sync.backend.warning.table_pk_required_skipped": "У таблицы {{table}} нет первичного ключа; текущий режим требует сравнения различий, таблица пропущена", + "data_sync.backend.warning.target_existing_only_required": "Текущая стратегия требует существующую целевую таблицу, поэтому при выполнении она не будет создана автоматически.", + "data_sync.backend.warning.target_exists_data_only_no_indexes": "Целевая таблица уже существует. Будет выполнен только импорт данных; существующие индексы и ограничения не будут автоматически перестроены.", + "data_sync.backend.warning.target_missing_columns": "В целевой таблице отсутствует {{count}} столбцов: {{columns}}", + "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "Целевая таблица для {{table}} отсутствует; текущая стратегия не разрешает автоматическое создание таблицы, поэтому она пропущена", + "data_sync.backend.warning.target_table_existing_only_required": "Текущая стратегия требует существующую целевую таблицу, поэтому при выполнении она не будет создана автоматически.", + "data_sync.backend.warning.unknown_content_default_data": "Неизвестное содержимое синхронизации {{content}}; автоматически выбран режим только данных", + "data_sync.backend.warning.unknown_mode_default_insert_update": "Неизвестный режим синхронизации {{mode}}; автоматически выбрана инкрементальная синхронизация", + "data_sync.badge.migration_mode": "Режим миграции", + "data_sync.badge.source_pending": "Источник не выбран", + "data_sync.badge.source_selected": "Источник выбран", + "data_sync.badge.sync_mode": "Режим синхронизации", + "data_sync.badge.table_count": "{{count}} табл.", + "data_sync.compare_entry.action.return_to_compare": "Вернуться к сравнению", + "data_sync.compare_entry.alert.data": "Это режим сравнения данных: он только анализирует различия строк по первичному ключу и не выполняет запись.", + "data_sync.compare_entry.alert.schema": "Это режим сравнения структуры: он только анализирует различия схемы и формирует SQL для проверки, не применяя изменения.", + "data_sync.compare_entry.option.auto_add_columns": "Сформировать совместимый SQL изменений для отсутствующих столбцов целевой таблицы (только предпросмотр, без выполнения)", + "data_sync.compare_entry.option.source_dataset.query": "Сравнить по результату SQL", + "data_sync.compare_entry.option.source_dataset.table": "Сравнить по таблице", + "data_sync.compare_entry.preview.selection_hint": "Выбор строк влияет только на область предпросмотра SQL и не выполняет запись данных.", + "data_sync.compare_entry.preview.sql.data_help": "Предпросмотр SQL формируется по выбранным вставкам, обновлениям, удалениям и диапазонам строк только для проверки различий.", + "data_sync.compare_entry.preview.sql.schema_help": "Предпросмотр SQL показывает предлагаемые операторы различий структуры только для проверки.", + "data_sync.compare_entry.result.completed": "Сравнение завершено", + "data_sync.compare_entry.result.failed": "Сравнение не удалось", + "data_sync.compare_entry.result.running": "Идет сравнение", + "data_sync.compare_entry.result.running_description": "Текущий этап: {{stage}}{{table}}", + "data_sync.compare_entry.result.stage_fallback": "Выполняется", + "data_sync.compare_entry.result.success_summary": "Успешно сравнено таблиц: {{tables}}.", + "data_sync.compare_entry.result.table_suffix": ", таблица: {{table}}", + "data_sync.compare_entry.title.analysis_log": "Журнал анализа", + "data_sync.compare_entry.workflow_help": "Этот вход только анализирует различия и показывает предпросмотр. Он не синхронизирует, не создает таблицы, не добавляет столбцы и не удаляет данные.", + "data_sync.confirm.full_overwrite.content": "Полная перезапись сначала очищает целевую таблицу, а затем вставляет строки. Подтвердите, что целевая база данных сохранена в резервной копии.", + "data_sync.confirm.full_overwrite.ok": "Продолжить", + "data_sync.confirm.full_overwrite.title": "Подтвердите полную перезапись", + "data_sync.diff.column.delete": "Удаление", + "data_sync.diff.column.insert": "Вставка", + "data_sync.diff.column.plan": "План", + "data_sync.diff.column.preview": "Предпросмотр", + "data_sync.diff.column.risk": "Риск", + "data_sync.diff.column.same": "Совпадает", + "data_sync.diff.column.table": "Таблица", + "data_sync.diff.column.target_table": "Целевая таблица", + "data_sync.diff.column.update": "Обновление", + "data_sync.diff.more_warnings": "Еще {{count}} не показано", + "data_sync.diff.target_exists": "Есть", + "data_sync.diff.target_missing": "Нет", + "data_sync.diff.title": "Результат сравнения", + "data_sync.diff.warning_title": "Предварительная проверка нашла риски или понижение возможностей. Проверьте их перед выполнением.", + "data_sync.entry_mode.compare.action.start": "Начать сравнение", + "data_sync.entry_mode.compare.option_title": "Параметры сравнения", + "data_sync.entry_mode.compare.result_title": "Результат сравнения", + "data_sync.entry_mode.data_compare.badge": "Сравнение данных", + "data_sync.entry_mode.data_compare.description": "Сравнивает данные исходной и целевой таблиц по первичному ключу и показывает вставки, обновления и удаления.", + "data_sync.entry_mode.data_compare.hero_description": "Подходит для проверки согласованности данных. Выполняет только анализ различий и построчный предпросмотр без записи.", + "data_sync.entry_mode.data_compare.table_select_label": "Выберите таблицы для сравнения данных:", + "data_sync.entry_mode.data_compare.title": "Сравнение данных", + "data_sync.entry_mode.schema_compare.badge": "Сравнение структуры", + "data_sync.entry_mode.schema_compare.description": "Формирует различия структуры, риски совместимости и SQL для проверки между исходной и целевой таблицами.", + "data_sync.entry_mode.schema_compare.hero_description": "Подходит для проверки различий структуры перед выпуском. Выполняет только анализ и предпросмотр без применения изменений структуры.", + "data_sync.entry_mode.schema_compare.table_select_label": "Выберите таблицы для сравнения структуры:", + "data_sync.entry_mode.schema_compare.title": "Сравнение структуры таблиц", + "data_sync.entry_mode.sync.hero_description": "Подходит, когда целевые таблицы уже существуют. Сначала анализируйте различия, затем выполняйте выбранные вставки, обновления или удаления.", + "data_sync.field.connection": "Подключение", + "data_sync.field.database": "База данных", + "data_sync.field.migration_content": "Содержимое миграции", + "data_sync.field.migration_mode": "Режим миграции", + "data_sync.field.mongo_collection_name": "Имя коллекции Mongo (необязательно)", + "data_sync.field.schema": "Схема", + "data_sync.field.source_dataset_mode": "Способ данных источника", + "data_sync.field.source_query_sql": "SQL-запрос источника", + "data_sync.field.sync_content": "Содержимое синхронизации", + "data_sync.field.sync_mode": "Режим синхронизации", + "data_sync.field.target_table": "Целевая таблица", + "data_sync.field.target_table_requirement": "Требование к целевой таблице", + "data_sync.field.target_table_strategy": "Стратегия целевой таблицы", + "data_sync.field.workflow_type": "Тип операции", + "data_sync.help.mongo_collection_mongo_to_redis": "Для MongoDB в Redis обычно достаточно выбрать исходную коллекцию. Оставьте поле пустым, если явное резервное имя коллекции не требуется.", + "data_sync.help.mongo_collection_redis_to_mongo": "Оставьте пустым, чтобы использовать имя коллекции по умолчанию. Если поле заполнено, этот запуск запишет пространство ключей Redis в указанную коллекцию Mongo.", + "data_sync.help.select_tables": "Выберите таблицы для синхронизации:", + "data_sync.help.source_query_mode": "Введите SQL-запрос источника и выберите одну целевую таблицу. Анализ различий напрямую сравнит этот результат с целевой таблицей.", + "data_sync.help.workflow_type": "Выберите, синхронизирует ли этот запуск существующие целевые таблицы или выполняет межбазовую миграцию. Страница подстроит более безопасные значения по умолчанию под тип операции.", + "data_sync.hero.migration_description": "Перенос исходных таблиц в другую базу данных с созданием таблиц по стратегии, импортом данных и добавлением совместимых индексов.", + "data_sync.hero.migration_title": "Миграция между источниками данных", + "data_sync.hero.sync_description": "Используйте существующие целевые таблицы, сначала сравните различия, затем выполните выбранные вставки, обновления или удаления.", + "data_sync.hero.sync_title": "Синхронизация данных", + "data_sync.log.level.error": "Ошибка", + "data_sync.log.level.info": "Информация", + "data_sync.log.level.warn": "Предупреждение", + "data_sync.log.title": "Журнал выполнения", + "data_sync.message.analysis_complete": "Анализ различий завершен", + "data_sync.message.analysis_failed": "Анализ различий не выполнен", + "data_sync.message.analysis_failed_detail": "Анализ различий не выполнен: {{detail}}", + "data_sync.message.analyze_before_sync": "Перед запуском синхронизации проанализируйте различия", + "data_sync.message.close_blocked_running": "Синхронизация выполняется. Окно пока нельзя закрыть.", + "data_sync.message.fetch_source_databases_failed": "Не удалось получить базы данных источника", + "data_sync.message.fetch_source_databases_failed_detail": "Не удалось получить базы данных источника: {{detail}}", + "data_sync.message.fetch_tables_failed": "Не удалось получить таблицы", + "data_sync.message.fetch_tables_failed_detail": "Не удалось получить таблицы: {{detail}}", + "data_sync.message.fetch_target_databases_failed": "Не удалось получить целевые базы данных", + "data_sync.message.fetch_target_databases_failed_detail": "Не удалось получить целевые базы данных: {{detail}}", + "data_sync.message.fetch_target_schemas_failed_detail": "Не удалось получить целевые схемы: {{detail}}", + "data_sync.message.more_items_collapsed": "Еще {{count}} не показано", + "data_sync.message.precheck_warnings": "Предварительная проверка нашла риски или понижение возможностей. Проверьте их перед выполнением.", + "data_sync.message.preview_load_failed": "Не удалось загрузить предпросмотр различий", + "data_sync.message.preview_load_failed_detail": "Не удалось загрузить предпросмотр различий: {{detail}}", + "data_sync.message.select_connections_first": "Сначала выберите подключения", + "data_sync.message.select_databases_first": "Сначала выберите базы данных", + "data_sync.message.select_source_database": "Выберите базу данных источника", + "data_sync.message.select_target_database": "Выберите целевую базу данных", + "data_sync.message.select_target_schema": "Выберите целевую схему", + "data_sync.message.sync_execution_failed": "Не удалось выполнить синхронизацию", + "data_sync.message.sync_execution_failed_detail": "Не удалось выполнить синхронизацию: {{detail}}", + "data_sync.modal.full_overwrite_content": "Полная перезапись сначала очищает целевую таблицу, а затем вставляет строки. Подтвердите, что целевая база данных сохранена в резервной копии.", + "data_sync.modal.full_overwrite_ok": "Продолжить", + "data_sync.modal.full_overwrite_title": "Подтвердите полную перезапись", + "data_sync.option.auto_add_columns": "Автоматически добавить недостающие целевые столбцы (сейчас поддерживаются цели MySQL и MySQL в Kingbase; режим результата SQL не поддерживается)", + "data_sync.option.content.both": "Синхронизировать схему и данные", + "data_sync.option.content.data": "Только данные", + "data_sync.option.content.schema": "Только схема", + "data_sync.option.create_indexes": "Автоматически переносить совместимые обычные и уникальные индексы (только при автоматическом создании таблиц)", + "data_sync.option.show_same_tables": "Показывать совпадающие таблицы", + "data_sync.option.source_dataset.query": "Синхронизация по результату SQL", + "data_sync.option.source_dataset.table": "Синхронизация по таблицам", + "data_sync.option.sync_mode.full_overwrite": "Полная перезапись (очистить целевую таблицу перед вставкой)", + "data_sync.option.sync_mode.insert_only": "Только вставка (без сравнения с целью; таблицы без первичных ключей пропускаются)", + "data_sync.option.sync_mode.insert_update": "Инкрементальная синхронизация (сравнить различия, затем выбрать вставки, обновления и удаления)", + "data_sync.option.target_strategy.auto_create_if_missing": "Автоматически создать целевую таблицу, если она отсутствует", + "data_sync.option.target_strategy.existing_only": "Использовать только существующие целевые таблицы", + "data_sync.option.target_strategy.smart": "Умный режим (если есть, импортировать напрямую; если нет, создать автоматически)", + "data_sync.option.workflow.migration": "Межбазовая миграция (автоматическое создание и импорт)", + "data_sync.option.workflow.sync": "Синхронизация данных (сравнение и синхронизация с существующими целевыми таблицами)", + "data_sync.placeholder.mongo_collection_name": "Введите имя коллекции Mongo", + "data_sync.placeholder.source_query_sql": "Пример: SELECT id, name, email FROM users WHERE status = 'active'", + "data_sync.placeholder.target_table": "Выберите одну целевую таблицу", + "data_sync.plan.add_missing_columns_before_import": "Дополнить отсутствующие поля перед импортом: {{count}}", + "data_sync.plan.auto_create_unsupported": "Автоматическое создание таблиц не поддерживается для этой пары баз данных", + "data_sync.plan.backend_summary": "Сводка плана", + "data_sync.plan.data_import_without_diff": "Текущий режим импортирует данные исходной таблицы без сравнения различий.", + "data_sync.plan.migrate_to_collection": "Миграция в коллекцию {{collection}}", + "data_sync.plan.migrate_to_target": "Миграция в {{target}}", + "data_sync.plan.migration_kernel_planning": "Эта пара баз данных перешла в этап планирования миграции и ожидает вывода структуры и генерации целевого диалекта", + "data_sync.plan.missing_columns_auto_add": "Дополнить отсутствующие поля перед импортом: {{count}}", + "data_sync.plan.missing_columns_auto_add_disabled": "В целевой таблице отсутствуют поля: {{count}}, и автоматическое дополнение не включено", + "data_sync.plan.missing_columns_auto_add_unsupported": "В целевой таблице отсутствуют поля: {{count}}, и автоматическое дополнение не поддерживается для этой пары баз данных", + "data_sync.plan.missing_columns_no_executable_sql": "В целевой таблице отсутствуют поля: {{count}}, но исполняемый SQL для дополнения не создан", + "data_sync.plan.mongo_relational_entry_warning": "Для миграции {{objectKind}} из {{sourceType}} в {{targetType}} сейчас доступно только уведомление о планировании вывода структуры", + "data_sync.plan.mongo_relational_kernel_planned": "Эта пара баз данных перешла в этап планирования миграции и ожидает вывода структуры и генерации целевого диалекта", + "data_sync.plan.mongo_target_collection_missing_auto_create": "Целевая MongoDB collection {{collection}} отсутствует. Она будет автоматически создана перед импортом.", + "data_sync.plan.mongo_target_collection_missing_manual_create": "Целевая MongoDB collection {{collection}} отсутствует. Сначала создайте ее вручную.", + "data_sync.plan.redis_key_to_mongodb_document": "Создать документы MongoDB из Redis Keys и импортировать их", + "data_sync.plan.redis_mongo_keyspace_import": "Создать документы MongoDB из Redis Keys и импортировать их", + "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis -> MongoDB мигрирует по семантике keyspace и не выполняет проверку структуры таблиц", + "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Семантика Redis TTL и порядка collection сохраняется как поля document, но может быть не полностью эквивалентной", + "data_sync.plan.redis_mongo_target_collection_auto_create": "Целевая коллекция отсутствует; она будет автоматически создана перед импортом", + "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "Текущая стратегия требует существующую целевую MongoDB collection; при выполнении она не будет создана автоматически", + "data_sync.plan.redis_mongo_target_collection_missing_manual": "Целевая коллекция отсутствует; сначала создайте ее вручную", + "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state пока не мигрируются", + "data_sync.plan.schema_aligned": "Структура таблицы уже совпадает", + "data_sync.plan.schema_changes_detected": "Обнаружено структурных изменений: {{count}}", + "data_sync.plan.schema_only": "Синхронизация только структуры", + "data_sync.plan.schema_only_no_data_diff": "Синхронизируется только структура; анализ различий данных не выполнялся", + "data_sync.plan.schema_preview": "Предпросмотр структуры", + "data_sync.plan.source_query_preview": "Предпросмотр синхронизации SQL-результата", + "data_sync.plan.target_collection_missing_auto_create": "Целевая коллекция отсутствует; она будет автоматически создана перед импортом", + "data_sync.plan.target_collection_missing_manual_create": "Целевая коллекция отсутствует; сначала создайте ее вручную", + "data_sync.plan.target_missing_auto_create": "Целевая таблица отсутствует; она будет автоматически создана перед импортом", + "data_sync.plan.target_missing_auto_create_all": "Целевая таблица отсутствует; при выполнении она будет автоматически создана, затем будут импортированы все исходные данные", + "data_sync.plan.target_missing_cannot_sync": "Целевая таблица отсутствует; синхронизацию выполнить нельзя", + "data_sync.plan.target_missing_manual_create": "Целевая таблица отсутствует; сначала создайте ее вручную", + "data_sync.plan.target_missing_preview_unavailable": "Целевая таблица отсутствует. Предпросмотр различий недоступен.", + "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "В исходной таблице не найден столбец времени, который можно сопоставить с первым столбцом TDengine; автоматическое создание таблицы невозможно", + "data_sync.plan.tdengine_time_column_missing": "В исходной таблице не найден столбец времени, который можно сопоставить с первым столбцом TDengine; автоматическое создание таблицы невозможно", + "data_sync.plan.use_existing_target": "Импорт в существующую целевую таблицу", + "data_sync.plan.use_existing_target_collection": "Импорт в существующую целевую коллекцию", + "data_sync.plan.use_existing_target_table": "Импорт в существующую целевую таблицу", + "data_sync.preview.action.copy_sql": "Копировать SQL", + "data_sync.preview.column.changed_columns": "Измененные столбцы", + "data_sync.preview.column.data": "Данные", + "data_sync.preview.column.detail": "Подробности", + "data_sync.preview.column.primary_key": "Первичный ключ", + "data_sync.preview.data_summary": "Вставка {{inserts}}, обновление {{updates}}, удаление {{deletes}} (предпросмотр показывает до 200 строк на тип)", + "data_sync.preview.delete_warning": "Удаление по умолчанию не выбрано. Включайте его только после проверки влияния на бизнес.", + "data_sync.preview.loading": "Загрузка предпросмотра различий...", + "data_sync.preview.message.copy_failed": "Не удалось скопировать. Скопируйте вручную.", + "data_sync.preview.message.sql_copied": "SQL скопирован", + "data_sync.preview.schema_plan_help": "Ниже показаны операторы, запланированные для этого запуска синхронизации схемы.", + "data_sync.preview.schema_statement_count": "Обнаружено операторов изменения схемы: {{count}}", + "data_sync.preview.schema_warning_title": "Предпросмотр схемы содержит риски или понижение возможностей", + "data_sync.preview.selection_hint.delete": "Если строки не выбраны, будут синхронизированы все различия удаления. Снимите Удаление в результате сравнения, чтобы пропустить удаления.", + "data_sync.preview.selection_hint.insert": "Если строки не выбраны, будут синхронизированы все различия вставки. Снимите Вставку в результате сравнения, чтобы пропустить вставки.", + "data_sync.preview.selection_hint.update": "Если строки не выбраны, будут синхронизированы все различия обновления. Снимите Обновление в результате сравнения, чтобы пропустить обновления.", + "data_sync.preview.side.source": "Источник", + "data_sync.preview.side.target": "Цель", + "data_sync.preview.sql.data_help": "Предпросмотр SQL создается из выбранных вставок, обновлений, удалений и диапазона строк для проверки.", + "data_sync.preview.sql.no_data_sql": "-- Для текущего выбора нет SQL для предпросмотра", + "data_sync.preview.sql.no_schema_changes": "-- Для текущей таблицы нет исполняемых изменений схемы", + "data_sync.preview.sql.schema_help": "Предпросмотр SQL показывает операторы изменения схемы, которые будут выполнены, для проверки.", + "data_sync.preview.sql.schema_statement_count": "Операторов изменения схемы: {{count}}", + "data_sync.preview.sql.statement_count": "Операторов: {{count}} (предпросмотр данных показывает до 200 строк на тип)", + "data_sync.preview.tab.delete": "Удаление({{count}})", + "data_sync.preview.tab.insert": "Вставка({{count}})", + "data_sync.preview.tab.schema": "Схема({{count}})", + "data_sync.preview.tab.sql": "SQL({{count}})", + "data_sync.preview.tab.update": "Обновление({{count}})", + "data_sync.preview.title": "Предпросмотр различий: {{table}}", + "data_sync.preview.update_detail_title": "Подробности обновления: {{table}} / {{pk}}", + "data_sync.progress.stage.analysis_completed": "Анализ различий завершен", + "data_sync.progress.stage.analysis_started": "Начат анализ различий", + "data_sync.progress.stage.analyzing_diff": "Анализ различий", + "data_sync.progress.stage.analyzing_table": "Анализ таблицы ({{current}}/{{total}})", + "data_sync.progress.stage.applying_changes": "Применение изменений", + "data_sync.progress.stage.backend_update": "Обработка обновления прогресса", + "data_sync.progress.stage.checking_columns": "Проверка согласованности полей", + "data_sync.progress.stage.clearing_target": "Очистка целевой таблицы", + "data_sync.progress.stage.collection_completed": "Обработка коллекции завершена", + "data_sync.progress.stage.comparing_diff": "Сравнение различий", + "data_sync.progress.stage.completed": "Синхронизация завершена", + "data_sync.progress.stage.connecting_source": "Подключение к исходной базе данных", + "data_sync.progress.stage.connecting_target": "Подключение к целевой базе данных", + "data_sync.progress.stage.creating_indexes": "Создание индексов", + "data_sync.progress.stage.creating_target_collection": "Создание целевой коллекции", + "data_sync.progress.stage.creating_target_table": "Создание целевой таблицы", + "data_sync.progress.stage.executing": "Выполнение", + "data_sync.progress.stage.failed": "Синхронизация не удалась", + "data_sync.progress.stage.migrating_collection": "Миграция коллекции ({{current}}/{{total}})", + "data_sync.progress.stage.migrating_key": "Миграция Key ({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_collection_completed": "Обработка коллекции завершена", + "data_sync.progress.stage.mongo_redis_migrating_collection": "Миграция коллекции ({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_started": "Миграция MongoDB -> Redis keyspace начата", + "data_sync.progress.stage.mongodb_keyspace_started": "Начата миграция пространства ключей MongoDB", + "data_sync.progress.stage.preparing": "Подготовка", + "data_sync.progress.stage.reading_source": "Чтение данных исходной таблицы", + "data_sync.progress.stage.reading_target": "Чтение данных целевой таблицы", + "data_sync.progress.stage.redis_keyspace_started": "Начата миграция пространства ключей Redis", + "data_sync.progress.stage.redis_mongo_creating_collection": "Создание целевой коллекции", + "data_sync.progress.stage.redis_mongo_migrating_key": "Миграция Key ({{current}}/{{total}})", + "data_sync.progress.stage.redis_mongo_started": "Миграция Redis -> MongoDB keyspace начата", + "data_sync.progress.stage.sync_started": "Синхронизация начата", + "data_sync.progress.stage.syncing_schema": "Синхронизация структуры таблицы", + "data_sync.progress.stage.syncing_table": "Синхронизация таблицы ({{current}}/{{total}})", + "data_sync.progress.stage.table_completed": "Обработка таблицы завершена", + "data_sync.query_mode.help": "Введите SQL-запрос источника и выберите одну целевую таблицу. Анализ различий напрямую сравнит этот результат с целевой таблицей.", + "data_sync.result.completed": "Синхронизация завершена", + "data_sync.result.failed": "Синхронизация не выполнена", + "data_sync.result.failed_description": "Синхронизация не завершилась.", + "data_sync.result.failed_detail": "Синхронизация не выполнена: {{detail}}", + "data_sync.result.running": "Синхронизация выполняется", + "data_sync.result.running_description": "Текущий этап: {{stage}}{{table}}", + "data_sync.result.success_summary": "Успешно синхронизировано таблиц: {{tables}}. Вставлено: {{inserted}}, обновлено: {{updated}}", + "data_sync.result.table_suffix": ", таблица: {{table}}", + "data_sync.schema_inference.mongo_relational_issue": "Вывод структуры для {{sourceType}} -> {{targetType}} все еще в разработке; сейчас доступно только уведомление о планировании миграции.", + "data_sync.schema_inference.mongo_relational_resolution": "В следующих итерациях определения столбцов и политики деградации типов будут создаваться по выборочным данным.", + "data_sync.schema_sync.error.create_statement_empty": "Оператор create-table пуст", + "data_sync.schema_sync.error.create_target_table_failed": "Не удалось создать целевую таблицу {{table}}: {{detail}}", + "data_sync.schema_sync.error.get_columns_after_create_failed": "Не удалось получить столбцы после создания целевой таблицы {{table}}: {{detail}}", + "data_sync.schema_sync.error.get_create_statement_failed": "Не удалось получить оператор create-table для исходной таблицы {{table}}: {{detail}}", + "data_sync.schema_sync.error.get_source_columns_failed": "Не удалось получить столбцы исходной таблицы {{table}}: {{detail}}", + "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "Целевая таблица {{table}} отсутствует, а тип источника {{sourceType}} пока не поддерживает автоматическое создание таблицы: {{detail}}", + "data_sync.schema_sync.log.add_column_failed": "Не удалось добавить столбец: таблица={{table}}, столбец={{column}}, ошибка={{detail}}", + "data_sync.schema_sync.log.column_added": "Столбец добавлен: таблица={{table}}, столбец={{column}}, тип={{type}}", + "data_sync.schema_sync.log.completed": "Синхронизация структуры завершена для {{table}}; добавлено столбцов: {{count}}", + "data_sync.schema_sync.log.schema_aligned": "Структура таблицы согласована: {{table}}", + "data_sync.schema_sync.log.target_created": "Целевая таблица успешно создана: {{table}}", + "data_sync.schema_sync.log.target_missing_create": "Целевая таблица {{table}} отсутствует; выполняется попытка создать структуру таблицы", + "data_sync.schema_sync.warning.target_unsupported": "Тип целевой базы данных={{targetType}} пока не поддерживает синхронизацию структуры; таблица {{table}} пропущена", + "data_sync.section.migration_options": "Параметры миграции", + "data_sync.section.source_database": "База данных источника", + "data_sync.section.sync_options": "Параметры синхронизации", + "data_sync.section.target_database": "Целевая база данных", + "data_sync.step.configure": "Настроить источник и цель", + "data_sync.step.result": "Результат выполнения", + "data_sync.step.select_tables": "Выбрать таблицы", + "data_sync.table_picker.help": "Выберите таблицы для синхронизации:", + "data_sync.table_picker.item_unit": "элемент", + "data_sync.table_picker.items_unit": "элементы", + "data_sync.table_picker.not_found": "Нет данных", + "data_sync.table_picker.search_placeholder": "Поиск таблиц...", + "data_sync.table_picker.selected_title": "Выбранные таблицы", + "data_sync.table_picker.show_same": "Показывать совпадающие таблицы", + "data_sync.table_picker.source_title": "Таблицы источника", + "data_sync.table.delete": "Удаление", + "data_sync.table.insert": "Вставка", + "data_sync.table.plan": "План", + "data_sync.table.preview": "Предпросмотр", + "data_sync.table.risk": "Риск", + "data_sync.table.same": "Совпадает", + "data_sync.table.table_name": "Таблица", + "data_sync.table.target_exists": "Есть", + "data_sync.table.target_missing": "Нет", + "data_sync.table.target_table": "Целевая таблица", + "data_sync.table.update": "Обновление", + "data_sync.title.compare_result": "Результат сравнения", + "data_sync.title.execution_log": "Журнал выполнения", + "data_sync.title.migration": "Миграция между источниками данных", + "data_sync.title.migration_description": "Создание таблиц, импорт данных и предварительная проверка рисков от источника до цели.", + "data_sync.title.migration_options": "Параметры миграции", + "data_sync.title.migration_workbench": "Рабочая область межбазовой миграции", + "data_sync.title.source_database": "База данных источника", + "data_sync.title.sync": "Синхронизация данных", + "data_sync.title.sync_description": "Сравнение различий, запуск синхронизации и подтверждение результатов с существующими целевыми таблицами.", + "data_sync.title.sync_options": "Параметры синхронизации", + "data_sync.title.sync_workbench": "Рабочая область синхронизации данных", + "data_sync.title.target_database": "Целевая база данных", + "data_sync.transfer.empty": "Нет данных", + "data_sync.transfer.item_unit": "элемент", + "data_sync.transfer.items_unit": "элементы", + "data_sync.transfer.search_placeholder": "Поиск таблиц...", + "data_sync.transfer.selected_tables": "Выбранные таблицы", + "data_sync.transfer.source_tables": "???????? ???????", + "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "Семантика источника ORDER BY/PARTITION/TTL/Projection/materialized-view пока не мигрируется автоматически в TDengine", + "data_sync.unsupported.mongo_index_columns_missing": "У индекса {{name}} нет определения столбцов, он пропущен", + "data_sync.unsupported.mongo_index_create_command_failed": "Не удалось создать команду MongoDB createIndexes для индекса {{name}}: {{detail}}", + "data_sync.unsupported.mongo_index_prefix_length": "Индекс {{name}} использует длину префикса; эквивалентная миграция в MongoDB пока не поддерживается", + "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "Индексы источника, внешние ключи, триггеры, уникальные ограничения и семантика auto-increment пока не мигрируются автоматически в TDengine", + "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "Индексы источника, внешние ключи, триггеры, уникальные ограничения, identity и sequence пока не мигрируются автоматически в TDengine", + "data_sync.unsupported.tdengine_source_relational_semantics": "Индексы TDengine, внешние ключи, триггеры, supertable, TTL и другая семантика временных рядов пока не мигрируются автоматически", + "data_sync.unsupported.tdengine_target_missing_timestamp": "Первый столбец TDengine regular table должен быть TIMESTAMP; в текущей исходной таблице нет напрямую сопоставимого столбца времени", + "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "Семантика исходных supertable, TAGS, TTL, retention policy и индексов пока не мигрируется автоматически в TDengine regular table", + "data_sync.validation.query_mode_data_only": "Синхронизация результата SQL поддерживает только синхронизацию данных", + "data_sync.validation.single_target_table_required": "Для синхронизации результата SQL нужна ровно одна целевая таблица", + "data_sync.validation.source_query_required": "Введите SQL-запрос источника", + "data_sync.validation.table_required": "Выберите хотя бы одну таблицу", + "data_sync.warning.mongo_field_mixed_bson_types": "Поле {{field}} содержит несколько типов значений BSON и деградировано до совместимого типа", + "data_sync.warning.mongo_index_type_normalized": "Индекс {{name}}, тип={{type}}, будет мигрирован в MongoDB как обычный индекс", + "data_sync.warning.mongo_source_collection_index_read_failed": "Не удалось прочитать индексы исходной MongoDB collection; миграция индексов пропущена: {{detail}}", + "data_sync.warning.mongo_source_empty_sample_id_only": "В исходной MongoDB collection нет образцов данных; из `_id` будет создан только базовый столбец первичного ключа", + "data_sync.warning.mongo_source_primary_key_missing": "Из исходной MongoDB collection не удалось вывести стабильный первичный ключ; целевая таблица не создаст первичный ключ автоматически", + "data_sync.warning.mongo_source_table_index_read_failed": "Не удалось прочитать индексы исходной таблицы; миграция индексов пропущена: {{detail}}", + "data_sync.warning.mongo_target_collection_existing_only_required": "Текущая стратегия требует существующую целевую MongoDB collection, поэтому при выполнении она не будет создана автоматически", + "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB является целью с гибкой структурой; структура полей следует записываемым document, проверки целевых столбцов не выполняются", + "data_sync.warning.target_exists_strategy_no_auto_create": "Текущая стратегия требует существующую целевую таблицу, поэтому при выполнении она не будет создана автоматически.", + "data_sync.warning.target_missing_columns": "В целевой таблице отсутствует {{count}} столбцов: {{columns}}", + "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "Источники TDengine пока не добавляют столбцы автоматически в существующую целевую таблицу; сначала проверьте целевую структуру", + "data_sync.warning.tdengine_source_mysql_type_fallback": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления MySQL; он деградирован до {{targetType}}", + "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "Столбец {{column}} типа {{type}} сопоставлен с {{targetType}}, чтобы избежать переполнения unsigned", + "data_sync.warning.tdengine_source_pglike_type_fallback": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления PG-like; он деградирован до {{targetType}}", + "data_sync.warning.tdengine_source_semantics_degraded": "TDengine -> реляционные цели сейчас мигрирует только столбцы и данные; supertable, связь TAG, retention policy и другая семантика временных рядов могут быть деградированы или потеряны", + "data_sync.warning.tdengine_source_tag_column_degraded": "Столбец {{column}} является TDengine TAG и будет деградирован до обычного столбца в реляционной цели", + "data_sync.warning.tdengine_source_tag_column_mapped": "Столбец {{column}} является TDengine TAG и сопоставлен как обычный столбец", + "data_sync.warning.tdengine_target_auto_create_basic_table_only": "auto-create для цели TDengine сейчас создает только базовую таблицу; индексы, внешние ключи, триггеры, supertable/TAGS/TTL не мигрируются автоматически", + "data_sync.warning.tdengine_target_auto_increment_not_migrated": "Семантика auto-increment столбца {{column}} не мигрируется в TDengine", + "data_sync.warning.tdengine_target_binary_type_fallback": "Столбец {{column}} типа {{type}} деградирован до {{targetType}} по строковой семантике", + "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "Столбец {{column}} типа {{type}} повышен до первого столбца TDengine TIMESTAMP", + "data_sync.warning.tdengine_target_empty_type_fallback": "Тип столбца {{column}} пуст и деградирован до {{targetType}}", + "data_sync.warning.tdengine_target_enum_type_fallback": "Столбец {{column}} enum типа {{type}} деградирован до {{targetType}}", + "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "Цели TDengine пока не добавляют столбцы автоматически в существующую целевую таблицу; сначала проверьте целевую структуру", + "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "Не удалось разобрать длину FixedString столбца {{column}}; он деградирован до {{targetType}}", + "data_sync.warning.tdengine_target_identity_not_migrated": "Семантика auto-increment/identity столбца {{column}} не мигрируется в TDengine", + "data_sync.warning.tdengine_target_insert_only": "Цели TDengine сейчас поддерживают только записи INSERT; различия update/delete будут отклонены при выполнении", + "data_sync.warning.tdengine_target_json_regular_table_fallback": "Столбец {{column}} типа {{type}} не сохраняет семантику TAG в TDengine regular table и деградирован до {{targetType}}", + "data_sync.warning.tdengine_target_json_tag_only_fallback": "Столбец {{column}} типа {{type}} деградирован до {{targetType}}, потому что TDengine JSON применяется только к TAG", + "data_sync.warning.tdengine_target_missing_time_column": "В исходной таблице нет сопоставимого столбца времени, поэтому автоматическое создание таблицы недоступно. Перед продолжением вручную подготовьте целевую таблицу TDengine и столбец времени.", + "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "Семантика первичного ключа столбца {{column}} не мигрируется в TDengine как реляционное ограничение", + "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления TDengine для того же типа базы данных; он деградирован до {{targetType}}", + "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "Столбец {{column}} является TDengine TAG и после миграции в regular table будет деградирован до обычного столбца", + "data_sync.warning.tdengine_target_time_only_type_fallback": "Для столбца {{column}} типа {{type}} нет стабильного сопоставления TDengine time-only; он деградирован до {{targetType}}", + "data_sync.warning.tdengine_target_timestamp_column_reordered": "Базовые таблицы TDengine требуют столбец времени первым; столбец {{column}} перемещен на первую позицию", + "data_sync.warning.tdengine_target_type_fallback": "Столбец {{column}} типа {{type}} деградирован до {{targetType}}", + "data_sync.warning.tdengine_target_type_no_mapping_fallback": "Для столбца {{column}} типа {{type}} нет отдельного сопоставления TDengine; он деградирован до {{targetType}}", + "data_sync.warning.tdengine_target_user_defined_type_fallback": "Столбец {{column}} является пользовательским типом и деградирован до {{targetType}}", + "data_viewer.message.connection_not_found": "Подключение не найдено", + "data_viewer.message.duckdb_query_timeout": "Запрос DuckDB превысил тайм-аут подключения и был прерван. Увеличьте тайм-аут подключения или сократите область сортировки/фильтрации и повторите попытку.", + "data_viewer.message.fetch_data_failed_detail": "Ошибка при получении данных: {{detail}}", + "data_viewer.message.mongo_filter_invalid_detail": "Недопустимое условие фильтра MongoDB: {{detail}}", + "data_viewer.message.mongo_filter_parse_failed": "Не удалось разобрать", + "data_viewer.message.query_failed": "Ошибка запроса", + "data_viewer.message.query_timeout": "Запрос превысил тайм-аут подключения и был прерван. Увеличьте тайм-аут подключения или сократите область запроса и повторите попытку.", + "data_viewer.message.result_not_ready": "Текущий набор результатов еще не готов. Сначала загрузите данные один раз.", + "data_viewer.message.sort_buffer_retry_succeeded": "Буфер сортировки был автоматически увеличен, повторный запрос выполнен успешно.", + "data_viewer.message.total_count_failed": "Не удалось подсчитать общее количество строк", + "data_viewer.message.total_count_failed_detail": "Не удалось подсчитать общее количество строк: {{detail}}", + "data_viewer.message.total_count_parse_failed": "Не удалось разобрать результат подсчета общего количества строк", "data_viewer.read_only.reason.duckdb_rowid_missing": "Первичный ключ, пригодный уникальный индекс или DuckDB rowid не найден, поэтому изменения нельзя безопасно отправить.", + "data_viewer.read_only.reason.index_metadata_unavailable": "Не удалось загрузить метаданные уникального индекса, поэтому изменения нельзя безопасно отправить.", + "data_viewer.read_only.reason.metadata_unavailable": "Не удалось загрузить метаданные первичного ключа или уникального индекса, поэтому изменения нельзя безопасно отправить.", + "data_viewer.read_only.reason.mongo_id_missing": "В наборе результатов MongoDB отсутствует _id, поэтому изменения нельзя безопасно отправить.", + "data_viewer.read_only.reason.no_safe_locator": "Первичный ключ или пригодный уникальный индекс не найден, поэтому изменения нельзя безопасно отправить.", + "data_viewer.read_only.reason.oracle_rowid_missing": "Первичный ключ или пригодный уникальный индекс не найден, а Oracle ROWID отсутствует в результате, поэтому изменения нельзя безопасно отправить.", + "data_viewer.read_only.reason.primary_key_column_missing": "В наборе результатов отсутствует столбец первичного ключа {{columns}}, поэтому изменения нельзя безопасно отправить.", + "data_viewer.read_only.warning.collection": "Коллекция {{target}} остается только для чтения: {{reason}}", + "data_viewer.read_only.warning.table": "Таблица {{target}} остается только для чтения: {{reason}}", + "data_viewer.sql_log.phase.complex_type_fallback_retry": "Повтор с резервной обработкой сложного типа", + "data_viewer.sql_log.phase.main_query": "Основной запрос", + "data_viewer.sql_log.phase.sort_buffer_retry": "Повтор ({{size}} sort_buffer)", + "database.label": "База данных", + "database.unnamed": "База данных без имени", "db.backend.action.delete": "Удаление", "db.backend.action.update": "Обновление", "db.backend.error.batch_insert_exec_required": "Требуется функция выполнения", @@ -6979,6 +4485,41 @@ "definition_viewer.edit.comment_empty_definition": "Текущее определение объекта пусто. Перед выполнением дополните DDL для {{name}}", "definition_viewer.edit.comment_title": "Изменить {{object}}: {{name}}", "definition_viewer.edit.tab_title": "Изменить {{object}}: {{name}}", + "definition_viewer.editor.event_definition_not_found": "Определение события не найдено", + "definition_viewer.editor.event_fragment_fallback.header": "Текущий источник данных не вернул полный оператор CREATE EVENT; возвращен фрагмент определения события", + "definition_viewer.editor.metadata_fallback.header": "Текущий источник данных не вернул исполняемый текст определения; возвращены метаданные", + "definition_viewer.editor.metadata_fallback.name_label": "Имя", + "definition_viewer.editor.metadata_fallback.type_label": "Тип", + "definition_viewer.editor.object_definition_not_found": "Определение {{object}} не найдено", + "definition_viewer.editor.routine_definition_not_found": "Определение функции/процедуры не найдено", + "definition_viewer.editor.sphinx.compat_queries_hint": "Было выполнено несколько совместимых запросов. Причиной могут быть ограничения версии или неподдерживаемый тип объекта.", + "definition_viewer.editor.sphinx.empty_result": "Текущий экземпляр Sphinx{{version}} не вернул определение {{object}}.", + "definition_viewer.editor.sphinx.failed_message_label": "Возвращенное сообщение об ошибке", + "definition_viewer.editor.sphinx.failed_message_unknown": "Возвращенное сообщение об ошибке: неизвестная ошибка", + "definition_viewer.editor.sphinx.unsupported_query": "Текущий экземпляр Sphinx{{version}} не поддерживает запрос определений {{object}}.", + "definition_viewer.editor.sphinx.version_suffix": " (версия: {{version}})", + "definition_viewer.editor.unsupported_event_definition": "Этот тип базы данных не поддерживает просмотр определений событий", + "definition_viewer.editor.unsupported_object_definition": "Просмотр определения этого объекта не поддерживается", + "definition_viewer.editor.unsupported_routine_definition": "Этот тип базы данных не поддерживает просмотр определений функций/процедур", + "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite не поддерживает управление определениями функций/процедур", + "definition_viewer.editor.unsupported_view_definition": "Этот тип базы данных не поддерживает просмотр определений представлений", + "definition_viewer.editor.view_definition_not_found": "Определение представления не найдено", + "definition_viewer.error.connection_not_found": "Подключение к базе данных не найдено", + "definition_viewer.error.event_name_empty": "Имя события пустое", + "definition_viewer.error.load_failed": "Не удалось загрузить", + "definition_viewer.error.query_failed": "Не удалось запросить определение", + "definition_viewer.error.query_failed_detail": "Не удалось запросить определение: {{detail}}", + "definition_viewer.error.routine_name_empty": "Имя функции/процедуры пустое", + "definition_viewer.error.view_name_empty": "Имя представления пустое", + "definition_viewer.field.database": "База данных", + "definition_viewer.field.type": "Тип", + "definition_viewer.loading.event_definition": "Загрузка определения события...", + "definition_viewer.loading.routine_definition": "Загрузка определения функции/процедуры...", + "definition_viewer.loading.view_definition": "Загрузка определения представления...", + "definition_viewer.object.event": "Событие", + "definition_viewer.object.materialized_view": "Материализованное представление", + "definition_viewer.object.routine": "Функция/процедура", + "definition_viewer.object.view": "Представление", "definition_viewer.warning.refresh_latest_failed": "Не удалось обновить последнее определение", "dev.perf_data_grid.columns": "Столбцы", "dev.perf_data_grid.density.comfortable": "Стандартная", @@ -6993,41 +4534,106 @@ "dev.perf_data_grid.ui_version.legacy_short": "старый", "dev.perf_data_grid.ui_version.v2": "Новый UI", "dev.perf_data_grid.ui_version.v2_short": "новый", + "driver_manager.action.close": "Закрыть", + "driver_manager.action.import_directory": "Импортировать каталог драйверов", + "driver_manager.action.import_package": "Импортировать пакет драйвера", + "driver_manager.action.install_enable": "Установить и включить", + "driver_manager.action.logs": "Журнал", + "driver_manager.action.network_check": "Проверка сети", + "driver_manager.action.open_directory": "Открыть каталог драйверов", + "driver_manager.action.open_global_proxy_settings": "Открыть настройки глобального прокси", + "driver_manager.action.refresh": "Обновить", + "driver_manager.action.remove": "Удалить", "driver_manager.action.switch_version": "Переключить версию", + "driver_manager.backend.dialog.select_download_directory": "Выберите каталог загрузки драйверов", + "driver_manager.backend.dialog.select_package_directory": "Выберите каталог пакета драйвера", + "driver_manager.backend.dialog.select_package_file": "Выберите файл пакета драйвера (не JDBC Jar)", + "driver_manager.backend.driver_fallback_name": "драйвер", "driver_manager.backend.error.agent_hash_failed": "Не удалось вычислить checksum агента драйвера: {{detail}}", "driver_manager.backend.error.agent_metadata_unavailable": "Метаданные версии driver-agent {{name}} недоступны. Установите driver-agent, соответствующий текущей версии: {{detail}}", "driver_manager.backend.error.agent_path_occupied_by_directory": "Путь агента драйвера {{name}} занят каталогом: {{path}}", "driver_manager.backend.error.agent_revision_mismatch": "Revision driver-agent {{name}} не совпадает (установлено: {{actual}}, требуется: {{expected}}). Установите driver-agent, соответствующий текущей версии.", "driver_manager.backend.error.agent_revision_mismatch_empty_actual": "Revision driver-agent {{name}} не совпадает (установлено: пусто, требуется: {{expected}}). Установите driver-agent, соответствующий текущей версии.", + "driver_manager.backend.error.api_url_empty": "API URL пуст", + "driver_manager.backend.error.asset_name_empty": "Имя ресурса драйвера пустое", + "driver_manager.backend.error.builtin_download_not_required": "Встроенным драйверам не требуется загрузка пакетов расширения", + "driver_manager.backend.error.builtin_install_not_required": "Встроенным драйверам не требуется установка пакетов расширения", + "driver_manager.backend.error.builtin_package_not_required": "У встроенных драйверов нет установочных пакетов", + "driver_manager.backend.error.builtin_remove_not_allowed": "Встроенные драйверы нельзя удалить", + "driver_manager.backend.error.builtin_version_not_required": "Встроенным драйверам не требуется выбор версии", + "driver_manager.backend.error.bundle_download_failed": "Не удалось скачать комплект драйверов: {{detail}}", "driver_manager.backend.error.bundle_entry_missing": "{{name}} не найден в комплекте драйверов (ожидаемый путь: {{path}})", + "driver_manager.backend.error.bundle_index_asset_missing": "Ресурс индекса комплекта драйверов не найден", + "driver_manager.backend.error.bundle_index_empty": "Индекс комплекта драйверов пуст", + "driver_manager.backend.error.bundle_index_fetch_failed": "Не удалось получить индекс комплекта драйверов: {{detail}}", + "driver_manager.backend.error.bundle_index_parse_failed": "Не удалось разобрать индекс комплекта драйверов: {{detail}}", + "driver_manager.backend.error.bundle_url_empty": "URL загрузки комплекта драйверов пуст", "driver_manager.backend.error.bundled_agent_hash_failed": "Не удалось вычислить checksum встроенного агента драйвера {{name}}: {{detail}}", + "driver_manager.backend.error.cache_key_empty": "Cache key пуст", "driver_manager.backend.error.chmod_agent_failed": "Не удалось настроить права агента драйвера: {{detail}}", "driver_manager.backend.error.close_agent_file_failed": "Не удалось закрыть файл агента драйвера: {{detail}}", "driver_manager.backend.error.copy_bundled_agent_failed": "Не удалось скопировать встроенный агент драйвера {{name}}: {{detail}}", "driver_manager.backend.error.copy_runtime_dependency_entry_failed": "Не удалось скопировать зависимость времени выполнения {{name}}: {{detail}}", "driver_manager.backend.error.copy_runtime_dependency_failed": "Не удалось скопировать runtime-зависимости {{name}}: {{detail}}", "driver_manager.backend.error.create_agent_temp_file_failed": "Не удалось создать временный файл агента драйвера: {{detail}}", + "driver_manager.backend.error.create_directory_failed": "Не удалось создать каталог драйверов: {{detail}}", "driver_manager.backend.error.create_named_directory_failed": "Не удалось создать каталог драйвера {{name}}: {{detail}}", + "driver_manager.backend.error.download_failed": "Загрузка не удалась: {{detail}}", + "driver_manager.backend.error.download_url_empty": "Download URL пуст", + "driver_manager.backend.error.driver_type_empty": "Тип драйвера пуст", + "driver_manager.backend.error.driver_version_list_fetch_failed": "Не удалось получить список версий драйвера: {{detail}}", + "driver_manager.backend.error.driver_version_list_parse_failed": "Не удалось разобрать список версий драйвера: {{detail}}", "driver_manager.backend.error.driver_version_unsupported": "Версия {{version}} для {{name}} не поддерживается", "driver_manager.backend.error.extract_runtime_dependency_failed": "Не удалось распаковать зависимость времени выполнения {{name}}: {{detail}}", + "driver_manager.backend.error.file_manifest_url_invalid": "Недопустимый файловый URL манифеста драйверов", + "driver_manager.backend.error.file_path_empty": "Путь файла пуст", "driver_manager.backend.error.go_not_found_prebuilt_missing": "Go не установлен в текущей среде, и доступный готовый пакет агента {{name}} не найден", "driver_manager.backend.error.import_local_agent_failed": "Не удалось импортировать локальный агент драйвера: {{detail}}", "driver_manager.backend.error.import_local_agent_runtime_failed": "Не удалось импортировать runtime-зависимости локального агента драйвера: {{detail}}", "driver_manager.backend.error.install_prebuilt_package_failed": "Не удалось установить готовый пакет драйвера: {{detail}}", "driver_manager.backend.error.local_directory_entry_missing": "Файл агента {{name}} не найден в каталоге (предпочтительный путь: {{path}}, кандидаты имен файлов: {{assetCandidates}} / {{baseCandidates}})", "driver_manager.backend.error.local_directory_not_directory": "Путь локального каталога драйверов не является каталогом: {{path}}", + "driver_manager.backend.error.local_directory_path_empty": "Путь локального каталога драйверов пуст", "driver_manager.backend.error.local_directory_scan_limit": "В локальном каталоге драйверов слишком много записей (более {{max}}). Сузьте каталог или выберите zip/отдельный файл напрямую.", + "driver_manager.backend.error.local_manifest_url_invalid": "Недопустимый локальный URL манифеста драйверов", "driver_manager.backend.error.local_package_entry_missing": "Файл агента {{name}} не найден в локальном пакете драйвера (ожидаемый путь: {{path}})", + "driver_manager.backend.error.local_package_path_empty": "Путь локального пакета драйвера пуст", + "driver_manager.backend.error.manifest_fetch_failed": "Не удалось получить манифест драйверов: {{detail}}", + "driver_manager.backend.error.manifest_parse_failed": "Не удалось разобрать манифест драйверов: {{detail}}", + "driver_manager.backend.error.manifest_scheme_unsupported": "Неподдерживаемая схема URL манифеста драйверов: {{scheme}}", + "driver_manager.backend.error.manifest_too_large": "Манифест драйверов превышает ограничение размера", + "driver_manager.backend.error.manifest_url_empty": "URL манифеста драйверов пуст", "driver_manager.backend.error.metadata_file_write_failed": "Не удалось записать файл метаданных драйвера: {{detail}}", "driver_manager.backend.error.metadata_payload_encode_failed": "Не удалось сериализовать метаданные драйвера: {{detail}}", + "driver_manager.backend.error.module_path_empty": "Путь модуля пуст", + "driver_manager.backend.error.module_version_list_empty": "Список версий модуля пуст", + "driver_manager.backend.error.module_version_list_fetch_failed": "Не удалось получить список версий модуля: {{detail}}", + "driver_manager.backend.error.module_version_list_read_failed": "Не удалось прочитать список версий модуля: {{detail}}", + "driver_manager.backend.error.mongo_version_unsupported": "Версия MongoDB {{version}} не поддерживается; поддерживаются только 1.17.x и 2.x", "driver_manager.backend.error.named_agent_hash_failed": "Не удалось вычислить checksum агента драйвера {{name}}: {{detail}}", "driver_manager.backend.error.named_chmod_agent_failed": "Не удалось настроить права агента драйвера {{name}}: {{detail}}", + "driver_manager.backend.error.no_driver_versions": "Доступные версии драйвера не найдены", + "driver_manager.backend.error.open_bundle_failed": "Не удалось открыть комплект драйверов: {{detail}}", + "driver_manager.backend.error.open_directory_failed": "Не удалось открыть каталог драйверов: {{detail}}", + "driver_manager.backend.error.open_directory_unsupported": "На этой платформе нельзя открывать каталоги: {{platform}}", + "driver_manager.backend.error.open_local_package_failed": "Не удалось открыть локальный пакет драйвера: {{detail}}", + "driver_manager.backend.error.optional_go_only": "Здесь можно устанавливать и включать только дополнительные Go-драйверы", + "driver_manager.backend.error.package_size_unsupported": "Этот драйвер не поддерживает запрос размера установочного пакета", + "driver_manager.backend.error.prebuilt_downloads_failed": "Не удалось скачать готовый пакет: {{detail}}", + "driver_manager.backend.error.read_bundle_entry_failed": "Не удалось прочитать запись комплекта драйверов: {{detail}}", + "driver_manager.backend.error.read_local_directory_failed": "Не удалось прочитать локальный каталог драйверов: {{detail}}", + "driver_manager.backend.error.read_local_package_entry_failed": "Не удалось прочитать запись локального пакета драйвера: {{detail}}", + "driver_manager.backend.error.read_local_package_failed": "Не удалось прочитать локальный пакет драйвера: {{detail}}", + "driver_manager.backend.error.release_empty": "Release пуст", + "driver_manager.backend.error.release_info_fetch_failed": "Не удалось получить сведения Release: {{detail}}", "driver_manager.backend.error.remove_installed_agent_failed": "Не удалось удалить установленный агент драйвера {{name}}: {{detail}}", + "driver_manager.backend.error.remove_package_failed": "Не удалось удалить пакет драйвера: {{detail}}", "driver_manager.backend.error.replace_agent_failed": "Не удалось заменить агент драйвера: {{detail}}", "driver_manager.backend.error.runtime_dependency_directory_empty": "Каталог зависимостей времени выполнения пуст", "driver_manager.backend.error.runtime_dependency_entry_missing": "В пакете драйвера отсутствует зависимость времени выполнения: {{name}}", "driver_manager.backend.error.runtime_dependency_required": "{{name}} требует поставляемые вместе runtime-зависимости на текущей платформе ({{files}}); установка агента одним файлом не поддерживается. Используйте комплект драйверов, отдельный driver zip или локальную сборку из исходников.", "driver_manager.backend.error.runtime_dependency_target_directory_empty": "Целевой каталог зависимостей времени выполнения пуст", + "driver_manager.backend.error.scan_local_directory_failed": "Не удалось просканировать локальный каталог драйверов: {{detail}}", "driver_manager.backend.error.source_build_command_failed": "Не удалось собрать агент драйвера {{name}}: {{detail}}; вывод: {{output}}", "driver_manager.backend.error.source_build_duckdb_windows_cgo_toolchain_prepare_failed": "Не удалось подготовить CGO toolchain DuckDB Windows: {{detail}}", "driver_manager.backend.error.source_build_duckdb_windows_dlltool_resolve_failed": "Не удалось найти DuckDB Windows dlltool: {{detail}}", @@ -7036,6 +4642,7 @@ "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found": "Не найден пригодный gcc.exe/g++.exe; {{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found_with_checked": "Не найден пригодный gcc.exe/g++.exe. Проверено: {{checked}}; {{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_toolchain_install_hint": "Сначала установите toolchain MSYS2 UCRT64: winget install --id MSYS2.MSYS2 -e; затем выполните C:\\msys64\\usr\\bin\\bash.exe -lc \"pacman -S --needed --noconfirm mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-binutils\"", + "driver_manager.backend.error.source_build_failed": "Локальная сборка из исходников не удалась: {{detail}}", "driver_manager.backend.error.source_build_go_mod_read_failed": "Не удалось прочитать go.mod: {{detail}}", "driver_manager.backend.error.source_build_module_dependency_missing": "Зависимость драйвера не найдена в go.mod: {{modulePath}}", "driver_manager.backend.error.source_build_module_or_version_empty": "Путь модуля драйвера или версия пусты", @@ -7047,53 +4654,297 @@ "driver_manager.backend.error.source_build_timeout": "Сборка агента драйвера {{name}} превысила лимит времени (более {{timeout}}). Рекомендуется использовать готовый пакет драйвера или импорт локального пакета драйвера.", "driver_manager.backend.error.source_build_workdir_unavailable": "Не удалось определить текущий каталог: {{detail}}", "driver_manager.backend.error.sync_agent_failed": "Не удалось сбросить агент драйвера на диск: {{detail}}", + "driver_manager.backend.error.tag_empty": "Tag пуст", + "driver_manager.backend.error.unknown": "Неизвестная ошибка", + "driver_manager.backend.error.unsupported_driver_type": "Неподдерживаемый тип драйвера", + "driver_manager.backend.error.version_empty": "Версия пустая", "driver_manager.backend.error.write_agent_failed": "Не удалось записать агент драйвера: {{detail}}", "driver_manager.backend.error.zip_entry_empty": "Элемент zip пуст", + "driver_manager.backend.message.download_failed_detail": "Не удалось скачать и установить драйвер: {{detail}}", + "driver_manager.backend.message.driver_install_success": "Драйвер успешно установлен", + "driver_manager.backend.message.jdbc_jar_unsupported": "Прямой импорт файлов JDBC Jar не поддерживается. GoNavi использует Go-драйверы и дополнительные пакеты driver-agent; используйте пакет драйвера или каталог драйвера. Для подключения к Kingbase предпочтительно выберите тип подключения Kingbase либо укажите kingbase / kingbase8 в пользовательском подключении.", + "driver_manager.backend.message.local_import_failed_detail": "Не удалось импортировать локальный пакет драйвера: {{detail}}", + "driver_manager.backend.message.log_hint": " (подробный журнал: {{path}})", + "driver_manager.backend.message.metadata_write_failed_detail": "Не удалось записать метаданные драйвера: {{detail}}", + "driver_manager.backend.message.opened_directory": "Каталог драйверов открыт: {{path}}", + "driver_manager.backend.message.package_removed": "Пакет драйвера удален", + "driver_manager.backend.message.runtime_directory_configured": "Каталог среды выполнения драйверов настроен", + "driver_manager.backend.message.unsupported_builtin_manifest_url": "Неподдерживаемый URL встроенного манифеста драйверов: {{url}}", + "driver_manager.backend.network.error.probe_host_missing": "В URL проверки отсутствует хост", + "driver_manager.backend.network.error.probe_url_empty": "URL проверки пуст", "driver_manager.backend.network.error.timeout": "Время ожидания сетевого соединения истекло", + "driver_manager.backend.network.probe.github_driver_release": "Релизы драйверов GitHub", + "driver_manager.backend.network.probe.github_release_asset_domain": "Домен ресурсов GitHub Release", + "driver_manager.backend.network.probe.go_module_proxy": "Прокси модулей Go", + "driver_manager.backend.network.summary.download_chain_unreachable": "GitHub API доступен, но цепочка загрузки драйверов недоступна. Сначала включите глобальный прокси GoNavi, разрешите github.com, api.github.com, release-assets.githubusercontent.com, objects.githubusercontent.com и raw.githubusercontent.com в правилах прокси, а если ошибка останется, рассмотрите режим TUN.", + "driver_manager.backend.package_size.built_in": "Встроенный", + "driver_manager.backend.package_size.to_be_published": "Ожидает публикации", + "driver_manager.backend.progress.fallback.bundle_available": "Прямая ссылка недоступна; переключаемся на комплект драйверов ({{name}}, осталось источников: {{bundle}})", + "driver_manager.backend.progress.fallback.direct_to_bundle": "Прямые ссылки на готовую сборку не подошли; переключаемся на комплект драйверов ({{name}}, осталось источников: {{bundle}})", + "driver_manager.backend.progress.fallback.explicit_skip_bundle": "Прямые ссылки на готовую сборку не подошли; разрешены только явные ресурсы, комплект драйверов пропускается ({{name}})", + "driver_manager.backend.progress.fallback.source_build": "Ресурсы выпуска не подошли; готовится резервная локальная сборка из исходников ({{name}})", + "driver_manager.backend.progress.plan.bundle_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); прямые ссылки на готовую сборку не указаны, пробуем {{bundle}} источников комплектов драйверов", + "driver_manager.backend.progress.plan.direct_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); пробуем {{direct}} прямых ссылок на готовую сборку", + "driver_manager.backend.progress.plan.direct_then_bundle": "Подготовка установки агента драйвера {{name}} (версия {{version}}); сначала {{direct}} прямых ссылок на готовую сборку, затем {{bundle}} источников комплектов драйверов", + "driver_manager.backend.progress.plan.explicit_direct": "Подготовка установки агента драйвера {{name}} (версия {{version}}); только явные ресурсы версии, пробуем {{direct}} прямых ссылок на готовую сборку", + "driver_manager.backend.progress.plan.source_fallback": "Подготовка установки агента драйвера {{name}} (версия {{version}}); если ресурсы выпуска не совпадут, будет локальная сборка из исходников", + "driver_manager.backend.progress.plan.source_first": "Подготовка установки агента драйвера {{name}} (версия {{version}}); сначала локальная сборка из исходников, затем резервная загрузка", + "driver_manager.backend.progress.plan.source_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); эта версия разрешает только локальную сборку из исходников", + "driver_manager.backend.status.affected_connections": "Затрагивает {{count}} сохраненных подключений", + "driver_manager.backend.status.agent_arch_incompatible_detail": "Архитектура агента драйвера {{name}} несовместима: файл={{file}}, текущий процесс={{process}}. Переустановите и включите его в Driver Manager.", + "driver_manager.backend.status.agent_missing": "Агент драйвера {{name}} отсутствует. Переустановите и включите его в Driver Manager.", + "driver_manager.backend.status.agent_path_failed": "Не удалось определить путь агента драйвера {{name}}. Переустановите и включите его в Driver Manager.", "driver_manager.backend.status.agent_revision_update_detail": "Причина: текущая версия GoNavi требует обновленный {{name}} driver-agent (revision: {{expected}}). Влияние: driver-agent является отдельным бинарным файлом и не обновляется автоматически вместе с основным приложением. Без переустановки продолжит работать старая логика agent, поэтому исправления или оптимизации на стороне драйвера не вступят в силу, и проблемы старой версии могут сохраняться. Настоятельно рекомендуется переустановить соответствующий driver-agent.", "driver_manager.backend.status.agent_revision_update_detail_with_actual": "Причина: текущая версия GoNavi требует обновленный {{name}} driver-agent (revision: {{expected}}). Влияние: driver-agent является отдельным бинарным файлом и не обновляется автоматически вместе с основным приложением. Без переустановки продолжит работать старая логика agent, поэтому исправления или оптимизации на стороне драйвера не вступят в силу, и проблемы старой версии могут сохраняться. Настоятельно рекомендуется переустановить соответствующий driver-agent (установленная метка: {{actual}}, требуется: {{expected}}).", + "driver_manager.backend.status.agent_unavailable_reinstall": "Агент драйвера {{name}} недоступен: {{detail}}. Переустановите и включите его в Driver Manager.", + "driver_manager.backend.status.built_in_available": "Встроенный драйвер готов к подключению", + "driver_manager.backend.status.expected_revision": "требуемая revision {{revision}}.", + "driver_manager.backend.status.installed_pending": "Драйвер установлен и ожидает активации", + "driver_manager.backend.status.installed_pending_with_version": "Драйвер установлен (версия: {{version}}) и ожидает активации", + "driver_manager.backend.status.installed_revision": "установленная revision {{revision}}.", "driver_manager.backend.status.mongodb_compatibility_update_detail": "Причина: рекомендуемая совместимая версия драйвера MongoDB — {{recommended}}, установленная версия — {{installed}}. Влияние: MongoDB 2.x driver-agent использует официальный драйвер v2 и требует MongoDB server 4.2+; при подключении к MongoDB 4.0 возможна несовместимость wire version 7. Настоятельно рекомендуется переустановить соответствующий driver-agent.", + "driver_manager.backend.status.needs_update": "Требуется переустановка, чтобы применить обновления драйвера.", + "driver_manager.backend.status.optional_disabled": "Go-драйвер {{name}} не включен. Установите и включите его в Driver Manager.", + "driver_manager.backend.status.optional_disabled_generic": "Не включен", + "driver_manager.backend.status.optional_disabled_with_version": "Не включен (версия: {{version}})", + "driver_manager.backend.status.optional_enabled": "Go-драйвер включен и готов к подключению", + "driver_manager.backend.status.slim_build_required": "{{name}} не входит в текущий slim build. Установите Full-версию, чтобы использовать этот драйвер.", + "driver_manager.backend.status.unrecognized_driver_type": "Неизвестный тип источника данных", + "driver_manager.backend.version.latest_suffix": " (последняя)", + "driver_manager.backend.version.recommended_suffix": " (рекомендуется)", + "driver_manager.backend.version.unlabeled": "Версия без метки", + "driver_manager.column.actions": "Действия", + "driver_manager.column.data_source": "Источник данных", + "driver_manager.column.package_size": "Размер пакета", + "driver_manager.column.progress": "Ход установки", + "driver_manager.column.status": "Состояние", + "driver_manager.column.version": "Версия драйвера", + "driver_manager.description.install_required": "Для источников данных, кроме MySQL / Redis / Oracle / PostgreSQL, перед подключением нужно установить и включить драйвер.", + "driver_manager.directory_info.details_label": "Показать каталог драйверов и пояснение о повторном использовании", + "driver_manager.directory_info.log_file": "Файл журнала выполнения: {{path}}", + "driver_manager.directory_info.reuse_help": "Автоматически скачанные и вручную импортированные драйверы сохраняются в этом каталоге. Их можно повторно использовать при последующих обновлениях версий.", + "driver_manager.directory_info.root_dir": "Корневой каталог драйверов: {{path}}", + "driver_manager.directory_info.title": "Каталог драйверов и повторное использование", + "driver_manager.empty.default": "Нет данных о драйверах", + "driver_manager.empty.search": "Нет драйверов, совпадающих с «{{keyword}}»", + "driver_manager.filter_summary.match": "Совпадений {{filtered}} / {{total}}", + "driver_manager.filter_summary.total": "Драйверов: {{total}}", + "driver_manager.import.directory_help": "Если загрузка из приложения не работает, сначала вручную скачайте пакет драйвера в этот каталог, затем используйте «Импортировать пакет драйвера» или «Импортировать каталог драйверов», чтобы завершить установку.", + "driver_manager.import.single_file_help": "Строчное действие «Импортировать пакет драйвера» предназначено только для отдельного файла драйвера или архива, например `mariadb-driver-agent`, `mariadb-driver-agent.exe` или `GoNavi-DriverAgents.zip`. Прямой импорт JDBC Jar не поддерживается; для пакетного импорта используйте «Импортировать каталог драйверов» выше.", + "driver_manager.local_source.directory": "каталог", + "driver_manager.local_source.file": "файл", + "driver_manager.log_modal.empty": "Для этого драйвера пока нет журналов операций.", + "driver_manager.log_modal.executable_path": "Исполняемый файл драйвера: {{path}}", + "driver_manager.log_modal.install_dir": "Каталог установки: {{path}}", + "driver_manager.log_modal.title": "Журнал драйвера - {{name}}", + "driver_manager.log.done_auto_install": "Автоматическая установка завершена{{version}}", + "driver_manager.log.done_local_import": "Установка через локальный импорт завершена{{version}}", + "driver_manager.log.done_remove": "Удаление драйвера завершено", + "driver_manager.log.force_overwrite_reinstall": "Включен режим перезаписи установленных драйверов; будет выполнен повторный импорт", + "driver_manager.log.progress_line": "{{status}}: {{message}} ({{percent}} %)", + "driver_manager.log.skip_installed_dedupe": "Драйвер уже установлен; импорт каталога пропущен из-за устранения дублей", + "driver_manager.log.skip_slim_build": "Текущий пакет выпуска является slim-сборкой; импорт каталога пропущен", + "driver_manager.log.start_auto_install": "Начата автоматическая установка", + "driver_manager.log.start_local_import": "Начат локальный импорт{{version}} ({{source}}): {{path}}", + "driver_manager.log.start_remove": "Начато удаление драйвера", + "driver_manager.message.directory_import_completed": "Импорт каталога завершен{{mode}}: успешно {{success}}{{skip}}", + "driver_manager.message.directory_import_completed_with_failure": "Импорт каталога завершен{{mode}}: успешно {{success}}, с ошибкой {{failed}}{{skip}}", + "driver_manager.message.directory_import_failed": "Импорт каталога не удался{{mode}}: с ошибкой {{failed}}{{skip}}", + "driver_manager.message.install_failed": "Не удалось установить {{name}}", + "driver_manager.message.install_failed_detail": "Не удалось установить {{name}}: {{detail}}", "driver_manager.message.install_failed_fallback": "Не удалось установить {{name}}", + "driver_manager.message.install_start": "Начата установка", + "driver_manager.message.install_success": "{{name}}{{version}} установлен и включен", "driver_manager.message.install_watchdog_timeout": "Установка {{name}} не завершилась за {{minutes}} мин. Фоновая задача, возможно, всё еще загружает или собирает файлы. Обновите статус позже; если это повторяется, проверьте прокси или импортируйте локальный пакет драйвера.", + "driver_manager.message.load_status_failed": "Не удалось загрузить состояние драйверов", + "driver_manager.message.load_status_failed_detail": "Не удалось загрузить состояние драйверов: {{detail}}", + "driver_manager.message.load_version_failed": "Не удалось загрузить список версий для {{name}}", + "driver_manager.message.load_version_failed_detail": "Не удалось загрузить список версий для {{name}}: {{detail}}", + "driver_manager.message.local_directory_required": "Выберите допустимый каталог пакета драйвера", + "driver_manager.message.local_file_required": "Выберите допустимый файл пакета драйвера", + "driver_manager.message.local_import_failed": "Не удалось импортировать локальный пакет драйвера для {{name}}", + "driver_manager.message.local_import_failed_detail": "Не удалось импортировать локальный пакет драйвера для {{name}}: {{detail}}", + "driver_manager.message.local_import_start": "Начат импорт локального пакета драйвера", + "driver_manager.message.local_import_success": "Локальный пакет драйвера для {{name}}{{version}} установлен и включен", + "driver_manager.message.local_path_required": "Выберите допустимый локальный источник импорта: {{source}}", + "driver_manager.message.network_check_completed": "Проверка сети для драйверов завершена", + "driver_manager.message.network_check_failed": "Проверка сети для драйверов не удалась", + "driver_manager.message.network_check_failed_detail": "Проверка сети для драйверов не удалась: {{detail}}", + "driver_manager.message.no_external_drivers_to_import": "Нет внешних драйверов для импорта", + "driver_manager.message.open_directory_failed": "Не удалось открыть каталог драйверов", + "driver_manager.message.open_directory_failed_detail": "Не удалось открыть каталог драйверов: {{detail}}", + "driver_manager.message.overwrite_suffix": " (с перезаписью установленных)", + "driver_manager.message.remove_failed": "Не удалось удалить {{name}}", + "driver_manager.message.remove_failed_detail": "Не удалось удалить {{name}}: {{detail}}", + "driver_manager.message.remove_success": "{{name}} удален", + "driver_manager.message.select_local_directory_failed": "Не удалось выбрать локальный каталог пакета драйвера", + "driver_manager.message.select_local_directory_failed_detail": "Не удалось выбрать локальный каталог пакета драйвера: {{detail}}", + "driver_manager.message.select_local_file_failed": "Не удалось выбрать локальный файл пакета драйвера", + "driver_manager.message.select_local_file_failed_detail": "Не удалось выбрать локальный файл пакета драйвера: {{detail}}", + "driver_manager.message.skip_suffix": ", {{items}}", + "driver_manager.message.skip.dedupe": "Пропущено дублей: {{count}}", + "driver_manager.message.skip.slim": "Пропущено slim-сборок: {{count}}", + "driver_manager.network.alert.download_chain_unreachable": "Важно: домены маршрута загрузки драйверов недоступны", + "driver_manager.network.alert.download_network_unreachable": "Важно: сеть загрузки драйверов недоступна", + "driver_manager.network.chain_alert.allow_hosts": "Если ошибка сохраняется, разрешите эти узлы в правилах прокси: {{hosts}}. Если правила изменить нельзя, рассмотрите включение режима TUN.", + "driver_manager.network.chain_alert.description": "Страницы GitHub могут открываться, но загрузка пакетов драйверов перенаправляется на домены ресурсов. Сначала включите глобальный прокси в верхнем пункте GoNavi «Прокси», указав локальный адрес и порт приложения прокси.", + "driver_manager.network.checking": "Проверяется сеть загрузки драйверов...", + "driver_manager.network.details_label": "Показать детали проверки сети", + "driver_manager.network.error_value": ", {{detail}}", + "driver_manager.network.github_latency": "Задержка подключения через прокси к GitHub: {{status}}{{latency}}{{detail}}", + "driver_manager.network.latency_value": ", {{latency}}ms", + "driver_manager.network.no_proxy_env": "Системные переменные окружения прокси не обнаружены.", + "driver_manager.network.no_result": "нет результата", + "driver_manager.network.not_checked": "Проверка сети еще не завершена", + "driver_manager.network.proxy_env_detected": "Обнаружены переменные окружения прокси: {{keys}}", + "driver_manager.network.reachable": "доступно", + "driver_manager.network.summary.download_chain_unreachable": "GitHub API доступен, но домены ресурсов для загрузки драйверов недоступны.", + "driver_manager.network.summary.proxy_recommended": "Некоторые точки загрузки драйверов недоступны. Перед установкой настройте прокси HTTP/HTTPS/SOCKS5.", + "driver_manager.network.summary.reachable": "Сеть загрузки драйверов доступна. Драйверы можно устанавливать напрямую.", + "driver_manager.network.summary.reachable_with_proxy": "Сеть загрузки драйверов доступна через настроенный прокси.", + "driver_manager.network.summary.unreachable": "Некоторые точки загрузки драйверов недоступны. Проверьте сеть и повторите попытку.", + "driver_manager.network.summary.unreachable_proxy_configured": "Некоторые точки загрузки драйверов недоступны. Проверьте, что настроенный прокси работает, и повторите попытку.", + "driver_manager.network.unreachable": "недоступно", + "driver_manager.option.force_overwrite_installed": "Перезаписывать установленные", "driver_manager.package_size.built_in": "Встроенный", "driver_manager.package_size.pending_release": "Ожидает публикации", + "driver_manager.progress.agent_install_done": "Установка агента драйвера {{name}} завершена", + "driver_manager.progress.agent_install_start": "Начата установка агента драйвера {{name}}", + "driver_manager.progress.backend_detail": "Деталь backend: {{detail}}", + "driver_manager.progress.backend_empty": "Backend не вернул деталей прогресса", + "driver_manager.progress.dev_build_fallback": "Предварительно собранный пакет не найден; пробуем локальную сборку для разработки", + "driver_manager.progress.download_bundle": "Загрузка комплекта драйвера {{name}}", + "driver_manager.progress.download_prebuilt_agent": "Загрузка предварительно собранного агента драйвера {{name}}", "driver_manager.progress.download_prebuilt_package": "Загрузка предварительно собранного пакета драйвера {{name}}", + "driver_manager.progress.extract_agent_from_bundle": "Извлечение агента {{name}} из комплекта драйверов", + "driver_manager.progress.fallback.bundle_available": "Прямая ссылка недоступна; переключаемся на комплект драйверов ({{name}}, осталось источников: {{bundle}})", + "driver_manager.progress.fallback.direct_to_bundle": "Прямые ссылки на готовую сборку не подошли; переключаемся на комплект драйверов ({{name}}, осталось источников: {{bundle}})", + "driver_manager.progress.fallback.explicit_skip_bundle": "Прямые ссылки на готовую сборку не подошли; разрешены только явные ресурсы, комплект драйверов пропускается ({{name}})", + "driver_manager.progress.fallback.source_build": "Ресурсы выпуска не подошли; готовится резервная локальная сборка из исходников ({{name}})", + "driver_manager.progress.install_start": "Начата установка", + "driver_manager.progress.local_package_done": "Импорт локального пакета драйвера завершен", + "driver_manager.progress.local_package_start": "Начата установка локального пакета драйвера", + "driver_manager.progress.metadata_write": "Запись метаданных драйвера", + "driver_manager.progress.plan.bundle_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); прямые ссылки на готовую сборку не указаны, пробуем {{bundle}} источников комплектов драйверов", + "driver_manager.progress.plan.direct_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); пробуем {{direct}} прямых ссылок на готовую сборку", + "driver_manager.progress.plan.direct_then_bundle": "Подготовка установки агента драйвера {{name}} (версия {{version}}); сначала {{direct}} прямых ссылок на готовую сборку, затем {{bundle}} источников комплектов драйверов", + "driver_manager.progress.plan.explicit_direct": "Подготовка установки агента драйвера {{name}} (версия {{version}}); только явные ресурсы версии, пробуем {{direct}} прямых ссылок на готовую сборку", "driver_manager.progress.plan.require_source_first": "Подготовка установки агента драйвера {{name}} (версия {{version}}); dev-сборка использует только локальную сборку из исходников и не переходит к пакетам релиза", + "driver_manager.progress.plan.source_fallback": "Подготовка установки агента драйвера {{name}} (версия {{version}}); если ресурсы выпуска не совпадут, будет локальная сборка из исходников", + "driver_manager.progress.plan.source_first": "Подготовка установки агента драйвера {{name}} (версия {{version}}); сначала локальная сборка из исходников, затем резервная загрузка", + "driver_manager.progress.plan.source_only": "Подготовка установки агента драйвера {{name}} (версия {{version}}); эта версия разрешает только локальную сборку из исходников", + "driver_manager.progress.pure_go_enabled": "Установка завершена; чистый Go-драйвер включен", + "driver_manager.progress.source_build_preferred": "Сначала используется локальная сборка из исходников для агента драйвера {{name}}", + "driver_manager.progress.status.done": "ГОТОВО", + "driver_manager.progress.status.downloading": "ЗАГРУЗКА", + "driver_manager.progress.status.error": "ОШИБКА", + "driver_manager.progress.status.start": "СТАРТ", + "driver_manager.progress.status.unknown": "НЕИЗВЕСТНО", + "driver_manager.progress.unzip_agent": "Распаковка агента драйвера {{name}}", "driver_manager.progress.wait_bundle": "Ожидание завершения загрузки комплекта драйвера {{name}}", + "driver_manager.punctuation.list_separator": ", ", + "driver_manager.search.built_in": "встроенный", + "driver_manager.search.external": "внешний", + "driver_manager.search.placeholder": "Поиск по имени или типу драйвера, например DuckDB или clickhouse", + "driver_manager.status.built_in_available": "Встроенный доступен", + "driver_manager.status.calculating": "Вычисляется...", + "driver_manager.status.disabled": "Не включен", + "driver_manager.status.enabled": "Включен", + "driver_manager.status.full_required": "Требуется Full-версия", + "driver_manager.status.installed": "Установлен", + "driver_manager.status.installing_percent": "Установка {{percent}}%", + "driver_manager.title": "Управление драйверами", "driver_manager.version.current_fallback": "текущая версия", + "driver_manager.version.default": "Версия по умолчанию", + "driver_manager.version.group.other": "Другое", + "driver_manager.version.group.year": "{{year}} год", + "driver_manager.version.inline_suffix": " (версия {{version}})", "driver_manager.version.installed": "Установлено{{suffix}}", + "driver_manager.version.installed_locked": "Установлено (удалите, чтобы изменить)", + "driver_manager.version.installed_locked_with_version": "{{version}} (установлена; удалите, чтобы изменить)", "driver_manager.version.installed_with_version": "{{version}} (установлена{{suffix}})", "driver_manager.version.latest_suffix": " (последняя)", + "driver_manager.version.mongodb_hint": "Сейчас поддерживаются только MongoDB 1.17.x и 2.x. Более старые версии 1.x недоступны для установки.", "driver_manager.version.needs_reinstall_suffix": ", требуется переустановка", + "driver_manager.version.placeholder.load_on_expand": "Разверните, чтобы загрузить версии", + "driver_manager.version.placeholder.select": "Выберите версию драйвера", "driver_manager.version.recommended_suffix": " (рекомендуемая)", "driver_manager.version.switch_pending": "Сейчас установлена {{installedVersion}}; выбрана {{targetVersion}}. Нажмите «Переключить версию», чтобы применить.", "driver_manager.version.target_fallback": "целевая версия", "driver_manager.version.unlabeled": "Версия не указана", + "driver.guidance.customConnectionDriverHelp": "Поддерживаются: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase; псевдонимы: postgresql/pgx, open_gauss/open-gauss, dm8, kingbase8/kingbasees/kingbasev8. Укажите имя драйвера Go database/sql, уже зарегистрированного в GoNavi. Не вводите напрямую имя системного драйвера ODBC/JDBC и не импортируйте JDBC Jar.", + "file.backend.dialog.export_connections": "Экспорт подключений", + "file.backend.dialog.export_data": "Экспорт данных", + "file.backend.dialog.export_database_sql": "Экспорт {{database}} (SQL)", + "file.backend.dialog.export_query_result": "Экспорт результата запроса", + "file.backend.dialog.export_table": "Экспорт {{table}}", + "file.backend.dialog.export_tables_sql": "Экспорт таблиц (SQL)", + "file.backend.dialog.import_data": "Импорт в {{table}}", "file.backend.dialog.select_ca_server_certificate_file": "Выберите файл сертификата CA/сервера", "file.backend.dialog.select_client_certificate_file": "Выберите файл клиентского сертификата", "file.backend.dialog.select_client_private_key_file": "Выберите файл клиентского приватного ключа", + "file.backend.dialog.select_config_file": "Выберите файл конфигурации", + "file.backend.dialog.select_database_file": "Выберите файл базы данных", + "file.backend.dialog.select_duckdb_file": "Выберите файл данных DuckDB", + "file.backend.dialog.select_sql_directory": "Выберите каталог SQL", + "file.backend.dialog.select_sql_file": "Выберите SQL-файл", + "file.backend.dialog.select_sqlite_file": "Выберите файл данных SQLite", + "file.backend.dialog.select_ssh_key_file": "Выберите файл приватного ключа SSH", "file.backend.dialog.select_tls_certificate_file": "Выберите файл сертификата TLS", "file.backend.error.app_log_file_not_found": "Файл журнала GoNavi не найден", + "file.backend.error.batch_commit_unsupported": "Текущий тип базы данных не поддерживает пакетный commit", + "file.backend.error.connection_export_file_too_large": "Файл экспорта подключений слишком большой", + "file.backend.error.connection_import_file_too_large": "Файл импорта подключений слишком большой", + "file.backend.error.connection_package_decrypt_failed": "Пароль файла неверен или файл поврежден", + "file.backend.error.connection_package_password_required": "Пароль пакета восстановления не может быть пустым", + "file.backend.error.connection_package_payload_too_large": "Содержимое пакета подключений слишком большое", + "file.backend.error.connection_package_unsupported": "Неподдерживаемый формат пакета восстановления подключений", "file.backend.error.create_directory_failed": "Не удалось создать каталог: {{detail}}", "file.backend.error.create_sql_file_failed": "Не удалось создать SQL-файл: {{detail}}", + "file.backend.error.database_name_required": "Имя базы данных не может быть пустым", "file.backend.error.delete_sql_directory_failed": "Не удалось удалить каталог: {{detail}} (можно удалять только пустые каталоги)", "file.backend.error.delete_sql_file_failed": "Не удалось удалить SQL-файл: {{detail}}", "file.backend.error.directory_exists": "Каталог уже существует", "file.backend.error.directory_name_no_separator": "Имя каталога не может содержать разделители пути", "file.backend.error.directory_name_required": "Имя каталога не может быть пустым", + "file.backend.error.directory_path_required": "Путь к каталогу не может быть пустым", + "file.backend.error.export_unsupported_format": "Неподдерживаемый формат экспорта: {{format}}", + "file.backend.error.file_path_empty": "Путь к файлу пуст", + "file.backend.error.file_path_required": "Путь к файлу не может быть пустым", + "file.backend.error.import_csv_empty_or_missing_header": "CSV пуст или отсутствует строка заголовка", + "file.backend.error.import_csv_open_failed": "Не удалось открыть CSV: {{detail}}", + "file.backend.error.import_csv_read_failed": "Не удалось прочитать CSV: {{detail}}", + "file.backend.error.import_excel_empty_or_missing_header": "Excel пуст или отсутствует строка заголовка", + "file.backend.error.import_excel_no_sheets": "В файле Excel нет листов", + "file.backend.error.import_excel_parse_failed": "Не удалось разобрать Excel: {{detail}}", + "file.backend.error.import_excel_read_failed": "Не удалось прочитать Excel: {{detail}}", + "file.backend.error.import_file_empty": "Путь к файлу не может быть пустым", + "file.backend.error.import_json_parse_failed": "Не удалось разобрать JSON: {{detail}}", + "file.backend.error.import_json_root_not_array": "Корень JSON должен быть массивом", + "file.backend.error.import_unsupported_format": "Неподдерживаемый формат файла", + "file.backend.error.invalid_export_mode": "Недопустимый режим экспорта", + "file.backend.error.mysql_workbench_no_connections": "В XML не найдены допустимые конфигурации подключений", + "file.backend.error.mysql_workbench_parse_failed": "Не удалось разобрать XML MySQL Workbench: {{detail}}", "file.backend.error.navicat_connection_password_parse_failed": "Не удалось разобрать пароль для подключения {{name}}", "file.backend.error.navicat_connection_proxy_password_parse_failed": "Не удалось разобрать пароль прокси для подключения {{name}}", "file.backend.error.navicat_connection_ssh_password_parse_failed": "Не удалось разобрать SSH-пароль для подключения {{name}}", "file.backend.error.navicat_ncx_no_connections": "В Navicat NCX не найдены допустимые конфигурации подключений, поддерживаемые GoNavi", "file.backend.error.navicat_ncx_parse_failed": "Не удалось разобрать Navicat NCX", "file.backend.error.navicat_secret_decrypt_failed": "Не удалось расшифровать пароль Navicat", + "file.backend.error.open_file_failed": "Не удалось открыть файл: {{detail}}", + "file.backend.error.query_required": "Запрос не может быть пустым", "file.backend.error.read_directory_info_failed": "Не удалось прочитать информацию о каталоге: {{detail}}", + "file.backend.error.read_file_error_summary": "Ошибка чтения файла: {{detail}}. Выполнено: {{count}}.", + "file.backend.error.read_file_info_failed": "Не удалось прочитать информацию о файле: {{detail}}", "file.backend.error.read_target_directory_info_failed": "Не удалось прочитать информацию о целевом каталоге: {{detail}}", "file.backend.error.read_target_file_info_failed": "Не удалось прочитать информацию о целевом файле: {{detail}}", "file.backend.error.rename_directory_failed": "Не удалось переименовать каталог: {{detail}}", "file.backend.error.rename_sql_file_failed": "Не удалось переименовать SQL-файл: {{detail}}", "file.backend.error.schema_export_no_objects": "В схеме {{schema}} не найдены таблицы или представления для экспорта", "file.backend.error.schema_name_required": "Имя схемы не может быть пустым", + "file.backend.error.select_with_query_required": "Поддерживается экспорт только SELECT/WITH-запросов", + "file.backend.error.selected_path_not_directory": "Выбранный путь не является каталогом", + "file.backend.error.selected_path_not_sql_file": "Выбранный путь не является SQL-файлом", "file.backend.error.sql_file_batch_execution_failed": "Ошибка пакетного выполнения, начиная с инструкции {{index}}: {{detail}}", "file.backend.error.sql_file_batch_rollback_failed": "Ошибка пакетного выполнения: {{detail}}; ошибка отката: {{rollbackDetail}}", "file.backend.error.sql_file_exists": "SQL-файл уже существует", @@ -7101,15 +4952,338 @@ "file.backend.error.sql_file_name_no_separator": "Имя SQL-файла не может содержать разделители пути", "file.backend.error.sql_file_name_required": "Имя SQL-файла не может быть пустым", "file.backend.error.sql_file_statement_execution_failed": "Ошибка выполнения инструкции {{index}}: {{detail}}", + "file.backend.error.table_data_batch_limit": "За один раз можно обработать не более {{max}} таблиц; сейчас выбрано {{count}}", + "file.backend.error.table_data_clear_failed": "Не удалось очистить {{table}}: {{detail}}", + "file.backend.error.table_data_clear_failed_partial": "Не удалось очистить {{table}}: {{detail}}. Предупреждение: первые {{count}} таблиц уже очищены, их нельзя восстановить", + "file.backend.error.table_data_mode_unsupported": "Неподдерживаемый режим очистки данных таблицы: {{mode}}", + "file.backend.error.table_data_no_tables": "Таблицы не выбраны", + "file.backend.error.table_data_truncate_failed": "Не удалось выполнить TRUNCATE для {{table}}: {{detail}}", + "file.backend.error.table_data_truncate_failed_partial": "Не удалось выполнить TRUNCATE для {{table}}: {{detail}}. Предупреждение: для первых {{count}} таблиц уже выполнен TRUNCATE, их нельзя восстановить", + "file.backend.error.table_data_truncate_unsupported": "Текущий тип базы данных {{type}} не поддерживает TRUNCATE для таблиц. Используйте очистку", "file.backend.error.target_directory_exists": "Целевой каталог уже существует", "file.backend.error.target_sql_file_exists": "Целевой SQL-файл уже существует", + "file.backend.error.task_not_found": "Задача не найдена", + "file.backend.error.write_failed": "Ошибка записи: {{detail}}", + "file.backend.filter.all_files": "Все файлы", + "file.backend.filter.all_files_pattern": "Все файлы (*.*)", "file.backend.filter.certificate_files": "Файлы сертификатов", + "file.backend.filter.connection_package": "Пакет подключений GoNavi (*.gonavi-conn)", + "file.backend.filter.data_files": "Файлы данных", + "file.backend.filter.database_files": "Файлы баз данных", + "file.backend.filter.duckdb_files": "Файлы DuckDB", + "file.backend.filter.json_files": "Файлы JSON (*.json)", + "file.backend.filter.mysql_workbench_connections": "Подключения MySQL Workbench (*.xml)", + "file.backend.filter.private_key_files": "Файлы приватных ключей", + "file.backend.filter.sql_files": "Файлы SQL (*.sql)", + "file.backend.filter.sqlite_files": "Файлы SQLite", + "file.backend.html_export.document_title": "Экспорт данных GoNavi", + "file.backend.html_export.empty_rows": "(0 строк)", + "file.backend.html_export.heading": "Экспорт данных GoNavi", + "file.backend.html_export.meta": "Строк: {{rowCount}} · Столбцов: {{columnCount}} · Создано: {{generatedAt}}", + "file.backend.message.cancel_requested": "Запрос на отмену отправлен", + "file.backend.message.execution_cancelled": "Выполнение отменено. Выполнено: {{executed}}, ошибок: {{failed}}, длительность: {{duration}}.", + "file.backend.message.execution_completed": "Выполнение завершено. Успешно: {{success}}, ошибок: {{failed}}, длительность: {{duration}}.", + "file.backend.message.execution_error_detail_header": "Сведения об ошибках (первые {{count}}):", + "file.backend.message.execution_more_errors": "...еще {{count}} ошибок не показано", + "file.backend.message.export_completed": "Экспорт завершен", + "file.backend.message.import_no_data": "Нет данных для импорта", + "file.backend.message.import_row_failed": "Ошибка импорта строки {{index}}: {{detail}}", + "file.backend.message.import_summary": "Импортировано: {{imported}}, ошибок: {{failed}}", + "file.backend.message.statement_failed": "Ошибка выполнения инструкции {{index}}: {{detail}}\n SQL: {{sql}}", + "file.backend.message.table_data_clear_succeeded": "Очистка выполнена успешно", + "file.backend.message.table_data_truncate_succeeded": "TRUNCATE выполнен успешно", + "file.backend.message.transaction_committed": "Транзакция успешно закоммичена", + "file.backend.message.user_cancelled": "Пользователь отменил выполнение", + "file.backend.sql_dump.database": "База данных: {{database}}", + "file.backend.sql_dump.empty_rows": "(0 строк)", + "file.backend.sql_dump.generated_at": "Создано: {{generatedAt}}", + "file.backend.sql_dump.table": "Таблица: {{objectName}}", + "file.backend.sql_dump.title": "Экспорт GoNavi SQL", + "file.backend.sql_dump.view": "Представление: {{objectName}}", + "file.backend.sql_dump.view_data_skipped": "Экспорт данных представления пропущен (INSERT для представлений не выводится).", + "find_in_database.column.action": "Действия", + "find_in_database.column.match_count": "Строк с совпадениями", + "find_in_database.column.matched_columns": "Совпавшие столбцы", + "find_in_database.column.table_name": "Таблица", + "find_in_database.detail.row_count": "{{count}} строк", + "find_in_database.detail.title": "{{table}} - подробности строк с совпадениями", + "find_in_database.match.contains": "Содержит", + "find_in_database.match.exact": "Точное совпадение", + "find_in_database.message.connection_config_not_found": "Конфигурация подключения не найдена", + "find_in_database.message.get_tables_failed": "Не удалось получить список таблиц: {{detail}}", + "find_in_database.message.keyword_required": "Введите ключевое слово для поиска", + "find_in_database.message.no_matches": "Совпадающие данные не найдены", + "find_in_database.message.no_tables": "В текущей базе данных нет таблиц", + "find_in_database.message.search_failed": "Ошибка поиска: {{detail}}", + "find_in_database.placeholder.keyword": "Введите строку для поиска...", + "find_in_database.progress.searching_table": "Поиск в {{table}}... ({{current}}/{{total}})", + "find_in_database.summary.found_tables": "Найдено таблиц с совпадающими данными: {{count}}", + "find_in_database.summary.searching": " (поиск продолжается...)", + "find_in_database.title": "Поиск в базе данных - {{dbName}}", + "find_in_database.tooltip.collapse_details": "Свернуть подробности", + "find_in_database.tooltip.view_details": "Показать подробности", + "import_preview.action.start": "Начать импорт", + "import_preview.error.connection_config_not_found": "Конфигурация подключения не найдена", + "import_preview.error.import_failed": "Не удалось выполнить импорт", + "import_preview.error.import_failed_detail": "Не удалось выполнить импорт: {{detail}}", + "import_preview.error.preview_failed": "Не удалось выполнить предпросмотр", + "import_preview.error.preview_failed_detail": "Не удалось выполнить предпросмотр: {{detail}}", + "import_preview.preview.description": "Ниже показаны первые 5 строк. Начните импорт после проверки данных.", + "import_preview.preview.field_list": "Список полей:", + "import_preview.preview.summary": "{{rows}} строк и {{columns}} полей", + "import_preview.preview.table_title": "Предпросмотр данных (первые 5 строк):", + "import_preview.progress.error_count": "Ошибок {{count}}", + "import_preview.progress.processed_rows": "Обработано {{current}} / {{total}} строк", + "import_preview.progress.success_count": "Успешно {{count}}", + "import_preview.result.completed": "Импорт завершен", + "import_preview.result.error_logs": "Журнал ошибок:", + "import_preview.result.failed_rows": "Строк с ошибками: {{count}}", + "import_preview.result.success_rows": "Успешно импортировано строк: {{count}}", + "import_preview.status.importing": "Импорт данных...", + "import_preview.status.loading_preview": "Загрузка данных предпросмотра...", + "import_preview.title": "Предпросмотр импорта данных", + "jvm_ai_plan.actions.description": ": {{description}}", + "jvm_ai_plan.actions.field_separator": ", ", + "jvm_ai_plan.actions.label": " ({{label}})", + "jvm_ai_plan.actions.none": "Текущий ресурс не объявляет поддерживаемые действия. Если вы создаете план, указывайте action только когда его можно явно вывести из снимка, и оставляйте payload JSON-объектом.", + "jvm_ai_plan.actions.payload_fields": "; поля payload: {{fields}}", + "jvm_ai_plan.actions.required_suffix": "(required)", + "jvm_ai_plan.error.action_missing": "В плане AI отсутствует исполняемое action.", + "jvm_ai_plan.error.payload_json_object_required": "Текущий предварительный просмотр JVM требует, чтобы payload оставался JSON-объектом.", + "jvm_ai_plan.error.reason_missing": "В плане AI отсутствует причина изменения.", + "jvm_ai_plan.error.resource_locator_missing": "В плане AI отсутствует пригодная информация для поиска ресурса.", + "jvm_ai_plan.prompt.connection_name": "Имя подключения: {{connectionName}}", + "jvm_ai_plan.prompt.connection_policy": "Политика подключения: {{policy}}", + "jvm_ai_plan.prompt.connection_policy.read_only": "Подключение только для чтения. Можно создать только план и анализ рисков; нельзя предполагать, что выполнение уже произошло.", + "jvm_ai_plan.prompt.connection_policy.writable": "Подключение доступно для записи, но изменение все равно сначала должно быть просмотрено и подтверждено вручную.", + "jvm_ai_plan.prompt.environment": "Среда: {{environmentLabel}}", + "jvm_ai_plan.prompt.environment_unknown": "unknown", + "jvm_ai_plan.prompt.example_reason": "Исправить грязное значение кэша", + "jvm_ai_plan.prompt.example_title": "Пример JSON:", + "jvm_ai_plan.prompt.intro": "Проанализируйте следующий ресурс JVM и создайте структурированный план изменения для GoNavi \"Предварительный просмотр изменения\".", + "jvm_ai_plan.prompt.output_requirements_title": "Требования к выводу:", + "jvm_ai_plan.prompt.provider_mode": "Режим Provider: {{providerMode}}", + "jvm_ai_plan.prompt.requirement.action": "4. Предпочитайте выбирать action из \"Поддерживаемые действия для текущего ресурса\"; выводите его из снимка только если поддерживаемые действия не объявлены.", + "jvm_ai_plan.prompt.requirement.fields": "2. Поля JSON внутри блока кода должны быть строго такими: targetType, selector, action, payload, reason.", + "jvm_ai_plan.prompt.requirement.no_execute": "6. Не утверждайте, что изменение уже выполнено, и не выводите скрипты или команды.", + "jvm_ai_plan.prompt.requirement.payload": "5. payload должен быть обернут как JSON-объект. Не выводите скрипты, команды или сырые двоичные данные. Если нужно текстовое значение, оберните его как {\"format\":\"text\",\"value\":\"...\"}.", + "jvm_ai_plan.prompt.requirement.resource_path": "3. Предпочитайте selector.resourcePath с текущим путем ресурса {{resourcePath}}. Не придумывайте другой путь.", + "jvm_ai_plan.prompt.requirement.single_json_block": "1. Сначала можно добавить короткий анализ, но ответ должен содержать ровно один блок кода ```json.", + "jvm_ai_plan.prompt.resource_path": "Текущий путь ресурса: {{resourcePath}}", + "jvm_ai_plan.prompt.resource_path_missing": "(путь ресурса не указан)", + "jvm_ai_plan.prompt.snapshot_title": "Текущий снимок ресурса:", + "jvm_ai_plan.prompt.supported_actions_title": "Поддерживаемые действия для текущего ресурса:", + "jvm_ai_plan.prompt.target_host": "Целевой хост: {{host}}", + "jvm_ai_plan.snapshot.unavailable": "Текущий снимок ресурса еще не был успешно загружен.", + "jvm_audit.action.refresh": "Обновить", + "jvm_audit.card.records": "Записи аудита", + "jvm_audit.column.action": "Действие", + "jvm_audit.column.mode": "Режим", + "jvm_audit.column.reason": "Причина", + "jvm_audit.column.resource": "Ресурс", + "jvm_audit.column.result": "Результат", + "jvm_audit.column.source": "Источник", + "jvm_audit.column.time": "Время", + "jvm_audit.description.current_range": "Текущий диапазон: последние {{limit}} записей", + "jvm_audit.empty.load_failed": "Записи аудита сейчас недоступны", + "jvm_audit.empty.no_records": "Нет записей аудита", + "jvm_audit.error.backend_unavailable": "Метод бэкенда JVMListAuditRecords недоступен.", + "jvm_audit.error.connection_missing": "Подключение не существует или было удалено.", + "jvm_audit.error.load_failed": "Не удалось загрузить записи аудита JVM{{separator}}{{detail}}", + "jvm_audit.eyebrow": "Аудит JVM", + "jvm_audit.option.last_records": "Последние {{limit}} записей", + "jvm_audit.source.ai_plan": "С помощью AI", + "jvm_audit.source.manual": "Вручную", + "jvm_audit.title": "Аудит изменений JVM", + "jvm_change_preview_modal.action.close": "Закрыть", + "jvm_change_preview_modal.action.confirm_execute": "Подтвердить выполнение", + "jvm_change_preview_modal.blocking.alert_message": "Текущее изменение нельзя выполнить", + "jvm_change_preview_modal.blocking.label": "Причина блокировки", + "jvm_change_preview_modal.field.format": "Формат", + "jvm_change_preview_modal.field.resource_id": "ID ресурса", + "jvm_change_preview_modal.field.version": "Версия", + "jvm_change_preview_modal.permission.allowed": "Выполнение разрешено", + "jvm_change_preview_modal.permission.forbidden": "Выполнение запрещено", + "jvm_change_preview_modal.permission.requires_confirmation": "Требуется подтверждение", + "jvm_change_preview_modal.risk.high": "Высокий", + "jvm_change_preview_modal.risk.label": "Риск: {{level}}", + "jvm_change_preview_modal.risk.low": "Низкий", + "jvm_change_preview_modal.risk.medium": "Средний", + "jvm_change_preview_modal.risk.unknown": "Неизвестно", + "jvm_change_preview_modal.section.after": "После изменения", + "jvm_change_preview_modal.section.before": "До изменения", + "jvm_change_preview_modal.section.summary": "Сводка изменения", + "jvm_change_preview_modal.status.generated": "Предпросмотр создан", + "jvm_change_preview_modal.status.no_preview": "Нет результата предпросмотра", + "jvm_change_preview_modal.title": "Предпросмотр изменения JVM", "jvm_diagnostic.ai_plan.default_reason": "Диагностический AI-план: {{intent}}", + "jvm_diagnostic.ai_plan.error.transport_mismatch": "Диагностический transport в AI-плане: {{planTransport}}, он не совпадает с текущей консолью {{currentTransport}}. Перед применением создайте план заново.", + "jvm_diagnostic.ai_plan.message.filled": "Диагностический AI-план перенесен в консоль", + "jvm_diagnostic.capability_result.mutating_allowed": "Команды высокого риска", + "jvm_diagnostic.capability_result.observe_allowed": "Команды Observe", + "jvm_diagnostic.capability_result.observe_denied": "Observe запрещен", + "jvm_diagnostic.capability_result.session_allowed": "Сеансы доступны", + "jvm_diagnostic.capability_result.session_denied": "Сеансы недоступны", + "jvm_diagnostic.capability_result.streaming_supported": "Потоковый вывод", + "jvm_diagnostic.capability_result.streaming_unsupported": "Потоковая передача не поддерживается", + "jvm_diagnostic.capability_result.title": "Результаты проверки возможностей", + "jvm_diagnostic.capability_result.trace_allowed": "Команды Trace", + "jvm_diagnostic.capability.empty.description": "Проверка возможностей только считывает права канала и политику команд. Она не создает сеанс и не выполняет команды.", + "jvm_diagnostic.capability.empty.title": "Возможности еще не проверены", + "jvm_diagnostic.command_input.command_description": "Введите команду Arthas/диагностики, например thread -n 5, dashboard или jvm; шаблоны ниже заполняют ее одним щелчком.", + "jvm_diagnostic.command_input.command_label": "Диагностическая команда", + "jvm_diagnostic.command_input.description": "Поддерживает автодополнение. Нажмите Ctrl/Cmd + Enter для запуска.", + "jvm_diagnostic.command_input.reason_help": "Используется для записей аудита и контекста AI. Не отправляется в целевую JVM как команда Arthas.", + "jvm_diagnostic.command_input.reason_label": "Причина (необязательно)", + "jvm_diagnostic.command_input.reason_placeholder": "Например: исследовать высокую нагрузку CPU, подтвердить блокировку потоков или найти медленный метод", + "jvm_diagnostic.command_input.title": "Ввод команды", + "jvm_diagnostic.command_templates.title": "Шаблоны команд", + "jvm_diagnostic.completion.argument.classloader.hash.documentation": "Показывает детали указанного загрузчика классов.", + "jvm_diagnostic.completion.argument.classloader.hash.label": "Указанный Hash загрузчика классов", + "jvm_diagnostic.completion.argument.classloader.tree.documentation": "Выводит дерево загрузчиков классов.", + "jvm_diagnostic.completion.argument.classloader.tree.label": "Древовидный вид (-t)", + "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "Показывает статистику URL загрузчиков классов.", + "jvm_diagnostic.completion.argument.classloader.url_stat.label": "Вся статистика URL (--url-stat)", + "jvm_diagnostic.completion.argument.command_template.label": "шаблон {{command}}", + "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "Показывает текущую сводку времени выполнения JVM.", + "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", + "jvm_diagnostic.completion.argument.detail_mode_d.label": "Подробный режим (-d)", + "jvm_diagnostic.completion.argument.jad.template.documentation": "Декомпилирует указанный класс.", + "jvm_diagnostic.completion.argument.jad.template.label": "Шаблон декомпиляции", + "jvm_diagnostic.completion.argument.jvm.direct.documentation": "Показывает память JVM, потоки, загрузку классов, GC и аргументы запуска.", + "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", + "jvm_diagnostic.completion.argument.monitor.template.documentation": "Собирает статистику вызовов методов с интервалом.", + "jvm_diagnostic.completion.argument.ognl.template.documentation": "Выполняет выражение OGNL; команды высокого риска по умолчанию ограничены политикой.", + "jvm_diagnostic.completion.argument.redefine.template.documentation": "Переопределяет путь к файлу байткода класса.", + "jvm_diagnostic.completion.argument.retransform.template.documentation": "Повторно преобразует указанный класс.", + "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "Ищет по шаблону имени класса.", + "jvm_diagnostic.completion.argument.sc.class_pattern.label": "Шаблон класса", + "jvm_diagnostic.completion.argument.sc.detail.documentation": "Выводит подробную информацию о классе.", + "jvm_diagnostic.completion.argument.sm.detail.documentation": "Выводит подробные сигнатуры методов.", + "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "Показывает сигнатуры методов класса.", + "jvm_diagnostic.completion.argument.sm.method_signature.label": "Шаблон сигнатуры метода", + "jvm_diagnostic.completion.argument.stack.template.documentation": "Выводит стеки вызовов методов.", + "jvm_diagnostic.completion.argument.stop.direct.documentation": "Останавливает текущую фоновую задачу.", + "jvm_diagnostic.completion.argument.stop.direct.label": "stop", + "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "Читает указанную переменную окружения.", + "jvm_diagnostic.completion.argument.sysenv.variable.label": "Показать переменную окружения", + "jvm_diagnostic.completion.argument.sysprop.property.documentation": "Читает указанное системное свойство.", + "jvm_diagnostic.completion.argument.sysprop.property.label": "Показать свойство", + "jvm_diagnostic.completion.argument.thread.blocking.documentation": "Находит потоки, которые сейчас блокируют другие потоки.", + "jvm_diagnostic.completion.argument.thread.blocking.label": "Заблокированные потоки (-b)", + "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "Показывает N потоков с наибольшей нагрузкой CPU.", + "jvm_diagnostic.completion.argument.thread.busy_top.label": "Загруженные потоки TOP N (-n)", + "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "Показывает подробную информацию о стеке указанного потока.", + "jvm_diagnostic.completion.argument.thread.thread_id.label": "Указанный ID потока", + "jvm_diagnostic.completion.argument.trace.condition.documentation": "Добавляет выражение условия trace.", + "jvm_diagnostic.completion.argument.trace.condition.label": "Фильтр условия '#cost > 100'", + "jvm_diagnostic.completion.argument.trace.template.documentation": "Трассирует цепочки медленных вызовов методов.", + "jvm_diagnostic.completion.argument.tt.list.documentation": "Показывает текущий список записей.", + "jvm_diagnostic.completion.argument.tt.list.label": "Показать список записей (-l)", + "jvm_diagnostic.completion.argument.tt.record.documentation": "Записывает вызовы указанного метода.", + "jvm_diagnostic.completion.argument.tt.record.label": "шаблон записи tt", + "jvm_diagnostic.completion.argument.tt.replay.documentation": "Показывает детали указанной записи.", + "jvm_diagnostic.completion.argument.tt.replay.label": "Воспроизвести запись (-i)", + "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "Получает экземпляры указанного класса; команды высокого риска по умолчанию ограничены политикой.", + "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", + "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "Задает глубину раскрытия объекта.", + "jvm_diagnostic.completion.argument.watch.expand_depth.label": "Глубина раскрытия -x 2", + "jvm_diagnostic.completion.argument.watch.template.documentation": "Наблюдает параметры, возвращаемые значения или исключения.", + "jvm_diagnostic.completion.category.control": "команда управления", + "jvm_diagnostic.completion.category.mutating": "команда высокого риска", + "jvm_diagnostic.completion.category.observe": "команда наблюдения", + "jvm_diagnostic.completion.category.trace": "команда трассировки", + "jvm_diagnostic.completion.command.classloader.documentation": "Показывает информацию о загрузчиках классов.", + "jvm_diagnostic.completion.command.dashboard.documentation": "Показывает сводку времени выполнения JVM.", + "jvm_diagnostic.completion.command.jad.documentation": "Декомпилирует указанный класс.", + "jvm_diagnostic.completion.command.jvm.documentation": "Показывает память JVM, потоки, загрузку классов, GC и аргументы запуска.", + "jvm_diagnostic.completion.command.monitor.documentation": "Периодически собирает статистику вызовов методов.", + "jvm_diagnostic.completion.command.ognl.documentation": "Выполняет выражение OGNL; по умолчанию требуется дополнительная авторизация.", + "jvm_diagnostic.completion.command.redefine.documentation": "Переопределяет байткод класса.", + "jvm_diagnostic.completion.command.retransform.documentation": "Повторно запускает преобразование класса.", + "jvm_diagnostic.completion.command.sc.documentation": "Ищет подходящую информацию о классах.", + "jvm_diagnostic.completion.command.sm.documentation": "Показывает сигнатуры методов класса.", + "jvm_diagnostic.completion.command.stack.documentation": "Выводит стеки вызовов методов.", + "jvm_diagnostic.completion.command.stop.documentation": "Останавливает текущую фоновую задачу.", + "jvm_diagnostic.completion.command.sysenv.documentation": "Показывает переменные окружения.", + "jvm_diagnostic.completion.command.sysprop.documentation": "Показывает системные свойства.", + "jvm_diagnostic.completion.command.thread.documentation": "Показывает горячие потоки, стеки потоков и заблокированные потоки.", + "jvm_diagnostic.completion.command.trace.documentation": "Трассирует временные пути вызовов методов.", + "jvm_diagnostic.completion.command.tt.documentation": "Временной туннель методов для записи и повторного воспроизведения вызовов.", + "jvm_diagnostic.completion.command.vmtool.documentation": "Напрямую работает с объектами JVM или выполняет действия VMTool.", + "jvm_diagnostic.completion.command.watch.documentation": "Наблюдает параметры, возвращаемые значения или исключения.", + "jvm_diagnostic.completion.detail.class_search_template": "шаблон поиска класса", + "jvm_diagnostic.completion.detail.classloader_template": "шаблон загрузчика классов", + "jvm_diagnostic.completion.detail.decompile_template": "шаблон декомпиляции", + "jvm_diagnostic.completion.detail.environment_variable_template": "шаблон переменной окружения", + "jvm_diagnostic.completion.detail.execute_directly": "выполнить напрямую", + "jvm_diagnostic.completion.detail.high_risk_template": "шаблон высокого риска", + "jvm_diagnostic.completion.detail.method_search_template": "шаблон поиска метода", + "jvm_diagnostic.completion.detail.monitor_template": "шаблон monitor", + "jvm_diagnostic.completion.detail.stack_template": "шаблон stack", + "jvm_diagnostic.completion.detail.system_property_template": "шаблон системного свойства", + "jvm_diagnostic.completion.detail.thread_option": "параметр потока", + "jvm_diagnostic.completion.detail.time_tunnel_template": "шаблон временного туннеля", + "jvm_diagnostic.completion.detail.trace_option": "параметр trace", + "jvm_diagnostic.completion.detail.trace_template": "шаблон trace", + "jvm_diagnostic.completion.detail.watch_option": "параметр watch", + "jvm_diagnostic.completion.detail.watch_template": "шаблон watch", + "jvm_diagnostic.completion.preset.category.mutating": "команда высокого риска", + "jvm_diagnostic.completion.preset.category.observe": "команда наблюдения", + "jvm_diagnostic.completion.preset.category.trace": "команда трассировки", + "jvm_diagnostic.completion.preset.dashboard.documentation": "Показывает сводку времени выполнения JVM.", + "jvm_diagnostic.completion.preset.ognl-sample.documentation": "Команда выражения высокого риска, по умолчанию показана только как пример.", + "jvm_diagnostic.completion.preset.thread-top.documentation": "Показывает самые загруженные потоки, чтобы быстро найти заблокированные потоки или потоки с высокой нагрузкой CPU.", + "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "Трассирует пути медленных вызовов методов.", + "jvm_diagnostic.completion.preset.watch-return.documentation": "Наблюдает параметры и возвращаемые значения.", + "jvm_diagnostic.connection_missing.message": "Подключение не существует или было удалено", + "jvm_diagnostic.error.cancel_failed": "Не удалось отменить диагностическую команду", + "jvm_diagnostic.error.cancel_unavailable": "Метод бэкенда JVMCancelDiagnosticCommand недоступен", + "jvm_diagnostic.error.execute_command_required": "Диагностическая команда обязательна", + "jvm_diagnostic.error.execute_failed": "Не удалось выполнить диагностическую команду", + "jvm_diagnostic.error.execute_session_required": "Перед выполнением команды создайте диагностический сеанс", + "jvm_diagnostic.error.execute_unavailable": "Метод бэкенда JVMExecuteDiagnosticCommand недоступен", + "jvm_diagnostic.error.history_load_failed": "Не удалось загрузить историю диагностики", + "jvm_diagnostic.error.probe_failed": "Не удалось проверить диагностические возможности", + "jvm_diagnostic.error.probe_unavailable": "Метод backend JVMProbeDiagnosticCapabilities недоступен", + "jvm_diagnostic.error.start_failed": "Не удалось создать диагностический сеанс", + "jvm_diagnostic.error.start_unavailable": "Метод бэкенда JVMStartDiagnosticSession недоступен", + "jvm_diagnostic.history.current_session": "Текущий сеанс", + "jvm_diagnostic.history.description": "Последние команды и состояние выполнения", + "jvm_diagnostic.history.no_records": "История диагностики отсутствует", + "jvm_diagnostic.history.no_session": "Диагностический сеанс еще не создан", + "jvm_diagnostic.history.reason_missing": "Причина диагностики не указана", + "jvm_diagnostic.history.recent_records": "Последние записи", + "jvm_diagnostic.history.title": "История аудита", + "jvm_diagnostic.message.cancel_sent": "Запрос на отмену отправлен", + "jvm_diagnostic.no_session.action.probe": "Сначала проверить возможности", + "jvm_diagnostic.no_session.action.start": "Создать диагностический сеанс", + "jvm_diagnostic.no_session.alert.description": "Это не дает принять несвязанный с сеансом ввод за готовую к выполнению команду и привязывает аудит, поток вывода и отмену к одному сеансу.", + "jvm_diagnostic.no_session.alert.title": "Ввод команды появится после создания сеанса", + "jvm_diagnostic.no_session.description": "Сначала создайте сеанс, затем появятся редактор команд и шаблоны", + "jvm_diagnostic.no_session.title": "Начать диагностический сеанс", + "jvm_diagnostic.output.description": "Добавляется из потока событий backend", + "jvm_diagnostic.output.empty.description": "Оперативного вывода пока нет. После выполнения команды вывод бэкенда будет появляться здесь в хронологическом порядке.", + "jvm_diagnostic.output.frontend_completed_fallback": "Вызов диагностической команды вернулся, но терминальное событие backend не было получено. Frontend завершил состояние ожидания как fallback.", + "jvm_diagnostic.output.local_pending": "Диагностическая команда отправлена; ожидание вывода backend: {{command}}", + "jvm_diagnostic.output.title": "Вывод в реальном времени", + "jvm_diagnostic.presentation.category.mutating": "Команды высокого риска", + "jvm_diagnostic.presentation.category.observe": "Команды наблюдения", + "jvm_diagnostic.presentation.category.trace": "Команды трассировки", + "jvm_diagnostic.presentation.chunk.empty_event": "Пустое событие", "jvm_diagnostic.presentation.command_type.mutating": "Высокий риск", "jvm_diagnostic.presentation.command_type.observe": "Наблюдение", "jvm_diagnostic.presentation.command_type.trace": "Трассировка", + "jvm_diagnostic.presentation.event.chunk": "Фрагмент вывода", + "jvm_diagnostic.presentation.event.diagnostic": "Диагностический вывод", + "jvm_diagnostic.presentation.event.done": "Выполнение завершено", "jvm_diagnostic.presentation.fallback.unknown": "Неизвестно", "jvm_diagnostic.presentation.phase.canceled": "Отменено", + "jvm_diagnostic.presentation.phase.canceling": "Отмена", + "jvm_diagnostic.presentation.phase.completed": "Завершено", + "jvm_diagnostic.presentation.phase.diagnostic": "Диагностическое событие", + "jvm_diagnostic.presentation.phase.failed": "Не удалось", + "jvm_diagnostic.presentation.phase.running": "Выполняется", "jvm_diagnostic.presentation.risk.high": "Высокий риск", "jvm_diagnostic.presentation.risk.low": "Низкий риск", "jvm_diagnostic.presentation.risk.medium": "Средний риск", @@ -7117,6 +5291,734 @@ "jvm_diagnostic.presentation.source.manual": "Ручной ввод", "jvm_diagnostic.presentation.transport.agent_bridge": "Agent Bridge", "jvm_diagnostic.presentation.transport.arthas_tunnel": "Arthas Tunnel", + "jvm_diagnostic.session_capability.action.clear_output": "Очистить вывод", + "jvm_diagnostic.session_capability.action.refresh_history": "Обновить историю", + "jvm_diagnostic.session_capability.description": "Текущий канал, права и быстрое обслуживание", + "jvm_diagnostic.session_capability.note": "Проверка возможностей не выполняет команды; перед выполнением команды нужно создать сеанс. История аудита показывает последние записи команд и может содержать записи прошлых сеансов даже без текущего сеанса.", + "jvm_diagnostic.session_capability.session_id_hint": "ID сеанса появится здесь после создания сеанса.", + "jvm_diagnostic.session_capability.status.command_running": "Команда выполняется", + "jvm_diagnostic.session_capability.status.idle": "Ожидание", + "jvm_diagnostic.session_capability.status.no_session": "Нет сеанса", + "jvm_diagnostic.session_capability.status.session_established": "Сеанс установлен", + "jvm_diagnostic.session_capability.title": "Сеанс и возможности", + "jvm_diagnostic.session.default_reason": "Сеанс запущен из консоли", + "jvm_diagnostic.session.default_title": "Консоль диагностики JVM", + "jvm_diagnostic.workbench.action.cancel_command": "Отменить команду", + "jvm_diagnostic.workbench.action.execute_command": "Выполнить команду", + "jvm_diagnostic.workbench.action.probe": "Проверить возможности", + "jvm_diagnostic.workbench.action.restart_session": "Пересоздать сеанс", + "jvm_diagnostic.workbench.action.start_session": "Создать сеанс", + "jvm_diagnostic.workbench.eyebrow": "Диагностика JVM", + "jvm_diagnostic.workbench.status.command_running": "Команда выполняется", + "jvm_diagnostic.workbench.status.no_session": "Нет сеанса", + "jvm_diagnostic.workbench.status.session_established": "Сеанс установлен", + "jvm_diagnostic.workbench.title": "Рабочая область диагностики JVM", + "jvm_diagnostic.workflow.command.description": "После создания сеанса отображаются редактор команды, поле причины и шаблоны.", + "jvm_diagnostic.workflow.command.title": "Выполнить команду", + "jvm_diagnostic.workflow.probe.description": "Считывает только диагностический канал, потоковый вывод и права на команды, не создавая сеанс.", + "jvm_diagnostic.workflow.probe.title": "Проверить возможности", + "jvm_diagnostic.workflow.session.description": "Создает диагностический контекст, чтобы последующие команды были привязаны к этому сеансу.", + "jvm_diagnostic.workflow.session.title": "Создать сеанс", + "jvm_monitoring_charts.empty.classes.metric_unavailable": "Текущий источник мониторинга не предоставляет метрики загрузки классов", + "jvm_monitoring_charts.empty.classes.no_samples": "Пока нет выборок загрузки классов", + "jvm_monitoring_charts.empty.gc.metric_unavailable": "Текущий источник мониторинга не предоставляет метрики сборки мусора", + "jvm_monitoring_charts.empty.gc.no_samples": "Пока нет выборок сборки мусора", + "jvm_monitoring_charts.empty.heap.metric_unavailable": "Текущий источник мониторинга не предоставляет метрики памяти кучи", + "jvm_monitoring_charts.empty.heap.no_samples": "Пока нет выборок памяти кучи", + "jvm_monitoring_charts.empty.threads.metric_unavailable": "Текущий источник мониторинга не предоставляет метрики потоков", + "jvm_monitoring_charts.empty.threads.no_samples": "Пока нет выборок потоков", + "jvm_monitoring_charts.legend.daemon_thread_count": "Демон-потоки", + "jvm_monitoring_charts.legend.gc_count": "Количество GC", + "jvm_monitoring_charts.legend.gc_time_ms": "Время GC (мс)", + "jvm_monitoring_charts.legend.heap_committed": "Зарезервировано кучи", + "jvm_monitoring_charts.legend.heap_used": "Использовано кучи", + "jvm_monitoring_charts.legend.loaded_classes": "Загруженные классы", + "jvm_monitoring_charts.legend.peak_thread_count": "Пиковое количество потоков", + "jvm_monitoring_charts.legend.thread_count": "Количество потоков", + "jvm_monitoring_charts.legend.unloaded_classes": "Выгруженные классы", + "jvm_monitoring_charts.title.classes": "Загрузка классов", + "jvm_monitoring_charts.title.gc": "Сборка мусора", + "jvm_monitoring_charts.title.heap": "Память кучи", + "jvm_monitoring_charts.title.threads": "Потоки", + "jvm_monitoring_dashboard.action.refresh": "Обновить", + "jvm_monitoring_dashboard.action.start": "Запустить мониторинг", + "jvm_monitoring_dashboard.action.stop": "Остановить мониторинг", + "jvm_monitoring_dashboard.connection_missing.message": "Подключение не существует или было удалено", + "jvm_monitoring_dashboard.degraded.message": "Возможности мониторинга снижены", + "jvm_monitoring_dashboard.empty.description": "После нажатия \"Запустить мониторинг\" GoNavi сохраняет результаты сбора данных для этого подключения в текущем сеансе; переключение вкладок не останавливает сбор данных.", + "jvm_monitoring_dashboard.empty.title": "Непрерывный мониторинг еще не запущен", + "jvm_monitoring_dashboard.error.history_load_failed": "Не удалось загрузить историю мониторинга", + "jvm_monitoring_dashboard.error.history_unavailable": "Метод backend JVMGetMonitoringHistory недоступен", + "jvm_monitoring_dashboard.error.start_failed": "Не удалось запустить мониторинг", + "jvm_monitoring_dashboard.error.start_unavailable": "Метод backend JVMStartMonitoring недоступен", + "jvm_monitoring_dashboard.error.stop_failed": "Не удалось остановить мониторинг", + "jvm_monitoring_dashboard.error.stop_unavailable": "Метод backend JVMStopMonitoring недоступен", + "jvm_monitoring_dashboard.status.sampling": "Идет сбор", + "jvm_monitoring_dashboard.status.stopped": "Не запущено", + "jvm_monitoring_dashboard.title": "Непрерывный мониторинг JVM", + "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "Текущий источник мониторинга не предоставляет событийные данные сборки мусора.", + "jvm_monitoring_detail_panel.empty.recent_gc_events": "В последнем окне нет событий сборки мусора.", + "jvm_monitoring_detail_panel.empty.thread_states": "Пока нет выборок состояний потоков.", + "jvm_monitoring_detail_panel.field.process_cpu": "CPU процесса", + "jvm_monitoring_detail_panel.field.process_physical_memory": "Физическая память процесса", + "jvm_monitoring_detail_panel.field.process_virtual_memory": "Виртуальная память процесса", + "jvm_monitoring_detail_panel.field.system_cpu": "CPU системы", + "jvm_monitoring_detail_panel.gc.after": "После сборки", + "jvm_monitoring_detail_panel.gc.before": "До сборки", + "jvm_monitoring_detail_panel.memory_missing.default": "Текущий источник мониторинга не вернул метрику резидентной физической памяти процесса. Проверьте, что HTTP endpoint или расширенный agent собирает и передает физическую память процесса.", + "jvm_monitoring_detail_panel.memory_missing.jmx": "Подключение JMX не предоставляет атрибут резидентной физической памяти процесса, поэтому сейчас можно читать только метрику виртуальной памяти процесса. Чтобы собирать физическую память процесса, переключитесь на HTTP endpoint или расширенный agent.", + "jvm_monitoring_detail_panel.memory_missing.title": "Почему отсутствует физическая память процесса", + "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "Возможности и деградация", + "jvm_monitoring_detail_panel.title.recent_gc_details": "Последние сведения о сборке мусора", + "jvm_monitoring_detail_panel.title.thread_state_distribution": "Распределение состояний потоков", + "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "Метрики диагностики", + "jvm_monitoring_presentation.availability.missing_metrics": "Отсутствующие метрики: {{metrics}}", + "jvm_monitoring_presentation.availability.no_obvious_degradation": "В текущем сеансе мониторинга явная деградация не обнаружена.", + "jvm_monitoring_presentation.availability.provider_warnings": "Предупреждение источника мониторинга: {{warnings}}", + "jvm_monitoring_presentation.metric.class_loading": "Загрузка классов", + "jvm_monitoring_presentation.metric.cpu_process": "CPU процесса", + "jvm_monitoring_presentation.metric.cpu_system": "CPU системы", + "jvm_monitoring_presentation.metric.gc_count": "Количество сборок мусора", + "jvm_monitoring_presentation.metric.gc_events": "Последние события сборки мусора", + "jvm_monitoring_presentation.metric.gc_time": "Время сборки мусора", + "jvm_monitoring_presentation.metric.heap_non_heap": "Память non-heap", + "jvm_monitoring_presentation.metric.heap_used": "Память heap", + "jvm_monitoring_presentation.metric.memory_rss": "Физическая память процесса", + "jvm_monitoring_presentation.metric.memory_virtual": "Виртуальная память процесса", + "jvm_monitoring_presentation.metric.thread_count": "Количество потоков", + "jvm_monitoring_presentation.metric.thread_states": "Состояния потоков", + "jvm_monitoring_presentation.thread_state.blocked": "Заблокирован", + "jvm_monitoring_presentation.thread_state.new": "Новый", + "jvm_monitoring_presentation.thread_state.runnable": "Готов к выполнению", + "jvm_monitoring_presentation.thread_state.terminated": "Завершен", + "jvm_monitoring_presentation.thread_state.timed_waiting": "Ожидает с тайм-аутом", + "jvm_monitoring_presentation.thread_state.waiting": "Ожидает", + "jvm_monitoring_status_cards.meta.gc_total_time": "Всего {{value}}", + "jvm_monitoring_status_cards.meta.heap_committed": "Зарезервировано {{value}}", + "jvm_monitoring_status_cards.meta.thread_peak": "Пик {{value}}", + "jvm_monitoring_status_cards.meta.waiting_samples": "Ожидание выборок", + "jvm_monitoring_status_cards.status.sampling": "Идет сбор", + "jvm_monitoring_status_cards.status.stopped": "Остановлено", + "jvm_monitoring_status_cards.thread_state.runnable_count": "Готово к выполнению {{count}}", + "jvm_monitoring_status_cards.title.classes": "Загрузка классов", + "jvm_monitoring_status_cards.title.gc_pressure": "Нагрузка GC", + "jvm_monitoring_status_cards.title.heap": "Память кучи", + "jvm_monitoring_status_cards.title.threads": "Потоки", + "jvm_overview.badge.read_only": "Подключение только для чтения", + "jvm_overview.badge.writable": "Подключение с записью", + "jvm_overview.capability.can_browse": "Можно просматривать", + "jvm_overview.capability.cannot_browse": "Нельзя просматривать", + "jvm_overview.capability.preview_supported": "Предпросмотр поддерживается", + "jvm_overview.capability.preview_unsupported": "Предпросмотр не поддерживается", + "jvm_overview.capability.read_only": "Только чтение", + "jvm_overview.capability.writable": "Запись разрешена", + "jvm_overview.card.connection_summary": "Сводка подключения", + "jvm_overview.card.mode_capability": "Возможности режимов", + "jvm_overview.connection_missing.message": "Подключение не существует или было удалено", + "jvm_overview.empty.capabilities": "Нет данных о возможностях режима", + "jvm_overview.error.capability_load_failed": "Не удалось прочитать возможности режима JVM", + "jvm_overview.eyebrow": "Среда выполнения JVM", + "jvm_overview.field.agent": "Agent", + "jvm_overview.field.allowed_modes": "Разрешенные режимы", + "jvm_overview.field.current_mode": "Текущий режим", + "jvm_overview.field.endpoint": "Endpoint", + "jvm_overview.field.jmx_address": "JMX-адрес", + "jvm_overview.field.resource_browse": "Просмотр ресурсов", + "jvm_overview.title": "Обзор среды выполнения JVM", + "jvm_overview.value.enabled": "Включено", + "jvm_overview.value.not_configured": "Не настроено", + "jvm_overview.value.resource_browse_lazy_load": "Ленивая загрузка после раскрытия узла режима на боковой панели", + "jvm_resource.action.ask_ai_plan": "Попросить AI создать план", + "jvm_resource.action.audit": "Журнал аудита", + "jvm_resource.action.generate_ai_plan": "Создать план AI", + "jvm_resource.action.preview_change": "Предпросмотр изменения", + "jvm_resource.badge.read_only": "Подключение только для чтения", + "jvm_resource.badge.writable": "Подключение с записью", + "jvm_resource.card.change_draft": "Черновик изменения", + "jvm_resource.card.snapshot": "Снимок ресурса", + "jvm_resource.draft_source.ai_plan": "Черновик с помощью AI", + "jvm_resource.draft_source.manual": "Ручное редактирование", + "jvm_resource.empty.no_resource_data": "Нет данных ресурса", + "jvm_resource.error.ai_plan_context_mismatch": "Текущая вкладка JVM не совпадает с исходным контекстом плана AI, поэтому автоматическое применение отклонено.", + "jvm_resource.error.ai_plan_missing_context": "В плане AI отсутствует исходный контекст. Сначала создайте его заново на странице целевого ресурса JVM.", + "jvm_resource.error.ai_plan_to_draft_failed": "Сейчас не удалось преобразовать план AI в черновик предварительного просмотра JVM.", + "jvm_resource.error.apply_failed": "Не удалось выполнить изменение JVM.", + "jvm_resource.error.apply_unavailable": "Выполнение изменений JVM недоступно в этой сборке.", + "jvm_resource.error.confirmation_missing": "Отсутствует токен подтверждения. Перед выполнением снова выполните предварительный просмотр.", + "jvm_resource.error.connection_missing": "Подключение не существует или было удалено.", + "jvm_resource.error.context_changed": "Контекст ресурса изменился. Перед выполнением снова выполните предварительный просмотр.", + "jvm_resource.error.draft_invalid": "Черновик изменения недействителен.", + "jvm_resource.error.get_value_unavailable": "Чтение значения JVM недоступно в этой сборке.", + "jvm_resource.error.payload_object_required": "Payload должен быть JSON-объектом.", + "jvm_resource.error.preview_failed": "Не удалось предварительно просмотреть изменение JVM.", + "jvm_resource.error.preview_required": "Перед подтверждением выполнения сначала просмотрите изменение.", + "jvm_resource.error.preview_result_invalid": "Результат предварительного просмотра имеет неверный формат.", + "jvm_resource.error.preview_unavailable": "Предварительный просмотр изменений JVM недоступен в этой сборке.", + "jvm_resource.error.read_failed": "Не удалось прочитать ресурс JVM.", + "jvm_resource.error.reason_required": "Укажите причину изменения.", + "jvm_resource.error.resource_id_empty": "ID ресурса пуст, поэтому невозможно создать черновик изменения.", + "jvm_resource.error.resource_path_empty": "Путь к ресурсу пуст.", + "jvm_resource.field.action": "Действие", + "jvm_resource.field.available_actions": "Доступные действия", + "jvm_resource.field.draft_source": "Источник черновика", + "jvm_resource.field.format": "Формат", + "jvm_resource.field.payload": "Payload (JSON)", + "jvm_resource.field.payload_fields": "Поля Payload: ", + "jvm_resource.field.reason": "Причина изменения", + "jvm_resource.field.resource_id": "ID ресурса", + "jvm_resource.field.resource_path": "Путь к ресурсу", + "jvm_resource.field.resource_type": "Тип ресурса", + "jvm_resource.field.resource_version": "Версия ресурса", + "jvm_resource.field.target_resource": "Целевой ресурс", + "jvm_resource.field.version": "Версия", + "jvm_resource.list_separator": ", ", + "jvm_resource.marker.required_suffix": " (обязательно)", + "jvm_resource.message.ai_plan_draft_filled": "Черновик заполнен из плана AI для {{resourceId}}. Перед подтверждением записи сначала просмотрите изменение.", + "jvm_resource.message.apply_success": "Изменение JVM выполнено.", + "jvm_resource.message.current_action": "Текущее действие: ", + "jvm_resource.message.payload_hint": "Предварительный просмотр использует текущий черновик. Подтверждение выполнения использует последний успешный запрос предварительного просмотра. После изменения черновика выполните просмотр снова.", + "jvm_resource.message.payload_template_applied": "Для текущего действия заполнен рекомендуемый шаблон.", + "jvm_resource.placeholder.action_default": "Например, put / clear / evict", + "jvm_resource.placeholder.action_jmx": "Например, set или invoke", + "jvm_resource.placeholder.reason": "Введите причину этого изменения ресурса JVM", + "jvm_resource.presentation.action.clear.description": "Очищает данные или состояние в текущем ресурсе JVM.", + "jvm_resource.presentation.action.clear.label": "Очистить ресурс", + "jvm_resource.presentation.action.delete.description": "Удаляет текущий ресурс или отменяет его регистрацию.", + "jvm_resource.presentation.action.delete.label": "Удалить ресурс", + "jvm_resource.presentation.action.evict.description": "Вытесняет целевой элемент кэша из текущей среды выполнения JVM.", + "jvm_resource.presentation.action.evict.label": "Вытеснить кэш", + "jvm_resource.presentation.action.invoke.description": "Вызывает управляющую операцию, предоставляемую текущим ресурсом.", + "jvm_resource.presentation.action.invoke.label": "Вызвать операцию", + "jvm_resource.presentation.action.put.description": "Записывает содержимое payload в текущий ресурс JVM.", + "jvm_resource.presentation.action.put.label": "Записать ресурс", + "jvm_resource.presentation.action.refresh.description": "Обновляет состояние выполнения текущего ресурса.", + "jvm_resource.presentation.action.refresh.label": "Обновить ресурс", + "jvm_resource.presentation.action.reload.description": "Перезагружает текущий ресурс или его конфигурацию.", + "jvm_resource.presentation.action.reload.label": "Перезагрузить", + "jvm_resource.presentation.action.remove.description": "Удаляет указанную запись из текущего ресурса.", + "jvm_resource.presentation.action.remove.label": "Удалить запись", + "jvm_resource.presentation.action.reset.description": "Возвращает текущий ресурс в начальное состояние или состояние по умолчанию.", + "jvm_resource.presentation.action.reset.label": "Сбросить состояние", + "jvm_resource.presentation.action.set.description": "Обновляет доступное для записи значение свойства текущего ресурса.", + "jvm_resource.presentation.action.set.label": "Установить свойство", + "jvm_resource.presentation.audit_result.applied": "Выполнено", + "jvm_resource.presentation.audit_result.blocked": "Заблокировано", + "jvm_resource.presentation.audit_result.failed": "Ошибка", + "jvm_resource.presentation.audit_result.success": "Успешно", + "jvm_resource.presentation.audit_result.unknown": "Неизвестно", + "jvm_resource.presentation.audit_result.warning": "Предупреждение", + "jvm_resource.presentation.risk.high": "Высокий", + "jvm_resource.presentation.risk.low": "Низкий", + "jvm_resource.presentation.risk.medium": "Средний", + "jvm_resource.presentation.risk.unknown": "Неизвестно", + "jvm_resource.presentation.unnamed_action": "Действие без имени", + "jvm_resource.section.metadata": "Метаданные", + "jvm_resource.section.resource_value": "Значение ресурса", + "jvm_resource.section.supported_actions": "Поддерживаемые действия ресурса", + "jvm_resource.title": "Рабочая область ресурсов JVM", + "jvm.backend.capability.reason.read_only": "Текущее подключение доступно только для чтения", + "jvm.backend.connection_error.agent.base_url_invalid.help": "Укажите полный URL http:// или https://, например http://127.0.0.1:19090/gonavi/agent/jvm.", + "jvm.backend.connection_error.agent.base_url_invalid.summary": "Подключение Agent не удалось: Agent Base URL недействителен.", + "jvm.backend.connection_error.agent.base_url_required": "Подключение Agent не удалось: Agent Base URL отсутствует.", + "jvm.backend.connection_error.agent.connection_refused.help": "Убедитесь, что Java service запущен с GoNavi Agent через `-javaagent`, и проверьте Base URL, port mapping и правила firewall.", + "jvm.backend.connection_error.agent.connection_refused.summary": "Подключение Agent не удалось: целевой management port Agent не слушается или адрес недоступен.", + "jvm.backend.connection_error.agent.forbidden.help": "Убедитесь, что источник клиента, настройки authentication и access policy Agent разрешают GoNavi доступ.", + "jvm.backend.connection_error.agent.forbidden.summary": "Подключение Agent не удалось: Agent отклонил этот запрос.", + "jvm.backend.connection_error.agent.scheme_unsupported.help": "Измените Agent Base URL на адрес, начинающийся с http:// или https://.", + "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Подключение Agent не удалось: поддерживаются только HTTP или HTTPS.", + "jvm.backend.connection_error.agent.timeout.help": "Убедитесь, что целевой адрес доступен, Agent запущен, и при необходимости увеличьте connection timeout.", + "jvm.backend.connection_error.agent.timeout.summary": "Подключение Agent не удалось: истекло время ожидания доступа к management port Agent.", + "jvm.backend.connection_error.agent.unauthorized.help": "Проверьте, совпадает ли Agent API Key в подключении с параметрами запуска целевого сервиса.", + "jvm.backend.connection_error.agent.unauthorized.summary": "Подключение Agent не удалось: Agent ответил, но API Key отсутствует или недействителен.", + "jvm.backend.connection_error.endpoint.base_url_invalid.help": "Укажите полный URL http:// или https://, который указывает на корневой путь management API, реализующего GoNavi JVM HTTP contract, например http://127.0.0.1:19090/manage/jvm.", + "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Подключение Endpoint не удалось: Endpoint Base URL недействителен.", + "jvm.backend.connection_error.endpoint.base_url_required": "Подключение Endpoint не удалось: Endpoint Base URL отсутствует.", + "jvm.backend.connection_error.endpoint.connection_refused.help": "Убедитесь, что Base URL указывает на management API, реализующий GoNavi JVM HTTP contract, и проверьте прослушивание сервиса, port mapping и правила firewall.", + "jvm.backend.connection_error.endpoint.connection_refused.summary": "Подключение Endpoint не удалось: целевой management API не слушает порт или адрес недоступен.", + "jvm.backend.connection_error.endpoint.forbidden.help": "Убедитесь, что источник клиента, настройки authentication и access policy разрешают GoNavi доступ к этому management API.", + "jvm.backend.connection_error.endpoint.forbidden.summary": "Подключение Endpoint не удалось: целевой management API отклонил этот запрос.", + "jvm.backend.connection_error.endpoint.not_found.help": "Убедитесь, что Base URL указывает на корневой путь management API JVM, а не на бизнес-endpoint, health check или домашнюю страницу gateway.", + "jvm.backend.connection_error.endpoint.not_found.summary": "Подключение Endpoint не удалось: целевой адрес ответил, но management API GoNavi JVM не найден.", + "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "Измените Endpoint Base URL на адрес, начинающийся с http:// или https://.", + "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Подключение Endpoint не удалось: поддерживаются только HTTP или HTTPS.", + "jvm.backend.connection_error.endpoint.timeout.help": "Убедитесь, что Base URL доступен, целевой сервис запущен, и при необходимости увеличьте connection timeout.", + "jvm.backend.connection_error.endpoint.timeout.summary": "Подключение Endpoint не удалось: истекло время ожидания доступа к целевому management API.", + "jvm.backend.connection_error.endpoint.unauthorized.help": "Проверьте, совпадает ли Endpoint API Key в подключении с конфигурацией целевого сервиса.", + "jvm.backend.connection_error.endpoint.unauthorized.summary": "Подключение Endpoint не удалось: целевой management API ответил, но API Key отсутствует или недействителен.", + "jvm.backend.connection_error.generic": "Подключение JVM не удалось", + "jvm.backend.connection_error.jmx.auth.help": "Проверьте, отключена ли authentication у целевого JMX. Если authentication требуется, укажите username и password перед подключением.", + "jvm.backend.connection_error.jmx.auth.summary": "Подключение JMX не удалось: {{target}} требует authentication или текущие credentials недействительны.", + "jvm.backend.connection_error.jmx.connection_refused.help": "Убедитесь, что на целевой JVM включен remote JMX, и проверьте host, firewall, port mapping, SSH и настройки proxy.", + "jvm.backend.connection_error.jmx.connection_refused.summary": "Подключение JMX не удалось: не удалось подключиться к {{target}}, потому что port не слушается или сеть недоступна.", + "jvm.backend.connection_error.jmx.connection_reset.help": "Убедитесь, что настроенный port является открытым JMX port JVM, а не бизнес-портом, debug port или проксированным port.", + "jvm.backend.connection_error.jmx.connection_reset.summary": "Подключение JMX не удалось: сервис на {{target}} закрыл соединение; port не является совместимым стандартным JMX RMI port.", + "jvm.backend.connection_error.jmx.host_required": "Подключение JMX не удалось: host отсутствует.", + "jvm.backend.connection_error.jmx.java_missing.help": "Сначала установите JRE/JDK или укажите правильный исполняемый файл `java` через переменную окружения GONAVI_JMX_JAVA_BIN.", + "jvm.backend.connection_error.jmx.java_missing.summary": "Подключение JMX не удалось: на текущей машине не найден runtime `java`, поэтому GoNavi не может запустить JMX helper.", + "jvm.backend.connection_error.jmx.no_such_object.help": "Обычно это означает, что указан port RMI registry, debug port или другой port Java service. Проверьте настройки `jmxremote.port` и `jmxremote.rmi.port`.", + "jvm.backend.connection_error.jmx.no_such_object.summary": "Подключение JMX не удалось: на {{target}} есть RMI service, но это не пригодный JMX RMIServer port.", + "jvm.backend.connection_error.jmx.non_jrmp.help": "Используйте фактический JMX port, открытый приложением, а не бизнес `server.port`. Если сервис только включает `-Dcom.sun.management.jmxremote`, но не задает `jmxremote.port`, удаленное подключение невозможно.", + "jvm.backend.connection_error.jmx.non_jrmp.summary": "Подключение JMX не удалось: {{target}} не является стандартным удаленным management port JMX; это похоже на бизнес-порт или HTTP port.", + "jvm.backend.connection_error.jmx.port_invalid": "Подключение JMX не удалось: port недействителен. Укажите допустимый port от 1 до 65535.", + "jvm.backend.connection_error.jmx.timeout.help": "Убедитесь, что port доступен, сеть не заблокирована, и при необходимости увеличьте connection timeout.", + "jvm.backend.connection_error.jmx.timeout.summary": "Подключение JMX не удалось: время ожидания подключения к {{target}} истекло.", + "jvm.backend.connection_error.suggestion": "Рекомендация: {{detail}}", + "jvm.backend.connection_error.technical_detail": "Технические сведения: {{detail}}", + "jvm.backend.diagnostic.arthas.base_url_invalid": "Адрес Arthas Tunnel недействителен: {{detail}}", + "jvm.backend.diagnostic.arthas.base_url_required": "Требуется адрес Arthas Tunnel", + "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "Активная command в этой Arthas Tunnel session не совпадает с command для отмены.", + "jvm.backend.diagnostic.arthas.command_already_running": "В этой Arthas Tunnel session уже выполняется command. Дождитесь завершения или сначала отмените ее.", + "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel command отменена", + "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel command завершилась по timeout за {{timeout}}", + "jvm.backend.diagnostic.arthas.connect_canceled": "WebSocket-подключение Arthas Tunnel отменено", + "jvm.backend.diagnostic.arthas.connect_failed": "WebSocket-подключение Arthas Tunnel не удалось: {{detail}}", + "jvm.backend.diagnostic.arthas.connect_timeout": "WebSocket-подключение Arthas Tunnel не получило ответ за {{timeout}} и завершилось по timeout", + "jvm.backend.diagnostic.arthas.connection_closed": "Подключение Arthas Tunnel закрыто: {{detail}}", + "jvm.backend.diagnostic.arthas.connection_closed_code": "Подключение Arthas Tunnel закрыто: code={{code}}", + "jvm.backend.diagnostic.arthas.connection_not_ready": "Подключение Arthas Tunnel еще не готово. Повторите попытку позже.", + "jvm.backend.diagnostic.arthas.http_failed": "Подключение Arthas Tunnel не удалось: HTTP {{status}}", + "jvm.backend.diagnostic.arthas.no_running_command": "В этой Arthas Tunnel session нет выполняющейся command.", + "jvm.backend.diagnostic.arthas.read_canceled": "Чтение вывода Arthas Tunnel отменено", + "jvm.backend.diagnostic.arthas.read_deadline_failed": "Не удалось задать read deadline Arthas Tunnel: {{detail}}", + "jvm.backend.diagnostic.arthas.read_failed": "Не удалось прочитать вывод Arthas Tunnel: {{detail}}", + "jvm.backend.diagnostic.arthas.read_timeout": "Чтение вывода Arthas Tunnel не получило ответ за {{timeout}} и завершилось по timeout", + "jvm.backend.diagnostic.arthas.request_encode_failed": "Не удалось закодировать запрос Arthas Tunnel: {{detail}}", + "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel поддерживает только адреса http/https/ws/wss: {{scheme}}", + "jvm.backend.diagnostic.arthas.send_canceled": "Отправка terminal command в Arthas Tunnel отменена", + "jvm.backend.diagnostic.arthas.send_failed": "Не удалось отправить terminal command в Arthas Tunnel: {{detail}}", + "jvm.backend.diagnostic.arthas.send_timeout": "Отправка terminal command в Arthas Tunnel не получила ответ за {{timeout}} и завершилась по timeout", + "jvm.backend.diagnostic.arthas.session_config_changed": "Конфигурация Arthas Tunnel session изменилась. Создайте diagnostic session заново.", + "jvm.backend.diagnostic.arthas.session_missing": "Diagnostic session не существует. Создайте Arthas Tunnel session заново.", + "jvm.backend.diagnostic.arthas.target_id_required": "Требуется target ID для Arthas Tunnel (targetId / agentId)", + "jvm.backend.diagnostic.arthas.target_not_found": "Целевой instance не найден. Проверьте targetId / agentId и убедитесь, что tunnel client онлайн.", + "jvm.backend.diagnostic.arthas.target_not_found_with_id": "Целевой instance {{target}} не найден. Проверьте targetId / agentId и убедитесь, что tunnel client онлайн.", + "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Не удалось закодировать terminal command Arthas Tunnel: {{detail}}", + "jvm.backend.diagnostic.arthas.write_deadline_failed": "Не удалось задать write deadline Arthas Tunnel: {{detail}}", + "jvm.backend.diagnostic.error.audit_write_blocked": "Не удалось записать diagnostic audit record, выполнение command заблокировано: {{detail}}", + "jvm.backend.diagnostic.error.cancel_identifiers_required": "Для cancel command требуются sessionId и commandId", + "jvm.backend.diagnostic.error.command_required": "Diagnostic command не может быть пустой", + "jvm.backend.diagnostic.error.disabled": "Для этого подключения не включен режим расширенной диагностики JVM", + "jvm.backend.diagnostic.error.execute_canceled": "Запрос выполнения диагностики отменен: {{detail}}", + "jvm.backend.diagnostic.error.session_id_required": "Diagnostic session ID обязателен. Сначала создайте session.", + "jvm.backend.diagnostic.error.transport_unsupported": "Неподдерживаемый транспорт диагностики JVM: {{transport}}", + "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas command отменена", + "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas command выполнена", + "jvm.backend.diagnostic.message.cancel_requested": "Cancel request отправлен; ожидание остановки command диагностическим bridge", + "jvm.backend.diagnostic.message.command_completed": "Diagnostic command выполнена", + "jvm.backend.diagnostic.policy.multiline_not_supported": "Diagnostic command не поддерживает переносы строк или несколько commands", + "jvm.backend.diagnostic.policy.mutating_not_allowed": "High-risk diagnostic commands не включены для этого подключения: {{command}}", + "jvm.backend.diagnostic.policy.observe_not_allowed": "Observe diagnostic commands не включены для этого подключения: {{command}}", + "jvm.backend.diagnostic.policy.read_only_observe_only": "Текущее подключение доступно только для чтения. Разрешены только observe diagnostic commands", + "jvm.backend.diagnostic.policy.trace_not_allowed": "Trace diagnostic commands не включены для этого подключения: {{command}}", + "jvm.backend.diagnostic.warning.audit_write_failed": "Не удалось записать audit record: {{detail}}", + "jvm.backend.error.audit_write_blocked": "Не удалось записать запись аудита, изменение JVM заблокировано: {{detail}}", + "jvm.backend.error.change_action_required": "Действие изменения JVM обязательно", + "jvm.backend.error.change_blocked_by_guard": "Текущее изменение заблокировано Guard", + "jvm.backend.error.change_blocked_read_only": "Текущее подключение доступно только для чтения, поэтому запись заблокирована", + "jvm.backend.error.change_confirmation_token_failed": "Не удалось создать токен подтверждения изменения JVM: {{detail}}", + "jvm.backend.error.change_reason_required": "Причина изменения JVM обязательна", + "jvm.backend.error.change_resource_id_required": "ID ресурса JVM обязателен", + "jvm.backend.error.confirmation_token_expired": "Срок действия токена подтверждения истек. Выполните предварительный просмотр и подтвердите снова.", + "jvm.backend.error.confirmation_token_invalid": "Токен подтверждения недействителен. Выполните предварительный просмотр и подтвердите снова.", + "jvm.backend.error.confirmation_token_missing": "Токен подтверждения отсутствует. Сначала завершите подтверждение предварительного просмотра.", + "jvm.backend.error.disallowed_mode": "Текущее подключение не разрешает режим {{mode}}", + "jvm.backend.error.preview_confirmation_missing": "Токен подтверждения предварительного просмотра отсутствует. Перед отправкой выполните предварительный просмотр еще раз.", + "jvm.backend.error.preview_context_hash_failed": "Не удалось создать контекст предварительного просмотра JVM: {{detail}}", + "jvm.backend.error.preview_payload_hash_failed": "Не удалось создать digest Payload предварительного просмотра JVM: {{detail}}", + "jvm.backend.error.resource_path_invalid": "Недопустимый путь ресурса JVM: {{detail}}", + "jvm.backend.message.connect_success": "Подключение JVM успешно выполнено", + "jvm.backend.monitoring.error.session_not_found": "Сеанс мониторинга JVM для {{connectionId}} {{providerMode}} не найден", + "jvm.backend.monitoring.error.snapshot_unsupported": "Снимок мониторинга {{provider}} пока не поддерживается", + "jvm.backend.monitoring.warning.sample_auto_stopped": "Сбор данных мониторинга завершился с ошибкой {{count}} раз подряд, поэтому этот сеанс был автоматически остановлен", + "jvm.backend.separator.message_warning": "; ", + "jvm.backend.warning.failed_audit_write_failed": "Не удалось записать аудит сбоя: {{detail}}", + "jvm.backend.warning.terminal_audit_write_failed": "Не удалось записать финальный аудит: {{detail}}", + "log_panel.action.clear": "Очистить журнал", + "log_panel.action.close": "Закрыть панель", + "log_panel.affected_rows": "Затронуто строк: {{count}}", + "log_panel.column.duration": "Длительность", + "log_panel.column.sql_message": "SQL / сообщение", + "log_panel.column.status": "Статус", + "log_panel.column.time": "Время", + "log_panel.description": "Фиксирует статус выполнения, длительность и ошибки для быстрого анализа.", + "log_panel.empty": "Нет журналов выполнения SQL", + "log_panel.short_title": "Логи", + "log_panel.title": "Журнал выполнения SQL", + "message_publish_modal.action.send": "Отправить", + "message_publish_modal.error.build_command_failed": "Не удалось создать команду отправки", + "message_publish_modal.error.send_failed_detail": "Отправка не удалась: {{detail}}", + "message_publish_modal.error.unknown_error": "Неизвестная ошибка", + "message_publish_modal.field.body_mode.label": "Тип тела сообщения", + "message_publish_modal.field.body.extra": "В режиме JSON требуется корректный JSON. В текстовом режиме содержимое отправляется как есть.", + "message_publish_modal.field.body.label": "Тело сообщения", + "message_publish_modal.field.body.placeholder": "Введите тело сообщения", + "message_publish_modal.field.body.required": "Введите тело сообщения", + "message_publish_modal.field.delay_level.extra": "RocketMQ использует фиксированные уровни задержки. 0 означает немедленную отправку.", + "message_publish_modal.field.delay_level.label": "Delay Level (необязательно)", + "message_publish_modal.field.exchange.extra": "Оставьте пустым, чтобы использовать exchange по умолчанию. Если указан пользовательский exchange, убедитесь, что для целевой Queue создан binding.", + "message_publish_modal.field.exchange.label": "Exchange (необязательно)", + "message_publish_modal.field.exchange.placeholder": "Пример: events.topic", + "message_publish_modal.field.headers.extra": "Должно быть JSON-объектом, например {{example}}.", + "message_publish_modal.field.headers.label": "Headers (необязательно)", + "message_publish_modal.field.properties.extra": "Должно быть JSON-объектом, например {{example}}.", + "message_publish_modal.field.properties.label": "Properties (необязательно)", + "message_publish_modal.field.qos.extra": "0 означает at most once, 1 означает at least once, 2 означает exactly once.", + "message_publish_modal.field.retain.label": "Retain-сообщение", + "message_publish_modal.field.routing_key.extra": "Оставьте пустым, чтобы по умолчанию использовать имя текущей Queue.", + "message_publish_modal.field.routing_key.label": "Routing Key (необязательно)", + "message_publish_modal.field.routing_key.placeholder": "Пример: orders.queue", + "message_publish_modal.field.tag.extra": "Оставьте пустым, чтобы не фильтровать и не записывать Tag.", + "message_publish_modal.field.tag.label": "Tag (необязательно)", + "message_publish_modal.footer.success_prefix": "При успешной отправке возвращается", + "message_publish_modal.footer.success_suffix": ", чтобы подтвердить, было ли отправлено это тестовое сообщение.", + "message_publish_modal.option.no_delay": "Без задержки", + "message_publish_modal.option.text": "Текст", + "message_publish_modal.title": "Тестовая отправка сообщения", + "message_publish_modal.title_with_connection": "Тестовая отправка сообщения · {{connectionName}}", + "message_publish.error.destination_required": "Введите целевой Topic / Queue", + "message_publish.error.invalid_json_detail": "{{field}} не является корректным JSON: {{detail}}", + "message_publish.error.json_object_required": "{{field}} должен быть JSON-объектом", + "message_publish.error.mqtt_wildcard_topic": "Topic для отправки MQTT не может содержать подстановочные символы + или #", + "message_publish.error.required_field": "Введите {{field}}", + "message_publish.error.unsupported_type": "Текущий источник данных не поддерживает тестовую отправку сообщений: {{type}}", + "message_publish.field.body": "Тело сообщения", + "message_publish.field.message_key": "Ключ сообщения", + "message_publish.presentation.kafka.alert": "Эта форма автоматически собирает Kafka publish JSON-команду и вызывает backend для тестовой отправки.", + "message_publish.presentation.kafka.destination_placeholder": "Пример: orders.events", + "message_publish.presentation.kafka.key_placeholder": "Необязательно. В режиме JSON введите одну корректную строку JSON.", + "message_publish.presentation.kafka.success_hint": "Headers отправляются как Kafka Record Headers.", + "message_publish.presentation.key_label": "Ключ сообщения Key (необязательно)", + "message_publish.presentation.keys_label": "Ключи сообщения Keys (необязательно)", + "message_publish.presentation.mqtt.alert": "Эта форма автоматически собирает MQTT publish JSON-команду и отправляет тестовое сообщение напрямую через broker.", + "message_publish.presentation.mqtt.destination_placeholder": "Пример: devices/device-001/telemetry", + "message_publish.presentation.mqtt.success_hint": "QoS и retain можно задать отдельно. Пустые поля используют значения по умолчанию из текущего подключения.", + "message_publish.presentation.rabbitmq.alert": "Эта форма автоматически собирает RabbitMQ publish JSON-команду и отправляет тестовое сообщение через Management API.", + "message_publish.presentation.rabbitmq.destination_placeholder": "Пример: orders.queue", + "message_publish.presentation.rabbitmq.destination_required": "Введите Queue", + "message_publish.presentation.rabbitmq.success_hint": "Если Exchange пустой, используется exchange по умолчанию, а имя Queue применяется как routing key.", + "message_publish.presentation.rocketmq.alert": "Эта форма автоматически собирает RocketMQ publish JSON-команду и отправляет тестовое сообщение через NameServer/Broker.", + "message_publish.presentation.rocketmq.destination_placeholder": "Пример: orders.events", + "message_publish.presentation.rocketmq.key_placeholder": "Можно ввести несколько значений Key через запятую", + "message_publish.presentation.rocketmq.success_hint": "Tag, Keys, Delay Level и Properties записываются в атрибуты сообщения RocketMQ.", + "message_publish.presentation.rocketmq.tag_placeholder": "Пример: TagA", + "message_publish.presentation.topic_required": "Введите Topic", + "proxy.backend.error.host_empty": "Хост прокси пуст", + "proxy.backend.error.http_connect_failed": "Не удалось подключиться к HTTP-прокси: {{detail}}", + "proxy.backend.error.http_connect_read_failed": "Не удалось прочитать ответ HTTP CONNECT: {{detail}}", + "proxy.backend.error.http_connect_status_failed": "HTTP-прокси CONNECT завершился ошибкой: {{status}}", + "proxy.backend.error.http_connect_write_failed": "Не удалось отправить запрос HTTP CONNECT: {{detail}}", + "proxy.backend.error.listen_failed": "Не удалось создать локальный слушатель прокси: {{detail}}", + "proxy.backend.error.port_invalid": "Недопустимый порт прокси: {{port}}", + "proxy.backend.error.remote_addr_invalid": "Недопустимый удалённый адрес: {{address}}", + "proxy.backend.error.socks5_connect_failed": "Не удалось подключиться через SOCKS5-прокси: {{detail}}", + "proxy.backend.error.socks5_dialer_failed": "Не удалось создать dialer для SOCKS5-прокси: {{detail}}", + "proxy.backend.error.unsupported_type": "Неподдерживаемый тип прокси: {{type}}", + "query_editor.action.ai_explain_sql": "AI: объяснить SQL", + "query_editor.action.ai_explain_sql_menu": "Объяснить SQL", + "query_editor.action.ai_generate_sql": "AI: сгенерировать SQL", + "query_editor.action.ai_generate_sql_menu": "Сгенерировать SQL", + "query_editor.action.ai_optimize_sql": "AI: оптимизировать SQL", + "query_editor.action.ai_optimize_sql_menu": "Оптимизировать SQL", + "query_editor.action.ai_schema_analysis": "Анализ схемы", + "query_editor.action.export_sql_file": "Экспортировать SQL-файл", + "query_editor.action.format": "Форматировать", + "query_editor.action.format_sql": "Форматировать SQL", + "query_editor.action.hide_results_panel": "Скрыть область результатов", + "query_editor.action.hide_results_panel_with_shortcut": "Скрыть область результатов ({{shortcut}})", + "query_editor.action.more": "Еще", + "query_editor.action.rename_query": "Переименовать запрос", + "query_editor.action.resize_editor": "Перетащите, чтобы изменить высоту", + "query_editor.action.results": "Результаты", + "query_editor.action.run": "Выполнить", + "query_editor.action.run_with_shortcut": "Выполнить ({{shortcut}})", + "query_editor.action.save": "Сохранить", + "query_editor.action.save_with_shortcut": "Сохранить ({{shortcut}})", + "query_editor.action.show_object_info": "Показать сведения об объекте", + "query_editor.action.show_results_panel": "Показать область результатов", + "query_editor.action.show_results_panel_with_shortcut": "Показать область результатов ({{shortcut}})", + "query_editor.action.stop": "Остановить", + "query_editor.ai_prompt.context": "Контекст: {{type}} {{name}}, выбранная база данных {{database}}.\n", + "query_editor.ai_prompt.default_database": "По умолчанию", + "query_editor.ai_prompt.default_source": "База данных", + "query_editor.ai_prompt.diagnose": "При выполнении этого SQL возникла ошибка:\n```sql\n{{sql}}\n```\n\nБаза данных вернула ошибку:\n```text\n{{error}}\n```\n\nПроанализируй причину и предложи исправление.", + "query_editor.ai_prompt.explain": "Объясни логику выполнения этой SQL-инструкции:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.generate": "Сгенерируй запрос на основе текущей схемы базы данных.", + "query_editor.ai_prompt.optimize": "Проанализируй эту SQL-инструкцию на проблемы производительности и предложи оптимизацию:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.schema": "Проанализируй текущую схему базы данных и предложи улучшения производительности и дизайна.", + "query_editor.completion.action.absolute_value": "абсолютное значение", + "query_editor.completion.action.approximate_distinct": "приблизительные уникальные значения", + "query_editor.completion.action.approximate_distinct_count": "приблизительный подсчет уникальных значений", + "query_editor.completion.action.approximate_percentile": "приблизительный перцентиль", + "query_editor.completion.action.approximate_quantile": "приблизительный квантиль", + "query_editor.completion.action.array_aggregation": "агрегация массива", + "query_editor.completion.action.array_length": "длина массива", + "query_editor.completion.action.average": "среднее", + "query_editor.completion.action.bitmap_aggregation": "агрегация Bitmap", + "query_editor.completion.action.bitmap_construction": "построить Bitmap", + "query_editor.completion.action.bitmap_count": "количество Bitmap", + "query_editor.completion.action.boolean_and_aggregation": "булева AND-агрегация", + "query_editor.completion.action.boolean_or_aggregation": "булева OR-агрегация", + "query_editor.completion.action.character_length": "длина строки", + "query_editor.completion.action.concat_with_separator": "конкатенация с разделителем", + "query_editor.completion.action.concatenation": "конкатенация", + "query_editor.completion.action.condition_mapping": "сопоставление условий", + "query_editor.completion.action.conditional_check": "проверка условия", + "query_editor.completion.action.count": "подсчет", + "query_editor.completion.action.current_database": "текущая база данных", + "query_editor.completion.action.current_date": "текущая дата", + "query_editor.completion.action.current_date_time": "текущая дата и время", + "query_editor.completion.action.current_time": "текущее время", + "query_editor.completion.action.current_timestamp": "текущая временная метка", + "query_editor.completion.action.current_user": "текущий пользователь", + "query_editor.completion.action.database_current_time": "текущее время базы данных", + "query_editor.completion.action.date_addition": "прибавление даты", + "query_editor.completion.action.date_conversion": "преобразовать в дату", + "query_editor.completion.action.date_difference": "разница дат", + "query_editor.completion.action.date_field_extraction": "извлечь поле даты", + "query_editor.completion.action.date_formatting": "форматирование даты", + "query_editor.completion.action.date_subtraction": "вычитание даты", + "query_editor.completion.action.date_truncation": "усечение даты", + "query_editor.completion.action.date_value": "дата", + "query_editor.completion.action.datetime_conversion": "преобразовать в дату и время", + "query_editor.completion.action.datetime_value": "дата и время", + "query_editor.completion.action.decimal_truncation": "усечь десятичные знаки", + "query_editor.completion.action.dense_rank": "плотный ранг", + "query_editor.completion.action.distinct_array_aggregation": "агрегация уникальных массивов", + "query_editor.completion.action.e_power": "степень числа e", + "query_editor.completion.action.elapsed_time": "прошедшее время", + "query_editor.completion.action.epoch_seconds": "секунды эпохи", + "query_editor.completion.action.exact_distinct": "точные уникальные значения", + "query_editor.completion.action.first_non_null": "вернуть первое не-NULL значение", + "query_editor.completion.action.first_value": "первое значение", + "query_editor.completion.action.format_as_text": "форматировать как текст", + "query_editor.completion.action.group_concatenation": "групповая конкатенация", + "query_editor.completion.action.guid_generation": "сгенерировать GUID", + "query_editor.completion.action.hexadecimal": "шестнадцатеричное значение", + "query_editor.completion.action.high_precision_current_time": "текущее время высокой точности", + "query_editor.completion.action.hll_aggregation": "HLL-агрегация", + "query_editor.completion.action.hll_hash": "HLL-хеш", + "query_editor.completion.action.instant_rate_of_change": "мгновенная скорость изменения", + "query_editor.completion.action.int64_conversion": "преобразовать в Int64", + "query_editor.completion.action.interpolation": "интерполяция", + "query_editor.completion.action.json_string_extraction": "извлечение JSON-строки", + "query_editor.completion.action.json_unquote": "убрать кавычки JSON", + "query_editor.completion.action.json_value_extraction": "извлечение JSON-значения", + "query_editor.completion.action.json_value_set": "задать JSON-значение", + "query_editor.completion.action.jsonb_path_extraction": "извлечение пути JSONB", + "query_editor.completion.action.julian_day": "юлианский день", + "query_editor.completion.action.last_insert_id": "последний ID вставки", + "query_editor.completion.action.last_row": "последняя строка", + "query_editor.completion.action.last_value": "последнее значение", + "query_editor.completion.action.least_squares": "метод наименьших квадратов", + "query_editor.completion.action.left_padding": "дополнить слева", + "query_editor.completion.action.left_space_trimming": "убрать пробелы слева", + "query_editor.completion.action.left_substring": "извлечь слева", + "query_editor.completion.action.length": "длина", + "query_editor.completion.action.list_aggregation": "агрегация списка", + "query_editor.completion.action.list_unnest": "развернуть список", + "query_editor.completion.action.log_base_10": "логарифм по основанию 10", + "query_editor.completion.action.log_base_2": "логарифм по основанию 2", + "query_editor.completion.action.logarithm": "логарифм", + "query_editor.completion.action.lowercase": "преобразовать в нижний регистр", + "query_editor.completion.action.maximum": "максимум", + "query_editor.completion.action.md5_hash": "MD5-хеш", + "query_editor.completion.action.minimum": "минимум", + "query_editor.completion.action.modulo": "остаток от деления", + "query_editor.completion.action.month_addition": "добавить месяцы", + "query_editor.completion.action.month_difference": "разница месяцев", + "query_editor.completion.action.month_end_date": "дата конца месяца", + "query_editor.completion.action.next_row": "следующая строка", + "query_editor.completion.action.null_branch": "ветвь NULL", + "query_editor.completion.action.null_if_equal": "вернуть NULL при равенстве", + "query_editor.completion.action.null_replacement": "замена NULL", + "query_editor.completion.action.number_conversion": "преобразовать в число", + "query_editor.completion.action.number_formatting": "форматирование числа", + "query_editor.completion.action.position_lookup": "найти позицию", + "query_editor.completion.action.power_operation": "возведение в степень", + "query_editor.completion.action.previous_row": "предыдущая строка", + "query_editor.completion.action.quantile": "квантиль", + "query_editor.completion.action.random_number": "случайное число", + "query_editor.completion.action.rank": "ранг", + "query_editor.completion.action.rate_of_change": "скорость изменения", + "query_editor.completion.action.regex_match": "совпадение по регулярному выражению", + "query_editor.completion.action.regex_replace": "замена по регулярному выражению", + "query_editor.completion.action.replacement": "замена", + "query_editor.completion.action.right_padding": "дополнить справа", + "query_editor.completion.action.right_space_trimming": "убрать пробелы справа", + "query_editor.completion.action.right_substring": "извлечь справа", + "query_editor.completion.action.round_down": "округлить вниз", + "query_editor.completion.action.round_up": "округлить вверх", + "query_editor.completion.action.rounding": "округление", + "query_editor.completion.action.row_number": "номер строки", + "query_editor.completion.action.set_lookup": "поиск по множеству", + "query_editor.completion.action.sha1_hash": "SHA1-хеш", + "query_editor.completion.action.sha2_hash": "SHA2-хеш", + "query_editor.completion.action.space_trimming": "убрать пробелы", + "query_editor.completion.action.spread": "разброс", + "query_editor.completion.action.sql_literal": "SQL-литерал", + "query_editor.completion.action.square_root": "квадратный корень", + "query_editor.completion.action.string_aggregation": "агрегация строк", + "query_editor.completion.action.string_conversion": "преобразовать в строку", + "query_editor.completion.action.string_repetition": "повторить строку", + "query_editor.completion.action.string_reversal": "обратить строку", + "query_editor.completion.action.string_to_date": "преобразовать строку в дату", + "query_editor.completion.action.string_to_timestamp": "преобразовать строку во временную метку", + "query_editor.completion.action.struct_construction": "построить структуру", + "query_editor.completion.action.substring_extraction": "извлечение подстроки", + "query_editor.completion.action.sum": "сумма", + "query_editor.completion.action.time_difference": "разница времени", + "query_editor.completion.action.time_value": "время", + "query_editor.completion.action.time_weighted_average": "среднее, взвешенное по времени", + "query_editor.completion.action.timestamp_difference": "разница временных меток", + "query_editor.completion.action.truncate_date_or_number": "усечь дату или число", + "query_editor.completion.action.try_conversion": "попытаться преобразовать", + "query_editor.completion.action.type_conversion": "преобразование типа", + "query_editor.completion.action.unix_time_to_datetime": "преобразовать Unix-время в дату и время", + "query_editor.completion.action.unix_timestamp": "Unix-временная метка", + "query_editor.completion.action.uppercase": "преобразовать в верхний регистр", + "query_editor.completion.action.uuid_generation": "сгенерировать UUID", + "query_editor.completion.action.value_formatting": "форматирование значения", + "query_editor.completion.action.version": "версия", + "query_editor.completion.detail.aggregate": "Агрегатная функция", + "query_editor.completion.detail.aggregate_count": "Агрегат - подсчет", + "query_editor.completion.detail.conditional": "Условная функция", + "query_editor.completion.detail.conditional_if": "Условие - IF", + "query_editor.completion.detail.conversion": "Функция преобразования типа", + "query_editor.completion.detail.conversion_cast": "Преобразование - приведение типа", + "query_editor.completion.detail.crypto_md5": "Хеш - MD5", + "query_editor.completion.detail.date_now": "Дата - текущая дата и время", + "query_editor.completion.detail.date_time": "Функция даты и времени", + "query_editor.completion.detail.info": "Информационная функция", + "query_editor.completion.detail.info_database": "Информация - текущая база данных", + "query_editor.completion.detail.json": "JSON-функция", + "query_editor.completion.detail.json_extract": "JSON - извлечь значение", + "query_editor.completion.detail.math": "Математическая функция", + "query_editor.completion.detail.math_abs": "Математика - абсолютное значение", + "query_editor.completion.detail.modifier_distinct": "Модификатор - уникальные значения", + "query_editor.completion.detail.sql_function": "SQL-функция", + "query_editor.completion.detail.string": "Строковая функция", + "query_editor.completion.detail.string_concat": "Строка - конкатенация", + "query_editor.completion.detail.utility": "Служебная функция", + "query_editor.completion.detail.window": "Оконная функция", + "query_editor.completion.detail.window_row_number": "Окно - номер строки", + "query_editor.completion.documentation.comment": "Комментарий: {{comment}}", + "query_editor.empty_state.description": "Запустите запрос, и результаты отобразятся ниже в новой таблице данных.", + "query_editor.empty_state.title": "Ожидание выполнения SQL", + "query_editor.format.keyword_lower": "Ключевые слова в нижнем регистре", + "query_editor.format.keyword_upper": "Ключевые слова в верхнем регистре", + "query_editor.format.restore_last_format": "Вернуть состояние до последнего форматирования", + "query_editor.format.shortcut_settings": "Настройки сочетаний клавиш...", + "query_editor.format.snippet_settings": "Настройки сниппетов...", + "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть эту функцию", + "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть это материализованное представление", + "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть эту хранимую процедуру", + "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть эту таблицу", + "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть этот триггер", + "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + щелчок, чтобы открыть это представление", + "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + щелчок, чтобы переключиться на эту базу данных", + "query_editor.max_rows.option_1000": "Макс. строк: 1000", + "query_editor.max_rows.option_20000": "Макс. строк: 20000", + "query_editor.max_rows.option_500": "Макс. строк: 500", + "query_editor.max_rows.option_5000": "Макс. строк: 5000", + "query_editor.max_rows.option_unlimited": "Макс. строк: без ограничения", + "query_editor.max_rows.tooltip": "Максимальное число возвращаемых строк. Для SELECT автоматически добавляется LIMIT, чтобы большие результаты не блокировали интерфейс.", + "query_editor.message.append_success": "Код добавлен.", + "query_editor.message.cancel_failed": "Не удалось отменить запрос: {{error}}", + "query_editor.message.cancel_no_running": "Нет выполняющегося запроса для отмены.", + "query_editor.message.cancel_success": "Запрос отменен.", + "query_editor.message.connection_not_found": "Подключение не найдено.", + "query_editor.message.execution_failed_with_error": "Ошибка выполнения запроса: {{error}}", + "query_editor.message.execution_multi_success": "Выполнено инструкций: {{statements}}, создано наборов результатов: {{results}}.", + "query_editor.message.execution_result_sets_success": "Выполнение завершено, создано наборов результатов: {{results}}.", + "query_editor.message.execution_success": "Выполнение успешно.", + "query_editor.message.export_sql_file_failed": "Не удалось экспортировать файл SQL: {{error}}", + "query_editor.message.export_sql_file_success": "Файл SQL экспортирован.", + "query_editor.message.format_failed": "Ошибка форматирования: возможно, синтаксис SQL неверен.", + "query_editor.message.format_restore_success": "Восстановлено состояние SQL до форматирования.", + "query_editor.message.insert_success": "Код вставлен в текущую позицию курсора.", + "query_editor.message.no_executable_sql": "Нет SQL для выполнения.", + "query_editor.message.no_format_restore_snapshot": "Нет сохранённого состояния SQL до форматирования для восстановления.", + "query_editor.message.no_selectable_sql": "Нет SQL-инструкции для выбора.", + "query_editor.message.object_info_target_not_found": "Текущий курсор не указывает на распознанную таблицу или колонку.", + "query_editor.message.page_query_empty": "Запрос страницы не вернул набор результатов.", + "query_editor.message.page_query_failed": "Ошибка запроса страницы: {{error}}", + "query_editor.message.read_only_index_metadata_unavailable": "Не удалось загрузить метаданные уникального индекса, поэтому изменения нельзя безопасно зафиксировать.", + "query_editor.message.read_only_no_safe_locator": "Первичный ключ или подходящий уникальный индекс не обнаружен, поэтому изменения нельзя безопасно зафиксировать.", + "query_editor.message.read_only_oracle_rowid_injection_unavailable": "В Oracle-запросе используется *, поэтому столбец-локатор ROWID не удалось автоматически внедрить. Результат остается только для чтения.", + "query_editor.message.read_only_system_metadata": "Результаты запросов к системным метаданным остаются доступными только для чтения.", + "query_editor.message.read_only_table_locator_metadata_unavailable": "Не удалось загрузить метаданные первичного ключа/уникального индекса для {{table}}, поэтому изменения нельзя безопасно зафиксировать.", + "query_editor.message.read_only_warning_with_detail": "Результаты запроса остаются доступными только для чтения: {{detail}}", + "query_editor.message.refresh_failed": "Не удалось обновить: {{error}}", + "query_editor.message.renamed": "Запрос переименован.", + "query_editor.message.save_first_before_rename": "Сначала сохраните запрос, а затем переименуйте его.", + "query_editor.message.save_query_failed": "Не удалось сохранить запрос: {{error}}", + "query_editor.message.save_sql_file_failed": "Не удалось сохранить SQL-файл: {{error}}", + "query_editor.message.saved": "Запрос сохранен.", + "query_editor.message.select_database_first": "Сначала выберите базу данных.", + "query_editor.message.sql_file_saved": "SQL-файл сохранен.", + "query_editor.message.statement_failed_prefix": "Ошибка в инструкции {{index}}: ", + "query_editor.message.unsupported_source": "Этот источник данных не поддерживает редактор SQL-запросов. Используйте соответствующую страницу.", + "query_editor.object_info.column": "Столбец", + "query_editor.object_info.database": "База данных", + "query_editor.object_info.label.database": "База данных", + "query_editor.object_info.label.schema": "Схема", + "query_editor.object_info.label.separator": ": ", + "query_editor.object_info.label.table": "Таблица", + "query_editor.object_info.label.type": "Тип", + "query_editor.object_info.materialized_view": "Материализованное представление", + "query_editor.object_info.table": "Таблица", + "query_editor.placeholder.connection": "Выберите подключение", + "query_editor.placeholder.database": "Выберите базу данных", + "query_editor.result.affected_rows": "Затронуто строк: {{count}}", + "query_editor.result.ai_diagnose": "AI-диагностика", + "query_editor.result.close": "Закрыть результат", + "query_editor.result.execution_failed": "Ошибка выполнения", + "query_editor.result.execution_success": "Выполнение успешно", + "query_editor.result.tab_title": "Результат {{index}} ({{count}})", + "query_editor.result.tab_title_success": "Результат {{index}} ✓", + "query_editor.results_panel.action.hide": "Скрыть", + "query_editor.results_panel.aria.hide": "Скрыть область результатов", + "query_editor.results_panel.menu.close_all": "Закрыть все вкладки", + "query_editor.results_panel.menu.close_left": "Закрыть вкладки слева", + "query_editor.results_panel.menu.close_other": "Закрыть другие вкладки", + "query_editor.results_panel.menu.close_right": "Закрыть вкладки справа", + "query_editor.results_panel.message.title": "Сообщения выполнения", + "query_editor.results_panel.panel.title": "Область результатов", + "query_editor.results_panel.tab.message": "Сообщение {{index}}", + "query_editor.results_panel.tab.result": "Результат {{index}}", + "query_editor.results_panel.tooltip.hide": "Скрыть область результатов", + "query_editor.results_panel.tooltip.hide_with_shortcut": "Скрыть область результатов ({{shortcut}})", + "query_editor.save_modal.name_label": "Имя запроса", + "query_editor.save_modal.name_placeholder": "Например: запросить всех пользователей", + "query_editor.save_modal.name_required": "Введите имя запроса.", + "query_editor.save_modal.rename_ok": "Переименовать", + "query_editor.save_modal.rename_title": "Переименовать запрос", + "query_editor.save_modal.title": "Сохранить запрос", + "query_editor.save_modal.unnamed": "Запрос без имени", + "query_editor.slash_command.diff.description": "Сравнить различия таблиц и создать изменения", + "query_editor.slash_command.diff.label": "Сравнение таблиц", + "query_editor.slash_command.diff.prompt": "Сравни структуры двух таблиц и сгенерируй ALTER-инструкции для миграции со старой версии на новую.", + "query_editor.slash_command.explain.description": "Объяснить логику выбранного SQL", + "query_editor.slash_command.explain.label": "Объяснить SQL", + "query_editor.slash_command.explain.prompt": "Объясни логику выполнения этой SQL-инструкции:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.index.description": "Рекомендовать стратегию индексов", + "query_editor.slash_command.index.label": "Рекомендации по индексам", + "query_editor.slash_command.index.prompt": "На основе текущей структуры таблиц и типичных сценариев запросов предложи стратегию индексов и при необходимости добавь SQL.", + "query_editor.slash_command.mock.description": "Сгенерировать тестовые INSERT-данные", + "query_editor.slash_command.mock.label": "Тестовые данные", + "query_editor.slash_command.mock.prompt": "Сгенерируй 10 осмысленных тестовых INSERT-строк для связанной таблицы.", + "query_editor.slash_command.optimize.description": "Проанализировать узкие места производительности SQL", + "query_editor.slash_command.optimize.label": "Анализ оптимизации", + "query_editor.slash_command.optimize.prompt": "Проанализируй эту SQL-инструкцию на проблемы производительности и предложи оптимизацию:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.query.description": "Опишите, что нужно запросить", + "query_editor.slash_command.query.label": "Запрос на естественном языке", + "query_editor.slash_command.query.prompt": "Напиши SQL-запрос для этого требования:", + "query_editor.slash_command.schema.description": "Проверить качество структуры таблиц", + "query_editor.slash_command.schema.label": "Ревью дизайна таблиц", + "query_editor.slash_command.schema.prompt": "Проверь дизайн связанных таблиц, включая типы полей, нормализацию, индексы и предложения по улучшению.", + "query_editor.slash_command.sql.description": "Описать требование и сгенерировать инструкцию", + "query_editor.slash_command.sql.label": "Сгенерировать SQL", + "query_editor.slash_command.sql.prompt": "Сгенерируй SQL для этого требования:", "query_editor.sql_error.rule.column_missing.explanation": "SQL ссылается на столбец, которого нет в наборе результатов, имя отличается по написанию или столбца нет в текущей таблице.", "query_editor.sql_error.rule.column_missing.label": "Столбец не существует", "query_editor.sql_error.rule.column_missing.suggestion": "Проверьте имена столбцов, алиасы, регистр, алиасы таблиц и принадлежность столбца текущему объекту FROM/JOIN.", @@ -7151,10 +6053,198 @@ "query_editor.sql_error.wrapper.raw_line": "Исходная ошибка: {{error}}", "query_editor.sql_error.wrapper.semantic_line": "Смысл: {{label}}. {{explanation}}", "query_editor.sql_error.wrapper.suggestion_line": "Рекомендация: {{suggestion}}", + "query_editor.transaction.action.commit": "Commit", + "query_editor.transaction.action.commit_with_count": "Commit ({{count}})", + "query_editor.transaction.action.rollback": "Rollback", + "query_editor.transaction.delay.immediate": "Сразу", + "query_editor.transaction.message.pending_managed_transaction": "В SQL-редакторе уже есть незавершённая транзакция. Перед выполнением нового DML-оператора выполните commit или rollback.", + "query_editor.transaction.mode.auto": "Авто", + "query_editor.transaction.mode.manual": "Вручную", + "query_editor.transaction.mode.tooltip": "Как в DBeaver: когда SQL-редактор выполняет DML, например INSERT/UPDATE/DELETE/MERGE/REPLACE, GoNavi сначала открывает управляемую транзакцию. В ручном режиме нужно выполнить commit/rollback; в автоматическом режиме после успешного выполнения автоматически запускается COMMIT.", + "query_editor.transaction.status.auto_commit_countdown": "Автоматический commit через {{seconds}}s", + "query_editor.transaction.status.auto_committing": "Выполняется автоматический commit", + "query.format": "Форматировать SQL", + "query.new": "Новый запрос", + "query.run": "Выполнить", + "query.save": "Сохранить запрос", + "query.stop": "Остановить", + "redis_command.action.clear_console": "Очистить консоль", + "redis_command.action.execute": "Выполнить (Cmd+Enter)", + "redis_command.completion.detail": "Команда Redis", + "redis_command.message.command_required": "Введите команду для выполнения", + "redis_command.output.empty_hint": "Выполняйте команды в этой консоли; результаты отображаются как возвращены.", + "redis_command.output.selection_tip": "Подсказка: выделите строки и нажмите Ctrl + Enter, чтобы выполнить только выделение.", + "redis_command.output.title": "Вывод выполнения", + "redis_command.state.connection_not_found": "Подключение не найдено", + "redis_command.title.console": "Консоль Redis", + "redis_monitor.action.pause_refresh": "Приостановить обновление", + "redis_monitor.action.refresh_now": "Обновить сейчас", + "redis_monitor.action.resume_refresh": "Возобновить обновление", + "redis_monitor.chart.clients_keys": "Сведения о подключениях (клиенты и Keys)", + "redis_monitor.chart.cpu_usage": "Использование CPU", + "redis_monitor.chart.memory": "Расход памяти", + "redis_monitor.chart.qps": "Пропускная способность запросов (QPS)", + "redis_monitor.message.fetch_failed": "Не удалось получить сведения Redis: {{detail}}", + "redis_monitor.metric.blocked_clients": "Заблокировано: {{value}}", + "redis_monitor.metric.clients": "Клиенты", + "redis_monitor.metric.days": "Дней: {{value}}", + "redis_monitor.metric.memory_peak": "Пик: {{value}}", + "redis_monitor.metric.memory_used": "Используемая память", + "redis_monitor.metric.ops": "Пропускная способность (OPS)", + "redis_monitor.metric.uptime": "Время работы", + "redis_monitor.series.clients": "Клиенты", + "redis_monitor.series.rss_memory": "Память RSS", + "redis_monitor.series.system": "Система", + "redis_monitor.series.total_keys": "Всего Keys", + "redis_monitor.series.used_memory": "Используемая память", + "redis_monitor.series.user": "Пользователь", + "redis_monitor.server_details.title": "Подробные параметры сервера", + "redis_monitor.state.connection_not_found": "Подключение не найдено", + "redis_monitor.title.instance": "Монитор Redis-инстанса", + "redis_viewer.action.add_field": "Добавить поле", + "redis_viewer.action.add_list_head": "Добавить в начало", + "redis_viewer.action.add_list_tail": "Добавить в конец", + "redis_viewer.action.add_member": "Добавить участника", + "redis_viewer.action.add_stream_entry": "Добавить запись", + "redis_viewer.action.clear_group_selection": "Снять выбор", + "redis_viewer.action.clear_selection": "Снять выбор", + "redis_viewer.action.copy": "Копировать", + "redis_viewer.action.copy_key_name": "Копировать имя Key", + "redis_viewer.action.copy_value": "Копировать значение", + "redis_viewer.action.delete_key": "Удалить Key", + "redis_viewer.action.delete_selected": "Удалить выбранное ({{count}})", + "redis_viewer.action.edit": "Редактировать", + "redis_viewer.action.load_more": "Загрузить еще", + "redis_viewer.action.new_key": "Создать", + "redis_viewer.action.refresh": "Обновить", + "redis_viewer.action.rename_key": "Переименовать Key", + "redis_viewer.action.select_all_loaded": "Выбрать все загруженные", + "redis_viewer.action.select_group": "Выбрать", + "redis_viewer.action.set_ttl": "Задать TTL", + "redis_viewer.aria.collapse_group": "Свернуть группу", + "redis_viewer.aria.expand_group": "Развернуть группу", + "redis_viewer.confirm.delete_field": "Удалить это поле?", + "redis_viewer.confirm.delete_key": "Удалить Key \"{{key}}\"?", + "redis_viewer.confirm.delete_member": "Удалить этого участника?", + "redis_viewer.confirm.delete_selected": "Удалить выбранные Keys: {{count}}?", + "redis_viewer.confirm.delete_stream_entry": "Удалить эту запись Stream?", + "redis_viewer.field.field_name": "Имя поля", + "redis_viewer.field.fields_json": "Поля JSON:", + "redis_viewer.field.key": "Key", + "redis_viewer.field.member": "Участник:", + "redis_viewer.field.new_key_name": "Новое имя Key", + "redis_viewer.field.new_score": "Новая оценка:", + "redis_viewer.field.score": "Оценка:", + "redis_viewer.field.stream_id": "ID (необязательно, по умолчанию *):", + "redis_viewer.field.ttl_seconds": "TTL (секунды)", + "redis_viewer.field.value": "Значение", + "redis_viewer.help.ttl_forever": "-1 означает без срока действия", + "redis_viewer.hint.binary_readonly": "Двоичные данные нельзя редактировать", + "redis_viewer.hint.switch_auto_to_edit": "Переключитесь в режим Auto для редактирования", + "redis_viewer.label.encoding": "Кодировка: {{encoding}}", + "redis_viewer.label.keys_count": "Keys: {{count}}", + "redis_viewer.label.length": "Длина: {{count}}", + "redis_viewer.label.node_count": "Узлов: {{count}}", + "redis_viewer.label.original_key": "Исходный Key: {{key}}", + "redis_viewer.message.add_failed": "Не удалось добавить: {{detail}}", + "redis_viewer.message.add_success": "Добавлено", + "redis_viewer.message.add_success_with_id": "Добавлено {{id}}", + "redis_viewer.message.copied": "Скопировано", + "redis_viewer.message.copy_failed": "Не удалось скопировать", + "redis_viewer.message.create_failed": "Не удалось создать: {{detail}}", + "redis_viewer.message.create_success": "Создано", + "redis_viewer.message.delete_failed": "Не удалось удалить: {{detail}}", + "redis_viewer.message.delete_success": "Удалено", + "redis_viewer.message.deleted_keys": "Удалено Keys: {{count}}", + "redis_viewer.message.fields_json_invalid": "Поля JSON недействительны", + "redis_viewer.message.fields_must_be_json_object": "Поля должны быть объектом JSON", + "redis_viewer.message.fields_required": "Укажите хотя бы одно поле", + "redis_viewer.message.key_check_failed": "Не удалось проверить целевой Key: {{detail}}", + "redis_viewer.message.key_missing_removed": "Key больше не существует или истек и был удален из списка", + "redis_viewer.message.key_name_copied": "Имя Key скопировано", + "redis_viewer.message.load_keys_failed": "Не удалось загрузить Keys: {{detail}}", + "redis_viewer.message.new_key_name_required": "Введите новое имя Key", + "redis_viewer.message.rename_failed": "Не удалось переименовать: {{detail}}", + "redis_viewer.message.rename_same_key": "Новое имя Key должно отличаться от исходного", + "redis_viewer.message.rename_success": "Key переименован", + "redis_viewer.message.save_failed": "Не удалось сохранить: {{detail}}", + "redis_viewer.message.save_success": "Сохранено", + "redis_viewer.message.set_failed": "Не удалось задать значение: {{detail}}", + "redis_viewer.message.stream_entry_not_deleted": "Запись Stream не удалена; возможно, ее уже нет", + "redis_viewer.message.target_key_exists": "Целевой Key уже существует: {{key}}", + "redis_viewer.message.ttl_set_success": "TTL обновлен", + "redis_viewer.message.update_failed": "Не удалось обновить: {{detail}}", + "redis_viewer.message.update_success": "Обновлено", + "redis_viewer.message.value_load_failed": "Не удалось получить значение: {{detail}}", + "redis_viewer.modal.add_element": "Добавить элемент", + "redis_viewer.modal.add_element_head": "Добавить элемент в начало", + "redis_viewer.modal.add_field": "Добавить поле", + "redis_viewer.modal.add_member": "Добавить участника", + "redis_viewer.modal.add_stream_entry": "Добавить запись Stream", + "redis_viewer.modal.edit_field": "Редактировать поле: {{field}}", + "redis_viewer.modal.edit_index": "Редактировать индекс {{index}}", + "redis_viewer.modal.edit_value": "Редактировать значение", + "redis_viewer.modal.new_key": "Новый Key", + "redis_viewer.modal.rename_key": "Переименовать Key", + "redis_viewer.modal.set_ttl": "Задать TTL", + "redis_viewer.modal.update_score": "Обновить оценку", + "redis_viewer.notice.large_keyspace_mode": "Включен режим производительности для большого keyspace. Отрисовка узлов упрощена, сохраняется до {{count}} развернутых групп.", + "redis_viewer.placeholder.key_name": "Имя Key", + "redis_viewer.placeholder.member_value": "Введите значение участника", + "redis_viewer.placeholder.new_element_value": "Введите значение нового элемента", + "redis_viewer.placeholder.new_key_name": "new:key:name", + "redis_viewer.placeholder.new_member_value": "Введите значение нового участника", + "redis_viewer.placeholder.search_exact": "Введите полный Key или namespace для точного поиска", + "redis_viewer.placeholder.search_fuzzy": "Поиск Keys (нечеткое совпадение)", + "redis_viewer.placeholder.stream_id": "Например: * или 1723110000000-0", + "redis_viewer.placeholder.value": "Значение", + "redis_viewer.search.exact": "Точно", + "redis_viewer.search.fuzzy": "Нечетко", + "redis_viewer.state.connection_not_found": "Подключение не найдено", + "redis_viewer.state.empty_selection": "Выберите Key, чтобы просмотреть детали", + "redis_viewer.table.action": "Действия", + "redis_viewer.table.field": "Поле", + "redis_viewer.table.fields": "Поля", + "redis_viewer.table.index": "Индекс", + "redis_viewer.table.member": "Участник", + "redis_viewer.table.score": "Оценка", + "redis_viewer.table.value": "Значение", + "redis_viewer.title.active_key": "Активный Key", + "redis_viewer.title.key_explorer": "Обозреватель Keys", + "redis_viewer.title.namespace_key": "Пространство имен / Key", + "redis_viewer.title.type_ttl": "Тип / TTL", + "redis_viewer.tooltip.copy_fields_json": "Копировать поля JSON", + "redis_viewer.tooltip.copy_id": "Копировать ID", + "redis_viewer.tooltip.copy_key_name": "Копировать имя Key", + "redis_viewer.tooltip.copy_value": "Копировать значение", + "redis_viewer.tooltip.resize_panels": "Перетащите, чтобы изменить размер", + "redis_viewer.topology.cluster": "Cluster", + "redis_viewer.topology.sentinel": "Sentinel", + "redis_viewer.topology.single": "Одиночный", + "redis_viewer.ttl.days_hours": "{{days}} д. {{hours}} ч.", + "redis_viewer.ttl.expired": "Истек", + "redis_viewer.ttl.forever": "Постоянный", + "redis_viewer.ttl.hours_minutes": "{{hours}} ч. {{minutes}} мин.", + "redis_viewer.ttl.minutes_seconds": "{{minutes}} мин. {{seconds}} сек.", + "redis_viewer.ttl.seconds": "{{seconds}} сек.", + "redis_viewer.validation.key_required": "Введите Key", + "redis_viewer.validation.new_key_name_required": "Введите новое имя Key", + "redis_viewer.validation.value_required": "Введите значение", + "redis_viewer.view.auto": "Auto", + "redis_viewer.view.hex": "Hex", + "redis_viewer.view.text": "Исходный текст", + "redis_viewer.view.title": "Режим просмотра", + "redis.backend.error.address_required": "Адрес подключения Redis не может быть пустым", + "redis.backend.error.argument_invalid_type": "{{name}} имеет недопустимый тип", + "redis.backend.error.argument_required": "{{name}} обязателен", "redis.backend.error.cluster_connect_failed": "Не удалось подключиться к Redis Cluster: {{detail}}", + "redis.backend.error.command_required": "Command не может быть пустым", "redis.backend.error.connect_attempt_failed": "Попытка подключения {{attempt}} завершилась ошибкой: {{detail}}", "redis.backend.error.connect_failed": "Не удалось подключиться к Redis: {{detail}}", "redis.backend.error.connect_tls_setup_failed": "Сбой настройки TLS на попытке {{attempt}}: {{detail}}", + "redis.backend.error.invalid_node_address": "Недопустимый адрес узла Redis: {{address}}", + "redis.backend.error.invalid_port": "Недопустимый порт Redis: {{address}}", + "redis.backend.error.node_address_required": "Адрес узла Redis не может быть пустым", "redis.backend.error.select_db_index_invalid": "Недопустимый индекс базы данных: {{value}}", "redis.backend.error.select_db_index_out_of_range": "Индекс базы данных должен быть в диапазоне от {{min}} до {{max}}", "redis.backend.error.select_db_index_required": "Для команды SELECT требуется индекс базы данных", @@ -7165,13 +6255,144 @@ "redis.backend.label.topology_cluster": "кластер", "redis.backend.label.topology_multi_node": "многоузловой", "redis.backend.label.topology_sentinel": "Sentinel", + "redis.backend.message.add_success": "Добавление выполнено", + "redis.backend.message.connect_success": "Подключение выполнено", + "redis.backend.message.delete_success": "Удаление выполнено", + "redis.backend.message.flush_success": "Очистка выполнена", + "redis.backend.message.rename_success": "Переименование выполнено", + "redis.backend.message.select_db_success": "База данных переключена", + "redis.backend.message.set_success": "Значение задано", + "redis.db_alias.menu.set": "Задать псевдоним", + "redis.db_alias.modal.placeholder": "напр. cache, sessions (оставьте пустым для сброса)", + "redis.db_alias.modal.title": "Псевдоним для {{db}}", + "saved_query.default_name": "Запрос {{index}}", "saved_query.error.missing_context": "В сохраненном запросе отсутствует SQL, подключение или контекст базы данных", + "security_update.action.open_ai_settings": "Настройки AI", + "security_update.action.open_connection": "Открыть подключение", + "security_update.action.open_proxy_settings": "Настройки прокси", + "security_update.action.retry_update": "Проверить снова", + "security_update.action.view_details": "Показать сведения", + "security_update.backend.issue.ai_provider.migration_required": "Конфигурация AI-провайдера все еще сохранена в текущей конфигурации приложения. После завершения безопасного обновления она будет перенесена в новое безопасное хранилище.", + "security_update.backend.issue.ai_provider.missing_or_resave": "Конфигурация AI-провайдера больше не существует или ее нужно сохранить заново перед завершением безопасного обновления.", + "security_update.backend.issue.ai_provider.secret_missing": "Для конфигурации AI-провайдера нужно добавить данные перед завершением безопасного обновления.", + "security_update.backend.issue.connection.incomplete": "Для конфигурации подключения нужно добавить данные перед завершением безопасного обновления.", + "security_update.backend.issue.connection.missing_or_resave": "Конфигурация подключения больше не существует или ее нужно сохранить заново перед завершением безопасного обновления.", + "security_update.backend.issue.connection.password_missing": "Пароль подключения потерян. Сохраните его заново перед продолжением.", + "security_update.backend.issue.global_proxy.missing_or_resave": "Настройки глобального прокси больше не существуют или их нужно сохранить заново перед завершением безопасного обновления.", + "security_update.backend.issue.global_proxy.password_incomplete": "Для пароля глобального прокси нужно добавить данные перед завершением безопасного обновления.", + "security_update.backend.issue.global_proxy.password_missing": "Пароль глобального прокси потерян. Сохраните его заново перед продолжением.", + "security_update.backend.issue.global_proxy.title": "Глобальный прокси", + "security_update.backend.issue.system.message": "Текущая среда не смогла завершить это безопасное обновление. Повторите попытку позже.", + "security_update.backend.issue.system.title": "Безопасное обновление не завершено", + "security_update.banner.action.restart_update": "Запустить обновление заново", + "security_update.banner.action.retry_check": "Проверить снова", + "security_update.banner.action.start_now": "Обновить сейчас", + "security_update.banner.action.view_details": "Показать сведения", + "security_update.banner.title": "Сохраненные конфигурации можно безопасно обновить", + "security_update.bootstrap.legacy.connection.message": "Это подключение все еще сохранено в локальной конфигурации текущего приложения. После завершения безопасного обновления оно будет перенесено в новое безопасное хранилище.", + "security_update.bootstrap.legacy.global_proxy.message": "Глобальные настройки прокси все еще сохранены в локальной конфигурации текущего приложения. После завершения безопасного обновления они будут перенесены в новое безопасное хранилище.", + "security_update.bootstrap.legacy.global_proxy.title": "Глобальный прокси", + "security_update.error.capability_unavailable": "Функция безопасного обновления недоступна", + "security_update.intro.action.details": "Показать сведения", + "security_update.intro.action.later": "Напомнить позже", + "security_update.intro.action.start_now": "Обновить сейчас", + "security_update.intro.description": "Чтобы сохраненные подключения, прокси и связанные настройки служб использовали новое безопасное хранилище, это обновление нужно один раз выполнить локально. Перед обновлением автоматически создается локальная резервная копия. Если обновление не завершится, система сохранит текущую рабочую конфигурацию, а вы сможете продолжить позже.", + "security_update.intro.subtitle": "Перед использованием нового безопасного хранилища нужно выполнить локальное обновление конфигурации.", + "security_update.intro.title": "Безопасное обновление сохраненных конфигураций", + "security_update.item_status.failed": "Ошибка", + "security_update.item_status.needs_attention": "Требует внимания", + "security_update.item_status.pending": "Ожидает обновления", + "security_update.item_status.skipped": "Пропущено", + "security_update.item_status.updated": "Обновлено", + "security_update.progress.default_detail": "Текущая рабочая конфигурация будет сохранена во время обновления. Подождите.", + "security_update.repair.warning.connection_not_found": "Соответствующее подключение не найдено. Сначала проверьте актуальный статус.", + "security_update.settings.action.close": "Закрыть", + "security_update.settings.action.restart_update": "Запустить обновление заново", + "security_update.settings.action.retry_check": "Проверить снова", + "security_update.settings.action.start": "Начать обновление", + "security_update.settings.backup_path": "Расположение резервной копии: ", + "security_update.settings.current_status": "Текущий статус: {{status}}", + "security_update.settings.empty_pending": "Ожидающих пунктов нет", + "security_update.settings.item_default_message": "Этот пункт требует дополнительной обработки перед завершением безопасного обновления.", + "security_update.settings.item_severity": "Уровень: {{severity}}", + "security_update.settings.item_status": "Статус: {{status}}", + "security_update.settings.last_error": "Последняя ошибка: ", + "security_update.settings.pending_list": "Ожидающие пункты", + "security_update.settings.recent_result": "Последний результат", + "security_update.settings.scope_title": "Область влияния", + "security_update.settings.subtitle": "Управление статусом безопасного обновления и ожидающими пунктами сохраненных конфигураций.", + "security_update.settings.summary.failed": "Ошибки", + "security_update.settings.summary.pending": "Ожидает обработки", + "security_update.settings.summary.skipped": "Пропущено", + "security_update.settings.summary.total": "Всего", + "security_update.settings.summary.updated": "Обновлено", + "security_update.settings.title": "Безопасное обновление", + "security_update.severity.high": "Высокий риск", + "security_update.severity.low": "Низкий риск", + "security_update.severity.medium": "Средний риск", + "security_update.status.completed.description": "Безопасное обновление сохраненных конфигураций завершено.", + "security_update.status.completed.label": "Завершено", + "security_update.status.in_progress.description": "Проверяется и обновляется безопасное хранилище сохраненных конфигураций.", + "security_update.status.in_progress.label": "Обновляется", + "security_update.status.needs_attention.description": "Обновление еще не завершено. Несколько конфигураций требуют внимания.", + "security_update.status.needs_attention.label": "Требует внимания", + "security_update.status.not_detected.description": "Сейчас нет безопасных обновлений, требующих внимания.", + "security_update.status.not_detected.label": "Не обнаружено", + "security_update.status.pending.description": "Доступно безопасное обновление. Можно начать сейчас или продолжить позже.", + "security_update.status.pending.label": "Ожидает обновления", + "security_update.status.postponed.description": "Это безопасное обновление отложено. Текущая рабочая конфигурация сохранена.", + "security_update.status.postponed.label": "Ожидает обновления", + "security_update.status.rolled_back.description": "Это обновление не завершено. Система сохранила текущую рабочую конфигурацию.", + "security_update.status.rolled_back.label": "Откат выполнен", + "settings.language.description": "Выберите язык интерфейса GoNavi.", + "settings.language.english": "English", + "settings.language.follow_system": "Как в системе", + "settings.language.german": "Deutsch", + "settings.language.japanese": "日本語", + "settings.language.restart_hint": "Для полного применения в некоторых редакторах и системных меню может потребоваться заново открыть окно.", + "settings.language.russian": "Русский", + "settings.language.simplified_chinese": "简体中文", + "settings.language.title": "Язык", + "settings.language.traditional_chinese": "繁體中文", + "settings.title": "Настройки", + "sidebar.action.backup_database_count": "Создать резервные копии баз данных ({{count}})", + "sidebar.action.backup_schema_data": "Резервная копия (структура + данные)", + "sidebar.action.batch_databases": "Пакетные операции с базами данных", + "sidebar.action.batch_tables": "Пакетные операции с таблицами", + "sidebar.action.cancel": "Отмена", + "sidebar.action.clear_selection": "Снять выбор со всех", + "sidebar.action.clear_tables": "Очистить таблицы", + "sidebar.action.close": "Закрыть", + "sidebar.action.continue": "Продолжить", + "sidebar.action.delete": "Удалить", + "sidebar.action.export_data_only": "Только данные (INSERT)", + "sidebar.action.export_database_schema_count": "Экспортировать структуры баз данных ({{count}})", + "sidebar.action.export_schema": "Экспортировать структуру", + "sidebar.action.invert_selection": "Инвертировать выбор", "sidebar.action.locate_current_tab": "Найти текущую вкладку", + "sidebar.action.locate_current_table": "Найти текущую открытую таблицу", + "sidebar.action.new_group": "Новая группа", + "sidebar.action.pin_table": "Закрепить таблицу", + "sidebar.action.select_all": "Выбрать все", + "sidebar.action.unpin_table": "Открепить таблицу", + "sidebar.active_connection.actions": "Действия с подключением", + "sidebar.active_connection.current_host_database": "Текущий Host и база данных", + "sidebar.active_connection.no_database_selected": "База данных не выбрана", + "sidebar.active_connection.no_host_selected": "Host не выбран", "sidebar.ai_prompt.explain.detail": "Особо опишите значения полей, первичные ключи/индексы, возможные связи, типовые сценарии запросов и риски.", "sidebar.ai_prompt.explain.intro": "Объясните структуру и бизнес-смысл таблицы {{table}}.", "sidebar.ai_prompt.query.detail": "Включите: запрос предварительного просмотра данных, запрос с фильтрацией по ключевым полям и один агрегирующий или статистический запрос.", "sidebar.ai_prompt.query.intro": "Создайте 3 распространенных SQL-запроса для таблицы {{table}}.", "sidebar.aria.switch_connection": "Переключиться на подключение {{name}}", + "sidebar.badge.recommended": "Рекомендуется", + "sidebar.batch_databases": "Пакетные базы данных", + "sidebar.batch_tables": "Пакетные таблицы", + "sidebar.batch.filtered_count": "Показано объектов: {{filtered}} / {{total}}", + "sidebar.batch.group.tables": "Таблицы", + "sidebar.batch.group.views": "Представления", + "sidebar.batch.no_matching_objects": "Нет подходящих объектов", + "sidebar.batch.selected_databases": "Выбрано баз данных: {{selected}} / {{total}}", + "sidebar.batch.selected_objects": "Выбрано объектов: {{selected}} / {{total}}", "sidebar.command_search.action.ask_ai.title": "Спросить AI", "sidebar.command_search.action.new_connection.meta": "Создать подключение к базе данных, среде выполнения или другому источнику данных", "sidebar.command_search.action.new_connection.title": "Новый источник данных", @@ -7187,49 +6408,480 @@ "sidebar.command_search.footer.navigate": "Навигация", "sidebar.command_search.footer.object_only": "Только объекты таблиц", "sidebar.command_search.footer.select": "Выбрать", + "sidebar.command_search.label": "Искать таблицы, подключения, действия", + "sidebar.command_search.no_filter_content": "Нет текста фильтра", + "sidebar.command_search.no_synced_filter": "Нет синхронизированного фильтра боковой панели", + "sidebar.command_search.object_kind.all": "Все", + "sidebar.command_search.object_kind.events": "События", + "sidebar.command_search.object_kind.filter_aria": "Фильтр объектов", + "sidebar.command_search.object_kind.routines": "Подпрограммы", + "sidebar.command_search.object_kind.tables": "Таблицы", + "sidebar.command_search.object_kind.views": "Представления", + "sidebar.command_search.placeholder": "Искать таблицы, подключения, действия... или спросить AI", "sidebar.command_search.recent_sql_fallback": "Запись SQL", + "sidebar.command_search.reset_filter": "Сбросить фильтр боковой панели", + "sidebar.command_search.scope.compact_smart": "Умно", + "sidebar.command_search.scope.database": "База данных", + "sidebar.command_search.scope.description": "\"Умный\" автоматически подбирает наиболее вероятные совпадения; ручной режим позволяет комбинировать измерения фильтрации.", + "sidebar.command_search.scope.host": "Host", + "sidebar.command_search.scope.manual_help": "Умный режим взаимоисключается с другими пунктами. Если точно известно, что нужно искать объекты, базы данных, Host или теги, переключитесь на ручную область, чтобы уменьшить шум в результатах.", + "sidebar.command_search.scope.manual_title": "Ручная область", + "sidebar.command_search.scope.multi_select": "Можно выбрать несколько", + "sidebar.command_search.scope.object": "Объекты таблиц", + "sidebar.command_search.scope.recommended": "Рекомендуется", + "sidebar.command_search.scope.smart": "Умный", + "sidebar.command_search.scope.smart_help": "Подходит для ежедневного поиска: автоматически охватывает имена, базы данных, Host и теги.", + "sidebar.command_search.scope.summary_smart": "Умный", + "sidebar.command_search.scope.tag": "Теги", + "sidebar.command_search.scope.title": "Область поиска", + "sidebar.command_search.scope.tooltip": "Область поиска: {{scope}}", "sidebar.command_search.section.actions": "Действия", "sidebar.command_search.section.ai": "AI · Вопрос", "sidebar.command_search.section.goto": "Перейти", "sidebar.command_search.section.recent": "Недавние запросы", + "sidebar.command_search.sync_to_filter_aria": "Синхронизировать с левым фильтром", + "sidebar.command_search.sync_to_filter_tooltip": "Синхронизировать ввод с левым фильтром", + "sidebar.copy_object_name.copied": "{{label}} скопировано в буфер обмена", + "sidebar.copy_object_name.empty": "{{label}} пусто, копирование невозможно", + "sidebar.copy_object_name.failed": "Не удалось скопировать {{label}}: {{error}}", + "sidebar.copy_object_name.label.event": "Имя события", + "sidebar.copy_object_name.label.materialized_view": "Имя материализованного представления", + "sidebar.copy_object_name.label.table": "Имя таблицы", + "sidebar.copy_object_name.label.view": "Имя представления", + "sidebar.error.unknown": "Неизвестная ошибка", + "sidebar.external_sql_modal.action.create": "Создать", + "sidebar.external_sql_modal.action.rename": "Переименовать", + "sidebar.external_sql_modal.field.directory_name": "Имя каталога", + "sidebar.external_sql_modal.field.sql_file_name": "Имя SQL-файла", + "sidebar.external_sql_modal.help.directory": "Каталог отображается только в дереве внешних SQL-каталогов; файлы не SQL по-прежнему скрыты", + "sidebar.external_sql_modal.help.sql_file": "Если суффикс .sql не указан, он будет добавлен автоматически", + "sidebar.external_sql_modal.placeholder.directory_name": "Например: reports", + "sidebar.external_sql_modal.placeholder.sql_file_name": "Например: report.sql", + "sidebar.external_sql_modal.title.create_directory": "Создать каталог", + "sidebar.external_sql_modal.title.create_file": "Создать SQL-файл", + "sidebar.external_sql_modal.title.rename_directory": "Переименовать каталог", + "sidebar.external_sql_modal.title.rename_file": "Переименовать SQL-файл", + "sidebar.external_sql_modal.validation.directory_name_no_separator": "Имя каталога не должно содержать разделители пути", + "sidebar.external_sql_modal.validation.directory_name_required": "Введите имя каталога", + "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "Имя файла не должно содержать разделители пути", + "sidebar.external_sql_modal.validation.sql_file_name_required": "Введите имя SQL-файла", + "sidebar.external_sql.directory_fallback": "SQL-каталог", + "sidebar.external_sql.root": "Внешние SQL-файлы", + "sidebar.field.database_name": "Имя базы данных", + "sidebar.field.new_database_name": "Новое имя базы данных", + "sidebar.field.new_table_name": "Новое имя таблицы", + "sidebar.field.new_view_name": "Новое имя представления", + "sidebar.field.schema_name": "Имя schema", + "sidebar.field.select_connection": "Подключение", + "sidebar.field.select_connections": "Выберите подключения", + "sidebar.field.select_database": "База данных", + "sidebar.field.tag_name": "Имя группы", + "sidebar.filter.all_objects": "Все объекты", + "sidebar.filter.scope_all": "Применить выбор к: всем объектам", + "sidebar.filter.scope_filtered": "Применить выбор к: текущим результатам фильтрации", + "sidebar.filter.tables_only": "Только таблицы", + "sidebar.filter.views_only": "Только представления", + "sidebar.jvm.action.diagnostic": "Расширенная диагностика", + "sidebar.jvm.action.monitoring": "Непрерывный мониторинг", + "sidebar.jvm.tab.audit": "Аудит JVM", + "sidebar.jvm.tab.diagnostic": "Диагностика JVM", + "sidebar.jvm.tab.monitoring": "Мониторинг JVM", + "sidebar.jvm.tab.overview": "Обзор JVM", + "sidebar.jvm.tab.resource": "Ресурсы JVM", + "sidebar.locate.object.materialized_view": "Материализованное представление", + "sidebar.locate.object.routine": "Функция/процедура", + "sidebar.locate.object.table": "Таблица", + "sidebar.locate.object.trigger": "Триггер", + "sidebar.locate.object.view": "Представление", + "sidebar.menu.add_sql_directory": "Добавить SQL-каталог", + "sidebar.menu.backup_all_tables_sql": "Создать резервную копию всех таблиц (схема + данные SQL)", "sidebar.menu.backup_current_schema_sql": "Создать резервную копию всех таблиц текущей schema (структура и данные SQL)", + "sidebar.menu.backup_table_sql": "Создать резервную копию таблицы (SQL)", "sidebar.menu.bind_to_connection": "Привязать к подключению", + "sidebar.menu.browse_keys": "Просмотреть ключи", + "sidebar.menu.browse_materialized_view_data": "Просмотреть данные материализованного представления", + "sidebar.menu.browse_view_data": "Просмотреть данные представления", + "sidebar.menu.clear_table": "Очистить таблицу", + "sidebar.menu.close_database": "Закрыть базу данных", "sidebar.menu.copy_object_name": "Копировать имя", "sidebar.menu.copy_table_name": "Копировать имя таблицы", + "sidebar.menu.copy_table_structure": "Копировать структуру таблицы", + "sidebar.menu.create_database": "Новая база данных", "sidebar.menu.create_event": "Новое событие", + "sidebar.menu.create_function": "Новая функция", + "sidebar.menu.create_procedure": "Новая процедура", + "sidebar.menu.create_table": "Новая таблица", + "sidebar.menu.create_view": "Новое представление", + "sidebar.menu.danger_operations": "Опасные операции", + "sidebar.menu.delete_connection": "удалить подключение", + "sidebar.menu.delete_database": "Удалить базу данных", + "sidebar.menu.delete_local_directory": "Удалить локальный каталог", + "sidebar.menu.delete_query": "Удалить запрос", + "sidebar.menu.delete_routine": "Удалить {{type}}", "sidebar.menu.delete_schema": "Удалить schema", + "sidebar.menu.delete_sql_directory": "Удалить каталог", + "sidebar.menu.delete_sql_file": "Удалить SQL-файл", + "sidebar.menu.delete_table": "Удалить таблицу", + "sidebar.menu.delete_tag": "Удалить группу", + "sidebar.menu.delete_view": "Удалить представление", + "sidebar.menu.design_table": "Проектировать таблицу", + "sidebar.menu.disconnect": "Отключить", + "sidebar.menu.duplicate_connection": "Дублировать подключение", + "sidebar.menu.edit_connection": "изменить подключение", + "sidebar.menu.edit_definition": "Редактировать определение", "sidebar.menu.edit_schema": "Редактировать schema", + "sidebar.menu.edit_tag": "Изменить группу", + "sidebar.menu.edit_view": "Редактировать представление", + "sidebar.menu.export_all_table_schema_sql": "Экспортировать структуру всех таблиц в SQL", + "sidebar.menu.export_csv": "Экспортировать CSV", "sidebar.menu.export_current_schema_sql": "Экспортировать структуру таблиц текущей schema (SQL)", + "sidebar.menu.export_html": "Экспортировать HTML", + "sidebar.menu.export_json": "Экспортировать JSON", + "sidebar.menu.export_markdown": "Экспортировать Markdown", + "sidebar.menu.export_table_data": "Экспортировать данные таблицы", + "sidebar.menu.export_xlsx": "Экспортировать XLSX", + "sidebar.menu.materialized_view_definition": "Определение материализованного представления", + "sidebar.menu.move_out_of_tag": "Убрать из группы", + "sidebar.menu.move_to_tag": "Переместить в группу", + "sidebar.menu.new_command_window": "Новое командное окно", + "sidebar.menu.new_query": "Новый запрос", + "sidebar.menu.new_sql_directory": "Создать каталог", + "sidebar.menu.new_sql_directory_in_directory": "Создать каталог в этом каталоге", + "sidebar.menu.new_sql_file": "Создать SQL-файл", + "sidebar.menu.new_sql_file_in_directory": "Создать SQL-файл в этом каталоге", "sidebar.menu.new_table": "Новая таблица", + "sidebar.menu.open_query": "Открыть запрос", + "sidebar.menu.open_sql_file": "Открыть SQL-файл", + "sidebar.menu.redis_monitor": "Redis мониторинг", + "sidebar.menu.refresh": "Обновить", + "sidebar.menu.refresh_directory": "Обновить каталог", + "sidebar.menu.remove_directory": "Удалить каталог", + "sidebar.menu.rename_database": "Переименовать базу данных", + "sidebar.menu.rename_query": "Переименовать запрос", + "sidebar.menu.rename_sql_directory": "Переименовать каталог", + "sidebar.menu.rename_sql_file": "Переименовать SQL-файл", + "sidebar.menu.rename_table": "Переименовать таблицу", + "sidebar.menu.rename_view": "Переименовать представление", + "sidebar.menu.sort_by_frequency": "Сортировать по частоте использования", + "sidebar.menu.sort_by_name": "Сортировать по имени", "sidebar.menu.table_structure": "Структура таблицы", + "sidebar.menu.truncate_table": "Усечь таблицу", + "sidebar.menu.view_definition": "Определение представления", + "sidebar.menu.view_object_definition": "Показать определение", + "sidebar.menu.view_routine_definition": "Показать определение", + "sidebar.message.add_sql_directory_database_required": "Выберите базу данных перед добавлением SQL-каталога.", "sidebar.message.ai_table_context_missing": "У текущей таблицы нет контекста подключения, поэтому ее нельзя отправить AI.", + "sidebar.message.backing_up_database": "Создается резервная копия базы данных {{database}}...", + "sidebar.message.backing_up_selected_objects": "Создается резервная копия выбранных объектов: {{count}}...", + "sidebar.message.backing_up_selected_tables": "Создается резервная копия выбранных таблиц: {{count}}...", + "sidebar.message.clear_failed": "Ошибка очистки: {{error}}", + "sidebar.message.clear_success": "Очистка завершена.", + "sidebar.message.clearing_selected_tables": "Очищаются выбранные таблицы: {{count}}...", + "sidebar.message.connection_config_not_found": "Конфигурация подключения не найдена.", + "sidebar.message.connection_deleted": "Подключение удалено.", + "sidebar.message.connection_failed": "Ошибка подключения: {{error}}", "sidebar.message.connection_release_failed": "Не удалось освободить подключение", "sidebar.message.connection_release_failed_from_sidebar": "Подключение отключено из боковой панели, но backend не смог освободить подключение", + "sidebar.message.create_failed": "Не удалось создать: {{error}}", + "sidebar.message.create_sql_directory_failed": "Не удалось создать каталог: {{error}}", + "sidebar.message.create_sql_file_failed": "Не удалось создать SQL-файл: {{error}}", + "sidebar.message.database_closed": "База данных закрыта.", + "sidebar.message.database_created": "База данных создана.", + "sidebar.message.database_deleted": "База данных удалена.", + "sidebar.message.database_export_failed": "Не удалось экспортировать {{database}}: {{error}}", + "sidebar.message.database_export_success": "{{database}} экспортирована.", + "sidebar.message.database_name_required": "Введите имя базы данных.", + "sidebar.message.database_name_unchanged": "Имя базы данных не изменилось.", + "sidebar.message.database_renamed": "База данных переименована.", + "sidebar.message.delete_connection_backend_unavailable": "Удаление подключений недоступно в этой сборке.", + "sidebar.message.delete_connection_failed": "Не удалось удалить подключение.", + "sidebar.message.delete_failed": "Не удалось удалить: {{error}}", + "sidebar.message.delete_sql_directory_failed": "Не удалось удалить SQL-каталог: {{error}}", + "sidebar.message.delete_sql_file_failed": "Не удалось удалить SQL-файл: {{error}}", + "sidebar.message.disconnected": "Отключено.", + "sidebar.message.duplicate_backend_unavailable": "Дублирование подключений недоступно в этой сборке.", + "sidebar.message.duplicate_empty_result": "Дублированное подключение не было возвращено.", + "sidebar.message.duplicate_failed": "Не удалось дублировать подключение.", + "sidebar.message.duplicated_connection": "Подключение {{name}} продублировано.", + "sidebar.message.export_failed": "Ошибка экспорта: {{error}}", + "sidebar.message.export_success": "Экспорт выполнен.", + "sidebar.message.export_success_skipped_views": "Экспорт завершен. Представления пропущены при экспорте данных: {{count}}.", + "sidebar.message.export_tables_same_database_required": "Выберите таблицы из одной базы данных.", + "sidebar.message.exporting_database_backup": "Создается резервная копия {{database}} (структура и данные)...", + "sidebar.message.exporting_database_schema": "Экспортируется структура базы данных {{database}}...", + "sidebar.message.exporting_schema_backup": "Создается резервная копия схемы {{schema}} (структура и данные)...", + "sidebar.message.exporting_schema_structure": "Экспортируется структура схемы {{schema}}...", + "sidebar.message.exporting_selected_object_data": "Экспортируются данные {{format}} для выбранных объектов: {{count}}...", + "sidebar.message.exporting_selected_object_schema": "Экспортируется структура выбранных объектов: {{count}}...", + "sidebar.message.exporting_selected_table_schema": "Экспортируется структура выбранных таблиц: {{count}}...", + "sidebar.message.exporting_table_format": "Экспорт {{table}} в формате {{format}}...", + "sidebar.message.external_sql_directory_added": "SQL-каталог добавлен.", + "sidebar.message.external_sql_directory_context_missing": "Контекст SQL-каталога отсутствует.", + "sidebar.message.external_sql_directory_delete_target_missing": "SQL-каталог для удаления не найден.", + "sidebar.message.external_sql_directory_not_found": "SQL-каталог не найден.", + "sidebar.message.external_sql_directory_parent_missing": "Не найдено место для создания каталога.", + "sidebar.message.external_sql_directory_read_failed": "Не удалось прочитать SQL-каталог {{name}}: {{error}}", + "sidebar.message.external_sql_directory_refreshed": "SQL-каталог обновлен.", + "sidebar.message.external_sql_directory_removed": "SQL-каталог удален.", + "sidebar.message.external_sql_directory_rename_sync_failed": "Каталог переименован, но список внешних SQL-каталогов не удалось синхронизировать. Добавьте каталог заново.", + "sidebar.message.external_sql_directory_rename_target_missing": "Не найден каталог для переименования.", + "sidebar.message.external_sql_file_delete_target_missing": "SQL-файл для удаления не найден.", + "sidebar.message.external_sql_file_parent_missing": "Не найден каталог для создания SQL-файла.", + "sidebar.message.external_sql_file_rename_target_missing": "Не найден SQL-файл для переименования.", + "sidebar.message.jvm_provider_probe_exception": "Проверка провайдеров JVM завершилась ошибкой: {{error}}", + "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "Во время проверки JVM Provider возникло исключение: {{error}}. Вход в режим расширенной диагностики остается доступным.", + "sidebar.message.jvm_provider_probe_failed": "Не удалось проверить провайдеры JVM: {{error}}", + "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "Не удалось проверить JVM Provider: {{error}}. Вход в режим расширенной диагностики остается доступным.", + "sidebar.message.jvm_resources_backend_unavailable": "Просмотр ресурсов JVM недоступен в этой сборке.", + "sidebar.message.load_database_list_failed": "Не удалось загрузить базы данных: {{error}}", + "sidebar.message.load_jvm_resources_failed": "Не удалось загрузить ресурсы JVM: {{error}}", + "sidebar.message.load_table_list_failed": "Не удалось загрузить таблицы: {{error}}", + "sidebar.message.load_tables_failed": "Не удалось загрузить объекты: {{error}}", + "sidebar.message.locate_connection_not_found_for_object": "Подключение для текущего объекта не найдено", + "sidebar.message.locate_connection_not_in_tree": "Текущее подключение не найдено в левом дереве", "sidebar.message.locate_current_tab_unavailable": "В текущей вкладке нет содержимого, которое можно найти", + "sidebar.message.locate_current_table_unavailable": "В текущей вкладке нет таблицы, которую можно найти", + "sidebar.message.locate_database_loading": "Узел базы данных ещё загружается: {{database}}. Повторите попытку позже", + "sidebar.message.locate_database_not_found": "База данных не найдена в левом дереве: {{database}}", + "sidebar.message.locate_external_sql_file_not_found": "SQL-файл не найден во внешних SQL-каталогах: {{path}}", + "sidebar.message.locate_object_loading": "Объекты базы данных для {{object}} в {{database}} ещё загружаются. Повторите попытку позже", + "sidebar.message.locate_object_not_found": "{{object}} не найден в левом дереве: {{name}}. Обновите узел базы данных и повторите попытку", "sidebar.message.message_publish_success": "Тестовое сообщение отправлено в {{destination}}", "sidebar.message.message_publish_success_with_count": "Тестовое сообщение отправлено в {{destination}} (отправлено {{count}})", "sidebar.message.message_publish_target_fallback": "цель", "sidebar.message.message_publish_unsupported": "Текущий объект не поддерживает тестовую отправку сообщений", + "sidebar.message.no_visible_databases": "Видимые базы данных или схемы не возвращены. Проверьте права учетной записи или обновите через контекстное меню.", + "sidebar.message.operation_create_failed": "Не удалось создать: {{error}}", + "sidebar.message.operation_drop_failed": "Не удалось удалить: {{error}}", + "sidebar.message.operation_rename_failed": "Не удалось переименовать: {{error}}", + "sidebar.message.read_file_failed": "Не удалось прочитать файл: {{error}}", + "sidebar.message.read_sql_file_failed": "Не удалось прочитать SQL-файл: {{error}}", + "sidebar.message.rename_failed": "Не удалось переименовать: {{error}}", + "sidebar.message.rename_sql_directory_failed": "Не удалось переименовать каталог: {{error}}", + "sidebar.message.rename_sql_file_failed": "Не удалось переименовать SQL-файл: {{error}}", + "sidebar.message.routine_deleted": "{{type}} удалена.", "sidebar.message.saved_query_delete_failed": "Не удалось удалить запрос: {{error}}", + "sidebar.message.saved_query_deleted": "Запрос удален.", + "sidebar.message.saved_query_name_unchanged": "Имя запроса не изменилось.", "sidebar.message.saved_query_rebind_failed": "Не удалось привязать запрос: {{error}}", "sidebar.message.saved_query_rebind_success": "Запрос привязан к {{name}}", "sidebar.message.saved_query_rename_failed": "Не удалось переименовать запрос: {{error}}", + "sidebar.message.saved_query_renamed": "Запрос переименован.", + "sidebar.message.schema_create_unsupported": "Эта база данных не поддерживает создание schema.", + "sidebar.message.schema_created": "schema создана.", "sidebar.message.schema_deleted": "schema удалена.", "sidebar.message.schema_edit_unsupported": "Текущий узел не поддерживает редактирование schema через этот вход.", + "sidebar.message.schema_export_target_missing": "Целевая схема не найдена, экспорт невозможен.", "sidebar.message.schema_name_unchanged": "Имя schema не изменилось.", "sidebar.message.schema_renamed": "schema переименована.", "sidebar.message.schema_target_delete_missing": "Не найдена целевая schema для удаления.", "sidebar.message.schema_target_edit_missing": "Не найдена целевая schema для редактирования.", + "sidebar.message.schema_target_missing": "Выберите базу данных для создания schema.", + "sidebar.message.select_connection_or_database_first": "Сначала выберите подключение или базу данных.", + "sidebar.message.select_database_required": "Выберите хотя бы одну базу данных.", + "sidebar.message.select_host_before_large_sql_file": "Выберите Host перед запуском большого SQL-файла.", + "sidebar.message.select_object_required": "Выберите хотя бы один объект.", + "sidebar.message.select_sql_directory_failed": "Не удалось выбрать SQL-каталог: {{error}}", + "sidebar.message.sidebar_filter_reset": "Фильтр боковой панели сброшен.", + "sidebar.message.sidebar_filter_sync_disabled": "Синхронизация левого фильтра отключена.", + "sidebar.message.sidebar_filter_sync_enabled": "Синхронизация левого фильтра включена.", + "sidebar.message.sphinx_unsupported_objects": "Этот экземпляр Sphinx не предоставляет следующие возможности объектов: {{objects}}. Применен режим совместимости.", + "sidebar.message.sql_directory_created": "Каталог создан.", + "sidebar.message.sql_directory_deleted": "SQL-каталог удален.", + "sidebar.message.sql_directory_name_required": "Имя каталога обязательно.", + "sidebar.message.sql_directory_path_invalid": "Путь к SQL-каталогу недействителен.", + "sidebar.message.sql_directory_renamed": "Каталог переименован.", + "sidebar.message.sql_file_context_incomplete": "Контекст SQL-файла неполный.", + "sidebar.message.sql_file_created": "SQL-файл создан.", + "sidebar.message.sql_file_deleted": "SQL-файл удален.", + "sidebar.message.sql_file_name_required": "Имя SQL-файла обязательно.", + "sidebar.message.sql_file_path_incomplete": "Путь к SQL-файлу неполный, открыть файл невозможно.", + "sidebar.message.sql_file_renamed": "SQL-файл переименован.", + "sidebar.message.table_data_action_failed": "{{action}} завершилось ошибкой: {{error}}", + "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", + "sidebar.message.table_data_action_success": "{{action}} завершено.", + "sidebar.message.table_deleted": "Таблица удалена.", + "sidebar.message.table_name_required": "Введите имя таблицы.", + "sidebar.message.table_name_unchanged": "Имя таблицы не изменилось.", + "sidebar.message.table_pinned": "Таблица закреплена", + "sidebar.message.table_renamed": "Таблица переименована.", + "sidebar.message.table_structure_copied": "Структура таблицы скопирована.", + "sidebar.message.table_unpinned": "Таблица откреплена", + "sidebar.message.view_deleted": "Представление удалено.", + "sidebar.message.view_name_required": "Введите имя представления.", + "sidebar.message.view_name_unchanged": "Имя представления не изменилось.", + "sidebar.message.view_renamed": "Представление переименовано.", + "sidebar.message.visual_new_table_unsupported": "Этот источник данных пока не поддерживает визуальное создание таблиц.", + "sidebar.modal.batch_databases.description": "Пакетно экспортируйте структуру по базам данных или создавайте резервные копии со структурой и данными.", + "sidebar.modal.batch_databases.selection_hint": "После выбора подключения будет загружен список баз данных, доступных для пакетного экспорта в этом подключении.", + "sidebar.modal.batch_databases.title": "Пакетные операции с базами данных", + "sidebar.modal.batch_tables.description": "Пакетно экспортируйте структуру, данные или полные резервные копии для объектов.", + "sidebar.modal.batch_tables.selection_hint": "Сначала выберите подключение и базу данных, затем определите диапазон экспорта и целевые объекты.", + "sidebar.modal.batch_tables.title": "Пакетные операции с объектами", + "sidebar.modal.confirm_clear_selected_tables.content": "Очистить данные выбранных объектов в {{connection}} / {{database}}? Это действие нельзя отменить.", + "sidebar.modal.confirm_clear_selected_tables.title": "Подтвердите очистку выбранных таблиц", + "sidebar.modal.confirm_delete_connection.content": "Удалить {{name}}?", + "sidebar.modal.confirm_delete_database.content": "Удалить {{name}}? Это действие нельзя отменить.", + "sidebar.modal.confirm_delete_database.title": "Удалить базу данных", + "sidebar.modal.confirm_delete_routine.content": "Удалить {{type}} {{name}}? Это действие нельзя отменить.", + "sidebar.modal.confirm_delete_routine.title": "Удалить {{type}}", + "sidebar.modal.confirm_delete_saved_query.content": "Удалить сохраненный запрос \"{{name}}\"? Это действие нельзя отменить.", "sidebar.modal.confirm_delete_schema.content": "Удалить schema {{name}}? schema и все объекты внутри будут удалены. Это действие нельзя отменить.", "sidebar.modal.confirm_delete_schema.title": "Удалить schema", + "sidebar.modal.confirm_delete_sql_directory.content": "Удалить \"{{name}}\"? Это удалит локальный каталог с диска; удалить можно только пустой каталог.", + "sidebar.modal.confirm_delete_sql_directory.title": "Удалить SQL-каталог", + "sidebar.modal.confirm_delete_sql_file.content": "Удалить \"{{name}}\"? Это удалит локальный файл с диска без возможности восстановления.", + "sidebar.modal.confirm_delete_sql_file.title": "Удалить SQL-файл", + "sidebar.modal.confirm_delete_table.content": "Удалить {{name}}? Это действие нельзя отменить.", + "sidebar.modal.confirm_delete_table.title": "Удалить таблицу", + "sidebar.modal.confirm_delete_tag.content": "Удалить группу \"{{name}}\"? Подключения внутри нее не будут удалены.", + "sidebar.modal.confirm_delete_view.content": "Удалить {{name}}? Это действие нельзя отменить.", + "sidebar.modal.confirm_delete_view.title": "Удалить представление", + "sidebar.modal.confirm_delete.title": "Подтвердите удаление", + "sidebar.modal.confirm_table_data_action.content": "Выполнить {{action}} для {{table}}? Это действие нельзя отменить.", + "sidebar.modal.confirm_table_data_action.title": "Подтвердите {{action}}", + "sidebar.modal.create_database.title": "Создать базу данных", + "sidebar.modal.rename_database.title": "Переименовать базу данных: {{name}}", "sidebar.modal.rename_schema.title": "Редактировать schema: {{name}}", + "sidebar.modal.rename_table.title": "Переименовать таблицу: {{name}}", + "sidebar.modal.rename_view.title": "Переименовать представление: {{name}}", + "sidebar.modal.tag.create_description": "Создайте группу для организации подключений.", + "sidebar.modal.tag.create_title": "Создать группу", + "sidebar.modal.tag.edit_description": "Обновите имя группы и входящие в нее подключения.", + "sidebar.modal.tag.edit_title": "Изменить группу", + "sidebar.object_group.events": "События", + "sidebar.object_group.materialized_views": "Материализованные представления", + "sidebar.object_group.routines": "Функции и процедуры", + "sidebar.object_group.tables": "Таблицы", + "sidebar.object_group.triggers": "Триггеры", + "sidebar.object_group.views": "Представления", + "sidebar.object.function": "Функция", + "sidebar.object.procedure": "Процедура", + "sidebar.object.view": "Представление", + "sidebar.placeholder.filter_table_view": "Фильтр таблиц и представлений", + "sidebar.placeholder.select_connection": "Выберите подключение", + "sidebar.placeholder.select_connection_first": "Сначала выберите подключение", + "sidebar.placeholder.tag_name": "Имя группы", + "sidebar.punctuation.list_separator": ", ", + "sidebar.rail.object_actions": "Быстрые действия в области объектов", + "sidebar.rail.system_actions": "Системные действия", + "sidebar.search.manual_scope": "Ручная область", + "sidebar.search.multi_select_supported": "Можно выбрать несколько областей", + "sidebar.search.placeholder": "Поиск...", + "sidebar.search.scope_description": "Выберите, где должен искать сайдбар.", + "sidebar.search.scope_hint": "В умном режиме поиск учитывает контекст и ищет по именам, хостам, базам данных и объектам.", + "sidebar.search.scope_title": "Область поиска", + "sidebar.search.scope_tooltip": "Текущая область поиска: {{scope}}", + "sidebar.search.scope.database": "База данных", + "sidebar.search.scope.host": "Хост", + "sidebar.search.scope.object": "Объект", + "sidebar.search.scope.smart": "Умный", + "sidebar.search.scope.smart_description": "Автоматически сужает поиск по выбранному узлу.", + "sidebar.search.scope.smart_short": "Умный", + "sidebar.search.scope.tag": "Тег", + "sidebar.sql_directory.default_name": "SQL-каталог", + "sidebar.sql_file_exec.cancel": "Отменить выполнение", + "sidebar.sql_file_exec.executed_label": "Выполнено: ", + "sidebar.sql_file_exec.file_size": "Размер файла: ", + "sidebar.sql_file_exec.rows_separator": " строк | Ошибок: ", + "sidebar.sql_file_exec.rows_suffix": " строк", + "sidebar.sql_file_exec.status_label": "Статус: ", + "sidebar.sql_file_exec.status.cancelled": "Отменено", + "sidebar.sql_file_exec.status.done": "Готово", + "sidebar.sql_file_exec.status.error": "Ошибка", + "sidebar.sql_file_exec.status.running": "Выполняется", + "sidebar.sql_file_exec.title": "Запустить внешний SQL-файл", + "sidebar.sql_file.default_name": "SQL-файл", + "sidebar.sql_template.duckdb_macro_hint": "Используйте SQL Macro для поведения, похожего на функцию", + "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB пока не поддерживает хранимые процедуры", + "sidebar.sql_template.edit_routine": "Изменить {{type}} {{name}}", + "sidebar.sql_template.edit_view": "Изменить представление {{name}}", + "sidebar.sql_template.modify_then_execute": "Изменить и выполнить", + "sidebar.status.pinned": "Закреплено", + "sidebar.tab.create_function": "Новая функция", + "sidebar.tab.create_procedure": "Новая процедура", + "sidebar.tab.create_view": "Новое представление", + "sidebar.tab.design_table": "Проектирование таблицы ({{table}})", + "sidebar.tab.edit_event": "Изменить событие: {{name}}", + "sidebar.tab.edit_routine": "Изменить {{type}}: {{name}}", + "sidebar.tab.edit_view": "Изменить представление: {{name}}", + "sidebar.tab.event": "Событие: {{name}}", + "sidebar.tab.materialized_view_definition": "Материализованное представление: {{name}}", "sidebar.tab.new_event": "Новое событие", + "sidebar.tab.new_query": "Новый запрос", + "sidebar.tab.new_query_database": "Новый запрос ({{database}})", + "sidebar.tab.new_table": "Новая таблица - {{database}}", "sidebar.tab.recent_query": "Недавний запрос", + "sidebar.tab.redis_command": "Команда - {{database}}", + "sidebar.tab.redis_monitor": "Мониторинг - {{database}}", + "sidebar.tab.routine_definition": "{{type}}: {{name}}", + "sidebar.tab.table_overview": "Обзор таблицы - {{database}}{{schema}}", + "sidebar.tab.table_structure": "Структура таблицы ({{table}})", + "sidebar.tab.trigger": "Триггер: {{name}}", + "sidebar.tab.view_definition": "Представление: {{name}}", + "sidebar.table_action.clear.label": "Очистить таблицу", + "sidebar.table_action.clear.progress": "Очищается", + "sidebar.table_action.truncate.label": "Очистить таблицу через TRUNCATE", + "sidebar.table_action.truncate.progress": "Выполняется TRUNCATE", + "sidebar.table_folder.columns": "Столбцы", + "sidebar.table_folder.foreign_keys": "Внешние ключи", + "sidebar.table_folder.indexes": "Индексы", + "sidebar.table_folder.triggers": "Триггеры", + "sidebar.tree.all_saved_queries": "Все сохраненные запросы", + "sidebar.tree.default_database": "База данных по умолчанию", + "sidebar.tree.default_schema": "Схема по умолчанию", + "sidebar.tree.saved_queries": "Сохраненные запросы", + "sidebar.tree.unknown_connection": "Неизвестное подключение", + "sidebar.tree.unmatched_saved_queries": "Несопоставленные", + "sidebar.tree.untitled_query": "Запрос без имени", + "sidebar.v2_database_menu.backup_all_tables_sql": "Резервная копия всех таблиц · схема + данные SQL", + "sidebar.v2_database_menu.export_all_table_schema_sql": "Экспортировать схемы всех таблиц · SQL", + "sidebar.v2_database_menu.export_backup_section": "Экспорт и резервное копирование", + "sidebar.v2_database_menu.meta": "{{dialect}} · Действия с базой данных", + "sidebar.v2_database_menu.new_external_catalog": "Новый внешний Catalog", + "sidebar.v2_database_menu.new_materialized_view": "Новое материализованное представление", + "sidebar.v2_database_menu.new_schema": "Новая schema", + "sidebar.v2_database_menu.refresh_object_tree": "Обновить дерево объектов", "sidebar.v2_schema_menu.backup_current_schema_sql": "Резервная копия всех таблиц текущей схемы · схема + данные", "sidebar.v2_schema_menu.delete_schema_cascade": "Удалить схему · DROP CASCADE", "sidebar.v2_schema_menu.edit_schema": "Редактировать схему", "sidebar.v2_schema_menu.export_current_schema_sql": "Экспортировать структуры таблиц текущей схемы · SQL", "sidebar.v2_schema_menu.meta": "{{database}} · Действия со схемой", + "sidebar.v2_table_group_menu.current_database": "Текущая база данных", + "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} таблиц · сортировка по {{sort}}", + "sidebar.v2_table_group_menu.sort_frequency": "частоте использования", + "sidebar.v2_table_group_menu.sort_name": "имени", + "sidebar.v2_table_group_menu.title": "Таблицы", + "sidebar.v2_table_menu.ai_explain_table": "Объяснить эту таблицу с помощью AI", + "sidebar.v2_table_menu.ai_generate_query": "Сгенерировать запрос с помощью AI", + "sidebar.v2_table_menu.backup_sql_dump": "Резервная копия · {{keyword}}", + "sidebar.v2_table_menu.copy_section": "Копировать", + "sidebar.v2_table_menu.copy_table_as_insert": "Копировать всю таблицу как {{keyword}}", + "sidebar.v2_table_menu.copy_table_name": "Копировать имя таблицы", + "sidebar.v2_table_menu.design_table_detail": "столбцы / индексы / внешние ключи", + "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", + "sidebar.v2_table_menu.maintenance_section": "Обслуживание", + "sidebar.v2_table_menu.meta.idle": "Нажмите обновить, чтобы загрузить статистику", + "sidebar.v2_table_menu.meta.loading": "Загрузка статистики таблицы...", + "sidebar.v2_table_menu.meta.rows": "{{count}} строк", + "sidebar.v2_table_menu.meta.rows_empty": "— строк", + "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} данные · {{indexes}} индексы", + "sidebar.v2_table_menu.meta.unavailable": "Статистика таблицы недоступна", + "sidebar.v2_table_menu.metadata_section": "Метаданные", + "sidebar.v2_table_menu.new_rollup": "Новый {{keyword}}", + "sidebar.v2_table_menu.open_data": "Просмотреть данные", + "sidebar.v2_table_menu.open_export_workbench": "Открыть рабочую область экспорта…", + "sidebar.v2_table_menu.open_in_new_tab": "Открыть в новой вкладке", + "sidebar.v2_table_menu.refresh_stats": "Обновить статистику", + "sidebar.v2_table_menu.rename_compact": "Переименовать...", + "sidebar.v2_table_menu.truncate_table": "Усечь таблицу", + "sidebar.v2_table_menu.view_in_er": "Показать в ER-диаграмме", + "sidebar.validation.name_required": "Введите имя.", + "sidebar.validation.new_database_name_required": "Введите новое имя базы данных.", + "sidebar.validation.new_table_name_required": "Введите новое имя таблицы.", + "sidebar.validation.new_view_name_required": "Введите новое имя представления.", + "sidebar.validation.schema_name_required": "Введите имя schema.", + "sidebar.validation.tag_name_required": "Введите имя группы.", "snippet_settings.action.close": "Закрыть", "snippet_settings.action.delete": "Удалить", "snippet_settings.action.new": "Новый сниппет", @@ -7307,6 +6959,66 @@ "store.fallback.connection_name": "Подключение {{index}}", "store.fallback.connection_tag_name": "Тег {{index}}", "store.fallback.sql_snippet_name": "Фрагмент {{index}}", + "tab_manager.close_aria": "Закрыть {{title}}", + "tab_manager.empty.action.open_ai": "Открыть AI", + "tab_manager.empty.aria.start_workbench": "Стартовая рабочая область GoNavi", + "tab_manager.empty.eyebrow.connections": "{{count}} подключений", + "tab_manager.empty.eyebrow.workbench": "РАБОЧАЯ ОБЛАСТЬ", + "tab_manager.empty.hero.description": "Выберите источник данных, откройте редактор запросов или продолжите с контекстом в AI-панели.", + "tab_manager.empty.hero.title": "Подключения, запросы и анализ начинаются в одной рабочей области.", + "tab_manager.empty.quick.ai_assist.description": "Объяснение SQL, генерация запросов и проверка результатов", + "tab_manager.empty.quick.ai_assist.title": "Открыть AI-помощь", + "tab_manager.empty.quick.aria": "Быстрый рабочий процесс", + "tab_manager.empty.quick.configure_source.description": "Настроить URI, SSH, прокси и драйвер в одном месте", + "tab_manager.empty.quick.configure_source.title": "Настроить источник данных", + "tab_manager.empty.quick.heading": "Быстрый рабочий процесс", + "tab_manager.empty.quick.sql_workspace.description": "Открыть редактор запросов с текущим контекстом", + "tab_manager.empty.quick.sql_workspace.title": "Запустить рабочую область SQL", + "tab_manager.hover.fallback.database_not_specified": "Не указано", + "tab_manager.hover.fallback.host_not_configured": "Не настроено", + "tab_manager.hover.fallback.unbound_connection": "Непривязанное подключение", + "tab_manager.hover.kind.design": "Дизайн таблицы", + "tab_manager.hover.kind.event": "Событие", + "tab_manager.hover.kind.fallback": "Вкладка", + "tab_manager.hover.kind.jvm_audit": "Аудит JVM", + "tab_manager.hover.kind.jvm_diagnostic": "Диагностика JVM", + "tab_manager.hover.kind.jvm_monitoring": "Мониторинг JVM", + "tab_manager.hover.kind.jvm_overview": "Обзор JVM", + "tab_manager.hover.kind.jvm_resource": "Ресурс JVM", + "tab_manager.hover.kind.materialized_view": "Материализованное представление", + "tab_manager.hover.kind.query": "SQL-запрос", + "tab_manager.hover.kind.redis_command": "Команда Redis", + "tab_manager.hover.kind.redis_keys": "Redis Key", + "tab_manager.hover.kind.redis_monitor": "Монитор Redis", + "tab_manager.hover.kind.routine": "Функция / процедура", + "tab_manager.hover.kind.sql_analysis": "Рабочая область анализа SQL", + "tab_manager.hover.kind.table": "Данные таблицы", + "tab_manager.hover.kind.table_export": "Рабочая область экспорта", + "tab_manager.hover.kind.table_overview": "Обзор таблицы", + "tab_manager.hover.kind.trigger": "Триггер", + "tab_manager.hover.kind.view": "Представление", + "tab_manager.hover.label.connection": "Подключение", + "tab_manager.hover.label.database": "База данных", + "tab_manager.hover.label.object": "Объект", + "tab_manager.hover.label.type": "Тип", + "tab_manager.kind_badge.design": "Дизайн", + "tab_manager.kind_badge.event": "Событие", + "tab_manager.kind_badge.fallback": "Вкладка", + "tab_manager.kind_badge.jvm": "JVM", + "tab_manager.kind_badge.materialized_view": "MV", + "tab_manager.kind_badge.query": "SQL", + "tab_manager.kind_badge.redis": "Redis", + "tab_manager.kind_badge.routine": "Функция", + "tab_manager.kind_badge.sql_analysis": "Анализ", + "tab_manager.kind_badge.table": "Таблица", + "tab_manager.kind_badge.table_export": "Экспорт", + "tab_manager.kind_badge.table_overview": "БД", + "tab_manager.kind_badge.trigger": "Триггер", + "tab_manager.kind_badge.view": "Вид", + "tab_manager.menu.close_all": "Закрыть все вкладки", + "tab_manager.menu.close_left": "Закрыть вкладки слева", + "tab_manager.menu.close_other": "Закрыть остальные вкладки", + "tab_manager.menu.close_right": "Закрыть вкладки справа", "tab_manager.menu.tab_display_settings": "Настройки вкладок", "tab_manager.sql_file_close.close_tabs": "Закрыть вкладки", "tab_manager.sql_file_close.continue_close": "Продолжить закрытие", @@ -7324,24 +7036,305 @@ "tab_manager.sql_file_close.save_failed": "Не удалось сохранить {{title}}: {{detail}}", "tab_manager.sql_file_close.saved": "SQL-файл сохранен", "tab_manager.sql_file_close.unknown_error": "Неизвестная ошибка", + "table_designer.action.add": "Добавить", + "table_designer.action.add_after_selected": "Добавить после выбранного столбца", + "table_designer.action.add_column": "Добавить столбец", + "table_designer.action.apply": "Применить", + "table_designer.action.cancel": "Отмена", + "table_designer.action.copy_selected_to_new_table": "Скопировать выбранное в новую таблицу", + "table_designer.action.create": "Создать", + "table_designer.action.create_table": "Создать таблицу", + "table_designer.action.delete": "Удалить", + "table_designer.action.edit": "Изменить", + "table_designer.action.execute": "Выполнить", + "table_designer.action.refresh": "Обновить", + "table_designer.action.refresh_anyway": "Все равно обновить", + "table_designer.action.save": "Сохранить", + "table_designer.action.table_comment": "Комментарий таблицы", + "table_designer.action.view_statement": "Показать оператор", + "table_designer.column.actions": "Действия", + "table_designer.column.auto_increment": "Автоинкремент", + "table_designer.column.comment": "Комментарий", + "table_designer.column.default": "По умолчанию", + "table_designer.column.name": "Имя", + "table_designer.column.not_null": "NOT NULL", + "table_designer.column.primary_key": "Первичный ключ", + "table_designer.column.type": "Тип", + "table_designer.empty.triggers": "У этой таблицы нет триггеров", + "table_designer.fallback.empty": "(пусто)", + "table_designer.fallback.unknown_error": "Неизвестная ошибка", + "table_designer.fallback.unnamed_foreign_key": "(внешний ключ без имени)", + "table_designer.fallback.unnamed_index": "(индекс без имени)", + "table_designer.foreign_key.column.constraint_name": "Имя ограничения", + "table_designer.foreign_key.column.fields": "Поля", + "table_designer.foreign_key.column.ref_fields": "Ссылочные поля", + "table_designer.foreign_key.column.ref_table": "Ссылочная таблица", + "table_designer.index.column.fields": "Поля", + "table_designer.index.column.name": "Имя индекса", + "table_designer.index.column.type": "Тип индекса", + "table_designer.index.column.uniqueness": "Уникальность", + "table_designer.index.kind.fulltext": "Полнотекстовый индекс", + "table_designer.index.kind.normal": "Обычный индекс", + "table_designer.index.kind.normal_nonclustered": "Обычный индекс (некластеризованный)", + "table_designer.index.kind.primary_clustered": "Индекс первичного ключа (кластеризованный)", + "table_designer.index.kind.spatial": "Пространственный индекс", + "table_designer.index.kind.unique": "Уникальный индекс", + "table_designer.index.uniqueness.normal": "Обычный", + "table_designer.index.uniqueness.unique": "Уникальный", + "table_designer.label.create_statement": "CREATE-оператор для {{name}}", + "table_designer.label.create_statement_plain": "CREATE-оператор", + "table_designer.message.add_at_least_one_column": "Добавьте хотя бы один столбец", + "table_designer.message.columns_copied_to_new_table": "{{count}} столбцов скопировано в новую таблицу {{table}}", + "table_designer.message.connection_not_found": "Подключение не найдено", + "table_designer.message.delete_failed": "Не удалось удалить: {{detail}}", + "table_designer.message.drop_old_trigger_failed": "Не удалось удалить старый триггер: {{detail}}", "table_designer.message.duckdb_primary_key_change_unsupported": "DuckDB сейчас поддерживает только добавление первичного ключа в таблицы без него. Изменение или удаление существующего первичного ключа требует пересоздания таблицы.", + "table_designer.message.execution_failed": "Не удалось выполнить: {{detail}}", + "table_designer.message.execution_failed_plain": "Не удалось выполнить", + "table_designer.message.execution_failed_prefix": "Не удалось выполнить: ", + "table_designer.message.foreign_key_column_count_mismatch": "Количество локальных полей должно совпадать с количеством ссылочных полей", + "table_designer.message.foreign_key_created": "Внешний ключ создан", + "table_designer.message.foreign_key_delete_unsupported": "Эта база данных не поддерживает удаление этого внешнего ключа здесь", + "table_designer.message.foreign_key_deleted": "Внешний ключ удален", + "table_designer.message.foreign_key_maintenance_unsupported": "Эта база данных не поддерживает управление внешними ключами здесь", + "table_designer.message.foreign_key_name_exists": "Ограничение внешнего ключа уже существует: {{name}}", + "table_designer.message.foreign_key_name_required": "Введите имя ограничения внешнего ключа", + "table_designer.message.foreign_key_updated": "Внешний ключ обновлен", + "table_designer.message.index_create_sql_placeholder": "SQL создания индекса пока недоступен", + "table_designer.message.index_create_sql_unavailable": "Не удалось получить SQL создания индекса", + "table_designer.message.index_created": "Индекс создан", + "table_designer.message.index_delete_named_unsupported": "Эта база данных не поддерживает удаление индекса \"{{name}}\"", + "table_designer.message.index_delete_unsupported": "Эта база данных не поддерживает удаление этого индекса", + "table_designer.message.index_deleted": "Индекс удален", + "table_designer.message.index_kind_unsupported": "Эта база данных не поддерживает этот тип индекса", + "table_designer.message.index_maintenance_unsupported": "Эта база данных не поддерживает управление индексами здесь", + "table_designer.message.index_name_exists": "Имя индекса уже существует: {{name}}", + "table_designer.message.index_name_required": "Введите имя индекса", + "table_designer.message.index_restore_failed": "{{detail}}; не удалось восстановить исходный индекс: {{restoreDetail}}", + "table_designer.message.index_restore_unavailable": "{{detail}}; исходный индекс не удалось восстановить автоматически. Проверьте его как можно скорее.", + "table_designer.message.index_restored_after_failure": "{{detail}}; исходный индекс восстановлен автоматически.", + "table_designer.message.index_updated": "Индекс обновлен", + "table_designer.message.indexes_deleted": "{{count}} индексов удалено", + "table_designer.message.load_columns_failed": "Не удалось загрузить столбцы: {{detail}}", + "table_designer.message.no_changes_detected": "Изменения не обнаружены", + "table_designer.message.no_copyable_columns": "Не выбраны столбцы для копирования", + "table_designer.message.no_index_changes": "Изменения индекса не обнаружены", + "table_designer.message.only_normal_unique_index_supported": "Эта база данных поддерживает управление только обычными и уникальными индексами", + "table_designer.message.ref_columns_required": "Введите хотя бы одно ссылочное поле", + "table_designer.message.ref_table_required": "Введите ссылочную таблицу", + "table_designer.message.relational_index_unsupported": "Этот источник данных не поддерживает управление реляционными индексами", + "table_designer.message.schema_saved_alter": "Структура таблицы обновлена.", + "table_designer.message.schema_saved_create": "Таблица создана.", + "table_designer.message.select_at_least_one_column": "Выберите хотя бы один столбец", + "table_designer.message.select_column_before_insert": "Перед вставкой выберите столбец.", + "table_designer.message.select_columns_to_copy": "Сначала выберите столбцы для копирования", + "table_designer.message.select_index_to_delete": "Сначала выберите индекс для удаления", + "table_designer.message.select_local_columns": "Выберите хотя бы одно локальное поле", + "table_designer.message.select_one_foreign_key": "Сначала выберите один внешний ключ", + "table_designer.message.select_one_index": "Сначала выберите один индекс", + "table_designer.message.statement_execution_failed_prefix": "Не удалось выполнить оператор {{current}}/{{total}}: ", + "table_designer.message.switch_index_kind": "Переключите категорию индекса на индекс {{kind}}", + "table_designer.message.table_comment_unsupported": "Эта база данных не поддерживает редактирование комментария таблицы здесь", + "table_designer.message.table_comment_updated": "Комментарий таблицы обновлен", + "table_designer.message.table_name_required": "Введите имя таблицы", + "table_designer.message.target_table_required": "Введите имя целевой таблицы", + "table_designer.message.trigger_created": "Триггер создан", + "table_designer.message.trigger_deleted": "Триггер удален", + "table_designer.message.trigger_updated": "Триггер обновлен", + "table_designer.modal.column_comment_title": "Комментарий столбца", + "table_designer.modal.column_comment_title_named": "Комментарий столбца - {{name}}", + "table_designer.modal.confirm_sql_title": "Подтверждение изменений SQL", + "table_designer.modal.copy_columns_title": "Скопировать выбранные столбцы в новую таблицу", + "table_designer.modal.delete_foreign_key_content": "Удалить ограничение внешнего ключа \"{{name}}\"?", + "table_designer.modal.delete_foreign_key_title": "Удаление внешнего ключа", + "table_designer.modal.delete_index_many": "Удалить эти индексы ({{count}})?\n{{names}}", + "table_designer.modal.delete_index_one": "Удалить индекс {{names}}?", + "table_designer.modal.delete_index_title": "Удаление индекса", + "table_designer.modal.delete_trigger_content": "Удалить триггер \"{{name}}\"? Это действие нельзя отменить.", + "table_designer.modal.delete_trigger_title": "Удаление триггера", + "table_designer.modal.foreign_key_create_title": "Добавить внешний ключ", + "table_designer.modal.foreign_key_edit_title": "Изменить внешний ключ", + "table_designer.modal.index_create_title": "Добавить индекс", + "table_designer.modal.index_edit_title": "Изменить индекс", + "table_designer.modal.table_comment_title": "Изменить комментарий таблицы", + "table_designer.modal.trigger_create_title": "Добавить триггер", + "table_designer.modal.trigger_detail_title": "Сведения о триггере", + "table_designer.modal.trigger_detail_title_named": "Триггер: {{name}}", + "table_designer.modal.trigger_edit_title": "Изменить триггер", + "table_designer.modal.unsaved_changes_content": "При обновлении несохраненные изменения столбцов в текущем черновике будут потеряны. Все равно обновить и перезаписать черновик?", + "table_designer.modal.unsaved_changes_title": "Есть несохраненные изменения столбцов", + "table_designer.notice.foreign_key_readonly": "Эта база данных не поддерживает редактирование внешних ключей здесь. Доступен только просмотр.", + "table_designer.notice.foreign_key_replace_hint": "При изменении внешнего ключа сначала удаляется старый внешний ключ, затем создается новый.", + "table_designer.notice.index_readonly": "Эта база данных не поддерживает редактирование индексов здесь. Доступен только просмотр.", + "table_designer.notice.index_restore_hint": "Если при изменении индекса создание нового индекса завершится ошибкой, система попытается восстановить исходный индекс.", + "table_designer.notice.sql_irreversible": "Внимательно проверьте SQL. После выполнения действие нельзя отменить.", + "table_designer.notice.sql_statement_irreversible": "Внимательно проверьте оператор SQL. После выполнения действие нельзя отменить.", + "table_designer.notice.trigger_replace_hint": "При изменении триггера сначала удаляется исходный триггер, затем создается новый.", + "table_designer.option.default": "По умолчанию", + "table_designer.option.recommended_suffix": "(рекомендуется)", + "table_designer.placeholder.column_comment": "Введите комментарий столбца", + "table_designer.placeholder.foreign_key_name": "Имя ограничения внешнего ключа, например fk_order_user", + "table_designer.placeholder.index_columns": "Выберите столбцы индекса; используется порядок выбора", + "table_designer.placeholder.index_name": "Имя индекса, например idx_user_name", + "table_designer.placeholder.local_columns": "Выберите локальные поля; порядок должен совпадать со ссылочными полями", + "table_designer.placeholder.primary_index_name": "Индекс первичного ключа использует фиксированное имя: PRIMARY", + "table_designer.placeholder.ref_columns": "Введите ссылочные поля; можно указать несколько", + "table_designer.placeholder.ref_table": "Ссылочная таблица; поддерживается db.table", + "table_designer.placeholder.table_comment": "Введите комментарий таблицы", + "table_designer.placeholder.table_name": "Введите имя таблицы", + "table_designer.placeholder.target_table_name": "Введите имя целевой таблицы", "table_designer.schema_sql.doris.primary_key_hint": "-- Изменения модели первичного ключа/Key в Doris требуют ручной миграции с учетом модели таблицы. Специфичные для MySQL фразы DROP/ADD PRIMARY KEY пропущены.", + "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB не может сохранять комментарии столбцов через COMMENT ON COLUMN. Комментарий для столбца {{column}} останется только в предпросмотре дизайнера.", "table_designer.schema_sql.duckdb.primary_key_hint": "-- DuckDB сейчас поддерживает только добавление PRIMARY KEY к таблицам без существующего первичного ключа. Изменение или удаление существующего первичного ключа требует перестройки таблицы.", + "table_designer.schema_sql.limited_column_hint": "-- Синтаксис ограничений столбцов, значений по умолчанию и комментариев в {{dialect}} отличается от MySQL. Специфичные для MySQL фразы пропущены; добавьте SQL для целевого диалекта перед выполнением.", + "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite не может напрямую изменять свойства столбцов. Для столбца {{column}} создайте новую таблицу, перенесите данные и замените старую таблицу.", + "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server требует исходное имя ограничения для удаления старого первичного ключа. Перед удалением проверьте его на вкладке индексов.", + "table_designer.schema_sql.tdengine.timestamp_hint": "-- Обычным таблицам TDengine обычно нужен столбец времени TIMESTAMP. Перед выполнением проверьте модель таблицы.", + "table_designer.selection.columns_selected": "Выбрано столбцов: {{count}}", + "table_designer.selection.foreign_key_selected": "Выбрано: {{name}}", + "table_designer.selection.indexes_selected": "Выбрано индексов: {{count}}", + "table_designer.selection.trigger_prompt": "Щелкните, чтобы выбрать триггер", + "table_designer.selection.trigger_selected": "Выбрано: {{name}}", + "table_designer.sql_preview.change.add": "Добавление", + "table_designer.sql_preview.change.comment": "Изменение комментария", + "table_designer.sql_preview.change.constraint": "Изменение ограничения", + "table_designer.sql_preview.change.create": "Структура новой таблицы", "table_designer.sql_preview.change.create_index": "Создание индекса", + "table_designer.sql_preview.change.drop": "Удаление", + "table_designer.sql_preview.change.modify": "Изменение свойств столбца", + "table_designer.sql_preview.change.rename": "Переименование", + "table_designer.starrocks.bucket_mode.auto": "Авточисло сегментов", + "table_designer.starrocks.bucket_mode.number": "Фиксированное число сегментов", + "table_designer.starrocks.distribution.hash": "Хеш-распределение", + "table_designer.starrocks.distribution.none": "Без распределения", + "table_designer.starrocks.distribution.random": "Случайное распределение", + "table_designer.starrocks.key_model.aggregate": "Агрегатный ключ", + "table_designer.starrocks.key_model.duplicate": "Дублирующий ключ", + "table_designer.starrocks.key_model.unique": "Уникальный ключ", + "table_designer.starrocks.placeholder.bucket_count": "Число сегментов", + "table_designer.starrocks.placeholder.distribution_columns": "Столбцы распределения, например user_id", + "table_designer.starrocks.placeholder.key_columns": "Ключевые столбцы, например id, date", + "table_designer.starrocks.placeholder.partition_clause": "Секция партиционирования, например PARTITION BY RANGE(date_col)(...)", + "table_designer.starrocks.table_kind.external": "Внешняя таблица", + "table_designer.starrocks.table_kind.olap": "OLAP-таблица", + "table_designer.status.read_only": "Только чтение", + "table_designer.summary.columns": "{{count}} столбцов", + "table_designer.summary.indexes": "Индексов: {{count}}, индексных полей: {{fields}}", + "table_designer.tab.columns": "Столбцы", "table_designer.tab.edit_trigger_title": "Редактировать триггер: {{name}}", + "table_designer.tab.foreign_keys": "Внешние ключи", + "table_designer.tab.indexes": "Индексы", + "table_designer.tab.triggers": "Триггеры", + "table_designer.table_comment.current": "Текущий комментарий: {{comment}}", + "table_designer.title.default_database": "База данных по умолчанию", + "table_designer.title.schema_designer": "Конструктор схемы", + "table_designer.title.untitled_table": "Таблица без имени", + "table_designer.tooltip.edit_comment_popup": "Редактировать комментарий во всплывающем окне", + "table_designer.trigger.column.event": "Событие", + "table_designer.trigger.column.name": "Имя", + "table_designer.trigger.column.timing": "Момент", + "table_designer.trigger.definition_unavailable": "Не удалось получить полное определение триггера", + "table_designer.trigger.field.event": "Событие", + "table_designer.trigger.field.timing": "Момент", + "table_designer.trigger.template.body_comment": "Логика триггера", + "table_designer.trigger.template.enter_create": "Введите оператор CREATE TRIGGER", + "table_overview.action.show_more": "Показать еще таблицы (осталось {{count}})", + "table_overview.empty.no_matches": "Совпадений нет", + "table_overview.empty.no_tables": "Таблиц нет", + "table_overview.menu.backup_table_sql": "Резервная копия таблицы (SQL)", + "table_overview.menu.clear_table": "Очистить таблицу", + "table_overview.menu.copy_structure": "Копировать структуру таблицы", "table_overview.menu.copy_table_name": "Копировать имя таблицы", + "table_overview.menu.danger_operations": "Опасные операции", + "table_overview.menu.delete_table": "Удалить таблицу", + "table_overview.menu.design_table": "Конструктор таблицы", + "table_overview.menu.export_csv": "Экспорт CSV", + "table_overview.menu.export_html": "Экспорт HTML", + "table_overview.menu.export_json": "Экспорт JSON", + "table_overview.menu.export_markdown": "Экспорт Markdown", + "table_overview.menu.export_table_data": "Экспорт данных таблицы", + "table_overview.menu.export_xlsx": "Экспорт XLSX", + "table_overview.menu.new_query": "Новый запрос", + "table_overview.menu.rename_table": "Переименовать таблицу", "table_overview.menu.table_structure": "Структура таблицы", + "table_overview.menu.truncate_table": "Усечь таблицу", + "table_overview.message.copy_structure_failed": "Не удалось скопировать структуру таблицы: {{detail}}", + "table_overview.message.copy_structure_success": "Структура таблицы скопирована в буфер обмена", "table_overview.message.copy_table_name_empty": "Имя таблицы пустое, копирование невозможно", "table_overview.message.copy_table_name_failed": "Не удалось скопировать имя таблицы: {{detail}}", "table_overview.message.copy_table_name_success": "Имя таблицы скопировано в буфер обмена", + "table_overview.message.delete_table_failed": "Не удалось удалить таблицу: {{detail}}", + "table_overview.message.delete_table_success": "Таблица удалена", + "table_overview.message.export_failed": "Ошибка экспорта: {{detail}}", + "table_overview.message.export_success": "Экспорт выполнен", + "table_overview.message.exporting_table_format": "Экспорт {{table}} в формате {{format}}...", + "table_overview.message.load_tables_failed": "Не удалось загрузить сведения о таблицах: {{detail}}", + "table_overview.message.pinned": "Таблица закреплена", + "table_overview.message.rename_table_failed": "Не удалось переименовать таблицу: {{detail}}", + "table_overview.message.rename_table_success": "Таблица переименована", + "table_overview.message.table_data_action_failed": "{{action}} завершилось ошибкой: {{detail}}", + "table_overview.message.table_data_action_loading": "Выполняется {{action}} для {{table}}...", + "table_overview.message.table_data_action_success": "{{action}} выполнено", + "table_overview.message.unknown_error": "Неизвестная ошибка", + "table_overview.message.unpinned": "Закрепление таблицы снято", + "table_overview.metric.data_size": "Размер данных", + "table_overview.metric.engine": "Движок", + "table_overview.metric.index_size": "Размер индекса", + "table_overview.metric.relative_size": "Относительный размер", + "table_overview.modal.delete_table.content": "Удалить таблицу \"{{table}}\"? Это действие нельзя отменить.", + "table_overview.modal.delete_table.title": "Удалить таблицу", + "table_overview.modal.rename_table.placeholder": "Введите новое имя таблицы", + "table_overview.modal.rename_table.title": "Переименовать таблицу", + "table_overview.modal.table_data_action.content": "{{action}} безвозвратно удалит все данные в таблице \"{{table}}\". Это действие нельзя отменить. Продолжить?", + "table_overview.modal.table_data_action.title": "Подтвердите {{action}}", + "table_overview.placeholder.search": "Поиск по именам таблиц или комментариям...", + "table_overview.row.engine_table": "Таблица {{engine}}", + "table_overview.row.open_hint": "Дважды щелкните, чтобы открыть данные; щелкните правой кнопкой для дополнительных действий", + "table_overview.section.all": "Все", + "table_overview.section.pinned": "Закрепленные", + "table_overview.sort.name": "Имя", + "table_overview.sort.rows": "Строки", + "table_overview.sort.size": "Размер", + "table_overview.status.hidden_count_hint": "Еще не отображено: {{count}}. Загрузите больше или сузьте поиск.", + "table_overview.status.loading_tables": "Загрузка сведений о таблицах...", + "table_overview.status.matching_rendered": "Найдено таблиц: {{matched}}, отображается: {{rendered}}", + "table_overview.status.updating_filter": "Обновление результатов фильтра...", "table_overview.tab.design_table_title": "Проектирование таблицы ({{table}})", "table_overview.tab.table_structure_title": "Структура таблицы ({{table}})", + "table_overview.table_data_action.clear.label": "Очистить таблицу", + "table_overview.table_data_action.truncate.label": "Усечь таблицу", + "table_overview.toolbar.summary": "{{count}} табл. · {{rows}} строк · {{size}}", + "table_overview.tooltip.card_view": "Карточки", + "table_overview.tooltip.list_view": "Список", + "table_overview.tooltip.refresh": "Обновить", + "table_overview.tooltip.sort": "Сортировка", + "table_overview.validation.table_name_required": "Имя таблицы обязательно", + "table_overview.validation.table_name_unchanged": "Новое имя таблицы совпадает с текущим", "trigger_viewer.action.edit_object": "Изменить объект", "trigger_viewer.edit_sql.compatibility_hint": "Перед выполнением проверьте совместимость синтаксиса с текущей базой данных.", "trigger_viewer.edit_sql.empty_definition": "Определение триггера пустое. Дополните инструкцию CREATE TRIGGER перед выполнением.", "trigger_viewer.edit_sql.fragment_definition": "Текущий источник данных вернул только фрагмент определения триггера. Дополните инструкцию CREATE TRIGGER перед выполнением.", "trigger_viewer.edit_sql.header": "Изменить триггер: {{name}}", "trigger_viewer.edit_sql.replace_hint": "Изменение структуры таблицы сначала удалит исходный триггер, а затем создаст новый. Проверьте перед выполнением.", + "trigger_viewer.editor.definition_not_found": "Определение триггера не найдено", + "trigger_viewer.editor.sphinx.compat_queries_hint": "Выполнено несколько совместимых запросов. Причиной могут быть ограничения версии или неподдерживаемый тип объекта.", + "trigger_viewer.editor.sphinx.empty_result": "Текущий экземпляр Sphinx{{version}} не вернул определение триггера.", + "trigger_viewer.editor.sphinx.failed_message_label": "Возвращенное сообщение об ошибке", + "trigger_viewer.editor.sphinx.failed_message_unknown": "Возвращенное сообщение об ошибке: неизвестная ошибка", + "trigger_viewer.editor.sphinx.unsupported_query": "Текущий экземпляр Sphinx{{version}} не поддерживает запрос определений триггеров.", + "trigger_viewer.editor.sphinx.version_suffix": " (версия: {{version}})", + "trigger_viewer.editor.unsupported.duckdb": "DuckDB не поддерживает триггеры", + "trigger_viewer.editor.unsupported.generic": "Этот тип базы данных не поддерживает просмотр определений триггеров", + "trigger_viewer.editor.unsupported.mongodb": "MongoDB не поддерживает триггеры", + "trigger_viewer.editor.unsupported.tdengine": "TDengine не поддерживает триггеры", + "trigger_viewer.error.connection_not_found": "Подключение к базе данных не найдено", + "trigger_viewer.error.load_failed": "Не удалось загрузить", + "trigger_viewer.error.query_failed": "Не удалось запросить определение триггера", + "trigger_viewer.error.query_failed_detail": "Не удалось запросить определение триггера: {{detail}}", + "trigger_viewer.error.trigger_name_empty": "Имя триггера пустое", + "trigger_viewer.field.database": "База данных", + "trigger_viewer.field.trigger": "Триггер", + "trigger_viewer.loading.definition": "Загрузка определения триггера...", "trigger_viewer.tab.edit_trigger_title": "Изменить триггер: {{name}}", "trigger_viewer.warning.refresh_latest_failed": "Не удалось обновить последнее определение", "data_export.dialog.action.start": "Начать экспорт", @@ -7455,5 +7448,133 @@ "data_export.workbench.target.batch_tables": "{{database}} · {{count}} объектов", "data_export.workbench.target.current_database": "Текущая база данных", "data_export.workbench.task.export_target": "Экспорт {{name}}", - "data_export.workbench.title": "Рабочая область экспорта" + "data_export.workbench.title": "Рабочая область экспорта", + "data_grid.export.scope.all_results_cached": "Все результаты (текущий кэш {{count}} строк)", + "data_grid.export.scope.all_results_cached_description": "Экспортирует все результаты из текущего кэша, если текущий запрос нельзя воспроизвести повторно.", + "data_grid.export.scope.all_results_requery": "Все результаты (повторный запрос)", + "data_grid.export.scope.all_results_requery_description": "Повторно выполняет SQL на backend, чтобы не экспортировать только текущую страницу или кэш.", + "data_grid.export.scope.current_page": "Текущая страница ({{count}} строк)", + "data_grid.export.scope.current_page_description": "Экспортирует данные напрямую из кэша текущей страницы.", + "data_grid.export.scope.current_page_requery_description": "Повторно запрашивает текущую страницу на backend с текущими параметрами пагинации перед экспортом.", + "data_grid.export.scope.current_page_unavailable_description": "Текущая страница зависит от временного состояния frontend, поэтому лучше использовать быстрый экспорт.", + "data_grid.export.scope.filtered_results_all": "Отфильтрованные результаты (все)", + "data_grid.export.scope.filtered_results_all_requery_description": "Повторно запрашивает базу данных с текущими фильтрами и экспортирует все отфильтрованные результаты.", + "data_grid.export.scope.filtered_results_all_unavailable_description": "Текущий источник данных или текущее состояние не поддерживает повтор фильтрованного экспорта в workbench.", + "data_grid.export.scope.selected_rows": "Выбранные строки", + "data_grid.export.scope.selected_rows_count": "Выбранные строки ({{count}} строк)", + "data_grid.export.scope.selected_rows_description": "Экспортирует только отмеченные строки из текущего набора результатов.", + "sidebar.message.table_export_target_missing": "Не удалось определить имя таблицы, экспорт невозможен.", + "sidebar.tab.batch_export_databases": "Пакетный экспорт баз данных", + "sidebar.tab.batch_export_objects": "Пакетный экспорт объектов", + "sidebar.tab.batch_export_objects_database": "Пакетный экспорт объектов {{database}}", + "data_export.message.already_running": "Задача экспорта уже выполняется. Дождитесь её завершения перед запуском нового экспорта.", + "data_export.message.export_failed": "Ошибка экспорта: {{error}}", + "data_export.message.export_success": "Экспорт выполнен успешно", + "data_export.progress.stage.waiting_file_selection": "Ожидание выбора файла экспорта", + "sql_analysis.workbench.validation.sql_required": "Введите SQL для диагностики", + "sql_analysis.workbench.alert.connection_missing_title": "Подключение для этой рабочей области больше недоступно", + "sql_analysis.workbench.alert.connection_missing_description": "Снова выберите корректное подключение перед повторным открытием рабочей области анализа SQL.", + "sql_analysis.workbench.title": "Рабочая область анализа SQL", + "sql_analysis.workbench.view.slow_query": "Медленные SQL", + "sql_analysis.workbench.view.diagnose": "Диагностика SQL", + "sql_analysis.workbench.editor.placeholder": "Введите SQL для диагностики или подставьте его, выбрав запись из списка медленных SQL", + "sql_analysis.workbench.editor.hint": "Можно сразу подставить запись из списка медленных SQL", + "sql_analysis.workbench.action.run": "Запустить диагностику", + "sql_analysis.explain.error.query_required": "Текст запроса пуст", + "sql_analysis.explain.error.run_failed": "Диагностика не выполнена", + "sql_analysis.explain.loading": "Выполняется EXPLAIN и разбор плана...", + "sql_analysis.explain.error.title": "Диагностика не выполнена: ", + "sql_analysis.explain.empty": "Введите SQL и запустите диагностику", + "sql_analysis.explain.view.plan": "План выполнения", + "sql_analysis.explain.view.raw": "Исходный текст", + "sql_analysis.explain.meta.node_count": "{{count}} узлов", + "sql_analysis.explain.raw.empty": "(нет исходного текста)", + "sql_analysis.explain_graph.label.table": "Таблица: ", + "sql_analysis.explain_graph.label.index": "Индекс: ", + "sql_analysis.explain_graph.metric.est_rows": "Оценка", + "sql_analysis.explain_graph.metric.actual_rows": "Факт", + "sql_analysis.explain_graph.metric.cost": "Стоимость", + "sql_analysis.explain_graph.flag.full_scan": "Полное сканирование", + "sql_analysis.explain_graph.flag.filesort": "Дополнительная сортировка", + "sql_analysis.explain_graph.flag.temp_table": "Временная таблица", + "sql_analysis.sidebar.stats.title": "Статистика выполнения", + "sql_analysis.sidebar.stats.total_cost": "Общая стоимость", + "sql_analysis.sidebar.stats.total_duration": "Общее время", + "sql_analysis.sidebar.stats.rows_read": "Прочитано строк", + "sql_analysis.sidebar.stats.buffer_hit": "Попадание в буфер", + "sql_analysis.sidebar.stats.max_est_rows": "Макс. оценка строк узла", + "sql_analysis.sidebar.warning.full_scan": "Обнаружено полное сканирование таблицы", + "sql_analysis.sidebar.warning.filesort": "Обнаружена дополнительная сортировка", + "sql_analysis.sidebar.warning.temp_table": "Используется временная таблица", + "sql_analysis.sidebar.node.title": "Сведения об узле", + "sql_analysis.sidebar.node.op_type": "Тип операции", + "sql_analysis.sidebar.node.op_detail": "Детали операции", + "sql_analysis.sidebar.node.table": "Таблица", + "sql_analysis.sidebar.node.index": "Индекс", + "sql_analysis.sidebar.node.est_rows": "Оценка строк", + "sql_analysis.sidebar.node.actual_rows": "Фактические строки", + "sql_analysis.sidebar.node.loops": "Число циклов", + "sql_analysis.sidebar.node.cost": "Стоимость", + "sql_analysis.sidebar.node.duration": "Длительность", + "sql_analysis.sidebar.node.buffer_hit": "Попадание в буфер", + "sql_analysis.sidebar.node.flags": "Флаги", + "sql_analysis.sidebar.node.extra": "Поля Extra ({{count}})", + "sql_analysis.sidebar.suggestions.title": "Рекомендации по индексам ({{count}})", + "sql_analysis.sidebar.suggestions.empty": "Явных проблем с производительностью не найдено", + "sql_analysis.sidebar.suggestions.rows": "{{count}} строк", + "sql_analysis.sidebar.suggestions.table": "Таблица: {{table}}", + "sql_analysis.slow_query.error.load_failed": "Не удалось загрузить", + "sql_analysis.slow_query.message.cleared": "История медленных запросов очищена", + "sql_analysis.slow_query.error.clear_failed": "Не удалось очистить", + "sql_analysis.slow_query.sort.duration": "По длительности", + "sql_analysis.slow_query.sort.rows_read": "По прочитанным строкам", + "sql_analysis.slow_query.sort.recent": "По времени", + "sql_analysis.slow_query.tooltip.clear_current": "Очистить историю текущего подключения", + "sql_analysis.slow_query.loading": "Загрузка истории медленных запросов...", + "sql_analysis.slow_query.error.title": "Не удалось загрузить: ", + "sql_analysis.slow_query.empty": "Записей о медленных запросах пока нет (порог {{threshold}}ms)", + "sql_analysis.slow_query.title": "История медленных SQL", + "sql_analysis.slow_query.current_connection": "(текущее подключение)", + "sql_analysis.slow_query.metric.rows_read": "Прочитано", + "sql_analysis.slow_query.metric.rows_returned": "Возвращено", + "sql_analysis.slow_query.preview.empty": "(нет предпросмотра SQL)", + "sql_analysis.slow_query.relative.just_now": "Только что", + "sql_analysis.slow_query.relative.minutes_ago": "{{count}} мин. назад", + "sql_analysis.slow_query.relative.hours_ago": "{{count}} ч назад", + "sql_analysis.slow_query.relative.days_ago": "{{count}} дн. назад", + "sql_analysis.slow_query.rail.tooltip.no_connection": "Сначала откройте вкладку с подключением к базе данных", + "sql_analysis.slow_query.rail.tooltip.open": "Открыть рабочую область анализа SQL для текущего подключения", + "sql_analysis.slow_query.rail.aria_label": "Рабочая область медленных SQL", + "sql_analysis.backend.error.query_required": "SQL-запрос не может быть пустым", + "sql_analysis.backend.error.select_only": "Диагностика поддерживает только запросы SELECT / WITH. Для операций записи используйте режим EXPLAIN PLAN (поддержка PR2).", + "sql_analysis.backend.error.unsupported_db_type": "Текущий источник данных ({{dbType}}) пока не поддерживает диагностику SQL. На первом этапе поддерживаются MySQL/PostgreSQL/SQLite/ClickHouse/Oracle/SQLServer/OceanBase.", + "sql_analysis.backend.message.completed": "Диагностика завершена", + "query_history.backend.error.connection_fingerprint_invalid": "Не удалось разобрать отпечаток подключения", + "query_history.backend.message.loaded": "Загрузка завершена", + "query_history.backend.message.cleared": "История медленных запросов очищена", + "connection.backend.error.readonly_action_blocked": "Для этого подключения включена защита production, операция «{{action}}» запрещена.", + "connection.backend.action.create_database": "Создать базу данных", + "connection.backend.action.create_schema": "Создать схему", + "connection.backend.action.rename_schema": "Переименовать схему", + "connection.backend.action.drop_schema": "Удалить схему", + "connection.backend.action.rename_database": "Переименовать базу данных", + "connection.backend.action.drop_database": "Удалить базу данных", + "connection.backend.action.rename_table": "Переименовать таблицу", + "connection.backend.action.drop_table": "Удалить таблицу", + "connection.backend.action.drop_view": "Удалить представление", + "connection.backend.action.drop_function_or_procedure": "Удалить функцию или хранимую процедуру", + "connection.backend.action.rename_view": "Переименовать представление", + "connection.backend.action.import_data": "Импортировать данные", + "connection.backend.action.apply_result_changes": "Применить изменения результата", + "connection.backend.action.preview_result_changes": "Предпросмотр изменений результата", + "connection.backend.action.clear_table": "Очистить данные таблицы", + "connection.backend.action.truncate_table": "Очистить таблицу через TRUNCATE", + "connection.backend.action.data_sync_write": "Записать синхронизированные данные", + "connection_modal.field.readOnly.label": "Защита прод-подключения", + "connection_modal.field.readOnly.help": "Если включено, для этого подключения разрешены только запросы. Импорт, изменения схемы, запись данных и использование как цели синхронизации будут запрещены.", + "connection_modal.field.readOnly.checkbox": "Пометить это подключение как production и разрешить только запросы", + "query_editor.message.connection_readonly_blocked": "Для этого подключения включена защита production, разрешены только операции запроса.", + "query_editor.results_panel.message.action.copy": "Копировать", + "query_editor.results_panel.message.copy_unsupported": "Буфер обмена недоступен в текущей среде", + "query_editor.results_panel.message.copy_failed": "Не удалось скопировать сообщение: {{detail}}" } diff --git a/shared/i18n/zh-CN.json b/shared/i18n/zh-CN.json index 781509e..97421b8 100644 --- a/shared/i18n/zh-CN.json +++ b/shared/i18n/zh-CN.json @@ -1,4863 +1,4 @@ { - "common.cancel": "取消", - "redis.db_alias.menu.set": "设置别名", - "redis.db_alias.modal.title": "{{db}} 的别名", - "redis.db_alias.modal.placeholder": "例如:缓存、会话(留空则清除)", - "common.back_to_previous": "返回上一步", - "common.close": "关闭", - "common.confirm": "确认", - "common.continue": "继续", - "common.delete": "删除", - "common.edit": "编辑", - "common.error": "错误", - "common.loading": "加载中", - "common.named_item": "{{name}}", - "common.ok": "确定", - "common.refresh": "刷新", - "common.save": "保存", - "common.search": "搜索", - "common.success": "成功", - "common.unknown": "未知", - "common.warning": "警告", - "connection.sidebar.group.untitled": "未命名分组", - "connection.sidebar.group.meta": "{{count}} 个连接 · 连接分组", - "connection.sidebar.group.badge": "分组", - "connection.sidebar.group.edit": "编辑分组", - "connection.sidebar.group.delete": "删除分组", - "connection.sidebar.group.deleteConfirmTitle": "确认删除", - "connection.sidebar.group.deleteConfirmContent": "确定要删除分组 \"{{name}}\" 吗?这不会删除里面的连接。", - "connection.sidebar.group.expandAria": "展开连接分组 {{name}}", - "connection.sidebar.group.collapseAria": "折叠连接分组 {{name}}", - "connection.sidebar.menu.section": "连接", - "connection.sidebar.menu.groupSection": "连接分组", - "connection.sidebar.menu.copy": "复制连接", - "connection.sidebar.menu.disconnect": "断开连接", - "connection.sidebar.menu.delete": "删除连接", - "connection.sidebar.menu.hostFallback": "未配置地址", - "connection.sidebar.menu.hostBadge": "HOST", - "connection.sidebar.menu.moveToTag": "移至标签", - "connection.sidebar.menu.moveOutTag": "移出标签", - "connection.sidebar.menu.moveToUngrouped": "移出分组", - "connection.sidebar.menu.createDatabase": "新建数据库", - "connection.sidebar.menu.refresh": "刷新连接", - "connection.sidebar.menu.current": "当前", - "connection.sidebar.duplicate.backendUnavailable": "复制连接失败:后端接口不可用", - "connection.sidebar.duplicate.noResult": "复制连接失败:后端未返回结果", - "connection.sidebar.duplicate.success": "已复制连接: {{name}}", - "connection.sidebar.duplicate.failureFallback": "复制连接失败", - "connection.sidebar.disconnect.success": "已断开连接", - "connection.sidebar.delete.confirmTitle": "确认删除", - "connection.sidebar.delete.confirmContent": "确定要删除连接 \"{{name}}\" 吗?", - "connection.sidebar.delete.backendUnavailable": "删除连接失败:后端接口不可用", - "connection.sidebar.delete.success": "已删除连接", - "connection.sidebar.delete.failureFallback": "删除连接失败", - "find_in_database.title": "在数据库中搜索 — {{dbName}}", - "find_in_database.placeholder.keyword": "输入要搜索的字符串...", - "find_in_database.match.contains": "包含", - "find_in_database.match.exact": "精确匹配", - "find_in_database.message.keyword_required": "请输入搜索关键字", - "find_in_database.message.connection_config_not_found": "未找到连接配置", - "find_in_database.message.get_tables_failed": "获取表列表失败: {{detail}}", - "find_in_database.message.no_tables": "当前数据库没有表", - "find_in_database.message.no_matches": "未找到匹配的数据", - "find_in_database.message.search_failed": "搜索出错: {{detail}}", - "find_in_database.column.table_name": "表名", - "find_in_database.column.matched_columns": "匹配列", - "find_in_database.column.match_count": "命中行数", - "find_in_database.column.action": "操作", - "find_in_database.tooltip.collapse_details": "收起详情", - "find_in_database.tooltip.view_details": "查看详情", - "find_in_database.progress.searching_table": "正在搜索 {{table}}... ({{current}}/{{total}})", - "find_in_database.summary.found_tables": "找到 {{count}} 个表包含匹配数据", - "find_in_database.summary.searching": "(搜索进行中...)", - "find_in_database.detail.title": "{{table}} — 匹配行详情", - "find_in_database.detail.row_count": "{{count}} 行", - "import_preview.title": "导入数据预览", - "import_preview.action.start": "开始导入", - "import_preview.status.loading_preview": "加载预览数据...", - "import_preview.status.importing": "正在导入数据...", - "import_preview.progress.processed_rows": "已处理 {{current}} / {{total}} 行", - "import_preview.progress.success_count": "成功 {{count}}", - "import_preview.progress.error_count": "失败 {{count}}", - "import_preview.preview.summary": "共 {{rows}} 行数据,{{columns}} 个字段", - "import_preview.preview.description": "以下是前 5 行预览数据,确认无误后点击“开始导入”", - "import_preview.preview.field_list": "字段列表:", - "import_preview.preview.table_title": "数据预览(前 5 行):", - "import_preview.error.preview_failed": "预览失败", - "import_preview.error.preview_failed_detail": "预览失败: {{detail}}", - "import_preview.error.connection_config_not_found": "连接配置未找到", - "import_preview.error.import_failed": "导入失败", - "import_preview.error.import_failed_detail": "导入失败: {{detail}}", - "import_preview.result.completed": "导入完成", - "import_preview.result.success_rows": "成功导入 {{count}} 行", - "import_preview.result.failed_rows": "失败 {{count}} 行", - "import_preview.result.error_logs": "错误日志:", - "log_panel.title": "SQL 执行日志", - "log_panel.short_title": "日志", - "log_panel.description": "记录执行状态、耗时与错误信息,便于快速回溯。", - "log_panel.action.clear": "清空日志", - "log_panel.action.close": "关闭面板", - "log_panel.empty": "暂无 SQL 执行日志", - "log_panel.column.time": "时间", - "log_panel.column.status": "状态", - "log_panel.column.duration": "耗时", - "log_panel.column.sql_message": "SQL / 消息", - "log_panel.affected_rows": "影响行数:{{count}}", - "table_overview.status.loading_tables": "加载表信息...", - "table_overview.message.load_tables_failed": "获取表信息失败: {{detail}}", - "table_overview.message.pinned": "已置顶表", - "table_overview.message.unpinned": "已取消置顶", - "table_overview.message.copy_structure_success": "表结构已复制到剪贴板", - "table_overview.message.copy_structure_failed": "复制表结构失败: {{detail}}", - "table_overview.message.exporting_table_format": "正在导出 {{table}} 为 {{format}}...", - "table_overview.message.export_success": "导出成功", - "table_overview.message.export_failed": "导出失败: {{detail}}", - "table_overview.message.delete_table_success": "表已删除", - "table_overview.message.delete_table_failed": "删除表失败: {{detail}}", - "table_overview.table_data_action.truncate.label": "截断表", - "table_overview.table_data_action.clear.label": "清空表", - "table_overview.modal.table_data_action.title": "确认{{action}}", - "table_overview.modal.table_data_action.content": "{{action}}会永久删除表 \"{{table}}\" 中的所有数据,此操作无法撤销。是否继续?", - "table_overview.message.table_data_action_loading": "正在对 {{table}} 执行{{action}}...", - "table_overview.message.table_data_action_success": "{{action}}成功", - "table_overview.message.table_data_action_failed": "{{action}}失败: {{detail}}", - "table_overview.message.rename_table_success": "表已重命名", - "table_overview.message.rename_table_failed": "重命名表失败: {{detail}}", - "table_overview.message.unknown_error": "未知错误", - "table_overview.modal.delete_table.title": "删除表", - "table_overview.modal.delete_table.content": "删除表 \"{{table}}\"?此操作无法撤销。", - "table_overview.modal.rename_table.title": "重命名表", - "table_overview.modal.rename_table.placeholder": "输入新表名", - "table_overview.validation.table_name_required": "表名不能为空", - "table_overview.validation.table_name_unchanged": "新表名与当前表名相同", - "table_overview.toolbar.summary": "{{count}} 张表 · {{rows}} 行 · {{size}}", - "table_overview.placeholder.search": "搜索表名或注释...", - "table_overview.tooltip.sort": "排序", - "table_overview.tooltip.card_view": "卡片视图", - "table_overview.tooltip.list_view": "列表视图", - "table_overview.tooltip.refresh": "刷新", - "table_overview.sort.name": "名称", - "table_overview.sort.rows": "行数", - "table_overview.sort.size": "大小", - "table_overview.metric.data_size": "数据大小", - "table_overview.metric.index_size": "索引大小", - "table_overview.metric.relative_size": "相对大小", - "table_overview.metric.engine": "引擎", - "table_overview.section.all": "全部", - "table_overview.section.pinned": "置顶", - "table_overview.row.engine_table": "{{engine}} 表", - "table_overview.row.open_hint": "双击打开数据,右键查看更多操作", - "table_overview.status.updating_filter": "正在更新筛选结果...", - "table_overview.status.matching_rendered": "匹配 {{matched}} 张表,当前渲染 {{rendered}} 张", - "table_overview.status.hidden_count_hint": "还有 {{count}} 张未渲染,可继续加载或缩小搜索范围", - "table_overview.empty.no_matches": "无匹配结果", - "table_overview.empty.no_tables": "暂无表", - "table_overview.action.show_more": "显示更多表(剩余 {{count}})", - "table_overview.menu.new_query": "新建查询", - "table_overview.menu.design_table": "设计表", - "table_overview.menu.copy_structure": "复制表结构", - "table_overview.menu.backup_table_sql": "备份表 (SQL)", - "table_overview.menu.rename_table": "重命名表", - "table_overview.menu.danger_operations": "危险操作", - "table_overview.menu.truncate_table": "截断表", - "table_overview.menu.clear_table": "清空表", - "table_overview.menu.delete_table": "删除表", - "table_overview.menu.export_table_data": "导出表数据", - "table_overview.menu.export_csv": "导出 CSV", - "table_overview.menu.export_xlsx": "导出 XLSX", - "table_overview.menu.export_json": "导出 JSON", - "table_overview.menu.export_markdown": "导出 Markdown", - "table_overview.menu.export_html": "导出 HTML", - "settings.language.description": "选择 GoNavi 的界面语言。", - "settings.language.english": "English", - "settings.language.follow_system": "跟随系统", - "settings.language.german": "Deutsch", - "settings.language.japanese": "日本語", - "settings.language.restart_hint": "部分编辑器和系统级菜单可能需要重新打开窗口后完全生效。", - "settings.language.russian": "Русский", - "settings.language.simplified_chinese": "简体中文", - "settings.language.title": "语言", - "settings.language.traditional_chinese": "繁體中文", - "settings.title": "设置", - "app.about.action.check_updates": "检查更新", - "app.about.action.download_progress": "下载进度", - "app.about.action.download_update": "下载更新", - "app.about.action.mute_this_version": "本次不再提示", - "app.about.community.ai_book": "AI全书", - "app.about.description": "查看版本信息、仓库地址、更新状态与下载入口。", - "app.about.field.author": "作者", - "app.about.field.community": "技术圈", - "app.about.field.update_status": "更新状态", - "app.about.field.version": "版本", - "app.about.message.load_failed": "获取应用信息失败: {{error}}", - "app.about.project_links": "项目入口", - "app.about.title": "关于 GoNavi", - "app.ai_panel.action.close": "关闭面板", - "app.ai_panel.action.reload": "重新加载", - "app.ai_panel.aria.close": "关闭 AI 面板", - "app.ai_panel.error.description": "这通常是开发环境热更新后懒加载资源失效导致的。已阻止整页白屏,你可以直接重试。", - "app.ai_panel.error.title": "AI 面板加载失败", - "app.data_root.action.migrate_and_switch": "迁移现有数据并切换", - "app.data_root.action.open_current": "打开当前目录", - "app.data_root.action.restore_default_directory": "恢复默认目录", - "app.data_root.action.select": "选择目录", - "app.data_root.action.switch_only": "仅切换到所选目录", - "app.data_root.apply_method": "应用方式", - "app.data_root.current_directory": "当前目录", - "app.data_root.default_directory": "默认目录", - "app.data_root.description": "统一管理连接、代理、AI 配置与驱动等文件型数据的根目录。", - "app.data_root.driver_directory": "驱动目录", - "app.data_root.backend.dialog.select_directory": "选择 GoNavi 数据目录", - "app.data_root.backend.error.create_target_failed": "创建目标数据目录失败:{{detail}}", - "app.data_root.backend.error.create_bootstrap_directory_failed": "创建默认引导目录失败:{{detail}}", - "app.data_root.backend.error.create_data_directory_failed": "创建数据目录失败:{{detail}}", - "app.data_root.backend.error.directory_empty": "数据目录不能为空", - "app.data_root.backend.error.directory_unavailable": "数据目录不存在或不可访问", - "app.data_root.backend.error.migrate_directory_failed": "迁移目录失败({{entry}}):{{detail}}", - "app.data_root.backend.error.migrate_file_failed": "迁移文件失败({{entry}}):{{detail}}", - "app.data_root.backend.error.open_directory_failed": "打开数据目录失败:{{detail}}", - "app.data_root.backend.error.open_directory_unsupported": "当前平台暂不支持打开目录:{{platform}}", - "app.data_root.backend.error.read_source_failed": "读取源数据失败({{entry}}):{{detail}}", - "app.data_root.backend.message.migrated_restart": "数据已迁移并切换到新目录,建议重启应用以完成全部模块切换", - "app.data_root.backend.message.opened": "已打开数据目录", - "app.data_root.backend.message.unchanged": "数据目录未发生变化", - "app.data_root.backend.message.updated_restart": "数据目录已更新,建议重启应用以让 AI 与其他运行态模块完全切换到新目录", - "app.data_root.message.apply_failed": "应用数据目录失败", - "app.data_root.message.apply_failed_with_error": "应用数据目录失败: {{error}}", - "app.data_root.message.load_failed": "加载数据目录信息失败", - "app.data_root.message.load_failed_with_error": "加载数据目录信息失败: {{error}}", - "app.data_root.message.open_failed": "打开数据目录失败", - "app.data_root.message.open_failed_with_error": "打开数据目录失败: {{error}}", - "app.data_root.message.select_failed": "选择数据目录失败", - "app.data_root.message.select_failed_with_error": "选择数据目录失败: {{error}}", - "app.data_root.message.select_valid_first": "请先选择有效的数据目录", - "app.data_root.message.updated": "数据目录已更新", - "app.data_root.placeholder.select_new_directory": "选择新的数据目录", - "app.data_root.restart_hint": "切换后建议重启应用,以确保 AI 与其他长生命周期模块完全切换到新目录。敏感密码仍保存在系统 secret store,不会随文件目录迁移。", - "app.data_root.switch_target": "切换目标", - "app.data_root.title": "数据存储位置", - "app.proxy.description": "统一配置更新检查、驱动管理与未单独指定代理的连接网络出口。", - "app.proxy.enable": "启用全局代理", - "app.proxy.host": "代理地址", - "app.proxy.host_placeholder": "例如:127.0.0.1", - "app.proxy.message.invalid_enabled": "全局代理已开启,但地址或端口无效,当前按未启用处理", - "app.proxy.message.save_failed": "全局代理配置失败: {{error}}", - "app.proxy.password_optional": "密码(可选)", - "app.proxy.port": "端口", - "app.proxy.scope_hint": "* 作用于更新检查、驱动管理网络请求,以及未单独配置代理的数据库连接", - "app.proxy.section_title": "全局代理", - "app.proxy.title": "全局代理设置", - "app.proxy.type": "代理类型", - "app.proxy.username_optional": "用户名(可选)", - "proxy.backend.error.unsupported_type": "不支持的代理类型:{{type}}", - "proxy.backend.error.host_empty": "代理主机为空", - "proxy.backend.error.port_invalid": "代理端口无效:{{port}}", - "proxy.backend.error.remote_addr_invalid": "无效的远端地址:{{address}}", - "proxy.backend.error.listen_failed": "创建本地代理监听失败:{{detail}}", - "proxy.backend.error.socks5_dialer_failed": "创建 SOCKS5 代理拨号器失败:{{detail}}", - "proxy.backend.error.socks5_connect_failed": "SOCKS5 代理连接失败:{{detail}}", - "proxy.backend.error.http_connect_failed": "连接 HTTP 代理失败:{{detail}}", - "proxy.backend.error.http_connect_write_failed": "发送 HTTP CONNECT 请求失败:{{detail}}", - "proxy.backend.error.http_connect_read_failed": "读取 HTTP CONNECT 响应失败:{{detail}}", - "proxy.backend.error.http_connect_status_failed": "HTTP 代理 CONNECT 失败:{{status}}", - "app.startup_readiness.loading_local_config": "正在加载本地配置...", - "app.startup_readiness.loading_security_config": "正在加载安全配置...", - "app.security_update.error.capability_unavailable": "安全更新能力不可用", - "app.security_update.message.completed": "已保存配置已完成安全更新", - "app.security_update.message.needs_attention": "更新尚未完成,有少量配置需要你处理", - "app.security_update.message.not_finished_retry_later": "安全更新未完成,请稍后重试", - "app.security_update.message.postpone_failed": "暂时无法延后本次安全更新", - "app.security_update.message.rolled_back": "本次更新未完成,系统已保留当前可用配置", - "app.security_update.stage.checking_saved_config": "正在检查已保存配置", - "app.security_update.stage.updating_secure_storage": "正在更新安全存储", - "app.security_update.stage.verifying_result": "正在校验更新结果", - "security_update.banner.title": "已保存配置可进行安全更新", - "security_update.banner.action.start_now": "立即更新", - "security_update.banner.action.view_details": "查看详情", - "security_update.banner.action.restart_update": "重新开始更新", - "security_update.banner.action.retry_check": "重新检查", - "security_update.backend.issue.ai_provider.migration_required": "AI 提供商配置仍保存在当前应用配置中,完成安全更新后会迁入新的安全存储。", - "security_update.backend.issue.ai_provider.missing_or_resave": "AI 提供商配置已不存在或仍需重新保存后才能完成安全更新。", - "security_update.backend.issue.ai_provider.secret_missing": "AI 提供商配置需要补充后才能完成安全更新。", - "security_update.backend.issue.connection.incomplete": "连接配置仍需补充后才能完成安全更新。", - "security_update.backend.issue.connection.missing_or_resave": "连接配置已不存在或仍需重新保存后才能完成安全更新。", - "security_update.backend.issue.connection.password_missing": "连接密码已丢失,请重新保存后再继续。", - "security_update.backend.issue.global_proxy.missing_or_resave": "全局代理配置已不存在或仍需重新保存后才能完成安全更新。", - "security_update.backend.issue.global_proxy.password_incomplete": "全局代理密码仍需补充后才能完成安全更新。", - "security_update.backend.issue.global_proxy.password_missing": "全局代理密码已丢失,请重新保存后再继续。", - "security_update.backend.issue.global_proxy.title": "全局代理", - "security_update.backend.issue.system.message": "当前环境无法完成本次安全更新,请稍后重试。", - "security_update.backend.issue.system.title": "安全更新未完成", - "security_update.intro.title": "已保存配置安全更新", - "security_update.intro.subtitle": "使用新的安全存储方式前,需要先完成一次本地配置更新。", - "security_update.intro.description": "为了让已保存的连接、代理和相关服务配置使用新的安全存储方式,本次更新需要进行一次本地配置更新。更新前会自动创建本地备份;如果本次未完成,系统会保留当前可用配置,你也可以稍后继续。", - "security_update.intro.action.details": "查看详情", - "security_update.intro.action.later": "稍后提醒我", - "security_update.intro.action.start_now": "立即更新", - "security_update.progress.default_detail": "更新过程中会保留当前可用配置,请稍候。", - "security_update.settings.title": "安全更新", - "security_update.settings.subtitle": "管理已保存配置的安全更新状态与待处理项。", - "security_update.settings.action.retry_check": "重新检查", - "security_update.settings.action.restart_update": "重新开始更新", - "security_update.settings.action.start": "开始更新", - "security_update.settings.action.close": "关闭", - "security_update.settings.current_status": "当前状态:{{status}}", - "security_update.settings.scope_title": "影响范围", - "security_update.settings.summary.total": "总计", - "security_update.settings.summary.updated": "已更新", - "security_update.settings.summary.pending": "待处理", - "security_update.settings.summary.skipped": "已跳过", - "security_update.settings.summary.failed": "失败", - "security_update.settings.pending_list": "待处理清单", - "security_update.settings.empty_pending": "当前没有待处理项", - "security_update.settings.item_status": "状态:{{status}}", - "security_update.settings.item_severity": "级别:{{severity}}", - "security_update.settings.item_default_message": "当前项需要进一步处理后才能完成安全更新。", - "security_update.settings.recent_result": "最近一次结果", - "security_update.settings.backup_path": "备份位置:", - "security_update.settings.last_error": "最近错误:", - "security_update.status.pending.label": "待更新", - "security_update.status.pending.description": "检测到可进行的安全更新,你可以现在开始或稍后继续。", - "security_update.status.postponed.label": "待更新", - "security_update.status.postponed.description": "本次安全更新已延后,当前可用配置会继续保留。", - "security_update.status.in_progress.label": "更新中", - "security_update.status.in_progress.description": "正在检查并更新已保存配置的安全存储。", - "security_update.status.needs_attention.label": "待处理", - "security_update.status.needs_attention.description": "更新尚未完成,有少量配置需要你处理。", - "security_update.status.completed.label": "已完成", - "security_update.status.completed.description": "已保存配置已完成安全更新。", - "security_update.status.rolled_back.label": "已回退", - "security_update.status.rolled_back.description": "本次更新未完成,系统已保留当前可用配置。", - "security_update.status.not_detected.label": "未检测到", - "security_update.status.not_detected.description": "当前没有需要处理的安全更新。", - "security_update.action.open_connection": "打开连接", - "security_update.action.open_proxy_settings": "代理设置", - "security_update.action.open_ai_settings": "AI 设置", - "security_update.action.retry_update": "重新检查", - "security_update.action.view_details": "查看详情", - "security_update.item_status.pending": "待更新", - "security_update.item_status.updated": "已更新", - "security_update.item_status.needs_attention": "待处理", - "security_update.item_status.skipped": "已跳过", - "security_update.item_status.failed": "失败", - "security_update.severity.high": "高风险", - "security_update.severity.medium": "中风险", - "security_update.severity.low": "低风险", - "security_update.repair.warning.connection_not_found": "未找到对应连接,请先重新检查最新状态", - "security_update.bootstrap.legacy.connection.message": "该连接仍保存在当前应用的本地配置中,完成安全更新后会迁入新的安全存储。", - "security_update.bootstrap.legacy.global_proxy.title": "全局代理", - "security_update.bootstrap.legacy.global_proxy.message": "全局代理仍保存在当前应用的本地配置中,完成安全更新后会迁入新的安全存储。", - "security_update.error.capability_unavailable": "安全更新能力不可用", - "app.settings.description": "集中处理语言、代理、主题、AI 与关于等通用配置入口。", - "app.settings.entry.about.description": "查看版本信息、仓库地址和更新状态。", - "app.settings.entry.about.title": "关于 GoNavi", - "app.settings.entry.ai.description": "管理模型供应商、密钥和默认行为。", - "app.settings.entry.ai.title": "AI 设置", - "app.settings.entry.proxy.description": "统一配置更新检查、驱动管理和公共网络出口。", - "app.settings.entry.proxy.title": "全局代理", - "app.settings.entry.theme.description": "切换亮暗主题并调整界面观感。", - "app.settings.entry.theme.title": "主题与外观", - "app.settings.title": "设置中心", - "app.shortcuts.action.focusSidebarSearch.description": "定位到左侧连接树搜索框", - "app.shortcuts.action.focusSidebarSearch.label": "聚焦侧边栏搜索", - "app.shortcuts.action.newConnection.description": "创建新的数据库、运行时或其他数据源连接", - "app.shortcuts.action.newConnection.label": "新建数据源", - "app.shortcuts.action.newQueryTab.description": "创建一个新的 SQL 查询标签页", - "app.shortcuts.action.newQueryTab.label": "新建查询页", - "app.shortcuts.action.openShortcutManager.description": "打开快捷键设置面板", - "app.shortcuts.action.openShortcutManager.label": "打开快捷键管理", - "app.shortcuts.action.record": "录制", - "app.shortcuts.action.resetWindowZoom.description": "Windows 任务栏恢复后字体异常变大时主动触发;会切一次最大化让 WebView2 重算字体度量", - "app.shortcuts.action.resetWindowZoom.label": "重置窗口缩放", - "app.shortcuts.action.restore_defaults": "恢复默认", - "app.shortcuts.action.runQuery.description": "在当前查询页执行 SQL", - "app.shortcuts.action.runQuery.label": "执行 SQL", - "app.shortcuts.action.saveQuery.description": "保存当前查询页;未命名查询会打开保存弹窗", - "app.shortcuts.action.saveQuery.label": "保存查询", - "app.shortcuts.action.selectCurrentStatement.description": "在查询编辑器中选中光标所在 SQL 语句", - "app.shortcuts.action.selectCurrentStatement.label": "选择当前语句", - "app.shortcuts.action.sendAIChatMessage.description": "在 AI 输入框中发送当前消息,Shift+Enter 始终换行", - "app.shortcuts.action.sendAIChatMessage.label": "AI 聊天发送", - "app.shortcuts.action.switchToNextTab.description": "在打开的标签页中向右切换", - "app.shortcuts.action.switchToNextTab.label": "切换到下一个标签页", - "app.shortcuts.action.switchToPreviousTab.description": "在打开的标签页中向左切换", - "app.shortcuts.action.switchToPreviousTab.label": "切换到上一个标签页", - "app.shortcuts.action.toggleAIPanel.description": "打开右侧 AI 数据洞察面板", - "app.shortcuts.action.toggleAIPanel.label": "打开 AI 数据洞察", - "app.shortcuts.action.toggleLogPanel.description": "打开或关闭 SQL 执行日志面板", - "app.shortcuts.action.toggleLogPanel.label": "切换日志面板", - "app.shortcuts.action.toggleMacFullscreen.description": "macOS 原生窗口控制模式下的全屏切换", - "app.shortcuts.action.toggleMacFullscreen.label": "切换原生全屏", - "app.shortcuts.action.toggleTheme.description": "在亮色和暗色主题之间切换", - "app.shortcuts.action.toggleTheme.label": "切换主题", - "app.shortcuts.action.diagnoseQuery.description": "对当前 SQL 执行 EXPLAIN 并展示执行计划图与索引建议", - "app.shortcuts.action.diagnoseQuery.label": "SQL 诊断", - "app.shortcuts.action.showSlowQueries.description": "查看当前连接的慢 SQL 历史记录(默认阈值 500ms)", - "app.shortcuts.action.showSlowQueries.label": "慢 SQL 历史", - "app.shortcuts.capture_hint": "点击“录制”后按下快捷键。按 Esc 可取消录制。全局快捷键建议包含修饰键;AI 聊天发送仅支持 Enter 相关组合,Shift+Enter 保留换行。", - "app.shortcuts.capture_waiting": "请按下快捷键...", - "app.shortcuts.context.datagrid": "数据表格", - "app.shortcuts.context.global": "浏览器", - "app.shortcuts.context.monaco": "编辑器", - "app.shortcuts.description": "统一查看、录制与启停常用快捷键,保持操作习惯一致。", - "app.shortcuts.message.ai_send_limit": "AI 聊天发送快捷键仅支持 Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter,Shift+Enter 保留换行", - "app.shortcuts.message.conflict": "与「{{action}}」冲突,请换一个快捷键", - "app.shortcuts.message.modifier_required": "快捷键至少包含 Ctrl / Alt / Shift / Meta 之一", - "app.shortcuts.message.reserved_conflict_info": "已覆盖编辑器「{{labels}}」默认快捷键", - "app.shortcuts.message.reserved_conflict_warning": "与{{contexts}}「{{labels}}」冲突,可能失效", - "app.shortcuts.message.restored_defaults": "已恢复默认快捷键", - "app.shortcuts.reserved.browser_close_tab": "浏览器关闭标签页", - "app.shortcuts.reserved.browser_new_incognito_window": "浏览器新建隐身窗口", - "app.shortcuts.reserved.browser_new_tab": "浏览器新建标签页", - "app.shortcuts.reserved.browser_new_window": "浏览器新建窗口", - "app.shortcuts.reserved.browser_print": "浏览器打印", - "app.shortcuts.reserved.browser_save": "浏览器保存", - "app.shortcuts.reserved.datagrid_copy": "数据表格复制", - "app.shortcuts.reserved.editor_add_selection": "编辑器添加选区", - "app.shortcuts.reserved.editor_delete_line": "编辑器删除行", - "app.shortcuts.reserved.editor_find": "编辑器查找", - "app.shortcuts.reserved.editor_find_global": "编辑器全局查找", - "app.shortcuts.reserved.editor_goto_line": "编辑器跳转行", - "app.shortcuts.reserved.editor_insert_line_after": "编辑器在下方插入行", - "app.shortcuts.reserved.editor_insert_line_before": "编辑器在上方插入行", - "app.shortcuts.reserved.editor_quick_open": "编辑器快速打开", - "app.shortcuts.reserved.editor_rename_symbol": "编辑器重命名符号", - "app.shortcuts.reserved.editor_replace": "编辑器替换", - "app.shortcuts.title": "快捷键管理", - "app.sidebar.ai_assistant": "AI 助手", - "app.sidebar.resize_width": "拖动调整宽度", - "app.sidebar.settings": "设置", - "app.sidebar.sql_execution_log": "SQL 执行日志", - "app.sidebar.tools": "工具", - "app.tools.entry.snippets.description": "管理 SQL 代码片段和前缀补全。", - "app.tools.entry.snippets.title": "代码片段管理", - "app.theme.action.restore_defaults": "恢复默认", - "app.theme.appearance.blur_hint": "* 仅控制应用内覆盖层的模糊效果", - "app.theme.appearance.blur_title": "高斯模糊 (Blur)", - "app.theme.appearance.enable_transparency_blur": "启用透明与模糊", - "app.theme.appearance.enable_transparency_blur_hint": "关闭后保留当前阈值,重新开启时直接恢复之前的设置。", - "app.theme.appearance.font_size_title": "基础字体大小 (Font Size)", - "app.theme.appearance.opacity_title": "背景不透明度 (Opacity)", - "app.theme.appearance.transparency_blur_title": "透明与模糊效果", - "app.theme.appearance.ui_scale_hint": "* 建议小屏设备设置为 85%-95%", - "app.theme.appearance.ui_scale_title": "界面缩放 (UI Scale)", - "app.theme.appearance.windows_acrylic_hint": "Windows 使用系统 Acrylic 效果,模糊程度由系统控制", - "app.theme.appearance_settings_description": "统一调整缩放、字体、透明度与模糊效果。", - "app.theme.appearance_settings_title": "外观设置", - "app.theme.data_table.column_width_hint": "标准模式默认列宽 200px;紧凑模式默认列宽 140px。已手动拖拽调整的列宽优先保留。", - "app.theme.data_table.column_width_mode": "数据表列宽模式", - "app.theme.data_table.column_width_mode.compact": "紧凑 140px", - "app.theme.data_table.column_width_mode.standard": "标准 200px", - "app.theme.data_table.title": "数据表显示", - "app.theme.data_table.vertical_borders": "显示数据表竖向分隔线", - "app.theme.data_table.vertical_borders_hint": "仅作用于数据表页面 DataGrid,不影响其他表格组件。", - "app.theme.mac_window.restart_hint": "* 已同步隐藏右上角自定义按钮;如系统窗口样式未立即刷新,可重启应用后再确认", - "app.theme.mac_window.title": "macOS 窗口控制", - "app.theme.mac_window.use_native_controls": "使用 macOS 原生窗口控制", - "app.theme.mac_window.use_native_controls_hint": "启用后显示左上角红黄绿按钮,并优先使用 macOS 原生全屏行为。", - "app.theme.mode.dark.description": "适合低光环境,视觉更沉稳。", - "app.theme.mode.dark.label": "暗色主题", - "app.theme.mode.light.description": "适合明亮环境,层次更轻。", - "app.theme.mode.light.label": "亮色主题", - "app.theme.mode_title": "主题模式", - "app.theme.nav.appearance.description": "缩放、字体与透明度", - "app.theme.nav.appearance.title": "外观参数", - "app.theme.nav.theme.description": "亮色与暗色切换", - "app.theme.nav.theme.title": "主题模式", - "app.theme.navigation_title": "设置导航", - "app.theme.startup_window.fullscreen": "启动时全屏", - "app.theme.startup_window.fullscreen_windows": "启动时全屏(Windows 按最大化处理)", - "app.theme.startup_window.hint": "* 修改后下次启动生效", - "app.theme.startup_window.title": "启动窗口", - "app.theme.startup_window.windows_hint": "* Windows 下该选项按“启动时最大化”处理,修改后下次启动生效", - "app.theme.theme_settings_description": "切换亮暗主题,保持整体视觉风格统一。", - "app.theme.theme_settings_title": "主题设置", - "app.theme.ui_version.badge.new": "NEW", - "app.theme.ui_version.beta_warning": "新版 UI 仍在 Beta,部分屏幕样式可能与旧版有差异,遇到问题可随时切回。", - "app.theme.ui_version.description": "在保留全部功能的前提下切换整体外观,新版采用更紧凑的信息层级与更现代的视觉语言。", - "app.theme.ui_version.legacy.badge": "默认", - "app.theme.ui_version.legacy.description": "当前稳定界面,所有功能完整可用。", - "app.theme.ui_version.legacy.label": "旧版 UI", - "app.theme.ui_version.platform_hint": "Windows、macOS 与 Linux 均可切换;切换后立即生效,部分弹窗会在下次打开时使用新样式。", - "app.theme.ui_version.sidebar_search.command": "新版命令搜索", - "app.theme.ui_version.sidebar_search.filter": "旧版侧栏筛选", - "app.theme.ui_version.sidebar_search.hint": "新版命令搜索适合跳转连接、表和动作,可在面板中开启同步开关持续过滤左侧树;旧版侧栏筛选会直接显示输入框并持久保留筛选内容。", - "app.theme.ui_version.sidebar_search.title": "新版左侧搜索模式", - "app.theme.tab_display.title": "Tab 标签展示", - "app.theme.tab_display.description": "自定义连接名、对象类型、对象名、数据库、Schema 和 Host/IP 的展示顺序;双行模式可把上下文放到副行。", - "app.theme.tab_display.layout.single": "单行", - "app.theme.tab_display.layout.double": "双行", - "app.theme.tab_display.badge.current": "当前", - "app.theme.tab_display.row.primary": "主行", - "app.theme.tab_display.row.secondary": "副行", - "app.theme.tab_display.action.move_up": "上移", - "app.theme.tab_display.action.move_down": "下移", - "app.theme.tab_display.preview.prefix": "当前预览:", - "app.theme.tab_display.preview.default_label": "默认标签", - "app.theme.tab_display.preview.secondary": ",副行 {{labels}}", - "app.theme.tab_display.preview.focused": ";当前选中 {{label}}", - "app.theme.tab_display.element.connection.label": "连接名", - "app.theme.tab_display.element.connection.description": "连接简称或环境名,例如 DEV", - "app.theme.tab_display.element.kind.label": "对象类型", - "app.theme.tab_display.element.kind.description": "SQL / TABLE / VIEW 等类型标签", - "app.theme.tab_display.element.object.label": "对象名", - "app.theme.tab_display.element.object.description": "表名、查询名、资源名等核心名称", - "app.theme.tab_display.element.database.label": "数据库", - "app.theme.tab_display.element.database.description": "当前 DB / catalog 名称", - "app.theme.tab_display.element.schema.label": "Schema", - "app.theme.tab_display.element.schema.description": "schema / owner 前缀", - "app.theme.tab_display.element.host.label": "Host/IP", - "app.theme.tab_display.element.host.description": "连接目标地址摘要", - "app.theme.ui_version.title": "界面版本", - "app.theme.ui_version.v2.badge": "Beta", - "app.theme.ui_version.v2.description": "重新设计的紧凑界面,强化 AI 入口与表概览。", - "app.theme.ui_version.v2.label": "新版 UI", - "app.tools.description": "集中处理连接配置、同步、驱动和快捷键相关操作。", - "app.tools.group.config.description": "导入导出、数据目录和已保存配置维护。", - "app.tools.group.config.title": "连接与配置", - "app.tools.group.workflow.description": "比对结构、分析差异并发起同步。", - "app.tools.group.workflow.title": "数据工作流", - "app.tools.group.workspace.description": "驱动、代码片段和全局快捷键。", - "app.tools.group.workspace.title": "编辑器与驱动", - "app.tools.entry.data_root.description": "查看、切换或迁移本地数据存储位置。", - "app.tools.entry.data_root.title": "数据目录", - "app.tools.entry.drivers.description": "安装、更新或移除数据库驱动。", - "app.tools.entry.drivers.title": "驱动管理", - "app.tools.entry.export.description": "导出当前连接与可见配置字段。", - "app.tools.entry.export.title": "导出连接配置", - "app.tools.entry.import.description": "从本地文件恢复连接列表。", - "app.tools.entry.import.title": "导入连接配置", - "app.tools.entry.security_update.description": "查看已保存配置的安全更新状态。", - "app.tools.entry.security_update.status_description": "当前状态:{{status}}", - "app.tools.entry.security_update.title": "安全更新", - "app.window_zoom.message.fullscreen_exit_first": "全屏状态下无法重置缩放,请先退出全屏", - "app.window_zoom.message.reset_failed": "重置窗口缩放失败", - "app.window_zoom.message.reset_success": "已重置窗口缩放", - "app.window_zoom.message.reset_success_fallback": "已重置窗口缩放(回退方案)", - "app.window_zoom.message.windows_only": "该功能仅在 Windows 平台生效", - "app.tools.entry.shortcuts.description": "查看并调整全局快捷键绑定。", - "app.tools.entry.shortcuts.title": "快捷键管理", - "app.tools.entry.schema_compare.description": "对比源表与目标表结构差异,只预览不执行。", - "app.tools.entry.schema_compare.title": "表结构比对", - "app.tools.entry.data_compare.description": "按主键分析新增、更新、删除和相同行。", - "app.tools.entry.data_compare.title": "数据比对", - "app.tools.entry.sync.description": "进入跨源同步工作流。", - "app.tools.entry.sync.title": "数据同步", - "app.tools.title": "工具中心", - "app.connection_package.action.start_export": "开始导出", - "app.connection_package.action.start_import": "开始导入", - "app.connection_package.dialog.export_title": "导出连接", - "app.connection_package.dialog.file_password_placeholder": "请输入文件保护密码(可选)", - "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "密码已加密保护。如需通过公网传输,建议设置文件保护密码。", - "app.connection_package.dialog.help.exclude_passwords": "将仅导出连接配置,不包含密码。", - "app.connection_package.dialog.help.share_file_password_separately": "请通过单独渠道将密码告知接收方,不要和文件一起发送。", - "app.connection_package.dialog.import_password_title": "输入导入密码", - "app.connection_package.dialog.option.include_passwords": "导出连接密码", - "app.connection_package.dialog.option.use_file_password": "设置文件保护密码", - "app.connection_package.dialog.restore_password_placeholder": "请输入恢复包密码", - "app.connection_package.error.export_capability_unavailable": "导出失败:当前后端未提供新版导出能力", - "app.connection_package.error.file_password_required": "文件保护密码不能为空", - "app.connection_package.error.import_capability_unavailable": "导入失败:当前后端未提供新版导入能力", - "app.connection_package.error.import_no_connections": "导入失败:后端未返回连接列表", - "app.connection_package.error.missing_import_payload": "导入失败:未找到待导入的恢复包内容", - "app.connection_package.error.refresh_failed_no_connections": "导入成功,但刷新连接列表失败:后端未返回连接列表", - "app.connection_package.error.restore_password_required": "恢复包密码不能为空", - "app.connection_package.message.export_failed": "导出失败", - "app.connection_package.message.export_succeeded": "导出成功", - "app.connection_package.message.import_failed": "导入失败", - "app.connection_package.message.import_failed_with_error": "导入失败: {{error}}", - "app.connection_package.message.imported_connections": "成功导入 {{count}} 个连接", - "app.connection_package.message.imported_with_missing_passwords": "成功导入 {{count}} 个连接,部分连接未包含密码,请编辑对应连接并输入密码后保存", - "app.connection.message.editable_load_failed": "读取已保存连接详情失败,当前将打开脱敏配置", - "app.connection.message.editable_load_failed_with_detail": "读取已保存连接详情失败:{{detail}},当前将打开脱敏配置", - "app.connection_package.message.no_connections_to_export": "没有连接可导出", - "app.connection_package.message.unsupported_file_format": "文件格式错误:仅支持 GoNavi 恢复包、历史 JSON 连接数组或 MySQL Workbench XML", - "app.browser_mock.export_sql_unsupported": "浏览器 mock 不支持 SQL 文件导出", - "app.browser_mock.import_connection_package_unsupported": "浏览器 mock 不支持恢复包导入,仅支持历史 JSON 连接数组", - "app.browser_mock.export_connection_package_unsupported": "浏览器 mock 不支持恢复包导出", - "app.browser_mock.mcp_http.not_running": "GoNavi MCP HTTP 服务未启动", - "app.browser_mock.mcp_http.started": "GoNavi MCP HTTP 服务已启动", - "app.browser_mock.mcp_http.stopped": "GoNavi MCP HTTP 服务已停止", - "app.browser_mock.mcp_server.command_required": "MCP 命令不能为空", - "app.browser_mock.mcp_server.test_success": "MCP mock 测试成功", - "app.browser_mock.mcp_tool.unavailable": "浏览器 mock 未接入真实 MCP 服务", - "app.browser_mock.mcp_client.claude_code.installed": "已写入 Claude Code 用户级 MCP 配置,重启 Claude CLI 后可在 /mcp 的 User MCPs 中看到 GoNavi。", - "app.browser_mock.mcp_client.claude_code.not_detected": "未检测到 Claude Code 用户级 GoNavi MCP 配置", - "app.browser_mock.mcp_client.codex.installed": "已写入 Codex 用户级 MCP 配置,重启 Codex CLI 或桌面端后可看到 GoNavi。", - "app.browser_mock.mcp_client.codex.path_mismatch": "已检测到 Codex 中的 GoNavi MCP 记录,但与当前 GoNavi 安装路径不一致,建议更新", - "app.browser_mock.provider.test_failed_detail": "连接测试失败:{{detail}}", - "app.browser_mock.provider.test_success": "端点连通性测试成功", - "app.update.action.hide_to_background": "隐藏到后台", - "app.update.action.install_update": "安装更新", - "app.update.action.open_install_directory": "打开安装目录", - "app.update.backend.error.check_failed": "检查更新失败:{{detail}}", - "app.update.backend.error.check_http_status": "检查更新失败:HTTP {{status}}", - "app.update.backend.error.download_failed": "更新下载失败:{{detail}}", - "app.update.backend.error.install_unsupported": "当前平台暂不支持更新安装:{{platform}}", - "app.update.backend.error.latest_version_unparseable": "无法解析最新版本号", - "app.update.backend.error.online_update_unsupported": "当前平台暂不支持在线更新:{{platform}}", - "app.update.backend.error.package_download_http_failed": "下载更新包失败:HTTP {{status}}", - "app.update.backend.error.package_file_busy": "更新下载失败,文件被占用:{{detail}}", - "app.update.backend.error.release_version_unparseable": "无法解析发布版本号", - "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS 未包含当前平台更新包", - "app.update.backend.error.sha256sums_download_failed": "下载 SHA256SUMS 失败:HTTP {{status}}", - "app.update.backend.error.sha256sums_missing": "Release 未提供 SHA256SUMS", - "app.update.backend.error.update_package_not_found": "未找到更新包:{{name}}", - "app.update.backend.message.app_directory_unavailable": "无法访问应用目录:{{path}}", - "app.update.backend.message.app_directory_unresolved_download": "无法确定当前应用目录,无法下载更新", - "app.update.backend.message.check_first": "请先检查更新", - "app.update.backend.message.checksum_failed": "更新包校验失败,请重试", - "app.update.backend.message.checksum_missing": "缺少更新包校验值(SHA256SUMS)", - "app.update.backend.message.create_workspace_failed": "无法在应用目录创建更新工作目录:{{path}}", - "app.update.backend.message.download_in_progress": "更新包正在下载中,请稍后重试", - "app.update.backend.message.install_launch_failed": "启动更新安装程序失败:{{detail}}", - "app.update.backend.message.install_launch_failed_with_log": "启动更新安装程序失败:{{detail}}(更新日志:{{path}})", - "app.update.backend.message.install_started": "更新已开始安装", - "app.update.backend.message.install_started_with_log": "更新已开始安装,日志路径:{{path}}", - "app.update.backend.message.latest": "已是最新版本", - "app.update.backend.message.no_downloaded_package": "未找到已下载的更新包", - "app.update.backend.message.no_update_package": "未找到可用的更新包", - "app.update.backend.message.open_directory_failed": "打开更新目录失败:{{detail}}", - "app.update.backend.message.open_directory_unsupported": "当前平台暂不支持打开目录:{{platform}}", - "app.update.backend.message.opened_install_directory": "已打开安装目录:{{path}}", - "app.update.backend.message.package_already_downloaded": "更新包已下载完成", - "app.update.backend.message.package_directory_unavailable": "更新目录不存在或不可访问", - "app.update.backend.message.package_directory_unresolved": "无法解析更新目录", - "app.update.backend.message.package_downloaded": "更新包下载完成", - "app.update.backend.message.package_path_empty": "更新包路径为空", - "app.update.backend.message.update_found": "发现新版本:{{version}}", - "app.update.download_title": "下载更新", - "app.update.download_title_with_version": "下载更新 {{version}}", - "app.update.message.check_failed": "检查更新失败: {{error}}", - "app.update.message.download_completed": "更新下载完成", - "app.update.message.download_completed_with_path": "更新下载完成,更新包路径:{{path}}", - "app.update.message.download_failed": "更新下载失败: {{error}}", - "app.update.message.install_failed": "更新安装失败: {{error}}", - "app.update.message.open_install_directory_failed": "打开安装目录失败: {{error}}", - "app.update.message.opened_install_directory": "已打开安装目录,请手动完成替换", - "app.update.message.package_ready": "更新包已就绪({{version}})", - "app.update.message.package_ready_with_path": "更新包已就绪({{version}}),路径:{{path}}", - "app.update.message.update_found": "发现新版本 {{version}}", - "app.update.status.available_downloaded": "发现新版本 {{version}}(已下载,请点击“下载进度”后安装)", - "app.update.status.available_not_downloaded": "发现新版本 {{version}}(未下载)", - "app.update.status.check_failed": "检查更新失败: {{error}}", - "app.update.status.checking": "正在检查更新...", - "app.update.status.latest": "当前已是最新版本({{version}})", - "app.update.status.not_checked": "未检查", - "connection.delete": "删除连接", - "connection.edit": "编辑连接", - "connection.new": "新建连接", - "connection.test": "测试连接", - "connection.unnamed": "未命名连接", - "database.unnamed": "未命名数据库", - "database.label": "数据库", - "connection.copy_suffix": " - 副本", - "query.format": "美化 SQL", - "query.new": "新建查询", - "query.run": "运行", - "query.save": "保存查询", - "saved_query.default_name": "查询-{{index}}", - "query.stop": "停止", - "message_publish_modal.title": "测试发送消息", - "message_publish_modal.title_with_connection": "测试发送消息 · {{connectionName}}", - "message_publish_modal.action.send": "发送", - "message_publish_modal.error.build_command_failed": "构造发送命令失败", - "message_publish_modal.error.send_failed_detail": "发送失败:{{detail}}", - "message_publish_modal.error.unknown_error": "未知错误", - "message_publish_modal.field.exchange.label": "Exchange(可选)", - "message_publish_modal.field.exchange.extra": "留空使用默认交换机;若填写自定义交换机,请确认目标 Queue 已建立 binding。", - "message_publish_modal.field.exchange.placeholder": "例如:events.topic", - "message_publish_modal.field.routing_key.label": "Routing Key(可选)", - "message_publish_modal.field.routing_key.extra": "留空时默认使用当前 Queue 名。", - "message_publish_modal.field.routing_key.placeholder": "例如:orders.queue", - "message_publish_modal.field.qos.extra": "0 为 at most once,1 为 at least once,2 为 exactly once。", - "message_publish_modal.field.retain.label": "Retain 消息", - "message_publish_modal.field.tag.label": "Tag(可选)", - "message_publish_modal.field.tag.extra": "留空表示不过滤或不写入 Tag。", - "message_publish_modal.field.delay_level.label": "Delay Level(可选)", - "message_publish_modal.field.delay_level.extra": "RocketMQ 使用固定延时级别,0 表示立即发送。", - "message_publish_modal.field.body_mode.label": "消息体类型", - "message_publish_modal.field.body.label": "消息体", - "message_publish_modal.field.body.required": "请输入消息体", - "message_publish_modal.field.body.extra": "JSON 模式下需输入合法 JSON;文本模式按原样发送。", - "message_publish_modal.field.body.placeholder": "请输入消息体", - "message_publish_modal.field.headers.label": "Headers(可选)", - "message_publish_modal.field.headers.extra": "需为 JSON 对象,例如 {{example}}。", - "message_publish_modal.field.properties.label": "Properties(可选)", - "message_publish_modal.field.properties.extra": "需为 JSON 对象,例如 {{example}}。", - "message_publish_modal.option.no_delay": "不延时", - "message_publish_modal.option.text": "文本", - "message_publish_modal.footer.success_prefix": "发送成功后会返回", - "message_publish_modal.footer.success_suffix": ",用于确认本次测试消息是否已提交。", - "message_publish.field.body": "消息体", - "message_publish.field.message_key": "消息 Key", - "message_publish.error.destination_required": "请输入目标 Topic / Queue", - "message_publish.error.required_field": "请输入{{field}}", - "message_publish.error.invalid_json_detail": "{{field}}不是合法 JSON:{{detail}}", - "message_publish.error.json_object_required": "{{field}} 必须是 JSON 对象", - "message_publish.error.mqtt_wildcard_topic": "MQTT 发送 Topic 不能包含 + 或 # 通配符", - "message_publish.error.unsupported_type": "当前数据源暂不支持测试发送消息:{{type}}", - "message_publish.presentation.rabbitmq.destination_placeholder": "例如:orders.queue", - "message_publish.presentation.rabbitmq.destination_required": "请输入 Queue", - "message_publish.presentation.rabbitmq.alert": "当前表单会自动拼装 RabbitMQ publish JSON 命令,并通过 Management API 执行测试发送。", - "message_publish.presentation.rabbitmq.success_hint": "留空 Exchange 时会使用默认交换机并按 Queue 名作为 routing key。", - "message_publish.presentation.rocketmq.destination_placeholder": "例如:orders.events", - "message_publish.presentation.topic_required": "请输入 Topic", - "message_publish.presentation.rocketmq.alert": "当前表单会自动拼装 RocketMQ publish JSON 命令,并通过 NameServer/Broker 执行测试发送。", - "message_publish.presentation.rocketmq.success_hint": "Tag、Keys、Delay Level 与 Properties 会一并写入 RocketMQ 消息属性。", - "message_publish.presentation.keys_label": "消息 Keys(可选)", - "message_publish.presentation.rocketmq.key_placeholder": "可输入多个 Key,使用逗号分隔", - "message_publish.presentation.rocketmq.tag_placeholder": "例如:TagA", - "message_publish.presentation.mqtt.destination_placeholder": "例如:devices/device-001/telemetry", - "message_publish.presentation.mqtt.alert": "当前表单会自动拼装 MQTT publish JSON 命令,并直接通过 broker 执行测试发送。", - "message_publish.presentation.mqtt.success_hint": "QoS 与 retain 可单独指定;未填写时沿用当前连接中的默认参数。", - "message_publish.presentation.kafka.destination_placeholder": "例如:orders.events", - "message_publish.presentation.kafka.alert": "当前表单会自动拼装 Kafka publish JSON 命令,并直接调用后端执行测试发送。", - "message_publish.presentation.kafka.success_hint": "Headers 会作为 Kafka Record Headers 一并发送。", - "message_publish.presentation.key_label": "消息 Key(可选)", - "message_publish.presentation.kafka.key_placeholder": "可留空;JSON 模式请输入一行合法 JSON", - "connection_modal.action.browse": "浏览...", - "connection_modal.action.disable": "禁用", - "connection_modal.action.discover_members": "自动发现成员", - "connection_modal.action.enable_and_prefer": "启用并设为首选", - "connection_modal.badge.current_editing": "当前编辑", - "connection_modal.badge.preferred": "首选", - "connection_modal.field.additional_hosts": "附加主机", - "connection_modal.field.additional_srv_hosts_optional": "附加 SRV 主机(可选)", - "connection_modal.field.auth_source": "认证库 (authSource)", - "connection_modal.field.cluster_additional_hosts": "集群附加节点", - "connection_modal.field.connection_timeout_seconds": "连接超时(秒)", - "connection_modal.field.connection_timeout_seconds_ascii": "连接超时(秒)", - "connection_modal.field.default_database_optional": "默认连接数据库(可选)", - "connection_modal.field.display_databases_optional": "显示数据库(可选)", - "connection_modal.field.file_path_absolute": "文件路径(绝对路径)", - "connection_modal.field.host_address": "主机地址", - "connection_modal.field.password_optional": "密码(可选)", - "connection_modal.field.port": "端口", - "connection_modal.field.port_plain": "端口", - "connection_modal.field.private_key_path_optional": "私钥路径(可选)", - "connection_modal.field.proxy_host": "代理主机", - "connection_modal.field.proxy_password_optional": "代理密码(可选)", - "connection_modal.field.proxy_type": "代理类型", - "connection_modal.field.proxy_username_optional": "代理用户名(可选)", - "connection_modal.field.replica_hosts": "从库地址列表", - "connection_modal.field.replica_password_optional": "从库密码(可选)", - "connection_modal.field.replica_set_optional": "Replica Set(可选)", - "connection_modal.field.replica_set_password_optional": "Replica Set 密码(可选)", - "connection_modal.field.replica_set_username_optional": "Replica Set 用户名(可选)", - "connection_modal.field.replica_username_optional": "从库用户名(可选)", - "connection_modal.field.save_password": "保存密码", - "connection_modal.field.service_name": "服务名", - "connection_modal.field.defaultDatabase.placeholder": "例如:appdb", - "connection_modal.field.serviceName.placeholder": "例如:ORCLPDB1", - "connection_modal.field.clickHouseProtocol.auto": "自动", - "connection_modal.field.oceanBaseProtocol.label": "OceanBase 协议", - "connection_modal.field.oceanBaseProtocol.help.primary": "MySQL 租户请选择 MySQL;Oracle 租户请选择 Oracle。GoNavi 会根据端口自动选择:OB MySQL wire 端口走 OBClient capability 注入(与 Navicat 相同路径),OBProxy Oracle listener 端口走标准 TNS。", - "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "如果 Oracle 租户连接报「Error 1235」或 OBClient 握手失败,可在「连接参数」字段通过 {{attributes}} 覆盖 GoNavi 默认注入的 OBClient capability。", - "connection_modal.field.ssh_host": "SSH 主机", - "connection_modal.field.ssh_password": "SSH 密码", - "connection_modal.field.ssh_user": "SSH 用户", - "connection_modal.field.ssl_cert_path": "SSL 证书路径", - "connection_modal.field.ssl_key_path": "SSL 私钥路径", - "connection_modal.field.tunnel_host": "HTTP Tunnel 主机", - "connection_modal.field.tunnel_password_optional": "HTTP Tunnel 密码(可选)", - "connection_modal.field.tunnel_username_optional": "HTTP Tunnel 用户名(可选)", - "connection_modal.field.username": "用户名", - "connection_modal.field.username.optional_placeholder": "未开启认证可留空", - "connection_modal.help.additional_hosts": "可选 MongoDB 成员,使用逗号、分号或空格分隔。", - "connection_modal.help.additional_srv_hosts": "可选的附加 SRV 主机,用于 MongoDB 发现。", - "connection_modal.help.connection_timeout": "用于连接测试和元数据加载,范围 1-300 秒。", - "connection_modal.help.custom_driver": "已支持: mysql, postgres, sqlite, oracle, dm, kingbase;别名支持 postgresql/pgx、dm8、kingbase8/kingbasees/kingbasev8。当前不支持通过 JDBC Jar 扩展驱动。", - "connection_modal.help.default_database": "留空则使用服务器默认数据库。", - "connection_modal.help.oracle_service_name": "Oracle 服务名,例如 ORCLPDB1。", - "connection_modal.help.private_key_path": "使用私钥进行 SSH 认证;如果私钥未加密,可留空密码。", - "connection_modal.help.redis_cluster_hosts": "附加 Redis Cluster 节点,使用逗号、分号或空格分隔。", - "connection_modal.help.replica_hosts": "从库地址使用 host:port 格式,使用逗号、分号或空格分隔。", - "connection_modal.help.select_after_test": "请先测试连接以加载可选数据库。", - "connection_modal.jvm.access_mode_description": "选择此 JVM 连接可使用的接入模式,并指定首选模式。", - "connection_modal.jvm.access_mode_title": "接入模式", - "connection_modal.jvm.agent_api_key_optional": "Agent API 密钥(可选)", - "connection_modal.jvm.agent_description": "通过 GoNavi Agent 连接,适用于无法直连的网络环境。", - "connection_modal.jvm.agent_help": "GoNavi Agent 服务的基础 URL。", - "connection_modal.jvm.agent_url": "Agent 地址", - "connection_modal.jvm.diagnostic.agent_bridge_description": "使用 GoNavi Agent Bridge 诊断 Endpoint。", - "connection_modal.jvm.diagnostic.arthas_tunnel_description": "通过 Arthas Tunnel 访问目标 JVM。", - "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Arthas Tunnel 服务器的基础 URL。", - "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", - "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", - "connection_modal.jvm.diagnostic.arthas_tunnel_url": "Arthas Tunnel 地址", - "connection_modal.jvm.diagnostic.bridge_help": "GoNavi 诊断桥接服务的基础 URL。", - "connection_modal.jvm.diagnostic.bridge_url": "诊断桥接地址", - "connection_modal.jvm.diagnostic.mutating_commands": "变更类命令", - "connection_modal.jvm.diagnostic.mutating_commands_description": "允许可能改变运行时状态的命令,仅在受控环境使用。", - "connection_modal.jvm.diagnostic.observe_commands": "观察类命令", - "connection_modal.jvm.diagnostic.observe_commands_description": "允许 dashboard、thread、JVM 信息等只读命令。", - "connection_modal.jvm.diagnostic.target_agent_id": "目标 Agent ID", - "connection_modal.jvm.diagnostic.target_agent_id_help": "Arthas Tunnel 中注册的 Agent ID。", - "connection_modal.jvm.diagnostic.target_id": "目标 ID", - "connection_modal.jvm.diagnostic.target_id_help": "诊断桥接服务识别的目标 ID;留空则由桥接服务选择默认目标。", - "connection_modal.jvm.diagnostic.trace_commands": "追踪类命令", - "connection_modal.jvm.diagnostic.trace_commands_description": "允许 trace 与 watch 等会增加运行时开销的命令。", - "connection_modal.jvm.diagnostic_api_key_optional": "诊断 API 密钥(可选)", - "connection_modal.jvm.diagnostic_description": "启用可选诊断命令,用于 JVM 故障排查。", - "connection_modal.jvm.diagnostic_disabled_hint": "诊断增强未启用,仅在需要运行时排查时开启。", - "connection_modal.jvm.diagnostic_timeout_seconds": "诊断超时(秒)", - "connection_modal.jvm.diagnostic_title": "诊断增强", - "connection_modal.jvm.diagnostic_transport": "诊断传输", - "connection_modal.jvm.endpoint_api_key_optional": "Endpoint API 密钥(可选)", - "connection_modal.jvm.endpoint_description": "使用服务暴露的 Endpoint 连接,而不是直连 JMX。", - "connection_modal.jvm.endpoint_help": "JVM 管理 Endpoint 的基础 URL。", - "connection_modal.jvm.endpoint_url": "Endpoint 地址", - "connection_modal.jvm.environment": "环境", - "connection_modal.jvm.environment.dev": "开发", - "connection_modal.jvm.environment.dev_description": "风险较低的测试环境。", - "connection_modal.jvm.environment.prod": "生产", - "connection_modal.jvm.environment.prod_description": "生产环境,建议优先使用只读操作。", - "connection_modal.jvm.environment.uat": "UAT", - "connection_modal.jvm.environment.uat_description": "上线前验证环境。", - "connection_modal.jvm.jmx_description": "通过 JMX 使用主机、端口和可选凭据连接。", - "connection_modal.jvm.jmx_host_override_optional": "JMX 主机覆盖(可选)", - "connection_modal.jvm.jmx_password_optional": "JMX 密码(可选)", - "connection_modal.jvm.jmx_port": "JMX 端口", - "connection_modal.jvm.jmx_username_optional": "JMX 用户名(可选)", - "connection_modal.jvm.mode.agent_description": "通过 GoNavi Agent 访问防火墙或 NAT 后的环境。", - "connection_modal.jvm.mode.endpoint_description": "使用目标服务暴露的 HTTP Endpoint。", - "connection_modal.jvm.mode.jmx_description": "使用标准 JMX 远程访问。", - "connection_modal.jvm.preferred_mode_hint": "当前首选模式:{{mode}}", - "connection_modal.jvm.read_only_first": "优先只读操作", - "connection_modal.jvm.security_policy": "安全策略", - "connection_modal.message.srv_with_ssh_dns_warning": "SRV 与 SSH Tunnel 同时启用时可能依赖本地 DNS 解析;如解析失败,请改用标准主机列表。", - "connection_modal.messageQueue.kafka.defaultTopic.label": "默认 Topic(可选)", - "connection_modal.messageQueue.kafka.defaultTopic.help": "留空时必须在 SQL 中显式指定 Topic;填写后可直接执行 SHOW、CONSUME 或 SELECT 预览。", - "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "例如:orders.events", - "connection_modal.messageQueue.rocketmq.defaultTopic.label": "默认 Topic(可选)", - "connection_modal.messageQueue.rocketmq.defaultTopic.help": "留空时必须在 SQL 中显式指定 Topic;连接参数可继续补充 groupId、namespace、tag、pullBatchSize 与 startOffset。", - "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "例如:orders.events", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "默认 Topic / Filter(可选)", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "留空时必须在 SQL 中显式指定 Topic;填写后可直接执行 SHOW、CONSUME 或 SELECT 预览。支持使用 /、+、#。", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "例如:devices/+/telemetry", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "默认 Virtual Host(可选)", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "留空默认使用 /;填写后查询编辑器会以当前 vhost 作为 Queue 浏览与测试发送上下文。", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "例如:/ 或 orders-vhost", - "connection_modal.messageQueue.topology.cluster.label": "集群模式", - "connection_modal.messageQueue.kafka.topology.single.label": "单 Broker", - "connection_modal.messageQueue.kafka.topology.single.description": "只配置一个 bootstrap broker,适合本地或简单环境。", - "connection_modal.messageQueue.kafka.topology.cluster.description": "配置多个 bootstrap broker,提高发现与故障切换成功率。", - "connection_modal.messageQueue.rocketmq.topology.single.label": "单 NameServer", - "connection_modal.messageQueue.rocketmq.topology.single.description": "只配置一个 NameServer,适合本地或简单环境。", - "connection_modal.messageQueue.rocketmq.topology.cluster.description": "配置多个 NameServer,提高路由发现与故障切换成功率。", - "connection_modal.messageQueue.mqtt.topology.single.label": "单 Broker", - "connection_modal.messageQueue.mqtt.topology.single.description": "只配置一个 broker,适合本地或简单环境。", - "connection_modal.messageQueue.mqtt.topology.cluster.description": "配置多个 broker,提高连接发现与故障切换成功率。", - "connection_modal.messageQueue.kafka.extraBrokers.label": "额外 Broker 地址", - "connection_modal.messageQueue.kafka.extraBrokers.help": "可输入多个 broker 地址,格式:host:port(回车确认)", - "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "例如:10.10.0.12:9092、10.10.0.13:9092", - "connection_modal.messageQueue.rocketmq.extraNameServers.label": "额外 NameServer 地址", - "connection_modal.messageQueue.rocketmq.extraNameServers.help": "可输入多个 NameServer 地址,格式:host:port(回车确认)", - "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "例如:10.10.0.12:9876、10.10.0.13:9876", - "connection_modal.messageQueue.mqtt.extraBrokers.label": "额外 Broker 地址", - "connection_modal.messageQueue.mqtt.extraBrokers.help": "可输入多个 broker 地址,格式:host:port(回车确认)", - "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "例如:10.10.0.12:1883、10.10.0.13:1883", - "connection_modal.redis.topology.single.label": "单机模式", - "connection_modal.redis.topology.single.description": "只连接一个 Redis 节点。", - "connection_modal.redis.topology.cluster.label": "集群模式", - "connection_modal.redis.topology.cluster.description": "Redis Cluster,配置多个种子节点。", - "connection_modal.redis.topology.sentinel.label": "哨兵模式", - "connection_modal.redis.topology.sentinel.description": "通过 Sentinel 发现主节点,适合主从高可用。", - "connection_modal.redis.hosts.sentinel.label": "Sentinel 附加节点地址", - "connection_modal.redis.hosts.sentinel.help": "上方主机地址作为第一个 Sentinel;这里填写其他 Sentinel 节点,格式:host:port", - "connection_modal.redis.hosts.sentinel.placeholder": "例如:10.10.0.12:26379、10.10.0.13:26379", - "connection_modal.redis.hosts.cluster.label": "集群附加节点地址", - "connection_modal.redis.hosts.cluster.help": "主节点使用上方主机地址;这里填写其他种子节点,格式:host:port", - "connection_modal.redis.hosts.cluster.placeholder": "例如:10.10.0.12:6379、10.10.0.13:6379", - "connection_modal.redis.sentinel.master.label": "Sentinel master 名称", - "connection_modal.redis.sentinel.master.help": "填写 Sentinel 配置中的 monitor 名称,例如 mymaster。", - "connection_modal.redis.sentinel.master.required": "请输入 Sentinel master 名称", - "connection_modal.redis.sentinel.master.placeholder": "例如:mymaster", - "connection_modal.redis.credentials.primary.label": "密码 (可选)", - "connection_modal.redis.credentials.primary.placeholder.empty": "Redis 密码(如果设置了 requirepass)", - "connection_modal.redis.credentials.primary.placeholder.retained": "已保存 Redis 密码", - "connection_modal.redis.credentials.sentinelUser.label": "Sentinel 用户名(可选)", - "connection_modal.redis.credentials.sentinelUser.placeholder": "留空表示 Sentinel 不使用 ACL 用户名", - "connection_modal.redis.credentials.sentinelPassword.label": "Sentinel 密码(可选)", - "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Sentinel 自身认证密码,留空则不发送", - "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "已保存 Sentinel 密码", - "connection_modal.redis.credentials.sentinelPassword.clear": "清除已保存 Sentinel 密码", - "connection_modal.redis.credentials.sentinelPassword.description": "当前已保存 Sentinel 密码。留空表示继续沿用,输入新值表示替换。", - "connection_modal.redis.databaseScope.label": "显示数据库 (留空显示全部)", - "connection_modal.redis.databaseScope.help": "连接测试成功后可选择", - "connection_modal.redis.databaseScope.placeholder": "选择显示的数据库", - "connection_modal.mongodb.auth.auto": "自动", - "connection_modal.mongodb.auth.auto_description": "由驱动自动选择认证机制。", - "connection_modal.mongodb.auth.aws_iam_description": "使用 AWS IAM 认证,请在运行环境中提供 AWS IAM 凭据。", - "connection_modal.mongodb.auth.none": "无认证", - "connection_modal.mongodb.auth.none_description": "不使用 MongoDB 认证连接。", - "connection_modal.mongodb.auth.scram_sha1_description": "使用 SCRAM-SHA-1 认证。", - "connection_modal.mongodb.auth.scram_sha256_description": "使用 SCRAM-SHA-256 认证。", - "connection_modal.mongodb.auth_mechanism": "认证机制", - "connection_modal.mongodb.topology.single.label": "单机模式", - "connection_modal.mongodb.topology.replica.label": "副本集 / 多节点", - "connection_modal.mongodb.discovery.standard.label": "标准地址", - "connection_modal.mongodb.discovery.standard.description": "使用 host:port 直连或副本集节点列表。", - "connection_modal.mongodb.discovery.srv.label": "SRV 地址", - "connection_modal.mongodb.discovery.srv.description": "使用 mongodb+srv,由 DNS 发现目标节点。", - "connection_modal.mongodb.discovery.current": "当前", - "connection_modal.mongodb.discovery.srv_ssh_warning": "SRV 与 SSH 隧道同时启用时,可能依赖本地 DNS 解析能力", - "connection_modal.mongodb.replica.hosts.srv.label": "附加 SRV 主机(可选)", - "connection_modal.mongodb.replica.hosts.srv.help": "可输入多个候选主机名,格式:host;若留空则仅使用上方主机。", - "connection_modal.mongodb.replica.hosts.srv.placeholder": "例如:cluster-a.example.com、cluster-b.example.com", - "connection_modal.mongodb.replica.hosts.standard.label": "附加节点地址", - "connection_modal.mongodb.replica.hosts.standard.help": "可输入多个节点地址,格式:host:port(回车确认)", - "connection_modal.mongodb.replica.hosts.standard.placeholder": "例如:10.10.0.12:27017、10.10.0.13:27017", - "connection_modal.mongodb.replica.set.label": "副本集名称(可选)", - "connection_modal.mongodb.replica.set.placeholder": "例如:rs0", - "connection_modal.mongodb.replica.user.label": "副本集用户名(可选)", - "connection_modal.mongodb.replica.user.placeholder": "留空沿用主用户名", - "connection_modal.mongodb.replica.password.label": "副本集密码(可选)", - "connection_modal.mongodb.replica.password.placeholder.empty": "留空沿用主密码", - "connection_modal.mongodb.replica.password.placeholder.retained": "已保存副本集密码", - "connection_modal.mongodb.replica.password.clear": "清除已保存副本集密码", - "connection_modal.mongodb.replica.password.description": "当前已保存副本集密码。留空表示继续沿用,输入新值表示替换。", - "connection_modal.mongodb.members.role": "角色", - "connection_modal.mongodb.members.health": "健康", - "connection_modal.mongodb.members.health.ok": "正常", - "connection_modal.mongodb.members.health.error": "异常", - "connection_modal.mongodb.policy.auth_source.label": "认证库 (authSource)", - "connection_modal.mongodb.policy.auth_source.placeholder": "默认使用 database 或 admin", - "connection_modal.mongodb.read_preference": "readPreference", - "connection_modal.mongodb.read_preference.nearest": "读取最近的成员。", - "connection_modal.mongodb.read_preference.primary": "仅从 primary 读取。", - "connection_modal.mongodb.read_preference.primary_preferred": "优先从 primary 读取,必要时回退到 secondary。", - "connection_modal.mongodb.read_preference.secondary": "仅从 secondary 读取。", - "connection_modal.mongodb.read_preference.secondary_preferred": "优先从 secondary 读取,必要时回退到 primary。", - "connection_modal.mongodb.srv_address": "SRV 地址", - "connection_modal.mongodb.srv_address_description": "使用 MongoDB SRV 记录发现主机。", - "connection_modal.mongodb.standard_address": "标准地址", - "connection_modal.mongodb.standard_address_description": "使用主机、端口和可选成员列表。", - "connection_modal.network.http_tunnel": "HTTP Tunnel", - "connection_modal.network.http_tunnel_description": "通过 HTTP Tunnel 转发数据库流量。", - "connection_modal.network.http_tunnel_disabled_hint": "启用 HTTP Tunnel 后可配置 Tunnel 主机、端口和凭据。", - "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel 不能与 SSH Tunnel 或代理同时使用。", - "connection_modal.network.http_tunnel_panel_description": "为此连接配置 HTTP Tunnel 网关。", - "connection_modal.network.proxy": "代理", - "connection_modal.network.proxy_disabled_hint": "启用代理后,此连接会通过 SOCKS5 或 HTTP CONNECT 转发。", - "connection_modal.network.proxy_panel_description": "配置此连接的专用代理设置。", - "connection_modal.network.proxy_type.http_description": "使用 HTTP CONNECT 代理。", - "connection_modal.network.proxy_type.socks5_description": "使用 SOCKS5 代理。", - "connection_modal.network.ssh_disabled_hint": "启用 SSH Tunnel 后可通过跳板机连接。", - "connection_modal.network.ssh_panel_description": "配置 SSH Tunnel 主机、凭据和可选私钥。", - "connection_modal.network.ssh_tunnel": "SSH Tunnel", - "connection_modal.network.ssh_tunnel_description": "先通过 SSH Tunnel 再访问数据库。", - "connection_modal.network.ssl_description": "使用 SSL/TLS 加密数据库连接。", - "connection_modal.network.ssl_tls": "SSL/TLS", - "connection_modal.network.ssl_disabled_hint": "启用 SSL/TLS 后可配置证书策略。", - "connection_modal.network.ssl_mode": "SSL 模式", - "connection_modal.network.ssl_mode.preferred_description": "优先尝试 SSL,服务器不要求加密时允许回退。", - "connection_modal.network.ssl_mode.required_description": "必须使用 SSL,无法建立加密连接时失败。", - "connection_modal.network.ssl_mode.skip_verify_description": "使用 SSL 但跳过证书校验,仅用于测试或自签证书。", - "connection_modal.network.ssl_panel_description": "配置此连接的 SSL/TLS 策略。", - "connection_modal.placeholder.absolute_path": "/绝对/路径/文件", - "connection_modal.placeholder.agent_api_key": "可选 Agent API 密钥", - "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", - "connection_modal.placeholder.custom_dsn_example": "示例:驱动专用 DSN", - "connection_modal.placeholder.default_database_or_admin": "默认数据库或 admin", - "connection_modal.placeholder.diagnostic_api_key": "可选诊断 API 密钥", - "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", - "connection_modal.placeholder.diagnostic_target_id": "目标 ID", - "connection_modal.placeholder.empty_without_auth": "无认证时留空", - "connection_modal.placeholder.endpoint_api_key": "可选 Endpoint API 密钥", - "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", - "connection_modal.placeholder.example_appdb": "appdb", - "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", - "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", - "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", - "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", - "connection_modal.placeholder.example_rs0": "rs0", - "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", - "connection_modal.placeholder.no_auth": "无认证", - "connection_modal.placeholder.proxy_host": "127.0.0.1", - "connection_modal.placeholder.redis_password": "Redis 密码", - "connection_modal.placeholder.select_databases": "选择要显示的数据库", - "connection_modal.placeholder.select_redis_databases": "选择要显示的 Redis 数据库", - "connection_modal.placeholder.ssh_host": "bastion.example.com", - "connection_modal.placeholder.ssl_cert_path": "/绝对/路径/client.crt", - "connection_modal.placeholder.ssl_key_path": "/绝对/路径/client.key", - "connection_modal.placeholder.tunnel_host": "tunnel.example.com", - "connection_modal.placeholder.use_primary_host": "使用主连接主机", - "connection_modal.placeholder.use_primary_password": "使用主连接密码", - "connection_modal.placeholder.use_primary_password_short": "使用主密码", - "connection_modal.placeholder.use_primary_port": "使用主连接端口", - "connection_modal.placeholder.use_primary_username": "使用主连接用户名", - "connection_modal.placeholder.use_primary_username_short": "使用主用户名", - "connection_modal.secret.clear_saved_mongo_replica_password": "清除已保存的 MongoDB 副本密码", - "connection_modal.secret.clear_saved_password": "清除已保存密码", - "connection_modal.secret.clear_saved_proxy_password": "清除已保存的代理密码", - "connection_modal.secret.clear_saved_replica_password": "清除已保存的从库密码", - "connection_modal.secret.clear_saved_ssh_password": "清除已保存的 SSH 密码", - "connection_modal.secret.clear_saved_tunnel_password": "清除已保存的 HTTP Tunnel 密码", - "connection_modal.secret.error.saved_connection_missing": "未找到当前连接对应的已保存密文,请重新填写密码并保存后再试", - "connection_modal.secret.error.store_unavailable": "系统密文存储当前不可用,请检查系统钥匙串或凭据管理器后再试", - "connection_modal.secret.saved_mongo_replica_password": "已保存 MongoDB 副本密码", - "connection_modal.secret.saved_mongo_replica_password_description": "安全存储中已有 MongoDB 副本密码。留空将继续使用该密码。", - "connection_modal.secret.saved_password": "已保存密码", - "connection_modal.secret.saved_placeholder": "••••••(留空表示继续沿用{{label}})", - "connection_modal.secret.saved_primary_password_description": "安全存储中已有主连接密码。留空将继续使用该密码。", - "connection_modal.secret.saved_proxy_password": "已保存代理密码", - "connection_modal.secret.saved_proxy_password_description": "安全存储中已有代理密码。留空将继续使用该密码。", - "connection_modal.secret.saved_redis_password": "已保存 Redis 密码", - "connection_modal.secret.saved_redis_password_description": "安全存储中已有 Redis 密码。留空将继续使用该密码。", - "connection_modal.secret.saved_replica_password": "已保存从库密码", - "connection_modal.secret.saved_replica_password_description": "安全存储中已有从库密码。留空将继续使用该密码。", - "connection_modal.secret.saved_ssh_password": "已保存 SSH 密码", - "connection_modal.secret.saved_ssh_password_description": "安全存储中已有 SSH 密码。留空将继续使用该密码。", - "connection_modal.secret.saved_tunnel_password": "已保存 HTTP Tunnel 密码", - "connection_modal.secret.saved_tunnel_password_description": "安全存储中已有 HTTP Tunnel 密码。留空将继续使用该密码。", - "connection_modal.section.advanced_connection": "高级连接", - "connection_modal.section.config_sections": "配置分区", - "connection_modal.status.disabled": "未启用", - "connection_modal.status.enabled": "已启用", - "connection_modal.status.healthy": "正常", - "connection_modal.status.unhealthy": "异常", - "connection_modal.switch.off": "关", - "connection_modal.switch.on": "开", - "connection_modal.table.health": "健康", - "connection_modal.table.role": "角色", - "connection_modal.topology.cluster": "集群", - "connection_modal.topology.mongodb_replica": "Replica Set", - "connection_modal.topology.mongodb_replica_description": "连接 MongoDB Replica Set,并可选自动发现成员。", - "connection_modal.topology.mongodb_single_description": "连接单个 MongoDB 主机。", - "connection_modal.topology.mysql_replica_description": "使用主连接,并可选配置从库地址。", - "connection_modal.topology.mysql_single_description": "连接单个 MySQL 兼容节点。", - "connection_modal.topology.primary_replica": "主从", - "connection_modal.topology.redis_cluster_description": "连接 Redis Cluster,并列出附加节点。", - "connection_modal.topology.redis_single_description": "连接单个 Redis 节点。", - "connection_modal.topology.single": "单机模式", - "connection_modal.validation.address_or_path_required": "请输入主机地址或文件路径", - "connection_modal.validation.agent_url_required": "请输入 Agent 地址", - "connection_modal.validation.arthas_tunnel_url_required": "请输入 Arthas Tunnel 地址", - "connection_modal.validation.dameng_ssl_cert_path_required": "请输入达梦 SSL 证书路径", - "connection_modal.validation.dameng_ssl_key_path_required": "请输入达梦 SSL 私钥路径", - "connection_modal.validation.diagnostic_bridge_url_required": "请输入诊断桥接地址", - "connection_modal.validation.diagnostic_target_required": "请输入诊断目标", - "connection_modal.validation.diagnostic_timeout_range_1_300": "诊断超时必须在 1 到 300 秒之间", - "connection_modal.validation.endpoint_url_required": "请输入 Endpoint 地址", - "connection_modal.validation.jvm_access_mode_required": "请至少选择一种 JVM 接入模式", - "connection_modal.validation.jvm_preferred_mode_required": "请选择首选 JVM 接入模式", - "connection_modal.validation.oracle_service_required": "请输入 Oracle 服务名", - "connection_modal.validation.port_required": "请输入端口", - "connection_modal.validation.proxy_host_required": "请输入代理主机", - "connection_modal.validation.proxy_port_required": "请输入代理端口", - "connection_modal.validation.ssh_host_required": "请输入 SSH 主机", - "connection_modal.validation.ssh_port_required": "请输入 SSH 端口", - "connection_modal.validation.ssh_user_required": "请输入 SSH 用户", - "connection_modal.validation.timeout_range_1_300": "超时必须在 1 到 300 秒之间", - "connection_modal.validation.tunnel_host_required": "请输入 HTTP Tunnel 主机", - "connection_modal.validation.tunnel_port_required": "请输入 HTTP Tunnel 端口", - "connection_modal.validation.username_required": "请输入用户名", - "sidebar.batch_databases": "数据库", - "sidebar.batch_tables": "表", - "connection_modal.ssl_hint.mysql_like": "MySQL/MariaDB/Doris/Sphinx 开启安全传输策略时请启用 SSL;本地自签证书可先用 Preferred 或 Skip Verify 验证。", - "connection_modal.ssl_hint.dameng": "达梦驱动启用 SSL 需要客户端证书与私钥路径(sslCertPath / sslKeyPath)。", - "connection_modal.ssl_hint.sqlserver": "SQL Server 生产环境建议使用 Required,并关闭 TrustServerCertificate。", - "connection_modal.ssl_hint.mongodb": "MongoDB 可通过 TLS 保护连接,证书校验异常时可先用 Skip Verify 验证连通性。", - "connection_modal.ssl_hint.default": "建议优先使用 Required;仅在测试环境或自签证书场景使用 Skip Verify。", - "connection_modal.secret.new_value_replaces_saved": "已输入新值,保存时会替换当前已保存内容。", - "connection_modal.badge.current": "当前", - "connection_modal.message.driver_not_enabled_with_name": "{{name}} 驱动未安装或未启用。请先在驱动管理中安装并启用。", - "connection_modal.driver.current": "当前", - "connection_modal.message.driver_unavailable_title": "{{name}} 驱动不可用", - "connection_modal.action.open_driver_manager": "去驱动管理安装", - "connection_modal.action.cancel": "取消", - "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", - "connection_modal.message.uri_generated": "URI 已生成", - "connection_modal.message.uri_generate_failed": "生成 URI 失败", - "connection_modal.message.uri_required": "请先输入 URI", - "connection_modal.message.uri_type_mismatch": "URI 类型与当前数据源不匹配", - "connection_modal.message.uri_parsed": "URI 已解析到表单", - "connection_modal.message.uri_parse_failed": "解析 URI 失败", - "connection_modal.message.uri_empty_copy": "没有可复制的 URI", - "connection_modal.message.uri_copied": "URI 已复制", - "connection_modal.message.copy_failed": "复制失败", - "connection_modal.message.select_ssh_key_failed": "选择 SSH 私钥失败:{{error}}", - "connection_modal.error.unknown": "未知错误", - "connection_modal.message.select_database_file_failed": "选择数据库文件失败:{{error}}", - "connection_modal.message.save_backend_unavailable": "保存功能不可用:后端接口未就绪", - "connection_modal.message.save_updated_disconnected": "配置已保存(未连接)", - "connection_modal.message.save_created_disconnected": "配置已保存(未连接)", - "connection_modal.message.save_security_refresh_failed": "配置已保存,但刷新安全信息失败", - "connection_modal.message.save_failed": "保存连接失败", - "connection_modal.message.test_requires_new_password": "请先输入新的连接密码,再测试连接。", - "connection_modal.secret.blocking.redis_sentinel": "测试连接前请填写新的 Sentinel 密码,或取消清除已保存 Sentinel 密码", - "connection_modal.test.redis_database_list_timeout": "连接成功但拉取 Redis 数据库列表超时(>{{seconds}} 秒)", - "connection_modal.test.redis_database_list_failure": "连接成功,但获取 Redis 数据库列表失败:{{detail}}", - "connection_modal.message.test_requires_new_ssh_password": "请先输入新的 SSH 密码,再测试连接。", - "connection_modal.message.test_requires_new_proxy_password": "请先输入新的代理密码,再测试连接。", - "connection_modal.message.test_requires_new_tunnel_password": "请先输入新的 HTTP Tunnel 密码,再测试连接。", - "connection_modal.message.test_requires_new_replica_password": "请先输入新的从库密码,再测试连接。", - "connection_modal.message.test_requires_new_mongo_replica_password": "请先输入新的 MongoDB Replica Set 密码,再测试连接。", - "connection_modal.message.test_requires_new_mongodb_password": "请先输入新的 MongoDB 密码,再测试连接。", - "connection_modal.message.driver_not_enabled": "驱动未安装或未启用", - "connection_modal.message.connection_params_incomplete": "连接参数不完整", - "connection_modal.message.test_timeout": "操作超时({{seconds}} 秒)", - "connection_modal.message.database_list_timeout": "操作超时({{seconds}} 秒)", - "connection_modal.message.no_visible_schema": "未获取到可见结构", - "connection_modal.message.no_visible_databases": "未获取到可见数据库", - "connection_modal.message.database_list_failed": "加载数据库列表失败:{{error}}", - "connection_modal.message.connection_rejected": "连接被拒绝", - "connection_modal.message.required_fields_before_test": "请先填写必填字段,再测试连接", - "connection_modal.message.test_failed_detail": "测试失败:{{detail}}", - "connection_modal.error.unknown_exception": "未知错误", - "connection_modal.message.member_discovery_failed": "发现 MongoDB 成员失败", - "connection_modal.message.member_discovery_success": "已发现 {{count}} 个成员", - "connection_modal.message.unsupported_jvm_modes": "当前选择的 JVM 接入模式不受支持", - "connection_modal.message.unsupported_jvm_diagnostic_transport": "当前选择的 JVM 诊断传输不受支持", - "connection_modal.message.dameng_ssl_cert_required": "启用达梦 SSL 时必须填写证书和私钥路径", - "connection_modal.message.http_tunnel_host_required": "请输入 HTTP Tunnel 主机", - "connection_modal.message.http_tunnel_port_invalid": "HTTP Tunnel 端口无效", - "connection_modal.message.unsupported_jvm_modes_current": "当前连接包含不受支持的 JVM 接入模式", - "connection_modal.group.relational": "关系型数据库", - "connection_modal.group.chinese_databases": "国产数据库", - "connection_modal.step1.group.nosql": "NoSQL 数据库", - "connection_modal.step1.group.relational": "关系型数据库", - "connection_modal.step1.group.domestic": "国产数据库", - "connection_modal.step1.group.timeseries": "时序数据库", - "connection_modal.step1.group.other": "其他", - "connection_modal.group.time_series": "时序数据库", - "connection_modal.group.other": "其他", - "connection_modal.db_type.custom": "自定义", - "connection_modal.layout.mysql_compatible": "MySQL 兼容连接", - "connection_modal.layout.mongodb": "MongoDB 连接", - "connection_modal.layout.redis": "Redis 连接", - "connection_modal.layout.postgres_compatible": "PostgreSQL 兼容连接", - "connection_modal.layout.oracle": "Oracle 连接", - "connection_modal.layout.file": "文件数据库连接", - "connection_modal.layout.custom": "自定义驱动连接", - "connection_modal.layout.jvm": "JVM 运行时连接", - "connection_modal.layout.generic_sql": "通用 SQL 连接", - "connection_modal.db_type_hint.custom": "使用自定义驱动和 DSN 连接数据库。", - "connection_modal.db_type_hint.redis": "连接 Redis 单机或 Redis Cluster。", - "connection_modal.db_type_hint.mongodb": "连接 MongoDB 单节点、Replica Set 或 SRV 地址。", - "connection_modal.db_type_hint.file": "选择本地 SQLite 或 DuckDB 数据库文件。", - "connection_modal.db_type_hint.standard": "填写主机、端口、认证信息和可选数据库。", - "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", - "connection_modal.step1.hint.custom": "自定义驱动与 DSN", - "connection_modal.step1.hint.redis": "单机 / 集群", - "connection_modal.step1.hint.mongodb": "单机 / 副本集", - "connection_modal.step1.hint.oceanBase": "MySQL / Oracle 租户", - "connection_modal.step1.hint.file": "本地文件连接", - "connection_modal.step1.hint.standard": "标准连接配置", - "connection_modal.step.select_source": "选择数据源", - "connection_modal.step.select_source_description": "选择要创建的连接类型。", - "connection_modal.message.driver_not_enabled_with_name_short": "{{name}} 驱动未安装或未启用,请先在驱动管理中处理。", - "connection_modal.section.basic.title": "基础信息", - "connection_modal.section.basic.description": "命名连接,并填写目标地址、驱动和认证信息。", - "connection_modal.field.connection_name": "连接名称", - "connection_modal.placeholder.jvm_name": "JVM 连接名称", - "connection_modal.placeholder.connection_name": "连接名称", - "connection_modal.field.uri": "URI", - "connection_modal.help.uri": "可粘贴完整连接 URI,也可从当前表单生成 URI。", - "connection_modal.action.generate_uri": "生成 URI", - "connection_modal.action.parse_uri": "解析 URI", - "connection_modal.action.copy_uri": "复制 URI", - "connection_modal.secret.clear_saved_uri": "清除已保存的 URI", - "connection_modal.secret.saved_uri_description": "安全存储中已有连接 URI。留空将继续使用该 URI。", - "connection_modal.field.driver_name": "驱动名称", - "connection_modal.field.driver.placeholder": "例如: mysql, postgres", - "connection_modal.validation.driver_name_required": "请输入驱动名称", - "connection_modal.placeholder.driver_name": "驱动名称", - "connection_modal.field.dsn": "DSN", - "connection_modal.field.dsn.placeholder": "例如: user:pass@tcp(localhost:3306)/dbname?charset=utf8", - "connection_modal.validation.custom_dsn_required": "请输入连接字符串", - "connection_modal.validation.custom_dsn_required_when_clearing_saved": "请输入新的连接字符串,或取消清除已保存 DSN", - "connection_modal.secret.clear_saved_dsn": "清除已保存的 DSN", - "connection_modal.secret.saved_dsn_description": "安全存储中已有 DSN。留空将继续使用该 DSN。", - "connection_modal.message.unsupported_jvm_modes_detected": "检测到不受支持的 JVM 接入模式", - "connection_modal.jvm.target_title": "JVM 目标", - "connection_modal.jvm.target_description": "配置 JVM 管理端点的主机、端口和访问方式。", - "connection_modal.field.host": "主机", - "connection_modal.validation.jvm_host_required": "请输入 JVM 主机", - "connection_modal.field.primary_port": "主端口", - "connection_modal.validation.jvm_port_required": "请输入 JVM 端口", - "connection_modal.section.network.title": "网络与安全", - "connection_modal.section.network.description": "配置 SSL/TLS、SSH Tunnel、代理和 HTTP Tunnel。", - "connection_modal.message.current_driver_not_enabled": "当前驱动未安装或未启用", - "connection_modal.section.basic.jvm_description": "配置 JVM 目标、访问模式和认证信息。", - "connection_modal.section.basic.sql_description": "配置连接目标、驱动、认证信息和数据库范围。", - "connection_modal.section.network.nav_description": "配置此连接的网络和安全选项。", - "connection_modal.section.appearance.title": "外观", - "connection_modal.section.appearance.description": "设置连接在侧边栏中的图标和颜色。", - "connection_modal.appearance.icon": "图标", - "connection_modal.appearance.current_icon": "当前图标:{{icon}}", - "connection_modal.db_icon_label.custom": "自定义", - "connection_modal.appearance.color": "颜色", - "connection_modal.appearance.custom_color": "自定义颜色", - "connection_modal.appearance.preview": "预览", - "connection_modal.placeholder.connection_name_fallback": "连接名称", - "connection_modal.action.reset_default": "恢复默认", - "connection_modal.message.connection_failed": "连接失败", - "connection_modal.action.previous_step": "上一步", - "connection_modal.message.connection_success": "连接成功", - "connection_modal.action.view_reason": "查看原因", - "connection_modal.action.test": "测试连接", - "connection_modal.action.save": "保存", - "connection_modal.title.select_type": "选择数据源类型", - "connection_modal.title.select_type_description": "从支持的数据源中选择一种连接类型。", - "connection_modal.title.edit": "编辑连接", - "connection_modal.title.edit_description": "编辑 {{type}} 连接配置。", - "connection_modal.title.create": "新建 {{type}} 连接", - "connection_modal.title.create_description": "填写连接配置并保存。", - "connection_modal.test_error.title": "连接测试失败原因", - "connection_modal.test_error.description": "查看后端返回的完整错误信息。", - "connection_modal.action.close": "关闭", - "connection_modal.test_error.empty": "没有错误详情", - "sidebar.message.duplicate_backend_unavailable": "当前版本不支持复制连接。", - "sidebar.message.duplicate_empty_result": "未返回复制后的连接。", - "sidebar.message.duplicated_connection": "已复制连接 {{name}}。", - "sidebar.message.duplicate_failed": "复制连接失败。", - "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "JVM Provider 探测失败:{{error}};已保留诊断增强入口", - "sidebar.message.jvm_provider_probe_failed": "探测 JVM 提供方失败:{{error}}", - "sidebar.error.unknown": "未知错误", - "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "JVM Provider 探测异常:{{error}};已保留诊断增强入口", - "sidebar.message.jvm_provider_probe_exception": "JVM 提供方探测失败:{{error}}", - "sidebar.message.connection_failed": "连接失败:{{error}}", - "sidebar.message.load_jvm_resources_failed": "加载 JVM 资源失败:{{error}}", - "sidebar.message.load_tables_failed": "加载对象失败:{{error}}", - "sidebar.message.table_pinned": "已置顶表", - "sidebar.message.table_unpinned": "已取消置顶", - "sidebar.message.table_structure_copied": "表结构已复制。", - "sidebar.message.exporting_table_format": "正在将 {{table}} 导出为 {{format}}...", - "sidebar.message.export_success": "导出成功。", - "sidebar.message.export_failed": "导出失败:{{error}}", - "sidebar.message.backing_up_database": "正在备份 {{database}}...", - "sidebar.message.exporting_database_schema": "正在导出 {{database}} 的结构...", - "sidebar.message.exporting_database_backup": "正在备份 {{database}}(结构+数据)...", - "sidebar.message.schema_export_target_missing": "未找到目标模式,无法导出。", - "sidebar.message.exporting_schema_structure": "正在导出模式 {{schema}} 的结构...", - "sidebar.message.exporting_schema_backup": "正在备份模式 {{schema}}(结构+数据)...", - "sidebar.message.export_tables_same_database_required": "请选择同一数据库下的表。", - "sidebar.message.backing_up_selected_tables": "正在备份 {{count}} 个已选表...", - "sidebar.message.exporting_selected_table_schema": "正在导出 {{count}} 个已选表的结构...", - "sidebar.message.load_database_list_failed": "加载数据库失败:{{error}}", - "sidebar.message.load_table_list_failed": "加载表失败:{{error}}", - "sidebar.message.locate_external_sql_file_not_found": "未在外部 SQL 目录中找到 SQL 文件:{{path}}", - "sidebar.message.locate_connection_not_found_for_object": "未找到当前对象对应的连接", - "sidebar.message.locate_connection_not_in_tree": "未在左侧树找到当前连接", - "sidebar.message.locate_database_loading": "数据库节点仍在加载中:{{database}},请稍后再试", - "sidebar.message.locate_database_not_found": "未在左侧树找到数据库:{{database}}", - "sidebar.message.locate_object_loading": "{{object}}所在数据库对象仍在加载中:{{database}},请稍后再试", - "sidebar.message.locate_object_not_found": "{{object}}未在左侧树中找到:{{name}},请刷新数据库节点后重试", - "sidebar.message.select_object_required": "请至少选择一个对象。", - "sidebar.message.backing_up_selected_objects": "正在备份 {{count}} 个已选对象...", - "sidebar.message.exporting_selected_object_data": "正在导出 {{count}} 个已选对象的数据({{format}})...", - "sidebar.message.exporting_selected_object_schema": "正在导出 {{count}} 个已选对象的结构...", - "sidebar.message.export_success_skipped_views": "导出成功。已跳过 {{count}} 个视图的数据导出。", - "sidebar.modal.confirm_clear_selected_tables.title": "确认清空已选表", - "sidebar.modal.confirm_clear_selected_tables.content": "清空 {{connection}} / {{database}} 下已选对象的数据?此操作不可撤销。", - "sidebar.action.continue": "继续", - "sidebar.action.cancel": "取消", - "sidebar.action.delete": "删除", - "sidebar.message.clearing_selected_tables": "正在清空 {{count}} 个已选表...", - "sidebar.message.clear_success": "清空成功。", - "sidebar.message.clear_failed": "清空失败:{{error}}", - "sidebar.message.select_database_required": "请至少选择一个数据库。", - "sidebar.message.database_export_success": "已导出 {{database}}。", - "sidebar.message.database_export_failed": "导出 {{database}} 失败:{{error}}", - "sidebar.message.connection_config_not_found": "未找到连接配置。", - "sidebar.sql_file_exec.title": "运行外部 SQL 文件", - "sidebar.message.read_file_failed": "读取文件失败:{{error}}", - "sidebar.message.select_connection_or_database_first": "请先选择连接或数据库。", - "sidebar.message.schema_create_unsupported": "当前数据库不支持创建 schema。", - "sidebar.message.schema_target_missing": "请选择要创建 schema 的数据库。", - "sidebar.message.schema_created": "schema 创建成功。", - "sidebar.message.operation_create_failed": "创建失败:{{error}}", - "sidebar.sql_file.default_name": "SQL 文件", - "sidebar.message.sql_file_context_incomplete": "SQL 文件上下文不完整。", - "sidebar.message.sql_file_path_incomplete": "SQL 文件路径不完整,无法打开。", - "sidebar.message.select_host_before_large_sql_file": "请先选择一个 Host 后再执行大 SQL 文件。", - "sidebar.message.read_sql_file_failed": "读取 SQL 文件失败:{{error}}", - "sidebar.message.external_sql_file_parent_missing": "未找到可新建 SQL 文件的目录。", - "sidebar.message.external_sql_file_rename_target_missing": "未找到可重命名的 SQL 文件。", - "sidebar.message.external_sql_file_delete_target_missing": "未找到可删除的 SQL 文件。", - "sidebar.message.external_sql_directory_parent_missing": "未找到可新建目录的位置。", - "sidebar.message.external_sql_directory_rename_target_missing": "未找到可重命名的目录。", - "sidebar.message.external_sql_directory_delete_target_missing": "未找到可删除的 SQL 目录。", - "sidebar.message.sql_file_name_required": "SQL 文件名不能为空。", - "sidebar.message.sql_directory_name_required": "目录名不能为空。", - "sidebar.message.create_sql_file_failed": "新建 SQL 文件失败:{{error}}", - "sidebar.message.sql_file_created": "SQL 文件已新建。", - "sidebar.message.rename_sql_file_failed": "重命名 SQL 文件失败:{{error}}", - "sidebar.message.sql_file_renamed": "SQL 文件已重命名。", - "sidebar.message.delete_sql_file_failed": "删除 SQL 文件失败:{{error}}", - "sidebar.message.sql_file_deleted": "SQL 文件已删除。", - "sidebar.message.create_sql_directory_failed": "新建目录失败:{{error}}", - "sidebar.message.sql_directory_created": "目录已新建。", - "sidebar.message.rename_sql_directory_failed": "重命名目录失败:{{error}}", - "sidebar.message.external_sql_directory_rename_sync_failed": "目录已重命名,但无法同步外部 SQL 目录列表,请重新添加目录。", - "sidebar.message.sql_directory_renamed": "目录已重命名。", - "sidebar.message.delete_sql_directory_failed": "删除 SQL 目录失败:{{error}}", - "sidebar.message.sql_directory_deleted": "SQL 目录已删除。", - "sidebar.message.add_sql_directory_database_required": "请先选择数据库,再添加 SQL 目录。", - "sidebar.message.select_sql_directory_failed": "选择 SQL 目录失败:{{error}}", - "sidebar.message.sql_directory_path_invalid": "SQL 目录路径无效。", - "sidebar.sql_directory.default_name": "SQL 目录", - "sidebar.message.external_sql_directory_added": "外部 SQL 目录已添加。", - "sidebar.message.external_sql_directory_not_found": "未找到 SQL 目录。", - "sidebar.message.external_sql_directory_removed": "外部 SQL 目录已移除。", - "sidebar.message.external_sql_directory_context_missing": "SQL 目录上下文缺失。", - "sidebar.message.external_sql_directory_refreshed": "外部 SQL 目录已刷新。", - "sidebar.message.database_created": "数据库已创建。", - "sidebar.message.create_failed": "创建失败:{{error}}", - "sidebar.modal.confirm_delete_database.title": "删除数据库", - "sidebar.modal.confirm_delete_database.content": "删除 {{name}}?此操作不可撤销。", - "sidebar.modal.confirm_delete_sql_file.title": "删除 SQL 文件", - "sidebar.modal.confirm_delete_sql_file.content": "删除 \"{{name}}\"?此操作会删除本地磁盘文件,无法恢复。", - "sidebar.modal.confirm_delete_sql_directory.title": "删除 SQL 目录", - "sidebar.modal.confirm_delete_sql_directory.content": "删除 \"{{name}}\"?此操作会删除本地磁盘目录,且仅支持删除空目录。", - "sidebar.modal.confirm_delete_table.title": "删除表", - "sidebar.modal.confirm_delete_table.content": "删除 {{name}}?此操作不可撤销。", - "sidebar.modal.confirm_table_data_action.title": "确认 {{action}}", - "sidebar.modal.confirm_table_data_action.content": "{{action}} {{table}}?此操作不可撤销。", - "sidebar.modal.confirm_delete_view.title": "删除视图", - "sidebar.modal.confirm_delete_view.content": "删除 {{name}}?此操作不可撤销。", - "sidebar.modal.confirm_delete_routine.title": "删除 {{type}}", - "sidebar.modal.confirm_delete_routine.content": "删除 {{type}} {{name}}?此操作不可撤销。", - "sidebar.search.scope.smart": "智能", - "sidebar.search.scope_title": "搜索范围", - "sidebar.search.scope_description": "选择侧边栏搜索的匹配范围。", - "sidebar.badge.recommended": "推荐", - "sidebar.search.scope.smart_description": "根据当前选中的节点自动缩小搜索范围。", - "sidebar.search.manual_scope": "手动范围", - "sidebar.search.multi_select_supported": "支持多选", - "sidebar.search.scope_hint": "智能模式会根据上下文搜索名称、主机、数据库和对象。", - "sidebar.modal.confirm_delete.title": "确认删除", - "sidebar.modal.confirm_delete_tag.content": "确定要删除分组 \"{{name}}\" 吗?这不会删除其中的连接。", - "sidebar.menu.edit_connection": "编辑连接", - "sidebar.menu.delete_connection": "删除连接", - "sidebar.modal.confirm_delete_connection.content": "删除连接 {{name}}?", - "sidebar.message.delete_connection_backend_unavailable": "删除连接后端不可用。", - "sidebar.message.connection_deleted": "连接已删除。", - "sidebar.message.delete_connection_failed": "删除连接失败。", - "sidebar.modal.confirm_delete_saved_query.content": "确定要删除已保存的查询 \"{{name}}\" 吗?此操作不可恢复。", - "sidebar.search.placeholder": "搜索...", - "sidebar.punctuation.list_separator": "、", - "sidebar.command_search.label": "搜索表、连接、动作", - "sidebar.command_search.placeholder": "搜索表、连接、动作... 或问 AI", - "sidebar.command_search.sync_to_filter_tooltip": "同步输入内容到左侧筛选", - "sidebar.command_search.sync_to_filter_aria": "同步到左侧筛选", - "sidebar.command_search.reset_filter": "重置侧栏筛选", - "sidebar.command_search.no_synced_filter": "没有已同步的侧栏筛选", - "sidebar.command_search.no_filter_content": "没有筛选内容", - "sidebar.command_search.object_kind.all": "全部", - "sidebar.command_search.object_kind.tables": "表", - "sidebar.command_search.object_kind.views": "视图", - "sidebar.command_search.object_kind.routines": "函数", - "sidebar.command_search.object_kind.events": "事件", - "sidebar.command_search.object_kind.filter_aria": "对象筛选", - "sidebar.command_search.scope.smart": "智能", - "sidebar.command_search.scope.object": "表对象", - "sidebar.command_search.scope.database": "库", - "sidebar.command_search.scope.host": "Host", - "sidebar.command_search.scope.tag": "标签", - "sidebar.command_search.scope.summary_smart": "智能", - "sidebar.command_search.scope.title": "搜索范围", - "sidebar.command_search.scope.description": "“智能”自动匹配最可能的命中项;手动模式支持按维度组合筛选。", - "sidebar.command_search.scope.recommended": "推荐", - "sidebar.command_search.scope.smart_help": "适合日常检索,自动覆盖名称、库、Host 和标签等高频维度。", - "sidebar.command_search.scope.manual_title": "手动范围", - "sidebar.command_search.scope.multi_select": "支持多选组合", - "sidebar.command_search.scope.manual_help": "智能与其他项互斥。若你明确知道要搜的是对象、库、Host 或标签,建议切到手动范围以减少噪音结果。", - "sidebar.command_search.scope.tooltip": "搜索范围:{{scope}}", - "sidebar.command_search.scope.compact_smart": "智", - "sidebar.search.scope_tooltip": "当前搜索范围:{{scope}}", - "sidebar.search.scope.smart_short": "智能", - "sidebar.rail.object_actions": "对象区快捷操作", - "sidebar.rail.system_actions": "系统操作", - "sidebar.action.new_group": "新建分组", - "sidebar.action.batch_tables": "批量处理表", - "sidebar.action.batch_databases": "批量处理数据库", - "sidebar.action.locate_current_table": "定位当前打开表", - "sidebar.action.pin_table": "置顶表", - "sidebar.action.unpin_table": "取消置顶", - "sidebar.status.pinned": "已置顶", - "sidebar.v2_table_menu.meta.rows_empty": "— 行", - "sidebar.v2_table_menu.meta.rows": "{{count}} 行", - "sidebar.v2_table_menu.meta.idle": "点击刷新统计信息读取", - "sidebar.v2_table_menu.meta.loading": "正在读取统计信息...", - "sidebar.v2_table_menu.meta.unavailable": "统计信息不可用", - "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} 数据 · {{indexes}} 索引", - "sidebar.v2_table_menu.open_data": "查看数据", - "sidebar.v2_table_menu.design_table_detail": "字段 / 索引 / 外键", - "sidebar.v2_table_menu.open_in_new_tab": "在新标签打开", - "sidebar.v2_table_menu.metadata_section": "元信息", - "sidebar.v2_table_menu.view_in_er": "在 ER 图中查看", - "sidebar.v2_table_menu.copy_section": "复制", - "sidebar.v2_table_menu.copy_table_name": "复制表名", - "sidebar.copy_object_name.label.table": "表名", - "sidebar.copy_object_name.label.view": "视图名称", - "sidebar.copy_object_name.label.materialized_view": "物化视图名称", - "sidebar.copy_object_name.label.event": "事件名称", - "sidebar.copy_object_name.empty": "{{label}}为空,无法复制", - "sidebar.copy_object_name.copied": "{{label}}已复制到剪贴板", - "sidebar.copy_object_name.failed": "复制{{label}}失败: {{error}}", - "sidebar.v2_table_menu.copy_table_as_insert": "复制全表为 {{keyword}}", - "sidebar.v2_table_menu.maintenance_section": "维护", - "sidebar.v2_table_menu.rename_compact": "重命名…", - "sidebar.v2_table_menu.new_rollup": "新增 {{keyword}}", - "sidebar.v2_table_menu.backup_sql_dump": "备份 · {{keyword}}", - "sidebar.v2_table_menu.refresh_stats": "刷新统计信息", - "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", - "sidebar.v2_table_menu.open_export_workbench": "打开导出工作台…", - "sidebar.v2_table_menu.truncate_table": "截断表", - "sidebar.v2_table_menu.ai_explain_table": "用 AI 解释这张表", - "sidebar.v2_table_menu.ai_generate_query": "用 AI 生成查询", - "sidebar.v2_table_group_menu.title": "表", - "sidebar.v2_table_group_menu.current_database": "当前数据库", - "sidebar.v2_table_group_menu.sort_name": "名称", - "sidebar.v2_table_group_menu.sort_frequency": "使用频率", - "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} 张表 · 当前按{{sort}}排序", - "sidebar.v2_database_menu.meta": "{{dialect}} · 数据库操作", - "sidebar.v2_database_menu.new_schema": "新建模式", - "sidebar.v2_database_menu.new_materialized_view": "新建物化视图", - "sidebar.v2_database_menu.new_external_catalog": "新建外部 Catalog", - "sidebar.v2_database_menu.refresh_object_tree": "刷新对象树", - "sidebar.v2_database_menu.export_backup_section": "导出与备份", - "sidebar.v2_database_menu.export_all_table_schema_sql": "导出全部表结构 · SQL", - "sidebar.v2_database_menu.backup_all_tables_sql": "备份全部表 · 结构 + 数据 SQL", - "sidebar.message.locate_current_table_unavailable": "当前标签页没有可定位的表", - "sidebar.locate.object.table": "表", - "sidebar.locate.object.view": "视图", - "sidebar.locate.object.materialized_view": "物化视图", - "sidebar.locate.object.routine": "函数/存储过程", - "sidebar.locate.object.trigger": "触发器", - "sidebar.active_connection.current_host_database": "当前 Host 与数据库", - "sidebar.active_connection.no_database_selected": "未选择数据库", - "sidebar.active_connection.no_host_selected": "未选择 Host", - "sidebar.active_connection.actions": "连接操作", - "sidebar.modal.tag.edit_title": "编辑分组", - "sidebar.modal.tag.create_title": "新建分组", - "sidebar.modal.tag.edit_description": "更新分组名称和包含的连接。", - "sidebar.modal.tag.create_description": "创建分组以整理连接。", - "sidebar.field.tag_name": "分组名称", - "sidebar.validation.tag_name_required": "请输入分组名称。", - "sidebar.placeholder.tag_name": "分组名称", - "sidebar.field.select_connections": "选择连接", - "sidebar.modal.create_database.title": "创建数据库", - "sidebar.field.database_name": "数据库名称", - "sidebar.validation.name_required": "请输入名称。", - "sidebar.modal.rename_database.title": "重命名数据库:{{name}}", - "sidebar.field.new_database_name": "新数据库名称", - "sidebar.validation.new_database_name_required": "请输入新数据库名称。", - "sidebar.field.schema_name": "模式名称", - "sidebar.validation.schema_name_required": "请输入模式名称。", - "sidebar.modal.rename_table.title": "重命名表:{{name}}", - "sidebar.field.new_table_name": "新表名", - "sidebar.validation.new_table_name_required": "请输入新表名。", - "sidebar.modal.rename_view.title": "重命名视图:{{name}}", - "sidebar.field.new_view_name": "新视图名称", - "sidebar.validation.new_view_name_required": "请输入新视图名称。", - "sidebar.modal.batch_tables.title": "批量处理表", - "sidebar.modal.batch_tables.description": "选择表和视图,并在一次操作中导出或清空。", - "sidebar.action.clear_tables": "清空表", - "sidebar.action.export_schema": "导出结构", - "sidebar.action.export_data_only": "仅导出数据", - "sidebar.action.backup_schema_data": "备份结构和数据", - "sidebar.field.select_connection": "选择连接", - "sidebar.placeholder.select_connection": "请选择连接", - "sidebar.field.select_database": "选择数据库", - "sidebar.placeholder.select_connection_first": "请先选择连接", - "sidebar.modal.batch_tables.selection_hint": "选择本次批量处理的表或视图。", - "sidebar.placeholder.filter_table_view": "筛选表或视图", - "sidebar.filter.all_objects": "全部对象", - "sidebar.filter.tables_only": "仅表", - "sidebar.filter.views_only": "仅视图", - "sidebar.filter.scope_filtered": "当前筛选", - "sidebar.filter.scope_all": "全部范围", - "sidebar.batch.filtered_count": "已筛选 {{filtered}} / {{total}} 个对象", - "sidebar.action.select_all": "全选", - "sidebar.action.clear_selection": "清除选择", - "sidebar.action.invert_selection": "反选", - "sidebar.batch.selected_objects": "已选择 {{selected}} / {{total}} 个对象", - "sidebar.modal.batch_databases.title": "批量数据库操作", - "sidebar.modal.batch_databases.description": "选择数据库,并导出结构或执行完整备份。", - "sidebar.action.export_database_schema_count": "导出结构({{count}})", - "sidebar.action.backup_database_count": "备份数据库({{count}})", - "sidebar.modal.batch_databases.selection_hint": "从所选连接中选择数据库。", - "sidebar.batch.selected_databases": "已选择 {{selected}} / {{total}} 个数据库", - "sidebar.sql_file_exec.cancel": "取消执行", - "sidebar.action.close": "关闭", - "sidebar.sql_file_exec.file_size": "文件大小:", - "sidebar.sql_file_exec.status_label": "状态:", - "sidebar.sql_file_exec.status.running": "运行中", - "sidebar.sql_file_exec.status.done": "完成", - "sidebar.sql_file_exec.status.cancelled": "已中止", - "sidebar.sql_file_exec.status.error": "错误", - "sidebar.sql_file_exec.executed_label": "已执行:", - "sidebar.sql_file_exec.rows_separator": " 行 | 失败:", - "sidebar.sql_file_exec.rows_suffix": " 行", - "connection_modal.config_section.identity.title": "身份信息", - "connection_modal.config_section.identity.description": "配置连接名称、图标和基本标识。", - "connection_modal.config_section.uri.title": "连接 URI", - "connection_modal.config_section.uri.description": "输入、生成或解析连接 URI。", - "connection_modal.config_section.target.title": "目标地址", - "connection_modal.config_section.target.description": "配置主机、端口和连接目标。", - "connection_modal.config_section.fileTarget.title": "文件数据库", - "connection_modal.config_section.fileTarget.description": "选择本地数据库文件。", - "connection_modal.config_section.connectionMode.title": "连接模式", - "connection_modal.config_section.connectionMode.description": "配置单机、主从、集群或 Replica Set 模式。", - "connection_modal.config_section.mongoDiscovery.title": "MongoDB 发现", - "connection_modal.config_section.mongoDiscovery.description": "发现并管理 MongoDB 成员。", - "connection_modal.config_section.replica.title": "副本/从库", - "connection_modal.config_section.replica.description": "配置从库或附加节点。", - "connection_modal.config_section.service.title": "服务与数据库", - "connection_modal.config_section.service.description": "配置服务名、默认数据库和可见数据库范围。", - "connection_modal.config_section.mongoPolicy.title": "MongoDB 策略", - "connection_modal.config_section.mongoPolicy.description": "配置 MongoDB 认证、readPreference 和保存策略。", - "connection_modal.config_section.credentials.title": "凭据", - "connection_modal.config_section.credentials.description": "配置用户名、密码和已保存凭据。", - "connection_modal.config_section.databaseScope.title": "数据库范围", - "connection_modal.config_section.databaseScope.description": "选择连接后显示的数据库。", - "connection_modal.config_section.customDriver.title": "自定义驱动", - "connection_modal.config_section.customDriver.description": "配置自定义驱动名称。", - "connection_modal.config_section.customDsn.title": "自定义 DSN", - "connection_modal.config_section.customDsn.description": "配置驱动专用 DSN。", - "connection_modal.config_section.jvmRuntime.title": "JVM 运行时", - "connection_modal.config_section.jvmRuntime.description": "配置 JVM 访问模式和诊断能力。", - "connection_modal.field.password": "密码", - "sidebar.menu.refresh": "刷新", - "sidebar.search.scope.object": "对象", - "sidebar.search.scope.database": "数据库", - "sidebar.search.scope.host": "主机", - "sidebar.search.scope.tag": "标签", - "sidebar.tree.saved_queries": "已存查询", - "sidebar.tree.untitled_query": "未命名查询", - "sidebar.tree.default_database": "默认数据库", - "sidebar.tree.unknown_connection": "未知连接", - "sidebar.tree.unmatched_saved_queries": "未匹配", - "sidebar.tree.all_saved_queries": "全部已存查询", - "sidebar.tree.default_schema": "默认结构", - "sidebar.object_group.tables": "表", - "sidebar.object_group.views": "视图", - "sidebar.object_group.routines": "函数和存储过程", - "sidebar.object_group.triggers": "触发器", - "sidebar.object_group.events": "事件", - "sidebar.object_group.materialized_views": "物化视图", - "sidebar.table_folder.columns": "列", - "sidebar.table_folder.indexes": "索引", - "sidebar.table_folder.foreign_keys": "外键", - "sidebar.table_folder.triggers": "触发器", - "sidebar.object.view": "视图", - "sidebar.object.function": "函数", - "sidebar.object.procedure": "存储过程", - "sidebar.table_action.truncate.label": "截断表", - "sidebar.table_action.truncate.progress": "正在截断", - "sidebar.table_action.clear.label": "清空表", - "sidebar.table_action.clear.progress": "正在清空", - "sidebar.tab.table_structure": "表结构({{table}})", - "sidebar.tab.design_table": "设计表({{table}})", - "sidebar.tab.new_table": "新建表 - {{database}}", - "sidebar.tab.table_overview": "表概览 - {{database}}{{schema}}", - "sidebar.tab.trigger": "触发器:{{name}}", - "sidebar.tab.event": "事件:{{name}}", - "sidebar.tab.edit_event": "编辑事件:{{name}}", - "sidebar.tab.materialized_view_definition": "物化视图:{{name}}", - "sidebar.tab.view_definition": "视图:{{name}}", - "sidebar.tab.edit_view": "编辑视图:{{name}}", - "sidebar.tab.create_view": "创建视图", - "sidebar.tab.routine_definition": "{{type}}:{{name}}", - "sidebar.tab.edit_routine": "编辑 {{type}}:{{name}}", - "sidebar.tab.create_function": "创建函数", - "sidebar.tab.create_procedure": "创建存储过程", - "sidebar.tab.new_query": "新建查询", - "sidebar.tab.new_query_database": "新建查询({{database}})", - "sidebar.tab.redis_command": "命令 - {{database}}", - "sidebar.tab.redis_monitor": "监控 - {{database}}", - "tab_manager.menu.close_all": "关闭所有页", - "tab_manager.menu.close_left": "关闭左侧页", - "tab_manager.menu.close_other": "关闭其他页", - "tab_manager.menu.close_right": "关闭右侧页", - "tab_manager.close_aria": "关闭 {{title}}", - "tab_manager.kind_badge.query": "SQL", - "tab_manager.kind_badge.table": "表", - "tab_manager.kind_badge.design": "设计", - "tab_manager.kind_badge.table_overview": "库", - "tab_manager.kind_badge.redis": "Redis", - "tab_manager.kind_badge.jvm": "JVM", - "tab_manager.kind_badge.trigger": "触发器", - "tab_manager.kind_badge.materialized_view": "物化视图", - "tab_manager.kind_badge.view": "视图", - "tab_manager.kind_badge.event": "事件", - "tab_manager.kind_badge.routine": "函数", - "tab_manager.kind_badge.table_export": "导出", - "tab_manager.kind_badge.sql_analysis": "分析", - "tab_manager.kind_badge.fallback": "标签", - "tab_manager.empty.action.open_ai": "打开 AI", - "tab_manager.empty.aria.start_workbench": "GoNavi 起始工作台", - "tab_manager.empty.eyebrow.connections": "{{count}} 个连接", - "tab_manager.empty.eyebrow.workbench": "工作台", - "tab_manager.empty.hero.description": "选择数据源,打开查询编辑器,或在 AI 面板中带着上下文继续。", - "tab_manager.empty.hero.title": "连接、查询和分析都从一个工作台开始。", - "tab_manager.empty.quick.ai_assist.description": "解释 SQL、生成查询并审阅结果", - "tab_manager.empty.quick.ai_assist.title": "进入 AI 辅助", - "tab_manager.empty.quick.aria": "快速工作流", - "tab_manager.empty.quick.configure_source.description": "在一处设置 URI、SSH、代理和驱动", - "tab_manager.empty.quick.configure_source.title": "配置数据源", - "tab_manager.empty.quick.heading": "快速工作流", - "tab_manager.empty.quick.sql_workspace.description": "使用当前上下文打开查询编辑器", - "tab_manager.empty.quick.sql_workspace.title": "启动 SQL 工作区", - "tab_manager.hover.fallback.database_not_specified": "未指定", - "tab_manager.hover.fallback.host_not_configured": "未配置", - "tab_manager.hover.fallback.unbound_connection": "未绑定连接", - "tab_manager.hover.kind.design": "表设计", - "tab_manager.hover.kind.event": "事件", - "tab_manager.hover.kind.fallback": "标签页", - "tab_manager.hover.kind.jvm_audit": "JVM 审计", - "tab_manager.hover.kind.jvm_diagnostic": "JVM 诊断", - "tab_manager.hover.kind.jvm_monitoring": "JVM 监控", - "tab_manager.hover.kind.jvm_overview": "JVM 概览", - "tab_manager.hover.kind.jvm_resource": "JVM 资源", - "tab_manager.hover.kind.materialized_view": "物化视图", - "tab_manager.hover.kind.query": "SQL 查询", - "tab_manager.hover.kind.redis_command": "Redis 命令", - "tab_manager.hover.kind.redis_keys": "Redis Key", - "tab_manager.hover.kind.redis_monitor": "Redis 监控", - "tab_manager.hover.kind.routine": "函数 / 存储过程", - "tab_manager.hover.kind.table": "表数据", - "tab_manager.hover.kind.table_export": "导出工作台", - "tab_manager.hover.kind.sql_analysis": "SQL 分析工作台", - "tab_manager.hover.kind.table_overview": "表概览", - "tab_manager.hover.kind.trigger": "触发器", - "tab_manager.hover.kind.view": "视图", - "tab_manager.hover.label.connection": "连接", - "tab_manager.hover.label.database": "数据库", - "tab_manager.hover.label.object": "对象", - "tab_manager.hover.label.type": "类型", - "sidebar.message.no_visible_databases": "未返回可见数据库或结构。请检查账号权限,或从右键菜单刷新。", - "sidebar.message.visual_new_table_unsupported": "当前数据源暂不支持可视化新建表。", - "sidebar.message.jvm_resources_backend_unavailable": "JVM 资源后端不可用。", - "sidebar.message.external_sql_directory_read_failed": "读取 SQL 目录 {{name}} 失败:{{error}}", - "sidebar.message.sphinx_unsupported_objects": "此 Sphinx 实例不支持这些对象能力:{{objects}}。已启用兼容模式。", - "sidebar.message.sidebar_filter_sync_enabled": "已开启左侧筛选同步。", - "sidebar.message.sidebar_filter_sync_disabled": "已关闭左侧筛选同步。", - "sidebar.message.sidebar_filter_reset": "已重置侧栏筛选。", - "sidebar.message.database_name_required": "请输入数据库名称。", - "sidebar.message.database_name_unchanged": "数据库名称未变化。", - "sidebar.message.database_renamed": "数据库已重命名。", - "sidebar.message.database_deleted": "数据库已删除。", - "sidebar.message.operation_rename_failed": "重命名失败:{{error}}", - "sidebar.message.operation_drop_failed": "删除失败:{{error}}", - "sidebar.message.table_name_required": "请输入表名。", - "sidebar.message.table_name_unchanged": "表名称未变化。", - "sidebar.message.table_renamed": "表已重命名。", - "sidebar.message.table_deleted": "表已删除。", - "sidebar.message.view_name_required": "请输入视图名称。", - "sidebar.message.view_name_unchanged": "视图名称未变化。", - "sidebar.message.view_deleted": "视图已删除。", - "sidebar.message.view_renamed": "视图已重命名。", - "sidebar.message.routine_deleted": "{{type}} 已删除。", - "sidebar.message.rename_failed": "重命名失败:{{error}}", - "sidebar.message.delete_failed": "删除失败:{{error}}", - "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", - "sidebar.message.table_data_action_success": "{{action}} 已完成。", - "sidebar.message.table_data_action_failed": "{{action}} 失败:{{error}}", - "sidebar.message.disconnected": "已断开。", - "sidebar.message.database_closed": "数据库已关闭。", - "sidebar.message.saved_query_deleted": "已存查询已删除。", - "sidebar.message.saved_query_name_unchanged": "新旧查询名称相同,无需修改。", - "sidebar.message.saved_query_renamed": "查询已重命名。", - "sidebar.menu.sort_by_name": "按名称排序", - "sidebar.menu.sort_by_frequency": "按使用频率排序", - "sidebar.menu.create_view": "创建视图", - "sidebar.menu.create_function": "创建函数", - "sidebar.menu.create_procedure": "创建存储过程", - "sidebar.menu.edit_tag": "编辑分组", - "sidebar.menu.delete_tag": "删除分组", - "sidebar.menu.new_command_window": "新建命令窗口", - "sidebar.menu.redis_monitor": "Redis 监控", - "sidebar.menu.duplicate_connection": "复制连接", - "sidebar.menu.disconnect": "断开连接", - "sidebar.menu.move_out_of_tag": "移出分组", - "sidebar.menu.create_database": "创建数据库", - "sidebar.menu.new_query": "新建查询", - "sidebar.menu.move_to_tag": "移动到分组", - "sidebar.menu.browse_keys": "浏览键", - "sidebar.menu.create_table": "创建表", - "sidebar.menu.rename_database": "重命名数据库", - "sidebar.menu.danger_operations": "危险操作", - "sidebar.menu.delete_database": "删除数据库", - "sidebar.menu.export_all_table_schema_sql": "导出全部表结构(SQL)", - "sidebar.menu.backup_all_tables_sql": "备份全部表(结构和数据 SQL)", - "sidebar.menu.close_database": "关闭数据库", - "sidebar.menu.browse_view_data": "浏览视图数据", - "sidebar.menu.view_definition": "视图定义", - "sidebar.menu.browse_materialized_view_data": "浏览物化视图数据", - "sidebar.menu.materialized_view_definition": "物化视图定义", - "sidebar.menu.view_object_definition": "查看定义", - "sidebar.menu.edit_view": "编辑视图", - "sidebar.menu.rename_view": "重命名视图", - "sidebar.menu.delete_view": "删除视图", - "sidebar.menu.view_routine_definition": "视图例程定义", - "sidebar.menu.edit_definition": "编辑定义", - "sidebar.menu.delete_routine": "删除{{type}}", - "sidebar.menu.design_table": "设计表", - "sidebar.menu.copy_table_structure": "复制表结构", - "sidebar.menu.backup_table_sql": "备份表(SQL)", - "sidebar.menu.rename_table": "重命名表", - "sidebar.menu.truncate_table": "截断表", - "sidebar.menu.clear_table": "清空表", - "sidebar.menu.delete_table": "删除表", - "sidebar.menu.export_table_data": "导出表数据", - "sidebar.menu.export_csv": "导出 CSV", - "sidebar.menu.export_xlsx": "导出 XLSX", - "sidebar.menu.export_json": "导出 JSON", - "sidebar.menu.export_markdown": "导出 Markdown", - "sidebar.menu.export_html": "导出 HTML", - "sidebar.menu.open_query": "打开查询", - "sidebar.menu.rename_query": "重命名查询", - "sidebar.menu.delete_query": "删除查询", - "sidebar.menu.add_sql_directory": "添加 SQL 目录", - "sidebar.menu.refresh_directory": "刷新目录", - "sidebar.menu.remove_directory": "移除目录", - "sidebar.menu.open_sql_file": "打开 SQL 文件", - "sidebar.menu.new_sql_file": "新建 SQL 文件", - "sidebar.menu.new_sql_directory": "新建目录", - "sidebar.menu.rename_sql_directory": "重命名目录", - "sidebar.menu.delete_local_directory": "删除本地目录", - "sidebar.menu.delete_sql_directory": "删除目录", - "sidebar.menu.rename_sql_file": "重命名 SQL 文件", - "sidebar.menu.new_sql_file_in_directory": "在此目录新建 SQL 文件", - "sidebar.menu.new_sql_directory_in_directory": "在此目录新建目录", - "sidebar.menu.delete_sql_file": "删除 SQL 文件", - "sidebar.batch.group.tables": "表", - "sidebar.batch.group.views": "视图", - "sidebar.batch.no_matching_objects": "无匹配对象", - "sidebar.sql_template.edit_view": "编辑视图 {{name}}", - "sidebar.sql_template.modify_then_execute": "修改并执行", - "sidebar.sql_template.edit_routine": "编辑 {{type}} {{name}}", - "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB 暂不支持存储过程", - "sidebar.sql_template.duckdb_macro_hint": "使用 SQL Macro 实现类似函数的行为", - "connection_modal.network.ssl_mode.preferred": "首选", - "connection_modal.network.ssl_mode.required": "必需", - "connection_modal.network.ssl_mode.skip_verify": "跳过验证", - "sidebar.external_sql.root": "外部 SQL 文件", - "sidebar.external_sql.directory_fallback": "SQL 目录", - "sidebar.external_sql_modal.title.create_file": "新建 SQL 文件", - "sidebar.external_sql_modal.title.rename_file": "重命名 SQL 文件", - "sidebar.external_sql_modal.title.create_directory": "新建目录", - "sidebar.external_sql_modal.title.rename_directory": "重命名目录", - "sidebar.external_sql_modal.action.create": "新建", - "sidebar.external_sql_modal.action.rename": "重命名", - "sidebar.external_sql_modal.field.directory_name": "目录名", - "sidebar.external_sql_modal.field.sql_file_name": "SQL 文件名", - "sidebar.external_sql_modal.validation.directory_name_required": "请输入目录名", - "sidebar.external_sql_modal.validation.sql_file_name_required": "请输入 SQL 文件名", - "sidebar.external_sql_modal.validation.directory_name_no_separator": "目录名不能包含路径分隔符", - "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "文件名不能包含路径分隔符", - "sidebar.external_sql_modal.help.directory": "目录只会显示在外部 SQL 目录树中,非 SQL 文件仍不会显示", - "sidebar.external_sql_modal.help.sql_file": "不输入 .sql 后缀时会自动补齐", - "sidebar.external_sql_modal.placeholder.directory_name": "例如:reports", - "sidebar.external_sql_modal.placeholder.sql_file_name": "例如:report.sql", - "sidebar.jvm.action.monitoring": "持续监控", - "sidebar.jvm.action.diagnostic": "诊断增强", - "sidebar.jvm.tab.overview": "JVM 概览", - "sidebar.jvm.tab.resource": "JVM 资源", - "sidebar.jvm.tab.audit": "JVM 审计", - "sidebar.jvm.tab.diagnostic": "JVM 诊断", - "sidebar.jvm.tab.monitoring": "JVM 监控", - "jvm.backend.message.connect_success": "JVM 连接成功", - "jvm.backend.error.preview_confirmation_missing": "预览确认令牌缺失,请重新预览后再提交", - "jvm.backend.error.confirmation_token_missing": "缺少确认令牌,请先完成预览确认", - "jvm.backend.error.confirmation_token_invalid": "确认令牌无效,请重新预览并确认", - "jvm.backend.error.confirmation_token_expired": "确认令牌已过期,请重新预览并确认", - "jvm.backend.error.preview_context_hash_failed": "生成 JVM 预览上下文失败: {{detail}}", - "jvm.backend.error.preview_payload_hash_failed": "生成 JVM 预览载荷摘要失败: {{detail}}", - "jvm.backend.error.change_blocked_by_guard": "当前变更被 Guard 拦截", - "jvm.backend.error.change_blocked_read_only": "当前连接为只读,禁止写入", - "jvm.backend.error.change_resource_id_required": "JVM 资源 ID 不能为空", - "jvm.backend.error.change_action_required": "JVM 变更操作不能为空", - "jvm.backend.error.change_reason_required": "JVM 变更原因不能为空", - "jvm.backend.error.change_confirmation_token_failed": "生成 JVM 变更确认令牌失败: {{detail}}", - "jvm.backend.error.disallowed_mode": "当前连接不允许使用 {{mode}} 模式", - "jvm.backend.error.resource_path_invalid": "JVM 资源路径无效: {{detail}}", - "jvm.backend.error.audit_write_blocked": "审计记录写入失败,已阻止 JVM 变更: {{detail}}", - "jvm.backend.warning.failed_audit_write_failed": "失败审计写入失败: {{detail}}", - "jvm.backend.warning.terminal_audit_write_failed": "终态审计写入失败: {{detail}}", - "jvm.backend.separator.message_warning": ";", - "jvm.backend.capability.reason.read_only": "当前连接只读", - "jvm.backend.monitoring.error.snapshot_unsupported": "{{provider}} 监控快照暂未支持", - "jvm.backend.monitoring.error.session_not_found": "未找到 {{connectionId}} {{providerMode}} 的 JVM 监控会话", - "jvm.backend.monitoring.warning.sample_auto_stopped": "监控采样连续失败 {{count}} 次,已自动停止本次监控会话", - "jvm.backend.connection_error.suggestion": "建议:{{detail}}", - "jvm.backend.connection_error.technical_detail": "技术细节:{{detail}}", - "jvm.backend.connection_error.generic": "JVM 连接失败", - "jvm.backend.connection_error.endpoint.base_url_required": "Endpoint 连接失败:未填写 Endpoint Base URL。", - "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Endpoint 连接失败:Endpoint Base URL 格式不合法。", - "jvm.backend.connection_error.endpoint.base_url_invalid.help": "请填写完整的 `http://` 或 `https://` 地址,并指向实现 GoNavi JVM HTTP 合约的管理接口根路径,例如 `http://127.0.0.1:19090/manage/jvm`。", - "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Endpoint 连接失败:当前只支持 HTTP 或 HTTPS 协议。", - "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "请把 Endpoint Base URL 改成 `http://` 或 `https://` 开头的地址。", - "jvm.backend.connection_error.endpoint.not_found.summary": "Endpoint 连接失败:目标地址已响应,但没有找到 GoNavi JVM 管理接口。", - "jvm.backend.connection_error.endpoint.not_found.help": "请确认 Base URL 指向的是 JVM 管理接口根路径,而不是普通业务接口、健康检查地址或网关首页。", - "jvm.backend.connection_error.endpoint.connection_refused.summary": "Endpoint 连接失败:目标管理接口未监听,或当前地址不可达。", - "jvm.backend.connection_error.endpoint.connection_refused.help": "请确认 Base URL 指向实现 GoNavi JVM HTTP 合约的管理接口,并检查服务监听、端口映射和防火墙。", - "jvm.backend.connection_error.endpoint.unauthorized.summary": "Endpoint 连接失败:目标管理接口已响应,但当前 API Key 无效或缺失。", - "jvm.backend.connection_error.endpoint.unauthorized.help": "请检查连接中的 Endpoint API Key 是否与目标服务配置一致。", - "jvm.backend.connection_error.endpoint.forbidden.summary": "Endpoint 连接失败:当前请求被目标管理接口拒绝。", - "jvm.backend.connection_error.endpoint.forbidden.help": "请确认当前客户端来源、鉴权配置和访问策略允许 GoNavi 访问该管理接口。", - "jvm.backend.connection_error.endpoint.timeout.summary": "Endpoint 连接失败:访问目标管理接口超时。", - "jvm.backend.connection_error.endpoint.timeout.help": "请确认 Base URL 可达、目标服务已完成启动,并适当增加连接超时时间。", - "jvm.backend.connection_error.agent.base_url_required": "Agent 连接失败:未填写 Agent Base URL。", - "jvm.backend.connection_error.agent.base_url_invalid.summary": "Agent 连接失败:Agent Base URL 格式不合法。", - "jvm.backend.connection_error.agent.base_url_invalid.help": "请填写完整的 `http://` 或 `https://` 地址,例如 `http://127.0.0.1:19090/gonavi/agent/jvm`。", - "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Agent 连接失败:当前只支持 HTTP 或 HTTPS 协议。", - "jvm.backend.connection_error.agent.scheme_unsupported.help": "请把 Agent Base URL 改成 `http://` 或 `https://` 开头的地址。", - "jvm.backend.connection_error.agent.connection_refused.summary": "Agent 连接失败:目标 Agent 管理端口未监听,或当前地址不可达。", - "jvm.backend.connection_error.agent.connection_refused.help": "请确认 Java 服务已通过 `-javaagent` 启动 GoNavi Agent,并检查 Base URL、端口映射和防火墙。", - "jvm.backend.connection_error.agent.unauthorized.summary": "Agent 连接失败:Agent 已响应,但当前 API Key 无效或缺失。", - "jvm.backend.connection_error.agent.unauthorized.help": "请检查连接中的 Agent API Key 是否与目标服务启动参数一致。", - "jvm.backend.connection_error.agent.forbidden.summary": "Agent 连接失败:当前请求被 Agent 拒绝。", - "jvm.backend.connection_error.agent.forbidden.help": "请确认当前客户端来源、鉴权配置和 Agent 访问策略允许 GoNavi 访问。", - "jvm.backend.connection_error.agent.timeout.summary": "Agent 连接失败:访问 Agent 管理端口超时。", - "jvm.backend.connection_error.agent.timeout.help": "请确认目标地址可达、Agent 已完成启动,并适当增加连接超时时间。", - "jvm.backend.connection_error.jmx.host_required": "JMX 连接失败:未填写主机地址。", - "jvm.backend.connection_error.jmx.port_invalid": "JMX 连接失败:端口无效,请填写 1-65535 之间的有效端口。", - "jvm.backend.connection_error.jmx.java_missing.summary": "JMX 连接失败:当前机器未找到 `java` 运行时,GoNavi 无法启动 JMX helper。", - "jvm.backend.connection_error.jmx.java_missing.help": "请先安装 JRE/JDK,或通过环境变量 `GONAVI_JMX_JAVA_BIN` 指向正确的 `java` 可执行文件。", - "jvm.backend.connection_error.jmx.non_jrmp.summary": "JMX 连接失败:{{target}} 不是标准 JMX 远程管理端口,当前更像普通业务端口或 HTTP 端口。", - "jvm.backend.connection_error.jmx.non_jrmp.help": "请改填应用实际暴露的 JMX 端口,而不是业务 `server.port`。如果服务只开启了 `-Dcom.sun.management.jmxremote`,但没有配置 `jmxremote.port`,也无法直接远程连接。", - "jvm.backend.connection_error.jmx.no_such_object.summary": "JMX 连接失败:{{target}} 上虽然有 RMI 服务,但不是可用的 JMX RMIServer 端口。", - "jvm.backend.connection_error.jmx.no_such_object.help": "这通常意味着填到了 RMI 注册端口、调试端口或其他 Java 服务端口。请检查 `jmxremote.port` 和 `jmxremote.rmi.port` 配置是否正确。", - "jvm.backend.connection_error.jmx.connection_reset.summary": "JMX 连接失败:{{target}} 上的服务主动断开了连接,当前端口不是兼容的标准 JMX RMI 端口。", - "jvm.backend.connection_error.jmx.connection_reset.help": "请确认填写的是 JVM 真正对外暴露的 JMX 端口,而不是业务端口、调试端口或被代理转发的端口。", - "jvm.backend.connection_error.jmx.connection_refused.summary": "JMX 连接失败:无法连接到 {{target}},对应端口没有监听或当前网络不可达。", - "jvm.backend.connection_error.jmx.connection_refused.help": "请确认目标 JVM 已开启远程 JMX,并检查主机、防火墙、端口映射和 SSH/代理配置。", - "jvm.backend.connection_error.jmx.auth.summary": "JMX 连接失败:{{target}} 需要认证,或当前凭据不可用。", - "jvm.backend.connection_error.jmx.auth.help": "请确认目标 JMX 是否关闭认证;如果必须认证,需要补充用户名/密码后再连接。", - "jvm.backend.connection_error.jmx.timeout.summary": "JMX 连接失败:连接 {{target}} 超时。", - "jvm.backend.connection_error.jmx.timeout.help": "请确认端口可达、网络未被拦截,并适当增加连接超时时间。", - "jvm.backend.diagnostic.error.disabled": "当前连接未启用 JVM 诊断增强模式", - "jvm.backend.diagnostic.error.session_id_required": "诊断会话 ID 不能为空,请先创建会话", - "jvm.backend.diagnostic.error.command_required": "诊断命令不能为空", - "jvm.backend.diagnostic.error.cancel_identifiers_required": "取消命令缺少 sessionId 或 commandId", - "jvm.backend.diagnostic.error.audit_write_blocked": "诊断审计记录写入失败,已阻止命令执行: {{detail}}", - "jvm.backend.diagnostic.error.execute_canceled": "诊断执行请求已中止:{{detail}}", - "jvm.backend.diagnostic.error.transport_unsupported": "不支持的 JVM 诊断传输模式:{{transport}}", - "jvm.backend.diagnostic.warning.audit_write_failed": "审计记录写入失败: {{detail}}", - "jvm.backend.diagnostic.message.command_completed": "诊断命令执行完成", - "jvm.backend.diagnostic.message.cancel_requested": "已发送取消请求,等待诊断桥接端结束命令", - "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas 命令执行完成", - "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas 命令已中止", - "jvm.backend.diagnostic.policy.observe_not_allowed": "当前连接未开放观察类诊断命令:{{command}}", - "jvm.backend.diagnostic.policy.trace_not_allowed": "当前连接未开放跟踪类诊断命令:{{command}}", - "jvm.backend.diagnostic.policy.mutating_not_allowed": "当前连接未开放高风险诊断命令:{{command}}", - "jvm.backend.diagnostic.policy.read_only_observe_only": "当前连接为只读模式,仅允许观察类诊断命令", - "jvm.backend.diagnostic.policy.multiline_not_supported": "诊断命令不支持换行或多命令输入", - "jvm.backend.diagnostic.arthas.base_url_required": "Arthas Tunnel 地址不能为空", - "jvm.backend.diagnostic.arthas.base_url_invalid": "Arthas Tunnel 地址格式不正确:{{detail}}", - "jvm.backend.diagnostic.arthas.target_id_required": "Arthas Tunnel 需要填写目标实例标识(targetId / agentId)", - "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel 仅支持 http/https/ws/wss 地址:{{scheme}}", - "jvm.backend.diagnostic.arthas.session_missing": "诊断会话不存在,请重新创建 Arthas Tunnel 会话", - "jvm.backend.diagnostic.arthas.session_config_changed": "Arthas Tunnel 会话配置已变化,请重新创建诊断会话", - "jvm.backend.diagnostic.arthas.command_already_running": "当前 Arthas Tunnel 会话已有命令在执行,请先等待完成或取消", - "jvm.backend.diagnostic.arthas.no_running_command": "当前 Arthas Tunnel 会话没有正在执行的命令", - "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "当前 Arthas Tunnel 会话的活动命令与待取消命令不一致", - "jvm.backend.diagnostic.arthas.connection_not_ready": "Arthas Tunnel 连接尚未建立完成,请稍后重试", - "jvm.backend.diagnostic.arthas.http_failed": "Arthas Tunnel 连接失败:HTTP {{status}}", - "jvm.backend.diagnostic.arthas.connect_timeout": "建立 Arthas Tunnel WebSocket 连接超时,{{timeout}} 内未收到响应", - "jvm.backend.diagnostic.arthas.connect_canceled": "建立 Arthas Tunnel WebSocket 连接已中止", - "jvm.backend.diagnostic.arthas.connect_failed": "建立 Arthas Tunnel WebSocket 连接失败:{{detail}}", - "jvm.backend.diagnostic.arthas.request_encode_failed": "Arthas Tunnel 请求编码失败:{{detail}}", - "jvm.backend.diagnostic.arthas.write_deadline_failed": "Arthas Tunnel 写入超时设置失败:{{detail}}", - "jvm.backend.diagnostic.arthas.send_timeout": "向 Arthas Tunnel 发送终端指令超时,{{timeout}} 内未收到响应", - "jvm.backend.diagnostic.arthas.send_canceled": "向 Arthas Tunnel 发送终端指令已中止", - "jvm.backend.diagnostic.arthas.send_failed": "向 Arthas Tunnel 发送终端指令失败:{{detail}}", - "jvm.backend.diagnostic.arthas.read_deadline_failed": "Arthas Tunnel 读取超时设置失败:{{detail}}", - "jvm.backend.diagnostic.arthas.read_timeout": "读取 Arthas Tunnel 输出超时,{{timeout}} 内未收到响应", - "jvm.backend.diagnostic.arthas.read_canceled": "读取 Arthas Tunnel 输出已中止", - "jvm.backend.diagnostic.arthas.read_failed": "读取 Arthas Tunnel 输出失败:{{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed": "Arthas Tunnel 连接已关闭:{{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed_code": "Arthas Tunnel 连接已关闭:code={{code}}", - "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel 命令执行超时,{{timeout}} 内未完成", - "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel 命令已中止", - "jvm.backend.diagnostic.arthas.target_not_found": "找不到目标实例,请确认 targetId / agentId 是否填写正确,且对应 tunnel client 已在线", - "jvm.backend.diagnostic.arthas.target_not_found_with_id": "找不到目标实例 {{target}},请确认 targetId / agentId 是否填写正确,且对应 tunnel client 已在线", - "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Arthas Tunnel 终端指令编码失败:{{detail}}", - "jvm_resource.error.connection_missing": "连接不存在或已被删除", - "jvm_resource.error.resource_path_empty": "资源路径为空", - "jvm_resource.error.get_value_unavailable": "JVMGetValue 后端方法不可用", - "jvm_resource.error.read_failed": "读取 JVM 资源失败", - "jvm_resource.error.ai_plan_missing_context": "AI 计划缺少来源上下文,请在目标 JVM 资源页重新生成后再应用。", - "jvm_resource.error.ai_plan_context_mismatch": "当前 JVM 页签与 AI 计划的来源上下文不一致,已拒绝自动应用。", - "jvm_resource.error.ai_plan_to_draft_failed": "AI 计划暂时无法转换为 JVM 预览草稿", - "jvm_resource.message.ai_plan_draft_filled": "已从 AI 计划填充草稿,目标资源为 {{resourceId}},请先执行“预览变更”再确认写入。", - "jvm_ai_plan.error.resource_locator_missing": "AI 计划缺少可用的资源定位信息", - "jvm_ai_plan.error.reason_missing": "AI 计划缺少变更原因", - "jvm_ai_plan.error.action_missing": "AI 计划缺少可执行 action", - "jvm_ai_plan.error.payload_json_object_required": "当前 JVM 预览要求 payload 仍然是 JSON 对象", - "jvm_ai_plan.snapshot.unavailable": "当前资源快照尚未加载成功。", - "jvm_ai_plan.actions.none": "当前资源未声明支持动作。若要生成计划,请仅在你能从快照内容中明确推断时给出 action,并保持 payload 为 JSON 对象。", - "jvm_ai_plan.actions.label": " ({{label}})", - "jvm_ai_plan.actions.description": ":{{description}}", - "jvm_ai_plan.actions.payload_fields": ";payload 字段:{{fields}}", - "jvm_ai_plan.actions.field_separator": "、", - "jvm_ai_plan.actions.required_suffix": "(required)", - "jvm_ai_plan.prompt.resource_path_missing": "(未提供资源路径)", - "jvm_ai_plan.prompt.environment_unknown": "unknown", - "jvm_ai_plan.prompt.intro": "请分析下面这个 JVM 资源,并生成一个可用于 GoNavi “预览变更” 的结构化修改计划。", - "jvm_ai_plan.prompt.connection_name": "连接名称:{{connectionName}}", - "jvm_ai_plan.prompt.target_host": "目标主机:{{host}}", - "jvm_ai_plan.prompt.provider_mode": "Provider 模式:{{providerMode}}", - "jvm_ai_plan.prompt.environment": "运行环境:{{environmentLabel}}", - "jvm_ai_plan.prompt.connection_policy.read_only": "只读连接,当前只能生成计划和风险分析,不能假设已执行", - "jvm_ai_plan.prompt.connection_policy.writable": "可写连接,但仍必须先预览再人工确认", - "jvm_ai_plan.prompt.connection_policy": "连接策略:{{policy}}", - "jvm_ai_plan.prompt.resource_path": "当前资源路径:{{resourcePath}}", - "jvm_ai_plan.prompt.snapshot_title": "当前资源快照:", - "jvm_ai_plan.prompt.supported_actions_title": "当前资源支持动作:", - "jvm_ai_plan.prompt.output_requirements_title": "输出要求:", - "jvm_ai_plan.prompt.requirement.single_json_block": "1. 可以先给一小段分析,但必须包含且只包含一个 ```json 代码块。", - "jvm_ai_plan.prompt.requirement.fields": "2. 代码块里的 JSON 字段必须严格是:targetType、selector、action、payload、reason。", - "jvm_ai_plan.prompt.requirement.resource_path": "3. selector.resourcePath 优先使用当前资源路径 {{resourcePath}},不要凭空编造其他路径。", - "jvm_ai_plan.prompt.requirement.action": "4. action 优先从“当前资源支持动作”里选择;如果当前资源未声明支持动作,才允许基于快照内容推断。", - "jvm_ai_plan.prompt.requirement.payload": "5. payload 只能使用 JSON 对象包装,不要输出脚本、命令或原始二进制。若需要纯文本值,也请包装成 {\"format\":\"text\",\"value\":\"...\"}。", - "jvm_ai_plan.prompt.requirement.no_execute": "6. 不要声称已经执行修改,也不要输出脚本或命令。", - "jvm_ai_plan.prompt.example_title": "JSON 示例:", - "jvm_ai_plan.prompt.example_reason": "修复缓存脏值", - "jvm_resource.error.reason_required": "请填写变更原因", - "jvm_resource.error.payload_object_required": "Payload 必须是 JSON 对象", - "jvm_resource.error.resource_id_empty": "资源 ID 为空,无法生成变更草稿", - "jvm_resource.error.preview_unavailable": "JVMPreviewChange 后端方法不可用", - "jvm_resource.error.draft_invalid": "变更草稿不合法", - "jvm_resource.error.preview_failed": "预览 JVM 变更失败", - "jvm_resource.error.preview_result_invalid": "预览结果格式不正确", - "jvm_resource.error.apply_unavailable": "JVMApplyChange 后端方法不可用", - "jvm_resource.error.preview_required": "请先预览变更,再确认执行", - "jvm_resource.error.context_changed": "资源上下文已变化,请重新预览后再执行", - "jvm_resource.error.confirmation_missing": "确认令牌缺失,请重新预览后再执行", - "jvm_resource.presentation.action.set.label": "设置属性", - "jvm_resource.presentation.action.set.description": "更新当前资源暴露的可写属性值。", - "jvm_resource.presentation.action.invoke.label": "调用操作", - "jvm_resource.presentation.action.invoke.description": "调用当前资源暴露的管理操作。", - "jvm_resource.presentation.action.put.label": "写入资源", - "jvm_resource.presentation.action.put.description": "将 payload 内容写入当前 JVM 资源。", - "jvm_resource.presentation.action.clear.label": "清空资源", - "jvm_resource.presentation.action.clear.description": "清空当前 JVM 资源里的数据或状态。", - "jvm_resource.presentation.action.evict.label": "驱逐缓存", - "jvm_resource.presentation.action.evict.description": "将目标缓存项从当前 JVM 运行时中驱逐。", - "jvm_resource.presentation.action.remove.label": "删除条目", - "jvm_resource.presentation.action.remove.description": "删除当前资源中的指定条目。", - "jvm_resource.presentation.action.delete.label": "删除资源", - "jvm_resource.presentation.action.delete.description": "删除或注销当前资源。", - "jvm_resource.presentation.action.refresh.label": "刷新资源", - "jvm_resource.presentation.action.refresh.description": "刷新当前资源的运行时状态。", - "jvm_resource.presentation.action.reload.label": "重新加载", - "jvm_resource.presentation.action.reload.description": "重新加载当前资源或其配置。", - "jvm_resource.presentation.action.reset.label": "重置状态", - "jvm_resource.presentation.action.reset.description": "将当前资源恢复到初始或默认状态。", - "jvm_resource.presentation.unnamed_action": "未命名动作", - "jvm_resource.presentation.risk.low": "低", - "jvm_resource.presentation.risk.medium": "中", - "jvm_resource.presentation.risk.high": "高", - "jvm_resource.presentation.risk.unknown": "未知", - "jvm_resource.presentation.audit_result.unknown": "未知", - "jvm_resource.presentation.audit_result.applied": "已执行", - "jvm_resource.presentation.audit_result.success": "成功", - "jvm_resource.presentation.audit_result.warning": "警告", - "jvm_resource.presentation.audit_result.blocked": "已阻断", - "jvm_resource.presentation.audit_result.failed": "失败", - "jvm_resource.error.apply_failed": "执行 JVM 变更失败", - "jvm_resource.message.apply_success": "JVM 变更已执行", - "jvm_resource.title": "JVM 资源工作台", - "jvm_resource.badge.read_only": "只读连接", - "jvm_resource.badge.writable": "可写连接", - "jvm_resource.action.audit": "审计记录", - "jvm_resource.action.generate_ai_plan": "AI 生成计划", - "jvm_resource.action.ask_ai_plan": "让 AI 生成计划", - "jvm_resource.card.snapshot": "资源快照", - "jvm_resource.field.resource_id": "资源 ID", - "jvm_resource.field.resource_type": "资源类型", - "jvm_resource.field.format": "格式", - "jvm_resource.field.version": "版本", - "jvm_resource.field.available_actions": "可用动作", - "jvm_resource.section.resource_value": "资源值", - "jvm_resource.section.metadata": "元数据", - "jvm_resource.empty.no_resource_data": "暂无资源数据", - "jvm_resource.card.change_draft": "变更草稿", - "jvm_resource.field.resource_path": "资源路径", - "jvm_resource.field.target_resource": "目标资源", - "jvm_resource.field.resource_version": "资源版本", - "jvm_resource.field.draft_source": "草稿来源", - "jvm_resource.draft_source.ai_plan": "AI 辅助草稿", - "jvm_resource.draft_source.manual": "手工编辑", - "jvm_resource.section.supported_actions": "资源支持动作", - "jvm_resource.field.payload_fields": "Payload 字段:", - "jvm_resource.marker.required_suffix": "(必填)", - "jvm_resource.list_separator": "、", - "jvm_resource.field.action": "动作", - "jvm_resource.placeholder.action_jmx": "例如 set 或 invoke", - "jvm_resource.placeholder.action_default": "例如 put / clear / evict", - "jvm_resource.message.current_action": "当前动作:", - "jvm_resource.field.reason": "变更原因", - "jvm_resource.placeholder.reason": "填写本次 JVM 资源变更原因", - "jvm_resource.field.payload": "Payload(JSON)", - "jvm_resource.message.payload_hint": "预览会使用当前草稿;确认执行会使用最近一次成功预览的请求,修改草稿后请重新预览。", - "jvm_resource.message.payload_template_applied": "已按当前动作填充推荐模板。", - "jvm_resource.action.preview_change": "预览变更", - "jvm_overview.connection_missing.message": "连接不存在或已被删除", - "jvm_overview.error.capability_load_failed": "读取 JVM 模式能力失败", - "jvm_overview.eyebrow": "JVM 运行时", - "jvm_overview.title": "JVM 运行时概览", - "jvm_overview.badge.read_only": "只读连接", - "jvm_overview.badge.writable": "可写连接", - "jvm_overview.card.connection_summary": "连接摘要", - "jvm_overview.card.mode_capability": "模式能力", - "jvm_overview.field.current_mode": "当前模式", - "jvm_overview.field.allowed_modes": "允许模式", - "jvm_overview.field.jmx_address": "JMX 地址", - "jvm_overview.field.endpoint": "Endpoint", - "jvm_overview.field.agent": "Agent", - "jvm_overview.field.resource_browse": "资源浏览", - "jvm_overview.value.enabled": "已启用", - "jvm_overview.value.not_configured": "未配置", - "jvm_overview.value.resource_browse_lazy_load": "通过侧边栏展开模式节点后懒加载", - "jvm_overview.empty.capabilities": "暂无模式能力数据", - "jvm_overview.capability.can_browse": "可浏览", - "jvm_overview.capability.cannot_browse": "不可浏览", - "jvm_overview.capability.writable": "可写", - "jvm_overview.capability.read_only": "只读", - "jvm_overview.capability.preview_supported": "支持预览", - "jvm_overview.capability.preview_unsupported": "不支持预览", - "jvm_monitoring_dashboard.connection_missing.message": "连接不存在或已被删除", - "jvm_monitoring_dashboard.error.history_unavailable": "JVMGetMonitoringHistory 后端方法不可用", - "jvm_monitoring_dashboard.error.history_load_failed": "读取监控历史失败", - "jvm_monitoring_dashboard.error.start_unavailable": "JVMStartMonitoring 后端方法不可用", - "jvm_monitoring_dashboard.error.start_failed": "开始监控失败", - "jvm_monitoring_dashboard.error.stop_unavailable": "JVMStopMonitoring 后端方法不可用", - "jvm_monitoring_dashboard.error.stop_failed": "停止监控失败", - "jvm_monitoring_dashboard.title": "JVM 持续监控", - "jvm_monitoring_dashboard.status.sampling": "采样中", - "jvm_monitoring_dashboard.status.stopped": "未运行", - "jvm_monitoring_dashboard.action.refresh": "刷新", - "jvm_monitoring_dashboard.action.start": "开始监控", - "jvm_monitoring_dashboard.action.stop": "停止监控", - "jvm_monitoring_dashboard.degraded.message": "监控能力存在降级", - "jvm_monitoring_dashboard.empty.title": "当前尚未开始持续监控", - "jvm_monitoring_dashboard.empty.description": "点击“开始监控”后,GoNavi 会在当前会话内持续保留该连接的采样结果;切换页签不会停止采样。", - "jvm_diagnostic.workbench.eyebrow": "JVM 诊断", - "jvm_diagnostic.workbench.title": "JVM 诊断工作台", - "jvm_diagnostic.workbench.status.session_established": "会话已建立", - "jvm_diagnostic.workbench.status.no_session": "未建会话", - "jvm_diagnostic.workbench.status.command_running": "命令执行中", - "jvm_diagnostic.workbench.action.probe": "检查能力", - "jvm_diagnostic.workbench.action.restart_session": "重建会话", - "jvm_diagnostic.workbench.action.start_session": "新建会话", - "jvm_diagnostic.workbench.action.execute_command": "执行命令", - "jvm_diagnostic.workbench.action.cancel_command": "取消命令", - "jvm_diagnostic.connection_missing.message": "连接不存在或已被删除", - "jvm_diagnostic.error.probe_unavailable": "JVMProbeDiagnosticCapabilities 后端方法不可用", - "jvm_diagnostic.error.probe_failed": "检查诊断能力失败", - "jvm_diagnostic.error.start_unavailable": "JVMStartDiagnosticSession 后端方法不可用", - "jvm_diagnostic.error.start_failed": "创建诊断会话失败", - "jvm_diagnostic.error.history_load_failed": "加载诊断历史失败", - "jvm_diagnostic.error.execute_unavailable": "JVMExecuteDiagnosticCommand 后端方法不可用", - "jvm_diagnostic.error.execute_session_required": "请先创建诊断会话,再执行命令", - "jvm_diagnostic.error.execute_command_required": "诊断命令不能为空", - "jvm_diagnostic.error.execute_failed": "执行诊断命令失败", - "jvm_diagnostic.error.cancel_unavailable": "JVMCancelDiagnosticCommand 后端方法不可用", - "jvm_diagnostic.error.cancel_failed": "取消诊断命令失败", - "jvm_diagnostic.message.cancel_sent": "已发送取消请求", - "jvm_diagnostic.session.default_title": "JVM 诊断控制台", - "jvm_diagnostic.session.default_reason": "控制台启动会话", - "jvm_diagnostic.ai_plan.error.transport_mismatch": "AI 计划的诊断 transport 为 {{planTransport}},与当前控制台 {{currentTransport}} 不一致,请重新生成计划后再应用。", - "jvm_diagnostic.ai_plan.message.filled": "AI 诊断计划已回填到控制台", - "jvm_diagnostic.session_capability.title": "会话与能力", - "jvm_diagnostic.session_capability.description": "当前通道、权限与快捷维护", - "jvm_diagnostic.session_capability.status.session_established": "会话已建立", - "jvm_diagnostic.session_capability.status.no_session": "未建会话", - "jvm_diagnostic.session_capability.status.command_running": "命令执行中", - "jvm_diagnostic.session_capability.status.idle": "空闲", - "jvm_diagnostic.session_capability.session_id_hint": "创建会话后会在这里显示会话 ID。", - "jvm_diagnostic.session_capability.note": "检查能力不会执行命令;执行命令前必须先建会话。审计历史展示最近命令记录,未建会话时也可能包含过去会话的记录。", - "jvm_diagnostic.session_capability.action.clear_output": "清空输出", - "jvm_diagnostic.session_capability.action.refresh_history": "刷新历史", - "jvm_diagnostic.workflow.probe.title": "检查能力", - "jvm_diagnostic.workflow.probe.description": "只读取诊断通道、流式输出与命令权限,不创建会话。", - "jvm_diagnostic.workflow.session.title": "新建会话", - "jvm_diagnostic.workflow.session.description": "创建诊断上下文,后续命令都会绑定到这个会话。", - "jvm_diagnostic.workflow.command.title": "执行命令", - "jvm_diagnostic.workflow.command.description": "会话建立后显示命令编辑器、原因输入与模板。", - "jvm_diagnostic.capability.empty.title": "尚未检查能力", - "jvm_diagnostic.capability.empty.description": "能力检查只读取通道权限和命令策略,不会创建会话或执行命令。", - "jvm_diagnostic.capability_result.title": "能力检查结果", - "jvm_diagnostic.capability_result.session_allowed": "可建会话", - "jvm_diagnostic.capability_result.session_denied": "不可建会话", - "jvm_diagnostic.capability_result.streaming_supported": "流式输出", - "jvm_diagnostic.capability_result.streaming_unsupported": "不支持流式", - "jvm_diagnostic.capability_result.observe_allowed": "观察命令", - "jvm_diagnostic.capability_result.observe_denied": "禁止观察", - "jvm_diagnostic.capability_result.trace_allowed": "跟踪命令", - "jvm_diagnostic.capability_result.mutating_allowed": "高风险命令", - "jvm_diagnostic.no_session.title": "开始一次诊断", - "jvm_diagnostic.no_session.description": "先建立会话,再显示命令编辑器和模板", - "jvm_diagnostic.no_session.alert.title": "命令输入将在会话建立后显示", - "jvm_diagnostic.no_session.alert.description": "这样可以避免未绑定会话时误以为命令已经可执行,也能保证审计记录、输出流和取消命令都绑定到同一个会话。", - "jvm_diagnostic.no_session.action.start": "新建诊断会话", - "jvm_diagnostic.no_session.action.probe": "先检查能力", - "jvm_diagnostic.command_input.title": "命令输入", - "jvm_diagnostic.command_input.description": "支持自动补全,按 Ctrl/Cmd + Enter 执行", - "jvm_diagnostic.command_input.command_label": "诊断命令", - "jvm_diagnostic.command_input.command_description": "输入 Arthas/诊断命令,例如 thread -n 5、dashboard、jvm;也可以从下方模板一键回填。", - "jvm_diagnostic.command_input.reason_label": "诊断原因(可选)", - "jvm_diagnostic.command_input.reason_placeholder": "例如:排查 CPU 飙高、确认线程阻塞、定位慢方法", - "jvm_diagnostic.command_input.reason_help": "用于审计记录和 AI 上下文理解,不会作为 Arthas 命令发送到目标 JVM。", - "jvm_diagnostic.command_templates.title": "命令模板", - "jvm_diagnostic.output.title": "实时输出", - "jvm_diagnostic.output.description": "按后端事件流追加显示", - "jvm_diagnostic.output.empty.description": "暂无实时输出。命令执行后,这里会按时间顺序追加后端返回内容。", - "jvm_diagnostic.output.local_pending": "已提交诊断命令,等待后端输出:{{command}}", - "jvm_diagnostic.output.frontend_completed_fallback": "诊断命令调用已返回,但未收到后端终态事件,前端已兜底结束等待状态。", - "jvm_diagnostic.presentation.category.observe": "观察类命令", - "jvm_diagnostic.presentation.category.trace": "跟踪类命令", - "jvm_diagnostic.presentation.category.mutating": "高风险命令", - "jvm_diagnostic.presentation.phase.running": "执行中", - "jvm_diagnostic.presentation.phase.completed": "已完成", - "jvm_diagnostic.presentation.phase.failed": "失败", - "jvm_diagnostic.presentation.phase.canceling": "取消中", - "jvm_diagnostic.presentation.phase.diagnostic": "诊断事件", - "jvm_diagnostic.presentation.event.diagnostic": "诊断输出", - "jvm_diagnostic.presentation.event.chunk": "输出片段", - "jvm_diagnostic.presentation.event.done": "执行结束", - "jvm_diagnostic.presentation.chunk.empty_event": "空事件", - "jvm_diagnostic.history.title": "审计历史", - "jvm_diagnostic.history.description": "最近命令和执行状态", - "jvm_diagnostic.history.current_session": "当前会话", - "jvm_diagnostic.history.no_session": "尚未建立诊断会话", - "jvm_diagnostic.history.recent_records": "最近记录", - "jvm_diagnostic.history.reason_missing": "未填写诊断原因", - "jvm_diagnostic.history.no_records": "尚无诊断历史", - "jvm_audit.eyebrow": "JVM 审计", - "jvm_audit.title": "JVM 变更审计", - "jvm_audit.card.records": "审计记录", - "jvm_audit.description.current_range": "当前范围:最近 {{limit}} 条", - "jvm_audit.option.last_records": "最近 {{limit}} 条", - "jvm_audit.action.refresh": "刷新", - "jvm_audit.column.time": "时间", - "jvm_audit.column.mode": "模式", - "jvm_audit.column.action": "动作", - "jvm_audit.column.resource": "资源", - "jvm_audit.column.reason": "原因", - "jvm_audit.column.source": "来源", - "jvm_audit.column.result": "结果", - "jvm_audit.source.ai_plan": "AI 辅助", - "jvm_audit.source.manual": "手工", - "jvm_audit.error.connection_missing": "连接不存在或已被删除", - "jvm_audit.error.backend_unavailable": "JVMListAuditRecords 后端方法不可用", - "jvm_audit.error.load_failed": "读取 JVM 审计记录失败{{separator}}{{detail}}", - "jvm_audit.empty.load_failed": "当前无法加载审计记录", - "jvm_audit.empty.no_records": "暂无审计记录", - "query_editor.placeholder.connection": "选择连接", - "query_editor.placeholder.database": "选择数据库", - "query_editor.max_rows.tooltip": "最大返回行数。会对 SELECT 自动加 LIMIT,防止大结果集卡死界面。", - "query_editor.max_rows.option_500": "最大行数:500", - "query_editor.max_rows.option_1000": "最大行数:1000", - "query_editor.max_rows.option_5000": "最大行数:5000", - "query_editor.max_rows.option_20000": "最大行数:20000", - "query_editor.max_rows.option_unlimited": "最大行数:不限", - "query_editor.action.run": "运行", - "query_editor.action.run_with_shortcut": "运行({{shortcut}})", - "query_editor.action.stop": "停止", - "query_editor.action.save": "保存", - "query_editor.action.save_with_shortcut": "保存({{shortcut}})", - "query_editor.completion.documentation.comment": "备注:{{comment}}", - "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + 点击切换到该数据库", - "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + 点击打开该表", - "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + 点击打开该视图", - "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + 点击打开该物化视图", - "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + 点击打开该触发器", - "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + 点击打开该存储过程", - "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + 点击打开该函数", - "query_editor.object_info.database": "数据库", - "query_editor.object_info.table": "表", - "query_editor.object_info.column": "字段", - "query_editor.object_info.materialized_view": "物化视图", - "query_editor.object_info.label.database": "库", - "query_editor.object_info.label.table": "表", - "query_editor.object_info.label.type": "类型", - "query_editor.object_info.label.schema": "Schema", - "query_editor.object_info.label.separator": ":", - "query_editor.action.more": "更多", - "query_editor.action.format": "美化", - "query_editor.action.format_sql": "美化 SQL", - "query_editor.action.resize_editor": "拖动调整高度", - "query_editor.action.ai_generate_sql": "AI 生成 SQL", - "query_editor.action.ai_explain_sql": "AI 解释 SQL", - "query_editor.action.ai_optimize_sql": "AI 优化 SQL", - "query_editor.action.ai_generate_sql_menu": "生成 SQL", - "query_editor.action.ai_explain_sql_menu": "解释 SQL", - "query_editor.action.ai_optimize_sql_menu": "优化 SQL", - "query_editor.action.ai_schema_analysis": "Schema 分析", - "query_editor.action.show_results_panel": "显示结果区", - "query_editor.action.hide_results_panel": "隐藏结果区", - "query_editor.action.show_results_panel_with_shortcut": "显示结果区({{shortcut}})", - "query_editor.action.hide_results_panel_with_shortcut": "隐藏结果区({{shortcut}})", - "query_editor.action.results": "结果", - "query_editor.transaction.delay.immediate": "立即", - "query_editor.transaction.mode.tooltip": "参考 DBeaver:SQL 编辑器执行 INSERT/UPDATE/DELETE/MERGE/REPLACE 等 DML 时先进入 GoNavi 托管事务;手动提交需要手动提交/回滚,自动提交会在执行成功后自动 COMMIT。", - "query_editor.transaction.mode.manual": "手动", - "query_editor.transaction.mode.auto": "自动", - "query_editor.transaction.status.auto_commit_countdown": "{{seconds}}s 后自动提交", - "query_editor.transaction.status.auto_committing": "自动提交中", - "query_editor.transaction.action.commit": "提交", - "query_editor.transaction.action.commit_with_count": "提交 ({{count}})", - "query_editor.transaction.action.rollback": "回滚", - "query_editor.transaction.message.pending_managed_transaction": "当前 SQL 编辑器已有未提交事务,请先提交或回滚后再执行新的增删改语句。", - "query_editor.action.show_object_info": "查看对象信息", - "query_editor.action.rename_query": "重命名查询", - "query_editor.action.export_sql_file": "导出 SQL 文件", - "query_editor.format.keyword_upper": "关键字大写", - "query_editor.format.keyword_lower": "关键字小写", - "query_editor.format.restore_last_format": "还原上次美化", - "query_editor.format.snippet_settings": "代码片段管理...", - "query_editor.format.shortcut_settings": "快捷键管理...", - "query_editor.message.format_failed": "格式化失败:SQL 语法可能有误。", - "query_editor.message.no_format_restore_snapshot": "没有可还原的美化前 SQL", - "query_editor.message.format_restore_success": "已还原到美化前 SQL", - "query_editor.message.page_query_failed": "翻页失败:{{error}}", - "query_editor.message.page_query_empty": "翻页未返回结果集", - "query_editor.message.refresh_failed": "刷新失败:{{error}}", - "query_editor.message.select_database_first": "请先选择数据库。", - "query_editor.message.connection_not_found": "未找到连接。", - "query_editor.message.unsupported_source": "当前数据源不支持 SQL 查询编辑器,请使用对应专用页面。", - "query_editor.message.no_executable_sql": "没有可执行的 SQL。", - "query_editor.message.no_selectable_sql": "没有可选择的 SQL 语句。", - "query_editor.message.statement_failed_prefix": "第 {{index}} 条语句执行失败:", - "query_editor.message.execution_success": "执行成功。", - "query_editor.message.execution_multi_success": "已执行 {{statements}} 条语句,生成 {{results}} 个结果集。", - "query_editor.message.execution_result_sets_success": "已执行完成,生成 {{results}} 个结果集。", - "query_editor.message.execution_failed_with_error": "查询执行失败:{{error}}", - "query_editor.message.cancel_no_running": "没有正在运行的查询可取消。", - "query_editor.message.cancel_success": "查询已中止。", - "query_editor.message.cancel_failed": "取消查询失败:{{error}}", - "query_editor.message.read_only_no_safe_locator": "未检测到主键或可用唯一索引,无法安全提交修改。", - "query_editor.message.read_only_index_metadata_unavailable": "无法加载唯一索引元数据,无法安全提交修改。", - "query_editor.message.read_only_table_locator_metadata_unavailable": "无法加载 {{table}} 的主键/唯一索引元数据,无法安全提交修改。", - "query_editor.message.read_only_system_metadata": "系统元数据查询结果保持只读。", - "query_editor.message.read_only_oracle_rowid_injection_unavailable": "Oracle 查询使用 * 时无法自动注入 ROWID 定位列,已保持只读。", - "query_editor.message.read_only_warning_with_detail": "查询结果保持只读:{{detail}}", - "query_editor.message.object_info_target_not_found": "当前光标未定位到可识别的表或字段。", - "query_editor.message.insert_success": "代码已在当前光标处成功插入。", - "query_editor.message.append_success": "代码已追加。", - "query_editor.message.saved": "查询已保存。", - "query_editor.message.sql_file_saved": "SQL 文件已保存。", - "query_editor.message.save_sql_file_failed": "保存 SQL 文件失败:{{error}}", - "query_editor.message.save_query_failed": "保存查询失败:{{error}}", - "query_editor.message.export_sql_file_success": "SQL 文件已导出。", - "query_editor.message.export_sql_file_failed": "导出 SQL 文件失败:{{error}}", - "query_editor.message.save_first_before_rename": "请先保存查询后再重命名。", - "query_editor.message.renamed": "查询已重命名。", - "query_editor.empty_state.title": "等待执行 SQL", - "query_editor.empty_state.description": "运行查询后,结果会在下方以新版数据网格展示。", - "query_editor.result.tab_title": "结果 {{index}}({{count}})", - "query_editor.result.tab_title_success": "结果 {{index}} ✓", - "query_editor.result.close": "关闭结果", - "query_editor.result.execution_success": "执行成功", - "query_editor.result.affected_rows": "影响行数:{{count}}", - "query_editor.result.execution_failed": "执行失败", - "query_editor.result.ai_diagnose": "一键 AI 诊断", - "query_editor.results_panel.tooltip.hide": "隐藏结果区", - "query_editor.results_panel.tooltip.hide_with_shortcut": "隐藏结果区({{shortcut}})", - "query_editor.results_panel.menu.close_other": "关闭其他页", - "query_editor.results_panel.menu.close_left": "关闭左侧", - "query_editor.results_panel.menu.close_right": "关闭右侧", - "query_editor.results_panel.menu.close_all": "关闭所有", - "query_editor.results_panel.action.hide": "隐藏", - "query_editor.results_panel.aria.hide": "隐藏结果区", - "query_editor.results_panel.tab.message": "消息 {{index}}", - "query_editor.results_panel.tab.result": "结果 {{index}}", - "query_editor.results_panel.message.title": "执行消息", - "query_editor.results_panel.panel.title": "结果区", - "query_editor.save_modal.title": "保存查询", - "query_editor.save_modal.rename_title": "重命名查询", - "query_editor.save_modal.rename_ok": "重命名", - "query_editor.save_modal.name_label": "查询名称", - "query_editor.save_modal.name_required": "请输入查询名称。", - "query_editor.save_modal.name_placeholder": "例如:查询所有用户", - "query_editor.save_modal.unnamed": "未命名查询", - "query_editor.ai_prompt.default_source": "数据库", - "query_editor.ai_prompt.default_database": "默认", - "query_editor.ai_prompt.context": "上下文环境:{{type}} {{name}},当前库选定为 {{database}}。\n", - "query_editor.ai_prompt.generate": "请根据当前数据库表结构生成查询语句。", - "query_editor.ai_prompt.explain": "请解释以下 SQL 语句的执行逻辑:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.optimize": "请分析以下 SQL 语句的性能并给出优化建议:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.schema": "请针对当前数据库的表结构进行系统分析,并给出性能和设计上的优化建议。", - "query_editor.ai_prompt.diagnose": "我在执行以下 SQL 时遇到了错误:\n```sql\n{{sql}}\n```\n\n数据库报错信息如下:\n```text\n{{error}}\n```\n\n请帮我分析错误原因,并给出修改建议。", - "query_editor.slash_command.query.label": "自然语言查询", - "query_editor.slash_command.query.description": "描述你想查什么", - "query_editor.slash_command.query.prompt": "帮我写一条 SQL 查询:", - "query_editor.slash_command.sql.label": "生成 SQL", - "query_editor.slash_command.sql.description": "描述需求自动生成语句", - "query_editor.slash_command.sql.prompt": "请根据以下需求生成 SQL:", - "query_editor.slash_command.explain.label": "解释 SQL", - "query_editor.slash_command.explain.description": "解释选中 SQL 的逻辑", - "query_editor.slash_command.explain.prompt": "请解释以下 SQL 语句的执行逻辑:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.optimize.label": "优化分析", - "query_editor.slash_command.optimize.description": "分析 SQL 性能瓶颈", - "query_editor.slash_command.optimize.prompt": "请分析以下 SQL 语句的性能并给出优化建议:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.schema.label": "表设计评审", - "query_editor.slash_command.schema.description": "评审表结构设计质量", - "query_editor.slash_command.schema.prompt": "请全面评审当前关联表的设计,包括字段类型、范式、索引策略等方面的改进建议。", - "query_editor.slash_command.index.label": "索引建议", - "query_editor.slash_command.index.description": "推荐最优索引方案", - "query_editor.slash_command.index.prompt": "请基于当前表结构和常见查询场景,推荐最优的索引方案并给出可用 SQL。", - "query_editor.slash_command.diff.label": "表对比", - "query_editor.slash_command.diff.description": "对比两表差异生成变更", - "query_editor.slash_command.diff.prompt": "请对比以下两张表的结构差异,并生成从旧版本迁移到新版本的 ALTER 语句。", - "query_editor.slash_command.mock.label": "造测试数据", - "query_editor.slash_command.mock.description": "生成 INSERT 测试数据", - "query_editor.slash_command.mock.prompt": "请为当前关联的表生成 10 条符合业务语义的 INSERT 测试数据。", - "query_editor.completion.detail.aggregate": "聚合函数", - "query_editor.completion.detail.string": "字符串函数", - "query_editor.completion.detail.math": "数学函数", - "query_editor.completion.detail.date_time": "日期时间函数", - "query_editor.completion.detail.conditional": "条件函数", - "query_editor.completion.detail.conversion": "类型转换函数", - "query_editor.completion.detail.json": "JSON 函数", - "query_editor.completion.detail.utility": "工具函数", - "query_editor.completion.detail.info": "信息函数", - "query_editor.completion.detail.window": "窗口函数", - "query_editor.completion.detail.sql_function": "SQL 函数", - "query_editor.completion.detail.aggregate_count": "聚合 - 计数", - "query_editor.completion.detail.string_concat": "字符串 - 拼接", - "query_editor.completion.detail.math_abs": "数学 - 绝对值", - "query_editor.completion.detail.date_now": "日期 - 当前日期时间", - "query_editor.completion.detail.conditional_if": "条件 - 如果", - "query_editor.completion.detail.conversion_cast": "转换 - 类型转换", - "query_editor.completion.detail.json_extract": "JSON - 提取值", - "query_editor.completion.detail.crypto_md5": "哈希 - MD5", - "query_editor.completion.detail.info_database": "信息 - 当前数据库", - "query_editor.completion.detail.window_row_number": "窗口 - 行号", - "query_editor.completion.detail.modifier_distinct": "修饰 - 去重", - "query_editor.completion.action.absolute_value": "绝对值", - "query_editor.completion.action.approximate_distinct": "近似去重", - "query_editor.completion.action.approximate_distinct_count": "近似去重计数", - "query_editor.completion.action.approximate_percentile": "近似百分位", - "query_editor.completion.action.approximate_quantile": "近似分位数", - "query_editor.completion.action.array_aggregation": "数组聚合", - "query_editor.completion.action.array_length": "数组长度", - "query_editor.completion.action.average": "平均值", - "query_editor.completion.action.bitmap_aggregation": "Bitmap 聚合", - "query_editor.completion.action.bitmap_construction": "构造 Bitmap", - "query_editor.completion.action.bitmap_count": "Bitmap 计数", - "query_editor.completion.action.boolean_and_aggregation": "布尔与聚合", - "query_editor.completion.action.boolean_or_aggregation": "布尔或聚合", - "query_editor.completion.action.character_length": "字符长度", - "query_editor.completion.action.concat_with_separator": "带分隔符拼接", - "query_editor.completion.action.concatenation": "拼接", - "query_editor.completion.action.condition_mapping": "条件映射", - "query_editor.completion.action.conditional_check": "条件判断", - "query_editor.completion.action.count": "计数", - "query_editor.completion.action.current_database": "当前数据库", - "query_editor.completion.action.current_date": "当前日期", - "query_editor.completion.action.current_date_time": "当前日期时间", - "query_editor.completion.action.current_time": "当前时间", - "query_editor.completion.action.current_timestamp": "当前时间戳", - "query_editor.completion.action.current_user": "当前用户", - "query_editor.completion.action.database_current_time": "数据库当前时间", - "query_editor.completion.action.date_addition": "日期加法", - "query_editor.completion.action.date_conversion": "转日期", - "query_editor.completion.action.date_difference": "日期差", - "query_editor.completion.action.date_field_extraction": "日期字段提取", - "query_editor.completion.action.date_formatting": "日期格式化", - "query_editor.completion.action.date_subtraction": "日期减法", - "query_editor.completion.action.date_truncation": "日期截断", - "query_editor.completion.action.date_value": "日期", - "query_editor.completion.action.datetime_conversion": "转日期时间", - "query_editor.completion.action.datetime_value": "日期时间", - "query_editor.completion.action.decimal_truncation": "截断小数", - "query_editor.completion.action.dense_rank": "连续排名", - "query_editor.completion.action.distinct_array_aggregation": "去重数组聚合", - "query_editor.completion.action.e_power": "e 的次方", - "query_editor.completion.action.elapsed_time": "经过时间", - "query_editor.completion.action.epoch_seconds": "时间戳秒数", - "query_editor.completion.action.exact_distinct": "精确去重", - "query_editor.completion.action.first_non_null": "返回第一个非 NULL", - "query_editor.completion.action.first_value": "第一个值", - "query_editor.completion.action.format_as_text": "格式化为文本", - "query_editor.completion.action.group_concatenation": "分组拼接", - "query_editor.completion.action.guid_generation": "生成 GUID", - "query_editor.completion.action.hexadecimal": "十六进制", - "query_editor.completion.action.high_precision_current_time": "高精度当前时间", - "query_editor.completion.action.hll_aggregation": "HLL 聚合", - "query_editor.completion.action.hll_hash": "HLL 哈希", - "query_editor.completion.action.instant_rate_of_change": "瞬时变化率", - "query_editor.completion.action.int64_conversion": "转 Int64", - "query_editor.completion.action.interpolation": "插值", - "query_editor.completion.action.json_string_extraction": "JSON 字符串提取", - "query_editor.completion.action.json_unquote": "JSON 去引号", - "query_editor.completion.action.json_value_extraction": "JSON 提取", - "query_editor.completion.action.json_value_set": "JSON 设置", - "query_editor.completion.action.jsonb_path_extraction": "JSONB 路径提取", - "query_editor.completion.action.julian_day": "儒略日", - "query_editor.completion.action.last_insert_id": "最后插入 ID", - "query_editor.completion.action.last_row": "最后一行", - "query_editor.completion.action.last_value": "最后一个值", - "query_editor.completion.action.least_squares": "最小二乘", - "query_editor.completion.action.left_padding": "左填充", - "query_editor.completion.action.left_space_trimming": "去左空格", - "query_editor.completion.action.left_substring": "从左截取", - "query_editor.completion.action.length": "长度", - "query_editor.completion.action.list_aggregation": "列表聚合", - "query_editor.completion.action.list_unnest": "展开列表", - "query_editor.completion.action.log_base_10": "以 10 为底对数", - "query_editor.completion.action.log_base_2": "以 2 为底对数", - "query_editor.completion.action.logarithm": "对数", - "query_editor.completion.action.lowercase": "转小写", - "query_editor.completion.action.maximum": "最大值", - "query_editor.completion.action.md5_hash": "MD5 哈希", - "query_editor.completion.action.minimum": "最小值", - "query_editor.completion.action.modulo": "取模", - "query_editor.completion.action.month_addition": "增加月份", - "query_editor.completion.action.month_difference": "月份差", - "query_editor.completion.action.month_end_date": "月末日期", - "query_editor.completion.action.next_row": "后一行", - "query_editor.completion.action.null_branch": "NULL 分支", - "query_editor.completion.action.null_if_equal": "相等返回 NULL", - "query_editor.completion.action.null_replacement": "NULL 替换", - "query_editor.completion.action.number_conversion": "转数字", - "query_editor.completion.action.number_formatting": "数字格式化", - "query_editor.completion.action.position_lookup": "查找位置", - "query_editor.completion.action.power_operation": "幂运算", - "query_editor.completion.action.previous_row": "前一行", - "query_editor.completion.action.quantile": "分位数", - "query_editor.completion.action.random_number": "随机数", - "query_editor.completion.action.rank": "排名", - "query_editor.completion.action.rate_of_change": "变化率", - "query_editor.completion.action.regex_match": "正则匹配", - "query_editor.completion.action.regex_replace": "正则替换", - "query_editor.completion.action.replacement": "替换", - "query_editor.completion.action.right_padding": "右填充", - "query_editor.completion.action.right_space_trimming": "去右空格", - "query_editor.completion.action.right_substring": "从右截取", - "query_editor.completion.action.round_down": "向下取整", - "query_editor.completion.action.round_up": "向上取整", - "query_editor.completion.action.rounding": "四舍五入", - "query_editor.completion.action.row_number": "行号", - "query_editor.completion.action.set_lookup": "集合查找", - "query_editor.completion.action.sha1_hash": "SHA1 哈希", - "query_editor.completion.action.sha2_hash": "SHA2 哈希", - "query_editor.completion.action.space_trimming": "去空格", - "query_editor.completion.action.spread": "最大最小差", - "query_editor.completion.action.sql_literal": "SQL 字面量", - "query_editor.completion.action.square_root": "平方根", - "query_editor.completion.action.string_aggregation": "字符串聚合", - "query_editor.completion.action.string_conversion": "转字符串", - "query_editor.completion.action.string_repetition": "重复字符串", - "query_editor.completion.action.string_reversal": "字符串反转", - "query_editor.completion.action.string_to_date": "字符串转日期", - "query_editor.completion.action.string_to_timestamp": "字符串转时间戳", - "query_editor.completion.action.struct_construction": "构造结构体", - "query_editor.completion.action.substring_extraction": "截取子串", - "query_editor.completion.action.sum": "求和", - "query_editor.completion.action.time_difference": "时间差", - "query_editor.completion.action.time_value": "时间", - "query_editor.completion.action.time_weighted_average": "时间加权平均", - "query_editor.completion.action.timestamp_difference": "时间戳差", - "query_editor.completion.action.truncate_date_or_number": "截断日期或数字", - "query_editor.completion.action.try_conversion": "尝试转换", - "query_editor.completion.action.type_conversion": "类型转换", - "query_editor.completion.action.unix_time_to_datetime": "Unix 时间戳转时间", - "query_editor.completion.action.unix_timestamp": "Unix 时间戳", - "query_editor.completion.action.uppercase": "转大写", - "query_editor.completion.action.uuid_generation": "生成 UUID", - "query_editor.completion.action.value_formatting": "格式化", - "query_editor.completion.action.version": "版本", - "data_grid.action.apply": "应用", - "data_grid.ai_prompt.analyze_page": "请分析以下查询结果数据(前 {{count}} 行样本):\n```json\n{{json}}\n```\n\n请分析数据特征、发现规律,或提供业务洞察。", - "data_grid.batch_fill.set_null": "设置为 NULL", - "data_grid.batch_fill.title": "批量填充({{count}} 个单元格)", - "data_grid.batch_fill.value_placeholder": "输入要填充的值", - "data_grid.cell_editor.now": "此刻", - "data_grid.cell_editor.title": "编辑单元格", - "data_grid.cell_editor.title_with_column": "编辑单元格:{{column}}", - "data_grid.column.comment_tooltip": "注释:{{comment}}", - "data_grid.column.drag_tooltip": "拖动调整列顺序", - "data_grid.column.foreign_key_jump_title": "跳转到外键表:{{tableName}}", - "data_grid.column.foreign_key_tooltip": "外键:{{target}}", - "data_grid.column.resize_tooltip": "拖动调整列宽,双击自动适配", - "data_grid.column.type_tooltip": "类型:{{type}}", - "data_grid.column_quick_find.placeholder": "跳到字段列...", - "data_grid.column_quick_find.tooltip": "输入字段名,回车或点定位按钮即可跳到对应列", - "data_grid.ai_insight.prompt": "请帮我分析以下查询结果数据(取前 {{count}} 条示例):\n```json\n{{json}}\n```\n\n请分析数据特征、发现规律,或者给出一些业务上的洞察。", - "data_grid.datetime_picker.now": "此刻", - "data_grid.column_settings.column_visibility": "列显示", - "data_grid.column_settings.display_settings": "显示设置", - "data_grid.column_settings.field_info": "字段信息", - "data_grid.column_settings.hide_all": "全隐藏", - "data_grid.column_settings.remember_column_order": "记住自定义列顺序", - "data_grid.column_settings.remember_hidden_columns": "记住隐藏列设置", - "data_grid.column_settings.reset_hidden": "重置隐藏", - "data_grid.column_settings.reset_hidden_success": "已恢复全列显示", - "data_grid.column_settings.reset_order": "重置顺序", - "data_grid.column_settings.reset_order_success": "已恢复默认列排序", - "data_grid.column_settings.search_columns_placeholder": "搜索列名...", - "data_grid.column_settings.show_all": "全显示", - "data_grid.column_settings.show_comments": "在表头显示列注释", - "data_grid.column_settings.show_types": "在表头显示列类型", - "data_grid.context_menu.auto_fit_column": "按内容自适应列宽", - "data_grid.context_menu.clear_column_sort": "取消此字段排序", - "data_grid.context_menu.column_display_section": "字段显示", - "data_grid.context_menu.column_no_comment": "暂无备注", - "data_grid.context_menu.column_unknown_type": "未知类型", - "data_grid.context_menu.column_unnamed_field": "未命名字段", - "data_grid.context_menu.copy_as_csv": "复制为 CSV", - "data_grid.context_menu.copy_as_delete": "复制为 DELETE", - "data_grid.context_menu.copy_as_insert": "复制为 INSERT", - "data_grid.context_menu.copy_as_json": "复制为 JSON", - "data_grid.context_menu.copy_as_markdown": "复制为 Markdown", - "data_grid.context_menu.copy_as_update": "复制为 UPDATE", - "data_grid.context_menu.copy_column_data": "复制列数据", - "data_grid.context_menu.copy_field_name": "复制字段名称", - "data_grid.context_menu.copy_row_data": "复制行数据", - "data_grid.context_menu.current_marker": "当前", - "data_grid.context_menu.current_row": "当前行", - "data_grid.context_menu.current_cell": "当前单元格", - "data_grid.context_menu.edit_section": "编辑", - "data_grid.context_menu.edit_row": "编辑此行", - "data_grid.context_menu.copy_row_as_new": "复制本行为新增行", - "data_grid.context_menu.undo_cell_change": "撤销此单元格修改", - "data_grid.context_menu.export_as_csv": "导出为 CSV", - "data_grid.context_menu.export_as_excel": "导出为 Excel", - "data_grid.context_menu.export_as_html": "导出为 HTML", - "data_grid.context_menu.export_as_json": "导出为 JSON", - "data_grid.context_menu.export_selected": "导出选中数据", - "data_grid.context_menu.fill_to_selected_rows": "填充到选中行({{count}})", - "data_grid.context_menu.hide_column": "隐藏此字段", - "data_grid.context_menu.hide_column_comment": "隐藏字段备注", - "data_grid.context_menu.hide_column_type": "隐藏字段类型", - "data_grid.context_menu.paste_copied_columns": "粘贴已复制列(同名列)", - "data_grid.context_menu.paste_row_as_new": "粘贴为新增行", - "data_grid.context_menu.paste_row_as_new_count": "粘贴为新增行({{count}})", - "data_grid.context_menu.show_column_comment": "显示字段备注", - "data_grid.context_menu.show_column_type": "显示字段类型", - "data_grid.context_menu.sort_ascending": "升序排序", - "data_grid.context_menu.sort_descending": "降序排序", - "data_grid.context_menu.sort_section": "排序", - "data_grid.copy_sql.error.missing_safe_where": "当前结果集缺少可安全定位行数据的主键/唯一键,且未覆盖表的全部字段,无法生成 WHERE 条件。", - "data_grid.copy_sql.error.missing_table_name": "当前结果集未关联明确表名,无法生成 {{mode}} SQL。", - "data_grid.copy_sql.error.no_copyable_fields": "当前结果集没有可复制的字段,无法生成 SQL。", - "data_grid.data_panel.click_cell_description": "点击表格中的单元格可预览完整数据", - "data_grid.data_panel.click_cell_title": "点击单元格查看数据", - "data_grid.data_panel.title": "数据预览", - "data_grid.ddl.copy": "复制 DDL", - "data_grid.ddl.layout_bottom": "底部", - "data_grid.ddl.layout_side": "侧栏", - "data_grid.ddl.loading": "正在加载 DDL...", - "data_grid.ddl.reload": "重新加载", - "data_grid.ddl.sidebar_aria": "表 DDL 侧栏", - "data_grid.ddl.view": "查看 DDL", - "data_grid.error_boundary.description": "数据表格渲染时发生错误,数据格式可能无效。", - "data_grid.error_boundary.retry": "重试", - "data_grid.error_boundary.title": "渲染错误", - "data_grid.export.all_data": "导出全部数据", - "data_grid.export.all_rows": "导出全部行({{count}} 行)", - "data_grid.export.all_rows_requery": "导出全部(重新查询)", - "data_grid.export.current_page": "导出当前页({{count}} 行)", - "data_grid.export.current_page_rows": "导出当前页({{count}} 行)", - "data_grid.export.group_filtered_results": "筛选结果", - "data_grid.export.group_full_table": "全表", - "data_grid.export.no_selection_prompt": "未选择行,请选择导出范围:", - "data_grid.export.options_title": "导出选项", - "data_grid.export.query_result_title": "导出查询结果", - "data_grid.export.scope_prompt": "请选择导出范围:", - "data_grid.export.selected_rows": "导出选中行({{count}} 行)", - "data_grid.table_fallback.query_result": "查询结果", - "data_grid.metadata_view.fields_badge": "字段", - "data_grid.metadata_view.er_table_badge": "表", - "data_grid.metadata_view.er_field_badge": "字段", - "data_grid.metadata_view.er_current_badge": "当前表", - "data_grid.metadata_view.er_reference_badge": "引用", - "data_grid.metadata_view.er_referenced_by_badge": "被引用", - "data_grid.metadata_view.er_related_table_count": "{{count}} 张关联表", - "data_grid.metadata_view.er_relation_count": "{{count}} 条关系", - "data_grid.metadata_view.er_hidden_columns": "还有 {{count}} 个字段", - "data_grid.metadata_view.er_expand_hidden_columns": "展开剩余 {{count}} 个字段", - "data_grid.metadata_view.er_expand_fields": "展开全部字段", - "data_grid.metadata_view.er_collapse_fields": "收起字段摘要", - "data_grid.metadata_view.er_relation_depth": "{{count}} 层关系", - "data_grid.metadata_view.er_expand_relations": "展开下一层关系", - "data_grid.metadata_view.er_reset_relations": "重置为一层", - "data_grid.metadata_view.er_empty": "当前表未发现外键关系", - "data_grid.metadata_view.er_partial_warning": "部分关系未能完整加载,图中结果可能不完整", - "data_grid.metadata_view.er_open_table": "打开表", - "data_grid.metadata_view.field_count": "{{count}} 个字段", - "data_grid.metadata_view.column_name": "名称", - "data_grid.metadata_view.column_type": "类型", - "data_grid.metadata_view.default_value": "默认值", - "data_grid.metadata_view.comment": "注释", - "data_grid.filter.add_condition": "添加条件", - "data_grid.filter.add_sort": "添加排序", - "data_grid.filter.apply": "应用", - "data_grid.filter.apply_where": "应用 WHERE", - "data_grid.filter.clear": "清空", - "data_grid.filter.custom_where_placeholder": "输入自定义 WHERE 表达式(不含 WHERE),例如:status IN ('A','B')", - "data_grid.filter.disable_all": "全部禁用", - "data_grid.filter.enable_all": "全部启用", - "data_grid.filter.enabled": "启用", - "data_grid.filter.end_value_placeholder": "结束值", - "data_grid.filter.first_condition": "首先", - "data_grid.filter.invalid_quick_where": "WHERE 条件不能包含分号或 SQL 注释", - "data_grid.filter.list_values_placeholder": "多个值用逗号或换行分隔", - "data_grid.filter.logic.and": "且 (AND)", - "data_grid.filter.logic.or": "或 (OR)", - "data_grid.filter.mongodb_query_placeholder": "输入 MongoDB JSON 查询对象,例如 {\"status\":\"A\"}", - "data_grid.filter.no_value_placeholder": "无需输入值", - "data_grid.filter.op.between": "介于", - "data_grid.filter.op.contains": "包含", - "data_grid.filter.op.custom": "[自定义]", - "data_grid.filter.op.ends_with": "结尾为", - "data_grid.filter.op.in_list": "在列表中", - "data_grid.filter.op.is_empty": "为空字符串", - "data_grid.filter.op.is_not_empty": "不为空字符串", - "data_grid.filter.op.is_not_null": "不是 NULL", - "data_grid.filter.op.is_null": "为 NULL", - "data_grid.filter.op.not_between": "不介于", - "data_grid.filter.op.not_contains": "不包含", - "data_grid.filter.op.not_ends_with": "结尾不是", - "data_grid.filter.op.not_in_list": "不在列表中", - "data_grid.filter.op.not_starts_with": "开头不是", - "data_grid.filter.op.starts_with": "开头为", - "data_grid.filter.quick_where_placeholder": "输入 WHERE 后面的条件,例如 status = 1 AND name LIKE 'A%'", - "data_grid.filter.search_field_placeholder": "搜索字段名", - "data_grid.filter.select_sort_field_placeholder": "选择排序字段", - "data_grid.filter.sort_asc": "升序", - "data_grid.filter.sort_desc": "降序", - "data_grid.filter.sort_label": "排序", - "data_grid.filter.start_value_placeholder": "起始值", - "data_grid.filter.suggestion.column": "字段", - "data_grid.filter.suggestion.keyword": "关键字", - "data_grid.filter.suggestion.operator": "操作符", - "data_grid.filter.then_label": "然后", - "data_grid.json_editor.apply_changes": "应用修改", - "data_grid.json_editor.description": "按当前结果顺序编辑。JSON 模式不支持新增或删除记录,需要此操作请使用表格模式。", - "data_grid.json_editor.format": "格式化 JSON", - "data_grid.json_editor.invalid_format": "JSON 格式无效:{{error}}", - "data_grid.json_editor.title": "编辑 JSON 结果集", - "data_grid.message.cell_edit_mode_entered": "已启用单元格编辑模式,可拖动选择多个单元格。", - "data_grid.message.cell_edit_mode_exited": "已退出单元格编辑模式。", - "data_grid.message.change_set_build_failed": "无法构建变更集", - "data_grid.message.change_set_build_failed_detail": "无法构建变更集:{{detail}}", - "data_grid.message.column_order_reset": "已恢复默认列顺序", - "data_grid.message.column_quick_find_not_found": "未找到字段列:{{query}}", - "data_grid.message.column_quick_find_not_rendered": "字段列“{{column}}”当前未渲染,无法定位", - "data_grid.message.column_visibility_reset": "已恢复全部列", - "data_grid.message.auto_commit_failed": "自动提交失败:{{detail}}", - "data_grid.message.auto_commit_success": "自动提交成功", - "data_grid.message.commit_failed": "提交失败:{{detail}}", - "data_grid.message.undo_added_row_hint": "新增行请使用删除选中或整表回滚撤销", - "data_grid.message.undo_cell_original_missing": "未找到该单元格的原始数据,无法撤销", - "data_grid.message.undo_cell_success": "已撤销单元格修改", - "data_grid.message.copied_columns": "已复制 {{count}} 列,可粘贴到目标行。", - "data_grid.message.copied_rows": "已复制 {{count}} 行,可作为新行粘贴。", - "data_grid.message.copied_to_clipboard": "已复制到剪贴板", - "data_grid.message.copy_columns_first": "请先复制列值", - "data_grid.message.copy_columns_same_row_only": "复制列值时只能选择同一行的单元格", - "data_grid.message.copy_rows_first": "请先复制行", - "data_grid.message.copy_sql_not_supported": "此数据源不支持复制 SQL,请改用 JSON/CSV/Markdown 复制。", - "data_grid.message.current_record_not_editable": "当前记录不可编辑", - "data_grid.message.current_row_no_copyable_content": "当前行没有可复制内容", - "data_grid.message.ddl_copied": "DDL 已复制到剪贴板", - "data_grid.message.ddl_copy_failed": "复制 DDL 失败", - "data_grid.message.ddl_load_failed": "加载 DDL 失败", - "data_grid.message.ddl_missing_context": "当前表缺少连接或表名,无法查看 DDL", - "data_grid.message.drag_select_cells_to_copy": "请先拖动选择要复制的单元格", - "data_grid.message.export_failed": "导出失败:{{detail}}", - "data_grid.message.export_success": "导出完成", - "data_grid.message.export_with_uncommitted_changes": "存在未提交修改,将按可见表格数据导出。如需完整长字段数据,请先提交。", - "data_grid.message.exporting": "正在导出...", - "data_grid.message.exporting_all": "正在导出全部数据...", - "data_grid.message.exporting_rows": "正在导出 {{count}} 行...", - "data_grid.message.filled_cells": "已填充 {{count}} 个单元格", - "data_grid.message.filled_rows": "已填充 {{count}} 行", - "data_grid.message.current_field_not_editable": "当前字段不可编辑", - "data_grid.message.filtered_export_not_supported": "此数据源不支持导出筛选结果", - "data_grid.message.filtered_export_uses_committed_data": "存在未提交修改。筛选结果导出将使用已提交的数据库数据。", - "data_grid.message.import_done": "导入完成", - "data_grid.message.json_applied": "JSON 修改已应用到当前结果集,可继续提交事务。", - "data_grid.message.json_invalid": "JSON 无效:{{detail}}", - "data_grid.message.json_parse_failed": "JSON 解析失败:{{detail}}", - "data_grid.message.json_record_count_mismatch": "记录数量不一致:当前 {{current}} 行,JSON 有 {{json}} 行。此模式下不要新增或删除记录。", - "data_grid.message.json_record_missing_row_key": "第 {{index}} 条记录缺少行标识,无法应用", - "data_grid.message.json_record_not_object": "第 {{index}} 条记录不是对象,无法应用", - "data_grid.message.json_view_must_be_array": "JSON 视图必须是数组,且每一项对应一条记录", - "data_grid.message.keep_one_visible_column": "至少保留一个可见字段", - "data_grid.message.locate_record_to_edit": "请先定位要编辑的记录", - "data_grid.message.locator_column_value_empty": "定位列 {{column}} 的值为空,无法安全提交修改。", - "data_grid.message.no_changes_to_commit": "没有需要提交的修改", - "data_grid.message.no_copyable_cells": "未识别到可复制的单元格", - "data_grid.message.no_copyable_columns": "未识别到可复制的列", - "data_grid.message.no_copyable_rows": "未识别到可复制的行", - "data_grid.message.no_data_changes": "数据没有变化", - "data_grid.message.no_ddl_to_copy": "没有可复制的 DDL", - "data_grid.message.no_field_name": "未识别到字段名称", - "data_grid.message.no_safe_locator": "当前结果没有可用的安全行定位方式,无法提交修改。", - "data_grid.message.no_filter_applied": "当前未应用筛选条件", - "data_grid.message.no_rows_selected": "当前未选中任何行", - "data_grid.message.no_other_rows_to_fill": "没有其他选中行可填充", - "data_grid.message.no_pasteable_editable_fields": "没有可粘贴的可编辑字段", - "data_grid.message.no_pasteable_rows": "没有可粘贴的行", - "data_grid.message.pasted_columns_to_rows": "已粘贴到 {{rows}} 行,共 {{cells}} 个单元格", - "data_grid.message.pasted_rows_as_new": "已将 {{count}} 行作为新行粘贴,提交前请先检查。", - "data_grid.message.preview_sql_failed": "生成预览 SQL 失败", - "data_grid.message.preview_sql_failed_detail": "生成预览 SQL 失败:{{detail}}", - "data_grid.preview_sql.copied": "已复制", - "data_grid.preview_sql.no_changes": "无变更", - "data_grid.preview_sql.summary": "共 {{deletes}} 条 DELETE,{{updates}} 条 UPDATE,{{inserts}} 条 INSERT", - "data_grid.preview_sql.title": "变更预览", - "data_grid.message.result_set_no_copyable_content": "当前结果集没有可复制内容", - "data_grid.message.saved": "已保存", - "data_grid.message.select_cells_to_fill": "请先选择要填充的单元格", - "data_grid.message.select_file_failed": "选择文件失败:{{detail}}", - "data_grid.message.select_rows_to_copy": "请先选择要复制的行", - "data_grid.message.select_rows_to_fill": "请先选择要填充的行", - "data_grid.message.select_same_row_cells_to_copy": "请先选择同一行中的单元格进行复制", - "data_grid.message.select_target_rows": "请先选择目标行", - "data_grid.message.selected_cells_no_update": "选中的单元格无需更新", - "data_grid.message.selection_no_copyable_content": "当前选区没有可复制内容", - "data_grid.message.target_row_not_found": "未找到目标行,请刷新后重试。", - "data_grid.message.target_rows_cannot_only_source": "目标行不能只有源行,请选择其他行。", - "data_grid.message.target_rows_no_update": "目标行无需更新", - "data_grid.message.transaction_committed": "事务已提交", - "data_viewer.message.result_not_ready": "当前结果集尚未就绪,请先执行一次加载", - "data_viewer.message.query_failed": "查询失败", - "data_viewer.message.query_timeout": "查询超过连接超时时间,已中断。请调大连接超时时间,或减少查询范围后重试。", - "data_viewer.message.duckdb_query_timeout": "DuckDB 查询超过连接超时时间,已中断。请调大连接超时时间,或减少排序/筛选范围后重试。", - "data_viewer.message.connection_not_found": "未找到连接", - "data_viewer.message.fetch_data_failed_detail": "获取数据失败:{{detail}}", - "data_viewer.message.total_count_failed": "统计总数失败", - "data_viewer.message.total_count_failed_detail": "统计总数失败:{{detail}}", - "data_viewer.message.total_count_parse_failed": "统计结果解析失败", - "data_viewer.message.mongo_filter_invalid_detail": "Mongo 筛选条件无效:{{detail}}", - "data_viewer.message.mongo_filter_parse_failed": "解析失败", - "data_viewer.message.sort_buffer_retry_succeeded": "已自动提升排序缓冲并重试成功。", - "data_viewer.read_only.reason.mongo_id_missing": "MongoDB 结果集中缺少 _id,无法安全提交修改。", - "data_viewer.read_only.reason.metadata_unavailable": "无法加载主键/唯一索引元数据,无法安全提交修改。", - "data_viewer.read_only.reason.index_metadata_unavailable": "无法加载唯一索引元数据,无法安全提交修改。", - "data_viewer.read_only.reason.no_safe_locator": "未检测到主键或可用唯一索引,无法安全提交修改。", - "data_viewer.read_only.reason.oracle_rowid_missing": "未检测到主键或可用唯一索引,且结果中缺少 Oracle ROWID,无法安全提交修改。", - "data_viewer.read_only.reason.primary_key_column_missing": "结果集中缺少主键列 {{columns}},无法安全提交修改。", - "data_viewer.read_only.warning.table": "表 {{target}} 保持只读:{{reason}}", - "data_viewer.read_only.warning.collection": "集合 {{target}} 保持只读:{{reason}}", - "data_viewer.sql_log.phase.main_query": "主查询", - "data_viewer.sql_log.phase.complex_type_fallback_retry": "复杂类型降级重试", - "data_viewer.sql_log.phase.sort_buffer_retry": "重试({{size}} sort_buffer)", - "definition_viewer.object.view": "视图", - "definition_viewer.object.materialized_view": "物化视图", - "definition_viewer.object.routine": "函数/存储过程", - "definition_viewer.object.event": "事件", - "definition_viewer.loading.view_definition": "加载视图定义...", - "definition_viewer.loading.routine_definition": "加载函数/存储过程定义...", - "definition_viewer.loading.event_definition": "加载事件定义...", - "definition_viewer.error.load_failed": "加载失败", - "definition_viewer.error.connection_not_found": "未找到数据库连接", - "definition_viewer.error.view_name_empty": "视图名称为空", - "definition_viewer.error.event_name_empty": "事件名称为空", - "definition_viewer.error.routine_name_empty": "函数/存储过程名称为空", - "definition_viewer.error.query_failed": "查询定义失败", - "definition_viewer.error.query_failed_detail": "查询定义失败:{{detail}}", - "definition_viewer.field.database": "数据库", - "definition_viewer.field.type": "类型", - "definition_viewer.editor.unsupported_view_definition": "暂不支持该数据库类型的视图定义查看", - "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite 不支持函数/存储过程定义管理", - "definition_viewer.editor.unsupported_routine_definition": "暂不支持该数据库类型的函数/存储过程定义查看", - "definition_viewer.editor.unsupported_event_definition": "暂不支持该数据库类型的事件定义查看", - "definition_viewer.editor.unsupported_object_definition": "暂不支持该对象定义查看", - "definition_viewer.editor.view_definition_not_found": "未找到视图定义", - "definition_viewer.editor.routine_definition_not_found": "未找到函数/存储过程定义", - "definition_viewer.editor.event_definition_not_found": "未找到事件定义", - "definition_viewer.editor.object_definition_not_found": "未找到{{object}}定义", - "definition_viewer.editor.metadata_fallback.header": "当前数据源未返回可执行定义文本,已返回元数据", - "definition_viewer.editor.metadata_fallback.name_label": "名称", - "definition_viewer.editor.metadata_fallback.type_label": "类型", - "definition_viewer.editor.event_fragment_fallback.header": "当前数据源未返回完整 CREATE EVENT 语句,已返回事件定义片段", - "definition_viewer.editor.sphinx.empty_result": "当前 Sphinx 实例{{version}}未返回{{object}}定义。", - "definition_viewer.editor.sphinx.compat_queries_hint": "已执行多套兼容查询,可能是版本能力限制或对象类型不支持。", - "definition_viewer.editor.sphinx.unsupported_query": "当前 Sphinx 实例{{version}}不支持{{object}}定义查询。", - "definition_viewer.editor.sphinx.failed_message_label": "返回失败信息", - "definition_viewer.editor.sphinx.failed_message_unknown": "返回失败信息:未知错误", - "definition_viewer.editor.sphinx.version_suffix": "(版本: {{version}})", - "trigger_viewer.loading.definition": "加载触发器定义...", - "trigger_viewer.error.load_failed": "加载失败", - "trigger_viewer.error.connection_not_found": "未找到数据库连接", - "trigger_viewer.error.trigger_name_empty": "触发器名称为空", - "trigger_viewer.error.query_failed": "查询触发器定义失败", - "trigger_viewer.error.query_failed_detail": "查询触发器定义失败:{{detail}}", - "trigger_viewer.field.trigger": "触发器", - "trigger_viewer.field.database": "数据库", - "trigger_viewer.editor.unsupported.duckdb": "DuckDB 不支持触发器", - "trigger_viewer.editor.unsupported.tdengine": "TDengine 不支持触发器", - "trigger_viewer.editor.unsupported.mongodb": "MongoDB 不支持触发器", - "trigger_viewer.editor.unsupported.generic": "暂不支持该数据库类型的触发器定义查看", - "trigger_viewer.editor.definition_not_found": "未找到触发器定义", - "trigger_viewer.editor.sphinx.version_suffix": "(版本: {{version}})", - "trigger_viewer.editor.sphinx.empty_result": "当前 Sphinx 实例{{version}}未返回触发器定义。", - "trigger_viewer.editor.sphinx.compat_queries_hint": "已执行多套兼容查询,可能是版本能力限制或对象类型不支持。", - "trigger_viewer.editor.sphinx.unsupported_query": "当前 Sphinx 实例{{version}}不支持触发器定义查询。", - "trigger_viewer.editor.sphinx.failed_message_label": "返回失败信息", - "trigger_viewer.editor.sphinx.failed_message_unknown": "返回失败信息:未知错误", - "data_grid.modal.export_options.all_data": "导出全部数据", - "data_grid.modal.export_options.current_page": "导出当前页({{count}} 行)", - "data_grid.modal.export_options.filtered_results": "筛选结果", - "data_grid.modal.export_options.no_rows_selected": "未选择行,请选择导出范围:", - "data_grid.modal.export_options.title": "导出选项", - "data_grid.modal.export_options.whole_table": "整张表", - "data_grid.page_find.next": "下一个", - "data_grid.page_find.placeholder": "当前页查找...", - "data_grid.page_find.previous": "上一个", - "data_grid.page_find.summary": "{{occurrences}} 处匹配 / {{cells}} 个单元格", - "data_grid.page_find.tooltip": "仅在当前页已加载行中查找,不会更改 WHERE 条件。", - "data_grid.preview_panel.no_cell_description": "点击表格中的单元格以预览完整数据", - "data_grid.preview_panel.no_cell_title": "点击单元格查看数据", - "data_grid.record_view.edit_current": "编辑当前记录", - "data_grid.record_view.edit_json": "编辑 JSON", - "data_grid.record_view.empty": "当前结果集无数据", - "data_grid.record_view.json_record_count": "当前结果集 {{count}} 条记录", - "data_grid.record_view.next": "下一条", - "data_grid.record_view.previous": "上一条", - "data_grid.record_view.record_position": "记录 {{current}} / {{total}}", - "data_grid.pagination.jump_action": "跳", - "data_grid.pagination.jump_aria": "跳转页码", - "data_grid.pagination.jump_label": "跳页", - "data_grid.pagination.page.current": "第 {{current}} 页", - "data_grid.pagination.page.known": "第 {{current}} / {{totalPages}} 页", - "data_grid.pagination.page_size_aria": "每页行数", - "data_grid.pagination.page_size_option": "{{count}} 行 / 页", - "data_grid.pagination.result_set": "结果集", - "data_grid.pagination.summary.approximate": "当前 {{current}} 条 / 约 {{total}} 条", - "data_grid.pagination.summary.cancelled": "当前 {{current}} 条 / 计数已停止", - "data_grid.pagination.summary.counting": "当前 {{current}} 条 / 正在统计总数...", - "data_grid.pagination.summary.counting_exact": "当前 {{current}} 条 / 正在统计精确总数...", - "data_grid.pagination.summary.empty": "当前 0 条 / 共 0 条", - "data_grid.pagination.summary.known": "当前 {{current}} 条 / 共 {{total}} 条", - "data_grid.pagination.summary.not_counted": "当前 {{current}} 条 / 未统计总数", - "data_grid.secondary.column_display": "字段显示", - "data_grid.secondary.data_preview": "数据预览", - "data_grid.secondary.er_diagram": "ER 图", - "data_grid.secondary.jump_column": "跳列", - "data_grid.secondary.live": "实时", - "data_grid.secondary.object_design": "对象设计", - "data_grid.embedded_designer.title": "设计表({{tableName}})", - "data_grid.secondary.pending_changes": "未提交 {{count}}", - "data_grid.secondary.row_count": "{{count}} 行", - "data_grid.secondary.view_ddl": "查看 DDL", - "data_grid.row_editor.popup_edit": "弹窗编辑", - "data_grid.row_editor.title": "编辑行", - "data_grid.toolbar.add_row": "新增行", - "data_grid.toolbar.ai_insight": "AI 数据洞察", - "data_grid.toolbar.ai_insight_short": "AI 洞察", - "data_grid.toolbar.ai_insight_tooltip": "让 AI 分析当前查询页数据", - "data_grid.toolbar.batch_fill": "批量填充({{count}})", - "data_grid.toolbar.cancel_count": "取消计数", - "data_grid.toolbar.cancel_count_tooltip": "取消本次精确总数统计,不影响当前浏览。", - "data_grid.toolbar.cell_editor": "单元格编辑", - "data_grid.toolbar.commit": "提交事务({{count}})", - "data_grid.toolbar.commit_label": "提交事务", - "data_grid.toolbar.commit_delay.seconds": "{{seconds}} 秒", - "data_grid.toolbar.commit_mode.auto": "自动提交", - "data_grid.toolbar.commit_mode.auto_countdown": "{{seconds}}s 后提交", - "data_grid.toolbar.commit_mode.manual": "手动提交", - "data_grid.toolbar.commit_mode.tooltip": "控制表数据编辑后的提交方式。手动提交更安全;自动提交会在最后一次修改后按所选时间提交。", - "data_grid.toolbar.copied_columns_count": "已复制 {{count}} 列", - "data_grid.toolbar.copy": "复制", - "data_grid.toolbar.copy_row": "复制行", - "data_grid.toolbar.copy_selection": "复制选区({{count}})", - "data_grid.toolbar.copy_selection_columns": "复制选区列值({{count}})", - "data_grid.toolbar.count_total": "统计总数", - "data_grid.toolbar.count_total_tooltip": "按当前筛选条件统计精确总数", - "data_grid.toolbar.delete_selected": "删除选中", - "data_grid.toolbar.export": "导出", - "data_grid.toolbar.filter": "筛选", - "data_grid.toolbar.import": "导入", - "data_grid.toolbar.paste_row": "粘贴行", - "data_grid.toolbar.paste_row_count": "粘贴行({{count}})", - "data_grid.toolbar.paste_to_selected_rows": "粘贴到选中行({{count}})", - "data_grid.toolbar.preview_sql": "预览 SQL", - "data_grid.toolbar.preview_sql_generate": "生成预览 SQL", - "data_grid.toolbar.refresh": "刷新", - "data_grid.toolbar.rollback": "回滚", - "data_grid.toolbar.selected_count": "已选 {{count}}", - "data_grid.toolbar.undo_delete": "撤销删除", - "data_grid.view.edit_current_record": "编辑当前记录", - "data_grid.view.edit_json": "编辑 JSON", - "data_grid.view.empty_result": "当前结果集没有数据", - "data_grid.view.next_record": "下一条记录", - "data_grid.view.previous_record": "上一条记录", - "data_grid.view.record_count": "当前结果集:{{count}} 条记录", - "data_grid.view.record_position": "记录 {{current}} / {{total}}", - "data_grid.view.result_view": "结果视图", - "data_grid.view.table": "表格", - "data_grid.view.text": "文本", - "table_designer.action.add": "新增", - "table_designer.action.add_after_selected": "在选中字段后添加", - "table_designer.action.add_column": "添加字段", - "table_designer.action.apply": "应用", - "table_designer.action.cancel": "取消", - "table_designer.action.copy_selected_to_new_table": "复制选中到新表", - "table_designer.action.create": "创建", - "table_designer.action.create_table": "创建新表", - "table_designer.action.delete": "删除", - "table_designer.action.edit": "修改", - "table_designer.action.execute": "执行", - "table_designer.action.refresh": "刷新", - "table_designer.action.refresh_anyway": "仍然刷新", - "table_designer.action.save": "保存", - "table_designer.action.table_comment": "表备注", - "table_designer.action.view_statement": "查看语句", - "table_designer.column.actions": "操作", - "table_designer.column.auto_increment": "自增", - "table_designer.column.comment": "注释", - "table_designer.column.default": "默认", - "table_designer.column.name": "名", - "table_designer.column.not_null": "不是 NULL", - "table_designer.column.primary_key": "主键", - "table_designer.column.type": "类型", - "table_designer.empty.triggers": "该表暂无触发器", - "table_designer.fallback.empty": "(空)", - "table_designer.fallback.unknown_error": "未知错误", - "table_designer.fallback.unnamed_foreign_key": "(未命名外键)", - "table_designer.fallback.unnamed_index": "(未命名索引)", - "table_designer.foreign_key.column.constraint_name": "约束名", - "table_designer.foreign_key.column.fields": "字段", - "table_designer.foreign_key.column.ref_fields": "参考字段", - "table_designer.foreign_key.column.ref_table": "参考表", - "table_designer.index.column.fields": "字段", - "table_designer.index.column.name": "索引名", - "table_designer.index.column.type": "索引类型", - "table_designer.index.column.uniqueness": "唯一性", - "table_designer.index.kind.fulltext": "全文索引", - "table_designer.index.kind.normal": "普通索引", - "table_designer.index.kind.normal_nonclustered": "普通索引(非聚合)", - "table_designer.index.kind.primary_clustered": "主键索引(聚合)", - "table_designer.index.kind.spatial": "空间索引", - "table_designer.index.kind.unique": "唯一索引", - "table_designer.index.uniqueness.normal": "普通", - "table_designer.index.uniqueness.unique": "唯一", - "table_designer.label.create_statement": "{{name}} 创建语句", - "table_designer.label.create_statement_plain": "创建语句", - "table_designer.message.add_at_least_one_column": "请至少添加一个字段", - "table_designer.message.columns_copied_to_new_table": "已将 {{count}} 个字段复制到新表 {{table}}", - "table_designer.message.connection_not_found": "未找到连接", - "table_designer.message.delete_failed": "删除失败:{{detail}}", - "table_designer.message.drop_old_trigger_failed": "删除旧触发器失败:{{detail}}", - "table_designer.message.execution_failed": "执行失败:{{detail}}", - "table_designer.message.execution_failed_plain": "执行失败", - "table_designer.message.execution_failed_prefix": "执行失败:", - "table_designer.message.foreign_key_column_count_mismatch": "本表字段数量与参考字段数量必须一致", - "table_designer.message.foreign_key_created": "外键新增成功", - "table_designer.message.foreign_key_delete_unsupported": "当前数据库暂不支持删除该外键", - "table_designer.message.foreign_key_deleted": "外键删除成功", - "table_designer.message.foreign_key_maintenance_unsupported": "当前数据库暂不支持在此维护外键", - "table_designer.message.foreign_key_name_exists": "外键约束名已存在:{{name}}", - "table_designer.message.foreign_key_name_required": "请输入外键约束名", - "table_designer.message.foreign_key_updated": "外键修改成功", - "table_designer.message.index_created": "索引新增成功", - "table_designer.message.index_create_sql_unavailable": "无法获取索引创建 SQL", - "table_designer.message.index_create_sql_placeholder": "索引创建 SQL 暂不可用", - "table_designer.message.index_delete_named_unsupported": "当前数据库暂不支持删除索引 \"{{name}}\"", - "table_designer.message.index_delete_unsupported": "当前数据库暂不支持删除该索引", - "table_designer.message.index_deleted": "索引删除成功", - "table_designer.message.index_kind_unsupported": "当前数据库不支持该索引类型", - "table_designer.message.index_maintenance_unsupported": "当前数据库暂不支持在此维护索引", - "table_designer.message.index_name_exists": "索引名已存在:{{name}}", - "table_designer.message.index_name_required": "请输入索引名", - "table_designer.message.index_restore_failed": "{{detail}};恢复原索引失败:{{restoreDetail}}", - "table_designer.message.index_restore_unavailable": "{{detail}};且无法自动恢复原索引,请尽快检查", - "table_designer.message.index_restored_after_failure": "{{detail}};已自动恢复原索引", - "table_designer.message.index_updated": "索引修改成功", - "table_designer.message.indexes_deleted": "{{count}} 个索引删除成功", - "table_designer.message.load_columns_failed": "加载字段失败:{{detail}}", - "table_designer.message.no_changes_detected": "没有检测到变更", - "table_designer.message.no_copyable_columns": "未选择可复制字段", - "table_designer.message.no_index_changes": "没有检测到索引变更", - "table_designer.message.only_normal_unique_index_supported": "当前数据库仅支持普通索引与唯一索引维护", - "table_designer.message.ref_columns_required": "请至少填写一个参考字段", - "table_designer.message.ref_table_required": "请输入参考表", - "table_designer.message.relational_index_unsupported": "当前数据源不支持关系型索引维护", - "table_designer.message.schema_saved_alter": "表结构修改成功!", - "table_designer.message.schema_saved_create": "表创建成功!", - "table_designer.message.select_at_least_one_column": "请至少选择一个字段", - "table_designer.message.select_column_before_insert": "请先选择一个字段,再执行插入。", - "table_designer.message.select_columns_to_copy": "请先勾选要复制的字段", - "table_designer.message.select_index_to_delete": "请先选择要删除的索引", - "table_designer.message.select_local_columns": "请至少选择一个本表字段", - "table_designer.message.select_one_foreign_key": "请先选择一个外键", - "table_designer.message.select_one_index": "请先选择一个索引", - "table_designer.message.statement_execution_failed_prefix": "第 {{current}}/{{total}} 条语句执行失败:", - "table_designer.message.switch_index_kind": "请将“索引类别”切换为 {{kind}} 索引", - "table_designer.message.table_comment_unsupported": "当前数据库暂不支持在此修改表备注", - "table_designer.message.table_comment_updated": "表备注更新成功", - "table_designer.message.table_name_required": "请输入表名", - "table_designer.message.target_table_required": "请输入目标表名", - "table_designer.message.trigger_created": "触发器创建成功", - "table_designer.message.trigger_deleted": "触发器删除成功", - "table_designer.message.trigger_updated": "触发器修改成功", - "table_designer.modal.column_comment_title": "字段注释", - "table_designer.modal.column_comment_title_named": "字段注释 - {{name}}", - "table_designer.modal.confirm_sql_title": "确认 SQL 变更", - "table_designer.modal.copy_columns_title": "复制选中字段到新表", - "table_designer.modal.delete_foreign_key_content": "确定删除外键约束 \"{{name}}\" 吗?", - "table_designer.modal.delete_foreign_key_title": "确认删除外键", - "table_designer.modal.delete_index_many": "确定删除以下 {{count}} 个索引吗?\n{{names}}", - "table_designer.modal.delete_index_one": "确定删除索引 {{names}} 吗?", - "table_designer.modal.delete_index_title": "确认删除索引", - "table_designer.modal.delete_trigger_content": "确定要删除触发器 \"{{name}}\" 吗?此操作不可撤销。", - "table_designer.modal.delete_trigger_title": "确认删除触发器", - "table_designer.modal.foreign_key_create_title": "新增外键", - "table_designer.modal.foreign_key_edit_title": "修改外键", - "table_designer.modal.index_create_title": "新增索引", - "table_designer.modal.index_edit_title": "修改索引", - "table_designer.modal.table_comment_title": "修改表备注", - "table_designer.modal.trigger_create_title": "新增触发器", - "table_designer.modal.trigger_detail_title": "触发器详情", - "table_designer.modal.trigger_detail_title_named": "触发器:{{name}}", - "table_designer.modal.trigger_edit_title": "修改触发器", - "table_designer.modal.unsaved_changes_content": "刷新后会丢失当前尚未保存的字段调整,是否仍要刷新并覆盖当前草稿?", - "table_designer.modal.unsaved_changes_title": "存在未保存的字段变更", - "table_designer.notice.foreign_key_readonly": "当前数据库暂不支持外键编辑,仅支持查看", - "table_designer.notice.foreign_key_replace_hint": "修改外键会执行“先删除旧外键,再创建新外键”。", - "table_designer.notice.index_readonly": "当前数据库暂不支持索引编辑,仅支持查看", - "table_designer.notice.index_restore_hint": "修改索引时若新索引创建失败,系统会尝试自动恢复原索引。", - "table_designer.notice.sql_irreversible": "请仔细检查 SQL,执行后不可撤销。", - "table_designer.notice.sql_statement_irreversible": "请仔细检查 SQL 语句,执行后不可撤销。", - "table_designer.notice.trigger_replace_hint": "修改触发器时会先删除原触发器,再创建新触发器。", - "table_designer.option.default": "默认", - "table_designer.option.recommended_suffix": "(推荐)", - "table_designer.placeholder.column_comment": "请输入字段注释", - "table_designer.placeholder.foreign_key_name": "外键约束名(例如 fk_order_user)", - "table_designer.placeholder.index_columns": "请选择索引字段(按选择顺序生效)", - "table_designer.placeholder.index_name": "索引名(例如 idx_user_name)", - "table_designer.placeholder.local_columns": "请选择本表字段(顺序需与参考字段一致)", - "table_designer.placeholder.primary_index_name": "主键索引固定名称:PRIMARY", - "table_designer.placeholder.ref_columns": "请输入参考字段(支持多个)", - "table_designer.placeholder.ref_table": "参考表(支持 db.table)", - "table_designer.placeholder.table_comment": "请输入表备注", - "table_designer.placeholder.table_name": "请输入表名", - "table_designer.placeholder.target_table_name": "请输入目标表名", - "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB 不支持通过 COMMENT ON COLUMN 持久化字段备注,字段 {{column}} 的备注仅保留在设计器预览中。", - "table_designer.schema_sql.limited_column_hint": "-- {{dialect}} 的字段约束、默认值和备注语法与 MySQL 不同,已避免生成 MySQL 专属子句,请按目标库能力补充。", - "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite 不支持直接修改字段属性,请通过创建新表、迁移数据、替换旧表的方式处理字段 {{column}}。", - "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server 删除旧主键需要原约束名;请先在索引页确认后删除。", - "table_designer.schema_sql.tdengine.timestamp_hint": "-- TDengine 普通表通常需要 TIMESTAMP 时间列,执行前请确认表模型。", - "table_designer.starrocks.table_kind.olap": "OLAP 表", - "table_designer.starrocks.table_kind.external": "外部表", - "table_designer.starrocks.key_model.duplicate": "明细键", - "table_designer.starrocks.key_model.unique": "唯一键", - "table_designer.starrocks.key_model.aggregate": "聚合键", - "table_designer.starrocks.placeholder.key_columns": "键列,例如 id, date", - "table_designer.starrocks.placeholder.partition_clause": "分区子句,例如 PARTITION BY RANGE(date_col)(...)", - "table_designer.starrocks.distribution.hash": "哈希分布", - "table_designer.starrocks.distribution.random": "随机分布", - "table_designer.starrocks.distribution.none": "不设置分布", - "table_designer.starrocks.placeholder.distribution_columns": "分布列,例如 user_id", - "table_designer.starrocks.bucket_mode.auto": "自动分桶数", - "table_designer.starrocks.bucket_mode.number": "固定分桶数", - "table_designer.starrocks.placeholder.bucket_count": "分桶数", - "table_designer.selection.columns_selected": "已选择字段:{{count}}", - "table_designer.selection.foreign_key_selected": "已选择:{{name}}", - "table_designer.selection.indexes_selected": "已选择:{{count}} 个索引", - "table_designer.selection.trigger_prompt": "请点击选择触发器", - "table_designer.selection.trigger_selected": "已选择:{{name}}", - "table_designer.sql_preview.change.add": "新增变更", - "table_designer.sql_preview.change.comment": "备注变更", - "table_designer.sql_preview.change.constraint": "约束变更", - "table_designer.sql_preview.change.create": "新建表结构", - "table_designer.sql_preview.change.drop": "删除变更", - "table_designer.sql_preview.change.modify": "字段属性变更", - "table_designer.sql_preview.change.rename": "重命名变更", - "table_designer.summary.indexes": "索引数:{{count}},索引字段:{{fields}}", - "table_designer.summary.columns": "{{count}} 个字段", - "table_designer.status.read_only": "只读", - "table_designer.title.untitled_table": "未命名表", - "table_designer.title.default_database": "默认库", - "table_designer.title.schema_designer": "结构设计器", - "table_designer.tab.columns": "字段", - "table_designer.tab.foreign_keys": "外键", - "table_designer.tab.indexes": "索引", - "table_designer.tab.triggers": "触发器", - "table_designer.table_comment.current": "当前备注:{{comment}}", - "table_designer.tooltip.edit_comment_popup": "弹框编辑注释", - "table_designer.trigger.column.event": "事件", - "table_designer.trigger.column.name": "名称", - "table_designer.trigger.column.timing": "时机", - "table_designer.trigger.definition_unavailable": "无法获取完整的触发器定义", - "table_designer.trigger.field.event": "事件", - "table_designer.trigger.field.timing": "时机", - "table_designer.trigger.template.body_comment": "触发器逻辑", - "table_designer.trigger.template.enter_create": "请输入 CREATE TRIGGER 语句", - "redis_command.action.clear_console": "清空控制台", - "redis_command.action.execute": "运行(Cmd+Enter)", - "redis_command.completion.detail": "Redis 命令", - "redis_command.message.command_required": "请输入要运行的命令", - "redis_command.output.empty_hint": "在此控制台运行命令,结果将按返回内容显示。", - "redis_command.output.selection_tip": "提示:选择任意行后按 Ctrl + Enter,仅运行所选内容。", - "redis_command.output.title": "执行输出", - "redis_command.state.connection_not_found": "未找到连接", - "redis_command.title.console": "Redis 控制台", - "redis.backend.message.connect_success": "连接成功", - "redis.backend.message.set_success": "设置成功", - "redis.backend.message.select_db_success": "切换成功", - "redis.backend.message.rename_success": "重命名成功", - "redis.backend.message.delete_success": "删除成功", - "redis.backend.message.add_success": "添加成功", - "redis.backend.message.flush_success": "清空成功", - "redis.backend.error.command_required": "命令不能为空", - "redis.backend.error.argument_required": "{{name}} 不能为空", - "redis.backend.error.argument_invalid_type": "{{name}} 类型无效", - "redis.backend.error.address_required": "Redis 连接地址不能为空", - "redis.backend.error.node_address_required": "Redis 节点地址不能为空", - "redis.backend.error.invalid_node_address": "无效 Redis 节点地址:{{address}}", - "redis.backend.error.invalid_port": "无效 Redis 端口:{{address}}", - "redis_monitor.action.pause_refresh": "暂停刷新", - "redis_monitor.action.refresh_now": "立即刷新", - "redis_monitor.action.resume_refresh": "继续刷新", - "redis_monitor.chart.clients_keys": "连接信息(客户端与 Keys)", - "redis_monitor.chart.cpu_usage": "CPU 使用率", - "redis_monitor.chart.memory": "内存开销", - "redis_monitor.chart.qps": "请求吞吐(QPS)", - "redis_monitor.message.fetch_failed": "获取 Redis 信息失败:{{detail}}", - "redis_monitor.metric.blocked_clients": "阻塞:{{value}}", - "redis_monitor.metric.clients": "客户端", - "redis_monitor.metric.days": "天数:{{value}}", - "redis_monitor.metric.memory_peak": "峰值:{{value}}", - "redis_monitor.metric.memory_used": "已用内存", - "redis_monitor.metric.ops": "吞吐(OPS)", - "redis_monitor.metric.uptime": "运行时间", - "redis_monitor.series.clients": "客户端", - "redis_monitor.series.rss_memory": "RSS 内存", - "redis_monitor.series.system": "系统", - "redis_monitor.series.total_keys": "Key 总数", - "redis_monitor.series.used_memory": "已用内存", - "redis_monitor.series.user": "用户", - "redis_monitor.server_details.title": "服务器详细参数", - "redis_monitor.state.connection_not_found": "未找到连接", - "redis_monitor.title.instance": "Redis 实例监控", - "redis_viewer.action.add_field": "新增字段", - "redis_viewer.action.add_list_head": "推入头部", - "redis_viewer.action.add_list_tail": "推入尾部", - "redis_viewer.action.add_member": "新增成员", - "redis_viewer.action.add_stream_entry": "新增条目", - "redis_viewer.action.clear_group_selection": "清除选择", - "redis_viewer.action.clear_selection": "清除选择", - "redis_viewer.action.copy": "复制", - "redis_viewer.action.copy_key_name": "复制 Key 名称", - "redis_viewer.action.copy_value": "复制值", - "redis_viewer.action.delete_key": "删除 Key", - "redis_viewer.action.delete_selected": "删除选中项({{count}})", - "redis_viewer.action.edit": "编辑", - "redis_viewer.action.load_more": "加载更多", - "redis_viewer.action.new_key": "新建", - "redis_viewer.action.refresh": "刷新", - "redis_viewer.action.rename_key": "重命名 Key", - "redis_viewer.action.select_all_loaded": "全选已加载", - "redis_viewer.action.select_group": "选择", - "redis_viewer.action.set_ttl": "设置 TTL", - "redis_viewer.aria.collapse_group": "折叠分组", - "redis_viewer.aria.expand_group": "展开分组", - "redis_viewer.confirm.delete_field": "删除此字段?", - "redis_viewer.confirm.delete_key": "删除 Key \"{{key}}\"?", - "redis_viewer.confirm.delete_member": "删除此成员?", - "redis_viewer.confirm.delete_selected": "删除选中的 {{count}} 个 Key?", - "redis_viewer.confirm.delete_stream_entry": "删除此 Stream 条目?", - "redis_viewer.field.field_name": "字段名称", - "redis_viewer.field.fields_json": "字段 JSON:", - "redis_viewer.field.key": "Key", - "redis_viewer.field.member": "成员:", - "redis_viewer.field.new_key_name": "新 Key 名称", - "redis_viewer.field.new_score": "新分数:", - "redis_viewer.field.score": "分数:", - "redis_viewer.field.stream_id": "ID(可选,默认 *):", - "redis_viewer.field.ttl_seconds": "TTL(秒)", - "redis_viewer.field.value": "值", - "redis_viewer.help.ttl_forever": "-1 表示永不过期", - "redis_viewer.hint.binary_readonly": "二进制数据无法编辑", - "redis_viewer.hint.switch_auto_to_edit": "切换到 Auto 模式后编辑", - "redis_viewer.label.encoding": "编码:{{encoding}}", - "redis_viewer.label.keys_count": "{{count}} 个 Key", - "redis_viewer.label.node_count": "{{count}} 个节点", - "redis_viewer.label.length": "长度:{{count}}", - "redis_viewer.label.original_key": "原 Key:{{key}}", - "redis_viewer.message.add_failed": "新增失败:{{detail}}", - "redis_viewer.message.add_success": "已新增", - "redis_viewer.message.add_success_with_id": "已新增 {{id}}", - "redis_viewer.message.copied": "已复制", - "redis_viewer.message.copy_failed": "复制失败", - "redis_viewer.message.create_failed": "创建失败:{{detail}}", - "redis_viewer.message.create_success": "已创建", - "redis_viewer.message.delete_failed": "删除失败:{{detail}}", - "redis_viewer.message.delete_success": "已删除", - "redis_viewer.message.deleted_keys": "已删除 {{count}} 个 Key", - "redis_viewer.message.fields_json_invalid": "字段 JSON 无效", - "redis_viewer.message.fields_must_be_json_object": "字段必须是 JSON 对象", - "redis_viewer.message.fields_required": "请至少提供一个字段", - "redis_viewer.message.key_check_failed": "检查目标 Key 失败:{{detail}}", - "redis_viewer.message.key_missing_removed": "Key 不再存在或已过期,已从列表中移除", - "redis_viewer.message.key_name_copied": "Key 名称已复制", - "redis_viewer.message.load_keys_failed": "加载 Key 失败:{{detail}}", - "redis_viewer.message.new_key_name_required": "请输入新的 Key 名称", - "redis_viewer.message.rename_failed": "重命名失败:{{detail}}", - "redis_viewer.message.rename_same_key": "新的 Key 名称必须与原名称不同", - "redis_viewer.message.rename_success": "Key 已重命名", - "redis_viewer.message.save_failed": "保存失败:{{detail}}", - "redis_viewer.message.save_success": "已保存", - "redis_viewer.message.set_failed": "设置失败:{{detail}}", - "redis_viewer.message.stream_entry_not_deleted": "未删除任何 Stream 条目,可能已不存在", - "redis_viewer.message.target_key_exists": "目标 Key 已存在:{{key}}", - "redis_viewer.message.ttl_set_success": "TTL 已更新", - "redis_viewer.message.update_failed": "更新失败:{{detail}}", - "redis_viewer.message.update_success": "已更新", - "redis_viewer.message.value_load_failed": "获取值失败:{{detail}}", - "redis_viewer.modal.add_element": "新增元素", - "redis_viewer.modal.add_element_head": "向头部新增元素", - "redis_viewer.modal.add_field": "新增字段", - "redis_viewer.modal.add_member": "新增成员", - "redis_viewer.modal.add_stream_entry": "新增 Stream 条目", - "redis_viewer.modal.edit_field": "编辑字段:{{field}}", - "redis_viewer.modal.edit_index": "编辑索引 {{index}}", - "redis_viewer.modal.edit_value": "编辑值", - "redis_viewer.modal.new_key": "新建 Key", - "redis_viewer.modal.rename_key": "重命名 Key", - "redis_viewer.modal.set_ttl": "设置 TTL", - "redis_viewer.modal.update_score": "更新分数", - "redis_viewer.notice.large_keyspace_mode": "大 Keyspace 性能模式已启用。节点渲染已简化,最多保留 {{count}} 个展开分组。", - "redis_viewer.placeholder.key_name": "Key 名称", - "redis_viewer.placeholder.member_value": "输入成员值", - "redis_viewer.placeholder.new_element_value": "输入新元素值", - "redis_viewer.placeholder.new_key_name": "new:key:name", - "redis_viewer.placeholder.new_member_value": "输入新成员值", - "redis_viewer.placeholder.search_exact": "输入完整 Key 或命名空间进行精确搜索", - "redis_viewer.placeholder.search_fuzzy": "搜索 Key(模糊匹配)", - "redis_viewer.placeholder.stream_id": "例如:* 或 1723110000000-0", - "redis_viewer.placeholder.value": "值", - "redis_viewer.search.exact": "精确", - "redis_viewer.search.fuzzy": "模糊", - "redis_viewer.topology.cluster": "Cluster", - "redis_viewer.topology.sentinel": "Sentinel", - "redis_viewer.topology.single": "单机", - "redis_viewer.state.connection_not_found": "未找到连接", - "redis_viewer.state.empty_selection": "选择一个 Key 查看详情", - "redis_viewer.table.action": "操作", - "redis_viewer.table.field": "字段", - "redis_viewer.table.fields": "字段", - "redis_viewer.table.index": "索引", - "redis_viewer.table.member": "成员", - "redis_viewer.table.score": "分数", - "redis_viewer.table.value": "值", - "redis_viewer.title.active_key": "当前 Key", - "redis_viewer.title.key_explorer": "Key 浏览器", - "redis_viewer.title.namespace_key": "命名空间 / Key", - "redis_viewer.title.type_ttl": "类型 / TTL", - "redis_viewer.tooltip.copy_fields_json": "复制字段 JSON", - "redis_viewer.tooltip.copy_id": "复制 ID", - "redis_viewer.tooltip.copy_key_name": "复制 Key 名称", - "redis_viewer.tooltip.copy_value": "复制值", - "redis_viewer.tooltip.resize_panels": "拖动调整大小", - "redis_viewer.ttl.days_hours": "{{days}}天 {{hours}}小时", - "redis_viewer.ttl.expired": "已过期", - "redis_viewer.ttl.forever": "永久", - "redis_viewer.ttl.hours_minutes": "{{hours}}小时 {{minutes}}分钟", - "redis_viewer.ttl.minutes_seconds": "{{minutes}}分钟 {{seconds}}秒", - "redis_viewer.ttl.seconds": "{{seconds}}秒", - "redis_viewer.validation.key_required": "请输入 Key", - "redis_viewer.validation.new_key_name_required": "请输入新的 Key 名称", - "redis_viewer.validation.value_required": "请输入值", - "redis_viewer.view.auto": "Auto", - "redis_viewer.view.hex": "Hex", - "redis_viewer.view.text": "原始文本", - "redis_viewer.view.title": "查看模式", - "ai_chat.header.default_session_title": "新对话", - "ai_chat.header.export_time": "导出时间:", - "ai_chat.header.export_user": "你", - "ai_chat.header.tooltip.close": "关闭面板", - "ai_chat.header.tooltip.export_markdown": "导出为 Markdown", - "ai_chat.header.tooltip.history": "历史会话", - "ai_chat.header.tooltip.new_chat": "新对话", - "ai_chat.header.tooltip.new_chat_clear": "新对话(清空当前)", - "ai_chat.header.tooltip.settings": "AI 设置", - "ai_chat.header.session.connected": "{{title}} · 已连接", - "ai_chat.header.mode_tabs.aria_label": "AI 工作模式", - "ai_chat.header.mode.chat": "对话", - "ai_chat.header.mode.insights": "自动洞察", - "ai_chat.header.mode.history": "历史", - "ai_chat.header.action.export": "导出", - "ai_chat.history.action.new_chat": "开启新对话", - "ai_chat.history.default_session_title": "新对话", - "ai_chat.history.empty.no_matches": "暂无匹配的对话记录", - "ai_chat.history.search.placeholder": "搜索历史记录...", - "ai_chat.history.title": "对话历史", - "ai_chat.history.tooltip.collapse": "收起", - "ai_chat.history.tooltip.delete": "删除", - "ai_chat.welcome.description.default": "我是你的智能数据库助手。我可以帮你生成 SQL 查询、分析表结构、解释执行逻辑以及优化数据库性能。", - "ai_chat.welcome.description.with_context": "已自动关联 {{count}} 张表结构,点击下方按钮快速开始分析。", - "ai_chat.welcome.title": "你好,我是 GoNavi AI", - "ai_chat.quick_action.explain_schema": "🔍 解释表结构", - "ai_chat.quick_action.explain_schema.hint.with_context": "逐字段说明含义与约束", - "ai_chat.quick_action.explain_schema.prompt.with_context": "请详细解释以下表的设计意图和字段含义:{{tables}}", - "ai_chat.quick_action.explain_schema.title": "解释表结构", - "ai_chat.quick_action.explain_sql": "🔍 解释 SQL", - "ai_chat.quick_action.explain_sql.hint.default": "说明执行逻辑", - "ai_chat.quick_action.explain_sql.prompt.default": "请解释以下 SQL 语句的执行逻辑:\n```sql\n\n```", - "ai_chat.quick_action.explain_sql.title": "解释 SQL", - "ai_chat.quick_action.generate_sql": "📝 生成 SQL", - "ai_chat.quick_action.generate_sql.hint.default": "自然语言生成查询", - "ai_chat.quick_action.generate_sql.hint.with_context": "自然语言生成查询", - "ai_chat.quick_action.generate_sql.prompt.default": "请根据当前数据库表结构生成一条查询语句:", - "ai_chat.quick_action.generate_sql.prompt.with_context": "请根据以下表结构生成一条常用查询语句:{{tables}}", - "ai_chat.quick_action.generate_sql.title": "生成 SQL", - "ai_chat.quick_action.optimize": "⚡ 优化建议", - "ai_chat.quick_action.optimize.hint.default": "性能和索引建议", - "ai_chat.quick_action.optimize.hint.with_context": "索引、范式、潜在风险", - "ai_chat.quick_action.optimize.prompt.default": "请分析以下 SQL 语句的性能并给出优化建议:\n```sql\n\n```", - "ai_chat.quick_action.optimize.prompt.with_context": "请分析以下表的结构设计,给出索引优化和查询性能优化建议:{{tables}}", - "ai_chat.quick_action.optimize.title": "优化建议", - "ai_chat.quick_action.schema_analysis": "🏗️ 结构分析", - "ai_chat.quick_action.schema_analysis.hint.default": "结构质量分析", - "ai_chat.quick_action.schema_analysis.hint.with_context": "表关系与依赖图", - "ai_chat.quick_action.schema_analysis.prompt.default": "请分析当前数据库的表结构并给出优化建议。", - "ai_chat.quick_action.schema_analysis.prompt.with_context": "请对以下表进行全面的 Schema 分析,包括数据类型选择、范式评估和改进建议:{{tables}}", - "ai_chat.quick_action.schema_analysis.title": "Schema 分析", - "ai_chat.quick_action.table_separator": "、", - "ai_chat.welcome.suggestion.channel_distribution.default": "过去 7 天订单渠道分布", - "ai_chat.welcome.suggestion.channel_distribution.with_context": "过去 7 天关键渠道的分布情况", - "ai_chat.welcome.suggestion.cleanup.default": "帮我写一条清理异常数据的 SQL", - "ai_chat.welcome.suggestion.cleanup.with_context": "帮我写一条禁用异常渠道的 SQL", - "ai_chat.welcome.suggestion.divider": "或直接提问", - "ai_chat.welcome.suggestion.low_rows.default": "为什么当前结果只有少量记录?", - "ai_chat.welcome.suggestion.low_rows.with_context": "为什么 {{table}} 只有少量记录?", - "ai_chat.input.action.send": "发送", - "ai_chat.input.action.stop": "停止生成", - "ai_chat.input.context.connection_tooltip": "当前数据查询上下文", - "ai_chat.input.context.memory_tooltip": "当前会话记忆已用字符。达到 {{limit}} 限制时将触发自动压缩。", - "ai_chat.input.context.tag_label": "关联上下文({{count}})", - "ai_chat.input.message.context_added": "已添加 {{count}} 张表的结构到上下文", - "ai_chat.input.message.context_load_failed": "加载表上下文失败:{{detail}}", - "ai_chat.input.message.context_removed": "已从上下文移除 {{count}} 张表的结构", - "ai_chat.input.message.context_synced": "上下文已同步更新:新增 {{added}},移除 {{removed}}", - "ai_chat.input.message.fetch_table_schema_failed": "获取表 {{table}} 结构失败:{{detail}}", - "ai_chat.input.message.fetch_tables_failed": "获取表格失败:{{detail}}", - "ai_chat.input.message.select_database_context_first": "请先在左侧选择一个数据库作为所聊上下文", - "ai_chat.input.message.selection_unchanged": "选中的表未发生变化", - "ai_chat.input.modal.empty_tables": "没有找到匹配“{{query}}”的表", - "ai_chat.input.modal.invert_matching": "反选匹配结果", - "ai_chat.input.modal.ok": "同步所选表至上下文", - "ai_chat.input.modal.search_table.placeholder": "在当前库搜索表名...", - "ai_chat.input.modal.select_all_matching": "全选匹配的表({{count}})", - "ai_chat.input.modal.switch_database.placeholder": "切换数据库", - "ai_chat.input.modal.title": "关联数据库表结构上下文", - "ai_chat.input.model.placeholder": "选择模型", - "ai_chat.input.placeholder": "输入消息...({{shortcut}},Shift+Enter 换行,/ 快捷命令)", - "ai_chat.input.slash.diff.desc": "对比两表差异生成变更", - "ai_chat.input.slash.diff.label": "🔄 表对比", - "ai_chat.input.slash.diff.prompt": "请对比以下两张表的结构差异,并生成从旧版本迁移到新版本的 ALTER 语句:", - "ai_chat.input.slash.explain.desc": "解释选中 SQL 的逻辑", - "ai_chat.input.slash.explain.label": "💡 解释 SQL", - "ai_chat.input.slash.explain.prompt": "请解释以下 SQL 的执行逻辑和每一步的作用:\n```sql\n\n```", - "ai_chat.input.slash.index.desc": "推荐最优索引方案", - "ai_chat.input.slash.index.label": "📊 索引建议", - "ai_chat.input.slash.index.prompt": "请基于当前表结构和常见查询场景,推荐最优的索引方案并给出建表语句:", - "ai_chat.input.slash.mock.desc": "生成 INSERT 测试数据", - "ai_chat.input.slash.mock.label": "🎲 造测试数据", - "ai_chat.input.slash.mock.prompt": "请为当前关联的表生成 10 条符合业务语义的测试数据 INSERT 语句:", - "ai_chat.input.slash.optimize.desc": "分析 SQL 性能瓶颈", - "ai_chat.input.slash.optimize.label": "⚡ 优化分析", - "ai_chat.input.slash.optimize.prompt": "请分析以下 SQL 的性能问题,并给出优化后的版本:\n```sql\n\n```", - "ai_chat.input.slash.query.desc": "用自然语言描述你想查什么", - "ai_chat.input.slash.query.label": "🔍 自然语言查询", - "ai_chat.input.slash.query.prompt": "帮我写一条 SQL 查询:", - "ai_chat.input.slash.schema.desc": "评审表结构设计质量", - "ai_chat.input.slash.schema.label": "🏗️ 表设计评审", - "ai_chat.input.slash.schema.prompt": "请全面评审当前关联表的设计,包括字段类型、范式、索引策略等方面的改进建议:", - "ai_chat.input.slash.sql.desc": "描述需求自动生成语句", - "ai_chat.input.slash.sql.label": "📝 生成 SQL", - "ai_chat.input.slash.sql.prompt": "请根据以下需求生成 SQL:", - "ai_chat.input.tooltip.attach_table_context": "关联附带数据库表上下文", - "ai_chat.input.tooltip.upload_image": "上传图片/截图", - "ai_chat.tools.mcp_fallback_description": "{{serverName}} 提供的 MCP 工具 {{toolName}}", - "ai_chat.composer_notice.missing_model.description": "打开下方模型下拉并选择模型;如果列表为空,请检查供应商入口和 API Key。", - "ai_chat.composer_notice.missing_model.title": "先选择一个模型", - "ai_chat.composer_notice.missing_provider.description": "先在 AI 设置里添加并启用一个模型供应商。", - "ai_chat.composer_notice.missing_provider.title": "还没有可用供应商", - "ai_chat.composer_notice.model_fetch_failed.default_description": "请检查供应商入口、API Key 或账号权限,然后重新打开模型下拉。", - "ai_chat.composer_notice.model_fetch_failed.detail_description": "供应商返回:{{detail}}", - "ai_chat.composer_notice.model_fetch_failed.title": "模型列表加载失败", - "ai_chat.message.action.copy_full": "复制全文", - "ai_chat.message.action.copied": "已复制", - "ai_chat.message.action.delete": "删除单条消息", - "ai_chat.message.action.edit": "编辑此条消息(移除其后所有记录并重新发送)", - "ai_chat.message.action.retry": "重新生成(移除此条并触发上次用户输入重发)", - "ai_chat.message.action.copy_error_raw": "复制报错原文", - "ai_chat.message.action.copied_error_raw": "已复制报错原文", - "ai_chat.message.role.user": "你", - "ai_chat.message.image_alt": "附件图片 {{index}}", - "ai_chat.message.code.copy": "复制代码", - "ai_chat.message.code.copied": "已复制", - "ai_chat.message.code.insert": "插入", - "ai_chat.message.code.insert_tooltip": "将该段 SQL 注入查询工作区(可快捷修改或执行)", - "ai_chat.message.code.execute": "执行", - "ai_chat.message.code.execute_tooltip": "立即执行(受 AI 安全策略管控)", - "ai_chat.message.code.executing": "执行中...", - "ai_chat.message.code.preview": "预览", - "ai_chat.message.code.preview_tooltip": "在聊天内预览查询结果(最多 20 行)", - "ai_chat.message.code.expand_all": "展开全部代码", - "ai_chat.message.code.collapse": "收起代码", - "ai_chat.message.code.preview_result": "预览结果({{rows}} 行 × {{columns}} 列)", - "ai_chat.message.code.preview_collapse": "收起", - "ai_chat.message.code.view_result": "查看结果({{rows}} 行)", - "ai_chat.message.code.query_no_result": "查询无结果", - "ai_chat.message.code.execute_failed": "执行失败", - "ai_chat.message.security.blocked": "🔒 安全策略拦截:当前安全级别不允许执行 {{operationType}} 类型的 SQL。请在 AI 设置中调整安全级别。", - "ai_chat.message.security.confirm_title": "⚠️ 安全确认", - "ai_chat.message.security.default_warning": "此 SQL 为 {{operationType}} 操作,确定要执行吗?", - "ai_chat.message.security.confirm_execute": "确认执行", - "ai_chat.message.thinking.title": "思考过程", - "ai_chat.message.thinking.active": "思考中...", - "ai_chat.message.thinking.count": "({{count}} 字)", - "ai_chat.message.tool_result.title": "探针执行结果 ({{name}})", - "ai_chat.message.tool_result.char_count": "{{count}} 个字符", - "ai_chat.message.tool_result.no_data": "无数据", - "ai_chat.message.tool_call.get_connections": "获取可用连接信息", - "ai_chat.message.tool_call.get_databases": "扫描数据库列表", - "ai_chat.message.tool_call.get_tables": "分析表结构信息", - "ai_chat.message.tool_call.get_columns": "核对真实字段定义", - "ai_chat.message.tool_call.get_table_ddl": "提取建表语句", - "ai_chat.message.tool_call.execute_sql": "执行只读 SQL 验证", - "ai_chat.message.tool_call.running": "正在执行数据探针...", - "ai_chat.message.tool_call.done": "数据探针执行完毕 ({{count}} 项)", - "ai_chat.message.wait.connecting": "正在建立连接", - "ai_chat.message.jvm.apply_preview": "应用到 JVM 预览", - "ai_chat.message.jvm.apply_diagnostic": "应用到诊断控制台", - "ai_chat.message.jvm.missing_plan_context": "这条 JVM 计划缺少来源页签上下文,请在目标 JVM 资源页重新生成。", - "ai_chat.message.jvm.plan_target_not_found": "未找到与该 JVM 计划匹配的资源页签,请先打开原目标资源后再应用。", - "ai_chat.message.jvm.missing_diagnostic_context": "这条诊断计划缺少来源页签上下文,请在目标诊断控制台重新生成。", - "ai_chat.message.jvm.diagnostic_target_not_found": "未找到与该诊断计划匹配的诊断控制台页签,请先打开原目标控制台后再应用。", - "ai_chat.message.mermaid.parse_failed": "Mermaid 解析失败:{{detail}}", - "ai_chat.message.mermaid.render_failed": "Mermaid 渲染异常:{{detail}}", - "ai_chat.panel.history.empty": "暂无历史会话", - "ai_chat.panel.insight.context.linked_title": "已关联 {{count}} 张表", - "ai_chat.panel.insight.context.empty_title": "尚未关联表结构", - "ai_chat.panel.insight.context.linked_body": "当前对话会带上 {{tables}} 的结构上下文。", - "ai_chat.panel.insight.context.empty_body": "在表页打开 AI 后会自动关联当前表,也可以在输入框上方手动添加上下文。", - "ai_chat.panel.insight.context.table_separator": "、", - "ai_chat.panel.insight.context.more_tables_suffix": " 等表", - "ai_chat.panel.insight.query.slowest_title": "最近最慢查询 {{duration}}ms", - "ai_chat.panel.insight.query.empty_title": "暂无查询耗时样本", - "ai_chat.panel.insight.query.empty_body": "执行查询后这里会显示可用于优化分析的 SQL 线索。", - "ai_chat.panel.insight.status.failed_title": "{{count}} 条最近查询失败", - "ai_chat.panel.insight.status.ok_title": "最近查询状态正常", - "ai_chat.panel.insight.status.recent_body": "已记录 {{count}} 条最近 SQL,可直接让 AI 解释或优化。", - "ai_chat.panel.insight.status.empty_body": "暂无 SQL 日志。", - "ai_chat.panel.insight.write.detected_title": "检测到 {{count}} 条写操作", - "ai_chat.panel.insight.write.readonly_title": "当前以只读分析为主", - "ai_chat.panel.insight.write.detected_body": "涉及写入的 SQL 建议先生成预览与回滚语句,再执行提交。", - "ai_chat.panel.insight.write.readonly_body": "AI 默认优先解释、生成 SELECT、分析 Schema 与优化索引。", - "ai_chat.panel.render_error.title": "这条 AI 消息渲染失败,已自动隔离", - "ai_chat.panel.render_error.description": "其余对话仍可继续使用。你可以先删除这条异常消息,再继续操作。", - "ai_chat.panel.render_error.unknown": "未知渲染错误", - "ai_chat.panel.render_error.retry": "重试渲染", - "ai_chat.panel.render_error.delete": "删除这条消息", - "ai_chat.panel.status.memory_compressing": "⚙️ 对话已超载,正在启动记忆压缩...", - "ai_chat.panel.status.memory_compress_failed": "❌ 记忆压缩失败,将尝试原样接续...", - "ai_chat.panel.status.memory_summary": "【自动记忆重塑】已将超长历史压缩为摘要:\n\n{{summary}}", - "ai_chat.panel.status.memory_probe_summary": "【自动记忆重塑】已将超长历史探针数据和对话压缩为摘要:\n\n{{summary}}", - "ai_chat.panel.prompt.memory_summary": "这是一段超长对话的历史记录。为了释放上下文空间同时保留你的记忆核心,请你仔细阅读并以“技术事实、已探索出的数据结构状态、用户的中心诉求、当前进展”为准则,进行高度浓缩的结构化总结。\n注意:\n1. 客观准确,不能遗漏关键业务逻辑或探索出的表名/字段。\n2. 剔除无效执行过程、客套话、JSON 返回值本身。\n3. 请控制在 1000-2000 字左右,输出纯干货 Markdown。\n4. 开头直接输出总结,不要带寒暄。", - "ai_chat.panel.prompt.jvm_diagnostic": "你是 GoNavi 的 JVM 诊断助手。当前页签是 Arthas 兼容诊断工作台,目标是输出可回填到诊断控制台的结构化诊断计划。\n\n当前连接:{{connectionName}}\n目标主机:{{host}}\n诊断 transport:{{transport}}\n运行环境:{{environment}}\n连接策略:{{readOnlyPolicy}}\n命令权限:observe={{observePolicy}},trace={{tracePolicy}},mutating={{mutatingPolicy}}\n\n回答规则:\n1. 可以先给一小段分析,但必须包含且只包含一个 ```json 代码块。\n2. JSON 字段严格限定为 intent、transport、command、riskLevel、reason、expectedSignals。\n3. transport 必须填写上面的诊断 transport,不要编造其他 transport。\n4. command 必须是单条诊断命令,不要带 shell 提示符、换行拼接、多条命令或代码围栏。\n5. riskLevel 只能是 low、medium、high。\n6. expectedSignals 必须是字符串数组,描述执行后需要重点观察的信号。\n7. 如果命令权限不允许某类操作,就不要输出该类命令;无法满足时直接说明限制。", - "ai_chat.panel.jvm_diagnostic.policy.read_only": "默认按只读诊断思路回答,只生成 observe、trace、排障命令,不要假设已经执行。", - "ai_chat.panel.jvm_diagnostic.policy.plan_first": "允许生成诊断命令,但仍然必须先给计划,再由用户决定是否执行。", - "ai_chat.panel.jvm_diagnostic.permission.allowed": "允许", - "ai_chat.panel.jvm_diagnostic.permission.forbidden": "禁止", - "ai_chat.panel.prompt.jvm_runtime": "你是 GoNavi 的 JVM 运行时分析助手。当前上下文不是 SQL,而是 JVM 资源工作台。\n\n当前连接:{{connectionName}}\n目标主机:{{host}}\nProvider 模式:{{providerMode}}\n运行环境:{{environment}}\n连接策略:{{connectionPolicy}}\n资源路径状态:{{resourcePathStatus}}\n\n回答规则:\n1. 你可以解释资源结构、风险、修改建议和回滚建议。\n2. 如果用户要求生成 JVM 修改方案,必须输出一个唯一的 ```json 代码块,并且 JSON 字段严格限定为 targetType、selector、action、payload、reason。\n3. action 优先使用当前资源快照或元数据里已经声明的 supportedActions;如果当前资源没有声明,再基于快照内容谨慎推断。\n4. selector.resourcePath 优先使用当前 resourcePath;如果当前路径未知,就明确说明无法精确定位,不要编造路径。\n5. payload 只能使用 {\"format\":\"json\",\"value\":{...}} 或 {\"format\":\"text\",\"value\":\"...\"} 这两种包装形式,不要输出脚本、命令或裸值。\n6. 不要输出脚本、命令或已经执行成功之类的表述。", - "ai_chat.panel.jvm_runtime.policy.read_only": "只读连接,只能分析和生成变更计划,绝不能假设已执行写入。", - "ai_chat.panel.jvm_runtime.policy.preview_required": "可写连接,但任何修改都必须先生成预览并等待人工确认。", - "ai_chat.panel.jvm_runtime.resource_path.current": "当前 resourcePath:{{resourcePath}}", - "ai_chat.panel.jvm_runtime.resource_path.missing": "当前未选中具体 resourcePath。", - "ai_chat.panel.prompt.sql.context_tables": "你是一个专业的数据库助手。当前连接的数据库类型是 {{dbDisplayType}}。请使用该方言生成 SQL。以下是用户关联的表结构 DDL,请在回答时优先参考:\n\n{{ddlChunks}}", - "ai_chat.panel.prompt.sql.current_database": "你是一个专业的数据库助手。当前连接的数据库类型是 {{dbDisplayType}},当前数据库名为 {{targetDbName}}。如果用户需要查询特定的表或者有关当前库的信息,你可以调用提供的 get_tables 工具来主动获取数据表信息。", - "ai_chat.panel.prompt.sql.no_context": "你是一个专业的数据库助手。用户目前在界面上没有选中任何具体的数据库或数据表用于充当上下文。\n\n重要规则:\n1. 如果你需要帮用户寻找目标表,千万不要凭空猜测表名!必须调用工具去获取真实数据。\n2. 完整工作流程:get_connections → get_databases → get_tables → get_columns → 生成 SQL。每一步都不可跳过。\n3. 【连接优先级 - 极重要】获取连接列表后,必须按以下优先级依次检索:\n - 第一优先:host 为 localhost、127.0.0.1、或包含“本地”的连接\n - 第二优先:name 或 host 包含“开发”、“dev”、“local” 的连接,或 host 为 10.x、192.168.x、172.16-31.x 等内网 IP 的连接\n - 第三优先:其他连接(如“测试”、“生产”等)\n 如果在高优先级连接中已找到目标表,直接使用该连接,不再查找低优先级连接。\n4. 如果在当前数据库中未找到目标表,必须继续查询其他数据库,不要放弃。\n5. 只有当所有可能的数据库都已检查完毕,或者已经明确找到目标表时,才可以停止。\n6. 如果是常规问答(不涉及数据库查询)则正常作答即可。\n\nSQL 生成规则(极重要,必须严格遵守):\n7. 【字段精确性 - 绝对红线】生成 SQL 之前,必须先调用 get_columns 获取目标表的真实字段列表。SQL 中的每一个字段名必须与 get_columns 返回的 field 字段完全一致(区分大小写)。不得自行拼凑、缩写或联想字段名(例如字段是 channel 就必须写 channel,不得写成 pay_channel)。\n8. 生成 SQL 时禁止使用 \"database.table\" 格式的限定前缀,只写表名本身。\n9. 报告结果时,连接名/ID 和数据库名必须严格来自同一个 get_tables 调用的实际参数。禁止将 A 连接的 connectionId 与 B 连接的 dbName 混搭。\n10. 如果有多个名称相似的数据库,请明确告诉用户目标表具体位于哪个数据库。\n11. 【关键】每个 SQL 代码块的第一行必须添加上下文声明注释,格式严格为:-- @context connectionId=<连接ID> dbName=<数据库名>。connectionId 和 dbName 必须来自同一个成功的 get_tables 调用(即你在该调用中传入的实际参数值)。示例:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\n当前存在的连接:[{{connList}}]", - "ai_chat.panel.prompt.sql.no_connections": "你是一个专业的数据库助手。当前应用中没有可用数据库连接。\n\n如果用户的问题需要数据库结构或 SQL,请先说明无法调用 get_connections、get_databases、get_tables、get_columns 获取真实数据库信息,并引导用户创建连接后重试。不要猜测 connectionId、dbName、表名或字段名。\n\n如果是常规问答(不涉及数据库查询)则正常作答即可。", - "ai_chat.panel.model_control.force_tool_call": "请直接使用 function call 调用工具执行操作,不要只用文字描述计划。", - "ai_chat.panel.model_control.continue_after_summary": "请根据上述最新状态与探索结果,继续完成你先前未竟的分析或执行下一步。", - "ai_chat.panel.local_tool.get_connections.description": "当需要查询、操作数据库但用户没有选择任何连接上下文时,获取当前软件中可用的所有数据库连接信息。返回的数据包含连接 ID (id) 和名称 (name)。", - "ai_chat.panel.local_tool.get_databases.description": "获取指定连接 (connectionId) 下的所有数据库 (Database/Schema) 名。", - "ai_chat.panel.local_tool.get_tables.description": "当已经确定了目标连接和 dbName 后,如果用户询问或隐式提到了表但你不知道确切 tableName,调用此工具获取该数据库下的所有表名列表(只含表名,帮助你推断目标表)。", - "ai_chat.panel.local_tool.get_columns.description": "获取指定表的 field 列表(field 名、类型、是否可空、默认值、注释等)。在生成 SQL 之前必须先调用此工具确认真实 field 名,禁止猜测 field 名。", - "ai_chat.panel.local_tool.get_table_ddl.description": "获取指定表的完整 CREATE TABLE DDL,包含 field、索引、约束等完整结构信息。", - "ai_chat.panel.local_tool.execute_sql.description": "在指定连接和数据库上执行 SQL 查询并返回结果。受安全级别控制,只读模式下只能执行 SELECT/SHOW/DESCRIBE 等查询操作。结果最多返回 50 行。", - "ai_chat.panel.local_tool.param.connection_id": "connectionId(连接 ID)", - "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId(从 get_connections 获取)", - "ai_chat.panel.local_tool.param.db_name": "dbName(数据库名)", - "ai_chat.panel.local_tool.param.table_name": "tableName(表名)", - "ai_chat.panel.local_tool.param.sql": "要执行的 SQL 语句", - "ai_chat.panel.tool_error.connection_not_found": "未找到连接", - "ai_chat.panel.tool_error.unknown_function": "未知函数:{{functionName}}", - "ai_chat.panel.tool_error.fetch_databases_failed": "获取数据库列表失败:{{detail}}", - "ai_chat.panel.tool_error.fetch_tables_failed": "获取表列表失败:{{detail}}", - "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ 以下为 {{tableName}} 表的真实字段列表。生成 SQL 时只能使用这些 field 值作为列名,必须原样使用,禁止修改、缩写或自行拼凑字段名。\n可用字段:{{fieldNames}}\n详细信息:{{detailJson}}", - "ai_chat.panel.tool_error.fetch_columns_failed": "获取字段列表失败:{{detail}}", - "ai_chat.panel.tool_error.fetch_table_ddl_failed": "获取 CREATE TABLE 语句失败:{{detail}}", - "ai_chat.panel.tool_error.sql_blocked": "安全策略已拦截此请求:当前安全级别不允许执行 {{operationType}} SQL。请向用户展示该 SQL,并请用户手动执行。", - "ai_chat.panel.tool_error.sql_execute_failed": "SQL 执行失败", - "ai_chat.panel.tool_error.sql_execute_exception": "SQL 执行异常:{{detail}}", - "ai_chat.panel.error.unknown": "未知错误", - "ai_chat.panel.error.http_server": "HTTP {{code}} 服务端错误", - "ai_chat.panel.error.html_response": "服务端返回了异常 HTML 响应(可能是网关超时或服务不可用)", - "ai_chat.panel.error.truncated_suffix": "...(已截断)", - "ai_chat.panel.notice.fetch_models_failed": "获取模型列表失败:{{detail}}", - "ai_chat.panel.message.error": "❌ 错误: {{detail}}", - "ai_chat.panel.message.empty_response": "❌ 模型未能成功响应任何内容,可能遭遇频控、上下文超载或理解拒绝。", - "ai_chat.panel.message.request_interrupted": "❌ 请求中断:未收到任何具体回复。", - "ai_chat.panel.message.service_not_ready": "❌ AI Service 未就绪", - "ai_chat.panel.message.send_failed": "❌ 发送失败: {{detail}}", - "ai_chat.panel.probe.max_rounds": "⚠️ 工具调用已达 {{count}} 轮上限,自动终止循环。如需继续探索,请发送新的消息。", - "ai_chat.panel.probe.consecutive_failed": "⚠️ 探针连续 3 轮执行失败,自动终止。请检查连接状态后重试。", - "ai_chat.panel.status.summarizing_probe": "汇总探针执行结果中", - "ai_chat.panel.status.returning_runtime_data": "向模型回传运行时数据", - "ai_chat.panel.status.deep_reasoning": "模型大脑深度推理中", - "ai_chat.panel.status.waiting_instruction": "等待下发操作指令", - "ai_chat.panel.status.analyzing_chain": "正在深度思考链路与逻辑", - "ai_chat.panel.status.model_connecting": "模型接入中", - "ai_chat.panel.status.waking_engine": "唤醒推理引擎中", - "ai_chat.panel.status.waiting_response": "等待模型响应", - "ai_chat.panel.session.default_title": "新对话", - "ai_settings.title": "AI 设置", - "ai_settings.subtitle": "配置 AI 模型、安全级别和上下文选项", - "ai_settings.nav.title": "设置导航", - "ai_settings.nav.providers.title": "模型供应商", - "ai_settings.nav.providers.description": "配置大模型接口与密钥", - "ai_settings.nav.safety.title": "安全控制", - "ai_settings.nav.safety.description": "限制 AI 操作风险级别", - "ai_settings.nav.context.title": "上下文", - "ai_settings.nav.context.description": "配置携带的数据库架构信息", - "ai_settings.nav.tools.title": "内置工具", - "ai_settings.nav.tools.description": "查看 AI 可调用的数据探针", - "ai_settings.nav.prompts.title": "内置提示词", - "ai_settings.nav.prompts.description": "查看系统预设的底层要求", - "ai_settings.provider.empty.title": "暂未配置模型供应商", - "ai_settings.provider.empty.description": "添加一个以开始使用 AI 助手", - "ai_settings.provider.no_model": "未选择模型", - "ai_settings.provider.next_provider": "下一个供应商", - "ai_settings.provider.action.add": "添加模型供应商", - "ai_settings.provider.action.edit": "编辑", - "ai_settings.provider.action.delete": "删除", - "ai_settings.provider.confirm_delete": "确认删除?", - "ai_settings.provider.editor.add_title": "添加模型供应商", - "ai_settings.provider.editor.edit_title": "编辑模型供应商", - "ai_settings.provider_preset.openai.label": "OpenAI", - "ai_settings.provider_preset.openai.desc": "GPT-5.4 / 5.3 系列", - "ai_settings.provider_preset.deepseek.label": "DeepSeek", - "ai_settings.provider_preset.deepseek.desc": "DeepSeek-V4 / R1 模型", - "ai_settings.provider_preset.qwen_bailian.label": "通义千问(百炼通用)", - "ai_settings.provider_preset.qwen_bailian.desc": "百炼 Anthropic 兼容端点 / 模型从远端拉取", - "ai_settings.provider_preset.qwen_coding_plan.label": "通义千问(Coding Plan)", - "ai_settings.provider_preset.qwen_coding_plan.desc": "Claude Code CLI 代理链路 / 使用官方支持模型清单", - "ai_settings.provider_preset.zhipu.label": "智谱 GLM", - "ai_settings.provider_preset.zhipu.desc": "GLM-5 / GLM-5-Turbo 模型", - "ai_settings.provider_preset.moonshot.label": "Kimi", - "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5(Anthropic 兼容)", - "ai_settings.provider_preset.anthropic.label": "Claude", - "ai_settings.provider_preset.anthropic.desc": "Claude Opus/Sonnet 模型", - "ai_settings.provider_preset.gemini.label": "Gemini", - "ai_settings.provider_preset.gemini.desc": "Gemini 3.1 / 2.5 系列", - "ai_settings.provider_preset.volcengine_ark.label": "火山方舟", - "ai_settings.provider_preset.volcengine_ark.desc": "Ark 通用推理 / 豆包模型", - "ai_settings.provider_preset.volcengine_coding.label": "火山 Coding Plan", - "ai_settings.provider_preset.volcengine_coding.desc": "Ark Code / Coding Plan 链路", - "ai_settings.provider_preset.minimax.label": "MiniMax", - "ai_settings.provider_preset.minimax.desc": "M3 / M2.7 系列(Anthropic 兼容)", - "ai_settings.provider_preset.ollama.label": "Ollama", - "ai_settings.provider_preset.ollama.desc": "本地部署开源模型", - "ai_settings.provider_preset.custom.label": "自定义", - "ai_settings.provider_preset.custom.desc": "自定义 API 端点", - "ai_settings.form.section.service_type": "服务类型", - "ai_settings.form.section.basic": "基本信息", - "ai_settings.form.section.auth_connection": "认证与连接", - "ai_settings.form.provider_name": "供应商名称", - "ai_settings.form.provider_name_required": "请输入名称", - "ai_settings.form.provider_name_placeholder": "例如:我的自建 OpenAI / 专属大模型", - "ai_settings.form.api_format": "API 格式", - "ai_settings.form.model_list": "可用模型列表(可选配置)", - "ai_settings.form.model_list_placeholder": "配置指定的模型 ID,留空则默认从服务端拉取", - "ai_settings.form.api_key": "API Key", - "ai_settings.form.api_key_required": "请输入 API Key", - "ai_settings.form.api_key_keep_placeholder": "留空表示继续沿用已保存密钥", - "ai_settings.form.api_key_placeholder": "sk-... / 你的 API Key", - "ai_settings.form.api_key_saved_hint": "当前已保存 API Key。留空表示继续沿用,输入新值表示替换。", - "ai_settings.form.clear_saved_api_key": "清除已保存 API Key", - "ai_settings.form.api_endpoint": "API Endpoint (URL)", - "ai_settings.form.api_endpoint_required": "请输入有效的接口地址", - "ai_settings.action.back": "返回", - "ai_settings.action.save": "保存", - "ai_settings.action.test": "测试连接", - "ai_settings.action.retest": "重新测试", - "ai_settings.action.connection_ok": "连接正常", - "ai_settings.message.deleted": "已删除", - "ai_settings.message.deleted_and_switched": "已删除,自动切换到「{{name}}」", - "ai_settings.message.delete_failed": "删除失败", - "ai_settings.message.delete_failed_detail": "删除失败:{{detail}}", - "ai_settings.message.saved": "已保存", - "ai_settings.message.save_failed": "保存失败", - "ai_settings.message.save_failed_detail": "保存失败:{{detail}}", - "ai_settings.message.switched": "已切换", - "ai_settings.message.switch_failed": "切换失败", - "ai_settings.message.switch_failed_detail": "切换失败:{{detail}}", - "ai_settings.message.test_requires_new_api_key": "测试连接前请填写新的 API Key,或取消清除已保存密钥", - "ai_settings.message.test_success": "连接成功", - "ai_settings.message.test_failed": "测试失败", - "ai_settings.message.test_failed_detail": "测试失败:{{detail}}", - "ai_settings.message.unknown_error": "未知错误", - "ai_settings.safety.description": "控制 AI 可执行的 SQL 操作类型,保护数据安全", - "ai_settings.safety.readonly.label": "只读模式", - "ai_settings.safety.readonly.desc": "AI 仅可执行 SELECT 等查询操作,最安全。", - "ai_settings.safety.readwrite.label": "读写模式", - "ai_settings.safety.readwrite.desc": "AI 可执行 INSERT/UPDATE/DELETE,危险操作需二次确认。", - "ai_settings.safety.full.label": "完全模式", - "ai_settings.safety.full.desc": "AI 可执行所有操作(含 DDL),高危操作自动告警。", - "ai_settings.context.description": "控制发送给 AI 的数据库上下文信息量", - "ai_settings.context.schema_only.label": "仅结构", - "ai_settings.context.schema_only.desc": "只传递表和列结构信息给 AI", - "ai_settings.context.with_samples.label": "含采样数据", - "ai_settings.context.with_samples.desc": "包含少量采样数据,帮助 AI 理解数据特征", - "ai_settings.context.with_results.label": "含查询结果", - "ai_settings.context.with_results.desc": "传递最近的查询结果作为上下文", - "ai_settings.prompts.description": "以下为当前版本 GoNavi 预设的底层 AI 提示词(只读)。它们会被动态注入到对应场景的请求上下文中。", - "ai_settings.prompts.message.saved": "自定义提示词已保存", - "ai_settings.prompts.message.save_failed": "保存自定义提示词失败", - "ai_settings.mcp_server.message.saved": "MCP 服务已保存", - "ai_settings.mcp_server.message.save_failed": "保存 MCP 服务失败", - "ai_settings.mcp_server.message.deleted": "MCP 服务已删除", - "ai_settings.mcp_server.message.delete_failed": "删除 MCP 服务失败", - "ai_settings.mcp_server.message.test_success": "MCP 服务连接成功", - "ai_settings.mcp_server.message.test_failed": "MCP 服务测试失败", - "ai_settings.mcp_server.message.test_request_failed": "测试 MCP 服务失败", - "ai_settings.clipboard.error.unsupported": "当前环境不支持复制到剪贴板", - "ai_settings.mcp_http.error.control_unsupported_runtime": "当前运行时暂不支持 MCP HTTP 服务控制", - "ai_settings.mcp_http.error.start_unsupported_version": "当前版本暂不支持启动 MCP HTTP 服务", - "ai_settings.mcp_http.error.stop_unsupported_version": "当前版本暂不支持停止 MCP HTTP 服务", - "ai_settings.mcp_http.message.started": "GoNavi MCP HTTP 服务已启动", - "ai_settings.mcp_http.message.stopped": "GoNavi MCP HTTP 服务已停止", - "ai_settings.mcp_http.message.toggle_failed": "切换 GoNavi MCP HTTP 服务失败", - "ai_settings.mcp_http.message.url_unavailable": "当前没有可复制的 MCP HTTP URL", - "ai_settings.mcp_http.message.url_copied": "MCP HTTP URL 已复制", - "ai_settings.mcp_http.message.authorization_header_required": "请先启动 MCP HTTP 服务生成 Authorization Header", - "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header 已复制", - "ai_settings.mcp_http.status.not_running": "GoNavi MCP HTTP 服务未启动", - "ai_settings.skill.message.saved": "Skill 已保存", - "ai_settings.skill.message.save_failed": "保存 Skill 失败", - "ai_settings.skill.message.deleted": "Skill 已删除", - "ai_settings.skill.message.delete_failed": "删除 Skill 失败", - "ai_settings.tools.description": "AI 助手在处理数据库相关问题时,可以自动调用以下内置工具获取真实数据,全程无需人工干预。", - "ai_settings.tools.workflow": "💡 工作流程:get_connections → get_databases → get_tables → get_columns → 生成 SQL", - "ai_settings.tools.params_label": "参数:", - "ai_settings.tools.builtin_tool_label": "内置工具", - "ai_settings.tools.search.aria_label": "搜索内置工具", - "ai_settings.tools.search.placeholder": "搜索工具、流程或参数,例如 mcp / lineLimit / allowMutating / 事务", - "ai_settings.tools.search.clear": "清除", - "ai_settings.tools.summary": "当前显示 {{flowVisible}}/{{flowTotal}} 条推荐流程,{{toolVisible}}/{{toolTotal}} 个内置工具。", - "ai_settings.tools.empty.no_matches": "没有匹配的内置工具。可以改搜更宽泛的关键词,例如 mcp、日志、连接、事务、快捷键、schema。", - "ai_settings.tools.parameters.hint_title": "参数提示", - "ai_settings.tools.parameters.type_label": "类型:{{type}}", - "ai_settings.tools.parameters.required": "必填", - "ai_settings.tools.parameters.optional": "可选", - "ai_settings.tools.parameters.enum_values": "可选值:{{values}}", - "ai_settings.tools.parameters.default_value": "默认:{{value}}", - "ai_settings.tools.parameters.example": "示例:", - "ai_settings.tools.params.none": "无参数", - "ai_settings.tools.get_connections.desc": "获取所有可用的数据库连接", - "ai_settings.tools.get_connections.detail": "返回连接 ID、名称、类型(MySQL/PostgreSQL 等)和 Host 地址。AI 根据返回信息决定优先探索哪个连接。", - "ai_settings.tools.get_databases.desc": "获取指定连接下的所有数据库", - "ai_settings.tools.get_databases.detail": "传入 connectionId,返回该连接下的数据库或结构名称列表。", - "ai_settings.tools.get_tables.desc": "获取指定数据库下的所有表名", - "ai_settings.tools.get_tables.detail": "传入 connectionId 和 dbName,返回表名列表。AI 用它来定位用户提到的目标表。", - "ai_settings.tools.get_columns.desc": "获取指定表的字段结构", - "ai_settings.tools.get_columns.detail": "传入 connectionId、dbName 和 tableName,返回每个字段的名称、类型、是否可空、默认值和注释。AI 在生成 SQL 前必须调用此工具确认真实字段名。", - "ai_settings.tools.get_table_ddl.desc": "获取表的建表语句", - "ai_settings.tools.get_table_ddl.detail": "传入 connectionId、dbName 和 tableName,返回完整的 CREATE TABLE 语句,包含字段定义、索引、约束等信息。", - "ai_settings.tools.execute_sql.desc": "执行 SQL 查询并返回结果", - "ai_settings.tools.execute_sql.detail": "传入 connectionId、dbName 和 sql,在目标数据库上执行 SQL 并返回结果(最多 50 行)。受安全级别控制,只读模式下仅允许 SELECT/SHOW/DESCRIBE。", - "driver_manager.title": "驱动管理", - "driver_manager.action.refresh": "刷新", - "driver_manager.action.network_check": "网络检测", - "driver_manager.action.close": "关闭", - "driver_manager.action.open_global_proxy_settings": "打开全局代理设置", - "driver_manager.action.open_directory": "打开驱动目录", - "driver_manager.action.import_directory": "导入驱动目录", - "driver_manager.action.import_package": "导入驱动包", - "driver_manager.action.install_enable": "安装启用", - "driver_manager.action.remove": "移除", - "driver_manager.action.logs": "日志", - "driver_manager.column.data_source": "数据源", - "driver_manager.column.package_size": "安装包大小", - "driver_manager.column.status": "状态", - "driver_manager.column.progress": "安装进度", - "driver_manager.column.version": "驱动版本", - "driver_manager.column.actions": "操作", - "driver_manager.description.install_required": "除 MySQL / Redis / Oracle / PostgreSQL 外,其他数据源需先安装启用后再连接。", - "driver_manager.directory_info.title": "驱动目录与复用说明", - "driver_manager.directory_info.details_label": "查看驱动目录与复用说明", - "driver_manager.directory_info.reuse_help": "自动下载和手动导入的驱动都会落盘到以下目录;后续版本升级可重复复用已下载驱动。", - "driver_manager.directory_info.root_dir": "驱动根目录:{{path}}", - "driver_manager.directory_info.log_file": "运行日志文件:{{path}}", - "driver_manager.empty.default": "暂无驱动数据", - "driver_manager.empty.search": "未找到匹配“{{keyword}}”的驱动", - "driver_manager.filter_summary.match": "匹配 {{filtered}} / {{total}}", - "driver_manager.filter_summary.total": "共 {{total}} 个驱动", - "driver_manager.import.directory_help": "如果应用内下载链路失败,可先手动下载驱动包到该目录,再使用“导入驱动包”或“导入驱动目录”完成安装。", - "driver_manager.import.single_file_help": "行内“导入驱动包”仅用于单个驱动文件/总包(如 `mariadb-driver-agent`、`mariadb-driver-agent.exe`、`GoNavi-DriverAgents.zip`),不支持直接导入 JDBC Jar;批量导入请使用上方“导入驱动目录”。", - "driver.guidance.customConnectionDriverHelp": "已支持: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase;别名支持 postgresql/pgx、open_gauss/open-gauss、dm8、kingbase8/kingbasees/kingbasev8。请填写 GoNavi 已注册的 Go database/sql 驱动名,不能直接填写系统 ODBC/JDBC 驱动名或导入 JDBC Jar。", - "driver_manager.local_source.file": "文件", - "driver_manager.local_source.directory": "目录", - "driver_manager.log.start_auto_install": "开始自动安装", - "driver_manager.log.done_auto_install": "自动安装完成{{version}}", - "driver_manager.log.start_local_import": "开始本地导入{{version}}({{source}}):{{path}}", - "driver_manager.log.done_local_import": "本地导入安装完成{{version}}", - "driver_manager.log.skip_installed_dedupe": "已检测到驱动已安装,目录导入去重跳过", - "driver_manager.log.force_overwrite_reinstall": "已启用覆盖已安装模式,执行重装导入", - "driver_manager.log.skip_slim_build": "当前发行包为精简构建,已跳过目录导入", - "driver_manager.log.start_remove": "开始移除驱动", - "driver_manager.log.done_remove": "驱动移除完成", - "driver_manager.log.progress_line": "【{{status}}】{{message}}({{percent}}%)", - "driver_manager.log_modal.title": "驱动日志 - {{name}}", - "driver_manager.log_modal.install_dir": "安装目录:{{path}}", - "driver_manager.log_modal.executable_path": "驱动可执行文件:{{path}}", - "driver_manager.log_modal.empty": "当前驱动暂无操作日志。", - "driver_manager.message.load_status_failed": "拉取驱动状态失败", - "driver_manager.message.load_status_failed_detail": "拉取驱动状态失败:{{detail}}", - "driver_manager.message.network_check_failed": "驱动网络检测失败", - "driver_manager.message.network_check_failed_detail": "驱动网络检测失败:{{detail}}", - "driver_manager.message.network_check_completed": "驱动网络检测已完成", - "driver_manager.message.load_version_failed": "{{name}} 版本列表加载失败", - "driver_manager.message.load_version_failed_detail": "加载 {{name}} 版本列表失败:{{detail}}", - "driver_manager.message.install_start": "开始安装", - "driver_manager.message.install_failed": "安装 {{name}} 失败", - "driver_manager.message.install_failed_detail": "安装 {{name}} 失败:{{detail}}", - "driver_manager.message.install_success": "{{name}}{{version}} 已安装启用", - "driver_manager.message.local_path_required": "未选择有效的本地导入{{source}}", - "driver_manager.message.local_import_start": "开始导入本地驱动包", - "driver_manager.message.local_import_failed": "导入 {{name}} 本地驱动包失败", - "driver_manager.message.local_import_failed_detail": "导入 {{name}} 本地驱动包失败:{{detail}}", - "driver_manager.message.local_import_success": "{{name}}{{version}} 本地驱动包已安装启用", - "driver_manager.message.select_local_file_failed": "选择本地驱动包文件失败", - "driver_manager.message.select_local_file_failed_detail": "选择本地驱动包文件失败:{{detail}}", - "driver_manager.message.local_file_required": "未选择有效的驱动包文件", - "driver_manager.message.select_local_directory_failed": "选择本地驱动包目录失败", - "driver_manager.message.select_local_directory_failed_detail": "选择本地驱动包目录失败:{{detail}}", - "driver_manager.message.local_directory_required": "未选择有效的驱动包目录", - "driver_manager.message.no_external_drivers_to_import": "当前没有可导入的外置驱动", - "driver_manager.message.skip.dedupe": "去重跳过 {{count}}", - "driver_manager.message.skip.slim": "精简版跳过 {{count}}", - "driver_manager.message.skip_suffix": ",{{items}}", - "driver_manager.message.overwrite_suffix": "(覆盖已安装)", - "driver_manager.message.directory_import_completed": "目录导入完成{{mode}}:成功 {{success}}{{skip}}", - "driver_manager.message.directory_import_completed_with_failure": "目录导入完成{{mode}}:成功 {{success}},失败 {{failed}}{{skip}}", - "driver_manager.message.directory_import_failed": "目录导入失败{{mode}}:失败 {{failed}}{{skip}}", - "driver_manager.message.open_directory_failed": "打开驱动目录失败", - "driver_manager.message.open_directory_failed_detail": "打开驱动目录失败:{{detail}}", - "driver_manager.message.remove_failed": "移除 {{name}} 失败", - "driver_manager.message.remove_failed_detail": "移除 {{name}} 失败:{{detail}}", - "driver_manager.message.remove_success": "{{name}} 已移除", - "driver_manager.network.alert.download_chain_unreachable": "重要提醒:驱动下载链路域名不可达", - "driver_manager.network.alert.download_network_unreachable": "重要提醒:驱动下载网络不可达", - "driver_manager.network.summary.download_chain_unreachable": "GitHub API 可达,但驱动下载资产域名不可达。", - "driver_manager.network.summary.unreachable_proxy_configured": "检测到部分驱动下载地址不可达,请确认已配置代理有效后重试。", - "driver_manager.network.summary.proxy_recommended": "检测到部分驱动下载地址不可达,建议先配置 HTTP/HTTPS/SOCKS5 代理后再安装驱动。", - "driver_manager.network.summary.unreachable": "检测到部分驱动下载地址不可达,请检查网络后重试。", - "driver_manager.network.summary.reachable_with_proxy": "驱动下载网络已通过当前代理连通。", - "driver_manager.network.summary.reachable": "驱动下载网络检测通过,可直接安装驱动。", - "driver_manager.network.chain_alert.description": "当前可能能访问 GitHub 页面,但驱动包下载会跳转到资产域名。请优先在 GoNavi 顶部“代理”中启用全局代理(填写代理应用本地地址和端口)。", - "driver_manager.network.chain_alert.allow_hosts": "若仍失败,请在代理规则放行:{{hosts}};仍无法调整规则时,再考虑开启 TUN 模式。", - "driver_manager.network.proxy_env_detected": "检测到代理环境变量:{{keys}}", - "driver_manager.network.details_label": "查看网络检测明细", - "driver_manager.network.github_latency": "代理链路到 GitHub 连通性延迟:{{status}}{{latency}}{{detail}}", - "driver_manager.network.reachable": "可达", - "driver_manager.network.unreachable": "不可达", - "driver_manager.network.no_result": "暂无结果", - "driver_manager.network.latency_value": ",{{latency}}ms", - "driver_manager.network.error_value": ",{{detail}}", - "driver_manager.network.no_proxy_env": "未检测到系统代理环境变量。", - "driver_manager.network.checking": "正在检测驱动下载网络...", - "driver_manager.network.not_checked": "尚未完成网络检测", - "driver_manager.progress.local_package_start": "开始安装本地驱动包", - "driver_manager.progress.metadata_write": "写入驱动元数据", - "driver_manager.progress.local_package_done": "本地驱动包导入完成", - "driver_manager.progress.install_start": "开始安装", - "driver_manager.progress.pure_go_enabled": "安装完成,纯 Go 驱动已启用", - "driver_manager.progress.agent_install_start": "开始安装 {{name}} 驱动代理", - "driver_manager.progress.agent_install_done": "{{name}} 驱动代理安装完成", - "driver_manager.progress.download_prebuilt_agent": "下载预编译 {{name}} 驱动代理", - "driver_manager.progress.download_bundle": "下载 {{name}} 驱动总包", - "driver_manager.progress.extract_agent_from_bundle": "从驱动总包提取 {{name}} 代理", - "driver_manager.progress.unzip_agent": "解压 {{name}} 驱动代理", - "driver_manager.progress.source_build_preferred": "优先使用本地源码构建 {{name}} 驱动代理", - "driver_manager.progress.dev_build_fallback": "未命中预编译包,尝试开发态本地构建", - "driver_manager.progress.plan.source_only": "准备安装 {{name}} 驱动代理(版本 {{version}});当前版本仅允许本地源码构建", - "driver_manager.progress.plan.source_first": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试本地源码构建,失败后继续下载兜底", - "driver_manager.progress.plan.direct_then_bundle": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试 {{direct}} 个预编译直链,失败后转入 {{bundle}} 个驱动总包源", - "driver_manager.progress.plan.explicit_direct": "准备安装 {{name}} 驱动代理(版本 {{version}});仅允许显式版本资产,先尝试 {{direct}} 个预编译直链", - "driver_manager.progress.plan.direct_only": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试 {{direct}} 个预编译直链", - "driver_manager.progress.plan.bundle_only": "准备安装 {{name}} 驱动代理(版本 {{version}});未提供预编译直链,直接尝试 {{bundle}} 个驱动总包源", - "driver_manager.progress.plan.source_fallback": "准备安装 {{name}} 驱动代理(版本 {{version}});未命中发布资产时将回退到本地源码构建", - "driver_manager.progress.fallback.direct_to_bundle": "预编译直链未命中,转入驱动总包兜底({{name}},剩余 {{bundle}} 个总包源)", - "driver_manager.progress.fallback.explicit_skip_bundle": "预编译直链未命中;当前版本仅允许显式资产,跳过驱动总包({{name}})", - "driver_manager.progress.fallback.bundle_available": "直链不可用,转入驱动总包兜底({{name}},剩余 {{bundle}} 个总包源)", - "driver_manager.progress.fallback.source_build": "发布资产未命中,准备回退到本地源码构建({{name}})", - "driver_manager.progress.backend_empty": "后端未返回进度说明", - "driver_manager.progress.backend_detail": "后端详情:{{detail}}", - "driver_manager.progress.status.start": "开始", - "driver_manager.progress.status.downloading": "下载中", - "driver_manager.progress.status.done": "完成", - "driver_manager.progress.status.error": "错误", - "driver_manager.progress.status.unknown": "未知", - "driver_manager.option.force_overwrite_installed": "覆盖已安装", - "driver_manager.punctuation.list_separator": "、", - "driver_manager.search.placeholder": "搜索驱动名称/类型(如 DuckDB、clickhouse)", - "driver_manager.search.built_in": "内置", - "driver_manager.search.external": "外置", - "driver_manager.status.calculating": "计算中...", - "driver_manager.status.built_in_available": "内置可用", - "driver_manager.status.installing_percent": "安装中 {{percent}}%", - "driver_manager.status.enabled": "已启用", - "driver_manager.status.installed": "已安装", - "driver_manager.status.disabled": "未启用", - "driver_manager.status.full_required": "需 Full 版", - "driver_manager.version.default": "默认版本", - "driver_manager.version.inline_suffix": "({{version}})", - "driver_manager.version.group.year": "{{year}} 年", - "driver_manager.version.group.other": "其他", - "driver_manager.version.placeholder.select": "选择驱动版本", - "driver_manager.version.placeholder.load_on_expand": "点击展开加载版本", - "driver_manager.version.installed_locked_with_version": "{{version}}(已安装,移除后可更换)", - "driver_manager.version.installed_locked": "已安装(移除后可更换)", - "driver_manager.version.mongodb_hint": "当前仅支持 MongoDB 1.17.x 和 2.x;更老 1.x 暂不提供安装。", - "driver_manager.backend.dialog.select_download_directory": "选择驱动下载目录", - "driver_manager.backend.dialog.select_package_file": "选择驱动包文件(非 JDBC Jar)", - "driver_manager.backend.dialog.select_package_directory": "选择驱动包目录", - "driver_manager.backend.driver_fallback_name": "驱动", - "driver_manager.backend.package_size.built_in": "内置", - "driver_manager.backend.package_size.to_be_published": "待发布", - "driver_manager.backend.version.unlabeled": "未标注版本", - "driver_manager.backend.version.latest_suffix": "(最新)", - "driver_manager.backend.version.recommended_suffix": "(推荐)", - "driver_manager.backend.message.unsupported_builtin_manifest_url": "不支持的内置驱动清单地址:{{url}}", - "driver_manager.backend.message.jdbc_jar_unsupported": "当前驱动管理不支持直接导入 JDBC Jar。GoNavi 使用 Go 驱动与可选 driver-agent;请改用驱动包或驱动目录。如需连接 Kingbase,请优先使用 Kingbase 连接类型,或在自定义连接中填写 kingbase / kingbase8。", - "driver_manager.backend.message.runtime_directory_configured": "驱动运行时目录已生效", - "driver_manager.backend.message.opened_directory": "已打开驱动目录:{{path}}", - "driver_manager.backend.message.log_hint": "(详细日志:{{path}})", - "driver_manager.backend.message.local_import_failed_detail": "导入本地驱动包失败:{{detail}}", - "driver_manager.backend.message.metadata_write_failed_detail": "写入驱动元数据失败:{{detail}}", - "driver_manager.backend.message.driver_install_success": "驱动安装成功", - "driver_manager.backend.message.download_failed_detail": "驱动下载安装失败:{{detail}}", - "driver_manager.backend.message.package_removed": "驱动包已移除", - "driver_manager.backend.error.unknown": "未知错误", - "driver_manager.backend.error.unsupported_driver_type": "不支持的驱动类型", - "driver_manager.backend.error.builtin_download_not_required": "内置驱动无需下载扩展包", - "driver_manager.backend.error.builtin_install_not_required": "内置驱动无需安装扩展包", - "driver_manager.backend.error.builtin_version_not_required": "内置驱动无需选择版本", - "driver_manager.backend.error.builtin_package_not_required": "内置驱动无需安装包", - "driver_manager.backend.error.builtin_remove_not_allowed": "内置驱动不可移除", - "driver_manager.backend.error.optional_go_only": "当前仅支持纯 Go 可选驱动的安装启用", - "driver_manager.backend.error.package_size_unsupported": "当前驱动不支持安装包查询", - "driver_manager.backend.error.version_empty": "版本号为空", - "driver_manager.backend.error.asset_name_empty": "驱动资产名称为空", - "driver_manager.backend.error.mongo_version_unsupported": "MongoDB 版本 {{version}} 当前不受支持;仅支持 1.17.x 和 2.x", - "driver_manager.backend.error.open_directory_unsupported": "当前平台暂不支持打开目录:{{platform}}", - "driver_manager.backend.error.open_directory_failed": "打开驱动目录失败:{{detail}}", - "driver_manager.backend.error.create_directory_failed": "创建驱动目录失败:{{detail}}", - "driver_manager.backend.error.remove_package_failed": "移除驱动包失败:{{detail}}", - "driver_manager.backend.error.manifest_scheme_unsupported": "不支持的驱动清单地址协议:{{scheme}}", - "driver_manager.backend.error.manifest_fetch_failed": "拉取驱动清单失败:{{detail}}", - "driver_manager.backend.error.manifest_parse_failed": "解析驱动清单失败:{{detail}}", - "driver_manager.backend.error.manifest_url_empty": "驱动清单地址为空", - "driver_manager.backend.error.manifest_too_large": "驱动清单超过大小限制", - "driver_manager.backend.error.local_manifest_url_invalid": "无效的本地驱动清单地址", - "driver_manager.backend.error.file_manifest_url_invalid": "无效的文件驱动清单地址", - "driver_manager.backend.error.driver_type_empty": "驱动类型为空", - "driver_manager.backend.error.no_driver_versions": "未找到可用驱动版本", - "driver_manager.backend.error.module_path_empty": "模块路径为空", - "driver_manager.backend.error.module_version_list_empty": "模块版本列表为空", - "driver_manager.backend.error.module_version_list_fetch_failed": "拉取模块版本列表失败:{{detail}}", - "driver_manager.backend.error.module_version_list_read_failed": "读取模块版本列表失败:{{detail}}", - "driver_manager.backend.error.driver_version_list_fetch_failed": "拉取驱动版本列表失败:{{detail}}", - "driver_manager.backend.error.driver_version_list_parse_failed": "解析驱动版本列表失败:{{detail}}", - "driver_manager.backend.error.cache_key_empty": "缓存 key 为空", - "driver_manager.backend.error.release_empty": "Release 为空", - "driver_manager.backend.error.bundle_index_asset_missing": "未找到驱动总包索引资产", - "driver_manager.backend.error.bundle_index_empty": "驱动总包索引为空", - "driver_manager.backend.error.bundle_index_fetch_failed": "拉取驱动总包索引失败:{{detail}}", - "driver_manager.backend.error.bundle_index_parse_failed": "解析驱动总包索引失败:{{detail}}", - "driver_manager.backend.error.tag_empty": "Tag 为空", - "driver_manager.backend.error.api_url_empty": "API 地址为空", - "driver_manager.backend.error.release_info_fetch_failed": "拉取 Release 信息失败:{{detail}}", - "driver_manager.backend.error.local_package_path_empty": "本地驱动包路径为空", - "driver_manager.backend.error.local_directory_path_empty": "本地驱动目录路径为空", - "driver_manager.backend.error.file_path_empty": "文件路径为空", - "driver_manager.backend.error.download_url_empty": "下载地址为空", - "driver_manager.backend.error.bundle_url_empty": "驱动总包下载地址为空", - "driver_manager.backend.error.read_local_package_failed": "读取本地驱动包失败:{{detail}}", - "driver_manager.backend.error.read_local_directory_failed": "读取本地驱动目录失败:{{detail}}", - "driver_manager.backend.error.scan_local_directory_failed": "扫描本地驱动目录失败:{{detail}}", - "driver_manager.backend.error.open_local_package_failed": "打开本地驱动包失败:{{detail}}", - "driver_manager.backend.error.read_local_package_entry_failed": "读取本地驱动包条目失败:{{detail}}", - "driver_manager.backend.error.download_failed": "下载失败:{{detail}}", - "driver_manager.backend.error.bundle_download_failed": "下载驱动总包失败:{{detail}}", - "driver_manager.backend.error.open_bundle_failed": "打开驱动总包失败:{{detail}}", - "driver_manager.backend.error.read_bundle_entry_failed": "读取驱动总包条目失败:{{detail}}", - "driver_manager.backend.error.source_build_failed": "本地构建失败:{{detail}}", - "driver_manager.backend.error.prebuilt_downloads_failed": "预编译包下载失败:{{detail}}", - "driver_manager.backend.status.built_in_available": "内置驱动,可直接连接", - "driver_manager.backend.status.optional_enabled": "纯 Go 驱动已启用,可直接连接", - "driver_manager.backend.status.installed_pending_with_version": "驱动已安装(版本:{{version}}),待生效", - "driver_manager.backend.status.installed_pending": "驱动已安装,待生效", - "driver_manager.backend.status.optional_disabled_with_version": "未启用(版本:{{version}})", - "driver_manager.backend.status.optional_disabled_generic": "未启用", - "driver_manager.backend.status.needs_update": "需要重装以应用驱动侧更新。", - "driver_manager.backend.status.installed_revision": "已安装 revision {{revision}}。", - "driver_manager.backend.status.expected_revision": "当前需要 revision {{revision}}。", - "driver_manager.backend.status.affected_connections": "影响 {{count}} 个已保存连接", - "driver_manager.backend.status.unrecognized_driver_type": "未识别的数据源类型", - "driver_manager.backend.status.slim_build_required": "{{name}} 当前发行包为精简构建,未内置该驱动;如需使用请安装 Full 版", - "driver_manager.backend.status.agent_path_failed": "{{name}} 驱动代理路径解析失败,请在驱动管理中重新安装启用", - "driver_manager.backend.status.agent_missing": "{{name}} 驱动代理缺失,请在驱动管理中重新安装启用", - "driver_manager.backend.status.optional_disabled": "{{name}} 纯 Go 驱动未启用,请先在驱动管理中点击安装启用", - "driver_manager.backend.status.agent_unavailable_reinstall": "{{name}} 驱动代理不可用:{{detail}}。请在驱动管理中重新安装启用", - "driver_manager.backend.status.agent_arch_incompatible_detail": "{{name}} 驱动代理架构不兼容:文件={{file}},当前进程={{process}}。请在驱动管理中重新安装启用", - "driver_manager.backend.network.probe.github_driver_release": "GitHub 驱动发布", - "driver_manager.backend.network.probe.github_release_asset_domain": "GitHub Release 资产域名", - "driver_manager.backend.network.probe.go_module_proxy": "Go 模块代理", - "driver_manager.backend.network.error.probe_url_empty": "检测地址为空", - "driver_manager.backend.network.error.probe_host_missing": "检测地址缺少主机", - "driver_manager.backend.network.summary.download_chain_unreachable": "GitHub API 可达,但驱动下载链路不可达。请优先在 GoNavi 启用全局代理,并在代理规则中放行 github.com、api.github.com、release-assets.githubusercontent.com、objects.githubusercontent.com、raw.githubusercontent.com;若仍失败,再考虑开启 TUN 模式。", - "driver_manager.backend.progress.plan.source_only": "准备安装 {{name}} 驱动代理(版本 {{version}});当前版本仅允许本地源码构建", - "driver_manager.backend.progress.plan.source_first": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试本地源码构建,失败后继续下载兜底", - "driver_manager.backend.progress.plan.direct_then_bundle": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试 {{direct}} 个预编译直链,失败后转入 {{bundle}} 个驱动总包源", - "driver_manager.backend.progress.plan.explicit_direct": "准备安装 {{name}} 驱动代理(版本 {{version}});仅允许显式版本资产,先尝试 {{direct}} 个预编译直链", - "driver_manager.backend.progress.plan.direct_only": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试 {{direct}} 个预编译直链", - "driver_manager.backend.progress.plan.bundle_only": "准备安装 {{name}} 驱动代理(版本 {{version}});未提供预编译直链,直接尝试 {{bundle}} 个驱动总包源", - "driver_manager.backend.progress.plan.source_fallback": "准备安装 {{name}} 驱动代理(版本 {{version}});未命中发布资产时将回退到本地源码构建", - "driver_manager.backend.progress.fallback.direct_to_bundle": "预编译直链未命中,转入驱动总包兜底({{name}},剩余 {{bundle}} 个总包源)", - "driver_manager.backend.progress.fallback.explicit_skip_bundle": "预编译直链未命中;当前版本仅允许显式资产,跳过驱动总包({{name}})", - "driver_manager.backend.progress.fallback.bundle_available": "直链不可用,转入驱动总包兜底({{name}},剩余 {{bundle}} 个总包源)", - "driver_manager.backend.progress.fallback.source_build": "发布资产未命中,准备回退到本地源码构建({{name}})", - "data_sync.action.analyze_diff": "对比差异", - "data_sync.action.cancel": "取消", - "data_sync.action.close": "关闭", - "data_sync.action.continue_sync": "继续同步", - "data_sync.action.next": "下一步", - "data_sync.action.previous": "上一步", - "data_sync.action.start_sync": "开始同步", - "data_sync.action.view": "查看", - "data_sync.compare_entry.action.return_to_compare": "返回比对", - "data_sync.compare_entry.alert.data": "当前为“数据比对”入口:固定按主键分析行级差异,不执行写入。", - "data_sync.compare_entry.alert.schema": "当前为“表结构比对”入口:固定只分析结构差异和生成可审阅 SQL,不执行变更。", - "data_sync.compare_entry.option.auto_add_columns": "生成目标表缺失字段的兼容变更 SQL(仅预览,不执行)", - "data_sync.compare_entry.option.source_dataset.query": "按 SQL 结果集比对", - "data_sync.compare_entry.option.source_dataset.table": "按表比对", - "data_sync.compare_entry.preview.selection_hint": "行选择只影响 SQL 预览范围,不会执行写入。", - "data_sync.compare_entry.preview.sql.data_help": "SQL 预览会按当前勾选的插入、更新、删除与行选择范围生成,仅用于审核差异。", - "data_sync.compare_entry.preview.sql.schema_help": "SQL 预览展示结构差异建议语句,仅用于审核差异。", - "data_sync.compare_entry.result.completed": "比对完成", - "data_sync.compare_entry.result.failed": "比对失败", - "data_sync.compare_entry.result.running": "正在比对", - "data_sync.compare_entry.result.running_description": "当前阶段:{{stage}}{{table}}", - "data_sync.compare_entry.result.stage_fallback": "执行中", - "data_sync.compare_entry.result.success_summary": "成功比对 {{tables}} 张表。", - "data_sync.compare_entry.result.table_suffix": ",表:{{table}}", - "data_sync.compare_entry.title.analysis_log": "分析日志", - "data_sync.compare_entry.workflow_help": "当前入口只做差异分析和预览,不会执行同步、建表、补字段或删除数据。", - "data_sync.entry_mode.compare.action.start": "开始比对", - "data_sync.entry_mode.compare.option_title": "比对选项", - "data_sync.entry_mode.compare.result_title": "比对结果", - "data_sync.entry_mode.data_compare.badge": "数据比对", - "data_sync.entry_mode.data_compare.description": "按主键对比源表与目标表的数据差异,查看新增、更新和删除明细。", - "data_sync.entry_mode.data_compare.hero_description": "适合核对两端数据一致性,只做差异分析与行级预览,不执行写入。", - "data_sync.entry_mode.data_compare.table_select_label": "请选择需要比对数据的表:", - "data_sync.entry_mode.data_compare.title": "数据比对", - "data_sync.entry_mode.schema_compare.badge": "结构比对", - "data_sync.entry_mode.schema_compare.description": "按源表与目标表生成结构差异、兼容风险和可审阅 SQL。", - "data_sync.entry_mode.schema_compare.hero_description": "适合发布前核对两端表结构差异,只做分析与预览,不执行结构变更。", - "data_sync.entry_mode.schema_compare.table_select_label": "请选择需要比对结构的表:", - "data_sync.entry_mode.schema_compare.title": "表结构比对", - "data_sync.entry_mode.sync.hero_description": "适合目标表已存在的场景,先做差异分析,再按勾选执行插入、更新或删除。", - "data_sync.alert.auto_create_scope": "自动建表当前仅支持 MySQL 到 Kingbase。会迁移字段、主键、普通索引、唯一索引和联合索引,并明确跳过全文、空间、前缀和函数类索引。", - "data_sync.alert.auto_create_planner_scope": "自动建表当前仅支持 MySQL 到 Kingbase。会迁移字段、主键、普通索引、唯一索引和联合索引,并明确跳过全文、空间、前缀和函数类索引。", - "data_sync.alert.existing_target_only": "数据同步默认使用已有目标表执行。需要跨数据源建表并导入时,请切换到跨库迁移。", - "data_sync.alert.full_overwrite": "全量覆盖会清空目标表数据,请谨慎使用。", - "data_sync.alert.migration_mode": "当前为跨库迁移。适合将表迁移到另一数据源,并自动建表和导入数据。", - "data_sync.alert.query_mode": "SQL 结果集同步当前支持源端自定义 SQL 到单个已存在目标表。查询结果必须包含目标表主键列。", - "data_sync.alert.sync_mode": "当前为数据同步。适合目标表已存在时做增量同步或覆盖导入。", - "data_sync.badge.migration_mode": "迁移模式", - "data_sync.badge.source_pending": "待选源连接", - "data_sync.badge.source_selected": "已选源连接", - "data_sync.badge.sync_mode": "同步模式", - "data_sync.badge.table_count": "{{count}} 张表", - "data_sync.backend.error.restore_source_secret_failed": "恢复源数据库连接密文失败:{{detail}}", - "data_sync.backend.error.restore_target_secret_failed": "恢复目标数据库连接密文失败:{{detail}}", - "data_sync.backend.error.connect_source_failed": "源数据库连接失败:{{detail}}", - "data_sync.backend.error.connect_target_failed": "目标数据库连接失败:{{detail}}", - "data_sync.backend.error.init_source_driver_failed": "初始化源数据库驱动失败:{{detail}}", - "data_sync.backend.error.init_target_driver_failed": "初始化目标数据库驱动失败:{{detail}}", - "data_sync.backend.error.preview_composite_pk_unsupported": "复合主键({{columns}})暂不支持数据预览", - "data_sync.backend.error.preview_pk_required": "无主键,不支持数据预览", - "data_sync.backend.error.target_pk_required_for_query_diff": "目标表无主键,不支持基于 SQL 结果集的差异分析", - "data_sync.backend.result.analyzed_tables": "已完成 {{count}} 张表的差异分析", - "data_sync.backend.result.analyzed_target_tables": "已完成 {{count}} 个目标表的差异分析", - "data_sync.backend.summary.diff_completed": "差异分析完成", - "data_sync.backend.summary.source_query_diff_completed": "SQL 结果集差异分析完成", - "data_sync.backend.validation.query_mode_data_only": "SQL 结果集同步当前仅支持只同步数据", - "data_sync.backend.validation.single_target_table_required": "SQL 结果集同步要求且仅允许选择一个目标表", - "data_sync.backend.validation.source_query_required": "源查询 SQL 不能为空", - "data_sync.backend.validation.target_table_required": "目标表不能为空", - "data_sync.backend.warning.index_columns_missing": "索引 {{name}} 缺少列定义,已跳过", - "data_sync.backend.warning.index_prefix_length_unsupported": "索引 {{name}} 使用前缀长度,当前暂不支持迁移", - "data_sync.backend.warning.index_type_unsupported": "索引 {{name}} 类型={{type}},当前暂不支持自动迁移", - "data_sync.confirm.full_overwrite.content": "全量覆盖会先清空目标表数据再插入,请确认目标库已完成备份。", - "data_sync.confirm.full_overwrite.ok": "继续执行", - "data_sync.confirm.full_overwrite.title": "确认全量覆盖", - "data_sync.modal.full_overwrite_title": "确认全量覆盖", - "data_sync.modal.full_overwrite_content": "全量覆盖会先清空目标表数据再插入,请确认目标库已完成备份。", - "data_sync.modal.full_overwrite_ok": "继续执行", - "data_sync.diff.column.delete": "删除", - "data_sync.diff.column.insert": "插入", - "data_sync.diff.column.plan": "计划", - "data_sync.diff.column.preview": "预览", - "data_sync.diff.column.risk": "风险", - "data_sync.diff.column.same": "相同", - "data_sync.diff.column.table": "表名", - "data_sync.diff.column.target_table": "目标表", - "data_sync.diff.column.update": "更新", - "data_sync.diff.more_warnings": "还有 {{count}} 项未展开", - "data_sync.diff.target_exists": "已存在", - "data_sync.diff.target_missing": "不存在", - "data_sync.diff.title": "对比结果", - "data_sync.diff.warning_title": "预检发现风险或降级项,请在执行前确认。", - "data_sync.message.precheck_warnings": "预检发现风险或降级项,请在执行前确认。", - "data_sync.message.more_items_collapsed": "还有 {{count}} 项未展开", - "data_sync.table.table_name": "表名", - "data_sync.table.target_table": "目标表", - "data_sync.table.target_exists": "已存在", - "data_sync.table.target_missing": "不存在", - "data_sync.table.plan": "计划", - "data_sync.table.insert": "插入", - "data_sync.table.update": "更新", - "data_sync.table.delete": "删除", - "data_sync.table.same": "相同", - "data_sync.table.risk": "风险", - "data_sync.table.preview": "预览", - "data_sync.title.compare_result": "对比结果", - "data_sync.field.connection": "连接", - "data_sync.field.database": "数据库", - "data_sync.field.migration_content": "迁移内容", - "data_sync.field.migration_mode": "迁移模式", - "data_sync.field.mongo_collection_name": "Mongo 集合名(可选)", - "data_sync.field.source_dataset_mode": "源数据方式", - "data_sync.field.source_query_sql": "源查询 SQL", - "data_sync.field.sync_content": "同步内容", - "data_sync.field.sync_mode": "同步模式", - "data_sync.field.target_table": "目标表", - "data_sync.field.target_table_requirement": "目标表要求", - "data_sync.field.target_table_strategy": "目标表处理策略", - "data_sync.field.workflow_type": "功能类型", - "data_sync.help.mongo_collection_mongo_to_redis": "MongoDB 到 Redis 场景通常直接选择源集合。仅在需要显式回退集合名时填写。", - "data_sync.help.mongo_collection_redis_to_mongo": "留空时使用默认集合名。填写后,本次 Redis 键空间会写入该 Mongo 集合。", - "data_sync.help.workflow_type": "先选择本次是同步已有目标表,还是执行跨库迁移。页面会按功能类型调整更安全的默认策略。", - "data_sync.help.select_tables": "请选择需要同步的表:", - "data_sync.help.source_query_mode": "请输入源查询 SQL,并选择一个目标表。差异分析会直接基于该结果集与目标表对比。", - "data_sync.hero.migration_description": "将源表迁移到另一数据库,按策略自动建表、导入数据并补建兼容索引。", - "data_sync.hero.migration_title": "跨数据源迁移", - "data_sync.hero.sync_description": "基于已有目标表先做差异对比,再按勾选执行插入、更新或删除。", - "data_sync.hero.sync_title": "数据同步", - "data_sync.log.level.error": "错误", - "data_sync.log.level.info": "信息", - "data_sync.log.level.warn": "警告", - "data_sync.log.title": "执行日志", - "data_sync.message.analysis_complete": "差异分析完成", - "data_sync.message.analysis_failed": "差异分析失败", - "data_sync.message.analysis_failed_detail": "差异分析失败:{{detail}}", - "data_sync.message.analyze_before_sync": "请先对比差异,再开始同步", - "data_sync.message.close_blocked_running": "同步执行中,暂不支持关闭窗口。", - "data_sync.message.fetch_source_databases_failed": "获取源数据库失败", - "data_sync.message.fetch_source_databases_failed_detail": "获取源数据库失败:{{detail}}", - "data_sync.message.fetch_tables_failed": "获取表列表失败", - "data_sync.message.fetch_tables_failed_detail": "获取表列表失败:{{detail}}", - "data_sync.message.fetch_target_databases_failed": "获取目标数据库失败", - "data_sync.message.fetch_target_databases_failed_detail": "获取目标数据库失败:{{detail}}", - "data_sync.message.preview_load_failed": "加载差异预览失败", - "data_sync.message.preview_load_failed_detail": "加载差异预览失败:{{detail}}", - "data_sync.message.select_connections_first": "请先选择连接", - "data_sync.message.select_databases_first": "请先选择数据库", - "data_sync.message.select_source_database": "请选择源数据库", - "data_sync.message.select_target_database": "请选择目标数据库", - "data_sync.message.sync_execution_failed": "同步执行失败", - "data_sync.message.sync_execution_failed_detail": "同步执行失败:{{detail}}", - "data_sync.option.auto_add_columns": "自动补齐目标表缺失字段(当前支持 MySQL 目标及 MySQL 到 Kingbase;SQL 结果集模式暂不支持)", - "data_sync.option.content.both": "同步结构和数据", - "data_sync.option.content.data": "仅同步数据", - "data_sync.option.content.schema": "仅同步结构", - "data_sync.option.create_indexes": "自动迁移兼容的普通索引和唯一索引(仅自动建表模式生效)", - "data_sync.option.source_dataset.query": "按 SQL 结果集同步", - "data_sync.option.source_dataset.table": "按表同步", - "data_sync.option.show_same_tables": "显示相同表", - "data_sync.option.sync_mode.full_overwrite": "全量覆盖(清空目标表后插入)", - "data_sync.option.sync_mode.insert_only": "仅插入(不对比目标;无主键表将跳过)", - "data_sync.option.sync_mode.insert_update": "增量同步(对比差异后选择插入、更新和删除)", - "data_sync.option.target_strategy.auto_create_if_missing": "目标表不存在时自动建表", - "data_sync.option.target_strategy.existing_only": "仅使用已有目标表", - "data_sync.option.target_strategy.smart": "智能模式(存在则直接导入,不存在则自动建表)", - "data_sync.option.workflow.migration": "跨库迁移(自动建表后导入)", - "data_sync.option.workflow.sync": "数据同步(基于已有目标表做差异同步)", - "data_sync.placeholder.mongo_collection_name": "请输入 Mongo 集合名", - "data_sync.placeholder.source_query_sql": "例如:SELECT id, name, email FROM users WHERE status = 'active'", - "data_sync.placeholder.target_table": "请选择一个目标表", - "data_sync.preview.action.copy_sql": "复制 SQL", - "data_sync.preview.column.changed_columns": "变更字段", - "data_sync.preview.column.data": "数据", - "data_sync.preview.column.detail": "详情", - "data_sync.preview.column.primary_key": "主键", - "data_sync.preview.data_summary": "插入 {{inserts}},更新 {{updates}},删除 {{deletes}}(预览每种类型最多展示 200 行)", - "data_sync.preview.delete_warning": "删除默认不勾选。请确认业务影响后再启用删除。", - "data_sync.preview.loading": "正在加载差异预览...", - "data_sync.preview.message.copy_failed": "复制失败,请手动复制。", - "data_sync.preview.message.sql_copied": "SQL 已复制", - "data_sync.preview.schema_plan_help": "以下为本次结构同步计划执行的语句。", - "data_sync.preview.schema_statement_count": "检测到 {{count}} 条结构变更语句", - "data_sync.preview.schema_warning_title": "结构预览包含风险或降级项", - "data_sync.preview.selection_hint.delete": "未勾选任何行时会同步全部删除差异。如不想执行删除,请在对比结果中取消删除。", - "data_sync.preview.selection_hint.insert": "未勾选任何行时会同步全部插入差异。如不想执行插入,请在对比结果中取消插入。", - "data_sync.preview.selection_hint.update": "未勾选任何行时会同步全部更新差异。如不想执行更新,请在对比结果中取消更新。", - "data_sync.preview.side.source": "源", - "data_sync.preview.side.target": "目标", - "data_sync.preview.sql.data_help": "SQL 预览会按当前勾选的插入、更新、删除和行选择范围生成,用于审核确认。", - "data_sync.preview.sql.no_data_sql": "-- 当前选择范围没有可预览 SQL", - "data_sync.preview.sql.no_schema_changes": "-- 当前表结构无可执行变更", - "data_sync.preview.sql.schema_help": "SQL 预览展示将执行的结构变更语句,用于审核确认。", - "data_sync.preview.sql.schema_statement_count": "共 {{count}} 条结构变更语句", - "data_sync.preview.sql.statement_count": "共 {{count}} 条语句(预览数据每种类型最多展示 200 行)", - "data_sync.preview.tab.delete": "删除({{count}})", - "data_sync.preview.tab.insert": "插入({{count}})", - "data_sync.preview.tab.schema": "结构({{count}})", - "data_sync.preview.tab.sql": "SQL({{count}})", - "data_sync.preview.tab.update": "更新({{count}})", - "data_sync.preview.title": "差异预览:{{table}}", - "data_sync.preview.update_detail_title": "更新详情:{{table}} / {{pk}}", - "data_sync.plan.use_existing_target": "使用已有目标表导入", - "data_sync.plan.target_missing_manual_create": "目标表不存在,需先手工创建", - "data_sync.plan.target_missing_auto_create": "目标表不存在,将自动建表后导入", - "data_sync.plan.target_missing_cannot_sync": "目标表不存在,无法执行同步", - "data_sync.plan.target_missing_auto_create_all": "目标表不存在,执行时将自动建表并导入全部源数据", - "data_sync.plan.schema_changes_detected": "检测到 {{count}} 条结构变更", - "data_sync.plan.add_missing_columns_before_import": "补齐 {{count}} 个缺失字段后导入", - "data_sync.plan.missing_columns_no_executable_sql": "目标表缺失 {{count}} 个字段,但未生成可执行补齐 SQL", - "data_sync.plan.missing_columns_auto_add_unsupported": "目标表缺失 {{count}} 个字段,当前库对暂不支持自动补齐", - "data_sync.plan.missing_columns_auto_add_disabled": "目标表缺失 {{count}} 个字段,未开启自动补齐", - "data_sync.plan.schema_only_no_data_diff": "仅同步结构,未执行数据差异分析", - "data_sync.plan.schema_only": "仅同步结构", - "data_sync.plan.schema_preview": "结构预览", - "data_sync.plan.schema_aligned": "表结构已一致", - "data_sync.plan.auto_create_unsupported": "当前库对暂不支持自动建表", - "data_sync.plan.tdengine_time_column_missing": "源表未识别到可映射为 TDengine 首列的时间列,无法自动建表", - "data_sync.plan.use_existing_target_collection": "使用已有目标集合导入", - "data_sync.plan.target_collection_missing_manual_create": "目标集合不存在,需先手工创建", - "data_sync.plan.target_collection_missing_auto_create": "目标集合不存在,将自动创建集合后导入", - "data_sync.plan.redis_key_to_mongodb_document": "按 Redis Key 生成 MongoDB 文档导入", - "data_sync.plan.migrate_to_collection": "迁移到集合 {{collection}}", - "data_sync.plan.migrate_to_target": "迁移到 {{target}}", - "data_sync.plan.source_query_preview": "SQL 结果集同步预览", - "data_sync.plan.migration_kernel_planning": "当前库对已进入迁移规划阶段,等待结构推断和目标方言生成支持", - "data_sync.plan.backend_summary": "后端计划摘要", - "data_sync.progress.stage.analysis_started": "差异分析开始", - "data_sync.progress.stage.analysis_completed": "差异分析完成", - "data_sync.progress.stage.sync_started": "开始同步", - "data_sync.progress.stage.connecting_source": "连接源数据库", - "data_sync.progress.stage.connecting_target": "连接目标数据库", - "data_sync.progress.stage.analyzing_table": "分析表({{current}}/{{total}})", - "data_sync.progress.stage.syncing_table": "同步表({{current}}/{{total}})", - "data_sync.progress.stage.table_completed": "表处理完成", - "data_sync.progress.stage.creating_target_table": "创建目标表", - "data_sync.progress.stage.syncing_schema": "同步表结构", - "data_sync.progress.stage.creating_indexes": "创建索引", - "data_sync.progress.stage.reading_source": "读取源表数据", - "data_sync.progress.stage.reading_target": "读取目标表数据", - "data_sync.progress.stage.comparing_diff": "对比差异", - "data_sync.progress.stage.clearing_target": "清空目标表", - "data_sync.progress.stage.checking_columns": "检查字段一致性", - "data_sync.progress.stage.applying_changes": "应用变更", - "data_sync.progress.stage.completed": "同步完成", - "data_sync.progress.stage.failed": "同步失败", - "data_sync.progress.stage.redis_keyspace_started": "开始 Redis 键空间迁移", - "data_sync.progress.stage.creating_target_collection": "创建目标集合", - "data_sync.progress.stage.migrating_key": "迁移 Key({{current}}/{{total}})", - "data_sync.progress.stage.mongodb_keyspace_started": "开始 MongoDB 键空间迁移", - "data_sync.progress.stage.migrating_collection": "迁移集合({{current}}/{{total}})", - "data_sync.progress.stage.collection_completed": "集合处理完成", - "data_sync.progress.stage.backend_update": "正在处理后端进度", - "data_sync.progress.stage.analyzing_diff": "差异分析", - "data_sync.progress.stage.executing": "执行中", - "data_sync.progress.stage.preparing": "准备开始", - "data_sync.query_mode.help": "请输入源查询 SQL,并选择一个目标表。差异分析会直接基于该结果集与目标表对比。", - "data_sync.result.completed": "同步完成", - "data_sync.result.failed": "同步失败", - "data_sync.result.failed_description": "同步未完成。", - "data_sync.result.failed_detail": "同步失败:{{detail}}", - "data_sync.result.running": "正在同步", - "data_sync.result.running_description": "当前阶段:{{stage}}{{table}}", - "data_sync.result.success_summary": "成功同步 {{tables}} 张表。插入:{{inserted}},更新:{{updated}}", - "data_sync.result.table_suffix": ",表:{{table}}", - "data_sync.section.migration_options": "迁移选项", - "data_sync.section.source_database": "源数据库", - "data_sync.section.sync_options": "同步选项", - "data_sync.section.target_database": "目标数据库", - "data_sync.title.source_database": "源数据库", - "data_sync.title.target_database": "目标数据库", - "data_sync.title.migration_options": "迁移选项", - "data_sync.title.sync_options": "同步选项", - "data_sync.title.execution_log": "执行日志", - "data_sync.step.configure": "配置源与目标", - "data_sync.step.result": "执行结果", - "data_sync.step.select_tables": "选择表", - "data_sync.table_picker.help": "请选择需要同步的表:", - "data_sync.table_picker.item_unit": "项", - "data_sync.table_picker.items_unit": "项", - "data_sync.table_picker.not_found": "暂无数据", - "data_sync.table_picker.search_placeholder": "搜索表...", - "data_sync.table_picker.selected_title": "已选表", - "data_sync.table_picker.show_same": "显示相同表", - "data_sync.table_picker.source_title": "源表", - "data_sync.transfer.source_tables": "??", - "data_sync.transfer.selected_tables": "已选表", - "data_sync.transfer.item_unit": "项", - "data_sync.transfer.items_unit": "项", - "data_sync.transfer.search_placeholder": "搜索表...", - "data_sync.transfer.empty": "暂无数据", - "data_sync.title.migration_description": "按源库到目标库完成建表、导入与风险预检。", - "data_sync.title.migration_workbench": "跨库迁移工作台", - "data_sync.title.sync_description": "按已有目标表完成差异对比、同步执行与结果确认。", - "data_sync.title.sync_workbench": "数据同步工作台", - "data_sync.title.migration": "跨数据源迁移", - "data_sync.title.sync": "数据同步", - "data_sync.validation.query_mode_data_only": "SQL 结果集同步仅支持只同步数据", - "data_sync.validation.single_target_table_required": "SQL 结果集同步需要选择一个目标表", - "data_sync.validation.source_query_required": "请输入源查询 SQL", - "data_sync.validation.table_required": "请选择至少一张表", - "data_sync.plan.use_existing_target_table": "使用已有目标表导入", - "data_sync.plan.missing_columns_auto_add": "补齐 {{count}} 个缺失字段后导入", - "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "源表未识别到可映射为 TDengine 首列的时间列,无法自动建表", - "data_sync.plan.redis_mongo_keyspace_import": "按 Redis Key 生成 MongoDB 文档导入", - "data_sync.plan.redis_mongo_target_collection_missing_manual": "目标集合不存在,需先手工创建", - "data_sync.plan.redis_mongo_target_collection_auto_create": "目标集合不存在,将自动创建集合后导入", - "data_sync.backend.summary.redis_mongo_planned_action": "迁移到集合 {{collection}}", - "data_sync.backend.summary.mongo_redis_planned_action": "迁移到 {{target}}", - "data_sync.plan.mongo_relational_kernel_planned": "当前库对已进入迁移规划阶段,等待结构推断和目标方言生成支持", - "data_sync.progress.stage.redis_mongo_creating_collection": "创建目标集合", - "data_sync.progress.stage.redis_mongo_migrating_key": "迁移 Key({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_migrating_collection": "迁移集合({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_collection_completed": "集合处理完成", - "data_sync.backend.error.apply_changes_unsupported": "目标驱动不支持应用数据变更", - "data_sync.backend.error.apply_source_query_changes_failed": "应用 SQL 结果集变更失败: {{detail}}", - "data_sync.backend.error.clear_target_failed": "清空目标表失败: {{detail}}", - "data_sync.backend.error.connect_source_mongodb_failed": "源 MongoDB 连接失败: {{detail}}", - "data_sync.backend.error.connect_source_redis_failed": "源 Redis 连接失败: {{detail}}", - "data_sync.backend.error.connect_target_mongodb_failed": "目标 MongoDB 连接失败: {{detail}}", - "data_sync.backend.error.connect_target_redis_failed": "目标 Redis 连接失败: {{detail}}", - "data_sync.backend.error.diff_composite_pk_unsupported": "复合主键 ({{columns}}) 不支持差异对比同步", - "data_sync.backend.error.diff_pk_required": "没有主键。差异对比同步不受支持;请使用 insert-only 或 full-overwrite 模式直接导入。", - "data_sync.backend.error.execute_source_query_failed": "执行源查询失败: {{detail}}", - "data_sync.backend.error.init_source_mongodb_driver_failed": "初始化源 MongoDB 驱动失败: {{detail}}", - "data_sync.backend.error.init_target_mongodb_driver_failed": "初始化目标 MongoDB 驱动失败: {{detail}}", - "data_sync.backend.error.inspect_mongodb_collection_failed": "检查目标 MongoDB collection 失败: {{detail}}", - "data_sync.backend.error.list_mongodb_collections_failed": "列出 MongoDB collection 失败: {{detail}}", - "data_sync.backend.error.load_target_columns_failed": "加载目标表字段失败: {{detail}}", - "data_sync.backend.error.mongo_document_write_unsupported": "目标驱动不支持写入 MongoDB document", - "data_sync.backend.error.mongo_redis_analyze_collection_failed": "分析 MongoDB collection {{collection}} 失败: {{detail}}", - "data_sync.backend.error.mongo_redis_document_key_missing": "MongoDB document 缺少 key 字段", - "data_sync.backend.error.mongo_redis_document_type_missing": "MongoDB document 缺少字段 {{field}},Redis Key={{key}}", - "data_sync.backend.error.mongo_redis_empty_target_value": "Redis Key {{key}} 的目标值为空", - "data_sync.backend.error.mongo_redis_unsupported_type": "Redis Key {{key}} 不支持类型 {{type}}", - "data_sync.backend.error.mongo_redis_value_invalid": "Redis Key {{key}} 的 {{type}} payload 无效;实际类型={{actual}}", - "data_sync.backend.error.mongo_redis_write_key_failed": "写入 Redis Key {{key}} 失败: {{detail}}", - "data_sync.backend.error.read_redis_key_failed": "读取 Redis Key {{key}} 失败: {{detail}}", - "data_sync.backend.error.read_source_table_failed": "读取源表失败: {{detail}}", - "data_sync.backend.error.read_target_redis_key_failed": "读取目标 Redis Key {{key}} 失败: {{detail}}", - "data_sync.backend.error.read_target_table_failed": "读取目标表失败: {{detail}}", - "data_sync.backend.error.redis_mongo_analyze_changes_failed": "分析 Redis 迁移变更失败: {{detail}}", - "data_sync.backend.error.redis_mongo_apply_changes_failed": "应用 Redis 迁移变更失败: {{detail}}", - "data_sync.backend.error.redis_mongo_build_changes_failed": "构建 Redis 迁移变更失败: {{detail}}", - "data_sync.backend.error.redis_mongo_create_collection_failed": "创建目标 MongoDB collection 失败: {{detail}}", - "data_sync.backend.error.scan_redis_keys_failed": "扫描 Redis Key 失败: {{detail}}", - "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "目标表为复合主键 ({{columns}}),不支持 SQL 结果集差异分析", - "data_sync.backend.error.target_table_columns_missing": "目标表 {{table}} 不存在或无法读取字段定义", - "data_sync.backend.result.mongo_redis_analyzed_collections": "已完成 {{count}} 个 MongoDB collection 的 Redis 迁移分析", - "data_sync.backend.result.mongo_redis_completed": "MongoDB keyspace 迁移完成;已处理 {{collections}} 个 collection 和 {{keys}} 个 Redis Key", - "data_sync.backend.result.mongo_redis_no_collections": "没有可迁移的 MongoDB collection", - "data_sync.backend.result.mongo_redis_no_documents": "没有可迁移的 MongoDB Redis document", - "data_sync.backend.result.redis_mongo_analyzed_keys": "已完成 {{count}} 个 Redis Key 的 MongoDB 迁移分析", - "data_sync.backend.result.redis_mongo_completed": "Redis keyspace 迁移完成;已处理 {{count}} 个 Redis Key", - "data_sync.backend.result.redis_mongo_no_keys": "没有可迁移的 Redis Key", - "data_sync.backend.summary.mongo_redis_diff": "执行时将插入 {{inserts}} 个 Redis Key,并更新 {{updates}} 个 Redis Key", - "data_sync.backend.summary.mongo_redis_empty_collection": "collection 中没有可迁移的 document", - "data_sync.backend.summary.mongo_redis_same_keys": "匹配的 Redis Key 已是最新", - "data_sync.backend.summary.mongo_redis_warning_document_format": "仅支持包含 key/type/ttl/value 字段的 document", - "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB 到 Redis 会将全量覆盖降级为增量同步,以避免删除 DB 中其他 Redis Key", - "data_sync.backend.summary.mongo_redis_warning_keyspace": "MongoDB collection 中的 document 将按 keyspace 语义写入 Redis", - "data_sync.backend.summary.redis_mongo_insert_document": "执行时将插入新的 MongoDB document", - "data_sync.backend.summary.redis_mongo_same_document": "匹配的 MongoDB document 已是最新", - "data_sync.backend.summary.redis_mongo_update_document": "执行时将更新现有 MongoDB document", - "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key 将写入为 MongoDB document", - "data_sync.plan.data_import_without_diff": "当前模式不进行差异对比,直接导入源表数据。", - "data_sync.plan.mongo_relational_entry_warning": "{{objectKind}} 从 {{sourceType}} 到 {{targetType}} 的迁移目前仅提供结构推断规划提示", - "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis 到 MongoDB 按 keyspace 语义迁移,不执行表结构检查", - "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Redis TTL 和 collection 排序语义会作为 document 字段保留,但可能无法完全等价", - "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "当前策略要求目标 MongoDB collection 已存在,执行时不会自动创建", - "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state 尚未迁移", - "data_sync.plan.target_missing_preview_unavailable": "目标表不存在,差异预览不可用。", - "data_sync.progress.stage.redis_mongo_started": "Redis 到 MongoDB keyspace 迁移开始", - "data_sync.progress.stage.mongo_redis_started": "MongoDB 到 Redis keyspace 迁移开始", - "data_sync.schema_inference.mongo_relational_issue": "{{sourceType}} -> {{targetType}} 的结构推断仍在开发中;目前仅提供迁移规划提示。", - "data_sync.schema_inference.mongo_relational_resolution": "后续迭代将从采样数据生成字段定义和类型降级策略。", - "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view 语义尚未自动迁移到 PG-like 目标", - "data_sync.backend.warning.auto_create_pair_unsupported": "自动建表目前仅支持 MySQL -> Kingbase;当前组合={{sourceType}} -> {{targetType}}", - "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "字段 {{column}} 类型 {{type}} 已降级为 json", - "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "字段 {{column}} 类型 {{type}} 已降级为 jsonb", - "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "字段 {{column}} enum 类型 {{type}} 已降级为 varchar(255)", - "data_sync.backend.warning.clickhouse_order_by_tuple_used": "未检测到源主键,ClickHouse 将使用 ORDER BY tuple();查询性能可能受影响", - "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse 不保留关系型外键或唯一约束语义;仅迁移字段和数据", - "data_sync.backend.warning.clickhouse_source_metadata_limited": "ClickHouse 源端索引和约束元数据有限;反向迁移以字段和数据为主", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "ClickHouse 源端未返回主键信息,目标 MySQL 表不会自动创建主键", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "ClickHouse 源端未返回主键信息,目标 PG-like 表不会自动创建主键", - "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "ClickHouse 目标建议使用 insert-only 或 full-overwrite;update/delete 语义与传统关系型数据库不同", - "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "字段 {{column}} 类型 {{type}} 没有专用 MySQL 映射,已降级为 text", - "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "字段 {{column}} 类型 {{type}} 没有专用 PG-like 映射,已降级为 text", - "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "字段 {{column}} 类型 {{type}} 已映射为 numeric(20,0),以避免 unsigned 溢出", - "data_sync.backend.warning.column_type_degraded_clickhouse_string": "字段 {{column}} 类型 {{type}} 已降级为 String", - "data_sync.backend.warning.column_type_empty_clickhouse_string": "字段 {{column}} 类型为空,已降级为 String", - "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "字段 {{column}} 为用户自定义类型,已降级为 String", - "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "字段 {{column}} 的 AUTO_INCREMENT 不会作为 ClickHouse 自增语义保留", - "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "字段 {{column}} 的二进制类型已降级为 String", - "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "字段 {{column}} 类型 {{type}} 已降级为 String", - "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "字段 {{column}} 类型 {{type}} 没有专用 ClickHouse 映射,已降级为 String", - "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "字段 {{column}} 的 identity/自增语义不会保留到 ClickHouse", - "data_sync.backend.warning.target_existing_only_required": "当前策略要求目标表已存在,执行时不会自动创建。", - "data_sync.backend.warning.target_exists_data_only_no_indexes": "目标表已存在。仅执行数据导入;不会自动重建现有索引和约束。", - "data_sync.backend.warning.target_missing_columns": "目标表缺少 {{count}} 个字段: {{columns}}", - "data_sync.backend.warning.target_table_existing_only_required": "当前策略要求目标表已存在,执行时不会自动创建。", - "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "源 ORDER BY/PARTITION/TTL/Projection/materialized-view 语义尚未自动迁移到 TDengine", - "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "源索引、外键、触发器、唯一约束和自增语义尚未自动迁移到 TDengine", - "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "源索引、外键、触发器、唯一约束、identity 和 sequence 语义尚未自动迁移到 TDengine", - "data_sync.unsupported.tdengine_source_relational_semantics": "TDengine 索引、外键、触发器、supertable、TTL 和其他时序语义尚未自动迁移", - "data_sync.unsupported.tdengine_target_missing_timestamp": "TDengine regular table 的第一列必须是 TIMESTAMP;当前源表没有可直接映射的时间字段", - "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "源 supertable、TAGS、TTL、retention policy 和索引语义尚未自动迁移到 TDengine regular table", - "data_sync.warning.target_exists_strategy_no_auto_create": "当前策略要求目标表已存在,执行时不会自动创建。", - "data_sync.warning.target_missing_columns": "目标表缺少 {{count}} 个字段: {{columns}}", - "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "TDengine 源目前不会自动为已有目标表补齐字段;请先确认目标结构", - "data_sync.warning.tdengine_source_mysql_type_fallback": "字段 {{column}} 类型 {{type}} 没有专用 MySQL 映射,已降级为 {{targetType}}", - "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "字段 {{column}} 类型 {{type}} 已映射为 {{targetType}},以避免 unsigned 溢出", - "data_sync.warning.tdengine_source_pglike_type_fallback": "字段 {{column}} 类型 {{type}} 没有专用 PG-like 映射,已降级为 {{targetType}}", - "data_sync.warning.tdengine_source_semantics_degraded": "TDengine 到关系型目标目前仅迁移字段和数据;supertable、TAG 关联、retention policy 和其他时序语义可能降级或丢失", - "data_sync.warning.tdengine_source_tag_column_degraded": "字段 {{column}} 是 TDengine TAG 列,将在关系型目标中降级为普通字段", - "data_sync.warning.tdengine_source_tag_column_mapped": "字段 {{column}} 是 TDengine TAG 列,已映射为普通字段", - "data_sync.warning.tdengine_target_auto_create_basic_table_only": "TDengine 目标 auto-create 目前仅创建基础表;索引、外键、触发器、supertable/TAGS/TTL 不会自动迁移", - "data_sync.warning.tdengine_target_auto_increment_not_migrated": "字段 {{column}} 的自增语义不会迁移到 TDengine", - "data_sync.warning.tdengine_target_binary_type_fallback": "字段 {{column}} 类型 {{type}} 已按字符串语义降级为 {{targetType}}", - "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "字段 {{column}} 类型 {{type}} 已提升为第一个 TDengine TIMESTAMP 字段", - "data_sync.warning.tdengine_target_empty_type_fallback": "字段 {{column}} 类型为空,已降级为 {{targetType}}", - "data_sync.warning.tdengine_target_enum_type_fallback": "字段 {{column}} enum 类型 {{type}} 已降级为 {{targetType}}", - "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "TDengine 目标目前不会自动为已有目标表补齐字段;请先确认目标结构", - "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "字段 {{column}} 的 FixedString 长度无法解析,已降级为 {{targetType}}", - "data_sync.warning.tdengine_target_identity_not_migrated": "字段 {{column}} 的自增/identity 语义不会迁移到 TDengine", - "data_sync.warning.tdengine_target_insert_only": "TDengine 目标目前仅支持 INSERT 写入;update/delete 差异将在执行时被拒绝", - "data_sync.warning.tdengine_target_json_regular_table_fallback": "字段 {{column}} 类型 {{type}} 在 TDengine regular table 中不保留 TAG 语义,已降级为 {{targetType}}", - "data_sync.warning.tdengine_target_json_tag_only_fallback": "字段 {{column}} 类型 {{type}} 已降级为 {{targetType}},因为 TDengine JSON 仅适用于 TAG", - "data_sync.warning.tdengine_target_missing_time_column": "源表没有可映射的时间字段,因此无法自动建表。继续前请手工准备 TDengine 目标表和时间字段。", - "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "字段 {{column}} 的主键语义不会作为关系约束迁移到 TDengine", - "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "字段 {{column}} 类型 {{type}} 没有专用 TDengine 同库映射,已降级为 {{targetType}}", - "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "字段 {{column}} 是 TDengine TAG 列,迁移到 regular table 后将降级为普通字段", - "data_sync.warning.tdengine_target_time_only_type_fallback": "字段 {{column}} 类型 {{type}} 没有稳定的 TDengine time-only 映射,已降级为 {{targetType}}", - "data_sync.warning.tdengine_target_timestamp_column_reordered": "TDengine 基础表要求时间字段在首列;字段 {{column}} 已移动到第一位", - "data_sync.warning.tdengine_target_type_fallback": "字段 {{column}} 类型 {{type}} 已降级为 {{targetType}}", - "data_sync.warning.tdengine_target_type_no_mapping_fallback": "字段 {{column}} 类型 {{type}} 没有专用 TDengine 映射,已降级为 {{targetType}}", - "data_sync.warning.tdengine_target_user_defined_type_fallback": "字段 {{column}} 为用户自定义类型,已降级为 {{targetType}}", - "data_sync.backend.error.analyze_prepare_secrets_failed": "准备数据同步分析密钥失败: {{detail}}", - "data_sync.backend.error.apply_changes_failed": "应用变更失败: {{detail}}", - "data_sync.backend.error.auto_add_column_failed": "自动补齐字段失败: 字段={{column}}, 错误={{detail}}", - "data_sync.backend.error.build_migration_plan_failed": "生成迁移计划失败: 表={{table}}, 错误={{detail}}", - "data_sync.backend.error.create_indexes_failed": "创建索引失败: 表={{table}}, 错误={{detail}}", - "data_sync.backend.error.create_table_sql_empty": "表 {{table}} 自动建表失败: 建表 SQL 为空", - "data_sync.backend.error.create_target_table_failed": "创建目标表失败: 表={{table}}, 错误={{detail}}", - "data_sync.backend.error.exec_ddl_statement_failed": "{{stage}}失败: SQL={{sql}}, 错误={{detail}}", - "data_sync.backend.error.mongo_read_source_samples_failed": "读取源 MongoDB collection 样本失败: {{detail}}", - "data_sync.backend.error.pre_create_table_sql_failed": "预执行建表 SQL 失败: 表={{table}}, 错误={{detail}}", - "data_sync.backend.error.prepare_secrets_failed": "准备数据同步密钥失败: {{detail}}", - "data_sync.backend.error.preview_failed": "数据同步预览失败: {{detail}}", - "data_sync.backend.error.preview_prepare_secrets_failed": "准备数据同步预览密钥失败: {{detail}}", - "data_sync.backend.error.read_source_table_failed_with_table": "读取源表 {{table}} 失败: {{detail}}", - "data_sync.backend.error.read_target_table_failed_with_table": "读取目标表 {{table}} 失败: {{detail}}", - "data_sync.backend.error.refresh_columns_after_create_failed": "创建目标表后加载字段失败: 表={{table}}, 错误={{detail}}", - "data_sync.backend.error.source_collection_no_migratable_fields": "源 MongoDB collection 未推断出可迁移字段: {{collection}}", - "data_sync.backend.error.source_table_columns_failed": "获取源表字段失败: {{detail}}", - "data_sync.backend.error.source_table_missing_or_no_columns": "源表不存在或无字段定义: {{table}}", - "data_sync.backend.error.sync_table_schema_failed": "同步表结构失败: 表={{table}}, 错误={{detail}}", - "data_sync.backend.error.target_collection_check_failed": "检查目标 MongoDB collection 失败: {{detail}}", - "data_sync.backend.error.target_table_columns_failed": "获取目标表字段失败: {{detail}}", - "data_sync.backend.label.content_data_only": "仅同步数据", - "data_sync.backend.label.content_schema_and_data": "同步结构+数据", - "data_sync.backend.label.content_schema_only": "仅同步结构", - "data_sync.backend.label.mode_full_overwrite": "全量覆盖", - "data_sync.backend.label.mode_insert_only": "仅插入", - "data_sync.backend.label.mode_insert_update": "增量同步", - "data_sync.backend.label.target_strategy_auto_create_if_missing": "目标缺失时自动创建", - "data_sync.backend.label.target_strategy_existing_only": "仅使用已有目标", - "data_sync.backend.label.target_strategy_smart": "智能处理目标", - "data_sync.backend.log.auto_add_columns_completed": "自动补齐字段完成: 成功={{succeeded}}, 失败={{failed}}", - "data_sync.backend.log.change_counts": "需插入 {{inserts}} 行,需更新 {{updates}} 行,需删除 {{deletes}} 行", - "data_sync.backend.log.connecting_source": "正在连接源数据库: {{host}}...", - "data_sync.backend.log.connecting_target": "正在连接目标数据库: {{host}}...", - "data_sync.backend.log.data_already_consistent": "数据一致,无需变更。", - "data_sync.backend.log.ddl_statement_succeeded": "表 {{table}} {{stage}}成功: {{sql}}", - "data_sync.backend.log.fatal_error": "致命错误: {{message}}", - "data_sync.backend.log.missing_columns_auto_add_disabled": "目标表缺少 {{count}} 个字段,但未开启自动补齐,将自动忽略: {{columns}}", - "data_sync.backend.log.missing_columns_auto_add_started": "目标表缺少 {{count}} 个字段,开始自动补齐: {{columns}}", - "data_sync.backend.log.mongo_redis_keyspace_options": "MongoDB 到 Redis keyspace 迁移;模式={{mode}};目标={{target}}", - "data_sync.backend.log.mongo_redis_migrating_key": "正在写入 Redis Key {{key}}", - "data_sync.backend.log.mongo_redis_syncing_collection": "正在同步 MongoDB collection {{collection}}", - "data_sync.backend.log.redis_mongo_keyspace_options": "Redis 到 MongoDB keyspace 迁移;模式={{mode}};目标策略={{strategy}}", - "data_sync.backend.log.redis_mongo_migrating_key": "正在迁移 Redis Key {{key}}", - "data_sync.backend.log.source_query_no_changes": "SQL 结果集与目标表一致,无需应用变更", - "data_sync.backend.log.source_query_sync_completed": "SQL 结果集同步完成: 插入={{inserts}}, 更新={{updates}}, 删除={{deletes}}", - "data_sync.backend.log.source_query_sync_source": "同步来源: SQL 结果集 -> 目标表 {{table}};模式: {{mode}}", - "data_sync.backend.log.sync_options": "同步内容: {{content}};模式: {{mode}};自动补字段: {{autoAddColumns}};目标表策略: {{targetTableStrategy}};创建索引: {{createIndexes}}", - "data_sync.backend.log.syncing_table": "正在同步表: {{table}}", - "data_sync.backend.log.table_no_operations_skipped": "表 {{table}} 未勾选任何操作,已跳过", - "data_sync.backend.log.target_table_created": "目标表创建成功: {{table}}", - "data_sync.backend.log.target_table_no_operations": "目标表 {{table}} 未勾选任何操作,已跳过", - "data_sync.backend.log.unknown_sync_content_data_only": "未知同步内容 {{content}},已自动使用仅同步数据", - "data_sync.backend.result.preview_ready": "数据同步预览已就绪", - "data_sync.backend.result.sync_completed": "同步完成: 表={{tables}}, 插入={{rowsInserted}}, 更新={{rowsUpdated}}, 删除={{rowsDeleted}}", - "data_sync.backend.warning.apply_changes_unsupported": "目标驱动不支持应用数据变更。", - "data_sync.backend.warning.auto_add_column_sql_generation_failed": "字段 {{column}} 自动补齐 SQL 生成失败: {{detail}}", - "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "字段 {{column}} 为自增列,补齐到已有目标表时不会自动补建 {{feature}}", - "data_sync.backend.warning.column_default_expression_skipped": "字段 {{column}} 的默认值 {{default}} 包含表达式,当前未自动迁移", - "data_sync.backend.warning.column_empty_string_default_not_preserved": "字段 {{column}} 的空字符串默认值未保留", - "data_sync.backend.warning.column_type_degraded": "字段 {{column}} 类型 {{sourceType}} 已降级为 {{targetType}}", - "data_sync.backend.warning.column_type_empty_degraded": "字段 {{column}} 类型为空,已降级为 {{targetType}}", - "data_sync.backend.warning.column_type_mapped": "字段 {{column}} 类型 {{sourceType}} 已映射为 {{targetType}}", - "data_sync.backend.warning.column_type_no_mapping_degraded": "字段 {{column}} 类型 {{sourceType}} 没有专用映射,已降级为 {{targetType}}", - "data_sync.backend.warning.column_user_defined_degraded": "字段 {{column}} 为用户自定义类型,已降级为 {{targetType}}", - "data_sync.backend.warning.composite_pk_skipped": "表 {{table}} 为复合主键 ({{columns}}),暂不支持差异同步,已跳过", - "data_sync.backend.warning.full_overwrite_clearing_target": "全量覆盖模式:即将清空目标表 {{table}}", - "data_sync.backend.warning.load_target_columns_skip_check_failed": "获取目标表字段失败,已跳过字段一致性检查: {{detail}}", - "data_sync.backend.warning.mongo_redis_document_format": "MongoDB 到 Redis 目前仅支持包含 key/type/ttl/value 字段的 document", - "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "MongoDB 到 Redis 迁移会将全量覆盖降级为增量同步", - "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "字段 {{column}} 为 unsigned bigint auto_increment,已降级为 {{targetType}},且不保留自增语义", - "data_sync.backend.warning.refresh_columns_after_add_failed": "补齐字段后刷新目标字段失败: 表={{table}}, 错误={{detail}}", - "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "Redis 到 MongoDB 迁移会将全量覆盖降级为增量同步", - "data_sync.backend.warning.source_indexes_read_failed": "读取源表索引失败,已跳过索引迁移: {{detail}}", - "data_sync.backend.warning.table_pk_required_skipped": "表 {{table}} 未找到主键,当前模式需要差异对比,已跳过", - "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "表 {{table}} 的目标表不存在,当前策略不允许自动建表,已跳过", - "data_sync.backend.warning.unknown_content_default_data": "未知同步内容 {{content}},已自动使用仅同步数据", - "data_sync.backend.warning.unknown_mode_default_insert_update": "未知同步模式 {{mode}},已自动使用增量同步", - "data_sync.plan.mongo_target_collection_missing_auto_create": "目标 MongoDB collection {{collection}} 不存在,将自动创建后导入。", - "data_sync.plan.mongo_target_collection_missing_manual_create": "目标 MongoDB collection {{collection}} 不存在,需先手工创建。", - "data_sync.schema_sync.error.create_statement_empty": "建表语句为空", - "data_sync.schema_sync.error.create_target_table_failed": "创建目标表 {{table}} 失败: {{detail}}", - "data_sync.schema_sync.error.get_columns_after_create_failed": "创建目标表 {{table}} 后获取字段失败: {{detail}}", - "data_sync.schema_sync.error.get_create_statement_failed": "获取源表 {{table}} 建表语句失败: {{detail}}", - "data_sync.schema_sync.error.get_source_columns_failed": "获取源表 {{table}} 字段失败: {{detail}}", - "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "目标表 {{table}} 不存在,源类型 {{sourceType}} 暂不支持自动建表: {{detail}}", - "data_sync.schema_sync.log.add_column_failed": "补齐字段失败: 表={{table}}, 字段={{column}}, 错误={{detail}}", - "data_sync.schema_sync.log.column_added": "已补齐字段: 表={{table}}, 字段={{column}}, 类型={{type}}", - "data_sync.schema_sync.log.completed": "表结构同步完成: {{table}},新增字段 {{count}} 个", - "data_sync.schema_sync.log.schema_aligned": "表结构一致: {{table}}", - "data_sync.schema_sync.log.target_created": "目标表创建成功: {{table}}", - "data_sync.schema_sync.log.target_missing_create": "目标表 {{table}} 不存在,开始尝试创建表结构", - "data_sync.schema_sync.warning.target_unsupported": "目标数据库类型={{targetType}} 暂不支持结构同步,已跳过表 {{table}}", - "data_sync.unsupported.mongo_index_columns_missing": "索引 {{name}} 缺少列定义,已跳过", - "data_sync.unsupported.mongo_index_create_command_failed": "索引 {{name}} 生成 MongoDB createIndexes 命令失败: {{detail}}", - "data_sync.unsupported.mongo_index_prefix_length": "索引 {{name}} 使用前缀长度,MongoDB 目标暂不支持等价迁移", - "data_sync.warning.mongo_field_mixed_bson_types": "字段 {{field}} 存在多种 BSON 值类型,已降级为兼容类型", - "data_sync.warning.mongo_index_type_normalized": "索引 {{name}} 类型={{type}} 将按普通索引迁移到 MongoDB", - "data_sync.warning.mongo_source_collection_index_read_failed": "读取源 MongoDB collection 索引失败,已跳过索引迁移: {{detail}}", - "data_sync.warning.mongo_source_empty_sample_id_only": "源 MongoDB collection 暂无样本数据,仅按 `_id` 生成基础主键列", - "data_sync.warning.mongo_source_primary_key_missing": "MongoDB 源 collection 未推断出稳定主键,目标表不会自动创建主键", - "data_sync.warning.mongo_source_table_index_read_failed": "读取源表索引失败,已跳过索引迁移: {{detail}}", - "data_sync.warning.mongo_target_collection_existing_only_required": "当前策略要求目标 MongoDB collection 已存在,执行时不会自动创建", - "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB 是弱结构目标,字段结构以写入 document 为准,不执行目标列检查", - "file.backend.dialog.export_connections": "导出连接", - "file.backend.dialog.export_data": "导出数据", - "file.backend.dialog.export_database_sql": "导出 {{database}} (SQL)", - "file.backend.dialog.export_query_result": "导出查询结果", - "file.backend.dialog.export_table": "导出 {{table}}", - "file.backend.dialog.export_tables_sql": "导出表 (SQL)", - "file.backend.dialog.import_data": "导入到 {{table}}", - "file.backend.dialog.select_config_file": "选择配置文件", - "file.backend.dialog.select_database_file": "选择数据库文件", - "file.backend.dialog.select_duckdb_file": "选择 DuckDB 数据文件", - "file.backend.dialog.select_sql_directory": "选择 SQL 目录", - "file.backend.dialog.select_sql_file": "选择 SQL 文件", - "file.backend.dialog.select_sqlite_file": "选择 SQLite 数据文件", - "file.backend.dialog.select_ssh_key_file": "选择 SSH 私钥文件", - "file.backend.html_export.document_title": "GoNavi 数据导出", - "file.backend.html_export.empty_rows": "(0 行)", - "file.backend.html_export.heading": "GoNavi 数据导出", - "file.backend.html_export.meta": "行数: {{rowCount}} · 列数: {{columnCount}} · 生成时间: {{generatedAt}}", - "file.backend.sql_dump.database": "数据库: {{database}}", - "file.backend.sql_dump.empty_rows": "(0 行)", - "file.backend.sql_dump.generated_at": "生成时间: {{generatedAt}}", - "file.backend.sql_dump.table": "表: {{objectName}}", - "file.backend.sql_dump.title": "GoNavi SQL 导出", - "file.backend.sql_dump.view": "视图: {{objectName}}", - "file.backend.sql_dump.view_data_skipped": "已跳过视图数据导出(不会为视图生成 INSERT)。", - "file.backend.error.batch_commit_unsupported": "当前数据库类型不支持批量提交", - "file.backend.error.connection_export_file_too_large": "连接导出文件过大", - "file.backend.error.connection_import_file_too_large": "连接导入文件过大", - "file.backend.error.connection_package_decrypt_failed": "文件密码错误或文件已损坏", - "file.backend.error.connection_package_password_required": "恢复包密码不能为空", - "file.backend.error.connection_package_payload_too_large": "连接恢复包内容过大", - "file.backend.error.connection_package_unsupported": "不支持的连接恢复包格式", - "file.backend.error.database_name_required": "数据库名称不能为空", - "file.backend.error.directory_path_required": "目录路径不能为空", - "file.backend.error.export_unsupported_format": "不支持的导出格式: {{format}}", - "file.backend.error.file_path_empty": "文件路径为空", - "file.backend.error.file_path_required": "文件路径不能为空", - "file.backend.error.import_file_empty": "文件路径不能为空", - "file.backend.error.import_csv_empty_or_missing_header": "CSV 为空或缺少标题行", - "file.backend.error.import_csv_open_failed": "无法打开 CSV: {{detail}}", - "file.backend.error.import_csv_read_failed": "无法读取 CSV: {{detail}}", - "file.backend.error.import_excel_empty_or_missing_header": "Excel 为空或缺少标题行", - "file.backend.error.import_excel_no_sheets": "Excel 文件没有工作表", - "file.backend.error.import_excel_parse_failed": "无法解析 Excel: {{detail}}", - "file.backend.error.import_excel_read_failed": "无法读取 Excel: {{detail}}", - "file.backend.error.import_json_parse_failed": "无法解析 JSON: {{detail}}", - "file.backend.error.import_json_root_not_array": "JSON 根必须是数组", - "file.backend.error.import_unsupported_format": "不支持的文件格式", - "file.backend.error.invalid_export_mode": "无效的导出模式", - "file.backend.error.mysql_workbench_no_connections": "未在 XML 中找到有效的连接配置", - "file.backend.error.mysql_workbench_parse_failed": "解析 MySQL Workbench XML 失败: {{detail}}", - "file.backend.error.open_file_failed": "无法打开文件: {{detail}}", - "file.backend.error.query_required": "查询语句不能为空", - "file.backend.error.read_file_error_summary": "文件读取错误: {{detail}}。已执行 {{count}} 条。", - "file.backend.error.read_file_info_failed": "无法读取文件信息: {{detail}}", - "file.backend.error.selected_path_not_directory": "所选路径不是目录", - "file.backend.error.selected_path_not_sql_file": "所选路径不是 SQL 文件", - "file.backend.error.select_with_query_required": "仅支持 SELECT/WITH 查询导出", - "file.backend.error.task_not_found": "未找到该任务", - "file.backend.error.table_data_batch_limit": "单次最多处理 {{max}} 张表,当前选中 {{count}} 张", - "file.backend.error.table_data_clear_failed": "清空 {{table}} 失败: {{detail}}", - "file.backend.error.table_data_clear_failed_partial": "清空 {{table}} 失败: {{detail}}(注意:前 {{count}} 张表已清空且无法恢复)", - "file.backend.error.table_data_mode_unsupported": "不支持的表数据清理模式: {{mode}}", - "file.backend.error.table_data_no_tables": "未指定要处理的表", - "file.backend.error.table_data_truncate_failed": "截断 {{table}} 失败: {{detail}}", - "file.backend.error.table_data_truncate_failed_partial": "截断 {{table}} 失败: {{detail}}(注意:前 {{count}} 张表已截断且无法恢复)", - "file.backend.error.table_data_truncate_unsupported": "当前数据库类型 {{type}} 不支持截断表,请改用清空表", - "file.backend.error.write_failed": "写入失败: {{detail}}", - "file.backend.message.cancel_requested": "已发送取消请求", - "file.backend.message.execution_cancelled": "执行已中止。已执行 {{executed}} 条,失败 {{failed}} 条,耗时 {{duration}}。", - "file.backend.message.execution_completed": "执行完成。成功 {{success}} 条,失败 {{failed}} 条,耗时 {{duration}}。", - "file.backend.message.execution_error_detail_header": "错误详情(前 {{count}} 条):", - "file.backend.message.execution_more_errors": "...还有 {{count}} 条错误未显示", - "file.backend.message.export_completed": "导出完成", - "file.backend.message.import_no_data": "无可导入数据", - "file.backend.message.import_row_failed": "第 {{index}} 行导入失败: {{detail}}", - "file.backend.message.import_summary": "已导入: {{imported}}, 失败: {{failed}}", - "file.backend.message.statement_failed": "第 {{index}} 条语句执行失败: {{detail}}\n SQL: {{sql}}", - "file.backend.message.table_data_clear_succeeded": "清空成功", - "file.backend.message.table_data_truncate_succeeded": "截断成功", - "file.backend.message.transaction_committed": "事务提交成功", - "file.backend.message.user_cancelled": "用户取消执行", - "file.backend.filter.all_files": "所有文件", - "file.backend.filter.all_files_pattern": "所有文件 (*.*)", - "file.backend.filter.connection_package": "GoNavi 连接包 (*.gonavi-conn)", - "file.backend.filter.database_files": "数据库文件", - "file.backend.filter.data_files": "数据文件", - "file.backend.filter.duckdb_files": "DuckDB 文件", - "file.backend.filter.json_files": "JSON 文件 (*.json)", - "file.backend.filter.mysql_workbench_connections": "MySQL Workbench 连接 (*.xml)", - "file.backend.filter.private_key_files": "私钥文件", - "file.backend.filter.sql_files": "SQL 文件 (*.sql)", - "file.backend.filter.sqlite_files": "SQLite 文件", - "ai_service.backend.message.provider_test_success": "端点连通性测试成功", - "ai_service.backend.error.provider_test_failed": "连接测试失败: {{detail}}", - "ai_service.backend.error.provider_auth_failed": "API Key 无效或请求被拒绝 (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_status_failed": "接口返回异常状态 (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_server_error": "上游服务器返回内部错误 (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_request_create_failed": "创建请求失败: {{detail}}", - "ai_service.backend.error.provider_request_serialize_failed": "序列化请求失败: {{detail}}", - "ai_service.backend.error.provider_secret_read_failed": "读取 Provider secret 失败: {{detail}}", - "ai_service.backend.error.provider_secret_save_failed": "保存 Provider secret 失败: {{detail}}", - "ai_service.backend.error.provider_secret_saved_read_failed": "读取已保存 Provider secret 失败: {{detail}}", - "ai_service.backend.error.provider_secret_delete_failed": "删除 Provider secret 失败: {{detail}}", - "ai_service.backend.error.provider_secret_load_failed": "加载 AI Provider secret 失败(provider={{provider}}): {{detail}}", - "ai_service.backend.error.config_rewrite_failed": "重写 AI 配置失败: {{detail}}", - "ai_service.backend.error.config_read_failed": "读取 AI 配置失败: {{detail}}", - "ai_service.backend.error.config_load_failed": "加载 AI 配置失败: {{detail}}", - "ai_service.backend.error.config_serialize_failed": "序列化 AI 配置失败: {{detail}}", - "ai_service.backend.error.config_dir_create_failed": "创建配置目录失败: {{detail}}", - "ai_service.backend.error.config_write_failed": "写入 AI 配置失败: {{detail}}", - "ai_service.backend.error.daily_secret_store_unavailable": "日常密文存储不可用: {{detail}}", - "ai_service.backend.error.secret_store_unavailable": "密文存储不可用: {{detail}}", - "ai_service.backend.error.provider_secret_bundle_parse_failed": "解析 provider secret bundle 失败: {{detail}}", - "ai_service.backend.error.models_request_create_failed": "创建模型列表请求失败: {{detail}}", - "ai_service.backend.error.models_request_failed": "请求模型列表失败: {{detail}}", - "ai_service.backend.error.models_http_status_failed": "模型列表接口返回异常状态 (HTTP {{status}}){{body}}", - "ai_service.backend.error.models_parse_failed": "解析模型列表失败: {{detail}}", - "ai_service.backend.error.active_provider_not_found": "未找到活跃 AI Provider", - "ai_service.backend.error.editable_provider_not_found": "未找到要编辑的 AI Provider: {{detail}}", - "ai_service.backend.error.provider_not_configured": "未配置 AI Provider,请先在设置中配置。", - "ai_service.backend.error.volcengine_coding_models_empty": "当前接口未返回可用的火山 Coding Plan 模型,请检查账号权限或切换到“火山方舟”供应商", - "ai_service.backend.error.session_missing": "会话不存在", - "ai_service.backend.error.session_corrupt": "会话数据损坏", - "ai_service.backend.error.sessions_dir_create_failed": "创建 sessions 目录失败: {{detail}}", - "ai_service.backend.error.session_serialize_failed": "序列化会话数据失败: {{detail}}", - "ai_service.backend.error.session_write_failed": "保存会话失败: {{detail}}", - "ai_service.backend.error.session_delete_failed": "删除会话失败: {{detail}}", - "ai_service.backend.warning.sql_drop": "高危 SQL:DROP 语句将永久删除数据库对象", - "ai_service.backend.warning.sql_truncate": "高危 SQL:TRUNCATE 将清空表中所有数据", - "ai_service.backend.warning.sql_delete_without_where": "高危 SQL:DELETE 语句缺少 WHERE 条件,将删除所有数据", - "ai_service.backend.warning.sql_update_without_where": "高危 SQL:UPDATE 语句缺少 WHERE 条件,将更新所有记录", - "jvm_monitoring_charts.title.heap": "堆内存", - "jvm_monitoring_charts.title.gc": "垃圾回收", - "jvm_monitoring_charts.title.threads": "线程", - "jvm_monitoring_charts.title.classes": "类加载", - "jvm_monitoring_charts.empty.heap.no_samples": "暂无堆内存采样数据", - "jvm_monitoring_charts.empty.heap.metric_unavailable": "当前监控来源未提供堆内存指标", - "jvm_monitoring_charts.empty.gc.no_samples": "暂无垃圾回收采样数据", - "jvm_monitoring_charts.empty.gc.metric_unavailable": "当前监控来源未提供垃圾回收指标", - "jvm_monitoring_charts.empty.threads.no_samples": "暂无线程采样数据", - "jvm_monitoring_charts.empty.threads.metric_unavailable": "当前监控来源未提供线程指标", - "jvm_monitoring_charts.empty.classes.no_samples": "暂无类加载采样数据", - "jvm_monitoring_charts.empty.classes.metric_unavailable": "当前监控来源未提供类加载指标", - "jvm_monitoring_charts.legend.heap_used": "堆内存已使用", - "jvm_monitoring_charts.legend.heap_committed": "堆内存已提交", - "jvm_monitoring_charts.legend.gc_count": "垃圾回收次数", - "jvm_monitoring_charts.legend.gc_time_ms": "垃圾回收耗时(ms)", - "jvm_monitoring_charts.legend.thread_count": "线程数", - "jvm_monitoring_charts.legend.daemon_thread_count": "守护线程数", - "jvm_monitoring_charts.legend.peak_thread_count": "线程峰值", - "jvm_monitoring_charts.legend.loaded_classes": "已加载类", - "jvm_monitoring_charts.legend.unloaded_classes": "已卸载类", - "jvm_monitoring_status_cards.title.heap": "堆内存", - "jvm_monitoring_status_cards.title.gc_pressure": "垃圾回收压力", - "jvm_monitoring_status_cards.title.threads": "线程", - "jvm_monitoring_status_cards.title.classes": "类加载", - "jvm_monitoring_status_cards.meta.heap_committed": "已提交 {{value}}", - "jvm_monitoring_status_cards.meta.waiting_samples": "等待采样", - "jvm_monitoring_status_cards.meta.gc_total_time": "累计 {{value}}", - "jvm_monitoring_status_cards.meta.thread_peak": "峰值 {{value}}", - "jvm_monitoring_status_cards.status.sampling": "采样中", - "jvm_monitoring_status_cards.status.stopped": "未运行", - "jvm_monitoring_status_cards.thread_state.runnable_count": "可运行 {{count}}", - "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "排障指标", - "jvm_monitoring_detail_panel.title.thread_state_distribution": "线程状态分布", - "jvm_monitoring_detail_panel.title.recent_gc_details": "最近垃圾回收明细", - "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "能力与降级", - "jvm_monitoring_detail_panel.field.process_cpu": "进程 CPU", - "jvm_monitoring_detail_panel.field.system_cpu": "系统 CPU", - "jvm_monitoring_detail_panel.field.process_physical_memory": "进程物理内存", - "jvm_monitoring_detail_panel.field.process_virtual_memory": "进程虚拟内存", - "jvm_monitoring_detail_panel.memory_missing.title": "进程物理内存缺失原因", - "jvm_monitoring_detail_panel.memory_missing.jmx": "JMX 连接未暴露进程驻留物理内存属性,当前只能读取进程虚拟内存指标;如需进程物理内存,请切换到 HTTP 端点或增强代理采集。", - "jvm_monitoring_detail_panel.memory_missing.default": "当前监控来源未返回进程驻留物理内存指标;请确认 HTTP 端点或增强代理已采集并上报进程物理内存。", - "jvm_monitoring_detail_panel.empty.thread_states": "暂无线程状态采样", - "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "当前监控来源未提供事件级垃圾回收数据", - "jvm_monitoring_detail_panel.empty.recent_gc_events": "最近窗口暂无垃圾回收事件", - "jvm_monitoring_detail_panel.gc.before": "回收前", - "jvm_monitoring_detail_panel.gc.after": "回收后", - "jvm_monitoring_presentation.metric.heap_used": "堆内存", - "jvm_monitoring_presentation.metric.heap_non_heap": "非堆内存", - "jvm_monitoring_presentation.metric.gc_count": "垃圾回收次数", - "jvm_monitoring_presentation.metric.gc_time": "垃圾回收耗时", - "jvm_monitoring_presentation.metric.gc_events": "最近垃圾回收事件", - "jvm_monitoring_presentation.metric.thread_count": "线程数", - "jvm_monitoring_presentation.metric.thread_states": "线程状态", - "jvm_monitoring_presentation.metric.class_loading": "类加载", - "jvm_monitoring_presentation.metric.cpu_process": "进程 CPU", - "jvm_monitoring_presentation.metric.cpu_system": "系统 CPU", - "jvm_monitoring_presentation.metric.memory_rss": "进程物理内存", - "jvm_monitoring_presentation.metric.memory_virtual": "进程虚拟内存", - "jvm_monitoring_presentation.thread_state.new": "新建", - "jvm_monitoring_presentation.thread_state.runnable": "可运行", - "jvm_monitoring_presentation.thread_state.blocked": "阻塞", - "jvm_monitoring_presentation.thread_state.waiting": "等待中", - "jvm_monitoring_presentation.thread_state.timed_waiting": "限时等待", - "jvm_monitoring_presentation.thread_state.terminated": "已终止", - "jvm_monitoring_presentation.availability.missing_metrics": "缺失指标:{{metrics}}", - "jvm_monitoring_presentation.availability.provider_warnings": "监控来源告警:{{warnings}}", - "jvm_monitoring_presentation.availability.no_obvious_degradation": "当前监控会话未发现明显降级。", - "jvm_change_preview_modal.title": "JVM 变更预览", - "jvm_change_preview_modal.status.no_preview": "暂无预览结果", - "jvm_change_preview_modal.status.generated": "预览已生成", - "jvm_change_preview_modal.action.confirm_execute": "确认执行", - "jvm_change_preview_modal.action.close": "关闭", - "jvm_change_preview_modal.section.summary": "变更摘要", - "jvm_change_preview_modal.section.before": "变更前", - "jvm_change_preview_modal.section.after": "变更后", - "jvm_change_preview_modal.field.resource_id": "资源 ID", - "jvm_change_preview_modal.field.version": "版本", - "jvm_change_preview_modal.field.format": "格式", - "jvm_change_preview_modal.risk.label": "风险 {{level}}", - "jvm_change_preview_modal.risk.low": "低", - "jvm_change_preview_modal.risk.medium": "中", - "jvm_change_preview_modal.risk.high": "高", - "jvm_change_preview_modal.risk.unknown": "未知", - "jvm_change_preview_modal.permission.requires_confirmation": "需要确认", - "jvm_change_preview_modal.permission.allowed": "允许执行", - "jvm_change_preview_modal.permission.forbidden": "禁止执行", - "jvm_change_preview_modal.blocking.label": "阻断原因", - "jvm_change_preview_modal.blocking.alert_message": "当前变更不可执行", - "jvm_diagnostic.completion.category.observe": "观察类命令", - "jvm_diagnostic.completion.category.trace": "跟踪类命令", - "jvm_diagnostic.completion.category.mutating": "高风险命令", - "jvm_diagnostic.completion.category.control": "控制命令", - "jvm_diagnostic.completion.preset.category.observe": "观察类命令", - "jvm_diagnostic.completion.preset.category.trace": "跟踪类命令", - "jvm_diagnostic.completion.preset.category.mutating": "高风险命令", - "jvm_diagnostic.completion.preset.thread-top.documentation": "查看最繁忙线程,快速定位阻塞或高 CPU 线程。", - "jvm_diagnostic.completion.preset.dashboard.documentation": "查看 JVM 运行总览。", - "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "跟踪慢方法调用路径。", - "jvm_diagnostic.completion.preset.watch-return.documentation": "观察入参与返回值。", - "jvm_diagnostic.completion.preset.ognl-sample.documentation": "高风险表达式命令,默认只作示意。", - "jvm_diagnostic.completion.command.dashboard.documentation": "查看 JVM 运行总览。", - "jvm_diagnostic.completion.command.jvm.documentation": "查看 JVM 内存、线程、类加载、GC 和运行参数信息。", - "jvm_diagnostic.completion.command.thread.documentation": "查看热点线程、线程栈和阻塞线程。", - "jvm_diagnostic.completion.command.sc.documentation": "搜索匹配类信息。", - "jvm_diagnostic.completion.command.sm.documentation": "查看类的方法签名。", - "jvm_diagnostic.completion.command.jad.documentation": "反编译指定类。", - "jvm_diagnostic.completion.command.sysprop.documentation": "查看系统属性。", - "jvm_diagnostic.completion.command.sysenv.documentation": "查看环境变量。", - "jvm_diagnostic.completion.command.classloader.documentation": "查看类加载器信息。", - "jvm_diagnostic.completion.command.trace.documentation": "跟踪方法调用耗时路径。", - "jvm_diagnostic.completion.command.watch.documentation": "观察入参、返回值或异常。", - "jvm_diagnostic.completion.command.stack.documentation": "输出方法调用栈。", - "jvm_diagnostic.completion.command.monitor.documentation": "周期性统计方法调用。", - "jvm_diagnostic.completion.command.tt.documentation": "方法时光隧道,记录和回放调用。", - "jvm_diagnostic.completion.command.ognl.documentation": "执行 OGNL 表达式,默认需要额外授权。", - "jvm_diagnostic.completion.command.vmtool.documentation": "直接操作 JVM 对象或执行 VMTool 动作。", - "jvm_diagnostic.completion.command.redefine.documentation": "重新定义类字节码。", - "jvm_diagnostic.completion.command.retransform.documentation": "重新触发类转换。", - "jvm_diagnostic.completion.command.stop.documentation": "停止当前后台任务。", - "jvm_diagnostic.completion.detail.execute_directly": "直接执行", - "jvm_diagnostic.completion.detail.thread_option": "线程参数", - "jvm_diagnostic.completion.detail.class_search_template": "类搜索模板", - "jvm_diagnostic.completion.detail.method_search_template": "方法搜索模板", - "jvm_diagnostic.completion.detail.decompile_template": "反编译模板", - "jvm_diagnostic.completion.detail.system_property_template": "系统属性模板", - "jvm_diagnostic.completion.detail.environment_variable_template": "环境变量模板", - "jvm_diagnostic.completion.detail.classloader_template": "类加载器模板", - "jvm_diagnostic.completion.detail.trace_template": "跟踪模板", - "jvm_diagnostic.completion.detail.trace_option": "跟踪参数", - "jvm_diagnostic.completion.detail.watch_template": "观察模板", - "jvm_diagnostic.completion.detail.watch_option": "观察参数", - "jvm_diagnostic.completion.detail.stack_template": "调用栈模板", - "jvm_diagnostic.completion.detail.monitor_template": "监控模板", - "jvm_diagnostic.completion.detail.time_tunnel_template": "时光隧道模板", - "jvm_diagnostic.completion.detail.high_risk_template": "高风险模板", - "jvm_diagnostic.completion.argument.command_template.label": "{{command}} 模板", - "jvm_diagnostic.completion.argument.detail_mode_d.label": "详细模式 (-d)", - "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", - "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "查看当前 JVM 运行总览。", - "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", - "jvm_diagnostic.completion.argument.jvm.direct.documentation": "查看 JVM 内存、线程、类加载、GC 和运行参数信息。", - "jvm_diagnostic.completion.argument.thread.busy_top.label": "繁忙线程 TOP N (-n)", - "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "查看 CPU 最繁忙的前 N 个线程。", - "jvm_diagnostic.completion.argument.thread.blocking.label": "阻塞线程 (-b)", - "jvm_diagnostic.completion.argument.thread.blocking.documentation": "查找当前阻塞其他线程的线程。", - "jvm_diagnostic.completion.argument.thread.thread_id.label": "指定线程 ID", - "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "查看指定线程的详细栈信息。", - "jvm_diagnostic.completion.argument.sc.class_pattern.label": "类匹配模板", - "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "按类名模式搜索。", - "jvm_diagnostic.completion.argument.sc.detail.documentation": "输出类的详细信息。", - "jvm_diagnostic.completion.argument.sm.method_signature.label": "方法签名模板", - "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "查看类的方法签名。", - "jvm_diagnostic.completion.argument.sm.detail.documentation": "输出方法详细签名。", - "jvm_diagnostic.completion.argument.jad.template.label": "反编译模板", - "jvm_diagnostic.completion.argument.jad.template.documentation": "反编译指定类。", - "jvm_diagnostic.completion.argument.sysprop.property.label": "查看属性", - "jvm_diagnostic.completion.argument.sysprop.property.documentation": "读取指定系统属性。", - "jvm_diagnostic.completion.argument.sysenv.variable.label": "查看环境变量", - "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "读取指定环境变量。", - "jvm_diagnostic.completion.argument.classloader.tree.label": "树形视图 (-t)", - "jvm_diagnostic.completion.argument.classloader.tree.documentation": "输出类加载器树形结构。", - "jvm_diagnostic.completion.argument.classloader.url_stat.label": "全部 URL 统计 (--url-stat)", - "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "查看类加载器 URL 统计。", - "jvm_diagnostic.completion.argument.classloader.hash.label": "指定类加载器 Hash", - "jvm_diagnostic.completion.argument.classloader.hash.documentation": "查看指定类加载器详情。", - "jvm_diagnostic.completion.argument.trace.template.documentation": "跟踪慢方法调用链路。", - "jvm_diagnostic.completion.argument.trace.condition.label": "条件过滤 '#cost > 100'", - "jvm_diagnostic.completion.argument.trace.condition.documentation": "追加 trace 条件表达式。", - "jvm_diagnostic.completion.argument.watch.template.documentation": "观察入参、返回值或异常。", - "jvm_diagnostic.completion.argument.watch.expand_depth.label": "展开层级 -x 2", - "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "设置对象展开层级。", - "jvm_diagnostic.completion.argument.stack.template.documentation": "输出方法调用栈。", - "jvm_diagnostic.completion.argument.monitor.template.documentation": "按周期统计方法调用情况。", - "jvm_diagnostic.completion.argument.tt.record.label": "tt 录制模板", - "jvm_diagnostic.completion.argument.tt.record.documentation": "录制指定方法调用。", - "jvm_diagnostic.completion.argument.tt.list.label": "查看记录列表 (-l)", - "jvm_diagnostic.completion.argument.tt.list.documentation": "查看当前录制列表。", - "jvm_diagnostic.completion.argument.tt.replay.label": "回放记录 (-i)", - "jvm_diagnostic.completion.argument.tt.replay.documentation": "查看指定记录详情。", - "jvm_diagnostic.completion.argument.ognl.template.documentation": "执行 OGNL 表达式,高风险命令默认受策略限制。", - "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", - "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "获取指定类实例,高风险命令默认受策略限制。", - "jvm_diagnostic.completion.argument.redefine.template.documentation": "重新定义类字节码文件路径。", - "jvm_diagnostic.completion.argument.retransform.template.documentation": "重新转换指定类。", - "jvm_diagnostic.completion.argument.stop.direct.label": "stop", - "jvm_diagnostic.completion.argument.stop.direct.documentation": "停止当前后台任务。", - "app.about.action.open_install_directory": "打开安装目录", - "app.about.action.install_update": "安装更新", - "app.about.action.hide_to_background": "隐藏到后台", - "app.about.download_progress.title": "下载更新", - "app.about.download_progress.title_with_version": "下载更新 {{version}}", - "app.about.update_status.not_checked": "未检查", - "app.about.update_status.checking": "正在检查更新...", - "app.about.update_status.check_failed": "检查更新失败: {{error}}", - "app.about.update_status.new_version_downloaded": "发现新版本 {{version}}(已下载,请点击“下载进度”后安装)", - "app.about.update_status.new_version_not_downloaded": "发现新版本 {{version}}(未下载)", - "app.about.update_status.latest": "当前已是最新版本({{version}})", - "app.about.message.update_package_ready": "更新包已就绪({{version}})", - "app.about.message.update_package_ready_with_path": "更新包已就绪({{version}}),路径:{{path}}", - "app.about.message.download_completed": "更新下载完成", - "app.about.message.download_completed_with_path": "更新下载完成,更新包路径:{{path}}", - "app.about.message.download_failed_with_error": "更新下载失败: {{error}}", - "app.about.message.install_directory_opened_manual_replace": "已打开安装目录,请手动完成替换", - "app.about.message.open_install_directory_failed_with_error": "打开安装目录失败: {{error}}", - "app.about.message.install_failed_with_error": "更新安装失败: {{error}}", - "app.about.message.check_failed_with_error": "检查更新失败: {{error}}", - "app.about.message.new_version_found": "发现新版本 {{version}}", - "app.theme.font_family.title": "字体族", - "app.theme.font_family.ui_title": "界面字体 (UI Font Family)", - "app.theme.font_family.mono_title": "代码字体 (Mono Font Family)", - "app.theme.font_family.load_failed": "加载系统字体失败", - "app.theme.font_family.load_failed_fallback": "系统字体加载失败,当前回退常见字体预置:{{error}}", - "app.theme.font_family.loaded_ui_hint": "已读取当前系统 {{count}} 个字体族,支持输入搜索匹配。清空后回退默认 UI 字体。", - "app.theme.font_family.loading_ui_hint": "按当前系统实时加载已安装字体,支持输入搜索匹配。清空后回退默认 UI 字体。", - "app.theme.font_family.mono_fallback_hint": "当前已回退常见代码字体预置。作用于 SQL 编辑器、AI 代码块、日志、DDL 与数据表等宽内容。", - "app.theme.font_family.mono_hint": "优先展示当前系统已安装字体,名称接近 Mono/Code/Console 的字体会靠前。作用于 SQL 编辑器、AI 代码块、日志、DDL 与数据表等宽内容。", - "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux 未检测到中文 CJK 字体,界面可能显示方框。请安装:", - "app.theme.font_family.linux_cjk_install_suffix": ",然后重启 GoNavi。", - "app.linux_cjk_font_banner.title": "Linux CJK 字体缺失", - "app.linux_cjk_font_banner.description": "中文可能显示为方框。请安装字体后重启 GoNavi:", - "app.linux_cjk_font_banner.action.open_font_settings": "字体设置", - "app.theme.data_table.density": "表格密度", - "app.theme.data_table.density.comfortable": "舒适", - "app.theme.data_table.density.standard": "标准", - "app.theme.data_table.density.compact": "紧凑", - "app.theme.data_table.density_hint": "控制行高、列宽和内边距。舒适适合大屏细看;紧凑适合最大化信息密度。已手动拖拽的列宽优先保留。", - "app.theme.data_table.font_size": "数据表字体大小", - "app.theme.data_table.sidebar_tree_font_size": "左侧库表字体大小", - "app.theme.data_table.follow_global": "跟随全局", - "ai_settings.message.load_provider_failed": "读取供应商配置失败", - "data_sync.field.schema": "模式", - "data_sync.message.fetch_target_schemas_failed_detail": "获取目标模式失败: {{detail}}", - "data_sync.message.select_target_schema": "请选择目标模式", - "connection_modal.field.readOnly.label": "生产连接保护", - "connection_modal.field.readOnly.help": "启用后当前连接仅允许查询,禁止导入、结构变更、数据写入和作为同步目标。", - "connection_modal.field.readOnly.checkbox": "标记为生产连接,只允许查询", - "query_editor.message.connection_readonly_blocked": "当前连接已启用生产保护,仅允许执行查询操作。", - "query_editor.results_panel.message.action.copy": "复制", - "query_editor.results_panel.message.copy_unsupported": "当前环境不支持复制到剪贴板", - "query_editor.results_panel.message.copy_failed": "复制消息失败:{{detail}}", "ai_chat.builtin_tools.database.execute_sql.desc": "执行 SQL 查询并返回结果", "ai_chat.builtin_tools.database.execute_sql.detail": "传入 connectionId、dbName 和 sql,在目标数据库上执行 SQL 并返回结果(最多 50 行)。受安全级别控制,只读模式下仅允许 SELECT/SHOW/DESCRIBE。", "ai_chat.builtin_tools.database.execute_sql.parameters.connectionId.description": "连接ID", @@ -5037,7 +178,38 @@ "ai_chat.builtin_tools.flows.upstream_request.title": "追踪 AI 上游请求", "ai_chat.builtin_tools.flows.workspace_tabs.description": "适合先看当前打开了哪些 SQL / 表 / 命令页签,再切到目标页签继续做字段核对、对比分析和只读验证。", "ai_chat.builtin_tools.flows.workspace_tabs.title": "盘点当前工作区", + "ai_chat.composer_notice.missing_model.description": "打开下方模型下拉并选择模型;如果列表为空,请检查供应商入口和 API Key。", + "ai_chat.composer_notice.missing_model.title": "先选择一个模型", + "ai_chat.composer_notice.missing_provider.description": "先在 AI 设置里添加并启用一个模型供应商。", + "ai_chat.composer_notice.missing_provider.title": "还没有可用供应商", + "ai_chat.composer_notice.model_fetch_failed.default_description": "请检查供应商入口、API Key 或账号权限,然后重新打开模型下拉。", + "ai_chat.composer_notice.model_fetch_failed.detail_description": "供应商返回:{{detail}}", + "ai_chat.composer_notice.model_fetch_failed.title": "模型列表加载失败", + "ai_chat.header.action.export": "导出", + "ai_chat.header.default_session_title": "新对话", + "ai_chat.header.export_time": "导出时间:", + "ai_chat.header.export_user": "你", + "ai_chat.header.mode_tabs.aria_label": "AI 工作模式", + "ai_chat.header.mode.chat": "对话", + "ai_chat.header.mode.history": "历史", + "ai_chat.header.mode.insights": "自动洞察", + "ai_chat.header.session.connected": "{{title}} · 已连接", + "ai_chat.header.tooltip.close": "关闭面板", + "ai_chat.header.tooltip.export_markdown": "导出为 Markdown", + "ai_chat.header.tooltip.history": "历史会话", + "ai_chat.header.tooltip.new_chat": "新对话", + "ai_chat.header.tooltip.new_chat_clear": "新对话(清空当前)", + "ai_chat.header.tooltip.settings": "AI 设置", + "ai_chat.history.action.new_chat": "开启新对话", + "ai_chat.history.default_session_title": "新对话", "ai_chat.history.empty.no_history": "还没有历史对话", + "ai_chat.history.empty.no_matches": "暂无匹配的对话记录", + "ai_chat.history.search.placeholder": "搜索历史记录...", + "ai_chat.history.title": "对话历史", + "ai_chat.history.tooltip.collapse": "收起", + "ai_chat.history.tooltip.delete": "删除", + "ai_chat.input.action.send": "发送", + "ai_chat.input.action.stop": "停止生成", "ai_chat.input.attachment.excel.worksheet_header": "[工作表: {{sheetName}}]", "ai_chat.input.attachment.kind.document": "文件", "ai_chat.input.attachment.kind.excel": "Excel", @@ -5069,8 +241,10 @@ "ai_chat.input.attachment.warning.too_large": "文件超过 {{size}},已附加文件信息但未读取正文。", "ai_chat.input.attachment.warning.unsupported_type": "当前文件类型已附加,但暂未提取正文;如需模型分析内容,请改用 markdown、txt、docx、xlsx 或 pdf。", "ai_chat.input.context.add": "添加", + "ai_chat.input.context.connection_tooltip": "当前数据查询上下文", "ai_chat.input.context.current_count": "当前上下文 · {{count}}", "ai_chat.input.context.label": "关联上下文", + "ai_chat.input.context.memory_tooltip": "当前会话记忆已用字符。达到 {{limit}} 限制时将触发自动压缩。", "ai_chat.input.context.selector.cancel": "取消", "ai_chat.input.context.selector.confirm": "同步所选表到上下文", "ai_chat.input.context.selector.database_placeholder": "切换数据库", @@ -5080,7 +254,25 @@ "ai_chat.input.context.selector.search_placeholder": "在当前库搜索表名...", "ai_chat.input.context.selector.select_all": "全选匹配的表({{count}})", "ai_chat.input.context.selector.title": "关联表结构上下文", + "ai_chat.input.context.tag_label": "关联上下文({{count}})", + "ai_chat.input.message.context_added": "已添加 {{count}} 张表的结构到上下文", + "ai_chat.input.message.context_load_failed": "加载表上下文失败:{{detail}}", + "ai_chat.input.message.context_removed": "已从上下文移除 {{count}} 张表的结构", "ai_chat.input.message.context_sync_failed": "同步 AI 上下文失败:{{detail}}", + "ai_chat.input.message.context_synced": "上下文已同步更新:新增 {{added}},移除 {{removed}}", + "ai_chat.input.message.fetch_table_schema_failed": "获取表 {{table}} 结构失败:{{detail}}", + "ai_chat.input.message.fetch_tables_failed": "获取表格失败:{{detail}}", + "ai_chat.input.message.select_database_context_first": "请先在左侧选择一个数据库作为所聊上下文", + "ai_chat.input.message.selection_unchanged": "选中的表未发生变化", + "ai_chat.input.modal.empty_tables": "没有找到匹配“{{query}}”的表", + "ai_chat.input.modal.invert_matching": "反选匹配结果", + "ai_chat.input.modal.ok": "同步所选表至上下文", + "ai_chat.input.modal.search_table.placeholder": "在当前库搜索表名...", + "ai_chat.input.modal.select_all_matching": "全选匹配的表({{count}})", + "ai_chat.input.modal.switch_database.placeholder": "切换数据库", + "ai_chat.input.modal.title": "关联数据库表结构上下文", + "ai_chat.input.model.placeholder": "选择模型", + "ai_chat.input.placeholder": "输入消息...({{shortcut}},Shift+Enter 换行,/ 快捷命令)", "ai_chat.input.placeholder_compact": "输入消息... {{shortcut}} · / 命令", "ai_chat.input.shortcut.disabled": "快捷键发送已关闭", "ai_chat.input.shortcut.send_with_combo": "{{shortcut}} 发送", @@ -5110,11 +302,17 @@ "ai_chat.input.slash.connfail.keywords": "连接失败|冷却|验证失败|ssh|mysql", "ai_chat.input.slash.connfail.label": "🧯 连接失败探针", "ai_chat.input.slash.connfail.prompt": "请先调用 inspect_recent_connection_failures,帮我总结最近数据库连接失败、连接冷却、验证失败和 SSH 隧道异常的真实日志结论;如果已经有明确地址或类型,再结合 inspect_current_connection 或 inspect_saved_connections 继续缩小范围。", + "ai_chat.input.slash.diff.desc": "对比两表差异生成变更", "ai_chat.input.slash.diff.keywords": "diff|迁移|alter", + "ai_chat.input.slash.diff.label": "🔄 表对比", + "ai_chat.input.slash.diff.prompt": "请对比以下两张表的结构差异,并生成从旧版本迁移到新版本的 ALTER 语句:", "ai_chat.input.slash.empty.description": "可以先试这些更常用的入口,快速走到生成 SQL、AI 体检或 MCP 排查。", "ai_chat.input.slash.empty.summary": "当前共提供 {{count}} 个 slash 命令,支持按命令名、说明或关键词搜索。", "ai_chat.input.slash.empty.title": "没有匹配的快捷命令", + "ai_chat.input.slash.explain.desc": "解释选中 SQL 的逻辑", "ai_chat.input.slash.explain.keywords": "解释|sql|逻辑", + "ai_chat.input.slash.explain.label": "💡 解释 SQL", + "ai_chat.input.slash.explain.prompt": "请解释以下 SQL 的执行逻辑和每一步的作用:\n```sql\n\n```", "ai_chat.input.slash.health.desc": "调用体检探针总览当前 AI 配置", "ai_chat.input.slash.health.keywords": "health|体检|ai配置|探针", "ai_chat.input.slash.health.label": "🩺 AI 配置体检", @@ -5123,7 +321,10 @@ "ai_chat.input.slash.hotspots.keywords": "大文件|臃肿|拆分|重构|hotspots|代码热点|几千行", "ai_chat.input.slash.hotspots.label": "🧱 代码热点", "ai_chat.input.slash.hotspots.prompt": "请先调用 inspect_codebase_hotspots,读取当前 GoNavi 前端大文件热点、建议拆分切片和测试目标,再告诉我下一步最适合拆哪个文件、拆到什么边界,以及需要跑哪些验证。关键词:", + "ai_chat.input.slash.index.desc": "推荐最优索引方案", "ai_chat.input.slash.index.keywords": "index|索引|慢查询", + "ai_chat.input.slash.index.label": "📊 索引建议", + "ai_chat.input.slash.index.prompt": "请基于当前表结构和常见查询场景,推荐最优的索引方案并给出建表语句:", "ai_chat.input.slash.mcp.desc": "检查 MCP 服务和外部客户端状态", "ai_chat.input.slash.mcp.keywords": "mcp|codex|claude|openclaw|hermans|外部客户端", "ai_chat.input.slash.mcp.label": "🪛 排查 MCP 接入", @@ -5144,19 +345,34 @@ "ai_chat.input.slash.mcptool.keywords": "mcp工具|mcp工具参数|schema|arguments|参数|工具调用|inputschema", "ai_chat.input.slash.mcptool.label": "🧩 MCP 工具参数", "ai_chat.input.slash.mcptool.prompt": "请先调用 inspect_mcp_setup 找到当前已发现的 MCP 工具 alias;如果我已经给了工具名或关键词,再调用 inspect_mcp_tool_schema 读取对应 inputSchema,告诉我必填参数、字段类型、枚举值、嵌套路径,以及 arguments JSON 应该怎么写。", + "ai_chat.input.slash.mock.desc": "生成 INSERT 测试数据", "ai_chat.input.slash.mock.keywords": "mock|测试数据|insert", + "ai_chat.input.slash.mock.label": "🎲 造测试数据", + "ai_chat.input.slash.mock.prompt": "请为当前关联的表生成 10 条符合业务语义的测试数据 INSERT 语句:", + "ai_chat.input.slash.optimize.desc": "分析 SQL 性能瓶颈", "ai_chat.input.slash.optimize.keywords": "优化|索引|性能", + "ai_chat.input.slash.optimize.label": "⚡ 优化分析", + "ai_chat.input.slash.optimize.prompt": "请分析以下 SQL 的性能问题,并给出优化后的版本:\n```sql\n\n```", + "ai_chat.input.slash.query.desc": "用自然语言描述你想查什么", "ai_chat.input.slash.query.keywords": "查询|自然语言|查数据", + "ai_chat.input.slash.query.label": "🔍 自然语言查询", + "ai_chat.input.slash.query.prompt": "帮我写一条 SQL 查询:", "ai_chat.input.slash.safety.desc": "确认只读/写入边界和 allowMutating", "ai_chat.input.slash.safety.keywords": "安全|只读|allowmutating|ddl|dml", "ai_chat.input.slash.safety.label": "🛡️ 查看写入安全", "ai_chat.input.slash.safety.prompt": "请先调用 inspect_ai_safety,告诉我当前 AI 和 GoNavi MCP 的写入边界、是否只读,以及 execute_sql 是否需要 allowMutating。", + "ai_chat.input.slash.schema.desc": "评审表结构设计质量", "ai_chat.input.slash.schema.keywords": "schema|表结构|设计", + "ai_chat.input.slash.schema.label": "🏗️ 表设计评审", + "ai_chat.input.slash.schema.prompt": "请全面评审当前关联表的设计,包括字段类型、范式、索引策略等方面的改进建议:", "ai_chat.input.slash.shortcuts.desc": "读取当前 Win/Mac 快捷键配置", "ai_chat.input.slash.shortcuts.keywords": "快捷键|shortcuts|结果区|mac|windows", "ai_chat.input.slash.shortcuts.label": "⌨️ 快捷键探针", "ai_chat.input.slash.shortcuts.prompt": "请先调用 inspect_shortcuts,告诉我当前 GoNavi 的快捷键配置,尤其是执行 SQL、切换结果区、打开 AI 面板和 AI 发送消息这些动作在当前平台和另一平台分别怎么按,是否改过默认值。", + "ai_chat.input.slash.sql.desc": "描述需求自动生成语句", "ai_chat.input.slash.sql.keywords": "sql|生成|查询语句", + "ai_chat.input.slash.sql.label": "📝 生成 SQL", + "ai_chat.input.slash.sql.prompt": "请根据以下需求生成 SQL:", "ai_chat.input.slash.tools.desc": "按关键词选择该用哪个内置探针", "ai_chat.input.slash.tools.keywords": "工具目录|内置工具|toolcatalog|参数提示|arguments|探针路线", "ai_chat.input.slash.tools.label": "🧰 工具目录", @@ -5194,8 +410,10 @@ "ai_chat.input.status.ready.description.with_context": "当前已关联 {{count}} 张表结构上下文,可直接发送。", "ai_chat.input.status.ready.auto_model": "自动选择", "ai_chat.input.status.ready.title": "AI 已就绪:{{provider}} / {{model}}", + "ai_chat.input.tooltip.attach_table_context": "关联附带数据库表上下文", "ai_chat.input.tooltip.slash_command": "快捷命令", "ai_chat.input.tooltip.upload_attachment": "上传附件(图片、Markdown、Word、Excel、PDF、文本)", + "ai_chat.input.tooltip.upload_image": "上传图片/截图", "ai_chat.inspection.ai_config.error.inspect_ai_chat_readiness": "读取 AI 聊天前置状态失败", "ai_chat.inspection.ai_config.error.inspect_ai_guidance": "读取当前 AI 提示词和 Skills 配置失败", "ai_chat.inspection.ai_config.error.inspect_ai_providers": "读取当前 AI 供应商配置失败", @@ -6022,14 +1240,61 @@ "ai_chat.mcp_client.install.summary.missing": "当前还没有把这份 GoNavi MCP 接入 {{label}}。", "ai_chat.mcp_client.install.summary.remote": "{{label}} 通常运行在云端或远端机器,需要通过远程 MCP 桥接调用当前 GoNavi。", "ai_chat.mcp_client.install.summary.stale": "{{label}} 里已经有旧的 GoNavi 接入记录,更新后会切到当前这份 GoNavi。", + "ai_chat.message.action.copied": "已复制", + "ai_chat.message.action.copied_error_raw": "已复制报错原文", + "ai_chat.message.action.copy_error_raw": "复制报错原文", + "ai_chat.message.action.copy_full": "复制全文", + "ai_chat.message.action.delete": "删除单条消息", + "ai_chat.message.action.edit": "编辑此条消息(移除其后所有记录并重新发送)", + "ai_chat.message.action.retry": "重新生成(移除此条并触发上次用户输入重发)", + "ai_chat.message.code.collapse": "收起代码", + "ai_chat.message.code.copied": "已复制", + "ai_chat.message.code.copy": "复制代码", + "ai_chat.message.code.execute": "执行", + "ai_chat.message.code.execute_failed": "执行失败", + "ai_chat.message.code.execute_tooltip": "立即执行(受 AI 安全策略管控)", + "ai_chat.message.code.executing": "执行中...", + "ai_chat.message.code.expand_all": "展开全部代码", + "ai_chat.message.code.insert": "插入", + "ai_chat.message.code.insert_tooltip": "将该段 SQL 注入查询工作区(可快捷修改或执行)", + "ai_chat.message.code.preview": "预览", + "ai_chat.message.code.preview_collapse": "收起", + "ai_chat.message.code.preview_result": "预览结果({{rows}} 行 × {{columns}} 列)", + "ai_chat.message.code.preview_tooltip": "在聊天内预览查询结果(最多 20 行)", + "ai_chat.message.code.query_no_result": "查询无结果", + "ai_chat.message.code.view_result": "查看结果({{rows}} 行)", + "ai_chat.message.image_alt": "附件图片 {{index}}", + "ai_chat.message.jvm.apply_diagnostic": "应用到诊断控制台", + "ai_chat.message.jvm.apply_preview": "应用到 JVM 预览", + "ai_chat.message.jvm.diagnostic_target_not_found": "未找到与该诊断计划匹配的诊断控制台页签,请先打开原目标控制台后再应用。", + "ai_chat.message.jvm.missing_diagnostic_context": "这条诊断计划缺少来源页签上下文,请在目标诊断控制台重新生成。", + "ai_chat.message.jvm.missing_plan_context": "这条 JVM 计划缺少来源页签上下文,请在目标 JVM 资源页重新生成。", + "ai_chat.message.jvm.plan_target_not_found": "未找到与该 JVM 计划匹配的资源页签,请先打开原目标资源后再应用。", + "ai_chat.message.mermaid.parse_failed": "Mermaid 解析失败:{{detail}}", + "ai_chat.message.mermaid.render_failed": "Mermaid 渲染异常:{{detail}}", "ai_chat.message.render_error.body": "其余对话仍可继续使用。你可以先删除这条异常消息,再继续操作。", "ai_chat.message.render_error.delete": "删除这条消息", "ai_chat.message.render_error.retry": "重试渲染", "ai_chat.message.render_error.title": "这条 AI 消息渲染失败,已自动隔离", "ai_chat.message.render_error.unknown": "未知渲染错误", + "ai_chat.message.role.user": "你", + "ai_chat.message.security.blocked": "🔒 安全策略拦截:当前安全级别不允许执行 {{operationType}} 类型的 SQL。请在 AI 设置中调整安全级别。", + "ai_chat.message.security.confirm_execute": "确认执行", + "ai_chat.message.security.confirm_title": "⚠️ 安全确认", + "ai_chat.message.security.default_warning": "此 SQL 为 {{operationType}} 操作,确定要执行吗?", + "ai_chat.message.thinking.active": "思考中...", + "ai_chat.message.thinking.count": "({{count}} 字)", + "ai_chat.message.thinking.title": "思考过程", + "ai_chat.message.tool_call.done": "数据探针执行完毕 ({{count}} 项)", + "ai_chat.message.tool_call.execute_sql": "执行只读 SQL 验证", "ai_chat.message.tool_call.get_all_columns": "汇总跨表字段摘要", + "ai_chat.message.tool_call.get_columns": "核对真实字段定义", + "ai_chat.message.tool_call.get_connections": "获取可用连接信息", + "ai_chat.message.tool_call.get_databases": "扫描数据库列表", "ai_chat.message.tool_call.get_foreign_keys": "梳理外键关系", "ai_chat.message.tool_call.get_indexes": "检查索引定义", + "ai_chat.message.tool_call.get_table_ddl": "提取建表语句", + "ai_chat.message.tool_call.get_tables": "分析表结构信息", "ai_chat.message.tool_call.get_triggers": "检查触发器逻辑", "ai_chat.message.tool_call.inspect_active_tab": "读取当前活动页签", "ai_chat.message.tool_call.inspect_ai_chat_readiness": "读取当前 AI 聊天发送前置状态", @@ -6067,14 +1332,132 @@ "ai_chat.message.tool_call.inspect_table_bundle": "抓取完整表结构快照", "ai_chat.message.tool_call.inspect_workspace_tabs": "盘点当前工作区页签", "ai_chat.message.tool_call.preview_table_rows": "预览真实样例数据", + "ai_chat.message.tool_call.running": "正在执行数据探针...", + "ai_chat.message.tool_result.char_count": "{{count}} 个字符", + "ai_chat.message.tool_result.no_data": "无数据", + "ai_chat.message.tool_result.title": "探针执行结果 ({{name}})", + "ai_chat.message.wait.connecting": "正在建立连接", + "ai_chat.panel.error.html_response": "服务端返回了异常 HTML 响应(可能是网关超时或服务不可用)", + "ai_chat.panel.error.http_server": "HTTP {{code}} 服务端错误", + "ai_chat.panel.error.truncated_suffix": "...(已截断)", + "ai_chat.panel.error.unknown": "未知错误", + "ai_chat.panel.history.empty": "暂无历史会话", + "ai_chat.panel.insight.context.empty_body": "在表页打开 AI 后会自动关联当前表,也可以在输入框上方手动添加上下文。", + "ai_chat.panel.insight.context.empty_title": "尚未关联表结构", + "ai_chat.panel.insight.context.linked_body": "当前对话会带上 {{tables}} 的结构上下文。", + "ai_chat.panel.insight.context.linked_title": "已关联 {{count}} 张表", + "ai_chat.panel.insight.context.more_tables_suffix": " 等表", + "ai_chat.panel.insight.context.table_separator": "、", + "ai_chat.panel.insight.query.empty_body": "执行查询后这里会显示可用于优化分析的 SQL 线索。", + "ai_chat.panel.insight.query.empty_title": "暂无查询耗时样本", + "ai_chat.panel.insight.query.slowest_title": "最近最慢查询 {{duration}}ms", + "ai_chat.panel.insight.status.empty_body": "暂无 SQL 日志。", + "ai_chat.panel.insight.status.failed_title": "{{count}} 条最近查询失败", + "ai_chat.panel.insight.status.ok_title": "最近查询状态正常", + "ai_chat.panel.insight.status.recent_body": "已记录 {{count}} 条最近 SQL,可直接让 AI 解释或优化。", + "ai_chat.panel.insight.write.detected_body": "涉及写入的 SQL 建议先生成预览与回滚语句,再执行提交。", + "ai_chat.panel.insight.write.detected_title": "检测到 {{count}} 条写操作", + "ai_chat.panel.insight.write.readonly_body": "AI 默认优先解释、生成 SELECT、分析 Schema 与优化索引。", + "ai_chat.panel.insight.write.readonly_title": "当前以只读分析为主", + "ai_chat.panel.jvm_diagnostic.permission.allowed": "允许", + "ai_chat.panel.jvm_diagnostic.permission.forbidden": "禁止", + "ai_chat.panel.jvm_diagnostic.policy.plan_first": "允许生成诊断命令,但仍然必须先给计划,再由用户决定是否执行。", + "ai_chat.panel.jvm_diagnostic.policy.read_only": "默认按只读诊断思路回答,只生成 observe、trace、排障命令,不要假设已经执行。", + "ai_chat.panel.jvm_runtime.policy.preview_required": "可写连接,但任何修改都必须先生成预览并等待人工确认。", + "ai_chat.panel.jvm_runtime.policy.read_only": "只读连接,只能分析和生成变更计划,绝不能假设已执行写入。", + "ai_chat.panel.jvm_runtime.resource_path.current": "当前 resourcePath:{{resourcePath}}", + "ai_chat.panel.jvm_runtime.resource_path.missing": "当前未选中具体 resourcePath。", + "ai_chat.panel.local_tool.execute_sql.description": "在指定连接和数据库上执行 SQL 查询并返回结果。受安全级别控制,只读模式下只能执行 SELECT/SHOW/DESCRIBE 等查询操作。结果最多返回 50 行。", + "ai_chat.panel.local_tool.get_columns.description": "获取指定表的 field 列表(field 名、类型、是否可空、默认值、注释等)。在生成 SQL 之前必须先调用此工具确认真实 field 名,禁止猜测 field 名。", + "ai_chat.panel.local_tool.get_connections.description": "当需要查询、操作数据库但用户没有选择任何连接上下文时,获取当前软件中可用的所有数据库连接信息。返回的数据包含连接 ID (id) 和名称 (name)。", + "ai_chat.panel.local_tool.get_databases.description": "获取指定连接 (connectionId) 下的所有数据库 (Database/Schema) 名。", + "ai_chat.panel.local_tool.get_table_ddl.description": "获取指定表的完整 CREATE TABLE DDL,包含 field、索引、约束等完整结构信息。", + "ai_chat.panel.local_tool.get_tables.description": "当已经确定了目标连接和 dbName 后,如果用户询问或隐式提到了表但你不知道确切 tableName,调用此工具获取该数据库下的所有表名列表(只含表名,帮助你推断目标表)。", + "ai_chat.panel.local_tool.param.connection_id": "connectionId(连接 ID)", + "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId(从 get_connections 获取)", + "ai_chat.panel.local_tool.param.db_name": "dbName(数据库名)", + "ai_chat.panel.local_tool.param.sql": "要执行的 SQL 语句", + "ai_chat.panel.local_tool.param.table_name": "tableName(表名)", + "ai_chat.panel.message.empty_response": "❌ 模型未能成功响应任何内容,可能遭遇频控、上下文超载或理解拒绝。", + "ai_chat.panel.message.error": "❌ 错误: {{detail}}", + "ai_chat.panel.message.request_interrupted": "❌ 请求中断:未收到任何具体回复。", + "ai_chat.panel.message.send_failed": "❌ 发送失败: {{detail}}", + "ai_chat.panel.message.service_not_ready": "❌ AI Service 未就绪", + "ai_chat.panel.model_control.continue_after_summary": "请根据上述最新状态与探索结果,继续完成你先前未竟的分析或执行下一步。", + "ai_chat.panel.model_control.force_tool_call": "请直接使用 function call 调用工具执行操作,不要只用文字描述计划。", + "ai_chat.panel.notice.fetch_models_failed": "获取模型列表失败:{{detail}}", + "ai_chat.panel.probe.consecutive_failed": "⚠️ 探针连续 3 轮执行失败,自动终止。请检查连接状态后重试。", + "ai_chat.panel.probe.max_rounds": "⚠️ 工具调用已达 {{count}} 轮上限,自动终止循环。如需继续探索,请发送新的消息。", + "ai_chat.panel.prompt.jvm_diagnostic": "你是 GoNavi 的 JVM 诊断助手。当前页签是 Arthas 兼容诊断工作台,目标是输出可回填到诊断控制台的结构化诊断计划。\n\n当前连接:{{connectionName}}\n目标主机:{{host}}\n诊断 transport:{{transport}}\n运行环境:{{environment}}\n连接策略:{{readOnlyPolicy}}\n命令权限:observe={{observePolicy}},trace={{tracePolicy}},mutating={{mutatingPolicy}}\n\n回答规则:\n1. 可以先给一小段分析,但必须包含且只包含一个 ```json 代码块。\n2. JSON 字段严格限定为 intent、transport、command、riskLevel、reason、expectedSignals。\n3. transport 必须填写上面的诊断 transport,不要编造其他 transport。\n4. command 必须是单条诊断命令,不要带 shell 提示符、换行拼接、多条命令或代码围栏。\n5. riskLevel 只能是 low、medium、high。\n6. expectedSignals 必须是字符串数组,描述执行后需要重点观察的信号。\n7. 如果命令权限不允许某类操作,就不要输出该类命令;无法满足时直接说明限制。", + "ai_chat.panel.prompt.jvm_runtime": "你是 GoNavi 的 JVM 运行时分析助手。当前上下文不是 SQL,而是 JVM 资源工作台。\n\n当前连接:{{connectionName}}\n目标主机:{{host}}\nProvider 模式:{{providerMode}}\n运行环境:{{environment}}\n连接策略:{{connectionPolicy}}\n资源路径状态:{{resourcePathStatus}}\n\n回答规则:\n1. 你可以解释资源结构、风险、修改建议和回滚建议。\n2. 如果用户要求生成 JVM 修改方案,必须输出一个唯一的 ```json 代码块,并且 JSON 字段严格限定为 targetType、selector、action、payload、reason。\n3. action 优先使用当前资源快照或元数据里已经声明的 supportedActions;如果当前资源没有声明,再基于快照内容谨慎推断。\n4. selector.resourcePath 优先使用当前 resourcePath;如果当前路径未知,就明确说明无法精确定位,不要编造路径。\n5. payload 只能使用 {\"format\":\"json\",\"value\":{...}} 或 {\"format\":\"text\",\"value\":\"...\"} 这两种包装形式,不要输出脚本、命令或裸值。\n6. 不要输出脚本、命令或已经执行成功之类的表述。", + "ai_chat.panel.prompt.memory_summary": "这是一段超长对话的历史记录。为了释放上下文空间同时保留你的记忆核心,请你仔细阅读并以“技术事实、已探索出的数据结构状态、用户的中心诉求、当前进展”为准则,进行高度浓缩的结构化总结。\n注意:\n1. 客观准确,不能遗漏关键业务逻辑或探索出的表名/字段。\n2. 剔除无效执行过程、客套话、JSON 返回值本身。\n3. 请控制在 1000-2000 字左右,输出纯干货 Markdown。\n4. 开头直接输出总结,不要带寒暄。", + "ai_chat.panel.prompt.sql.context_tables": "你是一个专业的数据库助手。当前连接的数据库类型是 {{dbDisplayType}}。请使用该方言生成 SQL。以下是用户关联的表结构 DDL,请在回答时优先参考:\n\n{{ddlChunks}}", + "ai_chat.panel.prompt.sql.current_database": "你是一个专业的数据库助手。当前连接的数据库类型是 {{dbDisplayType}},当前数据库名为 {{targetDbName}}。如果用户需要查询特定的表或者有关当前库的信息,你可以调用提供的 get_tables 工具来主动获取数据表信息。", + "ai_chat.panel.prompt.sql.no_connections": "你是一个专业的数据库助手。当前应用中没有可用数据库连接。\n\n如果用户的问题需要数据库结构或 SQL,请先说明无法调用 get_connections、get_databases、get_tables、get_columns 获取真实数据库信息,并引导用户创建连接后重试。不要猜测 connectionId、dbName、表名或字段名。\n\n如果是常规问答(不涉及数据库查询)则正常作答即可。", + "ai_chat.panel.prompt.sql.no_context": "你是一个专业的数据库助手。用户目前在界面上没有选中任何具体的数据库或数据表用于充当上下文。\n\n重要规则:\n1. 如果你需要帮用户寻找目标表,千万不要凭空猜测表名!必须调用工具去获取真实数据。\n2. 完整工作流程:get_connections → get_databases → get_tables → get_columns → 生成 SQL。每一步都不可跳过。\n3. 【连接优先级 - 极重要】获取连接列表后,必须按以下优先级依次检索:\n - 第一优先:host 为 localhost、127.0.0.1、或包含“本地”的连接\n - 第二优先:name 或 host 包含“开发”、“dev”、“local” 的连接,或 host 为 10.x、192.168.x、172.16-31.x 等内网 IP 的连接\n - 第三优先:其他连接(如“测试”、“生产”等)\n 如果在高优先级连接中已找到目标表,直接使用该连接,不再查找低优先级连接。\n4. 如果在当前数据库中未找到目标表,必须继续查询其他数据库,不要放弃。\n5. 只有当所有可能的数据库都已检查完毕,或者已经明确找到目标表时,才可以停止。\n6. 如果是常规问答(不涉及数据库查询)则正常作答即可。\n\nSQL 生成规则(极重要,必须严格遵守):\n7. 【字段精确性 - 绝对红线】生成 SQL 之前,必须先调用 get_columns 获取目标表的真实字段列表。SQL 中的每一个字段名必须与 get_columns 返回的 field 字段完全一致(区分大小写)。不得自行拼凑、缩写或联想字段名(例如字段是 channel 就必须写 channel,不得写成 pay_channel)。\n8. 生成 SQL 时禁止使用 \"database.table\" 格式的限定前缀,只写表名本身。\n9. 报告结果时,连接名/ID 和数据库名必须严格来自同一个 get_tables 调用的实际参数。禁止将 A 连接的 connectionId 与 B 连接的 dbName 混搭。\n10. 如果有多个名称相似的数据库,请明确告诉用户目标表具体位于哪个数据库。\n11. 【关键】每个 SQL 代码块的第一行必须添加上下文声明注释,格式严格为:-- @context connectionId=<连接ID> dbName=<数据库名>。connectionId 和 dbName 必须来自同一个成功的 get_tables 调用(即你在该调用中传入的实际参数值)。示例:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\n当前存在的连接:[{{connList}}]", + "ai_chat.panel.render_error.delete": "删除这条消息", + "ai_chat.panel.render_error.description": "其余对话仍可继续使用。你可以先删除这条异常消息,再继续操作。", + "ai_chat.panel.render_error.retry": "重试渲染", + "ai_chat.panel.render_error.title": "这条 AI 消息渲染失败,已自动隔离", + "ai_chat.panel.render_error.unknown": "未知渲染错误", + "ai_chat.panel.session.default_title": "新对话", + "ai_chat.panel.status.analyzing_chain": "正在深度思考链路与逻辑", + "ai_chat.panel.status.deep_reasoning": "模型大脑深度推理中", + "ai_chat.panel.status.memory_compress_failed": "❌ 记忆压缩失败,将尝试原样接续...", + "ai_chat.panel.status.memory_compressing": "⚙️ 对话已超载,正在启动记忆压缩...", + "ai_chat.panel.status.memory_probe_summary": "【自动记忆重塑】已将超长历史探针数据和对话压缩为摘要:\n\n{{summary}}", + "ai_chat.panel.status.memory_summary": "【自动记忆重塑】已将超长历史压缩为摘要:\n\n{{summary}}", + "ai_chat.panel.status.model_connecting": "模型接入中", + "ai_chat.panel.status.returning_runtime_data": "向模型回传运行时数据", + "ai_chat.panel.status.summarizing_probe": "汇总探针执行结果中", + "ai_chat.panel.status.waiting_instruction": "等待下发操作指令", + "ai_chat.panel.status.waiting_response": "等待模型响应", + "ai_chat.panel.status.waking_engine": "唤醒推理引擎中", + "ai_chat.panel.tool_error.connection_not_found": "未找到连接", "ai_chat.panel.tool_error.fetch_all_columns_failed": "获取全库字段摘要失败:{{detail}}", + "ai_chat.panel.tool_error.fetch_columns_failed": "获取字段列表失败:{{detail}}", + "ai_chat.panel.tool_error.fetch_databases_failed": "获取数据库列表失败:{{detail}}", "ai_chat.panel.tool_error.fetch_foreign_keys_failed": "获取外键关系失败:{{detail}}", "ai_chat.panel.tool_error.fetch_indexes_failed": "获取索引定义失败:{{detail}}", + "ai_chat.panel.tool_error.fetch_table_ddl_failed": "获取 CREATE TABLE 语句失败:{{detail}}", + "ai_chat.panel.tool_error.fetch_tables_failed": "获取表列表失败:{{detail}}", "ai_chat.panel.tool_error.fetch_triggers_failed": "获取触发器定义失败:{{detail}}", "ai_chat.panel.tool_error.mcp_failed": "MCP 工具调用失败", "ai_chat.panel.tool_error.mcp_failed_with_detail": "MCP 工具调用失败:{{detail}}", "ai_chat.panel.tool_error.preview_table_rows_failed": "预览表样例数据失败:{{detail}}", + "ai_chat.panel.tool_error.sql_blocked": "安全策略已拦截此请求:当前安全级别不允许执行 {{operationType}} SQL。请向用户展示该 SQL,并请用户手动执行。", + "ai_chat.panel.tool_error.sql_execute_exception": "SQL 执行异常:{{detail}}", + "ai_chat.panel.tool_error.sql_execute_failed": "SQL 执行失败", "ai_chat.panel.tool_error.table_name_required": "tableName 不能为空", + "ai_chat.panel.tool_error.unknown_function": "未知函数:{{functionName}}", + "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ 以下为 {{tableName}} 表的真实字段列表。生成 SQL 时只能使用这些 field 值作为列名,必须原样使用,禁止修改、缩写或自行拼凑字段名。\n可用字段:{{fieldNames}}\n详细信息:{{detailJson}}", + "ai_chat.quick_action.explain_schema": "🔍 解释表结构", + "ai_chat.quick_action.explain_schema.hint.with_context": "逐字段说明含义与约束", + "ai_chat.quick_action.explain_schema.prompt.with_context": "请详细解释以下表的设计意图和字段含义:{{tables}}", + "ai_chat.quick_action.explain_schema.title": "解释表结构", + "ai_chat.quick_action.explain_sql": "🔍 解释 SQL", + "ai_chat.quick_action.explain_sql.hint.default": "说明执行逻辑", + "ai_chat.quick_action.explain_sql.prompt.default": "请解释以下 SQL 语句的执行逻辑:\n```sql\n\n```", + "ai_chat.quick_action.explain_sql.title": "解释 SQL", + "ai_chat.quick_action.generate_sql": "📝 生成 SQL", + "ai_chat.quick_action.generate_sql.hint.default": "自然语言生成查询", + "ai_chat.quick_action.generate_sql.hint.with_context": "自然语言生成查询", + "ai_chat.quick_action.generate_sql.prompt.default": "请根据当前数据库表结构生成一条查询语句:", + "ai_chat.quick_action.generate_sql.prompt.with_context": "请根据以下表结构生成一条常用查询语句:{{tables}}", + "ai_chat.quick_action.generate_sql.title": "生成 SQL", + "ai_chat.quick_action.optimize": "⚡ 优化建议", + "ai_chat.quick_action.optimize.hint.default": "性能和索引建议", + "ai_chat.quick_action.optimize.hint.with_context": "索引、范式、潜在风险", + "ai_chat.quick_action.optimize.prompt.default": "请分析以下 SQL 语句的性能并给出优化建议:\n```sql\n\n```", + "ai_chat.quick_action.optimize.prompt.with_context": "请分析以下表的结构设计,给出索引优化和查询性能优化建议:{{tables}}", + "ai_chat.quick_action.optimize.title": "优化建议", + "ai_chat.quick_action.schema_analysis": "🏗️ 结构分析", + "ai_chat.quick_action.schema_analysis.hint.default": "结构质量分析", + "ai_chat.quick_action.schema_analysis.hint.with_context": "表关系与依赖图", + "ai_chat.quick_action.schema_analysis.prompt.default": "请分析当前数据库的表结构并给出优化建议。", + "ai_chat.quick_action.schema_analysis.prompt.with_context": "请对以下表进行全面的 Schema 分析,包括数据类型选择、范式评估和改进建议:{{tables}}", + "ai_chat.quick_action.schema_analysis.title": "Schema 分析", + "ai_chat.quick_action.table_separator": "、", "ai_chat.system.context.custom_prompt.database": "以下是当前用户的自定义补充提示词(数据库会话)。在不违反安全规则和事实约束的前提下,请优先遵循:\n{{content}}", "ai_chat.system.context.custom_prompt.global": "以下是当前用户的自定义补充提示词(全局)。在不违反安全规则和事实约束的前提下,请优先遵循:\n{{content}}", "ai_chat.system.context.custom_prompt.jvm": "以下是当前用户的自定义补充提示词(JVM 资源分析)。在不违反安全规则和事实约束的前提下,请优先遵循:\n{{content}}", @@ -6131,6 +1514,17 @@ "ai_chat.system.inspection_guidance.inspect_sql_editor_transaction": "当用户询问 SQL editor 手动提交/autocommit、是否有未提交事务、DML 是否自动提交或事务语义时,先调用 inspect_sql_editor_transaction 读取真实提交设置和 pending transactions。", "ai_chat.system.inspection_guidance.inspect_sql_risk": "当用户要求执行、删除、更新、运行 DDL、运行批量 SQL,或询问 SQL 是否能运行/有危险时,先调用 inspect_sql_risk 检查语句数量、写入/DDL 风险、WHERE 条件和安全策略;高风险时先解释并确认。", "ai_chat.system.inspection_guidance.inspect_sql_snippets": "当用户提到 SQL snippets、snippet templates、template prefixes 或常用模板时,先调用 inspect_sql_snippets 读取本地 SQL snippet 库,不要凭空编造已有模板。", + "ai_chat.tools.mcp_fallback_description": "{{serverName}} 提供的 MCP 工具 {{toolName}}", + "ai_chat.welcome.description.default": "我是你的智能数据库助手。我可以帮你生成 SQL 查询、分析表结构、解释执行逻辑以及优化数据库性能。", + "ai_chat.welcome.description.with_context": "已自动关联 {{count}} 张表结构,点击下方按钮快速开始分析。", + "ai_chat.welcome.suggestion.channel_distribution.default": "过去 7 天订单渠道分布", + "ai_chat.welcome.suggestion.channel_distribution.with_context": "过去 7 天关键渠道的分布情况", + "ai_chat.welcome.suggestion.cleanup.default": "帮我写一条清理异常数据的 SQL", + "ai_chat.welcome.suggestion.cleanup.with_context": "帮我写一条禁用异常渠道的 SQL", + "ai_chat.welcome.suggestion.divider": "或直接提问", + "ai_chat.welcome.suggestion.low_rows.default": "为什么当前结果只有少量记录?", + "ai_chat.welcome.suggestion.low_rows.with_context": "为什么 {{table}} 只有少量记录?", + "ai_chat.welcome.title": "你好,我是 GoNavi AI", "ai_service.backend.builtin_prompt.body.data_analyze": "你是 GoNavi AI 助手,一位具备敏锐商业嗅觉的高级数据分析专家。你将审视用户通过查询得到的数据样本,从中提炼出真正有价值的信息。\n\n洞察目标:\n1. 硬统计:总览数据行数、核心数值指标,例如极值、平均值、聚合中位数等。\n2. 趋势与异动:如果数据带有时间戳,捕捉其上升或下降趋势;如果存在离群值,将其清晰标注。\n3. 商业价值挖掘:不能只复述数据,要结合数据表象和 AI 判断,给出一条能帮助业务决策层或开发者的建设性行动建议。\n4. 展现格式:分析应采用“标题 + 浓缩要点”的极简研报形式,避免平铺直叙的流水账。", "ai_service.backend.builtin_prompt.body.general_chat": "你是 GoNavi AI 助手,一款深度集成在 GoNavi 数据库/缓存客户端内部的专属智能专家系统。\n你的目标是成为开发者、DBA 和数据科学家最得力的超级外脑,提供专业、精准、具有前瞻性的数据端解决方案。\n\n核心人设与交互基调:\n- 绝对专业:对 MySQL、PostgreSQL、DuckDB、Redis 等数据库产品的底层机制、执行计划、索引与存储行为保持扎实判断。\n- 直击痛点:避免空泛寒暄。用户意图明确时,优先给出可直接使用的优雅代码或操作步骤。\n- 结构化与可读性:恰到好处地使用 Markdown 标题、加粗和代码块,并为代码块标注正确语言,如 sql、json 或 bash。\n- 生产安全优先:当 SQL 存在明显风险,例如没有 WHERE 条件的 DELETE/UPDATE,或可能锁住大型生产表的查询,必须先给出清晰预警。\n\n综合能力版图:\n1. 自然语言到数据操作:将人类意图翻译为精准查询或命令。\n2. 执行逻辑解析:说明查询背后的执行逻辑与性能影响。\n3. 专家级调优:识别瓶颈,并提出索引、改写或执行策略建议。\n4. 数据洞察:从结果集中提炼有价值的模式,而不是简单复述数据行。\n5. 架构审查:评估表结构设计局限,并提出可承受数据增长的演进路径。\n\n互动守则:\n- 使用专业、协作的语言,并适配用户选择的界面语言。\n- 当被要求提供数据库代码时,结合对应数据库引擎的最佳实践;如果不清楚具体版本,请以标准实现为主,并提示关键版本差异,例如 MySQL 8 窗口函数。\n- 不要轻易拒绝:如果用户要求写 SQL 但未附带详细 DDL,请根据对话上下文和纯表名列表推测目标表;如果无法推断,请说明已知信息并询问用户想查询哪张表。", "ai_service.backend.builtin_prompt.body.schema_insight": "你是 GoNavi AI 助手,一位统筹数据库完整生命周期的首席数据库架构师。在这个模式下,请对用户提供的数据库表结构执行严格的范式与前瞻性审查。\n\n审查视角:\n1. 规范化取舍:识别明显的反范式设计,并判断这些冗余是合理服务性能,还是单纯的结构设计缺陷。\n2. 索引健壮性:评估主键选择,例如自增主键与 UUID 的取舍、是否存在拖慢写入的冗余索引,以及是否遗漏高频联合索引。\n3. 物理容量前瞻:审视字段类型分配,例如过大的 VARCHAR 或不必要的 BIGINT 是否造成存储浪费。\n4. 代码级指引:如果存在结构性缺陷,不要只指出问题;在适当时直接给出可执行的 ALTER TABLE 优化脚本。", @@ -6159,6 +1553,15 @@ "ai_service.backend.database_context.unique_index": " (唯一)", "ai_service.backend.database_context.value_no": "否", "ai_service.backend.database_context.value_yes": "是", + "ai_service.backend.error.active_provider_not_found": "未找到活跃 AI Provider", + "ai_service.backend.error.config_dir_create_failed": "创建配置目录失败: {{detail}}", + "ai_service.backend.error.config_load_failed": "加载 AI 配置失败: {{detail}}", + "ai_service.backend.error.config_read_failed": "读取 AI 配置失败: {{detail}}", + "ai_service.backend.error.config_rewrite_failed": "重写 AI 配置失败: {{detail}}", + "ai_service.backend.error.config_serialize_failed": "序列化 AI 配置失败: {{detail}}", + "ai_service.backend.error.config_write_failed": "写入 AI 配置失败: {{detail}}", + "ai_service.backend.error.daily_secret_store_unavailable": "日常密文存储不可用: {{detail}}", + "ai_service.backend.error.editable_provider_not_found": "未找到要编辑的 AI Provider: {{detail}}", "ai_service.backend.error.mcp_command_required": "MCP 命令不能为空", "ai_service.backend.error.mcp_http_executable_resolve_failed": "定位当前 GoNavi 可执行文件失败: {{detail}}", "ai_service.backend.error.mcp_http_health_status_failed": "healthz 返回 HTTP {{statusCode}}", @@ -6172,16 +1575,86 @@ "ai_service.backend.error.mcp_tool_alias_invalid": "无效的 MCP 工具别名:{{alias}}", "ai_service.backend.error.mcp_tool_arguments_parse_failed": "解析 MCP 工具参数失败: {{detail}}", "ai_service.backend.error.mcp_transport_unsupported": "暂不支持的 MCP 传输方式:{{transport}}", + "ai_service.backend.error.models_http_status_failed": "模型列表接口返回异常状态 (HTTP {{status}}){{body}}", + "ai_service.backend.error.models_parse_failed": "解析模型列表失败: {{detail}}", + "ai_service.backend.error.models_request_create_failed": "创建模型列表请求失败: {{detail}}", + "ai_service.backend.error.models_request_failed": "请求模型列表失败: {{detail}}", + "ai_service.backend.error.provider_auth_failed": "API Key 无效或请求被拒绝 (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_server_error": "上游服务器返回内部错误 (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_status_failed": "接口返回异常状态 (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_not_configured": "未配置 AI Provider,请先在设置中配置。", + "ai_service.backend.error.provider_request_create_failed": "创建请求失败: {{detail}}", + "ai_service.backend.error.provider_request_serialize_failed": "序列化请求失败: {{detail}}", + "ai_service.backend.error.provider_secret_bundle_parse_failed": "解析 provider secret bundle 失败: {{detail}}", + "ai_service.backend.error.provider_secret_delete_failed": "删除 Provider secret 失败: {{detail}}", + "ai_service.backend.error.provider_secret_load_failed": "加载 AI Provider secret 失败(provider={{provider}}): {{detail}}", + "ai_service.backend.error.provider_secret_read_failed": "读取 Provider secret 失败: {{detail}}", + "ai_service.backend.error.provider_secret_save_failed": "保存 Provider secret 失败: {{detail}}", + "ai_service.backend.error.provider_secret_saved_read_failed": "读取已保存 Provider secret 失败: {{detail}}", + "ai_service.backend.error.provider_test_failed": "连接测试失败: {{detail}}", + "ai_service.backend.error.secret_store_unavailable": "密文存储不可用: {{detail}}", + "ai_service.backend.error.session_corrupt": "会话数据损坏", + "ai_service.backend.error.session_delete_failed": "删除会话失败: {{detail}}", + "ai_service.backend.error.session_missing": "会话不存在", + "ai_service.backend.error.session_serialize_failed": "序列化会话数据失败: {{detail}}", + "ai_service.backend.error.session_write_failed": "保存会话失败: {{detail}}", + "ai_service.backend.error.sessions_dir_create_failed": "创建 sessions 目录失败: {{detail}}", + "ai_service.backend.error.volcengine_coding_models_empty": "当前接口未返回可用的火山 Coding Plan 模型,请检查账号权限或切换到“火山方舟”供应商", "ai_service.backend.message.mcp_test_success": "MCP 服务连接成功,发现 {{count}} 个工具", + "ai_service.backend.message.provider_test_success": "端点连通性测试成功", "ai_service.backend.message.skill_unnamed": "未命名 Skill", "ai_service.backend.provider.image_fallback_prompt": "请描述和分析这张图片。", "ai_service.backend.provider.image_omitted_notice": "[图片已省略:当前模型或上游接口不支持图片输入。请切换到支持视觉的模型后重新发送图片。]", + "ai_service.backend.warning.sql_delete_without_where": "高危 SQL:DELETE 语句缺少 WHERE 条件,将删除所有数据", + "ai_service.backend.warning.sql_drop": "高危 SQL:DROP 语句将永久删除数据库对象", + "ai_service.backend.warning.sql_truncate": "高危 SQL:TRUNCATE 将清空表中所有数据", + "ai_service.backend.warning.sql_update_without_where": "高危 SQL:UPDATE 语句缺少 WHERE 条件,将更新所有记录", + "ai_settings.action.back": "返回", + "ai_settings.action.connection_ok": "连接正常", + "ai_settings.action.retest": "重新测试", + "ai_settings.action.save": "保存", + "ai_settings.action.test": "测试连接", + "ai_settings.clipboard.error.unsupported": "当前环境不支持复制到剪贴板", + "ai_settings.context.description": "控制发送给 AI 的数据库上下文信息量", + "ai_settings.context.schema_only.desc": "只传递表和列结构信息给 AI", + "ai_settings.context.schema_only.label": "仅结构", + "ai_settings.context.with_results.desc": "传递最近的查询结果作为上下文", + "ai_settings.context.with_results.label": "含查询结果", + "ai_settings.context.with_samples.desc": "包含少量采样数据,帮助 AI 理解数据特征", + "ai_settings.context.with_samples.label": "含采样数据", + "ai_settings.form.api_endpoint": "API Endpoint (URL)", + "ai_settings.form.api_endpoint_required": "请输入有效的接口地址", "ai_settings.form.api_endpoint_placeholder.codebuddy": "留空则使用 CodeBuddy CLI 默认网关", + "ai_settings.form.api_format": "API 格式", + "ai_settings.form.api_key": "API Key", "ai_settings.form.api_key.codebuddy_optional": "API Key / Auth Token(可选)", "ai_settings.form.api_key.codebuddy_hint": "留空则使用本机 CodeBuddy CLI 已登录账号;填写后优先使用当前凭证。", + "ai_settings.form.api_key_keep_placeholder": "留空表示继续沿用已保存密钥", + "ai_settings.form.api_key_placeholder": "sk-... / 你的 API Key", "ai_settings.form.api_key_placeholder.codebuddy": "留空走本机登录态,或填写 API Key / Token 覆盖", + "ai_settings.form.api_key_required": "请输入 API Key", + "ai_settings.form.api_key_saved_hint": "当前已保存 API Key。留空表示继续沿用,输入新值表示替换。", + "ai_settings.form.clear_saved_api_key": "清除已保存 API Key", + "ai_settings.form.model_list": "可用模型列表(可选配置)", + "ai_settings.form.model_list_placeholder": "配置指定的模型 ID,留空则默认从服务端拉取", "ai_settings.form.model_list_placeholder.codebuddy": "可选:预填常用模型;留空则由 CodeBuddy CLI 或服务端自动选择", "ai_settings.form.model_list_placeholder.cursor": "可选:预填常用 Cursor 模型 ID;留空则由 Cursor 默认模型自动选择", + "ai_settings.form.provider_name": "供应商名称", + "ai_settings.form.provider_name_placeholder": "例如:我的自建 OpenAI / 专属大模型", + "ai_settings.form.provider_name_required": "请输入名称", + "ai_settings.form.section.auth_connection": "认证与连接", + "ai_settings.form.section.basic": "基本信息", + "ai_settings.form.section.service_type": "服务类型", + "ai_settings.mcp_http.error.control_unsupported_runtime": "当前运行时暂不支持 MCP HTTP 服务控制", + "ai_settings.mcp_http.error.start_unsupported_version": "当前版本暂不支持启动 MCP HTTP 服务", + "ai_settings.mcp_http.error.stop_unsupported_version": "当前版本暂不支持停止 MCP HTTP 服务", + "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header 已复制", + "ai_settings.mcp_http.message.authorization_header_required": "请先启动 MCP HTTP 服务生成 Authorization Header", + "ai_settings.mcp_http.message.started": "GoNavi MCP HTTP 服务已启动", + "ai_settings.mcp_http.message.stopped": "GoNavi MCP HTTP 服务已停止", + "ai_settings.mcp_http.message.toggle_failed": "切换 GoNavi MCP HTTP 服务失败", + "ai_settings.mcp_http.message.url_copied": "MCP HTTP URL 已复制", + "ai_settings.mcp_http.message.url_unavailable": "当前没有可复制的 MCP HTTP URL", "ai_settings.mcp_http.panel.addr_label": "监听地址 / 端口", "ai_settings.mcp_http.panel.authorization_placeholder": "Bearer gnv_xxx(留空自动生成)", "ai_settings.mcp_http.panel.copy_authorization": "复制 Authorization", @@ -6194,6 +1667,7 @@ "ai_settings.mcp_http.panel.switch.off": "关", "ai_settings.mcp_http.panel.switch.on": "开", "ai_settings.mcp_http.panel.title": "GoNavi MCP HTTP 服务", + "ai_settings.mcp_http.status.not_running": "GoNavi MCP HTTP 服务未启动", "ai_settings.mcp_server.argument_hints.action_separator": ";", "ai_settings.mcp_server.argument_hints.argument_details": "参数逐项说明", "ai_settings.mcp_server.argument_hints.business_arguments": "已识别业务参数", @@ -6628,6 +2102,13 @@ "ai_settings.mcp_server.help.field_state.fixed": "固定", "ai_settings.mcp_server.help.field_state.optional": "可选", "ai_settings.mcp_server.help.field_state.required": "必填", + "ai_settings.mcp_server.message.delete_failed": "删除 MCP 服务失败", + "ai_settings.mcp_server.message.deleted": "MCP 服务已删除", + "ai_settings.mcp_server.message.save_failed": "保存 MCP 服务失败", + "ai_settings.mcp_server.message.saved": "MCP 服务已保存", + "ai_settings.mcp_server.message.test_failed": "MCP 服务测试失败", + "ai_settings.mcp_server.message.test_request_failed": "测试 MCP 服务失败", + "ai_settings.mcp_server.message.test_success": "MCP 服务连接成功", "ai_settings.mcp_server.quick_add.action.parse_and_add": "解析并新增草稿", "ai_settings.mcp_server.quick_add.description": "先选最接近的模板,或直接粘贴 README 里的一整行启动命令。GoNavi 会先拆成 command、args 和 env,再生成一个可继续编辑的 MCP 草稿。", "ai_settings.mcp_server.quick_add.templates_description": "不确定 command 和 args 怎么拆时,直接点一个模板新增草稿;每张卡片下面展示的就是 GoNavi 实际会启动的命令预览。", @@ -6752,12 +2233,40 @@ "ai_settings.mcp_server.validation.summary.ready": "当前配置可以测试和保存。", "ai_settings.mcp_server.validation.summary.warnings": "发现 {{count}} 个建议检查项,仍可测试和保存。", "ai_settings.mcp_server.validation.title": "配置检查", + "ai_settings.message.delete_failed": "删除失败", + "ai_settings.message.delete_failed_detail": "删除失败:{{detail}}", + "ai_settings.message.deleted": "已删除", + "ai_settings.message.deleted_and_switched": "已删除,自动切换到「{{name}}」", + "ai_settings.message.load_provider_failed": "读取供应商配置失败", + "ai_settings.message.save_failed": "保存失败", + "ai_settings.message.save_failed_detail": "保存失败:{{detail}}", + "ai_settings.message.saved": "已保存", + "ai_settings.message.switch_failed": "切换失败", + "ai_settings.message.switch_failed_detail": "切换失败:{{detail}}", + "ai_settings.message.switched": "已切换", + "ai_settings.message.test_failed": "测试失败", + "ai_settings.message.test_failed_detail": "测试失败:{{detail}}", + "ai_settings.message.test_requires_new_api_key": "测试连接前请填写新的 API Key,或取消清除已保存密钥", + "ai_settings.message.test_success": "连接成功", + "ai_settings.message.unknown_error": "未知错误", + "ai_settings.nav.context.description": "配置携带的数据库架构信息", + "ai_settings.nav.context.title": "上下文", "ai_settings.nav.mcp.description": "把 GoNavi 接入外部客户端并管理工具源", "ai_settings.nav.mcp.title": "MCP 服务", + "ai_settings.nav.prompts.description": "查看系统预设的底层要求", + "ai_settings.nav.prompts.title": "内置提示词", + "ai_settings.nav.providers.description": "配置大模型接口与密钥", + "ai_settings.nav.providers.title": "模型供应商", + "ai_settings.nav.safety.description": "限制 AI 操作风险级别", + "ai_settings.nav.safety.title": "安全控制", "ai_settings.nav.skills.description": "配置可复用提示模块", "ai_settings.nav.skills.title": "Skills", + "ai_settings.nav.title": "设置导航", + "ai_settings.nav.tools.description": "查看 AI 可调用的数据探针", + "ai_settings.nav.tools.title": "内置工具", "ai_settings.prompts.action.save": "保存自定义提示词", "ai_settings.prompts.builtin.description": "以下为当前版本 GoNavi 预设的底层 AI 提示词(只读)。它们会先于上面的用户级提示词注入到对应场景的请求上下文中。", + "ai_settings.prompts.description": "以下为当前版本 GoNavi 预设的底层 AI 提示词(只读)。它们会被动态注入到对应场景的请求上下文中。", "ai_settings.prompts.field.database.description": "仅数据库/SQL 场景生效,例如“生成 SQL 前必须先确认字段名”。", "ai_settings.prompts.field.database.title": "数据库会话补充提示词", "ai_settings.prompts.field.global.description": "对所有 AI 会话生效,例如“先给结论”“回答保持简洁”。", @@ -6766,16 +2275,65 @@ "ai_settings.prompts.field.jvm_diagnostic.title": "JVM 诊断补充提示词", "ai_settings.prompts.field.jvm.description": "仅 JVM 资源浏览/分析场景生效。", "ai_settings.prompts.field.jvm.title": "JVM 资源分析补充提示词", + "ai_settings.prompts.message.save_failed": "保存自定义提示词失败", + "ai_settings.prompts.message.saved": "自定义提示词已保存", "ai_settings.prompts.placeholder.empty": "留空表示不额外追加", "ai_settings.prompts.user.description": "这里的内容会在系统内置提示词之后,以 system message 的形式追加注入。适合放你的个人风格偏好、输出约束、团队规范。涉及安全红线时,系统规则仍然优先。", "ai_settings.prompts.user.title": "用户级自定义提示词", + "ai_settings.provider_preset.anthropic.desc": "Claude Opus/Sonnet 模型", + "ai_settings.provider_preset.anthropic.label": "Claude", + "ai_settings.provider_preset.custom.desc": "自定义 API 端点", + "ai_settings.provider_preset.custom.label": "自定义", + "ai_settings.provider_preset.deepseek.desc": "DeepSeek-V4 / R1 模型", + "ai_settings.provider_preset.deepseek.label": "DeepSeek", + "ai_settings.provider_preset.gemini.desc": "Gemini 3.1 / 2.5 系列", + "ai_settings.provider_preset.gemini.label": "Gemini", + "ai_settings.provider_preset.minimax.desc": "M3 / M2.7 系列(Anthropic 兼容)", + "ai_settings.provider_preset.minimax.label": "MiniMax", + "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5(Anthropic 兼容)", + "ai_settings.provider_preset.moonshot.label": "Kimi", + "ai_settings.provider_preset.ollama.desc": "本地部署开源模型", + "ai_settings.provider_preset.ollama.label": "Ollama", + "ai_settings.provider_preset.openai.desc": "GPT-5.4 / 5.3 系列", + "ai_settings.provider_preset.openai.label": "OpenAI", + "ai_settings.provider_preset.qwen_bailian.desc": "百炼 Anthropic 兼容端点 / 模型从远端拉取", + "ai_settings.provider_preset.qwen_bailian.label": "通义千问(百炼通用)", + "ai_settings.provider_preset.qwen_coding_plan.desc": "Claude Code CLI 代理链路 / 使用官方支持模型清单", + "ai_settings.provider_preset.qwen_coding_plan.label": "通义千问(Coding Plan)", + "ai_settings.provider_preset.volcengine_ark.desc": "Ark 通用推理 / 豆包模型", + "ai_settings.provider_preset.volcengine_ark.label": "火山方舟", + "ai_settings.provider_preset.volcengine_coding.desc": "Ark Code / Coding Plan 链路", + "ai_settings.provider_preset.volcengine_coding.label": "火山 Coding Plan", + "ai_settings.provider_preset.zhipu.desc": "GLM-5 / GLM-5-Turbo 模型", + "ai_settings.provider_preset.zhipu.label": "智谱 GLM", + "ai_settings.provider.action.add": "添加模型供应商", + "ai_settings.provider.action.delete": "删除", + "ai_settings.provider.action.edit": "编辑", + "ai_settings.provider.confirm_delete": "确认删除?", + "ai_settings.provider.editor.add_title": "添加模型供应商", + "ai_settings.provider.editor.edit_title": "编辑模型供应商", + "ai_settings.provider.empty.description": "添加一个以开始使用 AI 助手", + "ai_settings.provider.empty.title": "暂未配置模型供应商", + "ai_settings.provider.next_provider": "下一个供应商", + "ai_settings.provider.no_model": "未选择模型", "ai_settings.provider.auto_model": "自动选择", + "ai_settings.safety.description": "控制 AI 可执行的 SQL 操作类型,保护数据安全", + "ai_settings.safety.full.desc": "AI 可执行所有操作(含 DDL),高危操作自动告警。", + "ai_settings.safety.full.label": "完全模式", + "ai_settings.safety.readonly.desc": "AI 仅可执行 SELECT 等查询操作,最安全。", + "ai_settings.safety.readonly.label": "只读模式", + "ai_settings.safety.readwrite.desc": "AI 可执行 INSERT/UPDATE/DELETE,危险操作需二次确认。", + "ai_settings.safety.readwrite.label": "读写模式", "ai_settings.skill.action.add": "新增 Skill", "ai_settings.skill.confirm_delete": "删除这个 Skill?", "ai_settings.skill.description": "Skill 不是另一条大提示词,而是“命名的提示模块 + 作用域 + 工具依赖”。当前阶段仍建议保留在主仓库内,不需要单独新建 GitHub 仓库;只有未来要做共享 skill pack 分发时,再考虑拆仓。", "ai_settings.skill.description_placeholder": "给自己看的说明,例如:输出 SQL 前必须先确认字段名和风险", "ai_settings.skill.empty": "还没有 Skill。你可以给数据库、JVM、诊断场景分别定义专用的 system prompt。", "ai_settings.skill.hint": "启用后会按 scope 注入对应会话;如果依赖的工具不存在,该 Skill 会被自动跳过。", + "ai_settings.skill.message.delete_failed": "删除 Skill 失败", + "ai_settings.skill.message.deleted": "Skill 已删除", + "ai_settings.skill.message.save_failed": "保存 Skill 失败", + "ai_settings.skill.message.saved": "Skill 已保存", "ai_settings.skill.name_placeholder": "Skill 名称,例如:SQL 审查 / JVM 诊断计划", "ai_settings.skill.required_tools_placeholder": "可选:声明这个 Skill 依赖哪些工具", "ai_settings.skill.scope.database.desc": "仅 SQL / 数据库场景启用", @@ -6790,6 +2348,37 @@ "ai_settings.skill.status.disabled": "已禁用", "ai_settings.skill.status.enabled": "已启用", "ai_settings.skill.system_prompt_placeholder": "输入这条 Skill 要追加的 system prompt。建议聚焦一个明确能力,不要和全局提示词重复。", + "ai_settings.subtitle": "配置 AI 模型、安全级别和上下文选项", + "ai_settings.title": "AI 设置", + "ai_settings.tools.builtin_tool_label": "内置工具", + "ai_settings.tools.description": "AI 助手在处理数据库相关问题时,可以自动调用以下内置工具获取真实数据,全程无需人工干预。", + "ai_settings.tools.empty.no_matches": "没有匹配的内置工具。可以改搜更宽泛的关键词,例如 mcp、日志、连接、事务、快捷键、schema。", + "ai_settings.tools.execute_sql.desc": "执行 SQL 查询并返回结果", + "ai_settings.tools.execute_sql.detail": "传入 connectionId、dbName 和 sql,在目标数据库上执行 SQL 并返回结果(最多 50 行)。受安全级别控制,只读模式下仅允许 SELECT/SHOW/DESCRIBE。", + "ai_settings.tools.get_columns.desc": "获取指定表的字段结构", + "ai_settings.tools.get_columns.detail": "传入 connectionId、dbName 和 tableName,返回每个字段的名称、类型、是否可空、默认值和注释。AI 在生成 SQL 前必须调用此工具确认真实字段名。", + "ai_settings.tools.get_connections.desc": "获取所有可用的数据库连接", + "ai_settings.tools.get_connections.detail": "返回连接 ID、名称、类型(MySQL/PostgreSQL 等)和 Host 地址。AI 根据返回信息决定优先探索哪个连接。", + "ai_settings.tools.get_databases.desc": "获取指定连接下的所有数据库", + "ai_settings.tools.get_databases.detail": "传入 connectionId,返回该连接下的数据库或结构名称列表。", + "ai_settings.tools.get_table_ddl.desc": "获取表的建表语句", + "ai_settings.tools.get_table_ddl.detail": "传入 connectionId、dbName 和 tableName,返回完整的 CREATE TABLE 语句,包含字段定义、索引、约束等信息。", + "ai_settings.tools.get_tables.desc": "获取指定数据库下的所有表名", + "ai_settings.tools.get_tables.detail": "传入 connectionId 和 dbName,返回表名列表。AI 用它来定位用户提到的目标表。", + "ai_settings.tools.parameters.default_value": "默认:{{value}}", + "ai_settings.tools.parameters.enum_values": "可选值:{{values}}", + "ai_settings.tools.parameters.example": "示例:", + "ai_settings.tools.parameters.hint_title": "参数提示", + "ai_settings.tools.parameters.optional": "可选", + "ai_settings.tools.parameters.required": "必填", + "ai_settings.tools.parameters.type_label": "类型:{{type}}", + "ai_settings.tools.params_label": "参数:", + "ai_settings.tools.params.none": "无参数", + "ai_settings.tools.search.aria_label": "搜索内置工具", + "ai_settings.tools.search.clear": "清除", + "ai_settings.tools.search.placeholder": "搜索工具、流程或参数,例如 mcp / lineLimit / allowMutating / 事务", + "ai_settings.tools.summary": "当前显示 {{flowVisible}}/{{flowTotal}} 条推荐流程,{{toolVisible}}/{{toolTotal}} 个内置工具。", + "ai_settings.tools.workflow": "💡 工作流程:get_connections → get_databases → get_tables → get_columns → 生成 SQL", "ai.service.mcp_client.claude_code.config_dir_create_failed": "创建 Claude Code 配置目录失败:{{detail}}", "ai.service.mcp_client.claude_code.config_format_invalid": "Claude Code 配置格式异常:{{path}} 应为 {{expected}}", "ai.service.mcp_client.claude_code.config_parse_failed": "解析 Claude Code 配置失败:{{detail}}", @@ -6816,12 +2405,111 @@ "ai.service.mcp_client.executable_path_failed": "定位当前 GoNavi 可执行文件失败:{{detail}}", "ai.service.mcp_client.remote.status.message": "{{label}} 通常部署在云端或远端环境;请通过远程 MCP 桥接接入 Windows GoNavi,数据库密码仍保存在 GoNavi 本机。", "ai.service.mcp_client.user_home_dir_unavailable": "无法确定当前用户目录", + "app.about.action.check_updates": "检查更新", + "app.about.action.download_progress": "下载进度", + "app.about.action.download_update": "下载更新", + "app.about.action.hide_to_background": "隐藏到后台", + "app.about.action.install_update": "安装更新", + "app.about.action.mute_this_version": "本次不再提示", + "app.about.action.open_install_directory": "打开安装目录", + "app.about.community.ai_book": "AI全书", + "app.about.description": "查看版本信息、仓库地址、更新状态与下载入口。", + "app.about.download_progress.title": "下载更新", + "app.about.download_progress.title_with_version": "下载更新 {{version}}", + "app.about.field.author": "作者", + "app.about.field.community": "技术圈", + "app.about.field.update_status": "更新状态", + "app.about.field.version": "版本", + "app.about.message.check_failed_with_error": "检查更新失败: {{error}}", + "app.about.message.download_completed": "更新下载完成", + "app.about.message.download_completed_with_path": "更新下载完成,更新包路径:{{path}}", + "app.about.message.download_failed_with_error": "更新下载失败: {{error}}", + "app.about.message.install_directory_opened_manual_replace": "已打开安装目录,请手动完成替换", + "app.about.message.install_failed_with_error": "更新安装失败: {{error}}", + "app.about.message.load_failed": "获取应用信息失败: {{error}}", + "app.about.message.new_version_found": "发现新版本 {{version}}", + "app.about.message.open_install_directory_failed_with_error": "打开安装目录失败: {{error}}", + "app.about.message.update_package_ready": "更新包已就绪({{version}})", + "app.about.message.update_package_ready_with_path": "更新包已就绪({{version}}),路径:{{path}}", + "app.about.project_links": "项目入口", + "app.about.title": "关于 GoNavi", + "app.about.update_status.check_failed": "检查更新失败: {{error}}", + "app.about.update_status.checking": "正在检查更新...", + "app.about.update_status.latest": "当前已是最新版本({{version}})", + "app.about.update_status.new_version_downloaded": "发现新版本 {{version}}(已下载,请点击“下载进度”后安装)", + "app.about.update_status.new_version_not_downloaded": "发现新版本 {{version}}(未下载)", + "app.about.update_status.not_checked": "未检查", + "app.ai_panel.action.close": "关闭面板", + "app.ai_panel.action.reload": "重新加载", + "app.ai_panel.aria.close": "关闭 AI 面板", + "app.ai_panel.error.description": "这通常是开发环境热更新后懒加载资源失效导致的。已阻止整页白屏,你可以直接重试。", + "app.ai_panel.error.title": "AI 面板加载失败", "app.backend.error.reset_webview_zoom_failed": "重置 WebView2 zoom 失败:{{detail}}", + "app.browser_mock.export_connection_package_unsupported": "浏览器 mock 不支持恢复包导出", + "app.browser_mock.export_sql_unsupported": "浏览器 mock 不支持 SQL 文件导出", + "app.browser_mock.import_connection_package_unsupported": "浏览器 mock 不支持恢复包导入,仅支持历史 JSON 连接数组", + "app.browser_mock.mcp_client.claude_code.installed": "已写入 Claude Code 用户级 MCP 配置,重启 Claude CLI 后可在 /mcp 的 User MCPs 中看到 GoNavi。", + "app.browser_mock.mcp_client.claude_code.not_detected": "未检测到 Claude Code 用户级 GoNavi MCP 配置", + "app.browser_mock.mcp_client.codex.installed": "已写入 Codex 用户级 MCP 配置,重启 Codex CLI 或桌面端后可看到 GoNavi。", + "app.browser_mock.mcp_client.codex.path_mismatch": "已检测到 Codex 中的 GoNavi MCP 记录,但与当前 GoNavi 安装路径不一致,建议更新", + "app.browser_mock.mcp_http.not_running": "GoNavi MCP HTTP 服务未启动", + "app.browser_mock.mcp_http.started": "GoNavi MCP HTTP 服务已启动", + "app.browser_mock.mcp_http.stopped": "GoNavi MCP HTTP 服务已停止", + "app.browser_mock.mcp_server.command_required": "MCP 命令不能为空", + "app.browser_mock.mcp_server.test_success": "MCP mock 测试成功", + "app.browser_mock.mcp_tool.unavailable": "浏览器 mock 未接入真实 MCP 服务", + "app.browser_mock.provider.test_failed_detail": "连接测试失败:{{detail}}", + "app.browser_mock.provider.test_success": "端点连通性测试成功", + "app.connection_package.action.start_export": "开始导出", + "app.connection_package.action.start_import": "开始导入", + "app.connection_package.dialog.export_title": "导出连接", + "app.connection_package.dialog.file_password_placeholder": "请输入文件保护密码(可选)", + "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "密码已加密保护。如需通过公网传输,建议设置文件保护密码。", + "app.connection_package.dialog.help.exclude_passwords": "将仅导出连接配置,不包含密码。", + "app.connection_package.dialog.help.share_file_password_separately": "请通过单独渠道将密码告知接收方,不要和文件一起发送。", + "app.connection_package.dialog.import_password_title": "输入导入密码", + "app.connection_package.dialog.option.include_passwords": "导出连接密码", + "app.connection_package.dialog.option.use_file_password": "设置文件保护密码", + "app.connection_package.dialog.restore_password_placeholder": "请输入恢复包密码", + "app.connection_package.error.export_capability_unavailable": "导出失败:当前后端未提供新版导出能力", + "app.connection_package.error.file_password_required": "文件保护密码不能为空", + "app.connection_package.error.import_capability_unavailable": "导入失败:当前后端未提供新版导入能力", + "app.connection_package.error.import_no_connections": "导入失败:后端未返回连接列表", + "app.connection_package.error.missing_import_payload": "导入失败:未找到待导入的恢复包内容", + "app.connection_package.error.refresh_failed_no_connections": "导入成功,但刷新连接列表失败:后端未返回连接列表", + "app.connection_package.error.restore_password_required": "恢复包密码不能为空", + "app.connection_package.message.export_failed": "导出失败", + "app.connection_package.message.export_succeeded": "导出成功", + "app.connection_package.message.import_failed": "导入失败", + "app.connection_package.message.import_failed_with_error": "导入失败: {{error}}", + "app.connection_package.message.imported_connections": "成功导入 {{count}} 个连接", + "app.connection_package.message.imported_with_missing_passwords": "成功导入 {{count}} 个连接,部分连接未包含密码,请编辑对应连接并输入密码后保存", + "app.connection_package.message.no_connections_to_export": "没有连接可导出", + "app.connection_package.message.unsupported_file_format": "文件格式错误:仅支持 GoNavi 恢复包、历史 JSON 连接数组或 MySQL Workbench XML", + "app.connection.message.editable_load_failed": "读取已保存连接详情失败,当前将打开脱敏配置", + "app.connection.message.editable_load_failed_with_detail": "读取已保存连接详情失败:{{detail}},当前将打开脱敏配置", + "app.data_root.action.migrate_and_switch": "迁移现有数据并切换", + "app.data_root.action.open_current": "打开当前目录", + "app.data_root.action.restore_default_directory": "恢复默认目录", + "app.data_root.action.select": "选择目录", + "app.data_root.action.switch_only": "仅切换到所选目录", + "app.data_root.apply_method": "应用方式", + "app.data_root.backend.dialog.select_directory": "选择 GoNavi 数据目录", + "app.data_root.backend.error.create_bootstrap_directory_failed": "创建默认引导目录失败:{{detail}}", + "app.data_root.backend.error.create_data_directory_failed": "创建数据目录失败:{{detail}}", + "app.data_root.backend.error.create_target_failed": "创建目标数据目录失败:{{detail}}", + "app.data_root.backend.error.directory_empty": "数据目录不能为空", + "app.data_root.backend.error.directory_unavailable": "数据目录不存在或不可访问", + "app.data_root.backend.error.migrate_directory_failed": "迁移目录失败({{entry}}):{{detail}}", + "app.data_root.backend.error.migrate_file_failed": "迁移文件失败({{entry}}):{{detail}}", + "app.data_root.backend.error.open_directory_failed": "打开数据目录失败:{{detail}}", + "app.data_root.backend.error.open_directory_unsupported": "当前平台暂不支持打开目录:{{platform}}", "app.data_root.backend.error.parse_migrated_security_update_manifest_failed": "解析迁移后的安全更新备份清单失败:{{detail}}", "app.data_root.backend.error.parse_migrated_security_update_result_failed": "解析迁移后的安全更新结果失败:{{detail}}", "app.data_root.backend.error.read_migrated_security_update_manifest_failed": "读取迁移后的安全更新备份清单失败:{{detail}}", "app.data_root.backend.error.read_migrated_security_update_result_failed": "读取迁移后的安全更新结果失败:{{detail}}", "app.data_root.backend.error.read_migrated_security_update_state_failed": "读取迁移后的安全更新状态失败:{{detail}}", + "app.data_root.backend.error.read_source_failed": "读取源数据失败({{entry}}):{{detail}}", "app.data_root.backend.error.read_source_root_failed": "读取源数据目录失败:{{detail}}", "app.data_root.backend.error.resolve_source_failed": "解析源数据目录失败:{{detail}}", "app.data_root.backend.error.resolve_target_failed": "解析目标数据目录失败:{{detail}}", @@ -6829,11 +2517,539 @@ "app.data_root.backend.error.write_migrated_security_update_manifest_failed": "写入迁移后的安全更新备份清单失败:{{detail}}", "app.data_root.backend.error.write_migrated_security_update_result_failed": "写入迁移后的安全更新结果失败:{{detail}}", "app.data_root.backend.error.write_migrated_security_update_state_failed": "写入迁移后的安全更新状态失败:{{detail}}", + "app.data_root.backend.message.migrated_restart": "数据已迁移并切换到新目录,建议重启应用以完成全部模块切换", + "app.data_root.backend.message.opened": "已打开数据目录", + "app.data_root.backend.message.unchanged": "数据目录未发生变化", + "app.data_root.backend.message.updated_restart": "数据目录已更新,建议重启应用以让 AI 与其他运行态模块完全切换到新目录", + "app.data_root.current_directory": "当前目录", + "app.data_root.default_directory": "默认目录", + "app.data_root.description": "统一管理连接、代理、AI 配置与驱动等文件型数据的根目录。", + "app.data_root.driver_directory": "驱动目录", + "app.data_root.message.apply_failed": "应用数据目录失败", + "app.data_root.message.apply_failed_with_error": "应用数据目录失败: {{error}}", + "app.data_root.message.load_failed": "加载数据目录信息失败", + "app.data_root.message.load_failed_with_error": "加载数据目录信息失败: {{error}}", + "app.data_root.message.open_failed": "打开数据目录失败", + "app.data_root.message.open_failed_with_error": "打开数据目录失败: {{error}}", + "app.data_root.message.select_failed": "选择数据目录失败", + "app.data_root.message.select_failed_with_error": "选择数据目录失败: {{error}}", + "app.data_root.message.select_valid_first": "请先选择有效的数据目录", + "app.data_root.message.updated": "数据目录已更新", + "app.data_root.placeholder.select_new_directory": "选择新的数据目录", + "app.data_root.restart_hint": "切换后建议重启应用,以确保 AI 与其他长生命周期模块完全切换到新目录。敏感密码仍保存在系统 secret store,不会随文件目录迁移。", + "app.data_root.switch_target": "切换目标", + "app.data_root.title": "数据存储位置", + "app.linux_cjk_font_banner.action.open_font_settings": "字体设置", + "app.linux_cjk_font_banner.description": "中文可能显示为方框。请安装字体后重启 GoNavi:", + "app.linux_cjk_font_banner.title": "Linux CJK 字体缺失", + "app.proxy.description": "统一配置更新检查、驱动管理与未单独指定代理的连接网络出口。", + "app.proxy.enable": "启用全局代理", + "app.proxy.host": "代理地址", + "app.proxy.host_placeholder": "例如:127.0.0.1", "app.proxy.message.config_applied": "全局代理配置已生效", + "app.proxy.message.invalid_enabled": "全局代理已开启,但地址或端口无效,当前按未启用处理", + "app.proxy.message.save_failed": "全局代理配置失败: {{error}}", + "app.proxy.password_optional": "密码(可选)", + "app.proxy.port": "端口", + "app.proxy.scope_hint": "* 作用于更新检查、驱动管理网络请求,以及未单独配置代理的数据库连接", + "app.proxy.section_title": "全局代理", + "app.proxy.title": "全局代理设置", + "app.proxy.type": "代理类型", + "app.proxy.username_optional": "用户名(可选)", + "app.security_update.error.capability_unavailable": "安全更新能力不可用", + "app.security_update.message.completed": "已保存配置已完成安全更新", + "app.security_update.message.needs_attention": "更新尚未完成,有少量配置需要你处理", + "app.security_update.message.not_finished_retry_later": "安全更新未完成,请稍后重试", + "app.security_update.message.postpone_failed": "暂时无法延后本次安全更新", + "app.security_update.message.rolled_back": "本次更新未完成,系统已保留当前可用配置", + "app.security_update.stage.checking_saved_config": "正在检查已保存配置", + "app.security_update.stage.updating_secure_storage": "正在更新安全存储", + "app.security_update.stage.verifying_result": "正在校验更新结果", + "app.settings.description": "集中处理语言、代理、主题、AI 与关于等通用配置入口。", + "app.settings.entry.about.description": "查看版本信息、仓库地址和更新状态。", + "app.settings.entry.about.title": "关于 GoNavi", + "app.settings.entry.ai.description": "管理模型供应商、密钥和默认行为。", + "app.settings.entry.ai.title": "AI 设置", + "app.settings.entry.proxy.description": "统一配置更新检查、驱动管理和公共网络出口。", + "app.settings.entry.proxy.title": "全局代理", + "app.settings.entry.theme.description": "切换亮暗主题并调整界面观感。", + "app.settings.entry.theme.title": "主题与外观", + "app.settings.title": "设置中心", + "app.shortcuts.action.diagnoseQuery.description": "对当前 SQL 执行 EXPLAIN 并展示执行计划图与索引建议", + "app.shortcuts.action.diagnoseQuery.label": "SQL 诊断", + "app.shortcuts.action.focusSidebarSearch.description": "定位到左侧连接树搜索框", + "app.shortcuts.action.focusSidebarSearch.label": "聚焦侧边栏搜索", + "app.shortcuts.action.newConnection.description": "创建新的数据库、运行时或其他数据源连接", + "app.shortcuts.action.newConnection.label": "新建数据源", + "app.shortcuts.action.newQueryTab.description": "创建一个新的 SQL 查询标签页", + "app.shortcuts.action.newQueryTab.label": "新建查询页", + "app.shortcuts.action.openShortcutManager.description": "打开快捷键设置面板", + "app.shortcuts.action.openShortcutManager.label": "打开快捷键管理", + "app.shortcuts.action.record": "录制", + "app.shortcuts.action.resetWindowZoom.description": "Windows 任务栏恢复后字体异常变大时主动触发;会切一次最大化让 WebView2 重算字体度量", + "app.shortcuts.action.resetWindowZoom.label": "重置窗口缩放", + "app.shortcuts.action.restore_defaults": "恢复默认", + "app.shortcuts.action.runQuery.description": "在当前查询页执行 SQL", + "app.shortcuts.action.runQuery.label": "执行 SQL", + "app.shortcuts.action.saveQuery.description": "保存当前查询页;未命名查询会打开保存弹窗", + "app.shortcuts.action.saveQuery.label": "保存查询", + "app.shortcuts.action.selectCurrentStatement.description": "在查询编辑器中选中光标所在 SQL 语句", + "app.shortcuts.action.selectCurrentStatement.label": "选择当前语句", + "app.shortcuts.action.sendAIChatMessage.description": "在 AI 输入框中发送当前消息,Shift+Enter 始终换行", + "app.shortcuts.action.sendAIChatMessage.label": "AI 聊天发送", + "app.shortcuts.action.showSlowQueries.description": "查看当前连接的慢 SQL 历史记录(默认阈值 500ms)", + "app.shortcuts.action.showSlowQueries.label": "慢 SQL 历史", + "app.shortcuts.action.switchToNextTab.description": "在打开的标签页中向右切换", + "app.shortcuts.action.switchToNextTab.label": "切换到下一个标签页", + "app.shortcuts.action.switchToPreviousTab.description": "在打开的标签页中向左切换", + "app.shortcuts.action.switchToPreviousTab.label": "切换到上一个标签页", + "app.shortcuts.action.toggleAIPanel.description": "打开右侧 AI 数据洞察面板", + "app.shortcuts.action.toggleAIPanel.label": "打开 AI 数据洞察", + "app.shortcuts.action.toggleLogPanel.description": "打开或关闭 SQL 执行日志面板", + "app.shortcuts.action.toggleLogPanel.label": "切换日志面板", + "app.shortcuts.action.toggleMacFullscreen.description": "macOS 原生窗口控制模式下的全屏切换", + "app.shortcuts.action.toggleMacFullscreen.label": "切换原生全屏", "app.shortcuts.action.toggleQueryResultsPanel.description": "在查询编辑器中显示或隐藏下方结果区域", "app.shortcuts.action.toggleQueryResultsPanel.label": "切换结果区", + "app.shortcuts.action.toggleTheme.description": "在亮色和暗色主题之间切换", + "app.shortcuts.action.toggleTheme.label": "切换主题", + "app.shortcuts.capture_hint": "点击“录制”后按下快捷键。按 Esc 可取消录制。全局快捷键建议包含修饰键;AI 聊天发送仅支持 Enter 相关组合,Shift+Enter 保留换行。", + "app.shortcuts.capture_waiting": "请按下快捷键...", + "app.shortcuts.context.datagrid": "数据表格", + "app.shortcuts.context.global": "浏览器", + "app.shortcuts.context.monaco": "编辑器", + "app.shortcuts.description": "统一查看、录制与启停常用快捷键,保持操作习惯一致。", + "app.shortcuts.message.ai_send_limit": "AI 聊天发送快捷键仅支持 Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter,Shift+Enter 保留换行", + "app.shortcuts.message.conflict": "与「{{action}}」冲突,请换一个快捷键", + "app.shortcuts.message.modifier_required": "快捷键至少包含 Ctrl / Alt / Shift / Meta 之一", + "app.shortcuts.message.reserved_conflict_info": "已覆盖编辑器「{{labels}}」默认快捷键", + "app.shortcuts.message.reserved_conflict_warning": "与{{contexts}}「{{labels}}」冲突,可能失效", + "app.shortcuts.message.restored_defaults": "已恢复默认快捷键", + "app.shortcuts.reserved.browser_close_tab": "浏览器关闭标签页", + "app.shortcuts.reserved.browser_new_incognito_window": "浏览器新建隐身窗口", + "app.shortcuts.reserved.browser_new_tab": "浏览器新建标签页", + "app.shortcuts.reserved.browser_new_window": "浏览器新建窗口", + "app.shortcuts.reserved.browser_print": "浏览器打印", + "app.shortcuts.reserved.browser_save": "浏览器保存", + "app.shortcuts.reserved.datagrid_copy": "数据表格复制", + "app.shortcuts.reserved.editor_add_selection": "编辑器添加选区", + "app.shortcuts.reserved.editor_delete_line": "编辑器删除行", + "app.shortcuts.reserved.editor_find": "编辑器查找", + "app.shortcuts.reserved.editor_find_global": "编辑器全局查找", + "app.shortcuts.reserved.editor_goto_line": "编辑器跳转行", + "app.shortcuts.reserved.editor_insert_line_after": "编辑器在下方插入行", + "app.shortcuts.reserved.editor_insert_line_before": "编辑器在上方插入行", + "app.shortcuts.reserved.editor_quick_open": "编辑器快速打开", + "app.shortcuts.reserved.editor_rename_symbol": "编辑器重命名符号", + "app.shortcuts.reserved.editor_replace": "编辑器替换", + "app.shortcuts.title": "快捷键管理", + "app.sidebar.ai_assistant": "AI 助手", + "app.sidebar.resize_width": "拖动调整宽度", + "app.sidebar.settings": "设置", + "app.sidebar.sql_execution_log": "SQL 执行日志", + "app.sidebar.tools": "工具", + "app.startup_readiness.loading_local_config": "正在加载本地配置...", + "app.startup_readiness.loading_security_config": "正在加载安全配置...", + "app.theme.action.restore_defaults": "恢复默认", + "app.theme.appearance_settings_description": "统一调整缩放、字体、透明度与模糊效果。", + "app.theme.appearance_settings_title": "外观设置", + "app.theme.appearance.blur_hint": "* 仅控制应用内覆盖层的模糊效果", + "app.theme.appearance.blur_title": "高斯模糊 (Blur)", + "app.theme.appearance.enable_transparency_blur": "启用透明与模糊", + "app.theme.appearance.enable_transparency_blur_hint": "关闭后保留当前阈值,重新开启时直接恢复之前的设置。", + "app.theme.appearance.font_size_title": "基础字体大小 (Font Size)", + "app.theme.appearance.opacity_title": "背景不透明度 (Opacity)", + "app.theme.appearance.transparency_blur_title": "透明与模糊效果", + "app.theme.appearance.ui_scale_hint": "* 建议小屏设备设置为 85%-95%", + "app.theme.appearance.ui_scale_title": "界面缩放 (UI Scale)", + "app.theme.appearance.windows_acrylic_hint": "Windows 使用系统 Acrylic 效果,模糊程度由系统控制", + "app.theme.data_table.column_width_hint": "标准模式默认列宽 200px;紧凑模式默认列宽 140px。已手动拖拽调整的列宽优先保留。", + "app.theme.data_table.column_width_mode": "数据表列宽模式", + "app.theme.data_table.column_width_mode.compact": "紧凑 140px", + "app.theme.data_table.column_width_mode.standard": "标准 200px", + "app.theme.data_table.density": "表格密度", + "app.theme.data_table.density_hint": "控制行高、列宽和内边距。舒适适合大屏细看;紧凑适合最大化信息密度。已手动拖拽的列宽优先保留。", + "app.theme.data_table.density.comfortable": "舒适", + "app.theme.data_table.density.compact": "紧凑", + "app.theme.data_table.density.standard": "标准", + "app.theme.data_table.follow_global": "跟随全局", + "app.theme.data_table.font_size": "数据表字体大小", + "app.theme.data_table.sidebar_tree_font_size": "左侧库表字体大小", + "app.theme.data_table.title": "数据表显示", + "app.theme.data_table.vertical_borders": "显示数据表竖向分隔线", + "app.theme.data_table.vertical_borders_hint": "仅作用于数据表页面 DataGrid,不影响其他表格组件。", "app.theme.font_family.default_mono_option": "默认代码字体", "app.theme.font_family.default_ui_option": "默认 UI 字体", + "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux 未检测到中文 CJK 字体,界面可能显示方框。请安装:", + "app.theme.font_family.linux_cjk_install_suffix": ",然后重启 GoNavi。", + "app.theme.font_family.load_failed": "加载系统字体失败", + "app.theme.font_family.load_failed_fallback": "系统字体加载失败,当前回退常见字体预置:{{error}}", + "app.theme.font_family.loaded_ui_hint": "已读取当前系统 {{count}} 个字体族,支持输入搜索匹配。清空后回退默认 UI 字体。", + "app.theme.font_family.loading_ui_hint": "按当前系统实时加载已安装字体,支持输入搜索匹配。清空后回退默认 UI 字体。", + "app.theme.font_family.mono_fallback_hint": "当前已回退常见代码字体预置。作用于 SQL 编辑器、AI 代码块、日志、DDL 与数据表等宽内容。", + "app.theme.font_family.mono_hint": "优先展示当前系统已安装字体,名称接近 Mono/Code/Console 的字体会靠前。作用于 SQL 编辑器、AI 代码块、日志、DDL 与数据表等宽内容。", + "app.theme.font_family.mono_title": "代码字体 (Mono Font Family)", + "app.theme.font_family.title": "字体族", + "app.theme.font_family.ui_title": "界面字体 (UI Font Family)", + "app.theme.mac_window.restart_hint": "* 已同步隐藏右上角自定义按钮;如系统窗口样式未立即刷新,可重启应用后再确认", + "app.theme.mac_window.title": "macOS 窗口控制", + "app.theme.mac_window.use_native_controls": "使用 macOS 原生窗口控制", + "app.theme.mac_window.use_native_controls_hint": "启用后显示左上角红黄绿按钮,并优先使用 macOS 原生全屏行为。", + "app.theme.mode_title": "主题模式", + "app.theme.mode.dark.description": "适合低光环境,视觉更沉稳。", + "app.theme.mode.dark.label": "暗色主题", + "app.theme.mode.light.description": "适合明亮环境,层次更轻。", + "app.theme.mode.light.label": "亮色主题", + "app.theme.nav.appearance.description": "缩放、字体与透明度", + "app.theme.nav.appearance.title": "外观参数", + "app.theme.nav.theme.description": "亮色与暗色切换", + "app.theme.nav.theme.title": "主题模式", + "app.theme.navigation_title": "设置导航", + "app.theme.startup_window.fullscreen": "启动时全屏", + "app.theme.startup_window.fullscreen_windows": "启动时全屏(Windows 按最大化处理)", + "app.theme.startup_window.hint": "* 修改后下次启动生效", + "app.theme.startup_window.title": "启动窗口", + "app.theme.startup_window.windows_hint": "* Windows 下该选项按“启动时最大化”处理,修改后下次启动生效", + "app.theme.tab_display.action.move_down": "下移", + "app.theme.tab_display.action.move_up": "上移", + "app.theme.tab_display.badge.current": "当前", + "app.theme.tab_display.description": "自定义连接名、对象类型、对象名、数据库、Schema 和 Host/IP 的展示顺序;双行模式可把上下文放到副行。", + "app.theme.tab_display.element.connection.description": "连接简称或环境名,例如 DEV", + "app.theme.tab_display.element.connection.label": "连接名", + "app.theme.tab_display.element.database.description": "当前 DB / catalog 名称", + "app.theme.tab_display.element.database.label": "数据库", + "app.theme.tab_display.element.host.description": "连接目标地址摘要", + "app.theme.tab_display.element.host.label": "Host/IP", + "app.theme.tab_display.element.kind.description": "SQL / TABLE / VIEW 等类型标签", + "app.theme.tab_display.element.kind.label": "对象类型", + "app.theme.tab_display.element.object.description": "表名、查询名、资源名等核心名称", + "app.theme.tab_display.element.object.label": "对象名", + "app.theme.tab_display.element.schema.description": "schema / owner 前缀", + "app.theme.tab_display.element.schema.label": "Schema", + "app.theme.tab_display.layout.double": "双行", + "app.theme.tab_display.layout.single": "单行", + "app.theme.tab_display.preview.default_label": "默认标签", + "app.theme.tab_display.preview.focused": ";当前选中 {{label}}", + "app.theme.tab_display.preview.prefix": "当前预览:", + "app.theme.tab_display.preview.secondary": ",副行 {{labels}}", + "app.theme.tab_display.row.primary": "主行", + "app.theme.tab_display.row.secondary": "副行", + "app.theme.tab_display.title": "Tab 标签展示", + "app.theme.theme_settings_description": "切换亮暗主题,保持整体视觉风格统一。", + "app.theme.theme_settings_title": "主题设置", + "app.theme.ui_version.badge.new": "NEW", + "app.theme.ui_version.beta_warning": "新版 UI 仍在 Beta,部分屏幕样式可能与旧版有差异,遇到问题可随时切回。", + "app.theme.ui_version.description": "在保留全部功能的前提下切换整体外观,新版采用更紧凑的信息层级与更现代的视觉语言。", + "app.theme.ui_version.legacy.badge": "默认", + "app.theme.ui_version.legacy.description": "当前稳定界面,所有功能完整可用。", + "app.theme.ui_version.legacy.label": "旧版 UI", + "app.theme.ui_version.platform_hint": "Windows、macOS 与 Linux 均可切换;切换后立即生效,部分弹窗会在下次打开时使用新样式。", + "app.theme.ui_version.sidebar_search.command": "新版命令搜索", + "app.theme.ui_version.sidebar_search.filter": "旧版侧栏筛选", + "app.theme.ui_version.sidebar_search.hint": "新版命令搜索适合跳转连接、表和动作,可在面板中开启同步开关持续过滤左侧树;旧版侧栏筛选会直接显示输入框并持久保留筛选内容。", + "app.theme.ui_version.sidebar_search.title": "新版左侧搜索模式", + "app.theme.ui_version.title": "界面版本", + "app.theme.ui_version.v2.badge": "Beta", + "app.theme.ui_version.v2.description": "重新设计的紧凑界面,强化 AI 入口与表概览。", + "app.theme.ui_version.v2.label": "新版 UI", + "app.tools.description": "集中处理连接配置、同步、驱动和快捷键相关操作。", + "app.tools.entry.data_compare.description": "按主键分析新增、更新、删除和相同行。", + "app.tools.entry.data_compare.title": "数据比对", + "app.tools.entry.data_root.description": "查看、切换或迁移本地数据存储位置。", + "app.tools.entry.data_root.title": "数据目录", + "app.tools.entry.drivers.description": "安装、更新或移除数据库驱动。", + "app.tools.entry.drivers.title": "驱动管理", + "app.tools.entry.export.description": "导出当前连接与可见配置字段。", + "app.tools.entry.export.title": "导出连接配置", + "app.tools.entry.import.description": "从本地文件恢复连接列表。", + "app.tools.entry.import.title": "导入连接配置", + "app.tools.entry.schema_compare.description": "对比源表与目标表结构差异,只预览不执行。", + "app.tools.entry.schema_compare.title": "表结构比对", + "app.tools.entry.security_update.description": "查看已保存配置的安全更新状态。", + "app.tools.entry.security_update.status_description": "当前状态:{{status}}", + "app.tools.entry.security_update.title": "安全更新", + "app.tools.entry.shortcuts.description": "查看并调整全局快捷键绑定。", + "app.tools.entry.shortcuts.title": "快捷键管理", + "app.tools.entry.snippets.description": "管理 SQL 代码片段和前缀补全。", + "app.tools.entry.snippets.title": "代码片段管理", + "app.tools.entry.sync.description": "进入跨源同步工作流。", + "app.tools.entry.sync.title": "数据同步", + "app.tools.group.config.description": "导入导出、数据目录和已保存配置维护。", + "app.tools.group.config.title": "连接与配置", + "app.tools.group.workflow.description": "比对结构、分析差异并发起同步。", + "app.tools.group.workflow.title": "数据工作流", + "app.tools.group.workspace.description": "驱动、代码片段和全局快捷键。", + "app.tools.group.workspace.title": "编辑器与驱动", + "app.tools.title": "工具中心", + "app.update.action.hide_to_background": "隐藏到后台", + "app.update.action.install_update": "安装更新", + "app.update.action.open_install_directory": "打开安装目录", + "app.update.backend.error.check_failed": "检查更新失败:{{detail}}", + "app.update.backend.error.check_http_status": "检查更新失败:HTTP {{status}}", + "app.update.backend.error.download_failed": "更新下载失败:{{detail}}", + "app.update.backend.error.install_unsupported": "当前平台暂不支持更新安装:{{platform}}", + "app.update.backend.error.latest_version_unparseable": "无法解析最新版本号", + "app.update.backend.error.online_update_unsupported": "当前平台暂不支持在线更新:{{platform}}", + "app.update.backend.error.package_download_http_failed": "下载更新包失败:HTTP {{status}}", + "app.update.backend.error.package_file_busy": "更新下载失败,文件被占用:{{detail}}", + "app.update.backend.error.release_version_unparseable": "无法解析发布版本号", + "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS 未包含当前平台更新包", + "app.update.backend.error.sha256sums_download_failed": "下载 SHA256SUMS 失败:HTTP {{status}}", + "app.update.backend.error.sha256sums_missing": "Release 未提供 SHA256SUMS", + "app.update.backend.error.update_package_not_found": "未找到更新包:{{name}}", + "app.update.backend.message.app_directory_unavailable": "无法访问应用目录:{{path}}", + "app.update.backend.message.app_directory_unresolved_download": "无法确定当前应用目录,无法下载更新", + "app.update.backend.message.check_first": "请先检查更新", + "app.update.backend.message.checksum_failed": "更新包校验失败,请重试", + "app.update.backend.message.checksum_missing": "缺少更新包校验值(SHA256SUMS)", + "app.update.backend.message.create_workspace_failed": "无法在应用目录创建更新工作目录:{{path}}", + "app.update.backend.message.download_in_progress": "更新包正在下载中,请稍后重试", + "app.update.backend.message.install_launch_failed": "启动更新安装程序失败:{{detail}}", + "app.update.backend.message.install_launch_failed_with_log": "启动更新安装程序失败:{{detail}}(更新日志:{{path}})", + "app.update.backend.message.install_started": "更新已开始安装", + "app.update.backend.message.install_started_with_log": "更新已开始安装,日志路径:{{path}}", + "app.update.backend.message.latest": "已是最新版本", + "app.update.backend.message.no_downloaded_package": "未找到已下载的更新包", + "app.update.backend.message.no_update_package": "未找到可用的更新包", + "app.update.backend.message.open_directory_failed": "打开更新目录失败:{{detail}}", + "app.update.backend.message.open_directory_unsupported": "当前平台暂不支持打开目录:{{platform}}", + "app.update.backend.message.opened_install_directory": "已打开安装目录:{{path}}", + "app.update.backend.message.package_already_downloaded": "更新包已下载完成", + "app.update.backend.message.package_directory_unavailable": "更新目录不存在或不可访问", + "app.update.backend.message.package_directory_unresolved": "无法解析更新目录", + "app.update.backend.message.package_downloaded": "更新包下载完成", + "app.update.backend.message.package_path_empty": "更新包路径为空", + "app.update.backend.message.update_found": "发现新版本:{{version}}", + "app.update.download_title": "下载更新", + "app.update.download_title_with_version": "下载更新 {{version}}", + "app.update.message.check_failed": "检查更新失败: {{error}}", + "app.update.message.download_completed": "更新下载完成", + "app.update.message.download_completed_with_path": "更新下载完成,更新包路径:{{path}}", + "app.update.message.download_failed": "更新下载失败: {{error}}", + "app.update.message.install_failed": "更新安装失败: {{error}}", + "app.update.message.open_install_directory_failed": "打开安装目录失败: {{error}}", + "app.update.message.opened_install_directory": "已打开安装目录,请手动完成替换", + "app.update.message.package_ready": "更新包已就绪({{version}})", + "app.update.message.package_ready_with_path": "更新包已就绪({{version}}),路径:{{path}}", + "app.update.message.update_found": "发现新版本 {{version}}", + "app.update.status.available_downloaded": "发现新版本 {{version}}(已下载,请点击“下载进度”后安装)", + "app.update.status.available_not_downloaded": "发现新版本 {{version}}(未下载)", + "app.update.status.check_failed": "检查更新失败: {{error}}", + "app.update.status.checking": "正在检查更新...", + "app.update.status.latest": "当前已是最新版本({{version}})", + "app.update.status.not_checked": "未检查", + "app.window_zoom.message.fullscreen_exit_first": "全屏状态下无法重置缩放,请先退出全屏", + "app.window_zoom.message.reset_failed": "重置窗口缩放失败", + "app.window_zoom.message.reset_success": "已重置窗口缩放", + "app.window_zoom.message.reset_success_fallback": "已重置窗口缩放(回退方案)", + "app.window_zoom.message.windows_only": "该功能仅在 Windows 平台生效", + "common.back_to_previous": "返回上一步", + "common.cancel": "取消", + "common.close": "关闭", + "common.confirm": "确认", + "common.continue": "继续", + "common.delete": "删除", + "common.edit": "编辑", + "common.error": "错误", + "common.loading": "加载中", + "common.named_item": "{{name}}", + "common.ok": "确定", + "common.refresh": "刷新", + "common.save": "保存", + "common.search": "搜索", + "common.success": "成功", + "common.unknown": "未知", + "common.warning": "警告", + "connection_modal.action.browse": "浏览...", + "connection_modal.action.cancel": "取消", + "connection_modal.action.close": "关闭", + "connection_modal.action.copy_uri": "复制 URI", + "connection_modal.action.disable": "禁用", + "connection_modal.action.discover_members": "自动发现成员", + "connection_modal.action.enable_and_prefer": "启用并设为首选", + "connection_modal.action.generate_uri": "生成 URI", + "connection_modal.action.open_driver_manager": "去驱动管理安装", + "connection_modal.action.parse_uri": "解析 URI", + "connection_modal.action.previous_step": "上一步", + "connection_modal.action.reset_default": "恢复默认", + "connection_modal.action.save": "保存", + "connection_modal.action.test": "测试连接", + "connection_modal.action.view_reason": "查看原因", + "connection_modal.appearance.color": "颜色", + "connection_modal.appearance.current_icon": "当前图标:{{icon}}", + "connection_modal.appearance.custom_color": "自定义颜色", + "connection_modal.appearance.icon": "图标", + "connection_modal.appearance.preview": "预览", + "connection_modal.badge.current": "当前", + "connection_modal.badge.current_editing": "当前编辑", + "connection_modal.badge.preferred": "首选", + "connection_modal.config_section.connectionMode.description": "配置单机、主从、集群或 Replica Set 模式。", + "connection_modal.config_section.connectionMode.title": "连接模式", + "connection_modal.config_section.credentials.description": "配置用户名、密码和已保存凭据。", + "connection_modal.config_section.credentials.title": "凭据", + "connection_modal.config_section.customDriver.description": "配置自定义驱动名称。", + "connection_modal.config_section.customDriver.title": "自定义驱动", + "connection_modal.config_section.customDsn.description": "配置驱动专用 DSN。", + "connection_modal.config_section.customDsn.title": "自定义 DSN", + "connection_modal.config_section.databaseScope.description": "选择连接后显示的数据库。", + "connection_modal.config_section.databaseScope.title": "数据库范围", + "connection_modal.config_section.fileTarget.description": "选择本地数据库文件。", + "connection_modal.config_section.fileTarget.title": "文件数据库", + "connection_modal.config_section.identity.description": "配置连接名称、图标和基本标识。", + "connection_modal.config_section.identity.title": "身份信息", + "connection_modal.config_section.jvmRuntime.description": "配置 JVM 访问模式和诊断能力。", + "connection_modal.config_section.jvmRuntime.title": "JVM 运行时", + "connection_modal.config_section.mongoDiscovery.description": "发现并管理 MongoDB 成员。", + "connection_modal.config_section.mongoDiscovery.title": "MongoDB 发现", + "connection_modal.config_section.mongoPolicy.description": "配置 MongoDB 认证、readPreference 和保存策略。", + "connection_modal.config_section.mongoPolicy.title": "MongoDB 策略", + "connection_modal.config_section.replica.description": "配置从库或附加节点。", + "connection_modal.config_section.replica.title": "副本/从库", + "connection_modal.config_section.service.description": "配置服务名、默认数据库和可见数据库范围。", + "connection_modal.config_section.service.title": "服务与数据库", + "connection_modal.config_section.target.description": "配置主机、端口和连接目标。", + "connection_modal.config_section.target.title": "目标地址", + "connection_modal.config_section.uri.description": "输入、生成或解析连接 URI。", + "connection_modal.config_section.uri.title": "连接 URI", + "connection_modal.db_icon_label.custom": "自定义", + "connection_modal.db_type_hint.custom": "使用自定义驱动和 DSN 连接数据库。", + "connection_modal.db_type_hint.file": "选择本地 SQLite 或 DuckDB 数据库文件。", + "connection_modal.db_type_hint.mongodb": "连接 MongoDB 单节点、Replica Set 或 SRV 地址。", + "connection_modal.db_type_hint.redis": "连接 Redis 单机或 Redis Cluster。", + "connection_modal.db_type_hint.standard": "填写主机、端口、认证信息和可选数据库。", + "connection_modal.db_type.custom": "自定义", + "connection_modal.driver.current": "当前", + "connection_modal.error.unknown": "未知错误", + "connection_modal.error.unknown_exception": "未知错误", + "connection_modal.field.additional_hosts": "附加主机", + "connection_modal.field.additional_srv_hosts_optional": "附加 SRV 主机(可选)", + "connection_modal.field.auth_source": "认证库 (authSource)", + "connection_modal.field.clickHouseProtocol.auto": "自动", + "connection_modal.field.cluster_additional_hosts": "集群附加节点", + "connection_modal.field.connection_name": "连接名称", + "connection_modal.field.connection_timeout_seconds": "连接超时(秒)", + "connection_modal.field.connection_timeout_seconds_ascii": "连接超时(秒)", + "connection_modal.field.default_database_optional": "默认连接数据库(可选)", + "connection_modal.field.defaultDatabase.placeholder": "例如:appdb", + "connection_modal.field.display_databases_optional": "显示数据库(可选)", + "connection_modal.field.driver_name": "驱动名称", + "connection_modal.field.driver.placeholder": "例如: mysql, postgres", + "connection_modal.field.dsn": "DSN", + "connection_modal.field.dsn.placeholder": "例如: user:pass@tcp(localhost:3306)/dbname?charset=utf8", + "connection_modal.field.file_path_absolute": "文件路径(绝对路径)", + "connection_modal.field.host": "主机", + "connection_modal.field.host_address": "主机地址", + "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "如果 Oracle 租户连接报「Error 1235」或 OBClient 握手失败,可在「连接参数」字段通过 {{attributes}} 覆盖 GoNavi 默认注入的 OBClient capability。", + "connection_modal.field.oceanBaseProtocol.help.primary": "MySQL 租户请选择 MySQL;Oracle 租户请选择 Oracle。GoNavi 会根据端口自动选择:OB MySQL wire 端口走 OBClient capability 注入(与 Navicat 相同路径),OBProxy Oracle listener 端口走标准 TNS。", + "connection_modal.field.oceanBaseProtocol.label": "OceanBase 协议", + "connection_modal.field.password": "密码", + "connection_modal.field.password_optional": "密码(可选)", + "connection_modal.field.port": "端口", + "connection_modal.field.port_plain": "端口", + "connection_modal.field.primary_port": "主端口", + "connection_modal.field.private_key_path_optional": "私钥路径(可选)", + "connection_modal.field.proxy_host": "代理主机", + "connection_modal.field.proxy_password_optional": "代理密码(可选)", + "connection_modal.field.proxy_type": "代理类型", + "connection_modal.field.proxy_username_optional": "代理用户名(可选)", + "connection_modal.field.replica_hosts": "从库地址列表", + "connection_modal.field.replica_password_optional": "从库密码(可选)", + "connection_modal.field.replica_set_optional": "Replica Set(可选)", + "connection_modal.field.replica_set_password_optional": "Replica Set 密码(可选)", + "connection_modal.field.replica_set_username_optional": "Replica Set 用户名(可选)", + "connection_modal.field.replica_username_optional": "从库用户名(可选)", + "connection_modal.field.save_password": "保存密码", + "connection_modal.field.service_name": "服务名", + "connection_modal.field.serviceName.placeholder": "例如:ORCLPDB1", + "connection_modal.field.ssh_host": "SSH 主机", + "connection_modal.field.ssh_password": "SSH 密码", + "connection_modal.field.ssh_user": "SSH 用户", + "connection_modal.field.ssl_cert_path": "SSL 证书路径", + "connection_modal.field.ssl_key_path": "SSL 私钥路径", + "connection_modal.field.tunnel_host": "HTTP Tunnel 主机", + "connection_modal.field.tunnel_password_optional": "HTTP Tunnel 密码(可选)", + "connection_modal.field.tunnel_username_optional": "HTTP Tunnel 用户名(可选)", + "connection_modal.field.uri": "URI", + "connection_modal.field.username": "用户名", + "connection_modal.field.username.optional_placeholder": "未开启认证可留空", + "connection_modal.group.chinese_databases": "国产数据库", + "connection_modal.group.other": "其他", + "connection_modal.group.relational": "关系型数据库", + "connection_modal.group.time_series": "时序数据库", + "connection_modal.help.additional_hosts": "可选 MongoDB 成员,使用逗号、分号或空格分隔。", + "connection_modal.help.additional_srv_hosts": "可选的附加 SRV 主机,用于 MongoDB 发现。", + "connection_modal.help.connection_timeout": "用于连接测试和元数据加载,范围 1-300 秒。", + "connection_modal.help.custom_driver": "已支持: mysql, postgres, sqlite, oracle, dm, kingbase;别名支持 postgresql/pgx、dm8、kingbase8/kingbasees/kingbasev8。当前不支持通过 JDBC Jar 扩展驱动。", + "connection_modal.help.default_database": "留空则使用服务器默认数据库。", + "connection_modal.help.oracle_service_name": "Oracle 服务名,例如 ORCLPDB1。", + "connection_modal.help.private_key_path": "使用私钥进行 SSH 认证;如果私钥未加密,可留空密码。", + "connection_modal.help.redis_cluster_hosts": "附加 Redis Cluster 节点,使用逗号、分号或空格分隔。", + "connection_modal.help.replica_hosts": "从库地址使用 host:port 格式,使用逗号、分号或空格分隔。", + "connection_modal.help.select_after_test": "请先测试连接以加载可选数据库。", + "connection_modal.help.uri": "可粘贴完整连接 URI,也可从当前表单生成 URI。", + "connection_modal.jvm.access_mode_description": "选择此 JVM 连接可使用的接入模式,并指定首选模式。", + "connection_modal.jvm.access_mode_title": "接入模式", + "connection_modal.jvm.agent_api_key_optional": "Agent API 密钥(可选)", + "connection_modal.jvm.agent_description": "通过 GoNavi Agent 连接,适用于无法直连的网络环境。", + "connection_modal.jvm.agent_help": "GoNavi Agent 服务的基础 URL。", + "connection_modal.jvm.agent_url": "Agent 地址", + "connection_modal.jvm.diagnostic_api_key_optional": "诊断 API 密钥(可选)", + "connection_modal.jvm.diagnostic_description": "启用可选诊断命令,用于 JVM 故障排查。", + "connection_modal.jvm.diagnostic_disabled_hint": "诊断增强未启用,仅在需要运行时排查时开启。", + "connection_modal.jvm.diagnostic_timeout_seconds": "诊断超时(秒)", + "connection_modal.jvm.diagnostic_title": "诊断增强", + "connection_modal.jvm.diagnostic_transport": "诊断传输", + "connection_modal.jvm.diagnostic.agent_bridge_description": "使用 GoNavi Agent Bridge 诊断 Endpoint。", + "connection_modal.jvm.diagnostic.arthas_tunnel_description": "通过 Arthas Tunnel 访问目标 JVM。", + "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Arthas Tunnel 服务器的基础 URL。", + "connection_modal.jvm.diagnostic.arthas_tunnel_url": "Arthas Tunnel 地址", + "connection_modal.jvm.diagnostic.bridge_help": "GoNavi 诊断桥接服务的基础 URL。", + "connection_modal.jvm.diagnostic.bridge_url": "诊断桥接地址", + "connection_modal.jvm.diagnostic.mutating_commands": "变更类命令", + "connection_modal.jvm.diagnostic.mutating_commands_description": "允许可能改变运行时状态的命令,仅在受控环境使用。", + "connection_modal.jvm.diagnostic.observe_commands": "观察类命令", + "connection_modal.jvm.diagnostic.observe_commands_description": "允许 dashboard、thread、JVM 信息等只读命令。", + "connection_modal.jvm.diagnostic.target_agent_id": "目标 Agent ID", + "connection_modal.jvm.diagnostic.target_agent_id_help": "Arthas Tunnel 中注册的 Agent ID。", + "connection_modal.jvm.diagnostic.target_id": "目标 ID", + "connection_modal.jvm.diagnostic.target_id_help": "诊断桥接服务识别的目标 ID;留空则由桥接服务选择默认目标。", + "connection_modal.jvm.diagnostic.trace_commands": "追踪类命令", + "connection_modal.jvm.diagnostic.trace_commands_description": "允许 trace 与 watch 等会增加运行时开销的命令。", + "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", + "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", + "connection_modal.jvm.endpoint_api_key_optional": "Endpoint API 密钥(可选)", + "connection_modal.jvm.endpoint_description": "使用服务暴露的 Endpoint 连接,而不是直连 JMX。", + "connection_modal.jvm.endpoint_help": "JVM 管理 Endpoint 的基础 URL。", + "connection_modal.jvm.endpoint_url": "Endpoint 地址", + "connection_modal.jvm.environment": "环境", + "connection_modal.jvm.environment.dev": "开发", + "connection_modal.jvm.environment.dev_description": "风险较低的测试环境。", + "connection_modal.jvm.environment.prod": "生产", + "connection_modal.jvm.environment.prod_description": "生产环境,建议优先使用只读操作。", + "connection_modal.jvm.environment.uat": "UAT", + "connection_modal.jvm.environment.uat_description": "上线前验证环境。", + "connection_modal.jvm.jmx_description": "通过 JMX 使用主机、端口和可选凭据连接。", + "connection_modal.jvm.jmx_host_override_optional": "JMX 主机覆盖(可选)", + "connection_modal.jvm.jmx_password_optional": "JMX 密码(可选)", + "connection_modal.jvm.jmx_port": "JMX 端口", + "connection_modal.jvm.jmx_username_optional": "JMX 用户名(可选)", + "connection_modal.jvm.mode.agent_description": "通过 GoNavi Agent 访问防火墙或 NAT 后的环境。", + "connection_modal.jvm.mode.endpoint_description": "使用目标服务暴露的 HTTP Endpoint。", + "connection_modal.jvm.mode.jmx_description": "使用标准 JMX 远程访问。", + "connection_modal.jvm.preferred_mode_hint": "当前首选模式:{{mode}}", + "connection_modal.jvm.read_only_first": "优先只读操作", + "connection_modal.jvm.security_policy": "安全策略", + "connection_modal.jvm.target_description": "配置 JVM 管理端点的主机、端口和访问方式。", + "connection_modal.jvm.target_title": "JVM 目标", + "connection_modal.layout.custom": "自定义驱动连接", + "connection_modal.layout.file": "文件数据库连接", + "connection_modal.layout.generic_sql": "通用 SQL 连接", + "connection_modal.layout.jvm": "JVM 运行时连接", + "connection_modal.layout.mongodb": "MongoDB 连接", + "connection_modal.layout.mysql_compatible": "MySQL 兼容连接", + "connection_modal.layout.oracle": "Oracle 连接", + "connection_modal.layout.postgres_compatible": "PostgreSQL 兼容连接", + "connection_modal.layout.redis": "Redis 连接", "connection_modal.layoutKind.custom": "自定义驱动", "connection_modal.layoutKind.file": "文件型数据库", "connection_modal.layoutKind.genericSql": "标准 SQL", @@ -6846,18 +3062,1308 @@ "connection_modal.layoutKind.search": "搜索引擎", "connection_modal.layoutKind.timeseries": "时序数据库", "connection_modal.layoutKind.vector": "向量数据库", + "connection_modal.message.connection_failed": "连接失败", + "connection_modal.message.connection_params_incomplete": "连接参数不完整", + "connection_modal.message.connection_rejected": "连接被拒绝", + "connection_modal.message.connection_success": "连接成功", + "connection_modal.message.copy_failed": "复制失败", + "connection_modal.message.current_driver_not_enabled": "当前驱动未安装或未启用", + "connection_modal.message.dameng_ssl_cert_required": "启用达梦 SSL 时必须填写证书和私钥路径", + "connection_modal.message.database_list_failed": "加载数据库列表失败:{{error}}", + "connection_modal.message.database_list_timeout": "操作超时({{seconds}} 秒)", + "connection_modal.message.driver_not_enabled": "驱动未安装或未启用", + "connection_modal.message.driver_not_enabled_with_name": "{{name}} 驱动未安装或未启用。请先在驱动管理中安装并启用。", + "connection_modal.message.driver_not_enabled_with_name_short": "{{name}} 驱动未安装或未启用,请先在驱动管理中处理。", + "connection_modal.message.driver_unavailable_title": "{{name}} 驱动不可用", + "connection_modal.message.http_tunnel_host_required": "请输入 HTTP Tunnel 主机", + "connection_modal.message.http_tunnel_port_invalid": "HTTP Tunnel 端口无效", + "connection_modal.message.member_discovery_failed": "发现 MongoDB 成员失败", + "connection_modal.message.member_discovery_success": "已发现 {{count}} 个成员", + "connection_modal.message.no_visible_databases": "未获取到可见数据库", + "connection_modal.message.no_visible_schema": "未获取到可见结构", + "connection_modal.message.required_fields_before_test": "请先填写必填字段,再测试连接", + "connection_modal.message.save_backend_unavailable": "保存功能不可用:后端接口未就绪", + "connection_modal.message.save_created_disconnected": "配置已保存(未连接)", + "connection_modal.message.save_failed": "保存连接失败", + "connection_modal.message.save_security_refresh_failed": "配置已保存,但刷新安全信息失败", + "connection_modal.message.save_updated_disconnected": "配置已保存(未连接)", + "connection_modal.message.select_database_file_failed": "选择数据库文件失败:{{error}}", + "connection_modal.message.select_ssh_key_failed": "选择 SSH 私钥失败:{{error}}", + "connection_modal.message.srv_with_ssh_dns_warning": "SRV 与 SSH Tunnel 同时启用时可能依赖本地 DNS 解析;如解析失败,请改用标准主机列表。", + "connection_modal.message.test_failed_detail": "测试失败:{{detail}}", + "connection_modal.message.test_requires_new_mongo_replica_password": "请先输入新的 MongoDB Replica Set 密码,再测试连接。", + "connection_modal.message.test_requires_new_mongodb_password": "请先输入新的 MongoDB 密码,再测试连接。", + "connection_modal.message.test_requires_new_password": "请先输入新的连接密码,再测试连接。", + "connection_modal.message.test_requires_new_proxy_password": "请先输入新的代理密码,再测试连接。", + "connection_modal.message.test_requires_new_replica_password": "请先输入新的从库密码,再测试连接。", + "connection_modal.message.test_requires_new_ssh_password": "请先输入新的 SSH 密码,再测试连接。", + "connection_modal.message.test_requires_new_tunnel_password": "请先输入新的 HTTP Tunnel 密码,再测试连接。", + "connection_modal.message.test_timeout": "操作超时({{seconds}} 秒)", + "connection_modal.message.unsupported_jvm_diagnostic_transport": "当前选择的 JVM 诊断传输不受支持", + "connection_modal.message.unsupported_jvm_modes": "当前选择的 JVM 接入模式不受支持", + "connection_modal.message.unsupported_jvm_modes_current": "当前连接包含不受支持的 JVM 接入模式", + "connection_modal.message.unsupported_jvm_modes_detected": "检测到不受支持的 JVM 接入模式", + "connection_modal.message.uri_copied": "URI 已复制", + "connection_modal.message.uri_empty_copy": "没有可复制的 URI", + "connection_modal.message.uri_generate_failed": "生成 URI 失败", + "connection_modal.message.uri_generated": "URI 已生成", + "connection_modal.message.uri_parse_failed": "解析 URI 失败", + "connection_modal.message.uri_parsed": "URI 已解析到表单", + "connection_modal.message.uri_required": "请先输入 URI", + "connection_modal.message.uri_type_mismatch": "URI 类型与当前数据源不匹配", + "connection_modal.messageQueue.kafka.defaultTopic.help": "留空时必须在 SQL 中显式指定 Topic;填写后可直接执行 SHOW、CONSUME 或 SELECT 预览。", + "connection_modal.messageQueue.kafka.defaultTopic.label": "默认 Topic(可选)", + "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "例如:orders.events", + "connection_modal.messageQueue.kafka.extraBrokers.help": "可输入多个 broker 地址,格式:host:port(回车确认)", + "connection_modal.messageQueue.kafka.extraBrokers.label": "额外 Broker 地址", + "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "例如:10.10.0.12:9092、10.10.0.13:9092", + "connection_modal.messageQueue.kafka.topology.cluster.description": "配置多个 bootstrap broker,提高发现与故障切换成功率。", + "connection_modal.messageQueue.kafka.topology.single.description": "只配置一个 bootstrap broker,适合本地或简单环境。", + "connection_modal.messageQueue.kafka.topology.single.label": "单 Broker", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "留空时必须在 SQL 中显式指定 Topic;填写后可直接执行 SHOW、CONSUME 或 SELECT 预览。支持使用 /、+、#。", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "默认 Topic / Filter(可选)", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "例如:devices/+/telemetry", + "connection_modal.messageQueue.mqtt.extraBrokers.help": "可输入多个 broker 地址,格式:host:port(回车确认)", + "connection_modal.messageQueue.mqtt.extraBrokers.label": "额外 Broker 地址", + "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "例如:10.10.0.12:1883、10.10.0.13:1883", + "connection_modal.messageQueue.mqtt.topology.cluster.description": "配置多个 broker,提高连接发现与故障切换成功率。", + "connection_modal.messageQueue.mqtt.topology.single.description": "只配置一个 broker,适合本地或简单环境。", + "connection_modal.messageQueue.mqtt.topology.single.label": "单 Broker", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "留空默认使用 /;填写后查询编辑器会以当前 vhost 作为 Queue 浏览与测试发送上下文。", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "默认 Virtual Host(可选)", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "例如:/ 或 orders-vhost", + "connection_modal.messageQueue.rocketmq.defaultTopic.help": "留空时必须在 SQL 中显式指定 Topic;连接参数可继续补充 groupId、namespace、tag、pullBatchSize 与 startOffset。", + "connection_modal.messageQueue.rocketmq.defaultTopic.label": "默认 Topic(可选)", + "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "例如:orders.events", + "connection_modal.messageQueue.rocketmq.extraNameServers.help": "可输入多个 NameServer 地址,格式:host:port(回车确认)", + "connection_modal.messageQueue.rocketmq.extraNameServers.label": "额外 NameServer 地址", + "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "例如:10.10.0.12:9876、10.10.0.13:9876", + "connection_modal.messageQueue.rocketmq.topology.cluster.description": "配置多个 NameServer,提高路由发现与故障切换成功率。", + "connection_modal.messageQueue.rocketmq.topology.single.description": "只配置一个 NameServer,适合本地或简单环境。", + "connection_modal.messageQueue.rocketmq.topology.single.label": "单 NameServer", + "connection_modal.messageQueue.topology.cluster.label": "集群模式", + "connection_modal.mongodb.auth_mechanism": "认证机制", + "connection_modal.mongodb.auth.auto": "自动", + "connection_modal.mongodb.auth.auto_description": "由驱动自动选择认证机制。", + "connection_modal.mongodb.auth.aws_iam_description": "使用 AWS IAM 认证,请在运行环境中提供 AWS IAM 凭据。", + "connection_modal.mongodb.auth.none": "无认证", + "connection_modal.mongodb.auth.none_description": "不使用 MongoDB 认证连接。", + "connection_modal.mongodb.auth.scram_sha1_description": "使用 SCRAM-SHA-1 认证。", + "connection_modal.mongodb.auth.scram_sha256_description": "使用 SCRAM-SHA-256 认证。", + "connection_modal.mongodb.discovery.current": "当前", + "connection_modal.mongodb.discovery.srv_ssh_warning": "SRV 与 SSH 隧道同时启用时,可能依赖本地 DNS 解析能力", + "connection_modal.mongodb.discovery.srv.description": "使用 mongodb+srv,由 DNS 发现目标节点。", + "connection_modal.mongodb.discovery.srv.label": "SRV 地址", + "connection_modal.mongodb.discovery.standard.description": "使用 host:port 直连或副本集节点列表。", + "connection_modal.mongodb.discovery.standard.label": "标准地址", + "connection_modal.mongodb.members.health": "健康", + "connection_modal.mongodb.members.health.error": "异常", + "connection_modal.mongodb.members.health.ok": "正常", + "connection_modal.mongodb.members.role": "角色", + "connection_modal.mongodb.policy.auth_source.label": "认证库 (authSource)", + "connection_modal.mongodb.policy.auth_source.placeholder": "默认使用 database 或 admin", + "connection_modal.mongodb.read_preference": "readPreference", + "connection_modal.mongodb.read_preference.nearest": "读取最近的成员。", + "connection_modal.mongodb.read_preference.primary": "仅从 primary 读取。", + "connection_modal.mongodb.read_preference.primary_preferred": "优先从 primary 读取,必要时回退到 secondary。", + "connection_modal.mongodb.read_preference.secondary": "仅从 secondary 读取。", + "connection_modal.mongodb.read_preference.secondary_preferred": "优先从 secondary 读取,必要时回退到 primary。", + "connection_modal.mongodb.replica.hosts.srv.help": "可输入多个候选主机名,格式:host;若留空则仅使用上方主机。", + "connection_modal.mongodb.replica.hosts.srv.label": "附加 SRV 主机(可选)", + "connection_modal.mongodb.replica.hosts.srv.placeholder": "例如:cluster-a.example.com、cluster-b.example.com", + "connection_modal.mongodb.replica.hosts.standard.help": "可输入多个节点地址,格式:host:port(回车确认)", + "connection_modal.mongodb.replica.hosts.standard.label": "附加节点地址", + "connection_modal.mongodb.replica.hosts.standard.placeholder": "例如:10.10.0.12:27017、10.10.0.13:27017", + "connection_modal.mongodb.replica.password.clear": "清除已保存副本集密码", + "connection_modal.mongodb.replica.password.description": "当前已保存副本集密码。留空表示继续沿用,输入新值表示替换。", + "connection_modal.mongodb.replica.password.label": "副本集密码(可选)", + "connection_modal.mongodb.replica.password.placeholder.empty": "留空沿用主密码", + "connection_modal.mongodb.replica.password.placeholder.retained": "已保存副本集密码", + "connection_modal.mongodb.replica.set.label": "副本集名称(可选)", + "connection_modal.mongodb.replica.set.placeholder": "例如:rs0", + "connection_modal.mongodb.replica.user.label": "副本集用户名(可选)", + "connection_modal.mongodb.replica.user.placeholder": "留空沿用主用户名", + "connection_modal.mongodb.srv_address": "SRV 地址", + "connection_modal.mongodb.srv_address_description": "使用 MongoDB SRV 记录发现主机。", + "connection_modal.mongodb.standard_address": "标准地址", + "connection_modal.mongodb.standard_address_description": "使用主机、端口和可选成员列表。", + "connection_modal.mongodb.topology.replica.label": "副本集 / 多节点", + "connection_modal.mongodb.topology.single.label": "单机模式", + "connection_modal.network.http_tunnel": "HTTP Tunnel", + "connection_modal.network.http_tunnel_description": "通过 HTTP Tunnel 转发数据库流量。", + "connection_modal.network.http_tunnel_disabled_hint": "启用 HTTP Tunnel 后可配置 Tunnel 主机、端口和凭据。", + "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel 不能与 SSH Tunnel 或代理同时使用。", + "connection_modal.network.http_tunnel_panel_description": "为此连接配置 HTTP Tunnel 网关。", + "connection_modal.network.proxy": "代理", + "connection_modal.network.proxy_disabled_hint": "启用代理后,此连接会通过 SOCKS5 或 HTTP CONNECT 转发。", + "connection_modal.network.proxy_panel_description": "配置此连接的专用代理设置。", + "connection_modal.network.proxy_type.http_description": "使用 HTTP CONNECT 代理。", + "connection_modal.network.proxy_type.socks5_description": "使用 SOCKS5 代理。", + "connection_modal.network.ssh_disabled_hint": "启用 SSH Tunnel 后可通过跳板机连接。", + "connection_modal.network.ssh_panel_description": "配置 SSH Tunnel 主机、凭据和可选私钥。", + "connection_modal.network.ssh_tunnel": "SSH Tunnel", + "connection_modal.network.ssh_tunnel_description": "先通过 SSH Tunnel 再访问数据库。", + "connection_modal.network.ssl_description": "使用 SSL/TLS 加密数据库连接。", + "connection_modal.network.ssl_disabled_hint": "启用 SSL/TLS 后可配置证书策略。", + "connection_modal.network.ssl_mode": "SSL 模式", + "connection_modal.network.ssl_mode.preferred": "首选", + "connection_modal.network.ssl_mode.preferred_description": "优先尝试 SSL,服务器不要求加密时允许回退。", + "connection_modal.network.ssl_mode.required": "必需", + "connection_modal.network.ssl_mode.required_description": "必须使用 SSL,无法建立加密连接时失败。", + "connection_modal.network.ssl_mode.skip_verify": "跳过验证", + "connection_modal.network.ssl_mode.skip_verify_description": "使用 SSL 但跳过证书校验,仅用于测试或自签证书。", + "connection_modal.network.ssl_panel_description": "配置此连接的 SSL/TLS 策略。", + "connection_modal.network.ssl_tls": "SSL/TLS", + "connection_modal.placeholder.absolute_path": "/绝对/路径/文件", + "connection_modal.placeholder.agent_api_key": "可选 Agent API 密钥", + "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", + "connection_modal.placeholder.connection_name": "连接名称", + "connection_modal.placeholder.connection_name_fallback": "连接名称", + "connection_modal.placeholder.custom_dsn_example": "示例:驱动专用 DSN", + "connection_modal.placeholder.default_database_or_admin": "默认数据库或 admin", + "connection_modal.placeholder.diagnostic_api_key": "可选诊断 API 密钥", + "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", + "connection_modal.placeholder.diagnostic_target_id": "目标 ID", + "connection_modal.placeholder.driver_name": "驱动名称", + "connection_modal.placeholder.empty_without_auth": "无认证时留空", + "connection_modal.placeholder.endpoint_api_key": "可选 Endpoint API 密钥", + "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", + "connection_modal.placeholder.example_appdb": "appdb", + "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", + "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", + "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", + "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", + "connection_modal.placeholder.example_rs0": "rs0", + "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", + "connection_modal.placeholder.jvm_name": "JVM 连接名称", + "connection_modal.placeholder.no_auth": "无认证", + "connection_modal.placeholder.proxy_host": "127.0.0.1", + "connection_modal.placeholder.redis_password": "Redis 密码", + "connection_modal.placeholder.select_databases": "选择要显示的数据库", + "connection_modal.placeholder.select_redis_databases": "选择要显示的 Redis 数据库", + "connection_modal.placeholder.ssh_host": "bastion.example.com", + "connection_modal.placeholder.ssl_cert_path": "/绝对/路径/client.crt", + "connection_modal.placeholder.ssl_key_path": "/绝对/路径/client.key", + "connection_modal.placeholder.tunnel_host": "tunnel.example.com", + "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", + "connection_modal.placeholder.use_primary_host": "使用主连接主机", + "connection_modal.placeholder.use_primary_password": "使用主连接密码", + "connection_modal.placeholder.use_primary_password_short": "使用主密码", + "connection_modal.placeholder.use_primary_port": "使用主连接端口", + "connection_modal.placeholder.use_primary_username": "使用主连接用户名", + "connection_modal.placeholder.use_primary_username_short": "使用主用户名", + "connection_modal.redis.credentials.primary.label": "密码 (可选)", + "connection_modal.redis.credentials.primary.placeholder.empty": "Redis 密码(如果设置了 requirepass)", + "connection_modal.redis.credentials.primary.placeholder.retained": "已保存 Redis 密码", + "connection_modal.redis.credentials.sentinelPassword.clear": "清除已保存 Sentinel 密码", + "connection_modal.redis.credentials.sentinelPassword.description": "当前已保存 Sentinel 密码。留空表示继续沿用,输入新值表示替换。", + "connection_modal.redis.credentials.sentinelPassword.label": "Sentinel 密码(可选)", + "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Sentinel 自身认证密码,留空则不发送", + "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "已保存 Sentinel 密码", + "connection_modal.redis.credentials.sentinelUser.label": "Sentinel 用户名(可选)", + "connection_modal.redis.credentials.sentinelUser.placeholder": "留空表示 Sentinel 不使用 ACL 用户名", + "connection_modal.redis.databaseScope.help": "连接测试成功后可选择", + "connection_modal.redis.databaseScope.label": "显示数据库 (留空显示全部)", + "connection_modal.redis.databaseScope.placeholder": "选择显示的数据库", + "connection_modal.redis.hosts.cluster.help": "主节点使用上方主机地址;这里填写其他种子节点,格式:host:port", + "connection_modal.redis.hosts.cluster.label": "集群附加节点地址", + "connection_modal.redis.hosts.cluster.placeholder": "例如:10.10.0.12:6379、10.10.0.13:6379", + "connection_modal.redis.hosts.sentinel.help": "上方主机地址作为第一个 Sentinel;这里填写其他 Sentinel 节点,格式:host:port", + "connection_modal.redis.hosts.sentinel.label": "Sentinel 附加节点地址", + "connection_modal.redis.hosts.sentinel.placeholder": "例如:10.10.0.12:26379、10.10.0.13:26379", + "connection_modal.redis.sentinel.master.help": "填写 Sentinel 配置中的 monitor 名称,例如 mymaster。", + "connection_modal.redis.sentinel.master.label": "Sentinel master 名称", + "connection_modal.redis.sentinel.master.placeholder": "例如:mymaster", + "connection_modal.redis.sentinel.master.required": "请输入 Sentinel master 名称", + "connection_modal.redis.topology.cluster.description": "Redis Cluster,配置多个种子节点。", + "connection_modal.redis.topology.cluster.label": "集群模式", + "connection_modal.redis.topology.sentinel.description": "通过 Sentinel 发现主节点,适合主从高可用。", + "connection_modal.redis.topology.sentinel.label": "哨兵模式", + "connection_modal.redis.topology.single.description": "只连接一个 Redis 节点。", + "connection_modal.redis.topology.single.label": "单机模式", + "connection_modal.secret.blocking.redis_sentinel": "测试连接前请填写新的 Sentinel 密码,或取消清除已保存 Sentinel 密码", + "connection_modal.secret.clear_saved_dsn": "清除已保存的 DSN", + "connection_modal.secret.clear_saved_mongo_replica_password": "清除已保存的 MongoDB 副本密码", + "connection_modal.secret.clear_saved_password": "清除已保存密码", + "connection_modal.secret.clear_saved_proxy_password": "清除已保存的代理密码", + "connection_modal.secret.clear_saved_replica_password": "清除已保存的从库密码", + "connection_modal.secret.clear_saved_ssh_password": "清除已保存的 SSH 密码", + "connection_modal.secret.clear_saved_tunnel_password": "清除已保存的 HTTP Tunnel 密码", + "connection_modal.secret.clear_saved_uri": "清除已保存的 URI", "connection_modal.secret.error.saved_connection_deleted": "未找到已保存连接,可能已被删除,请刷新后重试", + "connection_modal.secret.error.saved_connection_missing": "未找到当前连接对应的已保存密文,请重新填写密码并保存后再试", + "connection_modal.secret.error.store_unavailable": "系统密文存储当前不可用,请检查系统钥匙串或凭据管理器后再试", + "connection_modal.secret.new_value_replaces_saved": "已输入新值,保存时会替换当前已保存内容。", + "connection_modal.secret.saved_dsn_description": "安全存储中已有 DSN。留空将继续使用该 DSN。", + "connection_modal.secret.saved_mongo_replica_password": "已保存 MongoDB 副本密码", + "connection_modal.secret.saved_mongo_replica_password_description": "安全存储中已有 MongoDB 副本密码。留空将继续使用该密码。", + "connection_modal.secret.saved_password": "已保存密码", + "connection_modal.secret.saved_placeholder": "••••••(留空表示继续沿用{{label}})", + "connection_modal.secret.saved_primary_password_description": "安全存储中已有主连接密码。留空将继续使用该密码。", + "connection_modal.secret.saved_proxy_password": "已保存代理密码", + "connection_modal.secret.saved_proxy_password_description": "安全存储中已有代理密码。留空将继续使用该密码。", + "connection_modal.secret.saved_redis_password": "已保存 Redis 密码", + "connection_modal.secret.saved_redis_password_description": "安全存储中已有 Redis 密码。留空将继续使用该密码。", + "connection_modal.secret.saved_replica_password": "已保存从库密码", + "connection_modal.secret.saved_replica_password_description": "安全存储中已有从库密码。留空将继续使用该密码。", + "connection_modal.secret.saved_ssh_password": "已保存 SSH 密码", + "connection_modal.secret.saved_ssh_password_description": "安全存储中已有 SSH 密码。留空将继续使用该密码。", + "connection_modal.secret.saved_tunnel_password": "已保存 HTTP Tunnel 密码", + "connection_modal.secret.saved_tunnel_password_description": "安全存储中已有 HTTP Tunnel 密码。留空将继续使用该密码。", + "connection_modal.secret.saved_uri_description": "安全存储中已有连接 URI。留空将继续使用该 URI。", + "connection_modal.section.advanced_connection": "高级连接", + "connection_modal.section.appearance.description": "设置连接在侧边栏中的图标和颜色。", + "connection_modal.section.appearance.title": "外观", + "connection_modal.section.basic.description": "命名连接,并填写目标地址、驱动和认证信息。", + "connection_modal.section.basic.jvm_description": "配置 JVM 目标、访问模式和认证信息。", + "connection_modal.section.basic.sql_description": "配置连接目标、驱动、认证信息和数据库范围。", + "connection_modal.section.basic.title": "基础信息", + "connection_modal.section.config_sections": "配置分区", + "connection_modal.section.network.description": "配置 SSL/TLS、SSH Tunnel、代理和 HTTP Tunnel。", + "connection_modal.section.network.nav_description": "配置此连接的网络和安全选项。", + "connection_modal.section.network.title": "网络与安全", + "connection_modal.ssl_hint.dameng": "达梦驱动启用 SSL 需要客户端证书与私钥路径(sslCertPath / sslKeyPath)。", + "connection_modal.ssl_hint.default": "建议优先使用 Required;仅在测试环境或自签证书场景使用 Skip Verify。", + "connection_modal.ssl_hint.mongodb": "MongoDB 可通过 TLS 保护连接,证书校验异常时可先用 Skip Verify 验证连通性。", + "connection_modal.ssl_hint.mysql_like": "MySQL/MariaDB/Doris/Sphinx 开启安全传输策略时请启用 SSL;本地自签证书可先用 Preferred 或 Skip Verify 验证。", + "connection_modal.ssl_hint.sqlserver": "SQL Server 生产环境建议使用 Required,并关闭 TrustServerCertificate。", + "connection_modal.status.disabled": "未启用", + "connection_modal.status.enabled": "已启用", + "connection_modal.status.healthy": "正常", + "connection_modal.status.unhealthy": "异常", + "connection_modal.step.select_source": "选择数据源", + "connection_modal.step.select_source_description": "选择要创建的连接类型。", + "connection_modal.step1.group.domestic": "国产数据库", "connection_modal.step1.group.message_queue": "消息队列", + "connection_modal.step1.group.nosql": "NoSQL 数据库", + "connection_modal.step1.group.other": "其他", + "connection_modal.step1.group.relational": "关系型数据库", + "connection_modal.step1.group.timeseries": "时序数据库", "connection_modal.step1.group.vector": "向量数据库", "connection_modal.step1.hint.chroma": "Collection 浏览、向量检索和元数据过滤", + "connection_modal.step1.hint.custom": "自定义驱动与 DSN", "connection_modal.step1.hint.elasticsearch": "索引浏览、Mapping 检查、JSON DSL 和 query_string 查询", + "connection_modal.step1.hint.file": "本地文件连接", "connection_modal.step1.hint.goldendb": "MySQL 兼容 / 分布式事务", + "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", + "connection_modal.step1.hint.mongodb": "单机 / 副本集", + "connection_modal.step1.hint.oceanBase": "MySQL / Oracle 租户", "connection_modal.step1.hint.qdrant": "Collection 浏览、向量搜索和 Payload 过滤", + "connection_modal.step1.hint.redis": "单机 / 集群", + "connection_modal.step1.hint.standard": "标准连接配置", + "connection_modal.switch.off": "关", + "connection_modal.switch.on": "开", + "connection_modal.table.health": "健康", + "connection_modal.table.role": "角色", + "connection_modal.test_error.description": "查看后端返回的完整错误信息。", + "connection_modal.test_error.empty": "没有错误详情", + "connection_modal.test_error.title": "连接测试失败原因", + "connection_modal.test.redis_database_list_failure": "连接成功,但获取 Redis 数据库列表失败:{{detail}}", + "connection_modal.test.redis_database_list_timeout": "连接成功但拉取 Redis 数据库列表超时(>{{seconds}} 秒)", + "connection_modal.title.create": "新建 {{type}} 连接", + "connection_modal.title.create_description": "填写连接配置并保存。", + "connection_modal.title.edit": "编辑连接", + "connection_modal.title.edit_description": "编辑 {{type}} 连接配置。", + "connection_modal.title.select_type": "选择数据源类型", + "connection_modal.title.select_type_description": "从支持的数据源中选择一种连接类型。", + "connection_modal.topology.cluster": "集群", + "connection_modal.topology.mongodb_replica": "Replica Set", + "connection_modal.topology.mongodb_replica_description": "连接 MongoDB Replica Set,并可选自动发现成员。", + "connection_modal.topology.mongodb_single_description": "连接单个 MongoDB 主机。", + "connection_modal.topology.mysql_replica_description": "使用主连接,并可选配置从库地址。", + "connection_modal.topology.mysql_single_description": "连接单个 MySQL 兼容节点。", + "connection_modal.topology.primary_replica": "主从", + "connection_modal.topology.redis_cluster_description": "连接 Redis Cluster,并列出附加节点。", + "connection_modal.topology.redis_single_description": "连接单个 Redis 节点。", + "connection_modal.topology.single": "单机模式", + "connection_modal.validation.address_or_path_required": "请输入主机地址或文件路径", + "connection_modal.validation.agent_url_required": "请输入 Agent 地址", + "connection_modal.validation.arthas_tunnel_url_required": "请输入 Arthas Tunnel 地址", + "connection_modal.validation.custom_dsn_required": "请输入连接字符串", + "connection_modal.validation.custom_dsn_required_when_clearing_saved": "请输入新的连接字符串,或取消清除已保存 DSN", + "connection_modal.validation.dameng_ssl_cert_path_required": "请输入达梦 SSL 证书路径", + "connection_modal.validation.dameng_ssl_key_path_required": "请输入达梦 SSL 私钥路径", + "connection_modal.validation.diagnostic_bridge_url_required": "请输入诊断桥接地址", + "connection_modal.validation.diagnostic_target_required": "请输入诊断目标", + "connection_modal.validation.diagnostic_timeout_range_1_300": "诊断超时必须在 1 到 300 秒之间", + "connection_modal.validation.driver_name_required": "请输入驱动名称", + "connection_modal.validation.endpoint_url_required": "请输入 Endpoint 地址", + "connection_modal.validation.jvm_access_mode_required": "请至少选择一种 JVM 接入模式", + "connection_modal.validation.jvm_host_required": "请输入 JVM 主机", + "connection_modal.validation.jvm_port_required": "请输入 JVM 端口", + "connection_modal.validation.jvm_preferred_mode_required": "请选择首选 JVM 接入模式", + "connection_modal.validation.oracle_service_required": "请输入 Oracle 服务名", + "connection_modal.validation.port_required": "请输入端口", + "connection_modal.validation.proxy_host_required": "请输入代理主机", + "connection_modal.validation.proxy_port_required": "请输入代理端口", + "connection_modal.validation.ssh_host_required": "请输入 SSH 主机", + "connection_modal.validation.ssh_port_required": "请输入 SSH 端口", + "connection_modal.validation.ssh_user_required": "请输入 SSH 用户", + "connection_modal.validation.timeout_range_1_300": "超时必须在 1 到 300 秒之间", + "connection_modal.validation.tunnel_host_required": "请输入 HTTP Tunnel 主机", + "connection_modal.validation.tunnel_port_required": "请输入 HTTP Tunnel 端口", + "connection_modal.validation.username_required": "请输入用户名", + "connection.copy_suffix": " - 副本", + "connection.delete": "删除连接", + "connection.edit": "编辑连接", + "connection.new": "新建连接", "connection.oceanbase.error.unsupported_protocol": "OceanBase 当前仅支持 MySQL/Oracle 租户协议,不支持 \"{{value}}\";请改为 MySQL 或 Oracle。", + "connection.sidebar.delete.backendUnavailable": "删除连接失败:后端接口不可用", + "connection.sidebar.delete.confirmContent": "确定要删除连接 \"{{name}}\" 吗?", + "connection.sidebar.delete.confirmTitle": "确认删除", + "connection.sidebar.delete.failureFallback": "删除连接失败", + "connection.sidebar.delete.success": "已删除连接", + "connection.sidebar.disconnect.success": "已断开连接", + "connection.sidebar.duplicate.backendUnavailable": "复制连接失败:后端接口不可用", + "connection.sidebar.duplicate.failureFallback": "复制连接失败", + "connection.sidebar.duplicate.noResult": "复制连接失败:后端未返回结果", + "connection.sidebar.duplicate.success": "已复制连接: {{name}}", + "connection.sidebar.group.badge": "分组", + "connection.sidebar.group.collapseAria": "折叠连接分组 {{name}}", + "connection.sidebar.group.delete": "删除分组", + "connection.sidebar.group.deleteConfirmContent": "确定要删除分组 \"{{name}}\" 吗?这不会删除里面的连接。", + "connection.sidebar.group.deleteConfirmTitle": "确认删除", + "connection.sidebar.group.edit": "编辑分组", + "connection.sidebar.group.expandAria": "展开连接分组 {{name}}", + "connection.sidebar.group.meta": "{{count}} 个连接 · 连接分组", + "connection.sidebar.group.untitled": "未命名分组", + "connection.sidebar.menu.copy": "复制连接", + "connection.sidebar.menu.createDatabase": "新建数据库", + "connection.sidebar.menu.current": "当前", + "connection.sidebar.menu.delete": "删除连接", + "connection.sidebar.menu.disconnect": "断开连接", + "connection.sidebar.menu.groupSection": "连接分组", + "connection.sidebar.menu.hostBadge": "HOST", + "connection.sidebar.menu.hostFallback": "未配置地址", + "connection.sidebar.menu.moveOutTag": "移出标签", + "connection.sidebar.menu.moveToTag": "移至标签", + "connection.sidebar.menu.moveToUngrouped": "移出分组", + "connection.sidebar.menu.refresh": "刷新连接", + "connection.sidebar.menu.section": "连接", + "connection.test": "测试连接", + "connection.unnamed": "未命名连接", + "data_grid.action.apply": "应用", + "data_grid.ai_insight.prompt": "请帮我分析以下查询结果数据(取前 {{count}} 条示例):\n```json\n{{json}}\n```\n\n请分析数据特征、发现规律,或者给出一些业务上的洞察。", + "data_grid.ai_prompt.analyze_page": "请分析以下查询结果数据(前 {{count}} 行样本):\n```json\n{{json}}\n```\n\n请分析数据特征、发现规律,或提供业务洞察。", "data_grid.aria.row_number": "行号", + "data_grid.batch_fill.set_null": "设置为 NULL", + "data_grid.batch_fill.title": "批量填充({{count}} 个单元格)", + "data_grid.batch_fill.value_placeholder": "输入要填充的值", + "data_grid.cell_editor.now": "此刻", + "data_grid.cell_editor.title": "编辑单元格", + "data_grid.cell_editor.title_with_column": "编辑单元格:{{column}}", + "data_grid.column_quick_find.placeholder": "跳到字段列...", + "data_grid.column_quick_find.tooltip": "输入字段名,回车或点定位按钮即可跳到对应列", + "data_grid.column_settings.column_visibility": "列显示", + "data_grid.column_settings.display_settings": "显示设置", + "data_grid.column_settings.field_info": "字段信息", + "data_grid.column_settings.hide_all": "全隐藏", + "data_grid.column_settings.remember_column_order": "记住自定义列顺序", + "data_grid.column_settings.remember_hidden_columns": "记住隐藏列设置", + "data_grid.column_settings.reset_hidden": "重置隐藏", + "data_grid.column_settings.reset_hidden_success": "已恢复全列显示", + "data_grid.column_settings.reset_order": "重置顺序", + "data_grid.column_settings.reset_order_success": "已恢复默认列排序", + "data_grid.column_settings.search_columns_placeholder": "搜索列名...", + "data_grid.column_settings.show_all": "全显示", + "data_grid.column_settings.show_comments": "在表头显示列注释", + "data_grid.column_settings.show_types": "在表头显示列类型", + "data_grid.column.comment_tooltip": "注释:{{comment}}", + "data_grid.column.drag_tooltip": "拖动调整列顺序", + "data_grid.column.foreign_key_jump_title": "跳转到外键表:{{tableName}}", + "data_grid.column.foreign_key_tooltip": "外键:{{target}}", + "data_grid.column.resize_tooltip": "拖动调整列宽,双击自动适配", + "data_grid.column.type_tooltip": "类型:{{type}}", + "data_grid.context_menu.auto_fit_column": "按内容自适应列宽", + "data_grid.context_menu.clear_column_sort": "取消此字段排序", + "data_grid.context_menu.column_display_section": "字段显示", + "data_grid.context_menu.column_no_comment": "暂无备注", + "data_grid.context_menu.column_unknown_type": "未知类型", + "data_grid.context_menu.column_unnamed_field": "未命名字段", + "data_grid.context_menu.copy_as_csv": "复制为 CSV", + "data_grid.context_menu.copy_as_delete": "复制为 DELETE", + "data_grid.context_menu.copy_as_insert": "复制为 INSERT", + "data_grid.context_menu.copy_as_json": "复制为 JSON", + "data_grid.context_menu.copy_as_markdown": "复制为 Markdown", + "data_grid.context_menu.copy_as_update": "复制为 UPDATE", + "data_grid.context_menu.copy_column_data": "复制列数据", + "data_grid.context_menu.copy_field_name": "复制字段名称", + "data_grid.context_menu.copy_row_as_new": "复制本行为新增行", + "data_grid.context_menu.copy_row_data": "复制行数据", + "data_grid.context_menu.current_cell": "当前单元格", + "data_grid.context_menu.current_marker": "当前", + "data_grid.context_menu.current_row": "当前行", + "data_grid.context_menu.edit_row": "编辑此行", + "data_grid.context_menu.edit_section": "编辑", + "data_grid.context_menu.export_as_csv": "导出为 CSV", + "data_grid.context_menu.export_as_excel": "导出为 Excel", + "data_grid.context_menu.export_as_html": "导出为 HTML", + "data_grid.context_menu.export_as_json": "导出为 JSON", + "data_grid.context_menu.export_selected": "导出选中数据", + "data_grid.context_menu.fill_to_selected_rows": "填充到选中行({{count}})", + "data_grid.context_menu.hide_column": "隐藏此字段", + "data_grid.context_menu.hide_column_comment": "隐藏字段备注", + "data_grid.context_menu.hide_column_type": "隐藏字段类型", + "data_grid.context_menu.paste_copied_columns": "粘贴已复制列(同名列)", + "data_grid.context_menu.paste_row_as_new": "粘贴为新增行", + "data_grid.context_menu.paste_row_as_new_count": "粘贴为新增行({{count}})", + "data_grid.context_menu.show_column_comment": "显示字段备注", + "data_grid.context_menu.show_column_type": "显示字段类型", + "data_grid.context_menu.sort_ascending": "升序排序", + "data_grid.context_menu.sort_descending": "降序排序", + "data_grid.context_menu.sort_section": "排序", + "data_grid.context_menu.undo_cell_change": "撤销此单元格修改", + "data_grid.copy_sql.error.missing_safe_where": "当前结果集缺少可安全定位行数据的主键/唯一键,且未覆盖表的全部字段,无法生成 WHERE 条件。", + "data_grid.copy_sql.error.missing_table_name": "当前结果集未关联明确表名,无法生成 {{mode}} SQL。", + "data_grid.copy_sql.error.no_copyable_fields": "当前结果集没有可复制的字段,无法生成 SQL。", + "data_grid.data_panel.click_cell_description": "点击表格中的单元格可预览完整数据", + "data_grid.data_panel.click_cell_title": "点击单元格查看数据", + "data_grid.data_panel.title": "数据预览", + "data_grid.datetime_picker.now": "此刻", + "data_grid.ddl.copy": "复制 DDL", + "data_grid.ddl.layout_bottom": "底部", + "data_grid.ddl.layout_side": "侧栏", + "data_grid.ddl.loading": "正在加载 DDL...", + "data_grid.ddl.reload": "重新加载", + "data_grid.ddl.sidebar_aria": "表 DDL 侧栏", + "data_grid.ddl.view": "查看 DDL", + "data_grid.embedded_designer.title": "设计表({{tableName}})", + "data_grid.error_boundary.description": "数据表格渲染时发生错误,数据格式可能无效。", + "data_grid.error_boundary.retry": "重试", + "data_grid.error_boundary.title": "渲染错误", + "data_grid.export.all_data": "导出全部数据", + "data_grid.export.all_rows": "导出全部行({{count}} 行)", + "data_grid.export.all_rows_requery": "导出全部(重新查询)", + "data_grid.export.current_page": "导出当前页({{count}} 行)", + "data_grid.export.current_page_rows": "导出当前页({{count}} 行)", + "data_grid.export.group_filtered_results": "筛选结果", + "data_grid.export.group_full_table": "全表", + "data_grid.export.no_selection_prompt": "未选择行,请选择导出范围:", + "data_grid.export.options_title": "导出选项", + "data_grid.export.query_result_title": "导出查询结果", + "data_grid.export.scope_prompt": "请选择导出范围:", + "data_grid.export.selected_rows": "导出选中行({{count}} 行)", + "data_grid.filter.add_condition": "添加条件", + "data_grid.filter.add_sort": "添加排序", + "data_grid.filter.apply": "应用", + "data_grid.filter.apply_where": "应用 WHERE", + "data_grid.filter.clear": "清空", + "data_grid.filter.custom_where_placeholder": "输入自定义 WHERE 表达式(不含 WHERE),例如:status IN ('A','B')", + "data_grid.filter.disable_all": "全部禁用", + "data_grid.filter.enable_all": "全部启用", + "data_grid.filter.enabled": "启用", + "data_grid.filter.end_value_placeholder": "结束值", + "data_grid.filter.first_condition": "首先", + "data_grid.filter.invalid_quick_where": "WHERE 条件不能包含分号或 SQL 注释", + "data_grid.filter.list_values_placeholder": "多个值用逗号或换行分隔", + "data_grid.filter.logic.and": "且 (AND)", + "data_grid.filter.logic.or": "或 (OR)", + "data_grid.filter.mongodb_query_placeholder": "输入 MongoDB JSON 查询对象,例如 {\"status\":\"A\"}", + "data_grid.filter.no_value_placeholder": "无需输入值", + "data_grid.filter.op.between": "介于", + "data_grid.filter.op.contains": "包含", + "data_grid.filter.op.custom": "[自定义]", + "data_grid.filter.op.ends_with": "结尾为", + "data_grid.filter.op.in_list": "在列表中", + "data_grid.filter.op.is_empty": "为空字符串", + "data_grid.filter.op.is_not_empty": "不为空字符串", + "data_grid.filter.op.is_not_null": "不是 NULL", + "data_grid.filter.op.is_null": "为 NULL", + "data_grid.filter.op.not_between": "不介于", + "data_grid.filter.op.not_contains": "不包含", + "data_grid.filter.op.not_ends_with": "结尾不是", + "data_grid.filter.op.not_in_list": "不在列表中", + "data_grid.filter.op.not_starts_with": "开头不是", + "data_grid.filter.op.starts_with": "开头为", + "data_grid.filter.quick_where_placeholder": "输入 WHERE 后面的条件,例如 status = 1 AND name LIKE 'A%'", + "data_grid.filter.search_field_placeholder": "搜索字段名", + "data_grid.filter.select_sort_field_placeholder": "选择排序字段", + "data_grid.filter.sort_asc": "升序", + "data_grid.filter.sort_desc": "降序", + "data_grid.filter.sort_label": "排序", + "data_grid.filter.start_value_placeholder": "起始值", + "data_grid.filter.suggestion.column": "字段", + "data_grid.filter.suggestion.keyword": "关键字", + "data_grid.filter.suggestion.operator": "操作符", + "data_grid.filter.then_label": "然后", + "data_grid.json_editor.apply_changes": "应用修改", + "data_grid.json_editor.description": "按当前结果顺序编辑。JSON 模式不支持新增或删除记录,需要此操作请使用表格模式。", + "data_grid.json_editor.format": "格式化 JSON", + "data_grid.json_editor.invalid_format": "JSON 格式无效:{{error}}", + "data_grid.json_editor.title": "编辑 JSON 结果集", + "data_grid.message.auto_commit_failed": "自动提交失败:{{detail}}", + "data_grid.message.auto_commit_success": "自动提交成功", + "data_grid.message.cell_edit_mode_entered": "已启用单元格编辑模式,可拖动选择多个单元格。", + "data_grid.message.cell_edit_mode_exited": "已退出单元格编辑模式。", + "data_grid.message.change_set_build_failed": "无法构建变更集", + "data_grid.message.change_set_build_failed_detail": "无法构建变更集:{{detail}}", + "data_grid.message.column_order_reset": "已恢复默认列顺序", + "data_grid.message.column_quick_find_not_found": "未找到字段列:{{query}}", + "data_grid.message.column_quick_find_not_rendered": "字段列“{{column}}”当前未渲染,无法定位", + "data_grid.message.column_visibility_reset": "已恢复全部列", + "data_grid.message.commit_failed": "提交失败:{{detail}}", + "data_grid.message.copied_columns": "已复制 {{count}} 列,可粘贴到目标行。", + "data_grid.message.copied_rows": "已复制 {{count}} 行,可作为新行粘贴。", + "data_grid.message.copied_to_clipboard": "已复制到剪贴板", + "data_grid.message.copy_columns_first": "请先复制列值", + "data_grid.message.copy_columns_same_row_only": "复制列值时只能选择同一行的单元格", + "data_grid.message.copy_rows_first": "请先复制行", + "data_grid.message.copy_sql_not_supported": "此数据源不支持复制 SQL,请改用 JSON/CSV/Markdown 复制。", + "data_grid.message.current_field_not_editable": "当前字段不可编辑", + "data_grid.message.current_record_not_editable": "当前记录不可编辑", + "data_grid.message.current_row_no_copyable_content": "当前行没有可复制内容", + "data_grid.message.ddl_copied": "DDL 已复制到剪贴板", + "data_grid.message.ddl_copy_failed": "复制 DDL 失败", + "data_grid.message.ddl_load_failed": "加载 DDL 失败", + "data_grid.message.ddl_missing_context": "当前表缺少连接或表名,无法查看 DDL", + "data_grid.message.drag_select_cells_to_copy": "请先拖动选择要复制的单元格", + "data_grid.message.export_failed": "导出失败:{{detail}}", + "data_grid.message.export_success": "导出完成", + "data_grid.message.export_with_uncommitted_changes": "存在未提交修改,将按可见表格数据导出。如需完整长字段数据,请先提交。", + "data_grid.message.exporting": "正在导出...", + "data_grid.message.exporting_all": "正在导出全部数据...", + "data_grid.message.exporting_rows": "正在导出 {{count}} 行...", + "data_grid.message.filled_cells": "已填充 {{count}} 个单元格", + "data_grid.message.filled_rows": "已填充 {{count}} 行", + "data_grid.message.filtered_export_not_supported": "此数据源不支持导出筛选结果", + "data_grid.message.filtered_export_uses_committed_data": "存在未提交修改。筛选结果导出将使用已提交的数据库数据。", + "data_grid.message.import_done": "导入完成", + "data_grid.message.json_applied": "JSON 修改已应用到当前结果集,可继续提交事务。", + "data_grid.message.json_invalid": "JSON 无效:{{detail}}", + "data_grid.message.json_parse_failed": "JSON 解析失败:{{detail}}", + "data_grid.message.json_record_count_mismatch": "记录数量不一致:当前 {{current}} 行,JSON 有 {{json}} 行。此模式下不要新增或删除记录。", + "data_grid.message.json_record_missing_row_key": "第 {{index}} 条记录缺少行标识,无法应用", + "data_grid.message.json_record_not_object": "第 {{index}} 条记录不是对象,无法应用", + "data_grid.message.json_view_must_be_array": "JSON 视图必须是数组,且每一项对应一条记录", + "data_grid.message.keep_one_visible_column": "至少保留一个可见字段", + "data_grid.message.locate_record_to_edit": "请先定位要编辑的记录", + "data_grid.message.locator_column_value_empty": "定位列 {{column}} 的值为空,无法安全提交修改。", + "data_grid.message.no_changes_to_commit": "没有需要提交的修改", + "data_grid.message.no_copyable_cells": "未识别到可复制的单元格", + "data_grid.message.no_copyable_columns": "未识别到可复制的列", + "data_grid.message.no_copyable_rows": "未识别到可复制的行", + "data_grid.message.no_data_changes": "数据没有变化", + "data_grid.message.no_ddl_to_copy": "没有可复制的 DDL", + "data_grid.message.no_field_name": "未识别到字段名称", + "data_grid.message.no_filter_applied": "当前未应用筛选条件", + "data_grid.message.no_other_rows_to_fill": "没有其他选中行可填充", + "data_grid.message.no_pasteable_editable_fields": "没有可粘贴的可编辑字段", + "data_grid.message.no_pasteable_rows": "没有可粘贴的行", + "data_grid.message.no_rows_selected": "当前未选中任何行", + "data_grid.message.no_safe_locator": "当前结果没有可用的安全行定位方式,无法提交修改。", + "data_grid.message.pasted_columns_to_rows": "已粘贴到 {{rows}} 行,共 {{cells}} 个单元格", + "data_grid.message.pasted_rows_as_new": "已将 {{count}} 行作为新行粘贴,提交前请先检查。", + "data_grid.message.preview_sql_failed": "生成预览 SQL 失败", + "data_grid.message.preview_sql_failed_detail": "生成预览 SQL 失败:{{detail}}", + "data_grid.message.result_set_no_copyable_content": "当前结果集没有可复制内容", "data_grid.message.rollback_failed": "回滚失败:{{detail}}", + "data_grid.message.saved": "已保存", + "data_grid.message.select_cells_to_fill": "请先选择要填充的单元格", + "data_grid.message.select_file_failed": "选择文件失败:{{detail}}", + "data_grid.message.select_rows_to_copy": "请先选择要复制的行", + "data_grid.message.select_rows_to_fill": "请先选择要填充的行", + "data_grid.message.select_same_row_cells_to_copy": "请先选择同一行中的单元格进行复制", + "data_grid.message.select_target_rows": "请先选择目标行", + "data_grid.message.selected_cells_no_update": "选中的单元格无需更新", + "data_grid.message.selection_no_copyable_content": "当前选区没有可复制内容", + "data_grid.message.target_row_not_found": "未找到目标行,请刷新后重试。", + "data_grid.message.target_rows_cannot_only_source": "目标行不能只有源行,请选择其他行。", + "data_grid.message.target_rows_no_update": "目标行无需更新", + "data_grid.message.transaction_committed": "事务已提交", "data_grid.message.transaction_rolled_back": "事务已回滚", + "data_grid.message.undo_added_row_hint": "新增行请使用删除选中或整表回滚撤销", + "data_grid.message.undo_cell_original_missing": "未找到该单元格的原始数据,无法撤销", + "data_grid.message.undo_cell_success": "已撤销单元格修改", + "data_grid.metadata_view.column_name": "名称", + "data_grid.metadata_view.column_type": "类型", + "data_grid.metadata_view.comment": "注释", + "data_grid.metadata_view.default_value": "默认值", + "data_grid.metadata_view.er_collapse_fields": "收起字段摘要", + "data_grid.metadata_view.er_current_badge": "当前表", + "data_grid.metadata_view.er_empty": "当前表未发现外键关系", + "data_grid.metadata_view.er_expand_fields": "展开全部字段", + "data_grid.metadata_view.er_expand_hidden_columns": "展开剩余 {{count}} 个字段", + "data_grid.metadata_view.er_expand_relations": "展开下一层关系", + "data_grid.metadata_view.er_field_badge": "字段", + "data_grid.metadata_view.er_hidden_columns": "还有 {{count}} 个字段", + "data_grid.metadata_view.er_open_table": "打开表", + "data_grid.metadata_view.er_partial_warning": "部分关系未能完整加载,图中结果可能不完整", + "data_grid.metadata_view.er_reference_badge": "引用", + "data_grid.metadata_view.er_referenced_by_badge": "被引用", + "data_grid.metadata_view.er_related_table_count": "{{count}} 张关联表", + "data_grid.metadata_view.er_relation_count": "{{count}} 条关系", + "data_grid.metadata_view.er_relation_depth": "{{count}} 层关系", + "data_grid.metadata_view.er_reset_relations": "重置为一层", + "data_grid.metadata_view.er_table_badge": "表", + "data_grid.metadata_view.field_count": "{{count}} 个字段", + "data_grid.metadata_view.fields_badge": "字段", + "data_grid.modal.export_options.all_data": "导出全部数据", + "data_grid.modal.export_options.current_page": "导出当前页({{count}} 行)", + "data_grid.modal.export_options.filtered_results": "筛选结果", + "data_grid.modal.export_options.no_rows_selected": "未选择行,请选择导出范围:", + "data_grid.modal.export_options.title": "导出选项", + "data_grid.modal.export_options.whole_table": "整张表", + "data_grid.page_find.next": "下一个", + "data_grid.page_find.placeholder": "当前页查找...", + "data_grid.page_find.previous": "上一个", + "data_grid.page_find.summary": "{{occurrences}} 处匹配 / {{cells}} 个单元格", + "data_grid.page_find.tooltip": "仅在当前页已加载行中查找,不会更改 WHERE 条件。", + "data_grid.pagination.jump_action": "跳", + "data_grid.pagination.jump_aria": "跳转页码", + "data_grid.pagination.jump_label": "跳页", + "data_grid.pagination.page_size_aria": "每页行数", + "data_grid.pagination.page_size_option": "{{count}} 行 / 页", + "data_grid.pagination.page.current": "第 {{current}} 页", + "data_grid.pagination.page.known": "第 {{current}} / {{totalPages}} 页", + "data_grid.pagination.result_set": "结果集", + "data_grid.pagination.summary.approximate": "当前 {{current}} 条 / 约 {{total}} 条", + "data_grid.pagination.summary.cancelled": "当前 {{current}} 条 / 计数已停止", + "data_grid.pagination.summary.counting": "当前 {{current}} 条 / 正在统计总数...", + "data_grid.pagination.summary.counting_exact": "当前 {{current}} 条 / 正在统计精确总数...", + "data_grid.pagination.summary.empty": "当前 0 条 / 共 0 条", + "data_grid.pagination.summary.known": "当前 {{current}} 条 / 共 {{total}} 条", + "data_grid.pagination.summary.not_counted": "当前 {{current}} 条 / 未统计总数", + "data_grid.preview_panel.no_cell_description": "点击表格中的单元格以预览完整数据", + "data_grid.preview_panel.no_cell_title": "点击单元格查看数据", + "data_grid.preview_sql.copied": "已复制", + "data_grid.preview_sql.no_changes": "无变更", + "data_grid.preview_sql.summary": "共 {{deletes}} 条 DELETE,{{updates}} 条 UPDATE,{{inserts}} 条 INSERT", + "data_grid.preview_sql.title": "变更预览", + "data_grid.record_view.edit_current": "编辑当前记录", + "data_grid.record_view.edit_json": "编辑 JSON", + "data_grid.record_view.empty": "当前结果集无数据", + "data_grid.record_view.json_record_count": "当前结果集 {{count}} 条记录", + "data_grid.record_view.next": "下一条", + "data_grid.record_view.previous": "上一条", + "data_grid.record_view.record_position": "记录 {{current}} / {{total}}", + "data_grid.row_editor.popup_edit": "弹窗编辑", + "data_grid.row_editor.title": "编辑行", + "data_grid.secondary.column_display": "字段显示", + "data_grid.secondary.data_preview": "数据预览", + "data_grid.secondary.er_diagram": "ER 图", + "data_grid.secondary.jump_column": "跳列", + "data_grid.secondary.live": "实时", + "data_grid.secondary.object_design": "对象设计", + "data_grid.secondary.pending_changes": "未提交 {{count}}", + "data_grid.secondary.row_count": "{{count}} 行", + "data_grid.secondary.view_ddl": "查看 DDL", + "data_grid.table_fallback.query_result": "查询结果", + "data_grid.toolbar.add_row": "新增行", + "data_grid.toolbar.ai_insight": "AI 数据洞察", + "data_grid.toolbar.ai_insight_short": "AI 洞察", + "data_grid.toolbar.ai_insight_tooltip": "让 AI 分析当前查询页数据", + "data_grid.toolbar.batch_fill": "批量填充({{count}})", + "data_grid.toolbar.cancel_count": "取消计数", + "data_grid.toolbar.cancel_count_tooltip": "取消本次精确总数统计,不影响当前浏览。", + "data_grid.toolbar.cell_editor": "单元格编辑", + "data_grid.toolbar.commit": "提交事务({{count}})", + "data_grid.toolbar.commit_delay.seconds": "{{seconds}} 秒", + "data_grid.toolbar.commit_label": "提交事务", + "data_grid.toolbar.commit_mode.auto": "自动提交", + "data_grid.toolbar.commit_mode.auto_countdown": "{{seconds}}s 后提交", + "data_grid.toolbar.commit_mode.manual": "手动提交", + "data_grid.toolbar.commit_mode.tooltip": "控制表数据编辑后的提交方式。手动提交更安全;自动提交会在最后一次修改后按所选时间提交。", + "data_grid.toolbar.copied_columns_count": "已复制 {{count}} 列", + "data_grid.toolbar.copy": "复制", + "data_grid.toolbar.copy_row": "复制行", + "data_grid.toolbar.copy_selection": "复制选区({{count}})", + "data_grid.toolbar.copy_selection_columns": "复制选区列值({{count}})", + "data_grid.toolbar.count_total": "统计总数", + "data_grid.toolbar.count_total_tooltip": "按当前筛选条件统计精确总数", + "data_grid.toolbar.delete_selected": "删除选中", + "data_grid.toolbar.export": "导出", + "data_grid.toolbar.filter": "筛选", + "data_grid.toolbar.import": "导入", + "data_grid.toolbar.paste_row": "粘贴行", + "data_grid.toolbar.paste_row_count": "粘贴行({{count}})", + "data_grid.toolbar.paste_to_selected_rows": "粘贴到选中行({{count}})", + "data_grid.toolbar.preview_sql": "预览 SQL", + "data_grid.toolbar.preview_sql_generate": "生成预览 SQL", + "data_grid.toolbar.refresh": "刷新", + "data_grid.toolbar.rollback": "回滚", + "data_grid.toolbar.selected_count": "已选 {{count}}", + "data_grid.toolbar.undo_delete": "撤销删除", + "data_grid.view.edit_current_record": "编辑当前记录", + "data_grid.view.edit_json": "编辑 JSON", + "data_grid.view.empty_result": "当前结果集没有数据", + "data_grid.view.next_record": "下一条记录", + "data_grid.view.previous_record": "上一条记录", + "data_grid.view.record_count": "当前结果集:{{count}} 条记录", + "data_grid.view.record_position": "记录 {{current}} / {{total}}", + "data_grid.view.result_view": "结果视图", + "data_grid.view.table": "表格", + "data_grid.view.text": "文本", + "data_sync.action.analyze_diff": "对比差异", + "data_sync.action.cancel": "取消", + "data_sync.action.close": "关闭", + "data_sync.action.continue_sync": "继续同步", + "data_sync.action.next": "下一步", + "data_sync.action.previous": "上一步", + "data_sync.action.start_sync": "开始同步", + "data_sync.action.view": "查看", + "data_sync.alert.auto_create_planner_scope": "自动建表当前仅支持 MySQL 到 Kingbase。会迁移字段、主键、普通索引、唯一索引和联合索引,并明确跳过全文、空间、前缀和函数类索引。", + "data_sync.alert.auto_create_scope": "自动建表当前仅支持 MySQL 到 Kingbase。会迁移字段、主键、普通索引、唯一索引和联合索引,并明确跳过全文、空间、前缀和函数类索引。", + "data_sync.alert.existing_target_only": "数据同步默认使用已有目标表执行。需要跨数据源建表并导入时,请切换到跨库迁移。", + "data_sync.alert.full_overwrite": "全量覆盖会清空目标表数据,请谨慎使用。", + "data_sync.alert.migration_mode": "当前为跨库迁移。适合将表迁移到另一数据源,并自动建表和导入数据。", + "data_sync.alert.query_mode": "SQL 结果集同步当前支持源端自定义 SQL 到单个已存在目标表。查询结果必须包含目标表主键列。", + "data_sync.alert.sync_mode": "当前为数据同步。适合目标表已存在时做增量同步或覆盖导入。", + "data_sync.backend.error.analyze_prepare_secrets_failed": "准备数据同步分析密钥失败: {{detail}}", + "data_sync.backend.error.apply_changes_failed": "应用变更失败: {{detail}}", + "data_sync.backend.error.apply_changes_unsupported": "目标驱动不支持应用数据变更", + "data_sync.backend.error.apply_source_query_changes_failed": "应用 SQL 结果集变更失败: {{detail}}", + "data_sync.backend.error.auto_add_column_failed": "自动补齐字段失败: 字段={{column}}, 错误={{detail}}", + "data_sync.backend.error.build_migration_plan_failed": "生成迁移计划失败: 表={{table}}, 错误={{detail}}", + "data_sync.backend.error.clear_target_failed": "清空目标表失败: {{detail}}", + "data_sync.backend.error.connect_source_failed": "源数据库连接失败:{{detail}}", + "data_sync.backend.error.connect_source_mongodb_failed": "源 MongoDB 连接失败: {{detail}}", + "data_sync.backend.error.connect_source_redis_failed": "源 Redis 连接失败: {{detail}}", + "data_sync.backend.error.connect_target_failed": "目标数据库连接失败:{{detail}}", + "data_sync.backend.error.connect_target_mongodb_failed": "目标 MongoDB 连接失败: {{detail}}", + "data_sync.backend.error.connect_target_redis_failed": "目标 Redis 连接失败: {{detail}}", + "data_sync.backend.error.create_indexes_failed": "创建索引失败: 表={{table}}, 错误={{detail}}", + "data_sync.backend.error.create_table_sql_empty": "表 {{table}} 自动建表失败: 建表 SQL 为空", + "data_sync.backend.error.create_target_table_failed": "创建目标表失败: 表={{table}}, 错误={{detail}}", + "data_sync.backend.error.diff_composite_pk_unsupported": "复合主键 ({{columns}}) 不支持差异对比同步", + "data_sync.backend.error.diff_pk_required": "没有主键。差异对比同步不受支持;请使用 insert-only 或 full-overwrite 模式直接导入。", + "data_sync.backend.error.exec_ddl_statement_failed": "{{stage}}失败: SQL={{sql}}, 错误={{detail}}", + "data_sync.backend.error.execute_source_query_failed": "执行源查询失败: {{detail}}", + "data_sync.backend.error.init_source_driver_failed": "初始化源数据库驱动失败:{{detail}}", + "data_sync.backend.error.init_source_mongodb_driver_failed": "初始化源 MongoDB 驱动失败: {{detail}}", + "data_sync.backend.error.init_target_driver_failed": "初始化目标数据库驱动失败:{{detail}}", + "data_sync.backend.error.init_target_mongodb_driver_failed": "初始化目标 MongoDB 驱动失败: {{detail}}", + "data_sync.backend.error.inspect_mongodb_collection_failed": "检查目标 MongoDB collection 失败: {{detail}}", + "data_sync.backend.error.list_mongodb_collections_failed": "列出 MongoDB collection 失败: {{detail}}", + "data_sync.backend.error.load_target_columns_failed": "加载目标表字段失败: {{detail}}", + "data_sync.backend.error.mongo_document_write_unsupported": "目标驱动不支持写入 MongoDB document", + "data_sync.backend.error.mongo_read_source_samples_failed": "读取源 MongoDB collection 样本失败: {{detail}}", + "data_sync.backend.error.mongo_redis_analyze_collection_failed": "分析 MongoDB collection {{collection}} 失败: {{detail}}", + "data_sync.backend.error.mongo_redis_document_key_missing": "MongoDB document 缺少 key 字段", + "data_sync.backend.error.mongo_redis_document_type_missing": "MongoDB document 缺少字段 {{field}},Redis Key={{key}}", + "data_sync.backend.error.mongo_redis_empty_target_value": "Redis Key {{key}} 的目标值为空", + "data_sync.backend.error.mongo_redis_unsupported_type": "Redis Key {{key}} 不支持类型 {{type}}", + "data_sync.backend.error.mongo_redis_value_invalid": "Redis Key {{key}} 的 {{type}} payload 无效;实际类型={{actual}}", + "data_sync.backend.error.mongo_redis_write_key_failed": "写入 Redis Key {{key}} 失败: {{detail}}", + "data_sync.backend.error.pre_create_table_sql_failed": "预执行建表 SQL 失败: 表={{table}}, 错误={{detail}}", + "data_sync.backend.error.prepare_secrets_failed": "准备数据同步密钥失败: {{detail}}", + "data_sync.backend.error.preview_composite_pk_unsupported": "复合主键({{columns}})暂不支持数据预览", + "data_sync.backend.error.preview_failed": "数据同步预览失败: {{detail}}", + "data_sync.backend.error.preview_pk_required": "无主键,不支持数据预览", + "data_sync.backend.error.preview_prepare_secrets_failed": "准备数据同步预览密钥失败: {{detail}}", + "data_sync.backend.error.read_redis_key_failed": "读取 Redis Key {{key}} 失败: {{detail}}", + "data_sync.backend.error.read_source_table_failed": "读取源表失败: {{detail}}", + "data_sync.backend.error.read_source_table_failed_with_table": "读取源表 {{table}} 失败: {{detail}}", + "data_sync.backend.error.read_target_redis_key_failed": "读取目标 Redis Key {{key}} 失败: {{detail}}", + "data_sync.backend.error.read_target_table_failed": "读取目标表失败: {{detail}}", + "data_sync.backend.error.read_target_table_failed_with_table": "读取目标表 {{table}} 失败: {{detail}}", + "data_sync.backend.error.redis_mongo_analyze_changes_failed": "分析 Redis 迁移变更失败: {{detail}}", + "data_sync.backend.error.redis_mongo_apply_changes_failed": "应用 Redis 迁移变更失败: {{detail}}", + "data_sync.backend.error.redis_mongo_build_changes_failed": "构建 Redis 迁移变更失败: {{detail}}", + "data_sync.backend.error.redis_mongo_create_collection_failed": "创建目标 MongoDB collection 失败: {{detail}}", + "data_sync.backend.error.refresh_columns_after_create_failed": "创建目标表后加载字段失败: 表={{table}}, 错误={{detail}}", + "data_sync.backend.error.restore_source_secret_failed": "恢复源数据库连接密文失败:{{detail}}", + "data_sync.backend.error.restore_target_secret_failed": "恢复目标数据库连接密文失败:{{detail}}", + "data_sync.backend.error.scan_redis_keys_failed": "扫描 Redis Key 失败: {{detail}}", + "data_sync.backend.error.source_collection_no_migratable_fields": "源 MongoDB collection 未推断出可迁移字段: {{collection}}", + "data_sync.backend.error.source_table_columns_failed": "获取源表字段失败: {{detail}}", + "data_sync.backend.error.source_table_missing_or_no_columns": "源表不存在或无字段定义: {{table}}", + "data_sync.backend.error.sync_table_schema_failed": "同步表结构失败: 表={{table}}, 错误={{detail}}", + "data_sync.backend.error.target_collection_check_failed": "检查目标 MongoDB collection 失败: {{detail}}", + "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "目标表为复合主键 ({{columns}}),不支持 SQL 结果集差异分析", + "data_sync.backend.error.target_pk_required_for_query_diff": "目标表无主键,不支持基于 SQL 结果集的差异分析", + "data_sync.backend.error.target_table_columns_failed": "获取目标表字段失败: {{detail}}", + "data_sync.backend.error.target_table_columns_missing": "目标表 {{table}} 不存在或无法读取字段定义", + "data_sync.backend.label.content_data_only": "仅同步数据", + "data_sync.backend.label.content_schema_and_data": "同步结构+数据", + "data_sync.backend.label.content_schema_only": "仅同步结构", + "data_sync.backend.label.mode_full_overwrite": "全量覆盖", + "data_sync.backend.label.mode_insert_only": "仅插入", + "data_sync.backend.label.mode_insert_update": "增量同步", + "data_sync.backend.label.target_strategy_auto_create_if_missing": "目标缺失时自动创建", + "data_sync.backend.label.target_strategy_existing_only": "仅使用已有目标", + "data_sync.backend.label.target_strategy_smart": "智能处理目标", + "data_sync.backend.log.auto_add_columns_completed": "自动补齐字段完成: 成功={{succeeded}}, 失败={{failed}}", + "data_sync.backend.log.change_counts": "需插入 {{inserts}} 行,需更新 {{updates}} 行,需删除 {{deletes}} 行", + "data_sync.backend.log.connecting_source": "正在连接源数据库: {{host}}...", + "data_sync.backend.log.connecting_target": "正在连接目标数据库: {{host}}...", + "data_sync.backend.log.data_already_consistent": "数据一致,无需变更。", + "data_sync.backend.log.ddl_statement_succeeded": "表 {{table}} {{stage}}成功: {{sql}}", + "data_sync.backend.log.fatal_error": "致命错误: {{message}}", + "data_sync.backend.log.missing_columns_auto_add_disabled": "目标表缺少 {{count}} 个字段,但未开启自动补齐,将自动忽略: {{columns}}", + "data_sync.backend.log.missing_columns_auto_add_started": "目标表缺少 {{count}} 个字段,开始自动补齐: {{columns}}", + "data_sync.backend.log.mongo_redis_keyspace_options": "MongoDB 到 Redis keyspace 迁移;模式={{mode}};目标={{target}}", + "data_sync.backend.log.mongo_redis_migrating_key": "正在写入 Redis Key {{key}}", + "data_sync.backend.log.mongo_redis_syncing_collection": "正在同步 MongoDB collection {{collection}}", + "data_sync.backend.log.redis_mongo_keyspace_options": "Redis 到 MongoDB keyspace 迁移;模式={{mode}};目标策略={{strategy}}", + "data_sync.backend.log.redis_mongo_migrating_key": "正在迁移 Redis Key {{key}}", + "data_sync.backend.log.source_query_no_changes": "SQL 结果集与目标表一致,无需应用变更", + "data_sync.backend.log.source_query_sync_completed": "SQL 结果集同步完成: 插入={{inserts}}, 更新={{updates}}, 删除={{deletes}}", + "data_sync.backend.log.source_query_sync_source": "同步来源: SQL 结果集 -> 目标表 {{table}};模式: {{mode}}", + "data_sync.backend.log.sync_options": "同步内容: {{content}};模式: {{mode}};自动补字段: {{autoAddColumns}};目标表策略: {{targetTableStrategy}};创建索引: {{createIndexes}}", + "data_sync.backend.log.syncing_table": "正在同步表: {{table}}", + "data_sync.backend.log.table_no_operations_skipped": "表 {{table}} 未勾选任何操作,已跳过", + "data_sync.backend.log.target_table_created": "目标表创建成功: {{table}}", + "data_sync.backend.log.target_table_no_operations": "目标表 {{table}} 未勾选任何操作,已跳过", + "data_sync.backend.log.unknown_sync_content_data_only": "未知同步内容 {{content}},已自动使用仅同步数据", + "data_sync.backend.result.analyzed_tables": "已完成 {{count}} 张表的差异分析", + "data_sync.backend.result.analyzed_target_tables": "已完成 {{count}} 个目标表的差异分析", + "data_sync.backend.result.mongo_redis_analyzed_collections": "已完成 {{count}} 个 MongoDB collection 的 Redis 迁移分析", + "data_sync.backend.result.mongo_redis_completed": "MongoDB keyspace 迁移完成;已处理 {{collections}} 个 collection 和 {{keys}} 个 Redis Key", + "data_sync.backend.result.mongo_redis_no_collections": "没有可迁移的 MongoDB collection", + "data_sync.backend.result.mongo_redis_no_documents": "没有可迁移的 MongoDB Redis document", + "data_sync.backend.result.preview_ready": "数据同步预览已就绪", + "data_sync.backend.result.redis_mongo_analyzed_keys": "已完成 {{count}} 个 Redis Key 的 MongoDB 迁移分析", + "data_sync.backend.result.redis_mongo_completed": "Redis keyspace 迁移完成;已处理 {{count}} 个 Redis Key", + "data_sync.backend.result.redis_mongo_no_keys": "没有可迁移的 Redis Key", + "data_sync.backend.result.sync_completed": "同步完成: 表={{tables}}, 插入={{rowsInserted}}, 更新={{rowsUpdated}}, 删除={{rowsDeleted}}", + "data_sync.backend.summary.diff_completed": "差异分析完成", + "data_sync.backend.summary.mongo_redis_diff": "执行时将插入 {{inserts}} 个 Redis Key,并更新 {{updates}} 个 Redis Key", + "data_sync.backend.summary.mongo_redis_empty_collection": "collection 中没有可迁移的 document", + "data_sync.backend.summary.mongo_redis_planned_action": "迁移到 {{target}}", + "data_sync.backend.summary.mongo_redis_same_keys": "匹配的 Redis Key 已是最新", + "data_sync.backend.summary.mongo_redis_warning_document_format": "仅支持包含 key/type/ttl/value 字段的 document", + "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB 到 Redis 会将全量覆盖降级为增量同步,以避免删除 DB 中其他 Redis Key", + "data_sync.backend.summary.mongo_redis_warning_keyspace": "MongoDB collection 中的 document 将按 keyspace 语义写入 Redis", + "data_sync.backend.summary.redis_mongo_insert_document": "执行时将插入新的 MongoDB document", + "data_sync.backend.summary.redis_mongo_planned_action": "迁移到集合 {{collection}}", + "data_sync.backend.summary.redis_mongo_same_document": "匹配的 MongoDB document 已是最新", + "data_sync.backend.summary.redis_mongo_update_document": "执行时将更新现有 MongoDB document", + "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key 将写入为 MongoDB document", + "data_sync.backend.summary.source_query_diff_completed": "SQL 结果集差异分析完成", + "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view 语义尚未自动迁移到 PG-like 目标", + "data_sync.backend.validation.query_mode_data_only": "SQL 结果集同步当前仅支持只同步数据", + "data_sync.backend.validation.single_target_table_required": "SQL 结果集同步要求且仅允许选择一个目标表", + "data_sync.backend.validation.source_query_required": "源查询 SQL 不能为空", + "data_sync.backend.validation.target_table_required": "目标表不能为空", + "data_sync.backend.warning.apply_changes_unsupported": "目标驱动不支持应用数据变更。", + "data_sync.backend.warning.auto_add_column_sql_generation_failed": "字段 {{column}} 自动补齐 SQL 生成失败: {{detail}}", + "data_sync.backend.warning.auto_create_pair_unsupported": "自动建表目前仅支持 MySQL -> Kingbase;当前组合={{sourceType}} -> {{targetType}}", + "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "字段 {{column}} 为自增列,补齐到已有目标表时不会自动补建 {{feature}}", + "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "字段 {{column}} 类型 {{type}} 已降级为 json", + "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "字段 {{column}} 类型 {{type}} 已降级为 jsonb", + "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "字段 {{column}} enum 类型 {{type}} 已降级为 varchar(255)", + "data_sync.backend.warning.clickhouse_order_by_tuple_used": "未检测到源主键,ClickHouse 将使用 ORDER BY tuple();查询性能可能受影响", + "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse 不保留关系型外键或唯一约束语义;仅迁移字段和数据", + "data_sync.backend.warning.clickhouse_source_metadata_limited": "ClickHouse 源端索引和约束元数据有限;反向迁移以字段和数据为主", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "ClickHouse 源端未返回主键信息,目标 MySQL 表不会自动创建主键", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "ClickHouse 源端未返回主键信息,目标 PG-like 表不会自动创建主键", + "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "ClickHouse 目标建议使用 insert-only 或 full-overwrite;update/delete 语义与传统关系型数据库不同", + "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "字段 {{column}} 类型 {{type}} 没有专用 MySQL 映射,已降级为 text", + "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "字段 {{column}} 类型 {{type}} 没有专用 PG-like 映射,已降级为 text", + "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "字段 {{column}} 类型 {{type}} 已映射为 numeric(20,0),以避免 unsigned 溢出", + "data_sync.backend.warning.column_default_expression_skipped": "字段 {{column}} 的默认值 {{default}} 包含表达式,当前未自动迁移", + "data_sync.backend.warning.column_empty_string_default_not_preserved": "字段 {{column}} 的空字符串默认值未保留", + "data_sync.backend.warning.column_type_degraded": "字段 {{column}} 类型 {{sourceType}} 已降级为 {{targetType}}", + "data_sync.backend.warning.column_type_degraded_clickhouse_string": "字段 {{column}} 类型 {{type}} 已降级为 String", + "data_sync.backend.warning.column_type_empty_clickhouse_string": "字段 {{column}} 类型为空,已降级为 String", + "data_sync.backend.warning.column_type_empty_degraded": "字段 {{column}} 类型为空,已降级为 {{targetType}}", + "data_sync.backend.warning.column_type_mapped": "字段 {{column}} 类型 {{sourceType}} 已映射为 {{targetType}}", + "data_sync.backend.warning.column_type_no_mapping_degraded": "字段 {{column}} 类型 {{sourceType}} 没有专用映射,已降级为 {{targetType}}", + "data_sync.backend.warning.column_user_defined_degraded": "字段 {{column}} 为用户自定义类型,已降级为 {{targetType}}", + "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "字段 {{column}} 为用户自定义类型,已降级为 String", + "data_sync.backend.warning.composite_pk_skipped": "表 {{table}} 为复合主键 ({{columns}}),暂不支持差异同步,已跳过", + "data_sync.backend.warning.full_overwrite_clearing_target": "全量覆盖模式:即将清空目标表 {{table}}", + "data_sync.backend.warning.index_columns_missing": "索引 {{name}} 缺少列定义,已跳过", + "data_sync.backend.warning.index_prefix_length_unsupported": "索引 {{name}} 使用前缀长度,当前暂不支持迁移", + "data_sync.backend.warning.index_type_unsupported": "索引 {{name}} 类型={{type}},当前暂不支持自动迁移", + "data_sync.backend.warning.load_target_columns_skip_check_failed": "获取目标表字段失败,已跳过字段一致性检查: {{detail}}", + "data_sync.backend.warning.mongo_redis_document_format": "MongoDB 到 Redis 目前仅支持包含 key/type/ttl/value 字段的 document", + "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "MongoDB 到 Redis 迁移会将全量覆盖降级为增量同步", + "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "字段 {{column}} 的 AUTO_INCREMENT 不会作为 ClickHouse 自增语义保留", + "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "字段 {{column}} 的二进制类型已降级为 String", + "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "字段 {{column}} 类型 {{type}} 已降级为 String", + "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "字段 {{column}} 类型 {{type}} 没有专用 ClickHouse 映射,已降级为 String", + "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "字段 {{column}} 为 unsigned bigint auto_increment,已降级为 {{targetType}},且不保留自增语义", + "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "字段 {{column}} 的 identity/自增语义不会保留到 ClickHouse", + "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "Redis 到 MongoDB 迁移会将全量覆盖降级为增量同步", + "data_sync.backend.warning.refresh_columns_after_add_failed": "补齐字段后刷新目标字段失败: 表={{table}}, 错误={{detail}}", + "data_sync.backend.warning.source_indexes_read_failed": "读取源表索引失败,已跳过索引迁移: {{detail}}", + "data_sync.backend.warning.table_pk_required_skipped": "表 {{table}} 未找到主键,当前模式需要差异对比,已跳过", + "data_sync.backend.warning.target_existing_only_required": "当前策略要求目标表已存在,执行时不会自动创建。", + "data_sync.backend.warning.target_exists_data_only_no_indexes": "目标表已存在。仅执行数据导入;不会自动重建现有索引和约束。", + "data_sync.backend.warning.target_missing_columns": "目标表缺少 {{count}} 个字段: {{columns}}", + "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "表 {{table}} 的目标表不存在,当前策略不允许自动建表,已跳过", + "data_sync.backend.warning.target_table_existing_only_required": "当前策略要求目标表已存在,执行时不会自动创建。", + "data_sync.backend.warning.unknown_content_default_data": "未知同步内容 {{content}},已自动使用仅同步数据", + "data_sync.backend.warning.unknown_mode_default_insert_update": "未知同步模式 {{mode}},已自动使用增量同步", + "data_sync.badge.migration_mode": "迁移模式", + "data_sync.badge.source_pending": "待选源连接", + "data_sync.badge.source_selected": "已选源连接", + "data_sync.badge.sync_mode": "同步模式", + "data_sync.badge.table_count": "{{count}} 张表", + "data_sync.compare_entry.action.return_to_compare": "返回比对", + "data_sync.compare_entry.alert.data": "当前为“数据比对”入口:固定按主键分析行级差异,不执行写入。", + "data_sync.compare_entry.alert.schema": "当前为“表结构比对”入口:固定只分析结构差异和生成可审阅 SQL,不执行变更。", + "data_sync.compare_entry.option.auto_add_columns": "生成目标表缺失字段的兼容变更 SQL(仅预览,不执行)", + "data_sync.compare_entry.option.source_dataset.query": "按 SQL 结果集比对", + "data_sync.compare_entry.option.source_dataset.table": "按表比对", + "data_sync.compare_entry.preview.selection_hint": "行选择只影响 SQL 预览范围,不会执行写入。", + "data_sync.compare_entry.preview.sql.data_help": "SQL 预览会按当前勾选的插入、更新、删除与行选择范围生成,仅用于审核差异。", + "data_sync.compare_entry.preview.sql.schema_help": "SQL 预览展示结构差异建议语句,仅用于审核差异。", + "data_sync.compare_entry.result.completed": "比对完成", + "data_sync.compare_entry.result.failed": "比对失败", + "data_sync.compare_entry.result.running": "正在比对", + "data_sync.compare_entry.result.running_description": "当前阶段:{{stage}}{{table}}", + "data_sync.compare_entry.result.stage_fallback": "执行中", + "data_sync.compare_entry.result.success_summary": "成功比对 {{tables}} 张表。", + "data_sync.compare_entry.result.table_suffix": ",表:{{table}}", + "data_sync.compare_entry.title.analysis_log": "分析日志", + "data_sync.compare_entry.workflow_help": "当前入口只做差异分析和预览,不会执行同步、建表、补字段或删除数据。", + "data_sync.confirm.full_overwrite.content": "全量覆盖会先清空目标表数据再插入,请确认目标库已完成备份。", + "data_sync.confirm.full_overwrite.ok": "继续执行", + "data_sync.confirm.full_overwrite.title": "确认全量覆盖", + "data_sync.diff.column.delete": "删除", + "data_sync.diff.column.insert": "插入", + "data_sync.diff.column.plan": "计划", + "data_sync.diff.column.preview": "预览", + "data_sync.diff.column.risk": "风险", + "data_sync.diff.column.same": "相同", + "data_sync.diff.column.table": "表名", + "data_sync.diff.column.target_table": "目标表", + "data_sync.diff.column.update": "更新", + "data_sync.diff.more_warnings": "还有 {{count}} 项未展开", + "data_sync.diff.target_exists": "已存在", + "data_sync.diff.target_missing": "不存在", + "data_sync.diff.title": "对比结果", + "data_sync.diff.warning_title": "预检发现风险或降级项,请在执行前确认。", + "data_sync.entry_mode.compare.action.start": "开始比对", + "data_sync.entry_mode.compare.option_title": "比对选项", + "data_sync.entry_mode.compare.result_title": "比对结果", + "data_sync.entry_mode.data_compare.badge": "数据比对", + "data_sync.entry_mode.data_compare.description": "按主键对比源表与目标表的数据差异,查看新增、更新和删除明细。", + "data_sync.entry_mode.data_compare.hero_description": "适合核对两端数据一致性,只做差异分析与行级预览,不执行写入。", + "data_sync.entry_mode.data_compare.table_select_label": "请选择需要比对数据的表:", + "data_sync.entry_mode.data_compare.title": "数据比对", + "data_sync.entry_mode.schema_compare.badge": "结构比对", + "data_sync.entry_mode.schema_compare.description": "按源表与目标表生成结构差异、兼容风险和可审阅 SQL。", + "data_sync.entry_mode.schema_compare.hero_description": "适合发布前核对两端表结构差异,只做分析与预览,不执行结构变更。", + "data_sync.entry_mode.schema_compare.table_select_label": "请选择需要比对结构的表:", + "data_sync.entry_mode.schema_compare.title": "表结构比对", + "data_sync.entry_mode.sync.hero_description": "适合目标表已存在的场景,先做差异分析,再按勾选执行插入、更新或删除。", + "data_sync.field.connection": "连接", + "data_sync.field.database": "数据库", + "data_sync.field.migration_content": "迁移内容", + "data_sync.field.migration_mode": "迁移模式", + "data_sync.field.mongo_collection_name": "Mongo 集合名(可选)", + "data_sync.field.schema": "模式", + "data_sync.field.source_dataset_mode": "源数据方式", + "data_sync.field.source_query_sql": "源查询 SQL", + "data_sync.field.sync_content": "同步内容", + "data_sync.field.sync_mode": "同步模式", + "data_sync.field.target_table": "目标表", + "data_sync.field.target_table_requirement": "目标表要求", + "data_sync.field.target_table_strategy": "目标表处理策略", + "data_sync.field.workflow_type": "功能类型", + "data_sync.help.mongo_collection_mongo_to_redis": "MongoDB 到 Redis 场景通常直接选择源集合。仅在需要显式回退集合名时填写。", + "data_sync.help.mongo_collection_redis_to_mongo": "留空时使用默认集合名。填写后,本次 Redis 键空间会写入该 Mongo 集合。", + "data_sync.help.select_tables": "请选择需要同步的表:", + "data_sync.help.source_query_mode": "请输入源查询 SQL,并选择一个目标表。差异分析会直接基于该结果集与目标表对比。", + "data_sync.help.workflow_type": "先选择本次是同步已有目标表,还是执行跨库迁移。页面会按功能类型调整更安全的默认策略。", + "data_sync.hero.migration_description": "将源表迁移到另一数据库,按策略自动建表、导入数据并补建兼容索引。", + "data_sync.hero.migration_title": "跨数据源迁移", + "data_sync.hero.sync_description": "基于已有目标表先做差异对比,再按勾选执行插入、更新或删除。", + "data_sync.hero.sync_title": "数据同步", + "data_sync.log.level.error": "错误", + "data_sync.log.level.info": "信息", + "data_sync.log.level.warn": "警告", + "data_sync.log.title": "执行日志", + "data_sync.message.analysis_complete": "差异分析完成", + "data_sync.message.analysis_failed": "差异分析失败", + "data_sync.message.analysis_failed_detail": "差异分析失败:{{detail}}", + "data_sync.message.analyze_before_sync": "请先对比差异,再开始同步", + "data_sync.message.close_blocked_running": "同步执行中,暂不支持关闭窗口。", + "data_sync.message.fetch_source_databases_failed": "获取源数据库失败", + "data_sync.message.fetch_source_databases_failed_detail": "获取源数据库失败:{{detail}}", + "data_sync.message.fetch_tables_failed": "获取表列表失败", + "data_sync.message.fetch_tables_failed_detail": "获取表列表失败:{{detail}}", + "data_sync.message.fetch_target_databases_failed": "获取目标数据库失败", + "data_sync.message.fetch_target_databases_failed_detail": "获取目标数据库失败:{{detail}}", + "data_sync.message.fetch_target_schemas_failed_detail": "获取目标模式失败: {{detail}}", + "data_sync.message.more_items_collapsed": "还有 {{count}} 项未展开", + "data_sync.message.precheck_warnings": "预检发现风险或降级项,请在执行前确认。", + "data_sync.message.preview_load_failed": "加载差异预览失败", + "data_sync.message.preview_load_failed_detail": "加载差异预览失败:{{detail}}", + "data_sync.message.select_connections_first": "请先选择连接", + "data_sync.message.select_databases_first": "请先选择数据库", + "data_sync.message.select_source_database": "请选择源数据库", + "data_sync.message.select_target_database": "请选择目标数据库", + "data_sync.message.select_target_schema": "请选择目标模式", + "data_sync.message.sync_execution_failed": "同步执行失败", + "data_sync.message.sync_execution_failed_detail": "同步执行失败:{{detail}}", + "data_sync.modal.full_overwrite_content": "全量覆盖会先清空目标表数据再插入,请确认目标库已完成备份。", + "data_sync.modal.full_overwrite_ok": "继续执行", + "data_sync.modal.full_overwrite_title": "确认全量覆盖", + "data_sync.option.auto_add_columns": "自动补齐目标表缺失字段(当前支持 MySQL 目标及 MySQL 到 Kingbase;SQL 结果集模式暂不支持)", + "data_sync.option.content.both": "同步结构和数据", + "data_sync.option.content.data": "仅同步数据", + "data_sync.option.content.schema": "仅同步结构", + "data_sync.option.create_indexes": "自动迁移兼容的普通索引和唯一索引(仅自动建表模式生效)", + "data_sync.option.show_same_tables": "显示相同表", + "data_sync.option.source_dataset.query": "按 SQL 结果集同步", + "data_sync.option.source_dataset.table": "按表同步", + "data_sync.option.sync_mode.full_overwrite": "全量覆盖(清空目标表后插入)", + "data_sync.option.sync_mode.insert_only": "仅插入(不对比目标;无主键表将跳过)", + "data_sync.option.sync_mode.insert_update": "增量同步(对比差异后选择插入、更新和删除)", + "data_sync.option.target_strategy.auto_create_if_missing": "目标表不存在时自动建表", + "data_sync.option.target_strategy.existing_only": "仅使用已有目标表", + "data_sync.option.target_strategy.smart": "智能模式(存在则直接导入,不存在则自动建表)", + "data_sync.option.workflow.migration": "跨库迁移(自动建表后导入)", + "data_sync.option.workflow.sync": "数据同步(基于已有目标表做差异同步)", + "data_sync.placeholder.mongo_collection_name": "请输入 Mongo 集合名", + "data_sync.placeholder.source_query_sql": "例如:SELECT id, name, email FROM users WHERE status = 'active'", + "data_sync.placeholder.target_table": "请选择一个目标表", + "data_sync.plan.add_missing_columns_before_import": "补齐 {{count}} 个缺失字段后导入", + "data_sync.plan.auto_create_unsupported": "当前库对暂不支持自动建表", + "data_sync.plan.backend_summary": "后端计划摘要", + "data_sync.plan.data_import_without_diff": "当前模式不进行差异对比,直接导入源表数据。", + "data_sync.plan.migrate_to_collection": "迁移到集合 {{collection}}", + "data_sync.plan.migrate_to_target": "迁移到 {{target}}", + "data_sync.plan.migration_kernel_planning": "当前库对已进入迁移规划阶段,等待结构推断和目标方言生成支持", + "data_sync.plan.missing_columns_auto_add": "补齐 {{count}} 个缺失字段后导入", + "data_sync.plan.missing_columns_auto_add_disabled": "目标表缺失 {{count}} 个字段,未开启自动补齐", + "data_sync.plan.missing_columns_auto_add_unsupported": "目标表缺失 {{count}} 个字段,当前库对暂不支持自动补齐", + "data_sync.plan.missing_columns_no_executable_sql": "目标表缺失 {{count}} 个字段,但未生成可执行补齐 SQL", + "data_sync.plan.mongo_relational_entry_warning": "{{objectKind}} 从 {{sourceType}} 到 {{targetType}} 的迁移目前仅提供结构推断规划提示", + "data_sync.plan.mongo_relational_kernel_planned": "当前库对已进入迁移规划阶段,等待结构推断和目标方言生成支持", + "data_sync.plan.mongo_target_collection_missing_auto_create": "目标 MongoDB collection {{collection}} 不存在,将自动创建后导入。", + "data_sync.plan.mongo_target_collection_missing_manual_create": "目标 MongoDB collection {{collection}} 不存在,需先手工创建。", + "data_sync.plan.redis_key_to_mongodb_document": "按 Redis Key 生成 MongoDB 文档导入", + "data_sync.plan.redis_mongo_keyspace_import": "按 Redis Key 生成 MongoDB 文档导入", + "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis 到 MongoDB 按 keyspace 语义迁移,不执行表结构检查", + "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Redis TTL 和 collection 排序语义会作为 document 字段保留,但可能无法完全等价", + "data_sync.plan.redis_mongo_target_collection_auto_create": "目标集合不存在,将自动创建集合后导入", + "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "当前策略要求目标 MongoDB collection 已存在,执行时不会自动创建", + "data_sync.plan.redis_mongo_target_collection_missing_manual": "目标集合不存在,需先手工创建", + "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state 尚未迁移", + "data_sync.plan.schema_aligned": "表结构已一致", + "data_sync.plan.schema_changes_detected": "检测到 {{count}} 条结构变更", + "data_sync.plan.schema_only": "仅同步结构", + "data_sync.plan.schema_only_no_data_diff": "仅同步结构,未执行数据差异分析", + "data_sync.plan.schema_preview": "结构预览", + "data_sync.plan.source_query_preview": "SQL 结果集同步预览", + "data_sync.plan.target_collection_missing_auto_create": "目标集合不存在,将自动创建集合后导入", + "data_sync.plan.target_collection_missing_manual_create": "目标集合不存在,需先手工创建", + "data_sync.plan.target_missing_auto_create": "目标表不存在,将自动建表后导入", + "data_sync.plan.target_missing_auto_create_all": "目标表不存在,执行时将自动建表并导入全部源数据", + "data_sync.plan.target_missing_cannot_sync": "目标表不存在,无法执行同步", + "data_sync.plan.target_missing_manual_create": "目标表不存在,需先手工创建", + "data_sync.plan.target_missing_preview_unavailable": "目标表不存在,差异预览不可用。", + "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "源表未识别到可映射为 TDengine 首列的时间列,无法自动建表", + "data_sync.plan.tdengine_time_column_missing": "源表未识别到可映射为 TDengine 首列的时间列,无法自动建表", + "data_sync.plan.use_existing_target": "使用已有目标表导入", + "data_sync.plan.use_existing_target_collection": "使用已有目标集合导入", + "data_sync.plan.use_existing_target_table": "使用已有目标表导入", + "data_sync.preview.action.copy_sql": "复制 SQL", + "data_sync.preview.column.changed_columns": "变更字段", + "data_sync.preview.column.data": "数据", + "data_sync.preview.column.detail": "详情", + "data_sync.preview.column.primary_key": "主键", + "data_sync.preview.data_summary": "插入 {{inserts}},更新 {{updates}},删除 {{deletes}}(预览每种类型最多展示 200 行)", + "data_sync.preview.delete_warning": "删除默认不勾选。请确认业务影响后再启用删除。", + "data_sync.preview.loading": "正在加载差异预览...", + "data_sync.preview.message.copy_failed": "复制失败,请手动复制。", + "data_sync.preview.message.sql_copied": "SQL 已复制", + "data_sync.preview.schema_plan_help": "以下为本次结构同步计划执行的语句。", + "data_sync.preview.schema_statement_count": "检测到 {{count}} 条结构变更语句", + "data_sync.preview.schema_warning_title": "结构预览包含风险或降级项", + "data_sync.preview.selection_hint.delete": "未勾选任何行时会同步全部删除差异。如不想执行删除,请在对比结果中取消删除。", + "data_sync.preview.selection_hint.insert": "未勾选任何行时会同步全部插入差异。如不想执行插入,请在对比结果中取消插入。", + "data_sync.preview.selection_hint.update": "未勾选任何行时会同步全部更新差异。如不想执行更新,请在对比结果中取消更新。", + "data_sync.preview.side.source": "源", + "data_sync.preview.side.target": "目标", + "data_sync.preview.sql.data_help": "SQL 预览会按当前勾选的插入、更新、删除和行选择范围生成,用于审核确认。", + "data_sync.preview.sql.no_data_sql": "-- 当前选择范围没有可预览 SQL", + "data_sync.preview.sql.no_schema_changes": "-- 当前表结构无可执行变更", + "data_sync.preview.sql.schema_help": "SQL 预览展示将执行的结构变更语句,用于审核确认。", + "data_sync.preview.sql.schema_statement_count": "共 {{count}} 条结构变更语句", + "data_sync.preview.sql.statement_count": "共 {{count}} 条语句(预览数据每种类型最多展示 200 行)", + "data_sync.preview.tab.delete": "删除({{count}})", + "data_sync.preview.tab.insert": "插入({{count}})", + "data_sync.preview.tab.schema": "结构({{count}})", + "data_sync.preview.tab.sql": "SQL({{count}})", + "data_sync.preview.tab.update": "更新({{count}})", + "data_sync.preview.title": "差异预览:{{table}}", + "data_sync.preview.update_detail_title": "更新详情:{{table}} / {{pk}}", + "data_sync.progress.stage.analysis_completed": "差异分析完成", + "data_sync.progress.stage.analysis_started": "差异分析开始", + "data_sync.progress.stage.analyzing_diff": "差异分析", + "data_sync.progress.stage.analyzing_table": "分析表({{current}}/{{total}})", + "data_sync.progress.stage.applying_changes": "应用变更", + "data_sync.progress.stage.backend_update": "正在处理后端进度", + "data_sync.progress.stage.checking_columns": "检查字段一致性", + "data_sync.progress.stage.clearing_target": "清空目标表", + "data_sync.progress.stage.collection_completed": "集合处理完成", + "data_sync.progress.stage.comparing_diff": "对比差异", + "data_sync.progress.stage.completed": "同步完成", + "data_sync.progress.stage.connecting_source": "连接源数据库", + "data_sync.progress.stage.connecting_target": "连接目标数据库", + "data_sync.progress.stage.creating_indexes": "创建索引", + "data_sync.progress.stage.creating_target_collection": "创建目标集合", + "data_sync.progress.stage.creating_target_table": "创建目标表", + "data_sync.progress.stage.executing": "执行中", + "data_sync.progress.stage.failed": "同步失败", + "data_sync.progress.stage.migrating_collection": "迁移集合({{current}}/{{total}})", + "data_sync.progress.stage.migrating_key": "迁移 Key({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_collection_completed": "集合处理完成", + "data_sync.progress.stage.mongo_redis_migrating_collection": "迁移集合({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_started": "MongoDB 到 Redis keyspace 迁移开始", + "data_sync.progress.stage.mongodb_keyspace_started": "开始 MongoDB 键空间迁移", + "data_sync.progress.stage.preparing": "准备开始", + "data_sync.progress.stage.reading_source": "读取源表数据", + "data_sync.progress.stage.reading_target": "读取目标表数据", + "data_sync.progress.stage.redis_keyspace_started": "开始 Redis 键空间迁移", + "data_sync.progress.stage.redis_mongo_creating_collection": "创建目标集合", + "data_sync.progress.stage.redis_mongo_migrating_key": "迁移 Key({{current}}/{{total}})", + "data_sync.progress.stage.redis_mongo_started": "Redis 到 MongoDB keyspace 迁移开始", + "data_sync.progress.stage.sync_started": "开始同步", + "data_sync.progress.stage.syncing_schema": "同步表结构", + "data_sync.progress.stage.syncing_table": "同步表({{current}}/{{total}})", + "data_sync.progress.stage.table_completed": "表处理完成", + "data_sync.query_mode.help": "请输入源查询 SQL,并选择一个目标表。差异分析会直接基于该结果集与目标表对比。", + "data_sync.result.completed": "同步完成", + "data_sync.result.failed": "同步失败", + "data_sync.result.failed_description": "同步未完成。", + "data_sync.result.failed_detail": "同步失败:{{detail}}", + "data_sync.result.running": "正在同步", + "data_sync.result.running_description": "当前阶段:{{stage}}{{table}}", + "data_sync.result.success_summary": "成功同步 {{tables}} 张表。插入:{{inserted}},更新:{{updated}}", + "data_sync.result.table_suffix": ",表:{{table}}", + "data_sync.schema_inference.mongo_relational_issue": "{{sourceType}} -> {{targetType}} 的结构推断仍在开发中;目前仅提供迁移规划提示。", + "data_sync.schema_inference.mongo_relational_resolution": "后续迭代将从采样数据生成字段定义和类型降级策略。", + "data_sync.schema_sync.error.create_statement_empty": "建表语句为空", + "data_sync.schema_sync.error.create_target_table_failed": "创建目标表 {{table}} 失败: {{detail}}", + "data_sync.schema_sync.error.get_columns_after_create_failed": "创建目标表 {{table}} 后获取字段失败: {{detail}}", + "data_sync.schema_sync.error.get_create_statement_failed": "获取源表 {{table}} 建表语句失败: {{detail}}", + "data_sync.schema_sync.error.get_source_columns_failed": "获取源表 {{table}} 字段失败: {{detail}}", + "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "目标表 {{table}} 不存在,源类型 {{sourceType}} 暂不支持自动建表: {{detail}}", + "data_sync.schema_sync.log.add_column_failed": "补齐字段失败: 表={{table}}, 字段={{column}}, 错误={{detail}}", + "data_sync.schema_sync.log.column_added": "已补齐字段: 表={{table}}, 字段={{column}}, 类型={{type}}", + "data_sync.schema_sync.log.completed": "表结构同步完成: {{table}},新增字段 {{count}} 个", + "data_sync.schema_sync.log.schema_aligned": "表结构一致: {{table}}", + "data_sync.schema_sync.log.target_created": "目标表创建成功: {{table}}", + "data_sync.schema_sync.log.target_missing_create": "目标表 {{table}} 不存在,开始尝试创建表结构", + "data_sync.schema_sync.warning.target_unsupported": "目标数据库类型={{targetType}} 暂不支持结构同步,已跳过表 {{table}}", + "data_sync.section.migration_options": "迁移选项", + "data_sync.section.source_database": "源数据库", + "data_sync.section.sync_options": "同步选项", + "data_sync.section.target_database": "目标数据库", + "data_sync.step.configure": "配置源与目标", + "data_sync.step.result": "执行结果", + "data_sync.step.select_tables": "选择表", + "data_sync.table_picker.help": "请选择需要同步的表:", + "data_sync.table_picker.item_unit": "项", + "data_sync.table_picker.items_unit": "项", + "data_sync.table_picker.not_found": "暂无数据", + "data_sync.table_picker.search_placeholder": "搜索表...", + "data_sync.table_picker.selected_title": "已选表", + "data_sync.table_picker.show_same": "显示相同表", + "data_sync.table_picker.source_title": "源表", + "data_sync.table.delete": "删除", + "data_sync.table.insert": "插入", + "data_sync.table.plan": "计划", + "data_sync.table.preview": "预览", + "data_sync.table.risk": "风险", + "data_sync.table.same": "相同", + "data_sync.table.table_name": "表名", + "data_sync.table.target_exists": "已存在", + "data_sync.table.target_missing": "不存在", + "data_sync.table.target_table": "目标表", + "data_sync.table.update": "更新", + "data_sync.title.compare_result": "对比结果", + "data_sync.title.execution_log": "执行日志", + "data_sync.title.migration": "跨数据源迁移", + "data_sync.title.migration_description": "按源库到目标库完成建表、导入与风险预检。", + "data_sync.title.migration_options": "迁移选项", + "data_sync.title.migration_workbench": "跨库迁移工作台", + "data_sync.title.source_database": "源数据库", + "data_sync.title.sync": "数据同步", + "data_sync.title.sync_description": "按已有目标表完成差异对比、同步执行与结果确认。", + "data_sync.title.sync_options": "同步选项", + "data_sync.title.sync_workbench": "数据同步工作台", + "data_sync.title.target_database": "目标数据库", + "data_sync.transfer.empty": "暂无数据", + "data_sync.transfer.item_unit": "项", + "data_sync.transfer.items_unit": "项", + "data_sync.transfer.search_placeholder": "搜索表...", + "data_sync.transfer.selected_tables": "已选表", + "data_sync.transfer.source_tables": "??", + "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "源 ORDER BY/PARTITION/TTL/Projection/materialized-view 语义尚未自动迁移到 TDengine", + "data_sync.unsupported.mongo_index_columns_missing": "索引 {{name}} 缺少列定义,已跳过", + "data_sync.unsupported.mongo_index_create_command_failed": "索引 {{name}} 生成 MongoDB createIndexes 命令失败: {{detail}}", + "data_sync.unsupported.mongo_index_prefix_length": "索引 {{name}} 使用前缀长度,MongoDB 目标暂不支持等价迁移", + "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "源索引、外键、触发器、唯一约束和自增语义尚未自动迁移到 TDengine", + "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "源索引、外键、触发器、唯一约束、identity 和 sequence 语义尚未自动迁移到 TDengine", + "data_sync.unsupported.tdengine_source_relational_semantics": "TDengine 索引、外键、触发器、supertable、TTL 和其他时序语义尚未自动迁移", + "data_sync.unsupported.tdengine_target_missing_timestamp": "TDengine regular table 的第一列必须是 TIMESTAMP;当前源表没有可直接映射的时间字段", + "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "源 supertable、TAGS、TTL、retention policy 和索引语义尚未自动迁移到 TDengine regular table", + "data_sync.validation.query_mode_data_only": "SQL 结果集同步仅支持只同步数据", + "data_sync.validation.single_target_table_required": "SQL 结果集同步需要选择一个目标表", + "data_sync.validation.source_query_required": "请输入源查询 SQL", + "data_sync.validation.table_required": "请选择至少一张表", + "data_sync.warning.mongo_field_mixed_bson_types": "字段 {{field}} 存在多种 BSON 值类型,已降级为兼容类型", + "data_sync.warning.mongo_index_type_normalized": "索引 {{name}} 类型={{type}} 将按普通索引迁移到 MongoDB", + "data_sync.warning.mongo_source_collection_index_read_failed": "读取源 MongoDB collection 索引失败,已跳过索引迁移: {{detail}}", + "data_sync.warning.mongo_source_empty_sample_id_only": "源 MongoDB collection 暂无样本数据,仅按 `_id` 生成基础主键列", + "data_sync.warning.mongo_source_primary_key_missing": "MongoDB 源 collection 未推断出稳定主键,目标表不会自动创建主键", + "data_sync.warning.mongo_source_table_index_read_failed": "读取源表索引失败,已跳过索引迁移: {{detail}}", + "data_sync.warning.mongo_target_collection_existing_only_required": "当前策略要求目标 MongoDB collection 已存在,执行时不会自动创建", + "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB 是弱结构目标,字段结构以写入 document 为准,不执行目标列检查", + "data_sync.warning.target_exists_strategy_no_auto_create": "当前策略要求目标表已存在,执行时不会自动创建。", + "data_sync.warning.target_missing_columns": "目标表缺少 {{count}} 个字段: {{columns}}", + "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "TDengine 源目前不会自动为已有目标表补齐字段;请先确认目标结构", + "data_sync.warning.tdengine_source_mysql_type_fallback": "字段 {{column}} 类型 {{type}} 没有专用 MySQL 映射,已降级为 {{targetType}}", + "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "字段 {{column}} 类型 {{type}} 已映射为 {{targetType}},以避免 unsigned 溢出", + "data_sync.warning.tdengine_source_pglike_type_fallback": "字段 {{column}} 类型 {{type}} 没有专用 PG-like 映射,已降级为 {{targetType}}", + "data_sync.warning.tdengine_source_semantics_degraded": "TDengine 到关系型目标目前仅迁移字段和数据;supertable、TAG 关联、retention policy 和其他时序语义可能降级或丢失", + "data_sync.warning.tdengine_source_tag_column_degraded": "字段 {{column}} 是 TDengine TAG 列,将在关系型目标中降级为普通字段", + "data_sync.warning.tdengine_source_tag_column_mapped": "字段 {{column}} 是 TDengine TAG 列,已映射为普通字段", + "data_sync.warning.tdengine_target_auto_create_basic_table_only": "TDengine 目标 auto-create 目前仅创建基础表;索引、外键、触发器、supertable/TAGS/TTL 不会自动迁移", + "data_sync.warning.tdengine_target_auto_increment_not_migrated": "字段 {{column}} 的自增语义不会迁移到 TDengine", + "data_sync.warning.tdengine_target_binary_type_fallback": "字段 {{column}} 类型 {{type}} 已按字符串语义降级为 {{targetType}}", + "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "字段 {{column}} 类型 {{type}} 已提升为第一个 TDengine TIMESTAMP 字段", + "data_sync.warning.tdengine_target_empty_type_fallback": "字段 {{column}} 类型为空,已降级为 {{targetType}}", + "data_sync.warning.tdengine_target_enum_type_fallback": "字段 {{column}} enum 类型 {{type}} 已降级为 {{targetType}}", + "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "TDengine 目标目前不会自动为已有目标表补齐字段;请先确认目标结构", + "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "字段 {{column}} 的 FixedString 长度无法解析,已降级为 {{targetType}}", + "data_sync.warning.tdengine_target_identity_not_migrated": "字段 {{column}} 的自增/identity 语义不会迁移到 TDengine", + "data_sync.warning.tdengine_target_insert_only": "TDengine 目标目前仅支持 INSERT 写入;update/delete 差异将在执行时被拒绝", + "data_sync.warning.tdengine_target_json_regular_table_fallback": "字段 {{column}} 类型 {{type}} 在 TDengine regular table 中不保留 TAG 语义,已降级为 {{targetType}}", + "data_sync.warning.tdengine_target_json_tag_only_fallback": "字段 {{column}} 类型 {{type}} 已降级为 {{targetType}},因为 TDengine JSON 仅适用于 TAG", + "data_sync.warning.tdengine_target_missing_time_column": "源表没有可映射的时间字段,因此无法自动建表。继续前请手工准备 TDengine 目标表和时间字段。", + "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "字段 {{column}} 的主键语义不会作为关系约束迁移到 TDengine", + "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "字段 {{column}} 类型 {{type}} 没有专用 TDengine 同库映射,已降级为 {{targetType}}", + "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "字段 {{column}} 是 TDengine TAG 列,迁移到 regular table 后将降级为普通字段", + "data_sync.warning.tdengine_target_time_only_type_fallback": "字段 {{column}} 类型 {{type}} 没有稳定的 TDengine time-only 映射,已降级为 {{targetType}}", + "data_sync.warning.tdengine_target_timestamp_column_reordered": "TDengine 基础表要求时间字段在首列;字段 {{column}} 已移动到第一位", + "data_sync.warning.tdengine_target_type_fallback": "字段 {{column}} 类型 {{type}} 已降级为 {{targetType}}", + "data_sync.warning.tdengine_target_type_no_mapping_fallback": "字段 {{column}} 类型 {{type}} 没有专用 TDengine 映射,已降级为 {{targetType}}", + "data_sync.warning.tdengine_target_user_defined_type_fallback": "字段 {{column}} 为用户自定义类型,已降级为 {{targetType}}", + "data_viewer.message.connection_not_found": "未找到连接", + "data_viewer.message.duckdb_query_timeout": "DuckDB 查询超过连接超时时间,已中断。请调大连接超时时间,或减少排序/筛选范围后重试。", + "data_viewer.message.fetch_data_failed_detail": "获取数据失败:{{detail}}", + "data_viewer.message.mongo_filter_invalid_detail": "Mongo 筛选条件无效:{{detail}}", + "data_viewer.message.mongo_filter_parse_failed": "解析失败", + "data_viewer.message.query_failed": "查询失败", + "data_viewer.message.query_timeout": "查询超过连接超时时间,已中断。请调大连接超时时间,或减少查询范围后重试。", + "data_viewer.message.result_not_ready": "当前结果集尚未就绪,请先执行一次加载", + "data_viewer.message.sort_buffer_retry_succeeded": "已自动提升排序缓冲并重试成功。", + "data_viewer.message.total_count_failed": "统计总数失败", + "data_viewer.message.total_count_failed_detail": "统计总数失败:{{detail}}", + "data_viewer.message.total_count_parse_failed": "统计结果解析失败", "data_viewer.read_only.reason.duckdb_rowid_missing": "未检测到主键、可用唯一索引或 DuckDB rowid,无法安全提交修改。", + "data_viewer.read_only.reason.index_metadata_unavailable": "无法加载唯一索引元数据,无法安全提交修改。", + "data_viewer.read_only.reason.metadata_unavailable": "无法加载主键/唯一索引元数据,无法安全提交修改。", + "data_viewer.read_only.reason.mongo_id_missing": "MongoDB 结果集中缺少 _id,无法安全提交修改。", + "data_viewer.read_only.reason.no_safe_locator": "未检测到主键或可用唯一索引,无法安全提交修改。", + "data_viewer.read_only.reason.oracle_rowid_missing": "未检测到主键或可用唯一索引,且结果中缺少 Oracle ROWID,无法安全提交修改。", + "data_viewer.read_only.reason.primary_key_column_missing": "结果集中缺少主键列 {{columns}},无法安全提交修改。", + "data_viewer.read_only.warning.collection": "集合 {{target}} 保持只读:{{reason}}", + "data_viewer.read_only.warning.table": "表 {{target}} 保持只读:{{reason}}", + "data_viewer.sql_log.phase.complex_type_fallback_retry": "复杂类型降级重试", + "data_viewer.sql_log.phase.main_query": "主查询", + "data_viewer.sql_log.phase.sort_buffer_retry": "重试({{size}} sort_buffer)", + "database.label": "数据库", + "database.unnamed": "未命名数据库", "db.backend.action.delete": "删除", "db.backend.action.update": "更新", "db.backend.error.batch_insert_exec_required": "批量插入执行函数不能为空", @@ -6979,6 +4485,41 @@ "definition_viewer.edit.comment_empty_definition": "当前对象定义为空,请补全 {{name}} 的 DDL 后执行", "definition_viewer.edit.comment_title": "修改{{object}}: {{name}}", "definition_viewer.edit.tab_title": "修改{{object}}: {{name}}", + "definition_viewer.editor.event_definition_not_found": "未找到事件定义", + "definition_viewer.editor.event_fragment_fallback.header": "当前数据源未返回完整 CREATE EVENT 语句,已返回事件定义片段", + "definition_viewer.editor.metadata_fallback.header": "当前数据源未返回可执行定义文本,已返回元数据", + "definition_viewer.editor.metadata_fallback.name_label": "名称", + "definition_viewer.editor.metadata_fallback.type_label": "类型", + "definition_viewer.editor.object_definition_not_found": "未找到{{object}}定义", + "definition_viewer.editor.routine_definition_not_found": "未找到函数/存储过程定义", + "definition_viewer.editor.sphinx.compat_queries_hint": "已执行多套兼容查询,可能是版本能力限制或对象类型不支持。", + "definition_viewer.editor.sphinx.empty_result": "当前 Sphinx 实例{{version}}未返回{{object}}定义。", + "definition_viewer.editor.sphinx.failed_message_label": "返回失败信息", + "definition_viewer.editor.sphinx.failed_message_unknown": "返回失败信息:未知错误", + "definition_viewer.editor.sphinx.unsupported_query": "当前 Sphinx 实例{{version}}不支持{{object}}定义查询。", + "definition_viewer.editor.sphinx.version_suffix": "(版本: {{version}})", + "definition_viewer.editor.unsupported_event_definition": "暂不支持该数据库类型的事件定义查看", + "definition_viewer.editor.unsupported_object_definition": "暂不支持该对象定义查看", + "definition_viewer.editor.unsupported_routine_definition": "暂不支持该数据库类型的函数/存储过程定义查看", + "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite 不支持函数/存储过程定义管理", + "definition_viewer.editor.unsupported_view_definition": "暂不支持该数据库类型的视图定义查看", + "definition_viewer.editor.view_definition_not_found": "未找到视图定义", + "definition_viewer.error.connection_not_found": "未找到数据库连接", + "definition_viewer.error.event_name_empty": "事件名称为空", + "definition_viewer.error.load_failed": "加载失败", + "definition_viewer.error.query_failed": "查询定义失败", + "definition_viewer.error.query_failed_detail": "查询定义失败:{{detail}}", + "definition_viewer.error.routine_name_empty": "函数/存储过程名称为空", + "definition_viewer.error.view_name_empty": "视图名称为空", + "definition_viewer.field.database": "数据库", + "definition_viewer.field.type": "类型", + "definition_viewer.loading.event_definition": "加载事件定义...", + "definition_viewer.loading.routine_definition": "加载函数/存储过程定义...", + "definition_viewer.loading.view_definition": "加载视图定义...", + "definition_viewer.object.event": "事件", + "definition_viewer.object.materialized_view": "物化视图", + "definition_viewer.object.routine": "函数/存储过程", + "definition_viewer.object.view": "视图", "definition_viewer.warning.refresh_latest_failed": "刷新最新定义失败", "dev.perf_data_grid.columns": "列数", "dev.perf_data_grid.density.comfortable": "标准", @@ -6993,41 +4534,106 @@ "dev.perf_data_grid.ui_version.legacy_short": "旧版", "dev.perf_data_grid.ui_version.v2": "新版 UI", "dev.perf_data_grid.ui_version.v2_short": "新版", + "driver_manager.action.close": "关闭", + "driver_manager.action.import_directory": "导入驱动目录", + "driver_manager.action.import_package": "导入驱动包", + "driver_manager.action.install_enable": "安装启用", + "driver_manager.action.logs": "日志", + "driver_manager.action.network_check": "网络检测", + "driver_manager.action.open_directory": "打开驱动目录", + "driver_manager.action.open_global_proxy_settings": "打开全局代理设置", + "driver_manager.action.refresh": "刷新", + "driver_manager.action.remove": "移除", "driver_manager.action.switch_version": "切换版本", + "driver_manager.backend.dialog.select_download_directory": "选择驱动下载目录", + "driver_manager.backend.dialog.select_package_directory": "选择驱动包目录", + "driver_manager.backend.dialog.select_package_file": "选择驱动包文件(非 JDBC Jar)", + "driver_manager.backend.driver_fallback_name": "驱动", "driver_manager.backend.error.agent_hash_failed": "计算驱动代理摘要失败:{{detail}}", "driver_manager.backend.error.agent_metadata_unavailable": "{{name}} 驱动代理版本元数据不可用,请安装当前版本对应的 driver-agent:{{detail}}", "driver_manager.backend.error.agent_path_occupied_by_directory": "{{name}} 驱动代理路径被目录占用:{{path}}", "driver_manager.backend.error.agent_revision_mismatch": "{{name}} 驱动代理 revision 不匹配(已安装:{{actual}},当前需要:{{expected}}),请安装当前版本对应的 driver-agent", "driver_manager.backend.error.agent_revision_mismatch_empty_actual": "{{name}} 驱动代理 revision 不匹配(已安装:空,当前需要:{{expected}}),请安装当前版本对应的 driver-agent", + "driver_manager.backend.error.api_url_empty": "API 地址为空", + "driver_manager.backend.error.asset_name_empty": "驱动资产名称为空", + "driver_manager.backend.error.builtin_download_not_required": "内置驱动无需下载扩展包", + "driver_manager.backend.error.builtin_install_not_required": "内置驱动无需安装扩展包", + "driver_manager.backend.error.builtin_package_not_required": "内置驱动无需安装包", + "driver_manager.backend.error.builtin_remove_not_allowed": "内置驱动不可移除", + "driver_manager.backend.error.builtin_version_not_required": "内置驱动无需选择版本", + "driver_manager.backend.error.bundle_download_failed": "下载驱动总包失败:{{detail}}", "driver_manager.backend.error.bundle_entry_missing": "驱动总包内未找到 {{name}}(期望路径 {{path}})", + "driver_manager.backend.error.bundle_index_asset_missing": "未找到驱动总包索引资产", + "driver_manager.backend.error.bundle_index_empty": "驱动总包索引为空", + "driver_manager.backend.error.bundle_index_fetch_failed": "拉取驱动总包索引失败:{{detail}}", + "driver_manager.backend.error.bundle_index_parse_failed": "解析驱动总包索引失败:{{detail}}", + "driver_manager.backend.error.bundle_url_empty": "驱动总包下载地址为空", "driver_manager.backend.error.bundled_agent_hash_failed": "计算预置 {{name}} 驱动代理摘要失败:{{detail}}", + "driver_manager.backend.error.cache_key_empty": "缓存 key 为空", "driver_manager.backend.error.chmod_agent_failed": "设置驱动代理权限失败:{{detail}}", "driver_manager.backend.error.close_agent_file_failed": "关闭驱动代理文件失败:{{detail}}", "driver_manager.backend.error.copy_bundled_agent_failed": "复制预置 {{name}} 驱动代理失败:{{detail}}", "driver_manager.backend.error.copy_runtime_dependency_entry_failed": "复制运行时依赖 {{name}} 失败:{{detail}}", "driver_manager.backend.error.copy_runtime_dependency_failed": "复制 {{name}} 运行时依赖失败:{{detail}}", "driver_manager.backend.error.create_agent_temp_file_failed": "创建驱动代理临时文件失败:{{detail}}", + "driver_manager.backend.error.create_directory_failed": "创建驱动目录失败:{{detail}}", "driver_manager.backend.error.create_named_directory_failed": "创建 {{name}} 驱动目录失败:{{detail}}", + "driver_manager.backend.error.download_failed": "下载失败:{{detail}}", + "driver_manager.backend.error.download_url_empty": "下载地址为空", + "driver_manager.backend.error.driver_type_empty": "驱动类型为空", + "driver_manager.backend.error.driver_version_list_fetch_failed": "拉取驱动版本列表失败:{{detail}}", + "driver_manager.backend.error.driver_version_list_parse_failed": "解析驱动版本列表失败:{{detail}}", "driver_manager.backend.error.driver_version_unsupported": "{{name}} 版本 {{version}} 当前不受支持", "driver_manager.backend.error.extract_runtime_dependency_failed": "解压运行时依赖 {{name}} 失败:{{detail}}", + "driver_manager.backend.error.file_manifest_url_invalid": "无效的文件驱动清单地址", + "driver_manager.backend.error.file_path_empty": "文件路径为空", "driver_manager.backend.error.go_not_found_prebuilt_missing": "当前环境未安装 Go,且未找到可用的 {{name}} 预编译代理包", "driver_manager.backend.error.import_local_agent_failed": "导入本地驱动代理失败:{{detail}}", "driver_manager.backend.error.import_local_agent_runtime_failed": "导入本地驱动代理运行时依赖失败:{{detail}}", "driver_manager.backend.error.install_prebuilt_package_failed": "安装预编译驱动包失败:{{detail}}", "driver_manager.backend.error.local_directory_entry_missing": "目录中未找到 {{name}} 代理文件(优先路径 {{path}},候选文件名 {{assetCandidates}} / {{baseCandidates}})", "driver_manager.backend.error.local_directory_not_directory": "本地驱动目录路径不是目录:{{path}}", + "driver_manager.backend.error.local_directory_path_empty": "本地驱动目录路径为空", "driver_manager.backend.error.local_directory_scan_limit": "本地驱动目录条目过多(超过 {{max}}),请缩小目录范围或直接选择 zip/单文件", + "driver_manager.backend.error.local_manifest_url_invalid": "无效的本地驱动清单地址", "driver_manager.backend.error.local_package_entry_missing": "本地驱动包内未找到 {{name}} 代理文件(期望路径 {{path}})", + "driver_manager.backend.error.local_package_path_empty": "本地驱动包路径为空", + "driver_manager.backend.error.manifest_fetch_failed": "拉取驱动清单失败:{{detail}}", + "driver_manager.backend.error.manifest_parse_failed": "解析驱动清单失败:{{detail}}", + "driver_manager.backend.error.manifest_scheme_unsupported": "不支持的驱动清单地址协议:{{scheme}}", + "driver_manager.backend.error.manifest_too_large": "驱动清单超过大小限制", + "driver_manager.backend.error.manifest_url_empty": "驱动清单地址为空", "driver_manager.backend.error.metadata_file_write_failed": "写入驱动元数据文件失败:{{detail}}", "driver_manager.backend.error.metadata_payload_encode_failed": "序列化驱动元数据失败:{{detail}}", + "driver_manager.backend.error.module_path_empty": "模块路径为空", + "driver_manager.backend.error.module_version_list_empty": "模块版本列表为空", + "driver_manager.backend.error.module_version_list_fetch_failed": "拉取模块版本列表失败:{{detail}}", + "driver_manager.backend.error.module_version_list_read_failed": "读取模块版本列表失败:{{detail}}", + "driver_manager.backend.error.mongo_version_unsupported": "MongoDB 版本 {{version}} 当前不受支持;仅支持 1.17.x 和 2.x", "driver_manager.backend.error.named_agent_hash_failed": "计算 {{name}} 驱动代理摘要失败:{{detail}}", "driver_manager.backend.error.named_chmod_agent_failed": "设置 {{name}} 驱动代理权限失败:{{detail}}", + "driver_manager.backend.error.no_driver_versions": "未找到可用驱动版本", + "driver_manager.backend.error.open_bundle_failed": "打开驱动总包失败:{{detail}}", + "driver_manager.backend.error.open_directory_failed": "打开驱动目录失败:{{detail}}", + "driver_manager.backend.error.open_directory_unsupported": "当前平台暂不支持打开目录:{{platform}}", + "driver_manager.backend.error.open_local_package_failed": "打开本地驱动包失败:{{detail}}", + "driver_manager.backend.error.optional_go_only": "当前仅支持纯 Go 可选驱动的安装启用", + "driver_manager.backend.error.package_size_unsupported": "当前驱动不支持安装包查询", + "driver_manager.backend.error.prebuilt_downloads_failed": "预编译包下载失败:{{detail}}", + "driver_manager.backend.error.read_bundle_entry_failed": "读取驱动总包条目失败:{{detail}}", + "driver_manager.backend.error.read_local_directory_failed": "读取本地驱动目录失败:{{detail}}", + "driver_manager.backend.error.read_local_package_entry_failed": "读取本地驱动包条目失败:{{detail}}", + "driver_manager.backend.error.read_local_package_failed": "读取本地驱动包失败:{{detail}}", + "driver_manager.backend.error.release_empty": "Release 为空", + "driver_manager.backend.error.release_info_fetch_failed": "拉取 Release 信息失败:{{detail}}", "driver_manager.backend.error.remove_installed_agent_failed": "清理已安装 {{name}} 驱动代理失败:{{detail}}", + "driver_manager.backend.error.remove_package_failed": "移除驱动包失败:{{detail}}", "driver_manager.backend.error.replace_agent_failed": "替换驱动代理失败:{{detail}}", "driver_manager.backend.error.runtime_dependency_directory_empty": "运行时依赖目录为空", "driver_manager.backend.error.runtime_dependency_entry_missing": "驱动包缺少运行时依赖:{{name}}", "driver_manager.backend.error.runtime_dependency_required": "{{name}} 当前平台需要随包提供运行时依赖({{files}}),不能安装单文件代理;请使用驱动总包、驱动专属 zip 或本地源码构建", "driver_manager.backend.error.runtime_dependency_target_directory_empty": "运行时依赖目标目录为空", + "driver_manager.backend.error.scan_local_directory_failed": "扫描本地驱动目录失败:{{detail}}", "driver_manager.backend.error.source_build_command_failed": "构建 {{name}} 驱动代理失败:{{detail}},输出:{{output}}", "driver_manager.backend.error.source_build_duckdb_windows_cgo_toolchain_prepare_failed": "准备 DuckDB Windows CGO 编译器失败:{{detail}}", "driver_manager.backend.error.source_build_duckdb_windows_dlltool_resolve_failed": "定位 DuckDB Windows dlltool 失败:{{detail}}", @@ -7036,6 +4642,7 @@ "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found": "未找到可用的 gcc.exe/g++.exe;{{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found_with_checked": "未找到可用的 gcc.exe/g++.exe,已检查:{{checked}};{{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_toolchain_install_hint": "请先安装 MSYS2 UCRT64 工具链:winget install --id MSYS2.MSYS2 -e;然后执行 C:\\msys64\\usr\\bin\\bash.exe -lc \"pacman -S --needed --noconfirm mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-binutils\"", + "driver_manager.backend.error.source_build_failed": "本地构建失败:{{detail}}", "driver_manager.backend.error.source_build_go_mod_read_failed": "读取 go.mod 失败:{{detail}}", "driver_manager.backend.error.source_build_module_dependency_missing": "未在 go.mod 中找到驱动依赖:{{modulePath}}", "driver_manager.backend.error.source_build_module_or_version_empty": "驱动模块或版本为空", @@ -7047,53 +4654,297 @@ "driver_manager.backend.error.source_build_timeout": "构建 {{name}} 驱动代理超时(超过 {{timeout}}),请优先使用预编译驱动包或本地驱动包导入", "driver_manager.backend.error.source_build_workdir_unavailable": "获取当前目录失败:{{detail}}", "driver_manager.backend.error.sync_agent_failed": "落盘驱动代理失败:{{detail}}", + "driver_manager.backend.error.tag_empty": "Tag 为空", + "driver_manager.backend.error.unknown": "未知错误", + "driver_manager.backend.error.unsupported_driver_type": "不支持的驱动类型", + "driver_manager.backend.error.version_empty": "版本号为空", "driver_manager.backend.error.write_agent_failed": "写入驱动代理失败:{{detail}}", "driver_manager.backend.error.zip_entry_empty": "zip 条目为空", + "driver_manager.backend.message.download_failed_detail": "驱动下载安装失败:{{detail}}", + "driver_manager.backend.message.driver_install_success": "驱动安装成功", + "driver_manager.backend.message.jdbc_jar_unsupported": "当前驱动管理不支持直接导入 JDBC Jar。GoNavi 使用 Go 驱动与可选 driver-agent;请改用驱动包或驱动目录。如需连接 Kingbase,请优先使用 Kingbase 连接类型,或在自定义连接中填写 kingbase / kingbase8。", + "driver_manager.backend.message.local_import_failed_detail": "导入本地驱动包失败:{{detail}}", + "driver_manager.backend.message.log_hint": "(详细日志:{{path}})", + "driver_manager.backend.message.metadata_write_failed_detail": "写入驱动元数据失败:{{detail}}", + "driver_manager.backend.message.opened_directory": "已打开驱动目录:{{path}}", + "driver_manager.backend.message.package_removed": "驱动包已移除", + "driver_manager.backend.message.runtime_directory_configured": "驱动运行时目录已生效", + "driver_manager.backend.message.unsupported_builtin_manifest_url": "不支持的内置驱动清单地址:{{url}}", + "driver_manager.backend.network.error.probe_host_missing": "检测地址缺少主机", + "driver_manager.backend.network.error.probe_url_empty": "检测地址为空", "driver_manager.backend.network.error.timeout": "网络连接超时", + "driver_manager.backend.network.probe.github_driver_release": "GitHub 驱动发布", + "driver_manager.backend.network.probe.github_release_asset_domain": "GitHub Release 资产域名", + "driver_manager.backend.network.probe.go_module_proxy": "Go 模块代理", + "driver_manager.backend.network.summary.download_chain_unreachable": "GitHub API 可达,但驱动下载链路不可达。请优先在 GoNavi 启用全局代理,并在代理规则中放行 github.com、api.github.com、release-assets.githubusercontent.com、objects.githubusercontent.com、raw.githubusercontent.com;若仍失败,再考虑开启 TUN 模式。", + "driver_manager.backend.package_size.built_in": "内置", + "driver_manager.backend.package_size.to_be_published": "待发布", + "driver_manager.backend.progress.fallback.bundle_available": "直链不可用,转入驱动总包兜底({{name}},剩余 {{bundle}} 个总包源)", + "driver_manager.backend.progress.fallback.direct_to_bundle": "预编译直链未命中,转入驱动总包兜底({{name}},剩余 {{bundle}} 个总包源)", + "driver_manager.backend.progress.fallback.explicit_skip_bundle": "预编译直链未命中;当前版本仅允许显式资产,跳过驱动总包({{name}})", + "driver_manager.backend.progress.fallback.source_build": "发布资产未命中,准备回退到本地源码构建({{name}})", + "driver_manager.backend.progress.plan.bundle_only": "准备安装 {{name}} 驱动代理(版本 {{version}});未提供预编译直链,直接尝试 {{bundle}} 个驱动总包源", + "driver_manager.backend.progress.plan.direct_only": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试 {{direct}} 个预编译直链", + "driver_manager.backend.progress.plan.direct_then_bundle": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试 {{direct}} 个预编译直链,失败后转入 {{bundle}} 个驱动总包源", + "driver_manager.backend.progress.plan.explicit_direct": "准备安装 {{name}} 驱动代理(版本 {{version}});仅允许显式版本资产,先尝试 {{direct}} 个预编译直链", + "driver_manager.backend.progress.plan.source_fallback": "准备安装 {{name}} 驱动代理(版本 {{version}});未命中发布资产时将回退到本地源码构建", + "driver_manager.backend.progress.plan.source_first": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试本地源码构建,失败后继续下载兜底", + "driver_manager.backend.progress.plan.source_only": "准备安装 {{name}} 驱动代理(版本 {{version}});当前版本仅允许本地源码构建", + "driver_manager.backend.status.affected_connections": "影响 {{count}} 个已保存连接", + "driver_manager.backend.status.agent_arch_incompatible_detail": "{{name}} 驱动代理架构不兼容:文件={{file}},当前进程={{process}}。请在驱动管理中重新安装启用", + "driver_manager.backend.status.agent_missing": "{{name}} 驱动代理缺失,请在驱动管理中重新安装启用", + "driver_manager.backend.status.agent_path_failed": "{{name}} 驱动代理路径解析失败,请在驱动管理中重新安装启用", "driver_manager.backend.status.agent_revision_update_detail": "原因:当前 GoNavi 版本要求更新后的 {{name}} driver-agent(revision: {{expected}})。影响:driver-agent 是独立二进制,不会随主程序自动更新;如果不重装,会继续使用旧 agent 逻辑,驱动侧已修复或优化的行为不会生效,可能继续出现旧版本问题。强烈建议重装对应 driver-agent", "driver_manager.backend.status.agent_revision_update_detail_with_actual": "原因:当前 GoNavi 版本要求更新后的 {{name}} driver-agent(revision: {{expected}})。影响:driver-agent 是独立二进制,不会随主程序自动更新;如果不重装,会继续使用旧 agent 逻辑,驱动侧已修复或优化的行为不会生效,可能继续出现旧版本问题。强烈建议重装对应 driver-agent(已安装标记:{{actual}},当前需要:{{expected}})", + "driver_manager.backend.status.agent_unavailable_reinstall": "{{name}} 驱动代理不可用:{{detail}}。请在驱动管理中重新安装启用", + "driver_manager.backend.status.built_in_available": "内置驱动,可直接连接", + "driver_manager.backend.status.expected_revision": "当前需要 revision {{revision}}。", + "driver_manager.backend.status.installed_pending": "驱动已安装,待生效", + "driver_manager.backend.status.installed_pending_with_version": "驱动已安装(版本:{{version}}),待生效", + "driver_manager.backend.status.installed_revision": "已安装 revision {{revision}}。", "driver_manager.backend.status.mongodb_compatibility_update_detail": "原因:当前推荐 MongoDB 兼容驱动版本为 {{recommended}},已安装版本为 {{installed}}。影响:MongoDB 2.x driver-agent 使用官方 v2 驱动,要求服务端 MongoDB 4.2+;连接 MongoDB 4.0 会出现 wire version 7 不兼容。强烈建议重装对应 driver-agent", + "driver_manager.backend.status.needs_update": "需要重装以应用驱动侧更新。", + "driver_manager.backend.status.optional_disabled": "{{name}} 纯 Go 驱动未启用,请先在驱动管理中点击安装启用", + "driver_manager.backend.status.optional_disabled_generic": "未启用", + "driver_manager.backend.status.optional_disabled_with_version": "未启用(版本:{{version}})", + "driver_manager.backend.status.optional_enabled": "纯 Go 驱动已启用,可直接连接", + "driver_manager.backend.status.slim_build_required": "{{name}} 当前发行包为精简构建,未内置该驱动;如需使用请安装 Full 版", + "driver_manager.backend.status.unrecognized_driver_type": "未识别的数据源类型", + "driver_manager.backend.version.latest_suffix": "(最新)", + "driver_manager.backend.version.recommended_suffix": "(推荐)", + "driver_manager.backend.version.unlabeled": "未标注版本", + "driver_manager.column.actions": "操作", + "driver_manager.column.data_source": "数据源", + "driver_manager.column.package_size": "安装包大小", + "driver_manager.column.progress": "安装进度", + "driver_manager.column.status": "状态", + "driver_manager.column.version": "驱动版本", + "driver_manager.description.install_required": "除 MySQL / Redis / Oracle / PostgreSQL 外,其他数据源需先安装启用后再连接。", + "driver_manager.directory_info.details_label": "查看驱动目录与复用说明", + "driver_manager.directory_info.log_file": "运行日志文件:{{path}}", + "driver_manager.directory_info.reuse_help": "自动下载和手动导入的驱动都会落盘到以下目录;后续版本升级可重复复用已下载驱动。", + "driver_manager.directory_info.root_dir": "驱动根目录:{{path}}", + "driver_manager.directory_info.title": "驱动目录与复用说明", + "driver_manager.empty.default": "暂无驱动数据", + "driver_manager.empty.search": "未找到匹配“{{keyword}}”的驱动", + "driver_manager.filter_summary.match": "匹配 {{filtered}} / {{total}}", + "driver_manager.filter_summary.total": "共 {{total}} 个驱动", + "driver_manager.import.directory_help": "如果应用内下载链路失败,可先手动下载驱动包到该目录,再使用“导入驱动包”或“导入驱动目录”完成安装。", + "driver_manager.import.single_file_help": "行内“导入驱动包”仅用于单个驱动文件/总包(如 `mariadb-driver-agent`、`mariadb-driver-agent.exe`、`GoNavi-DriverAgents.zip`),不支持直接导入 JDBC Jar;批量导入请使用上方“导入驱动目录”。", + "driver_manager.local_source.directory": "目录", + "driver_manager.local_source.file": "文件", + "driver_manager.log_modal.empty": "当前驱动暂无操作日志。", + "driver_manager.log_modal.executable_path": "驱动可执行文件:{{path}}", + "driver_manager.log_modal.install_dir": "安装目录:{{path}}", + "driver_manager.log_modal.title": "驱动日志 - {{name}}", + "driver_manager.log.done_auto_install": "自动安装完成{{version}}", + "driver_manager.log.done_local_import": "本地导入安装完成{{version}}", + "driver_manager.log.done_remove": "驱动移除完成", + "driver_manager.log.force_overwrite_reinstall": "已启用覆盖已安装模式,执行重装导入", + "driver_manager.log.progress_line": "【{{status}}】{{message}}({{percent}}%)", + "driver_manager.log.skip_installed_dedupe": "已检测到驱动已安装,目录导入去重跳过", + "driver_manager.log.skip_slim_build": "当前发行包为精简构建,已跳过目录导入", + "driver_manager.log.start_auto_install": "开始自动安装", + "driver_manager.log.start_local_import": "开始本地导入{{version}}({{source}}):{{path}}", + "driver_manager.log.start_remove": "开始移除驱动", + "driver_manager.message.directory_import_completed": "目录导入完成{{mode}}:成功 {{success}}{{skip}}", + "driver_manager.message.directory_import_completed_with_failure": "目录导入完成{{mode}}:成功 {{success}},失败 {{failed}}{{skip}}", + "driver_manager.message.directory_import_failed": "目录导入失败{{mode}}:失败 {{failed}}{{skip}}", + "driver_manager.message.install_failed": "安装 {{name}} 失败", + "driver_manager.message.install_failed_detail": "安装 {{name}} 失败:{{detail}}", "driver_manager.message.install_failed_fallback": "安装 {{name}} 失败", + "driver_manager.message.install_start": "开始安装", + "driver_manager.message.install_success": "{{name}}{{version}} 已安装启用", "driver_manager.message.install_watchdog_timeout": "安装 {{name}} 超过 {{minutes}} 分钟仍未完成。后台任务可能仍在下载或构建,请稍后刷新状态;如多次出现,请检查代理或改用本地驱动包导入。", + "driver_manager.message.load_status_failed": "拉取驱动状态失败", + "driver_manager.message.load_status_failed_detail": "拉取驱动状态失败:{{detail}}", + "driver_manager.message.load_version_failed": "{{name}} 版本列表加载失败", + "driver_manager.message.load_version_failed_detail": "加载 {{name}} 版本列表失败:{{detail}}", + "driver_manager.message.local_directory_required": "未选择有效的驱动包目录", + "driver_manager.message.local_file_required": "未选择有效的驱动包文件", + "driver_manager.message.local_import_failed": "导入 {{name}} 本地驱动包失败", + "driver_manager.message.local_import_failed_detail": "导入 {{name}} 本地驱动包失败:{{detail}}", + "driver_manager.message.local_import_start": "开始导入本地驱动包", + "driver_manager.message.local_import_success": "{{name}}{{version}} 本地驱动包已安装启用", + "driver_manager.message.local_path_required": "未选择有效的本地导入{{source}}", + "driver_manager.message.network_check_completed": "驱动网络检测已完成", + "driver_manager.message.network_check_failed": "驱动网络检测失败", + "driver_manager.message.network_check_failed_detail": "驱动网络检测失败:{{detail}}", + "driver_manager.message.no_external_drivers_to_import": "当前没有可导入的外置驱动", + "driver_manager.message.open_directory_failed": "打开驱动目录失败", + "driver_manager.message.open_directory_failed_detail": "打开驱动目录失败:{{detail}}", + "driver_manager.message.overwrite_suffix": "(覆盖已安装)", + "driver_manager.message.remove_failed": "移除 {{name}} 失败", + "driver_manager.message.remove_failed_detail": "移除 {{name}} 失败:{{detail}}", + "driver_manager.message.remove_success": "{{name}} 已移除", + "driver_manager.message.select_local_directory_failed": "选择本地驱动包目录失败", + "driver_manager.message.select_local_directory_failed_detail": "选择本地驱动包目录失败:{{detail}}", + "driver_manager.message.select_local_file_failed": "选择本地驱动包文件失败", + "driver_manager.message.select_local_file_failed_detail": "选择本地驱动包文件失败:{{detail}}", + "driver_manager.message.skip_suffix": ",{{items}}", + "driver_manager.message.skip.dedupe": "去重跳过 {{count}}", + "driver_manager.message.skip.slim": "精简版跳过 {{count}}", + "driver_manager.network.alert.download_chain_unreachable": "重要提醒:驱动下载链路域名不可达", + "driver_manager.network.alert.download_network_unreachable": "重要提醒:驱动下载网络不可达", + "driver_manager.network.chain_alert.allow_hosts": "若仍失败,请在代理规则放行:{{hosts}};仍无法调整规则时,再考虑开启 TUN 模式。", + "driver_manager.network.chain_alert.description": "当前可能能访问 GitHub 页面,但驱动包下载会跳转到资产域名。请优先在 GoNavi 顶部“代理”中启用全局代理(填写代理应用本地地址和端口)。", + "driver_manager.network.checking": "正在检测驱动下载网络...", + "driver_manager.network.details_label": "查看网络检测明细", + "driver_manager.network.error_value": ",{{detail}}", + "driver_manager.network.github_latency": "代理链路到 GitHub 连通性延迟:{{status}}{{latency}}{{detail}}", + "driver_manager.network.latency_value": ",{{latency}}ms", + "driver_manager.network.no_proxy_env": "未检测到系统代理环境变量。", + "driver_manager.network.no_result": "暂无结果", + "driver_manager.network.not_checked": "尚未完成网络检测", + "driver_manager.network.proxy_env_detected": "检测到代理环境变量:{{keys}}", + "driver_manager.network.reachable": "可达", + "driver_manager.network.summary.download_chain_unreachable": "GitHub API 可达,但驱动下载资产域名不可达。", + "driver_manager.network.summary.proxy_recommended": "检测到部分驱动下载地址不可达,建议先配置 HTTP/HTTPS/SOCKS5 代理后再安装驱动。", + "driver_manager.network.summary.reachable": "驱动下载网络检测通过,可直接安装驱动。", + "driver_manager.network.summary.reachable_with_proxy": "驱动下载网络已通过当前代理连通。", + "driver_manager.network.summary.unreachable": "检测到部分驱动下载地址不可达,请检查网络后重试。", + "driver_manager.network.summary.unreachable_proxy_configured": "检测到部分驱动下载地址不可达,请确认已配置代理有效后重试。", + "driver_manager.network.unreachable": "不可达", + "driver_manager.option.force_overwrite_installed": "覆盖已安装", "driver_manager.package_size.built_in": "内置", "driver_manager.package_size.pending_release": "待发布", + "driver_manager.progress.agent_install_done": "{{name}} 驱动代理安装完成", + "driver_manager.progress.agent_install_start": "开始安装 {{name}} 驱动代理", + "driver_manager.progress.backend_detail": "后端详情:{{detail}}", + "driver_manager.progress.backend_empty": "后端未返回进度说明", + "driver_manager.progress.dev_build_fallback": "未命中预编译包,尝试开发态本地构建", + "driver_manager.progress.download_bundle": "下载 {{name}} 驱动总包", + "driver_manager.progress.download_prebuilt_agent": "下载预编译 {{name}} 驱动代理", "driver_manager.progress.download_prebuilt_package": "下载预编译 {{name}} 驱动包", + "driver_manager.progress.extract_agent_from_bundle": "从驱动总包提取 {{name}} 代理", + "driver_manager.progress.fallback.bundle_available": "直链不可用,转入驱动总包兜底({{name}},剩余 {{bundle}} 个总包源)", + "driver_manager.progress.fallback.direct_to_bundle": "预编译直链未命中,转入驱动总包兜底({{name}},剩余 {{bundle}} 个总包源)", + "driver_manager.progress.fallback.explicit_skip_bundle": "预编译直链未命中;当前版本仅允许显式资产,跳过驱动总包({{name}})", + "driver_manager.progress.fallback.source_build": "发布资产未命中,准备回退到本地源码构建({{name}})", + "driver_manager.progress.install_start": "开始安装", + "driver_manager.progress.local_package_done": "本地驱动包导入完成", + "driver_manager.progress.local_package_start": "开始安装本地驱动包", + "driver_manager.progress.metadata_write": "写入驱动元数据", + "driver_manager.progress.plan.bundle_only": "准备安装 {{name}} 驱动代理(版本 {{version}});未提供预编译直链,直接尝试 {{bundle}} 个驱动总包源", + "driver_manager.progress.plan.direct_only": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试 {{direct}} 个预编译直链", + "driver_manager.progress.plan.direct_then_bundle": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试 {{direct}} 个预编译直链,失败后转入 {{bundle}} 个驱动总包源", + "driver_manager.progress.plan.explicit_direct": "准备安装 {{name}} 驱动代理(版本 {{version}});仅允许显式版本资产,先尝试 {{direct}} 个预编译直链", "driver_manager.progress.plan.require_source_first": "准备安装 {{name}} 驱动代理(版本 {{version}});开发态使用本地源码构建,失败后不使用发布包兜底", + "driver_manager.progress.plan.source_fallback": "准备安装 {{name}} 驱动代理(版本 {{version}});未命中发布资产时将回退到本地源码构建", + "driver_manager.progress.plan.source_first": "准备安装 {{name}} 驱动代理(版本 {{version}});先尝试本地源码构建,失败后继续下载兜底", + "driver_manager.progress.plan.source_only": "准备安装 {{name}} 驱动代理(版本 {{version}});当前版本仅允许本地源码构建", + "driver_manager.progress.pure_go_enabled": "安装完成,纯 Go 驱动已启用", + "driver_manager.progress.source_build_preferred": "优先使用本地源码构建 {{name}} 驱动代理", + "driver_manager.progress.status.done": "完成", + "driver_manager.progress.status.downloading": "下载中", + "driver_manager.progress.status.error": "错误", + "driver_manager.progress.status.start": "开始", + "driver_manager.progress.status.unknown": "未知", + "driver_manager.progress.unzip_agent": "解压 {{name}} 驱动代理", "driver_manager.progress.wait_bundle": "等待 {{name}} 驱动总包下载完成", + "driver_manager.punctuation.list_separator": "、", + "driver_manager.search.built_in": "内置", + "driver_manager.search.external": "外置", + "driver_manager.search.placeholder": "搜索驱动名称/类型(如 DuckDB、clickhouse)", + "driver_manager.status.built_in_available": "内置可用", + "driver_manager.status.calculating": "计算中...", + "driver_manager.status.disabled": "未启用", + "driver_manager.status.enabled": "已启用", + "driver_manager.status.full_required": "需 Full 版", + "driver_manager.status.installed": "已安装", + "driver_manager.status.installing_percent": "安装中 {{percent}}%", + "driver_manager.title": "驱动管理", "driver_manager.version.current_fallback": "当前版本", + "driver_manager.version.default": "默认版本", + "driver_manager.version.group.other": "其他", + "driver_manager.version.group.year": "{{year}} 年", + "driver_manager.version.inline_suffix": "({{version}})", "driver_manager.version.installed": "已安装{{suffix}}", + "driver_manager.version.installed_locked": "已安装(移除后可更换)", + "driver_manager.version.installed_locked_with_version": "{{version}}(已安装,移除后可更换)", "driver_manager.version.installed_with_version": "{{version}}(已安装{{suffix}})", "driver_manager.version.latest_suffix": "(最新)", + "driver_manager.version.mongodb_hint": "当前仅支持 MongoDB 1.17.x 和 2.x;更老 1.x 暂不提供安装。", "driver_manager.version.needs_reinstall_suffix": ",需重装", + "driver_manager.version.placeholder.load_on_expand": "点击展开加载版本", + "driver_manager.version.placeholder.select": "选择驱动版本", "driver_manager.version.recommended_suffix": "(推荐)", "driver_manager.version.switch_pending": "当前已安装 {{installedVersion}},已选择 {{targetVersion}},点击“切换版本”生效", "driver_manager.version.target_fallback": "目标版本", "driver_manager.version.unlabeled": "未标注版本", + "driver.guidance.customConnectionDriverHelp": "已支持: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase;别名支持 postgresql/pgx、open_gauss/open-gauss、dm8、kingbase8/kingbasees/kingbasev8。请填写 GoNavi 已注册的 Go database/sql 驱动名,不能直接填写系统 ODBC/JDBC 驱动名或导入 JDBC Jar。", + "file.backend.dialog.export_connections": "导出连接", + "file.backend.dialog.export_data": "导出数据", + "file.backend.dialog.export_database_sql": "导出 {{database}} (SQL)", + "file.backend.dialog.export_query_result": "导出查询结果", + "file.backend.dialog.export_table": "导出 {{table}}", + "file.backend.dialog.export_tables_sql": "导出表 (SQL)", + "file.backend.dialog.import_data": "导入到 {{table}}", "file.backend.dialog.select_ca_server_certificate_file": "选择 CA/服务端证书文件", "file.backend.dialog.select_client_certificate_file": "选择客户端证书文件", "file.backend.dialog.select_client_private_key_file": "选择客户端私钥文件", + "file.backend.dialog.select_config_file": "选择配置文件", + "file.backend.dialog.select_database_file": "选择数据库文件", + "file.backend.dialog.select_duckdb_file": "选择 DuckDB 数据文件", + "file.backend.dialog.select_sql_directory": "选择 SQL 目录", + "file.backend.dialog.select_sql_file": "选择 SQL 文件", + "file.backend.dialog.select_sqlite_file": "选择 SQLite 数据文件", + "file.backend.dialog.select_ssh_key_file": "选择 SSH 私钥文件", "file.backend.dialog.select_tls_certificate_file": "选择 TLS 证书文件", "file.backend.error.app_log_file_not_found": "当前未找到 GoNavi 日志文件", + "file.backend.error.batch_commit_unsupported": "当前数据库类型不支持批量提交", + "file.backend.error.connection_export_file_too_large": "连接导出文件过大", + "file.backend.error.connection_import_file_too_large": "连接导入文件过大", + "file.backend.error.connection_package_decrypt_failed": "文件密码错误或文件已损坏", + "file.backend.error.connection_package_password_required": "恢复包密码不能为空", + "file.backend.error.connection_package_payload_too_large": "连接恢复包内容过大", + "file.backend.error.connection_package_unsupported": "不支持的连接恢复包格式", "file.backend.error.create_directory_failed": "无法创建目录: {{detail}}", "file.backend.error.create_sql_file_failed": "无法创建 SQL 文件: {{detail}}", + "file.backend.error.database_name_required": "数据库名称不能为空", "file.backend.error.delete_sql_directory_failed": "无法删除目录: {{detail}}(仅支持删除空目录)", "file.backend.error.delete_sql_file_failed": "无法删除 SQL 文件: {{detail}}", "file.backend.error.directory_exists": "目录已存在", "file.backend.error.directory_name_no_separator": "目录名不能包含路径分隔符", "file.backend.error.directory_name_required": "目录名不能为空", + "file.backend.error.directory_path_required": "目录路径不能为空", + "file.backend.error.export_unsupported_format": "不支持的导出格式: {{format}}", + "file.backend.error.file_path_empty": "文件路径为空", + "file.backend.error.file_path_required": "文件路径不能为空", + "file.backend.error.import_csv_empty_or_missing_header": "CSV 为空或缺少标题行", + "file.backend.error.import_csv_open_failed": "无法打开 CSV: {{detail}}", + "file.backend.error.import_csv_read_failed": "无法读取 CSV: {{detail}}", + "file.backend.error.import_excel_empty_or_missing_header": "Excel 为空或缺少标题行", + "file.backend.error.import_excel_no_sheets": "Excel 文件没有工作表", + "file.backend.error.import_excel_parse_failed": "无法解析 Excel: {{detail}}", + "file.backend.error.import_excel_read_failed": "无法读取 Excel: {{detail}}", + "file.backend.error.import_file_empty": "文件路径不能为空", + "file.backend.error.import_json_parse_failed": "无法解析 JSON: {{detail}}", + "file.backend.error.import_json_root_not_array": "JSON 根必须是数组", + "file.backend.error.import_unsupported_format": "不支持的文件格式", + "file.backend.error.invalid_export_mode": "无效的导出模式", + "file.backend.error.mysql_workbench_no_connections": "未在 XML 中找到有效的连接配置", + "file.backend.error.mysql_workbench_parse_failed": "解析 MySQL Workbench XML 失败: {{detail}}", "file.backend.error.navicat_connection_password_parse_failed": "连接 {{name}} 的密码解析失败", "file.backend.error.navicat_connection_proxy_password_parse_failed": "连接 {{name}} 的代理密码解析失败", "file.backend.error.navicat_connection_ssh_password_parse_failed": "连接 {{name}} 的 SSH 密码解析失败", "file.backend.error.navicat_ncx_no_connections": "未在 Navicat NCX 中找到 GoNavi 支持的有效连接配置", "file.backend.error.navicat_ncx_parse_failed": "解析 Navicat NCX 失败", "file.backend.error.navicat_secret_decrypt_failed": "解密 Navicat 密码失败", + "file.backend.error.open_file_failed": "无法打开文件: {{detail}}", + "file.backend.error.query_required": "查询语句不能为空", "file.backend.error.read_directory_info_failed": "无法读取目录信息: {{detail}}", + "file.backend.error.read_file_error_summary": "文件读取错误: {{detail}}。已执行 {{count}} 条。", + "file.backend.error.read_file_info_failed": "无法读取文件信息: {{detail}}", "file.backend.error.read_target_directory_info_failed": "无法读取目标目录信息: {{detail}}", "file.backend.error.read_target_file_info_failed": "无法读取目标文件信息: {{detail}}", "file.backend.error.rename_directory_failed": "无法重命名目录: {{detail}}", "file.backend.error.rename_sql_file_failed": "无法重命名 SQL 文件: {{detail}}", "file.backend.error.schema_export_no_objects": "未在模式 {{schema}} 下获取到可导出的表或视图", "file.backend.error.schema_name_required": "模式名称不能为空", + "file.backend.error.select_with_query_required": "仅支持 SELECT/WITH 查询导出", + "file.backend.error.selected_path_not_directory": "所选路径不是目录", + "file.backend.error.selected_path_not_sql_file": "所选路径不是 SQL 文件", "file.backend.error.sql_file_batch_execution_failed": "第 {{index}} 条起的批量语句执行失败: {{detail}}", "file.backend.error.sql_file_batch_rollback_failed": "批量执行失败: {{detail}};回滚失败: {{rollbackDetail}}", "file.backend.error.sql_file_exists": "SQL 文件已存在", @@ -7101,15 +4952,338 @@ "file.backend.error.sql_file_name_no_separator": "SQL 文件名不能包含路径分隔符", "file.backend.error.sql_file_name_required": "SQL 文件名不能为空", "file.backend.error.sql_file_statement_execution_failed": "第 {{index}} 条语句执行失败: {{detail}}", + "file.backend.error.table_data_batch_limit": "单次最多处理 {{max}} 张表,当前选中 {{count}} 张", + "file.backend.error.table_data_clear_failed": "清空 {{table}} 失败: {{detail}}", + "file.backend.error.table_data_clear_failed_partial": "清空 {{table}} 失败: {{detail}}(注意:前 {{count}} 张表已清空且无法恢复)", + "file.backend.error.table_data_mode_unsupported": "不支持的表数据清理模式: {{mode}}", + "file.backend.error.table_data_no_tables": "未指定要处理的表", + "file.backend.error.table_data_truncate_failed": "截断 {{table}} 失败: {{detail}}", + "file.backend.error.table_data_truncate_failed_partial": "截断 {{table}} 失败: {{detail}}(注意:前 {{count}} 张表已截断且无法恢复)", + "file.backend.error.table_data_truncate_unsupported": "当前数据库类型 {{type}} 不支持截断表,请改用清空表", "file.backend.error.target_directory_exists": "目标目录已存在", "file.backend.error.target_sql_file_exists": "目标 SQL 文件已存在", + "file.backend.error.task_not_found": "未找到该任务", + "file.backend.error.write_failed": "写入失败: {{detail}}", + "file.backend.filter.all_files": "所有文件", + "file.backend.filter.all_files_pattern": "所有文件 (*.*)", "file.backend.filter.certificate_files": "证书文件", + "file.backend.filter.connection_package": "GoNavi 连接包 (*.gonavi-conn)", + "file.backend.filter.data_files": "数据文件", + "file.backend.filter.database_files": "数据库文件", + "file.backend.filter.duckdb_files": "DuckDB 文件", + "file.backend.filter.json_files": "JSON 文件 (*.json)", + "file.backend.filter.mysql_workbench_connections": "MySQL Workbench 连接 (*.xml)", + "file.backend.filter.private_key_files": "私钥文件", + "file.backend.filter.sql_files": "SQL 文件 (*.sql)", + "file.backend.filter.sqlite_files": "SQLite 文件", + "file.backend.html_export.document_title": "GoNavi 数据导出", + "file.backend.html_export.empty_rows": "(0 行)", + "file.backend.html_export.heading": "GoNavi 数据导出", + "file.backend.html_export.meta": "行数: {{rowCount}} · 列数: {{columnCount}} · 生成时间: {{generatedAt}}", + "file.backend.message.cancel_requested": "已发送取消请求", + "file.backend.message.execution_cancelled": "执行已中止。已执行 {{executed}} 条,失败 {{failed}} 条,耗时 {{duration}}。", + "file.backend.message.execution_completed": "执行完成。成功 {{success}} 条,失败 {{failed}} 条,耗时 {{duration}}。", + "file.backend.message.execution_error_detail_header": "错误详情(前 {{count}} 条):", + "file.backend.message.execution_more_errors": "...还有 {{count}} 条错误未显示", + "file.backend.message.export_completed": "导出完成", + "file.backend.message.import_no_data": "无可导入数据", + "file.backend.message.import_row_failed": "第 {{index}} 行导入失败: {{detail}}", + "file.backend.message.import_summary": "已导入: {{imported}}, 失败: {{failed}}", + "file.backend.message.statement_failed": "第 {{index}} 条语句执行失败: {{detail}}\n SQL: {{sql}}", + "file.backend.message.table_data_clear_succeeded": "清空成功", + "file.backend.message.table_data_truncate_succeeded": "截断成功", + "file.backend.message.transaction_committed": "事务提交成功", + "file.backend.message.user_cancelled": "用户取消执行", + "file.backend.sql_dump.database": "数据库: {{database}}", + "file.backend.sql_dump.empty_rows": "(0 行)", + "file.backend.sql_dump.generated_at": "生成时间: {{generatedAt}}", + "file.backend.sql_dump.table": "表: {{objectName}}", + "file.backend.sql_dump.title": "GoNavi SQL 导出", + "file.backend.sql_dump.view": "视图: {{objectName}}", + "file.backend.sql_dump.view_data_skipped": "已跳过视图数据导出(不会为视图生成 INSERT)。", + "find_in_database.column.action": "操作", + "find_in_database.column.match_count": "命中行数", + "find_in_database.column.matched_columns": "匹配列", + "find_in_database.column.table_name": "表名", + "find_in_database.detail.row_count": "{{count}} 行", + "find_in_database.detail.title": "{{table}} — 匹配行详情", + "find_in_database.match.contains": "包含", + "find_in_database.match.exact": "精确匹配", + "find_in_database.message.connection_config_not_found": "未找到连接配置", + "find_in_database.message.get_tables_failed": "获取表列表失败: {{detail}}", + "find_in_database.message.keyword_required": "请输入搜索关键字", + "find_in_database.message.no_matches": "未找到匹配的数据", + "find_in_database.message.no_tables": "当前数据库没有表", + "find_in_database.message.search_failed": "搜索出错: {{detail}}", + "find_in_database.placeholder.keyword": "输入要搜索的字符串...", + "find_in_database.progress.searching_table": "正在搜索 {{table}}... ({{current}}/{{total}})", + "find_in_database.summary.found_tables": "找到 {{count}} 个表包含匹配数据", + "find_in_database.summary.searching": "(搜索进行中...)", + "find_in_database.title": "在数据库中搜索 — {{dbName}}", + "find_in_database.tooltip.collapse_details": "收起详情", + "find_in_database.tooltip.view_details": "查看详情", + "import_preview.action.start": "开始导入", + "import_preview.error.connection_config_not_found": "连接配置未找到", + "import_preview.error.import_failed": "导入失败", + "import_preview.error.import_failed_detail": "导入失败: {{detail}}", + "import_preview.error.preview_failed": "预览失败", + "import_preview.error.preview_failed_detail": "预览失败: {{detail}}", + "import_preview.preview.description": "以下是前 5 行预览数据,确认无误后点击“开始导入”", + "import_preview.preview.field_list": "字段列表:", + "import_preview.preview.summary": "共 {{rows}} 行数据,{{columns}} 个字段", + "import_preview.preview.table_title": "数据预览(前 5 行):", + "import_preview.progress.error_count": "失败 {{count}}", + "import_preview.progress.processed_rows": "已处理 {{current}} / {{total}} 行", + "import_preview.progress.success_count": "成功 {{count}}", + "import_preview.result.completed": "导入完成", + "import_preview.result.error_logs": "错误日志:", + "import_preview.result.failed_rows": "失败 {{count}} 行", + "import_preview.result.success_rows": "成功导入 {{count}} 行", + "import_preview.status.importing": "正在导入数据...", + "import_preview.status.loading_preview": "加载预览数据...", + "import_preview.title": "导入数据预览", + "jvm_ai_plan.actions.description": ":{{description}}", + "jvm_ai_plan.actions.field_separator": "、", + "jvm_ai_plan.actions.label": " ({{label}})", + "jvm_ai_plan.actions.none": "当前资源未声明支持动作。若要生成计划,请仅在你能从快照内容中明确推断时给出 action,并保持 payload 为 JSON 对象。", + "jvm_ai_plan.actions.payload_fields": ";payload 字段:{{fields}}", + "jvm_ai_plan.actions.required_suffix": "(required)", + "jvm_ai_plan.error.action_missing": "AI 计划缺少可执行 action", + "jvm_ai_plan.error.payload_json_object_required": "当前 JVM 预览要求 payload 仍然是 JSON 对象", + "jvm_ai_plan.error.reason_missing": "AI 计划缺少变更原因", + "jvm_ai_plan.error.resource_locator_missing": "AI 计划缺少可用的资源定位信息", + "jvm_ai_plan.prompt.connection_name": "连接名称:{{connectionName}}", + "jvm_ai_plan.prompt.connection_policy": "连接策略:{{policy}}", + "jvm_ai_plan.prompt.connection_policy.read_only": "只读连接,当前只能生成计划和风险分析,不能假设已执行", + "jvm_ai_plan.prompt.connection_policy.writable": "可写连接,但仍必须先预览再人工确认", + "jvm_ai_plan.prompt.environment": "运行环境:{{environmentLabel}}", + "jvm_ai_plan.prompt.environment_unknown": "unknown", + "jvm_ai_plan.prompt.example_reason": "修复缓存脏值", + "jvm_ai_plan.prompt.example_title": "JSON 示例:", + "jvm_ai_plan.prompt.intro": "请分析下面这个 JVM 资源,并生成一个可用于 GoNavi “预览变更” 的结构化修改计划。", + "jvm_ai_plan.prompt.output_requirements_title": "输出要求:", + "jvm_ai_plan.prompt.provider_mode": "Provider 模式:{{providerMode}}", + "jvm_ai_plan.prompt.requirement.action": "4. action 优先从“当前资源支持动作”里选择;如果当前资源未声明支持动作,才允许基于快照内容推断。", + "jvm_ai_plan.prompt.requirement.fields": "2. 代码块里的 JSON 字段必须严格是:targetType、selector、action、payload、reason。", + "jvm_ai_plan.prompt.requirement.no_execute": "6. 不要声称已经执行修改,也不要输出脚本或命令。", + "jvm_ai_plan.prompt.requirement.payload": "5. payload 只能使用 JSON 对象包装,不要输出脚本、命令或原始二进制。若需要纯文本值,也请包装成 {\"format\":\"text\",\"value\":\"...\"}。", + "jvm_ai_plan.prompt.requirement.resource_path": "3. selector.resourcePath 优先使用当前资源路径 {{resourcePath}},不要凭空编造其他路径。", + "jvm_ai_plan.prompt.requirement.single_json_block": "1. 可以先给一小段分析,但必须包含且只包含一个 ```json 代码块。", + "jvm_ai_plan.prompt.resource_path": "当前资源路径:{{resourcePath}}", + "jvm_ai_plan.prompt.resource_path_missing": "(未提供资源路径)", + "jvm_ai_plan.prompt.snapshot_title": "当前资源快照:", + "jvm_ai_plan.prompt.supported_actions_title": "当前资源支持动作:", + "jvm_ai_plan.prompt.target_host": "目标主机:{{host}}", + "jvm_ai_plan.snapshot.unavailable": "当前资源快照尚未加载成功。", + "jvm_audit.action.refresh": "刷新", + "jvm_audit.card.records": "审计记录", + "jvm_audit.column.action": "动作", + "jvm_audit.column.mode": "模式", + "jvm_audit.column.reason": "原因", + "jvm_audit.column.resource": "资源", + "jvm_audit.column.result": "结果", + "jvm_audit.column.source": "来源", + "jvm_audit.column.time": "时间", + "jvm_audit.description.current_range": "当前范围:最近 {{limit}} 条", + "jvm_audit.empty.load_failed": "当前无法加载审计记录", + "jvm_audit.empty.no_records": "暂无审计记录", + "jvm_audit.error.backend_unavailable": "JVMListAuditRecords 后端方法不可用", + "jvm_audit.error.connection_missing": "连接不存在或已被删除", + "jvm_audit.error.load_failed": "读取 JVM 审计记录失败{{separator}}{{detail}}", + "jvm_audit.eyebrow": "JVM 审计", + "jvm_audit.option.last_records": "最近 {{limit}} 条", + "jvm_audit.source.ai_plan": "AI 辅助", + "jvm_audit.source.manual": "手工", + "jvm_audit.title": "JVM 变更审计", + "jvm_change_preview_modal.action.close": "关闭", + "jvm_change_preview_modal.action.confirm_execute": "确认执行", + "jvm_change_preview_modal.blocking.alert_message": "当前变更不可执行", + "jvm_change_preview_modal.blocking.label": "阻断原因", + "jvm_change_preview_modal.field.format": "格式", + "jvm_change_preview_modal.field.resource_id": "资源 ID", + "jvm_change_preview_modal.field.version": "版本", + "jvm_change_preview_modal.permission.allowed": "允许执行", + "jvm_change_preview_modal.permission.forbidden": "禁止执行", + "jvm_change_preview_modal.permission.requires_confirmation": "需要确认", + "jvm_change_preview_modal.risk.high": "高", + "jvm_change_preview_modal.risk.label": "风险 {{level}}", + "jvm_change_preview_modal.risk.low": "低", + "jvm_change_preview_modal.risk.medium": "中", + "jvm_change_preview_modal.risk.unknown": "未知", + "jvm_change_preview_modal.section.after": "变更后", + "jvm_change_preview_modal.section.before": "变更前", + "jvm_change_preview_modal.section.summary": "变更摘要", + "jvm_change_preview_modal.status.generated": "预览已生成", + "jvm_change_preview_modal.status.no_preview": "暂无预览结果", + "jvm_change_preview_modal.title": "JVM 变更预览", "jvm_diagnostic.ai_plan.default_reason": "AI 诊断计划:{{intent}}", + "jvm_diagnostic.ai_plan.error.transport_mismatch": "AI 计划的诊断 transport 为 {{planTransport}},与当前控制台 {{currentTransport}} 不一致,请重新生成计划后再应用。", + "jvm_diagnostic.ai_plan.message.filled": "AI 诊断计划已回填到控制台", + "jvm_diagnostic.capability_result.mutating_allowed": "高风险命令", + "jvm_diagnostic.capability_result.observe_allowed": "观察命令", + "jvm_diagnostic.capability_result.observe_denied": "禁止观察", + "jvm_diagnostic.capability_result.session_allowed": "可建会话", + "jvm_diagnostic.capability_result.session_denied": "不可建会话", + "jvm_diagnostic.capability_result.streaming_supported": "流式输出", + "jvm_diagnostic.capability_result.streaming_unsupported": "不支持流式", + "jvm_diagnostic.capability_result.title": "能力检查结果", + "jvm_diagnostic.capability_result.trace_allowed": "跟踪命令", + "jvm_diagnostic.capability.empty.description": "能力检查只读取通道权限和命令策略,不会创建会话或执行命令。", + "jvm_diagnostic.capability.empty.title": "尚未检查能力", + "jvm_diagnostic.command_input.command_description": "输入 Arthas/诊断命令,例如 thread -n 5、dashboard、jvm;也可以从下方模板一键回填。", + "jvm_diagnostic.command_input.command_label": "诊断命令", + "jvm_diagnostic.command_input.description": "支持自动补全,按 Ctrl/Cmd + Enter 执行", + "jvm_diagnostic.command_input.reason_help": "用于审计记录和 AI 上下文理解,不会作为 Arthas 命令发送到目标 JVM。", + "jvm_diagnostic.command_input.reason_label": "诊断原因(可选)", + "jvm_diagnostic.command_input.reason_placeholder": "例如:排查 CPU 飙高、确认线程阻塞、定位慢方法", + "jvm_diagnostic.command_input.title": "命令输入", + "jvm_diagnostic.command_templates.title": "命令模板", + "jvm_diagnostic.completion.argument.classloader.hash.documentation": "查看指定类加载器详情。", + "jvm_diagnostic.completion.argument.classloader.hash.label": "指定类加载器 Hash", + "jvm_diagnostic.completion.argument.classloader.tree.documentation": "输出类加载器树形结构。", + "jvm_diagnostic.completion.argument.classloader.tree.label": "树形视图 (-t)", + "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "查看类加载器 URL 统计。", + "jvm_diagnostic.completion.argument.classloader.url_stat.label": "全部 URL 统计 (--url-stat)", + "jvm_diagnostic.completion.argument.command_template.label": "{{command}} 模板", + "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "查看当前 JVM 运行总览。", + "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", + "jvm_diagnostic.completion.argument.detail_mode_d.label": "详细模式 (-d)", + "jvm_diagnostic.completion.argument.jad.template.documentation": "反编译指定类。", + "jvm_diagnostic.completion.argument.jad.template.label": "反编译模板", + "jvm_diagnostic.completion.argument.jvm.direct.documentation": "查看 JVM 内存、线程、类加载、GC 和运行参数信息。", + "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", + "jvm_diagnostic.completion.argument.monitor.template.documentation": "按周期统计方法调用情况。", + "jvm_diagnostic.completion.argument.ognl.template.documentation": "执行 OGNL 表达式,高风险命令默认受策略限制。", + "jvm_diagnostic.completion.argument.redefine.template.documentation": "重新定义类字节码文件路径。", + "jvm_diagnostic.completion.argument.retransform.template.documentation": "重新转换指定类。", + "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "按类名模式搜索。", + "jvm_diagnostic.completion.argument.sc.class_pattern.label": "类匹配模板", + "jvm_diagnostic.completion.argument.sc.detail.documentation": "输出类的详细信息。", + "jvm_diagnostic.completion.argument.sm.detail.documentation": "输出方法详细签名。", + "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "查看类的方法签名。", + "jvm_diagnostic.completion.argument.sm.method_signature.label": "方法签名模板", + "jvm_diagnostic.completion.argument.stack.template.documentation": "输出方法调用栈。", + "jvm_diagnostic.completion.argument.stop.direct.documentation": "停止当前后台任务。", + "jvm_diagnostic.completion.argument.stop.direct.label": "stop", + "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "读取指定环境变量。", + "jvm_diagnostic.completion.argument.sysenv.variable.label": "查看环境变量", + "jvm_diagnostic.completion.argument.sysprop.property.documentation": "读取指定系统属性。", + "jvm_diagnostic.completion.argument.sysprop.property.label": "查看属性", + "jvm_diagnostic.completion.argument.thread.blocking.documentation": "查找当前阻塞其他线程的线程。", + "jvm_diagnostic.completion.argument.thread.blocking.label": "阻塞线程 (-b)", + "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "查看 CPU 最繁忙的前 N 个线程。", + "jvm_diagnostic.completion.argument.thread.busy_top.label": "繁忙线程 TOP N (-n)", + "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "查看指定线程的详细栈信息。", + "jvm_diagnostic.completion.argument.thread.thread_id.label": "指定线程 ID", + "jvm_diagnostic.completion.argument.trace.condition.documentation": "追加 trace 条件表达式。", + "jvm_diagnostic.completion.argument.trace.condition.label": "条件过滤 '#cost > 100'", + "jvm_diagnostic.completion.argument.trace.template.documentation": "跟踪慢方法调用链路。", + "jvm_diagnostic.completion.argument.tt.list.documentation": "查看当前录制列表。", + "jvm_diagnostic.completion.argument.tt.list.label": "查看记录列表 (-l)", + "jvm_diagnostic.completion.argument.tt.record.documentation": "录制指定方法调用。", + "jvm_diagnostic.completion.argument.tt.record.label": "tt 录制模板", + "jvm_diagnostic.completion.argument.tt.replay.documentation": "查看指定记录详情。", + "jvm_diagnostic.completion.argument.tt.replay.label": "回放记录 (-i)", + "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "获取指定类实例,高风险命令默认受策略限制。", + "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", + "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "设置对象展开层级。", + "jvm_diagnostic.completion.argument.watch.expand_depth.label": "展开层级 -x 2", + "jvm_diagnostic.completion.argument.watch.template.documentation": "观察入参、返回值或异常。", + "jvm_diagnostic.completion.category.control": "控制命令", + "jvm_diagnostic.completion.category.mutating": "高风险命令", + "jvm_diagnostic.completion.category.observe": "观察类命令", + "jvm_diagnostic.completion.category.trace": "跟踪类命令", + "jvm_diagnostic.completion.command.classloader.documentation": "查看类加载器信息。", + "jvm_diagnostic.completion.command.dashboard.documentation": "查看 JVM 运行总览。", + "jvm_diagnostic.completion.command.jad.documentation": "反编译指定类。", + "jvm_diagnostic.completion.command.jvm.documentation": "查看 JVM 内存、线程、类加载、GC 和运行参数信息。", + "jvm_diagnostic.completion.command.monitor.documentation": "周期性统计方法调用。", + "jvm_diagnostic.completion.command.ognl.documentation": "执行 OGNL 表达式,默认需要额外授权。", + "jvm_diagnostic.completion.command.redefine.documentation": "重新定义类字节码。", + "jvm_diagnostic.completion.command.retransform.documentation": "重新触发类转换。", + "jvm_diagnostic.completion.command.sc.documentation": "搜索匹配类信息。", + "jvm_diagnostic.completion.command.sm.documentation": "查看类的方法签名。", + "jvm_diagnostic.completion.command.stack.documentation": "输出方法调用栈。", + "jvm_diagnostic.completion.command.stop.documentation": "停止当前后台任务。", + "jvm_diagnostic.completion.command.sysenv.documentation": "查看环境变量。", + "jvm_diagnostic.completion.command.sysprop.documentation": "查看系统属性。", + "jvm_diagnostic.completion.command.thread.documentation": "查看热点线程、线程栈和阻塞线程。", + "jvm_diagnostic.completion.command.trace.documentation": "跟踪方法调用耗时路径。", + "jvm_diagnostic.completion.command.tt.documentation": "方法时光隧道,记录和回放调用。", + "jvm_diagnostic.completion.command.vmtool.documentation": "直接操作 JVM 对象或执行 VMTool 动作。", + "jvm_diagnostic.completion.command.watch.documentation": "观察入参、返回值或异常。", + "jvm_diagnostic.completion.detail.class_search_template": "类搜索模板", + "jvm_diagnostic.completion.detail.classloader_template": "类加载器模板", + "jvm_diagnostic.completion.detail.decompile_template": "反编译模板", + "jvm_diagnostic.completion.detail.environment_variable_template": "环境变量模板", + "jvm_diagnostic.completion.detail.execute_directly": "直接执行", + "jvm_diagnostic.completion.detail.high_risk_template": "高风险模板", + "jvm_diagnostic.completion.detail.method_search_template": "方法搜索模板", + "jvm_diagnostic.completion.detail.monitor_template": "监控模板", + "jvm_diagnostic.completion.detail.stack_template": "调用栈模板", + "jvm_diagnostic.completion.detail.system_property_template": "系统属性模板", + "jvm_diagnostic.completion.detail.thread_option": "线程参数", + "jvm_diagnostic.completion.detail.time_tunnel_template": "时光隧道模板", + "jvm_diagnostic.completion.detail.trace_option": "跟踪参数", + "jvm_diagnostic.completion.detail.trace_template": "跟踪模板", + "jvm_diagnostic.completion.detail.watch_option": "观察参数", + "jvm_diagnostic.completion.detail.watch_template": "观察模板", + "jvm_diagnostic.completion.preset.category.mutating": "高风险命令", + "jvm_diagnostic.completion.preset.category.observe": "观察类命令", + "jvm_diagnostic.completion.preset.category.trace": "跟踪类命令", + "jvm_diagnostic.completion.preset.dashboard.documentation": "查看 JVM 运行总览。", + "jvm_diagnostic.completion.preset.ognl-sample.documentation": "高风险表达式命令,默认只作示意。", + "jvm_diagnostic.completion.preset.thread-top.documentation": "查看最繁忙线程,快速定位阻塞或高 CPU 线程。", + "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "跟踪慢方法调用路径。", + "jvm_diagnostic.completion.preset.watch-return.documentation": "观察入参与返回值。", + "jvm_diagnostic.connection_missing.message": "连接不存在或已被删除", + "jvm_diagnostic.error.cancel_failed": "取消诊断命令失败", + "jvm_diagnostic.error.cancel_unavailable": "JVMCancelDiagnosticCommand 后端方法不可用", + "jvm_diagnostic.error.execute_command_required": "诊断命令不能为空", + "jvm_diagnostic.error.execute_failed": "执行诊断命令失败", + "jvm_diagnostic.error.execute_session_required": "请先创建诊断会话,再执行命令", + "jvm_diagnostic.error.execute_unavailable": "JVMExecuteDiagnosticCommand 后端方法不可用", + "jvm_diagnostic.error.history_load_failed": "加载诊断历史失败", + "jvm_diagnostic.error.probe_failed": "检查诊断能力失败", + "jvm_diagnostic.error.probe_unavailable": "JVMProbeDiagnosticCapabilities 后端方法不可用", + "jvm_diagnostic.error.start_failed": "创建诊断会话失败", + "jvm_diagnostic.error.start_unavailable": "JVMStartDiagnosticSession 后端方法不可用", + "jvm_diagnostic.history.current_session": "当前会话", + "jvm_diagnostic.history.description": "最近命令和执行状态", + "jvm_diagnostic.history.no_records": "尚无诊断历史", + "jvm_diagnostic.history.no_session": "尚未建立诊断会话", + "jvm_diagnostic.history.reason_missing": "未填写诊断原因", + "jvm_diagnostic.history.recent_records": "最近记录", + "jvm_diagnostic.history.title": "审计历史", + "jvm_diagnostic.message.cancel_sent": "已发送取消请求", + "jvm_diagnostic.no_session.action.probe": "先检查能力", + "jvm_diagnostic.no_session.action.start": "新建诊断会话", + "jvm_diagnostic.no_session.alert.description": "这样可以避免未绑定会话时误以为命令已经可执行,也能保证审计记录、输出流和取消命令都绑定到同一个会话。", + "jvm_diagnostic.no_session.alert.title": "命令输入将在会话建立后显示", + "jvm_diagnostic.no_session.description": "先建立会话,再显示命令编辑器和模板", + "jvm_diagnostic.no_session.title": "开始一次诊断", + "jvm_diagnostic.output.description": "按后端事件流追加显示", + "jvm_diagnostic.output.empty.description": "暂无实时输出。命令执行后,这里会按时间顺序追加后端返回内容。", + "jvm_diagnostic.output.frontend_completed_fallback": "诊断命令调用已返回,但未收到后端终态事件,前端已兜底结束等待状态。", + "jvm_diagnostic.output.local_pending": "已提交诊断命令,等待后端输出:{{command}}", + "jvm_diagnostic.output.title": "实时输出", + "jvm_diagnostic.presentation.category.mutating": "高风险命令", + "jvm_diagnostic.presentation.category.observe": "观察类命令", + "jvm_diagnostic.presentation.category.trace": "跟踪类命令", + "jvm_diagnostic.presentation.chunk.empty_event": "空事件", "jvm_diagnostic.presentation.command_type.mutating": "高风险类", "jvm_diagnostic.presentation.command_type.observe": "观察类", "jvm_diagnostic.presentation.command_type.trace": "跟踪类", + "jvm_diagnostic.presentation.event.chunk": "输出片段", + "jvm_diagnostic.presentation.event.diagnostic": "诊断输出", + "jvm_diagnostic.presentation.event.done": "执行结束", "jvm_diagnostic.presentation.fallback.unknown": "未知", "jvm_diagnostic.presentation.phase.canceled": "取消完成", + "jvm_diagnostic.presentation.phase.canceling": "取消中", + "jvm_diagnostic.presentation.phase.completed": "已完成", + "jvm_diagnostic.presentation.phase.diagnostic": "诊断事件", + "jvm_diagnostic.presentation.phase.failed": "失败", + "jvm_diagnostic.presentation.phase.running": "执行中", "jvm_diagnostic.presentation.risk.high": "高风险", "jvm_diagnostic.presentation.risk.low": "低风险", "jvm_diagnostic.presentation.risk.medium": "中风险", @@ -7117,6 +5291,734 @@ "jvm_diagnostic.presentation.source.manual": "手动输入", "jvm_diagnostic.presentation.transport.agent_bridge": "Agent Bridge", "jvm_diagnostic.presentation.transport.arthas_tunnel": "Arthas Tunnel", + "jvm_diagnostic.session_capability.action.clear_output": "清空输出", + "jvm_diagnostic.session_capability.action.refresh_history": "刷新历史", + "jvm_diagnostic.session_capability.description": "当前通道、权限与快捷维护", + "jvm_diagnostic.session_capability.note": "检查能力不会执行命令;执行命令前必须先建会话。审计历史展示最近命令记录,未建会话时也可能包含过去会话的记录。", + "jvm_diagnostic.session_capability.session_id_hint": "创建会话后会在这里显示会话 ID。", + "jvm_diagnostic.session_capability.status.command_running": "命令执行中", + "jvm_diagnostic.session_capability.status.idle": "空闲", + "jvm_diagnostic.session_capability.status.no_session": "未建会话", + "jvm_diagnostic.session_capability.status.session_established": "会话已建立", + "jvm_diagnostic.session_capability.title": "会话与能力", + "jvm_diagnostic.session.default_reason": "控制台启动会话", + "jvm_diagnostic.session.default_title": "JVM 诊断控制台", + "jvm_diagnostic.workbench.action.cancel_command": "取消命令", + "jvm_diagnostic.workbench.action.execute_command": "执行命令", + "jvm_diagnostic.workbench.action.probe": "检查能力", + "jvm_diagnostic.workbench.action.restart_session": "重建会话", + "jvm_diagnostic.workbench.action.start_session": "新建会话", + "jvm_diagnostic.workbench.eyebrow": "JVM 诊断", + "jvm_diagnostic.workbench.status.command_running": "命令执行中", + "jvm_diagnostic.workbench.status.no_session": "未建会话", + "jvm_diagnostic.workbench.status.session_established": "会话已建立", + "jvm_diagnostic.workbench.title": "JVM 诊断工作台", + "jvm_diagnostic.workflow.command.description": "会话建立后显示命令编辑器、原因输入与模板。", + "jvm_diagnostic.workflow.command.title": "执行命令", + "jvm_diagnostic.workflow.probe.description": "只读取诊断通道、流式输出与命令权限,不创建会话。", + "jvm_diagnostic.workflow.probe.title": "检查能力", + "jvm_diagnostic.workflow.session.description": "创建诊断上下文,后续命令都会绑定到这个会话。", + "jvm_diagnostic.workflow.session.title": "新建会话", + "jvm_monitoring_charts.empty.classes.metric_unavailable": "当前监控来源未提供类加载指标", + "jvm_monitoring_charts.empty.classes.no_samples": "暂无类加载采样数据", + "jvm_monitoring_charts.empty.gc.metric_unavailable": "当前监控来源未提供垃圾回收指标", + "jvm_monitoring_charts.empty.gc.no_samples": "暂无垃圾回收采样数据", + "jvm_monitoring_charts.empty.heap.metric_unavailable": "当前监控来源未提供堆内存指标", + "jvm_monitoring_charts.empty.heap.no_samples": "暂无堆内存采样数据", + "jvm_monitoring_charts.empty.threads.metric_unavailable": "当前监控来源未提供线程指标", + "jvm_monitoring_charts.empty.threads.no_samples": "暂无线程采样数据", + "jvm_monitoring_charts.legend.daemon_thread_count": "守护线程数", + "jvm_monitoring_charts.legend.gc_count": "垃圾回收次数", + "jvm_monitoring_charts.legend.gc_time_ms": "垃圾回收耗时(ms)", + "jvm_monitoring_charts.legend.heap_committed": "堆内存已提交", + "jvm_monitoring_charts.legend.heap_used": "堆内存已使用", + "jvm_monitoring_charts.legend.loaded_classes": "已加载类", + "jvm_monitoring_charts.legend.peak_thread_count": "线程峰值", + "jvm_monitoring_charts.legend.thread_count": "线程数", + "jvm_monitoring_charts.legend.unloaded_classes": "已卸载类", + "jvm_monitoring_charts.title.classes": "类加载", + "jvm_monitoring_charts.title.gc": "垃圾回收", + "jvm_monitoring_charts.title.heap": "堆内存", + "jvm_monitoring_charts.title.threads": "线程", + "jvm_monitoring_dashboard.action.refresh": "刷新", + "jvm_monitoring_dashboard.action.start": "开始监控", + "jvm_monitoring_dashboard.action.stop": "停止监控", + "jvm_monitoring_dashboard.connection_missing.message": "连接不存在或已被删除", + "jvm_monitoring_dashboard.degraded.message": "监控能力存在降级", + "jvm_monitoring_dashboard.empty.description": "点击“开始监控”后,GoNavi 会在当前会话内持续保留该连接的采样结果;切换页签不会停止采样。", + "jvm_monitoring_dashboard.empty.title": "当前尚未开始持续监控", + "jvm_monitoring_dashboard.error.history_load_failed": "读取监控历史失败", + "jvm_monitoring_dashboard.error.history_unavailable": "JVMGetMonitoringHistory 后端方法不可用", + "jvm_monitoring_dashboard.error.start_failed": "开始监控失败", + "jvm_monitoring_dashboard.error.start_unavailable": "JVMStartMonitoring 后端方法不可用", + "jvm_monitoring_dashboard.error.stop_failed": "停止监控失败", + "jvm_monitoring_dashboard.error.stop_unavailable": "JVMStopMonitoring 后端方法不可用", + "jvm_monitoring_dashboard.status.sampling": "采样中", + "jvm_monitoring_dashboard.status.stopped": "未运行", + "jvm_monitoring_dashboard.title": "JVM 持续监控", + "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "当前监控来源未提供事件级垃圾回收数据", + "jvm_monitoring_detail_panel.empty.recent_gc_events": "最近窗口暂无垃圾回收事件", + "jvm_monitoring_detail_panel.empty.thread_states": "暂无线程状态采样", + "jvm_monitoring_detail_panel.field.process_cpu": "进程 CPU", + "jvm_monitoring_detail_panel.field.process_physical_memory": "进程物理内存", + "jvm_monitoring_detail_panel.field.process_virtual_memory": "进程虚拟内存", + "jvm_monitoring_detail_panel.field.system_cpu": "系统 CPU", + "jvm_monitoring_detail_panel.gc.after": "回收后", + "jvm_monitoring_detail_panel.gc.before": "回收前", + "jvm_monitoring_detail_panel.memory_missing.default": "当前监控来源未返回进程驻留物理内存指标;请确认 HTTP 端点或增强代理已采集并上报进程物理内存。", + "jvm_monitoring_detail_panel.memory_missing.jmx": "JMX 连接未暴露进程驻留物理内存属性,当前只能读取进程虚拟内存指标;如需进程物理内存,请切换到 HTTP 端点或增强代理采集。", + "jvm_monitoring_detail_panel.memory_missing.title": "进程物理内存缺失原因", + "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "能力与降级", + "jvm_monitoring_detail_panel.title.recent_gc_details": "最近垃圾回收明细", + "jvm_monitoring_detail_panel.title.thread_state_distribution": "线程状态分布", + "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "排障指标", + "jvm_monitoring_presentation.availability.missing_metrics": "缺失指标:{{metrics}}", + "jvm_monitoring_presentation.availability.no_obvious_degradation": "当前监控会话未发现明显降级。", + "jvm_monitoring_presentation.availability.provider_warnings": "监控来源告警:{{warnings}}", + "jvm_monitoring_presentation.metric.class_loading": "类加载", + "jvm_monitoring_presentation.metric.cpu_process": "进程 CPU", + "jvm_monitoring_presentation.metric.cpu_system": "系统 CPU", + "jvm_monitoring_presentation.metric.gc_count": "垃圾回收次数", + "jvm_monitoring_presentation.metric.gc_events": "最近垃圾回收事件", + "jvm_monitoring_presentation.metric.gc_time": "垃圾回收耗时", + "jvm_monitoring_presentation.metric.heap_non_heap": "非堆内存", + "jvm_monitoring_presentation.metric.heap_used": "堆内存", + "jvm_monitoring_presentation.metric.memory_rss": "进程物理内存", + "jvm_monitoring_presentation.metric.memory_virtual": "进程虚拟内存", + "jvm_monitoring_presentation.metric.thread_count": "线程数", + "jvm_monitoring_presentation.metric.thread_states": "线程状态", + "jvm_monitoring_presentation.thread_state.blocked": "阻塞", + "jvm_monitoring_presentation.thread_state.new": "新建", + "jvm_monitoring_presentation.thread_state.runnable": "可运行", + "jvm_monitoring_presentation.thread_state.terminated": "已终止", + "jvm_monitoring_presentation.thread_state.timed_waiting": "限时等待", + "jvm_monitoring_presentation.thread_state.waiting": "等待中", + "jvm_monitoring_status_cards.meta.gc_total_time": "累计 {{value}}", + "jvm_monitoring_status_cards.meta.heap_committed": "已提交 {{value}}", + "jvm_monitoring_status_cards.meta.thread_peak": "峰值 {{value}}", + "jvm_monitoring_status_cards.meta.waiting_samples": "等待采样", + "jvm_monitoring_status_cards.status.sampling": "采样中", + "jvm_monitoring_status_cards.status.stopped": "未运行", + "jvm_monitoring_status_cards.thread_state.runnable_count": "可运行 {{count}}", + "jvm_monitoring_status_cards.title.classes": "类加载", + "jvm_monitoring_status_cards.title.gc_pressure": "垃圾回收压力", + "jvm_monitoring_status_cards.title.heap": "堆内存", + "jvm_monitoring_status_cards.title.threads": "线程", + "jvm_overview.badge.read_only": "只读连接", + "jvm_overview.badge.writable": "可写连接", + "jvm_overview.capability.can_browse": "可浏览", + "jvm_overview.capability.cannot_browse": "不可浏览", + "jvm_overview.capability.preview_supported": "支持预览", + "jvm_overview.capability.preview_unsupported": "不支持预览", + "jvm_overview.capability.read_only": "只读", + "jvm_overview.capability.writable": "可写", + "jvm_overview.card.connection_summary": "连接摘要", + "jvm_overview.card.mode_capability": "模式能力", + "jvm_overview.connection_missing.message": "连接不存在或已被删除", + "jvm_overview.empty.capabilities": "暂无模式能力数据", + "jvm_overview.error.capability_load_failed": "读取 JVM 模式能力失败", + "jvm_overview.eyebrow": "JVM 运行时", + "jvm_overview.field.agent": "Agent", + "jvm_overview.field.allowed_modes": "允许模式", + "jvm_overview.field.current_mode": "当前模式", + "jvm_overview.field.endpoint": "Endpoint", + "jvm_overview.field.jmx_address": "JMX 地址", + "jvm_overview.field.resource_browse": "资源浏览", + "jvm_overview.title": "JVM 运行时概览", + "jvm_overview.value.enabled": "已启用", + "jvm_overview.value.not_configured": "未配置", + "jvm_overview.value.resource_browse_lazy_load": "通过侧边栏展开模式节点后懒加载", + "jvm_resource.action.ask_ai_plan": "让 AI 生成计划", + "jvm_resource.action.audit": "审计记录", + "jvm_resource.action.generate_ai_plan": "AI 生成计划", + "jvm_resource.action.preview_change": "预览变更", + "jvm_resource.badge.read_only": "只读连接", + "jvm_resource.badge.writable": "可写连接", + "jvm_resource.card.change_draft": "变更草稿", + "jvm_resource.card.snapshot": "资源快照", + "jvm_resource.draft_source.ai_plan": "AI 辅助草稿", + "jvm_resource.draft_source.manual": "手工编辑", + "jvm_resource.empty.no_resource_data": "暂无资源数据", + "jvm_resource.error.ai_plan_context_mismatch": "当前 JVM 页签与 AI 计划的来源上下文不一致,已拒绝自动应用。", + "jvm_resource.error.ai_plan_missing_context": "AI 计划缺少来源上下文,请在目标 JVM 资源页重新生成后再应用。", + "jvm_resource.error.ai_plan_to_draft_failed": "AI 计划暂时无法转换为 JVM 预览草稿", + "jvm_resource.error.apply_failed": "执行 JVM 变更失败", + "jvm_resource.error.apply_unavailable": "JVMApplyChange 后端方法不可用", + "jvm_resource.error.confirmation_missing": "确认令牌缺失,请重新预览后再执行", + "jvm_resource.error.connection_missing": "连接不存在或已被删除", + "jvm_resource.error.context_changed": "资源上下文已变化,请重新预览后再执行", + "jvm_resource.error.draft_invalid": "变更草稿不合法", + "jvm_resource.error.get_value_unavailable": "JVMGetValue 后端方法不可用", + "jvm_resource.error.payload_object_required": "Payload 必须是 JSON 对象", + "jvm_resource.error.preview_failed": "预览 JVM 变更失败", + "jvm_resource.error.preview_required": "请先预览变更,再确认执行", + "jvm_resource.error.preview_result_invalid": "预览结果格式不正确", + "jvm_resource.error.preview_unavailable": "JVMPreviewChange 后端方法不可用", + "jvm_resource.error.read_failed": "读取 JVM 资源失败", + "jvm_resource.error.reason_required": "请填写变更原因", + "jvm_resource.error.resource_id_empty": "资源 ID 为空,无法生成变更草稿", + "jvm_resource.error.resource_path_empty": "资源路径为空", + "jvm_resource.field.action": "动作", + "jvm_resource.field.available_actions": "可用动作", + "jvm_resource.field.draft_source": "草稿来源", + "jvm_resource.field.format": "格式", + "jvm_resource.field.payload": "Payload(JSON)", + "jvm_resource.field.payload_fields": "Payload 字段:", + "jvm_resource.field.reason": "变更原因", + "jvm_resource.field.resource_id": "资源 ID", + "jvm_resource.field.resource_path": "资源路径", + "jvm_resource.field.resource_type": "资源类型", + "jvm_resource.field.resource_version": "资源版本", + "jvm_resource.field.target_resource": "目标资源", + "jvm_resource.field.version": "版本", + "jvm_resource.list_separator": "、", + "jvm_resource.marker.required_suffix": "(必填)", + "jvm_resource.message.ai_plan_draft_filled": "已从 AI 计划填充草稿,目标资源为 {{resourceId}},请先执行“预览变更”再确认写入。", + "jvm_resource.message.apply_success": "JVM 变更已执行", + "jvm_resource.message.current_action": "当前动作:", + "jvm_resource.message.payload_hint": "预览会使用当前草稿;确认执行会使用最近一次成功预览的请求,修改草稿后请重新预览。", + "jvm_resource.message.payload_template_applied": "已按当前动作填充推荐模板。", + "jvm_resource.placeholder.action_default": "例如 put / clear / evict", + "jvm_resource.placeholder.action_jmx": "例如 set 或 invoke", + "jvm_resource.placeholder.reason": "填写本次 JVM 资源变更原因", + "jvm_resource.presentation.action.clear.description": "清空当前 JVM 资源里的数据或状态。", + "jvm_resource.presentation.action.clear.label": "清空资源", + "jvm_resource.presentation.action.delete.description": "删除或注销当前资源。", + "jvm_resource.presentation.action.delete.label": "删除资源", + "jvm_resource.presentation.action.evict.description": "将目标缓存项从当前 JVM 运行时中驱逐。", + "jvm_resource.presentation.action.evict.label": "驱逐缓存", + "jvm_resource.presentation.action.invoke.description": "调用当前资源暴露的管理操作。", + "jvm_resource.presentation.action.invoke.label": "调用操作", + "jvm_resource.presentation.action.put.description": "将 payload 内容写入当前 JVM 资源。", + "jvm_resource.presentation.action.put.label": "写入资源", + "jvm_resource.presentation.action.refresh.description": "刷新当前资源的运行时状态。", + "jvm_resource.presentation.action.refresh.label": "刷新资源", + "jvm_resource.presentation.action.reload.description": "重新加载当前资源或其配置。", + "jvm_resource.presentation.action.reload.label": "重新加载", + "jvm_resource.presentation.action.remove.description": "删除当前资源中的指定条目。", + "jvm_resource.presentation.action.remove.label": "删除条目", + "jvm_resource.presentation.action.reset.description": "将当前资源恢复到初始或默认状态。", + "jvm_resource.presentation.action.reset.label": "重置状态", + "jvm_resource.presentation.action.set.description": "更新当前资源暴露的可写属性值。", + "jvm_resource.presentation.action.set.label": "设置属性", + "jvm_resource.presentation.audit_result.applied": "已执行", + "jvm_resource.presentation.audit_result.blocked": "已阻断", + "jvm_resource.presentation.audit_result.failed": "失败", + "jvm_resource.presentation.audit_result.success": "成功", + "jvm_resource.presentation.audit_result.unknown": "未知", + "jvm_resource.presentation.audit_result.warning": "警告", + "jvm_resource.presentation.risk.high": "高", + "jvm_resource.presentation.risk.low": "低", + "jvm_resource.presentation.risk.medium": "中", + "jvm_resource.presentation.risk.unknown": "未知", + "jvm_resource.presentation.unnamed_action": "未命名动作", + "jvm_resource.section.metadata": "元数据", + "jvm_resource.section.resource_value": "资源值", + "jvm_resource.section.supported_actions": "资源支持动作", + "jvm_resource.title": "JVM 资源工作台", + "jvm.backend.capability.reason.read_only": "当前连接只读", + "jvm.backend.connection_error.agent.base_url_invalid.help": "请填写完整的 `http://` 或 `https://` 地址,例如 `http://127.0.0.1:19090/gonavi/agent/jvm`。", + "jvm.backend.connection_error.agent.base_url_invalid.summary": "Agent 连接失败:Agent Base URL 格式不合法。", + "jvm.backend.connection_error.agent.base_url_required": "Agent 连接失败:未填写 Agent Base URL。", + "jvm.backend.connection_error.agent.connection_refused.help": "请确认 Java 服务已通过 `-javaagent` 启动 GoNavi Agent,并检查 Base URL、端口映射和防火墙。", + "jvm.backend.connection_error.agent.connection_refused.summary": "Agent 连接失败:目标 Agent 管理端口未监听,或当前地址不可达。", + "jvm.backend.connection_error.agent.forbidden.help": "请确认当前客户端来源、鉴权配置和 Agent 访问策略允许 GoNavi 访问。", + "jvm.backend.connection_error.agent.forbidden.summary": "Agent 连接失败:当前请求被 Agent 拒绝。", + "jvm.backend.connection_error.agent.scheme_unsupported.help": "请把 Agent Base URL 改成 `http://` 或 `https://` 开头的地址。", + "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Agent 连接失败:当前只支持 HTTP 或 HTTPS 协议。", + "jvm.backend.connection_error.agent.timeout.help": "请确认目标地址可达、Agent 已完成启动,并适当增加连接超时时间。", + "jvm.backend.connection_error.agent.timeout.summary": "Agent 连接失败:访问 Agent 管理端口超时。", + "jvm.backend.connection_error.agent.unauthorized.help": "请检查连接中的 Agent API Key 是否与目标服务启动参数一致。", + "jvm.backend.connection_error.agent.unauthorized.summary": "Agent 连接失败:Agent 已响应,但当前 API Key 无效或缺失。", + "jvm.backend.connection_error.endpoint.base_url_invalid.help": "请填写完整的 `http://` 或 `https://` 地址,并指向实现 GoNavi JVM HTTP 合约的管理接口根路径,例如 `http://127.0.0.1:19090/manage/jvm`。", + "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Endpoint 连接失败:Endpoint Base URL 格式不合法。", + "jvm.backend.connection_error.endpoint.base_url_required": "Endpoint 连接失败:未填写 Endpoint Base URL。", + "jvm.backend.connection_error.endpoint.connection_refused.help": "请确认 Base URL 指向实现 GoNavi JVM HTTP 合约的管理接口,并检查服务监听、端口映射和防火墙。", + "jvm.backend.connection_error.endpoint.connection_refused.summary": "Endpoint 连接失败:目标管理接口未监听,或当前地址不可达。", + "jvm.backend.connection_error.endpoint.forbidden.help": "请确认当前客户端来源、鉴权配置和访问策略允许 GoNavi 访问该管理接口。", + "jvm.backend.connection_error.endpoint.forbidden.summary": "Endpoint 连接失败:当前请求被目标管理接口拒绝。", + "jvm.backend.connection_error.endpoint.not_found.help": "请确认 Base URL 指向的是 JVM 管理接口根路径,而不是普通业务接口、健康检查地址或网关首页。", + "jvm.backend.connection_error.endpoint.not_found.summary": "Endpoint 连接失败:目标地址已响应,但没有找到 GoNavi JVM 管理接口。", + "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "请把 Endpoint Base URL 改成 `http://` 或 `https://` 开头的地址。", + "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Endpoint 连接失败:当前只支持 HTTP 或 HTTPS 协议。", + "jvm.backend.connection_error.endpoint.timeout.help": "请确认 Base URL 可达、目标服务已完成启动,并适当增加连接超时时间。", + "jvm.backend.connection_error.endpoint.timeout.summary": "Endpoint 连接失败:访问目标管理接口超时。", + "jvm.backend.connection_error.endpoint.unauthorized.help": "请检查连接中的 Endpoint API Key 是否与目标服务配置一致。", + "jvm.backend.connection_error.endpoint.unauthorized.summary": "Endpoint 连接失败:目标管理接口已响应,但当前 API Key 无效或缺失。", + "jvm.backend.connection_error.generic": "JVM 连接失败", + "jvm.backend.connection_error.jmx.auth.help": "请确认目标 JMX 是否关闭认证;如果必须认证,需要补充用户名/密码后再连接。", + "jvm.backend.connection_error.jmx.auth.summary": "JMX 连接失败:{{target}} 需要认证,或当前凭据不可用。", + "jvm.backend.connection_error.jmx.connection_refused.help": "请确认目标 JVM 已开启远程 JMX,并检查主机、防火墙、端口映射和 SSH/代理配置。", + "jvm.backend.connection_error.jmx.connection_refused.summary": "JMX 连接失败:无法连接到 {{target}},对应端口没有监听或当前网络不可达。", + "jvm.backend.connection_error.jmx.connection_reset.help": "请确认填写的是 JVM 真正对外暴露的 JMX 端口,而不是业务端口、调试端口或被代理转发的端口。", + "jvm.backend.connection_error.jmx.connection_reset.summary": "JMX 连接失败:{{target}} 上的服务主动断开了连接,当前端口不是兼容的标准 JMX RMI 端口。", + "jvm.backend.connection_error.jmx.host_required": "JMX 连接失败:未填写主机地址。", + "jvm.backend.connection_error.jmx.java_missing.help": "请先安装 JRE/JDK,或通过环境变量 `GONAVI_JMX_JAVA_BIN` 指向正确的 `java` 可执行文件。", + "jvm.backend.connection_error.jmx.java_missing.summary": "JMX 连接失败:当前机器未找到 `java` 运行时,GoNavi 无法启动 JMX helper。", + "jvm.backend.connection_error.jmx.no_such_object.help": "这通常意味着填到了 RMI 注册端口、调试端口或其他 Java 服务端口。请检查 `jmxremote.port` 和 `jmxremote.rmi.port` 配置是否正确。", + "jvm.backend.connection_error.jmx.no_such_object.summary": "JMX 连接失败:{{target}} 上虽然有 RMI 服务,但不是可用的 JMX RMIServer 端口。", + "jvm.backend.connection_error.jmx.non_jrmp.help": "请改填应用实际暴露的 JMX 端口,而不是业务 `server.port`。如果服务只开启了 `-Dcom.sun.management.jmxremote`,但没有配置 `jmxremote.port`,也无法直接远程连接。", + "jvm.backend.connection_error.jmx.non_jrmp.summary": "JMX 连接失败:{{target}} 不是标准 JMX 远程管理端口,当前更像普通业务端口或 HTTP 端口。", + "jvm.backend.connection_error.jmx.port_invalid": "JMX 连接失败:端口无效,请填写 1-65535 之间的有效端口。", + "jvm.backend.connection_error.jmx.timeout.help": "请确认端口可达、网络未被拦截,并适当增加连接超时时间。", + "jvm.backend.connection_error.jmx.timeout.summary": "JMX 连接失败:连接 {{target}} 超时。", + "jvm.backend.connection_error.suggestion": "建议:{{detail}}", + "jvm.backend.connection_error.technical_detail": "技术细节:{{detail}}", + "jvm.backend.diagnostic.arthas.base_url_invalid": "Arthas Tunnel 地址格式不正确:{{detail}}", + "jvm.backend.diagnostic.arthas.base_url_required": "Arthas Tunnel 地址不能为空", + "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "当前 Arthas Tunnel 会话的活动命令与待取消命令不一致", + "jvm.backend.diagnostic.arthas.command_already_running": "当前 Arthas Tunnel 会话已有命令在执行,请先等待完成或取消", + "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel 命令已中止", + "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel 命令执行超时,{{timeout}} 内未完成", + "jvm.backend.diagnostic.arthas.connect_canceled": "建立 Arthas Tunnel WebSocket 连接已中止", + "jvm.backend.diagnostic.arthas.connect_failed": "建立 Arthas Tunnel WebSocket 连接失败:{{detail}}", + "jvm.backend.diagnostic.arthas.connect_timeout": "建立 Arthas Tunnel WebSocket 连接超时,{{timeout}} 内未收到响应", + "jvm.backend.diagnostic.arthas.connection_closed": "Arthas Tunnel 连接已关闭:{{detail}}", + "jvm.backend.diagnostic.arthas.connection_closed_code": "Arthas Tunnel 连接已关闭:code={{code}}", + "jvm.backend.diagnostic.arthas.connection_not_ready": "Arthas Tunnel 连接尚未建立完成,请稍后重试", + "jvm.backend.diagnostic.arthas.http_failed": "Arthas Tunnel 连接失败:HTTP {{status}}", + "jvm.backend.diagnostic.arthas.no_running_command": "当前 Arthas Tunnel 会话没有正在执行的命令", + "jvm.backend.diagnostic.arthas.read_canceled": "读取 Arthas Tunnel 输出已中止", + "jvm.backend.diagnostic.arthas.read_deadline_failed": "Arthas Tunnel 读取超时设置失败:{{detail}}", + "jvm.backend.diagnostic.arthas.read_failed": "读取 Arthas Tunnel 输出失败:{{detail}}", + "jvm.backend.diagnostic.arthas.read_timeout": "读取 Arthas Tunnel 输出超时,{{timeout}} 内未收到响应", + "jvm.backend.diagnostic.arthas.request_encode_failed": "Arthas Tunnel 请求编码失败:{{detail}}", + "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel 仅支持 http/https/ws/wss 地址:{{scheme}}", + "jvm.backend.diagnostic.arthas.send_canceled": "向 Arthas Tunnel 发送终端指令已中止", + "jvm.backend.diagnostic.arthas.send_failed": "向 Arthas Tunnel 发送终端指令失败:{{detail}}", + "jvm.backend.diagnostic.arthas.send_timeout": "向 Arthas Tunnel 发送终端指令超时,{{timeout}} 内未收到响应", + "jvm.backend.diagnostic.arthas.session_config_changed": "Arthas Tunnel 会话配置已变化,请重新创建诊断会话", + "jvm.backend.diagnostic.arthas.session_missing": "诊断会话不存在,请重新创建 Arthas Tunnel 会话", + "jvm.backend.diagnostic.arthas.target_id_required": "Arthas Tunnel 需要填写目标实例标识(targetId / agentId)", + "jvm.backend.diagnostic.arthas.target_not_found": "找不到目标实例,请确认 targetId / agentId 是否填写正确,且对应 tunnel client 已在线", + "jvm.backend.diagnostic.arthas.target_not_found_with_id": "找不到目标实例 {{target}},请确认 targetId / agentId 是否填写正确,且对应 tunnel client 已在线", + "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Arthas Tunnel 终端指令编码失败:{{detail}}", + "jvm.backend.diagnostic.arthas.write_deadline_failed": "Arthas Tunnel 写入超时设置失败:{{detail}}", + "jvm.backend.diagnostic.error.audit_write_blocked": "诊断审计记录写入失败,已阻止命令执行: {{detail}}", + "jvm.backend.diagnostic.error.cancel_identifiers_required": "取消命令缺少 sessionId 或 commandId", + "jvm.backend.diagnostic.error.command_required": "诊断命令不能为空", + "jvm.backend.diagnostic.error.disabled": "当前连接未启用 JVM 诊断增强模式", + "jvm.backend.diagnostic.error.execute_canceled": "诊断执行请求已中止:{{detail}}", + "jvm.backend.diagnostic.error.session_id_required": "诊断会话 ID 不能为空,请先创建会话", + "jvm.backend.diagnostic.error.transport_unsupported": "不支持的 JVM 诊断传输模式:{{transport}}", + "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas 命令已中止", + "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas 命令执行完成", + "jvm.backend.diagnostic.message.cancel_requested": "已发送取消请求,等待诊断桥接端结束命令", + "jvm.backend.diagnostic.message.command_completed": "诊断命令执行完成", + "jvm.backend.diagnostic.policy.multiline_not_supported": "诊断命令不支持换行或多命令输入", + "jvm.backend.diagnostic.policy.mutating_not_allowed": "当前连接未开放高风险诊断命令:{{command}}", + "jvm.backend.diagnostic.policy.observe_not_allowed": "当前连接未开放观察类诊断命令:{{command}}", + "jvm.backend.diagnostic.policy.read_only_observe_only": "当前连接为只读模式,仅允许观察类诊断命令", + "jvm.backend.diagnostic.policy.trace_not_allowed": "当前连接未开放跟踪类诊断命令:{{command}}", + "jvm.backend.diagnostic.warning.audit_write_failed": "审计记录写入失败: {{detail}}", + "jvm.backend.error.audit_write_blocked": "审计记录写入失败,已阻止 JVM 变更: {{detail}}", + "jvm.backend.error.change_action_required": "JVM 变更操作不能为空", + "jvm.backend.error.change_blocked_by_guard": "当前变更被 Guard 拦截", + "jvm.backend.error.change_blocked_read_only": "当前连接为只读,禁止写入", + "jvm.backend.error.change_confirmation_token_failed": "生成 JVM 变更确认令牌失败: {{detail}}", + "jvm.backend.error.change_reason_required": "JVM 变更原因不能为空", + "jvm.backend.error.change_resource_id_required": "JVM 资源 ID 不能为空", + "jvm.backend.error.confirmation_token_expired": "确认令牌已过期,请重新预览并确认", + "jvm.backend.error.confirmation_token_invalid": "确认令牌无效,请重新预览并确认", + "jvm.backend.error.confirmation_token_missing": "缺少确认令牌,请先完成预览确认", + "jvm.backend.error.disallowed_mode": "当前连接不允许使用 {{mode}} 模式", + "jvm.backend.error.preview_confirmation_missing": "预览确认令牌缺失,请重新预览后再提交", + "jvm.backend.error.preview_context_hash_failed": "生成 JVM 预览上下文失败: {{detail}}", + "jvm.backend.error.preview_payload_hash_failed": "生成 JVM 预览载荷摘要失败: {{detail}}", + "jvm.backend.error.resource_path_invalid": "JVM 资源路径无效: {{detail}}", + "jvm.backend.message.connect_success": "JVM 连接成功", + "jvm.backend.monitoring.error.session_not_found": "未找到 {{connectionId}} {{providerMode}} 的 JVM 监控会话", + "jvm.backend.monitoring.error.snapshot_unsupported": "{{provider}} 监控快照暂未支持", + "jvm.backend.monitoring.warning.sample_auto_stopped": "监控采样连续失败 {{count}} 次,已自动停止本次监控会话", + "jvm.backend.separator.message_warning": ";", + "jvm.backend.warning.failed_audit_write_failed": "失败审计写入失败: {{detail}}", + "jvm.backend.warning.terminal_audit_write_failed": "终态审计写入失败: {{detail}}", + "log_panel.action.clear": "清空日志", + "log_panel.action.close": "关闭面板", + "log_panel.affected_rows": "影响行数:{{count}}", + "log_panel.column.duration": "耗时", + "log_panel.column.sql_message": "SQL / 消息", + "log_panel.column.status": "状态", + "log_panel.column.time": "时间", + "log_panel.description": "记录执行状态、耗时与错误信息,便于快速回溯。", + "log_panel.empty": "暂无 SQL 执行日志", + "log_panel.short_title": "日志", + "log_panel.title": "SQL 执行日志", + "message_publish_modal.action.send": "发送", + "message_publish_modal.error.build_command_failed": "构造发送命令失败", + "message_publish_modal.error.send_failed_detail": "发送失败:{{detail}}", + "message_publish_modal.error.unknown_error": "未知错误", + "message_publish_modal.field.body_mode.label": "消息体类型", + "message_publish_modal.field.body.extra": "JSON 模式下需输入合法 JSON;文本模式按原样发送。", + "message_publish_modal.field.body.label": "消息体", + "message_publish_modal.field.body.placeholder": "请输入消息体", + "message_publish_modal.field.body.required": "请输入消息体", + "message_publish_modal.field.delay_level.extra": "RocketMQ 使用固定延时级别,0 表示立即发送。", + "message_publish_modal.field.delay_level.label": "Delay Level(可选)", + "message_publish_modal.field.exchange.extra": "留空使用默认交换机;若填写自定义交换机,请确认目标 Queue 已建立 binding。", + "message_publish_modal.field.exchange.label": "Exchange(可选)", + "message_publish_modal.field.exchange.placeholder": "例如:events.topic", + "message_publish_modal.field.headers.extra": "需为 JSON 对象,例如 {{example}}。", + "message_publish_modal.field.headers.label": "Headers(可选)", + "message_publish_modal.field.properties.extra": "需为 JSON 对象,例如 {{example}}。", + "message_publish_modal.field.properties.label": "Properties(可选)", + "message_publish_modal.field.qos.extra": "0 为 at most once,1 为 at least once,2 为 exactly once。", + "message_publish_modal.field.retain.label": "Retain 消息", + "message_publish_modal.field.routing_key.extra": "留空时默认使用当前 Queue 名。", + "message_publish_modal.field.routing_key.label": "Routing Key(可选)", + "message_publish_modal.field.routing_key.placeholder": "例如:orders.queue", + "message_publish_modal.field.tag.extra": "留空表示不过滤或不写入 Tag。", + "message_publish_modal.field.tag.label": "Tag(可选)", + "message_publish_modal.footer.success_prefix": "发送成功后会返回", + "message_publish_modal.footer.success_suffix": ",用于确认本次测试消息是否已提交。", + "message_publish_modal.option.no_delay": "不延时", + "message_publish_modal.option.text": "文本", + "message_publish_modal.title": "测试发送消息", + "message_publish_modal.title_with_connection": "测试发送消息 · {{connectionName}}", + "message_publish.error.destination_required": "请输入目标 Topic / Queue", + "message_publish.error.invalid_json_detail": "{{field}}不是合法 JSON:{{detail}}", + "message_publish.error.json_object_required": "{{field}} 必须是 JSON 对象", + "message_publish.error.mqtt_wildcard_topic": "MQTT 发送 Topic 不能包含 + 或 # 通配符", + "message_publish.error.required_field": "请输入{{field}}", + "message_publish.error.unsupported_type": "当前数据源暂不支持测试发送消息:{{type}}", + "message_publish.field.body": "消息体", + "message_publish.field.message_key": "消息 Key", + "message_publish.presentation.kafka.alert": "当前表单会自动拼装 Kafka publish JSON 命令,并直接调用后端执行测试发送。", + "message_publish.presentation.kafka.destination_placeholder": "例如:orders.events", + "message_publish.presentation.kafka.key_placeholder": "可留空;JSON 模式请输入一行合法 JSON", + "message_publish.presentation.kafka.success_hint": "Headers 会作为 Kafka Record Headers 一并发送。", + "message_publish.presentation.key_label": "消息 Key(可选)", + "message_publish.presentation.keys_label": "消息 Keys(可选)", + "message_publish.presentation.mqtt.alert": "当前表单会自动拼装 MQTT publish JSON 命令,并直接通过 broker 执行测试发送。", + "message_publish.presentation.mqtt.destination_placeholder": "例如:devices/device-001/telemetry", + "message_publish.presentation.mqtt.success_hint": "QoS 与 retain 可单独指定;未填写时沿用当前连接中的默认参数。", + "message_publish.presentation.rabbitmq.alert": "当前表单会自动拼装 RabbitMQ publish JSON 命令,并通过 Management API 执行测试发送。", + "message_publish.presentation.rabbitmq.destination_placeholder": "例如:orders.queue", + "message_publish.presentation.rabbitmq.destination_required": "请输入 Queue", + "message_publish.presentation.rabbitmq.success_hint": "留空 Exchange 时会使用默认交换机并按 Queue 名作为 routing key。", + "message_publish.presentation.rocketmq.alert": "当前表单会自动拼装 RocketMQ publish JSON 命令,并通过 NameServer/Broker 执行测试发送。", + "message_publish.presentation.rocketmq.destination_placeholder": "例如:orders.events", + "message_publish.presentation.rocketmq.key_placeholder": "可输入多个 Key,使用逗号分隔", + "message_publish.presentation.rocketmq.success_hint": "Tag、Keys、Delay Level 与 Properties 会一并写入 RocketMQ 消息属性。", + "message_publish.presentation.rocketmq.tag_placeholder": "例如:TagA", + "message_publish.presentation.topic_required": "请输入 Topic", + "proxy.backend.error.host_empty": "代理主机为空", + "proxy.backend.error.http_connect_failed": "连接 HTTP 代理失败:{{detail}}", + "proxy.backend.error.http_connect_read_failed": "读取 HTTP CONNECT 响应失败:{{detail}}", + "proxy.backend.error.http_connect_status_failed": "HTTP 代理 CONNECT 失败:{{status}}", + "proxy.backend.error.http_connect_write_failed": "发送 HTTP CONNECT 请求失败:{{detail}}", + "proxy.backend.error.listen_failed": "创建本地代理监听失败:{{detail}}", + "proxy.backend.error.port_invalid": "代理端口无效:{{port}}", + "proxy.backend.error.remote_addr_invalid": "无效的远端地址:{{address}}", + "proxy.backend.error.socks5_connect_failed": "SOCKS5 代理连接失败:{{detail}}", + "proxy.backend.error.socks5_dialer_failed": "创建 SOCKS5 代理拨号器失败:{{detail}}", + "proxy.backend.error.unsupported_type": "不支持的代理类型:{{type}}", + "query_editor.action.ai_explain_sql": "AI 解释 SQL", + "query_editor.action.ai_explain_sql_menu": "解释 SQL", + "query_editor.action.ai_generate_sql": "AI 生成 SQL", + "query_editor.action.ai_generate_sql_menu": "生成 SQL", + "query_editor.action.ai_optimize_sql": "AI 优化 SQL", + "query_editor.action.ai_optimize_sql_menu": "优化 SQL", + "query_editor.action.ai_schema_analysis": "Schema 分析", + "query_editor.action.export_sql_file": "导出 SQL 文件", + "query_editor.action.format": "美化", + "query_editor.action.format_sql": "美化 SQL", + "query_editor.action.hide_results_panel": "隐藏结果区", + "query_editor.action.hide_results_panel_with_shortcut": "隐藏结果区({{shortcut}})", + "query_editor.action.more": "更多", + "query_editor.action.rename_query": "重命名查询", + "query_editor.action.resize_editor": "拖动调整高度", + "query_editor.action.results": "结果", + "query_editor.action.run": "运行", + "query_editor.action.run_with_shortcut": "运行({{shortcut}})", + "query_editor.action.save": "保存", + "query_editor.action.save_with_shortcut": "保存({{shortcut}})", + "query_editor.action.show_object_info": "查看对象信息", + "query_editor.action.show_results_panel": "显示结果区", + "query_editor.action.show_results_panel_with_shortcut": "显示结果区({{shortcut}})", + "query_editor.action.stop": "停止", + "query_editor.ai_prompt.context": "上下文环境:{{type}} {{name}},当前库选定为 {{database}}。\n", + "query_editor.ai_prompt.default_database": "默认", + "query_editor.ai_prompt.default_source": "数据库", + "query_editor.ai_prompt.diagnose": "我在执行以下 SQL 时遇到了错误:\n```sql\n{{sql}}\n```\n\n数据库报错信息如下:\n```text\n{{error}}\n```\n\n请帮我分析错误原因,并给出修改建议。", + "query_editor.ai_prompt.explain": "请解释以下 SQL 语句的执行逻辑:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.generate": "请根据当前数据库表结构生成查询语句。", + "query_editor.ai_prompt.optimize": "请分析以下 SQL 语句的性能并给出优化建议:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.schema": "请针对当前数据库的表结构进行系统分析,并给出性能和设计上的优化建议。", + "query_editor.completion.action.absolute_value": "绝对值", + "query_editor.completion.action.approximate_distinct": "近似去重", + "query_editor.completion.action.approximate_distinct_count": "近似去重计数", + "query_editor.completion.action.approximate_percentile": "近似百分位", + "query_editor.completion.action.approximate_quantile": "近似分位数", + "query_editor.completion.action.array_aggregation": "数组聚合", + "query_editor.completion.action.array_length": "数组长度", + "query_editor.completion.action.average": "平均值", + "query_editor.completion.action.bitmap_aggregation": "Bitmap 聚合", + "query_editor.completion.action.bitmap_construction": "构造 Bitmap", + "query_editor.completion.action.bitmap_count": "Bitmap 计数", + "query_editor.completion.action.boolean_and_aggregation": "布尔与聚合", + "query_editor.completion.action.boolean_or_aggregation": "布尔或聚合", + "query_editor.completion.action.character_length": "字符长度", + "query_editor.completion.action.concat_with_separator": "带分隔符拼接", + "query_editor.completion.action.concatenation": "拼接", + "query_editor.completion.action.condition_mapping": "条件映射", + "query_editor.completion.action.conditional_check": "条件判断", + "query_editor.completion.action.count": "计数", + "query_editor.completion.action.current_database": "当前数据库", + "query_editor.completion.action.current_date": "当前日期", + "query_editor.completion.action.current_date_time": "当前日期时间", + "query_editor.completion.action.current_time": "当前时间", + "query_editor.completion.action.current_timestamp": "当前时间戳", + "query_editor.completion.action.current_user": "当前用户", + "query_editor.completion.action.database_current_time": "数据库当前时间", + "query_editor.completion.action.date_addition": "日期加法", + "query_editor.completion.action.date_conversion": "转日期", + "query_editor.completion.action.date_difference": "日期差", + "query_editor.completion.action.date_field_extraction": "日期字段提取", + "query_editor.completion.action.date_formatting": "日期格式化", + "query_editor.completion.action.date_subtraction": "日期减法", + "query_editor.completion.action.date_truncation": "日期截断", + "query_editor.completion.action.date_value": "日期", + "query_editor.completion.action.datetime_conversion": "转日期时间", + "query_editor.completion.action.datetime_value": "日期时间", + "query_editor.completion.action.decimal_truncation": "截断小数", + "query_editor.completion.action.dense_rank": "连续排名", + "query_editor.completion.action.distinct_array_aggregation": "去重数组聚合", + "query_editor.completion.action.e_power": "e 的次方", + "query_editor.completion.action.elapsed_time": "经过时间", + "query_editor.completion.action.epoch_seconds": "时间戳秒数", + "query_editor.completion.action.exact_distinct": "精确去重", + "query_editor.completion.action.first_non_null": "返回第一个非 NULL", + "query_editor.completion.action.first_value": "第一个值", + "query_editor.completion.action.format_as_text": "格式化为文本", + "query_editor.completion.action.group_concatenation": "分组拼接", + "query_editor.completion.action.guid_generation": "生成 GUID", + "query_editor.completion.action.hexadecimal": "十六进制", + "query_editor.completion.action.high_precision_current_time": "高精度当前时间", + "query_editor.completion.action.hll_aggregation": "HLL 聚合", + "query_editor.completion.action.hll_hash": "HLL 哈希", + "query_editor.completion.action.instant_rate_of_change": "瞬时变化率", + "query_editor.completion.action.int64_conversion": "转 Int64", + "query_editor.completion.action.interpolation": "插值", + "query_editor.completion.action.json_string_extraction": "JSON 字符串提取", + "query_editor.completion.action.json_unquote": "JSON 去引号", + "query_editor.completion.action.json_value_extraction": "JSON 提取", + "query_editor.completion.action.json_value_set": "JSON 设置", + "query_editor.completion.action.jsonb_path_extraction": "JSONB 路径提取", + "query_editor.completion.action.julian_day": "儒略日", + "query_editor.completion.action.last_insert_id": "最后插入 ID", + "query_editor.completion.action.last_row": "最后一行", + "query_editor.completion.action.last_value": "最后一个值", + "query_editor.completion.action.least_squares": "最小二乘", + "query_editor.completion.action.left_padding": "左填充", + "query_editor.completion.action.left_space_trimming": "去左空格", + "query_editor.completion.action.left_substring": "从左截取", + "query_editor.completion.action.length": "长度", + "query_editor.completion.action.list_aggregation": "列表聚合", + "query_editor.completion.action.list_unnest": "展开列表", + "query_editor.completion.action.log_base_10": "以 10 为底对数", + "query_editor.completion.action.log_base_2": "以 2 为底对数", + "query_editor.completion.action.logarithm": "对数", + "query_editor.completion.action.lowercase": "转小写", + "query_editor.completion.action.maximum": "最大值", + "query_editor.completion.action.md5_hash": "MD5 哈希", + "query_editor.completion.action.minimum": "最小值", + "query_editor.completion.action.modulo": "取模", + "query_editor.completion.action.month_addition": "增加月份", + "query_editor.completion.action.month_difference": "月份差", + "query_editor.completion.action.month_end_date": "月末日期", + "query_editor.completion.action.next_row": "后一行", + "query_editor.completion.action.null_branch": "NULL 分支", + "query_editor.completion.action.null_if_equal": "相等返回 NULL", + "query_editor.completion.action.null_replacement": "NULL 替换", + "query_editor.completion.action.number_conversion": "转数字", + "query_editor.completion.action.number_formatting": "数字格式化", + "query_editor.completion.action.position_lookup": "查找位置", + "query_editor.completion.action.power_operation": "幂运算", + "query_editor.completion.action.previous_row": "前一行", + "query_editor.completion.action.quantile": "分位数", + "query_editor.completion.action.random_number": "随机数", + "query_editor.completion.action.rank": "排名", + "query_editor.completion.action.rate_of_change": "变化率", + "query_editor.completion.action.regex_match": "正则匹配", + "query_editor.completion.action.regex_replace": "正则替换", + "query_editor.completion.action.replacement": "替换", + "query_editor.completion.action.right_padding": "右填充", + "query_editor.completion.action.right_space_trimming": "去右空格", + "query_editor.completion.action.right_substring": "从右截取", + "query_editor.completion.action.round_down": "向下取整", + "query_editor.completion.action.round_up": "向上取整", + "query_editor.completion.action.rounding": "四舍五入", + "query_editor.completion.action.row_number": "行号", + "query_editor.completion.action.set_lookup": "集合查找", + "query_editor.completion.action.sha1_hash": "SHA1 哈希", + "query_editor.completion.action.sha2_hash": "SHA2 哈希", + "query_editor.completion.action.space_trimming": "去空格", + "query_editor.completion.action.spread": "最大最小差", + "query_editor.completion.action.sql_literal": "SQL 字面量", + "query_editor.completion.action.square_root": "平方根", + "query_editor.completion.action.string_aggregation": "字符串聚合", + "query_editor.completion.action.string_conversion": "转字符串", + "query_editor.completion.action.string_repetition": "重复字符串", + "query_editor.completion.action.string_reversal": "字符串反转", + "query_editor.completion.action.string_to_date": "字符串转日期", + "query_editor.completion.action.string_to_timestamp": "字符串转时间戳", + "query_editor.completion.action.struct_construction": "构造结构体", + "query_editor.completion.action.substring_extraction": "截取子串", + "query_editor.completion.action.sum": "求和", + "query_editor.completion.action.time_difference": "时间差", + "query_editor.completion.action.time_value": "时间", + "query_editor.completion.action.time_weighted_average": "时间加权平均", + "query_editor.completion.action.timestamp_difference": "时间戳差", + "query_editor.completion.action.truncate_date_or_number": "截断日期或数字", + "query_editor.completion.action.try_conversion": "尝试转换", + "query_editor.completion.action.type_conversion": "类型转换", + "query_editor.completion.action.unix_time_to_datetime": "Unix 时间戳转时间", + "query_editor.completion.action.unix_timestamp": "Unix 时间戳", + "query_editor.completion.action.uppercase": "转大写", + "query_editor.completion.action.uuid_generation": "生成 UUID", + "query_editor.completion.action.value_formatting": "格式化", + "query_editor.completion.action.version": "版本", + "query_editor.completion.detail.aggregate": "聚合函数", + "query_editor.completion.detail.aggregate_count": "聚合 - 计数", + "query_editor.completion.detail.conditional": "条件函数", + "query_editor.completion.detail.conditional_if": "条件 - 如果", + "query_editor.completion.detail.conversion": "类型转换函数", + "query_editor.completion.detail.conversion_cast": "转换 - 类型转换", + "query_editor.completion.detail.crypto_md5": "哈希 - MD5", + "query_editor.completion.detail.date_now": "日期 - 当前日期时间", + "query_editor.completion.detail.date_time": "日期时间函数", + "query_editor.completion.detail.info": "信息函数", + "query_editor.completion.detail.info_database": "信息 - 当前数据库", + "query_editor.completion.detail.json": "JSON 函数", + "query_editor.completion.detail.json_extract": "JSON - 提取值", + "query_editor.completion.detail.math": "数学函数", + "query_editor.completion.detail.math_abs": "数学 - 绝对值", + "query_editor.completion.detail.modifier_distinct": "修饰 - 去重", + "query_editor.completion.detail.sql_function": "SQL 函数", + "query_editor.completion.detail.string": "字符串函数", + "query_editor.completion.detail.string_concat": "字符串 - 拼接", + "query_editor.completion.detail.utility": "工具函数", + "query_editor.completion.detail.window": "窗口函数", + "query_editor.completion.detail.window_row_number": "窗口 - 行号", + "query_editor.completion.documentation.comment": "备注:{{comment}}", + "query_editor.empty_state.description": "运行查询后,结果会在下方以新版数据网格展示。", + "query_editor.empty_state.title": "等待执行 SQL", + "query_editor.format.keyword_lower": "关键字小写", + "query_editor.format.keyword_upper": "关键字大写", + "query_editor.format.restore_last_format": "还原上次美化", + "query_editor.format.shortcut_settings": "快捷键管理...", + "query_editor.format.snippet_settings": "代码片段管理...", + "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + 点击打开该函数", + "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + 点击打开该物化视图", + "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + 点击打开该存储过程", + "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + 点击打开该表", + "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + 点击打开该触发器", + "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + 点击打开该视图", + "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + 点击切换到该数据库", + "query_editor.max_rows.option_1000": "最大行数:1000", + "query_editor.max_rows.option_20000": "最大行数:20000", + "query_editor.max_rows.option_500": "最大行数:500", + "query_editor.max_rows.option_5000": "最大行数:5000", + "query_editor.max_rows.option_unlimited": "最大行数:不限", + "query_editor.max_rows.tooltip": "最大返回行数。会对 SELECT 自动加 LIMIT,防止大结果集卡死界面。", + "query_editor.message.append_success": "代码已追加。", + "query_editor.message.cancel_failed": "取消查询失败:{{error}}", + "query_editor.message.cancel_no_running": "没有正在运行的查询可取消。", + "query_editor.message.cancel_success": "查询已中止。", + "query_editor.message.connection_not_found": "未找到连接。", + "query_editor.message.execution_failed_with_error": "查询执行失败:{{error}}", + "query_editor.message.execution_multi_success": "已执行 {{statements}} 条语句,生成 {{results}} 个结果集。", + "query_editor.message.execution_result_sets_success": "已执行完成,生成 {{results}} 个结果集。", + "query_editor.message.execution_success": "执行成功。", + "query_editor.message.export_sql_file_failed": "导出 SQL 文件失败:{{error}}", + "query_editor.message.export_sql_file_success": "SQL 文件已导出。", + "query_editor.message.format_failed": "格式化失败:SQL 语法可能有误。", + "query_editor.message.format_restore_success": "已还原到美化前 SQL", + "query_editor.message.insert_success": "代码已在当前光标处成功插入。", + "query_editor.message.no_executable_sql": "没有可执行的 SQL。", + "query_editor.message.no_format_restore_snapshot": "没有可还原的美化前 SQL", + "query_editor.message.no_selectable_sql": "没有可选择的 SQL 语句。", + "query_editor.message.object_info_target_not_found": "当前光标未定位到可识别的表或字段。", + "query_editor.message.page_query_empty": "翻页未返回结果集", + "query_editor.message.page_query_failed": "翻页失败:{{error}}", + "query_editor.message.read_only_index_metadata_unavailable": "无法加载唯一索引元数据,无法安全提交修改。", + "query_editor.message.read_only_no_safe_locator": "未检测到主键或可用唯一索引,无法安全提交修改。", + "query_editor.message.read_only_oracle_rowid_injection_unavailable": "Oracle 查询使用 * 时无法自动注入 ROWID 定位列,已保持只读。", + "query_editor.message.read_only_system_metadata": "系统元数据查询结果保持只读。", + "query_editor.message.read_only_table_locator_metadata_unavailable": "无法加载 {{table}} 的主键/唯一索引元数据,无法安全提交修改。", + "query_editor.message.read_only_warning_with_detail": "查询结果保持只读:{{detail}}", + "query_editor.message.refresh_failed": "刷新失败:{{error}}", + "query_editor.message.renamed": "查询已重命名。", + "query_editor.message.save_first_before_rename": "请先保存查询后再重命名。", + "query_editor.message.save_query_failed": "保存查询失败:{{error}}", + "query_editor.message.save_sql_file_failed": "保存 SQL 文件失败:{{error}}", + "query_editor.message.saved": "查询已保存。", + "query_editor.message.select_database_first": "请先选择数据库。", + "query_editor.message.sql_file_saved": "SQL 文件已保存。", + "query_editor.message.statement_failed_prefix": "第 {{index}} 条语句执行失败:", + "query_editor.message.unsupported_source": "当前数据源不支持 SQL 查询编辑器,请使用对应专用页面。", + "query_editor.object_info.column": "字段", + "query_editor.object_info.database": "数据库", + "query_editor.object_info.label.database": "库", + "query_editor.object_info.label.schema": "Schema", + "query_editor.object_info.label.separator": ":", + "query_editor.object_info.label.table": "表", + "query_editor.object_info.label.type": "类型", + "query_editor.object_info.materialized_view": "物化视图", + "query_editor.object_info.table": "表", + "query_editor.placeholder.connection": "选择连接", + "query_editor.placeholder.database": "选择数据库", + "query_editor.result.affected_rows": "影响行数:{{count}}", + "query_editor.result.ai_diagnose": "一键 AI 诊断", + "query_editor.result.close": "关闭结果", + "query_editor.result.execution_failed": "执行失败", + "query_editor.result.execution_success": "执行成功", + "query_editor.result.tab_title": "结果 {{index}}({{count}})", + "query_editor.result.tab_title_success": "结果 {{index}} ✓", + "query_editor.results_panel.action.hide": "隐藏", + "query_editor.results_panel.aria.hide": "隐藏结果区", + "query_editor.results_panel.menu.close_all": "关闭所有", + "query_editor.results_panel.menu.close_left": "关闭左侧", + "query_editor.results_panel.menu.close_other": "关闭其他页", + "query_editor.results_panel.menu.close_right": "关闭右侧", + "query_editor.results_panel.message.title": "执行消息", + "query_editor.results_panel.panel.title": "结果区", + "query_editor.results_panel.tab.message": "消息 {{index}}", + "query_editor.results_panel.tab.result": "结果 {{index}}", + "query_editor.results_panel.tooltip.hide": "隐藏结果区", + "query_editor.results_panel.tooltip.hide_with_shortcut": "隐藏结果区({{shortcut}})", + "query_editor.save_modal.name_label": "查询名称", + "query_editor.save_modal.name_placeholder": "例如:查询所有用户", + "query_editor.save_modal.name_required": "请输入查询名称。", + "query_editor.save_modal.rename_ok": "重命名", + "query_editor.save_modal.rename_title": "重命名查询", + "query_editor.save_modal.title": "保存查询", + "query_editor.save_modal.unnamed": "未命名查询", + "query_editor.slash_command.diff.description": "对比两表差异生成变更", + "query_editor.slash_command.diff.label": "表对比", + "query_editor.slash_command.diff.prompt": "请对比以下两张表的结构差异,并生成从旧版本迁移到新版本的 ALTER 语句。", + "query_editor.slash_command.explain.description": "解释选中 SQL 的逻辑", + "query_editor.slash_command.explain.label": "解释 SQL", + "query_editor.slash_command.explain.prompt": "请解释以下 SQL 语句的执行逻辑:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.index.description": "推荐最优索引方案", + "query_editor.slash_command.index.label": "索引建议", + "query_editor.slash_command.index.prompt": "请基于当前表结构和常见查询场景,推荐最优的索引方案并给出可用 SQL。", + "query_editor.slash_command.mock.description": "生成 INSERT 测试数据", + "query_editor.slash_command.mock.label": "造测试数据", + "query_editor.slash_command.mock.prompt": "请为当前关联的表生成 10 条符合业务语义的 INSERT 测试数据。", + "query_editor.slash_command.optimize.description": "分析 SQL 性能瓶颈", + "query_editor.slash_command.optimize.label": "优化分析", + "query_editor.slash_command.optimize.prompt": "请分析以下 SQL 语句的性能并给出优化建议:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.query.description": "描述你想查什么", + "query_editor.slash_command.query.label": "自然语言查询", + "query_editor.slash_command.query.prompt": "帮我写一条 SQL 查询:", + "query_editor.slash_command.schema.description": "评审表结构设计质量", + "query_editor.slash_command.schema.label": "表设计评审", + "query_editor.slash_command.schema.prompt": "请全面评审当前关联表的设计,包括字段类型、范式、索引策略等方面的改进建议。", + "query_editor.slash_command.sql.description": "描述需求自动生成语句", + "query_editor.slash_command.sql.label": "生成 SQL", + "query_editor.slash_command.sql.prompt": "请根据以下需求生成 SQL:", "query_editor.sql_error.rule.column_missing.explanation": "SQL 引用了结果集中不存在、拼写不一致或当前表没有的字段。", "query_editor.sql_error.rule.column_missing.label": "字段不存在", "query_editor.sql_error.rule.column_missing.suggestion": "检查字段名、别名、大小写、引用表别名,以及字段是否属于当前 FROM/JOIN 的对象。", @@ -7151,10 +6053,198 @@ "query_editor.sql_error.wrapper.raw_line": "原始错误:{{error}}", "query_editor.sql_error.wrapper.semantic_line": "中文语义:{{label}}。{{explanation}}", "query_editor.sql_error.wrapper.suggestion_line": "处理建议:{{suggestion}}", + "query_editor.transaction.action.commit": "提交", + "query_editor.transaction.action.commit_with_count": "提交 ({{count}})", + "query_editor.transaction.action.rollback": "回滚", + "query_editor.transaction.delay.immediate": "立即", + "query_editor.transaction.message.pending_managed_transaction": "当前 SQL 编辑器已有未提交事务,请先提交或回滚后再执行新的增删改语句。", + "query_editor.transaction.mode.auto": "自动", + "query_editor.transaction.mode.manual": "手动", + "query_editor.transaction.mode.tooltip": "参考 DBeaver:SQL 编辑器执行 INSERT/UPDATE/DELETE/MERGE/REPLACE 等 DML 时先进入 GoNavi 托管事务;手动提交需要手动提交/回滚,自动提交会在执行成功后自动 COMMIT。", + "query_editor.transaction.status.auto_commit_countdown": "{{seconds}}s 后自动提交", + "query_editor.transaction.status.auto_committing": "自动提交中", + "query.format": "美化 SQL", + "query.new": "新建查询", + "query.run": "运行", + "query.save": "保存查询", + "query.stop": "停止", + "redis_command.action.clear_console": "清空控制台", + "redis_command.action.execute": "运行(Cmd+Enter)", + "redis_command.completion.detail": "Redis 命令", + "redis_command.message.command_required": "请输入要运行的命令", + "redis_command.output.empty_hint": "在此控制台运行命令,结果将按返回内容显示。", + "redis_command.output.selection_tip": "提示:选择任意行后按 Ctrl + Enter,仅运行所选内容。", + "redis_command.output.title": "执行输出", + "redis_command.state.connection_not_found": "未找到连接", + "redis_command.title.console": "Redis 控制台", + "redis_monitor.action.pause_refresh": "暂停刷新", + "redis_monitor.action.refresh_now": "立即刷新", + "redis_monitor.action.resume_refresh": "继续刷新", + "redis_monitor.chart.clients_keys": "连接信息(客户端与 Keys)", + "redis_monitor.chart.cpu_usage": "CPU 使用率", + "redis_monitor.chart.memory": "内存开销", + "redis_monitor.chart.qps": "请求吞吐(QPS)", + "redis_monitor.message.fetch_failed": "获取 Redis 信息失败:{{detail}}", + "redis_monitor.metric.blocked_clients": "阻塞:{{value}}", + "redis_monitor.metric.clients": "客户端", + "redis_monitor.metric.days": "天数:{{value}}", + "redis_monitor.metric.memory_peak": "峰值:{{value}}", + "redis_monitor.metric.memory_used": "已用内存", + "redis_monitor.metric.ops": "吞吐(OPS)", + "redis_monitor.metric.uptime": "运行时间", + "redis_monitor.series.clients": "客户端", + "redis_monitor.series.rss_memory": "RSS 内存", + "redis_monitor.series.system": "系统", + "redis_monitor.series.total_keys": "Key 总数", + "redis_monitor.series.used_memory": "已用内存", + "redis_monitor.series.user": "用户", + "redis_monitor.server_details.title": "服务器详细参数", + "redis_monitor.state.connection_not_found": "未找到连接", + "redis_monitor.title.instance": "Redis 实例监控", + "redis_viewer.action.add_field": "新增字段", + "redis_viewer.action.add_list_head": "推入头部", + "redis_viewer.action.add_list_tail": "推入尾部", + "redis_viewer.action.add_member": "新增成员", + "redis_viewer.action.add_stream_entry": "新增条目", + "redis_viewer.action.clear_group_selection": "清除选择", + "redis_viewer.action.clear_selection": "清除选择", + "redis_viewer.action.copy": "复制", + "redis_viewer.action.copy_key_name": "复制 Key 名称", + "redis_viewer.action.copy_value": "复制值", + "redis_viewer.action.delete_key": "删除 Key", + "redis_viewer.action.delete_selected": "删除选中项({{count}})", + "redis_viewer.action.edit": "编辑", + "redis_viewer.action.load_more": "加载更多", + "redis_viewer.action.new_key": "新建", + "redis_viewer.action.refresh": "刷新", + "redis_viewer.action.rename_key": "重命名 Key", + "redis_viewer.action.select_all_loaded": "全选已加载", + "redis_viewer.action.select_group": "选择", + "redis_viewer.action.set_ttl": "设置 TTL", + "redis_viewer.aria.collapse_group": "折叠分组", + "redis_viewer.aria.expand_group": "展开分组", + "redis_viewer.confirm.delete_field": "删除此字段?", + "redis_viewer.confirm.delete_key": "删除 Key \"{{key}}\"?", + "redis_viewer.confirm.delete_member": "删除此成员?", + "redis_viewer.confirm.delete_selected": "删除选中的 {{count}} 个 Key?", + "redis_viewer.confirm.delete_stream_entry": "删除此 Stream 条目?", + "redis_viewer.field.field_name": "字段名称", + "redis_viewer.field.fields_json": "字段 JSON:", + "redis_viewer.field.key": "Key", + "redis_viewer.field.member": "成员:", + "redis_viewer.field.new_key_name": "新 Key 名称", + "redis_viewer.field.new_score": "新分数:", + "redis_viewer.field.score": "分数:", + "redis_viewer.field.stream_id": "ID(可选,默认 *):", + "redis_viewer.field.ttl_seconds": "TTL(秒)", + "redis_viewer.field.value": "值", + "redis_viewer.help.ttl_forever": "-1 表示永不过期", + "redis_viewer.hint.binary_readonly": "二进制数据无法编辑", + "redis_viewer.hint.switch_auto_to_edit": "切换到 Auto 模式后编辑", + "redis_viewer.label.encoding": "编码:{{encoding}}", + "redis_viewer.label.keys_count": "{{count}} 个 Key", + "redis_viewer.label.length": "长度:{{count}}", + "redis_viewer.label.node_count": "{{count}} 个节点", + "redis_viewer.label.original_key": "原 Key:{{key}}", + "redis_viewer.message.add_failed": "新增失败:{{detail}}", + "redis_viewer.message.add_success": "已新增", + "redis_viewer.message.add_success_with_id": "已新增 {{id}}", + "redis_viewer.message.copied": "已复制", + "redis_viewer.message.copy_failed": "复制失败", + "redis_viewer.message.create_failed": "创建失败:{{detail}}", + "redis_viewer.message.create_success": "已创建", + "redis_viewer.message.delete_failed": "删除失败:{{detail}}", + "redis_viewer.message.delete_success": "已删除", + "redis_viewer.message.deleted_keys": "已删除 {{count}} 个 Key", + "redis_viewer.message.fields_json_invalid": "字段 JSON 无效", + "redis_viewer.message.fields_must_be_json_object": "字段必须是 JSON 对象", + "redis_viewer.message.fields_required": "请至少提供一个字段", + "redis_viewer.message.key_check_failed": "检查目标 Key 失败:{{detail}}", + "redis_viewer.message.key_missing_removed": "Key 不再存在或已过期,已从列表中移除", + "redis_viewer.message.key_name_copied": "Key 名称已复制", + "redis_viewer.message.load_keys_failed": "加载 Key 失败:{{detail}}", + "redis_viewer.message.new_key_name_required": "请输入新的 Key 名称", + "redis_viewer.message.rename_failed": "重命名失败:{{detail}}", + "redis_viewer.message.rename_same_key": "新的 Key 名称必须与原名称不同", + "redis_viewer.message.rename_success": "Key 已重命名", + "redis_viewer.message.save_failed": "保存失败:{{detail}}", + "redis_viewer.message.save_success": "已保存", + "redis_viewer.message.set_failed": "设置失败:{{detail}}", + "redis_viewer.message.stream_entry_not_deleted": "未删除任何 Stream 条目,可能已不存在", + "redis_viewer.message.target_key_exists": "目标 Key 已存在:{{key}}", + "redis_viewer.message.ttl_set_success": "TTL 已更新", + "redis_viewer.message.update_failed": "更新失败:{{detail}}", + "redis_viewer.message.update_success": "已更新", + "redis_viewer.message.value_load_failed": "获取值失败:{{detail}}", + "redis_viewer.modal.add_element": "新增元素", + "redis_viewer.modal.add_element_head": "向头部新增元素", + "redis_viewer.modal.add_field": "新增字段", + "redis_viewer.modal.add_member": "新增成员", + "redis_viewer.modal.add_stream_entry": "新增 Stream 条目", + "redis_viewer.modal.edit_field": "编辑字段:{{field}}", + "redis_viewer.modal.edit_index": "编辑索引 {{index}}", + "redis_viewer.modal.edit_value": "编辑值", + "redis_viewer.modal.new_key": "新建 Key", + "redis_viewer.modal.rename_key": "重命名 Key", + "redis_viewer.modal.set_ttl": "设置 TTL", + "redis_viewer.modal.update_score": "更新分数", + "redis_viewer.notice.large_keyspace_mode": "大 Keyspace 性能模式已启用。节点渲染已简化,最多保留 {{count}} 个展开分组。", + "redis_viewer.placeholder.key_name": "Key 名称", + "redis_viewer.placeholder.member_value": "输入成员值", + "redis_viewer.placeholder.new_element_value": "输入新元素值", + "redis_viewer.placeholder.new_key_name": "new:key:name", + "redis_viewer.placeholder.new_member_value": "输入新成员值", + "redis_viewer.placeholder.search_exact": "输入完整 Key 或命名空间进行精确搜索", + "redis_viewer.placeholder.search_fuzzy": "搜索 Key(模糊匹配)", + "redis_viewer.placeholder.stream_id": "例如:* 或 1723110000000-0", + "redis_viewer.placeholder.value": "值", + "redis_viewer.search.exact": "精确", + "redis_viewer.search.fuzzy": "模糊", + "redis_viewer.state.connection_not_found": "未找到连接", + "redis_viewer.state.empty_selection": "选择一个 Key 查看详情", + "redis_viewer.table.action": "操作", + "redis_viewer.table.field": "字段", + "redis_viewer.table.fields": "字段", + "redis_viewer.table.index": "索引", + "redis_viewer.table.member": "成员", + "redis_viewer.table.score": "分数", + "redis_viewer.table.value": "值", + "redis_viewer.title.active_key": "当前 Key", + "redis_viewer.title.key_explorer": "Key 浏览器", + "redis_viewer.title.namespace_key": "命名空间 / Key", + "redis_viewer.title.type_ttl": "类型 / TTL", + "redis_viewer.tooltip.copy_fields_json": "复制字段 JSON", + "redis_viewer.tooltip.copy_id": "复制 ID", + "redis_viewer.tooltip.copy_key_name": "复制 Key 名称", + "redis_viewer.tooltip.copy_value": "复制值", + "redis_viewer.tooltip.resize_panels": "拖动调整大小", + "redis_viewer.topology.cluster": "Cluster", + "redis_viewer.topology.sentinel": "Sentinel", + "redis_viewer.topology.single": "单机", + "redis_viewer.ttl.days_hours": "{{days}}天 {{hours}}小时", + "redis_viewer.ttl.expired": "已过期", + "redis_viewer.ttl.forever": "永久", + "redis_viewer.ttl.hours_minutes": "{{hours}}小时 {{minutes}}分钟", + "redis_viewer.ttl.minutes_seconds": "{{minutes}}分钟 {{seconds}}秒", + "redis_viewer.ttl.seconds": "{{seconds}}秒", + "redis_viewer.validation.key_required": "请输入 Key", + "redis_viewer.validation.new_key_name_required": "请输入新的 Key 名称", + "redis_viewer.validation.value_required": "请输入值", + "redis_viewer.view.auto": "Auto", + "redis_viewer.view.hex": "Hex", + "redis_viewer.view.text": "原始文本", + "redis_viewer.view.title": "查看模式", + "redis.backend.error.address_required": "Redis 连接地址不能为空", + "redis.backend.error.argument_invalid_type": "{{name}} 类型无效", + "redis.backend.error.argument_required": "{{name}} 不能为空", "redis.backend.error.cluster_connect_failed": "Redis 集群连接失败:{{detail}}", + "redis.backend.error.command_required": "命令不能为空", "redis.backend.error.connect_attempt_failed": "第{{attempt}}次连接失败:{{detail}}", "redis.backend.error.connect_failed": "Redis 连接失败:{{detail}}", "redis.backend.error.connect_tls_setup_failed": "第{{attempt}}次 TLS 配置失败:{{detail}}", + "redis.backend.error.invalid_node_address": "无效 Redis 节点地址:{{address}}", + "redis.backend.error.invalid_port": "无效 Redis 端口:{{address}}", + "redis.backend.error.node_address_required": "Redis 节点地址不能为空", "redis.backend.error.select_db_index_invalid": "无效数据库索引:{{value}}", "redis.backend.error.select_db_index_out_of_range": "数据库索引必须在 {{min}}-{{max}} 之间", "redis.backend.error.select_db_index_required": "SELECT 命令需要提供数据库索引", @@ -7165,13 +6255,144 @@ "redis.backend.label.topology_cluster": "集群", "redis.backend.label.topology_multi_node": "多节点", "redis.backend.label.topology_sentinel": "Sentinel", + "redis.backend.message.add_success": "添加成功", + "redis.backend.message.connect_success": "连接成功", + "redis.backend.message.delete_success": "删除成功", + "redis.backend.message.flush_success": "清空成功", + "redis.backend.message.rename_success": "重命名成功", + "redis.backend.message.select_db_success": "切换成功", + "redis.backend.message.set_success": "设置成功", + "redis.db_alias.menu.set": "设置别名", + "redis.db_alias.modal.placeholder": "例如:缓存、会话(留空则清除)", + "redis.db_alias.modal.title": "{{db}} 的别名", + "saved_query.default_name": "查询-{{index}}", "saved_query.error.missing_context": "保存查询缺少 SQL、连接或数据库上下文", + "security_update.action.open_ai_settings": "AI 设置", + "security_update.action.open_connection": "打开连接", + "security_update.action.open_proxy_settings": "代理设置", + "security_update.action.retry_update": "重新检查", + "security_update.action.view_details": "查看详情", + "security_update.backend.issue.ai_provider.migration_required": "AI 提供商配置仍保存在当前应用配置中,完成安全更新后会迁入新的安全存储。", + "security_update.backend.issue.ai_provider.missing_or_resave": "AI 提供商配置已不存在或仍需重新保存后才能完成安全更新。", + "security_update.backend.issue.ai_provider.secret_missing": "AI 提供商配置需要补充后才能完成安全更新。", + "security_update.backend.issue.connection.incomplete": "连接配置仍需补充后才能完成安全更新。", + "security_update.backend.issue.connection.missing_or_resave": "连接配置已不存在或仍需重新保存后才能完成安全更新。", + "security_update.backend.issue.connection.password_missing": "连接密码已丢失,请重新保存后再继续。", + "security_update.backend.issue.global_proxy.missing_or_resave": "全局代理配置已不存在或仍需重新保存后才能完成安全更新。", + "security_update.backend.issue.global_proxy.password_incomplete": "全局代理密码仍需补充后才能完成安全更新。", + "security_update.backend.issue.global_proxy.password_missing": "全局代理密码已丢失,请重新保存后再继续。", + "security_update.backend.issue.global_proxy.title": "全局代理", + "security_update.backend.issue.system.message": "当前环境无法完成本次安全更新,请稍后重试。", + "security_update.backend.issue.system.title": "安全更新未完成", + "security_update.banner.action.restart_update": "重新开始更新", + "security_update.banner.action.retry_check": "重新检查", + "security_update.banner.action.start_now": "立即更新", + "security_update.banner.action.view_details": "查看详情", + "security_update.banner.title": "已保存配置可进行安全更新", + "security_update.bootstrap.legacy.connection.message": "该连接仍保存在当前应用的本地配置中,完成安全更新后会迁入新的安全存储。", + "security_update.bootstrap.legacy.global_proxy.message": "全局代理仍保存在当前应用的本地配置中,完成安全更新后会迁入新的安全存储。", + "security_update.bootstrap.legacy.global_proxy.title": "全局代理", + "security_update.error.capability_unavailable": "安全更新能力不可用", + "security_update.intro.action.details": "查看详情", + "security_update.intro.action.later": "稍后提醒我", + "security_update.intro.action.start_now": "立即更新", + "security_update.intro.description": "为了让已保存的连接、代理和相关服务配置使用新的安全存储方式,本次更新需要进行一次本地配置更新。更新前会自动创建本地备份;如果本次未完成,系统会保留当前可用配置,你也可以稍后继续。", + "security_update.intro.subtitle": "使用新的安全存储方式前,需要先完成一次本地配置更新。", + "security_update.intro.title": "已保存配置安全更新", + "security_update.item_status.failed": "失败", + "security_update.item_status.needs_attention": "待处理", + "security_update.item_status.pending": "待更新", + "security_update.item_status.skipped": "已跳过", + "security_update.item_status.updated": "已更新", + "security_update.progress.default_detail": "更新过程中会保留当前可用配置,请稍候。", + "security_update.repair.warning.connection_not_found": "未找到对应连接,请先重新检查最新状态", + "security_update.settings.action.close": "关闭", + "security_update.settings.action.restart_update": "重新开始更新", + "security_update.settings.action.retry_check": "重新检查", + "security_update.settings.action.start": "开始更新", + "security_update.settings.backup_path": "备份位置:", + "security_update.settings.current_status": "当前状态:{{status}}", + "security_update.settings.empty_pending": "当前没有待处理项", + "security_update.settings.item_default_message": "当前项需要进一步处理后才能完成安全更新。", + "security_update.settings.item_severity": "级别:{{severity}}", + "security_update.settings.item_status": "状态:{{status}}", + "security_update.settings.last_error": "最近错误:", + "security_update.settings.pending_list": "待处理清单", + "security_update.settings.recent_result": "最近一次结果", + "security_update.settings.scope_title": "影响范围", + "security_update.settings.subtitle": "管理已保存配置的安全更新状态与待处理项。", + "security_update.settings.summary.failed": "失败", + "security_update.settings.summary.pending": "待处理", + "security_update.settings.summary.skipped": "已跳过", + "security_update.settings.summary.total": "总计", + "security_update.settings.summary.updated": "已更新", + "security_update.settings.title": "安全更新", + "security_update.severity.high": "高风险", + "security_update.severity.low": "低风险", + "security_update.severity.medium": "中风险", + "security_update.status.completed.description": "已保存配置已完成安全更新。", + "security_update.status.completed.label": "已完成", + "security_update.status.in_progress.description": "正在检查并更新已保存配置的安全存储。", + "security_update.status.in_progress.label": "更新中", + "security_update.status.needs_attention.description": "更新尚未完成,有少量配置需要你处理。", + "security_update.status.needs_attention.label": "待处理", + "security_update.status.not_detected.description": "当前没有需要处理的安全更新。", + "security_update.status.not_detected.label": "未检测到", + "security_update.status.pending.description": "检测到可进行的安全更新,你可以现在开始或稍后继续。", + "security_update.status.pending.label": "待更新", + "security_update.status.postponed.description": "本次安全更新已延后,当前可用配置会继续保留。", + "security_update.status.postponed.label": "待更新", + "security_update.status.rolled_back.description": "本次更新未完成,系统已保留当前可用配置。", + "security_update.status.rolled_back.label": "已回退", + "settings.language.description": "选择 GoNavi 的界面语言。", + "settings.language.english": "English", + "settings.language.follow_system": "跟随系统", + "settings.language.german": "Deutsch", + "settings.language.japanese": "日本語", + "settings.language.restart_hint": "部分编辑器和系统级菜单可能需要重新打开窗口后完全生效。", + "settings.language.russian": "Русский", + "settings.language.simplified_chinese": "简体中文", + "settings.language.title": "语言", + "settings.language.traditional_chinese": "繁體中文", + "settings.title": "设置", + "sidebar.action.backup_database_count": "备份库({{count}})", + "sidebar.action.backup_schema_data": "备份(结构+数据)", + "sidebar.action.batch_databases": "批量处理数据库", + "sidebar.action.batch_tables": "批量处理表", + "sidebar.action.cancel": "取消", + "sidebar.action.clear_selection": "取消全选", + "sidebar.action.clear_tables": "清空表", + "sidebar.action.close": "关闭", + "sidebar.action.continue": "继续", + "sidebar.action.delete": "删除", + "sidebar.action.export_data_only": "仅数据(INSERT)", + "sidebar.action.export_database_schema_count": "导出库结构({{count}})", + "sidebar.action.export_schema": "导出结构", + "sidebar.action.invert_selection": "反选", "sidebar.action.locate_current_tab": "定位当前标签页", + "sidebar.action.locate_current_table": "定位当前打开表", + "sidebar.action.new_group": "新建分组", + "sidebar.action.pin_table": "置顶表", + "sidebar.action.select_all": "全选", + "sidebar.action.unpin_table": "取消置顶", + "sidebar.active_connection.actions": "连接操作", + "sidebar.active_connection.current_host_database": "当前 Host 与数据库", + "sidebar.active_connection.no_database_selected": "未选择数据库", + "sidebar.active_connection.no_host_selected": "未选择 Host", "sidebar.ai_prompt.explain.detail": "重点说明字段含义、主键/索引、潜在关联关系、典型查询场景和风险点。", "sidebar.ai_prompt.explain.intro": "请解释数据表 {{table}} 的结构和业务含义。", "sidebar.ai_prompt.query.detail": "要求包含:数据预览查询、按关键字段过滤查询、一个聚合或统计查询。", "sidebar.ai_prompt.query.intro": "请基于数据表 {{table}} 生成 3 条常用查询 SQL。", "sidebar.aria.switch_connection": "切换到连接 {{name}}", + "sidebar.badge.recommended": "推荐", + "sidebar.batch_databases": "数据库", + "sidebar.batch_tables": "表", + "sidebar.batch.filtered_count": "已筛选 {{filtered}} / {{total}} 个对象", + "sidebar.batch.group.tables": "表", + "sidebar.batch.group.views": "视图", + "sidebar.batch.no_matching_objects": "无匹配对象", + "sidebar.batch.selected_databases": "已选择 {{selected}} / {{total}} 个数据库", + "sidebar.batch.selected_objects": "已选择 {{selected}} / {{total}} 个对象", "sidebar.command_search.action.ask_ai.title": "让 AI 回答", "sidebar.command_search.action.new_connection.meta": "创建数据库、运行时或其他数据源连接", "sidebar.command_search.action.new_connection.title": "新建数据源", @@ -7187,49 +6408,480 @@ "sidebar.command_search.footer.navigate": "导航", "sidebar.command_search.footer.object_only": "只搜表对象", "sidebar.command_search.footer.select": "选择", + "sidebar.command_search.label": "搜索表、连接、动作", + "sidebar.command_search.no_filter_content": "没有筛选内容", + "sidebar.command_search.no_synced_filter": "没有已同步的侧栏筛选", + "sidebar.command_search.object_kind.all": "全部", + "sidebar.command_search.object_kind.events": "事件", + "sidebar.command_search.object_kind.filter_aria": "对象筛选", + "sidebar.command_search.object_kind.routines": "函数", + "sidebar.command_search.object_kind.tables": "表", + "sidebar.command_search.object_kind.views": "视图", + "sidebar.command_search.placeholder": "搜索表、连接、动作... 或问 AI", "sidebar.command_search.recent_sql_fallback": "SQL 记录", + "sidebar.command_search.reset_filter": "重置侧栏筛选", + "sidebar.command_search.scope.compact_smart": "智", + "sidebar.command_search.scope.database": "库", + "sidebar.command_search.scope.description": "“智能”自动匹配最可能的命中项;手动模式支持按维度组合筛选。", + "sidebar.command_search.scope.host": "Host", + "sidebar.command_search.scope.manual_help": "智能与其他项互斥。若你明确知道要搜的是对象、库、Host 或标签,建议切到手动范围以减少噪音结果。", + "sidebar.command_search.scope.manual_title": "手动范围", + "sidebar.command_search.scope.multi_select": "支持多选组合", + "sidebar.command_search.scope.object": "表对象", + "sidebar.command_search.scope.recommended": "推荐", + "sidebar.command_search.scope.smart": "智能", + "sidebar.command_search.scope.smart_help": "适合日常检索,自动覆盖名称、库、Host 和标签等高频维度。", + "sidebar.command_search.scope.summary_smart": "智能", + "sidebar.command_search.scope.tag": "标签", + "sidebar.command_search.scope.title": "搜索范围", + "sidebar.command_search.scope.tooltip": "搜索范围:{{scope}}", "sidebar.command_search.section.actions": "动作", "sidebar.command_search.section.ai": "AI · 提问", "sidebar.command_search.section.goto": "跳转", "sidebar.command_search.section.recent": "近期查询", + "sidebar.command_search.sync_to_filter_aria": "同步到左侧筛选", + "sidebar.command_search.sync_to_filter_tooltip": "同步输入内容到左侧筛选", + "sidebar.copy_object_name.copied": "{{label}}已复制到剪贴板", + "sidebar.copy_object_name.empty": "{{label}}为空,无法复制", + "sidebar.copy_object_name.failed": "复制{{label}}失败: {{error}}", + "sidebar.copy_object_name.label.event": "事件名称", + "sidebar.copy_object_name.label.materialized_view": "物化视图名称", + "sidebar.copy_object_name.label.table": "表名", + "sidebar.copy_object_name.label.view": "视图名称", + "sidebar.error.unknown": "未知错误", + "sidebar.external_sql_modal.action.create": "新建", + "sidebar.external_sql_modal.action.rename": "重命名", + "sidebar.external_sql_modal.field.directory_name": "目录名", + "sidebar.external_sql_modal.field.sql_file_name": "SQL 文件名", + "sidebar.external_sql_modal.help.directory": "目录只会显示在外部 SQL 目录树中,非 SQL 文件仍不会显示", + "sidebar.external_sql_modal.help.sql_file": "不输入 .sql 后缀时会自动补齐", + "sidebar.external_sql_modal.placeholder.directory_name": "例如:reports", + "sidebar.external_sql_modal.placeholder.sql_file_name": "例如:report.sql", + "sidebar.external_sql_modal.title.create_directory": "新建目录", + "sidebar.external_sql_modal.title.create_file": "新建 SQL 文件", + "sidebar.external_sql_modal.title.rename_directory": "重命名目录", + "sidebar.external_sql_modal.title.rename_file": "重命名 SQL 文件", + "sidebar.external_sql_modal.validation.directory_name_no_separator": "目录名不能包含路径分隔符", + "sidebar.external_sql_modal.validation.directory_name_required": "请输入目录名", + "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "文件名不能包含路径分隔符", + "sidebar.external_sql_modal.validation.sql_file_name_required": "请输入 SQL 文件名", + "sidebar.external_sql.directory_fallback": "SQL 目录", + "sidebar.external_sql.root": "外部 SQL 文件", + "sidebar.field.database_name": "数据库名称", + "sidebar.field.new_database_name": "新数据库名称", + "sidebar.field.new_table_name": "新表名", + "sidebar.field.new_view_name": "新视图名称", + "sidebar.field.schema_name": "模式名称", + "sidebar.field.select_connection": "选择连接", + "sidebar.field.select_connections": "选择连接", + "sidebar.field.select_database": "选择数据库", + "sidebar.field.tag_name": "分组名称", + "sidebar.filter.all_objects": "全部对象", + "sidebar.filter.scope_all": "勾选作用于:全部对象", + "sidebar.filter.scope_filtered": "勾选作用于:当前筛选结果", + "sidebar.filter.tables_only": "仅表", + "sidebar.filter.views_only": "仅视图", + "sidebar.jvm.action.diagnostic": "诊断增强", + "sidebar.jvm.action.monitoring": "持续监控", + "sidebar.jvm.tab.audit": "JVM 审计", + "sidebar.jvm.tab.diagnostic": "JVM 诊断", + "sidebar.jvm.tab.monitoring": "JVM 监控", + "sidebar.jvm.tab.overview": "JVM 概览", + "sidebar.jvm.tab.resource": "JVM 资源", + "sidebar.locate.object.materialized_view": "物化视图", + "sidebar.locate.object.routine": "函数/存储过程", + "sidebar.locate.object.table": "表", + "sidebar.locate.object.trigger": "触发器", + "sidebar.locate.object.view": "视图", + "sidebar.menu.add_sql_directory": "添加 SQL 目录", + "sidebar.menu.backup_all_tables_sql": "备份全部表(结构和数据 SQL)", "sidebar.menu.backup_current_schema_sql": "备份当前模式全部表(结构和数据 SQL)", + "sidebar.menu.backup_table_sql": "备份表(SQL)", "sidebar.menu.bind_to_connection": "绑定到连接", + "sidebar.menu.browse_keys": "浏览键", + "sidebar.menu.browse_materialized_view_data": "浏览物化视图数据", + "sidebar.menu.browse_view_data": "浏览视图数据", + "sidebar.menu.clear_table": "清空表", + "sidebar.menu.close_database": "关闭数据库", "sidebar.menu.copy_object_name": "复制名称", "sidebar.menu.copy_table_name": "复制表名", + "sidebar.menu.copy_table_structure": "复制表结构", + "sidebar.menu.create_database": "创建数据库", "sidebar.menu.create_event": "新建事件", + "sidebar.menu.create_function": "创建函数", + "sidebar.menu.create_procedure": "创建存储过程", + "sidebar.menu.create_table": "创建表", + "sidebar.menu.create_view": "创建视图", + "sidebar.menu.danger_operations": "危险操作", + "sidebar.menu.delete_connection": "删除连接", + "sidebar.menu.delete_database": "删除数据库", + "sidebar.menu.delete_local_directory": "删除本地目录", + "sidebar.menu.delete_query": "删除查询", + "sidebar.menu.delete_routine": "删除{{type}}", "sidebar.menu.delete_schema": "删除模式", + "sidebar.menu.delete_sql_directory": "删除目录", + "sidebar.menu.delete_sql_file": "删除 SQL 文件", + "sidebar.menu.delete_table": "删除表", + "sidebar.menu.delete_tag": "删除分组", + "sidebar.menu.delete_view": "删除视图", + "sidebar.menu.design_table": "设计表", + "sidebar.menu.disconnect": "断开连接", + "sidebar.menu.duplicate_connection": "复制连接", + "sidebar.menu.edit_connection": "编辑连接", + "sidebar.menu.edit_definition": "编辑定义", "sidebar.menu.edit_schema": "编辑模式", + "sidebar.menu.edit_tag": "编辑分组", + "sidebar.menu.edit_view": "编辑视图", + "sidebar.menu.export_all_table_schema_sql": "导出全部表结构(SQL)", + "sidebar.menu.export_csv": "导出 CSV", "sidebar.menu.export_current_schema_sql": "导出当前模式表结构(SQL)", + "sidebar.menu.export_html": "导出 HTML", + "sidebar.menu.export_json": "导出 JSON", + "sidebar.menu.export_markdown": "导出 Markdown", + "sidebar.menu.export_table_data": "导出表数据", + "sidebar.menu.export_xlsx": "导出 XLSX", + "sidebar.menu.materialized_view_definition": "物化视图定义", + "sidebar.menu.move_out_of_tag": "移出分组", + "sidebar.menu.move_to_tag": "移动到分组", + "sidebar.menu.new_command_window": "新建命令窗口", + "sidebar.menu.new_query": "新建查询", + "sidebar.menu.new_sql_directory": "新建目录", + "sidebar.menu.new_sql_directory_in_directory": "在此目录新建目录", + "sidebar.menu.new_sql_file": "新建 SQL 文件", + "sidebar.menu.new_sql_file_in_directory": "在此目录新建 SQL 文件", "sidebar.menu.new_table": "新建表", + "sidebar.menu.open_query": "打开查询", + "sidebar.menu.open_sql_file": "打开 SQL 文件", + "sidebar.menu.redis_monitor": "Redis 监控", + "sidebar.menu.refresh": "刷新", + "sidebar.menu.refresh_directory": "刷新目录", + "sidebar.menu.remove_directory": "移除目录", + "sidebar.menu.rename_database": "重命名数据库", + "sidebar.menu.rename_query": "重命名查询", + "sidebar.menu.rename_sql_directory": "重命名目录", + "sidebar.menu.rename_sql_file": "重命名 SQL 文件", + "sidebar.menu.rename_table": "重命名表", + "sidebar.menu.rename_view": "重命名视图", + "sidebar.menu.sort_by_frequency": "按使用频率排序", + "sidebar.menu.sort_by_name": "按名称排序", "sidebar.menu.table_structure": "表结构", + "sidebar.menu.truncate_table": "截断表", + "sidebar.menu.view_definition": "视图定义", + "sidebar.menu.view_object_definition": "查看定义", + "sidebar.menu.view_routine_definition": "视图例程定义", + "sidebar.message.add_sql_directory_database_required": "请先选择数据库,再添加 SQL 目录。", "sidebar.message.ai_table_context_missing": "当前表缺少连接上下文,无法发送给 AI", + "sidebar.message.backing_up_database": "正在备份 {{database}}...", + "sidebar.message.backing_up_selected_objects": "正在备份 {{count}} 个已选对象...", + "sidebar.message.backing_up_selected_tables": "正在备份 {{count}} 个已选表...", + "sidebar.message.clear_failed": "清空失败:{{error}}", + "sidebar.message.clear_success": "清空成功。", + "sidebar.message.clearing_selected_tables": "正在清空 {{count}} 个已选表...", + "sidebar.message.connection_config_not_found": "未找到连接配置。", + "sidebar.message.connection_deleted": "连接已删除。", + "sidebar.message.connection_failed": "连接失败:{{error}}", "sidebar.message.connection_release_failed": "释放连接失败", "sidebar.message.connection_release_failed_from_sidebar": "连接已从侧边栏断开,但后端连接释放失败", + "sidebar.message.create_failed": "创建失败:{{error}}", + "sidebar.message.create_sql_directory_failed": "新建目录失败:{{error}}", + "sidebar.message.create_sql_file_failed": "新建 SQL 文件失败:{{error}}", + "sidebar.message.database_closed": "数据库已关闭。", + "sidebar.message.database_created": "数据库已创建。", + "sidebar.message.database_deleted": "数据库已删除。", + "sidebar.message.database_export_failed": "导出 {{database}} 失败:{{error}}", + "sidebar.message.database_export_success": "已导出 {{database}}。", + "sidebar.message.database_name_required": "请输入数据库名称。", + "sidebar.message.database_name_unchanged": "数据库名称未变化。", + "sidebar.message.database_renamed": "数据库已重命名。", + "sidebar.message.delete_connection_backend_unavailable": "删除连接后端不可用。", + "sidebar.message.delete_connection_failed": "删除连接失败。", + "sidebar.message.delete_failed": "删除失败:{{error}}", + "sidebar.message.delete_sql_directory_failed": "删除 SQL 目录失败:{{error}}", + "sidebar.message.delete_sql_file_failed": "删除 SQL 文件失败:{{error}}", + "sidebar.message.disconnected": "已断开。", + "sidebar.message.duplicate_backend_unavailable": "当前版本不支持复制连接。", + "sidebar.message.duplicate_empty_result": "未返回复制后的连接。", + "sidebar.message.duplicate_failed": "复制连接失败。", + "sidebar.message.duplicated_connection": "已复制连接 {{name}}。", + "sidebar.message.export_failed": "导出失败:{{error}}", + "sidebar.message.export_success": "导出成功。", + "sidebar.message.export_success_skipped_views": "导出成功。已跳过 {{count}} 个视图的数据导出。", + "sidebar.message.export_tables_same_database_required": "请选择同一数据库下的表。", + "sidebar.message.exporting_database_backup": "正在备份 {{database}}(结构+数据)...", + "sidebar.message.exporting_database_schema": "正在导出 {{database}} 的结构...", + "sidebar.message.exporting_schema_backup": "正在备份模式 {{schema}}(结构+数据)...", + "sidebar.message.exporting_schema_structure": "正在导出模式 {{schema}} 的结构...", + "sidebar.message.exporting_selected_object_data": "正在导出 {{count}} 个已选对象的数据({{format}})...", + "sidebar.message.exporting_selected_object_schema": "正在导出 {{count}} 个已选对象的结构...", + "sidebar.message.exporting_selected_table_schema": "正在导出 {{count}} 个已选表的结构...", + "sidebar.message.exporting_table_format": "正在将 {{table}} 导出为 {{format}}...", + "sidebar.message.external_sql_directory_added": "外部 SQL 目录已添加。", + "sidebar.message.external_sql_directory_context_missing": "SQL 目录上下文缺失。", + "sidebar.message.external_sql_directory_delete_target_missing": "未找到可删除的 SQL 目录。", + "sidebar.message.external_sql_directory_not_found": "未找到 SQL 目录。", + "sidebar.message.external_sql_directory_parent_missing": "未找到可新建目录的位置。", + "sidebar.message.external_sql_directory_read_failed": "读取 SQL 目录 {{name}} 失败:{{error}}", + "sidebar.message.external_sql_directory_refreshed": "外部 SQL 目录已刷新。", + "sidebar.message.external_sql_directory_removed": "外部 SQL 目录已移除。", + "sidebar.message.external_sql_directory_rename_sync_failed": "目录已重命名,但无法同步外部 SQL 目录列表,请重新添加目录。", + "sidebar.message.external_sql_directory_rename_target_missing": "未找到可重命名的目录。", + "sidebar.message.external_sql_file_delete_target_missing": "未找到可删除的 SQL 文件。", + "sidebar.message.external_sql_file_parent_missing": "未找到可新建 SQL 文件的目录。", + "sidebar.message.external_sql_file_rename_target_missing": "未找到可重命名的 SQL 文件。", + "sidebar.message.jvm_provider_probe_exception": "JVM 提供方探测失败:{{error}}", + "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "JVM Provider 探测异常:{{error}};已保留诊断增强入口", + "sidebar.message.jvm_provider_probe_failed": "探测 JVM 提供方失败:{{error}}", + "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "JVM Provider 探测失败:{{error}};已保留诊断增强入口", + "sidebar.message.jvm_resources_backend_unavailable": "JVM 资源后端不可用。", + "sidebar.message.load_database_list_failed": "加载数据库失败:{{error}}", + "sidebar.message.load_jvm_resources_failed": "加载 JVM 资源失败:{{error}}", + "sidebar.message.load_table_list_failed": "加载表失败:{{error}}", + "sidebar.message.load_tables_failed": "加载对象失败:{{error}}", + "sidebar.message.locate_connection_not_found_for_object": "未找到当前对象对应的连接", + "sidebar.message.locate_connection_not_in_tree": "未在左侧树找到当前连接", "sidebar.message.locate_current_tab_unavailable": "当前标签页没有可定位的内容", + "sidebar.message.locate_current_table_unavailable": "当前标签页没有可定位的表", + "sidebar.message.locate_database_loading": "数据库节点仍在加载中:{{database}},请稍后再试", + "sidebar.message.locate_database_not_found": "未在左侧树找到数据库:{{database}}", + "sidebar.message.locate_external_sql_file_not_found": "未在外部 SQL 目录中找到 SQL 文件:{{path}}", + "sidebar.message.locate_object_loading": "{{object}}所在数据库对象仍在加载中:{{database}},请稍后再试", + "sidebar.message.locate_object_not_found": "{{object}}未在左侧树中找到:{{name}},请刷新数据库节点后重试", "sidebar.message.message_publish_success": "测试消息已发送到 {{destination}}", "sidebar.message.message_publish_success_with_count": "测试消息已发送到 {{destination}}(已提交 {{count}} 条)", "sidebar.message.message_publish_target_fallback": "目标", "sidebar.message.message_publish_unsupported": "当前对象不支持测试发送消息", + "sidebar.message.no_visible_databases": "未返回可见数据库或结构。请检查账号权限,或从右键菜单刷新。", + "sidebar.message.operation_create_failed": "创建失败:{{error}}", + "sidebar.message.operation_drop_failed": "删除失败:{{error}}", + "sidebar.message.operation_rename_failed": "重命名失败:{{error}}", + "sidebar.message.read_file_failed": "读取文件失败:{{error}}", + "sidebar.message.read_sql_file_failed": "读取 SQL 文件失败:{{error}}", + "sidebar.message.rename_failed": "重命名失败:{{error}}", + "sidebar.message.rename_sql_directory_failed": "重命名目录失败:{{error}}", + "sidebar.message.rename_sql_file_failed": "重命名 SQL 文件失败:{{error}}", + "sidebar.message.routine_deleted": "{{type}} 已删除。", "sidebar.message.saved_query_delete_failed": "删除查询失败:{{error}}", + "sidebar.message.saved_query_deleted": "已存查询已删除。", + "sidebar.message.saved_query_name_unchanged": "新旧查询名称相同,无需修改。", "sidebar.message.saved_query_rebind_failed": "绑定查询失败:{{error}}", "sidebar.message.saved_query_rebind_success": "查询已绑定到 {{name}}", "sidebar.message.saved_query_rename_failed": "重命名查询失败:{{error}}", + "sidebar.message.saved_query_renamed": "查询已重命名。", + "sidebar.message.schema_create_unsupported": "当前数据库不支持创建 schema。", + "sidebar.message.schema_created": "schema 创建成功。", "sidebar.message.schema_deleted": "模式已删除。", "sidebar.message.schema_edit_unsupported": "当前节点不支持通过此入口编辑模式。", + "sidebar.message.schema_export_target_missing": "未找到目标模式,无法导出。", "sidebar.message.schema_name_unchanged": "模式名称未变化。", "sidebar.message.schema_renamed": "模式已重命名。", "sidebar.message.schema_target_delete_missing": "未找到目标模式,无法删除。", "sidebar.message.schema_target_edit_missing": "未找到目标模式,无法编辑。", + "sidebar.message.schema_target_missing": "请选择要创建 schema 的数据库。", + "sidebar.message.select_connection_or_database_first": "请先选择连接或数据库。", + "sidebar.message.select_database_required": "请至少选择一个数据库。", + "sidebar.message.select_host_before_large_sql_file": "请先选择一个 Host 后再执行大 SQL 文件。", + "sidebar.message.select_object_required": "请至少选择一个对象。", + "sidebar.message.select_sql_directory_failed": "选择 SQL 目录失败:{{error}}", + "sidebar.message.sidebar_filter_reset": "已重置侧栏筛选。", + "sidebar.message.sidebar_filter_sync_disabled": "已关闭左侧筛选同步。", + "sidebar.message.sidebar_filter_sync_enabled": "已开启左侧筛选同步。", + "sidebar.message.sphinx_unsupported_objects": "此 Sphinx 实例不支持这些对象能力:{{objects}}。已启用兼容模式。", + "sidebar.message.sql_directory_created": "目录已新建。", + "sidebar.message.sql_directory_deleted": "SQL 目录已删除。", + "sidebar.message.sql_directory_name_required": "目录名不能为空。", + "sidebar.message.sql_directory_path_invalid": "SQL 目录路径无效。", + "sidebar.message.sql_directory_renamed": "目录已重命名。", + "sidebar.message.sql_file_context_incomplete": "SQL 文件上下文不完整。", + "sidebar.message.sql_file_created": "SQL 文件已新建。", + "sidebar.message.sql_file_deleted": "SQL 文件已删除。", + "sidebar.message.sql_file_name_required": "SQL 文件名不能为空。", + "sidebar.message.sql_file_path_incomplete": "SQL 文件路径不完整,无法打开。", + "sidebar.message.sql_file_renamed": "SQL 文件已重命名。", + "sidebar.message.table_data_action_failed": "{{action}} 失败:{{error}}", + "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", + "sidebar.message.table_data_action_success": "{{action}} 已完成。", + "sidebar.message.table_deleted": "表已删除。", + "sidebar.message.table_name_required": "请输入表名。", + "sidebar.message.table_name_unchanged": "表名称未变化。", + "sidebar.message.table_pinned": "已置顶表", + "sidebar.message.table_renamed": "表已重命名。", + "sidebar.message.table_structure_copied": "表结构已复制。", + "sidebar.message.table_unpinned": "已取消置顶", + "sidebar.message.view_deleted": "视图已删除。", + "sidebar.message.view_name_required": "请输入视图名称。", + "sidebar.message.view_name_unchanged": "视图名称未变化。", + "sidebar.message.view_renamed": "视图已重命名。", + "sidebar.message.visual_new_table_unsupported": "当前数据源暂不支持可视化新建表。", + "sidebar.modal.batch_databases.description": "按数据库批量导出结构,或生成结构加数据的备份。", + "sidebar.modal.batch_databases.selection_hint": "连接选定后会加载当前连接下可批量导出的数据库列表。", + "sidebar.modal.batch_databases.title": "批量操作库", + "sidebar.modal.batch_tables.description": "按对象批量导出结构、数据或完整备份。", + "sidebar.modal.batch_tables.selection_hint": "先选择连接与数据库,再决定导出范围和目标对象。", + "sidebar.modal.batch_tables.title": "批量操作表", + "sidebar.modal.confirm_clear_selected_tables.content": "清空 {{connection}} / {{database}} 下已选对象的数据?此操作不可撤销。", + "sidebar.modal.confirm_clear_selected_tables.title": "确认清空已选表", + "sidebar.modal.confirm_delete_connection.content": "删除连接 {{name}}?", + "sidebar.modal.confirm_delete_database.content": "删除 {{name}}?此操作不可撤销。", + "sidebar.modal.confirm_delete_database.title": "删除数据库", + "sidebar.modal.confirm_delete_routine.content": "删除 {{type}} {{name}}?此操作不可撤销。", + "sidebar.modal.confirm_delete_routine.title": "删除 {{type}}", + "sidebar.modal.confirm_delete_saved_query.content": "确定要删除已保存的查询 \"{{name}}\" 吗?此操作不可恢复。", "sidebar.modal.confirm_delete_schema.content": "删除模式 {{name}}?该模式及其中所有对象都会被删除,此操作不可撤销。", "sidebar.modal.confirm_delete_schema.title": "删除模式", + "sidebar.modal.confirm_delete_sql_directory.content": "删除 \"{{name}}\"?此操作会删除本地磁盘目录,且仅支持删除空目录。", + "sidebar.modal.confirm_delete_sql_directory.title": "删除 SQL 目录", + "sidebar.modal.confirm_delete_sql_file.content": "删除 \"{{name}}\"?此操作会删除本地磁盘文件,无法恢复。", + "sidebar.modal.confirm_delete_sql_file.title": "删除 SQL 文件", + "sidebar.modal.confirm_delete_table.content": "删除 {{name}}?此操作不可撤销。", + "sidebar.modal.confirm_delete_table.title": "删除表", + "sidebar.modal.confirm_delete_tag.content": "确定要删除分组 \"{{name}}\" 吗?这不会删除其中的连接。", + "sidebar.modal.confirm_delete_view.content": "删除 {{name}}?此操作不可撤销。", + "sidebar.modal.confirm_delete_view.title": "删除视图", + "sidebar.modal.confirm_delete.title": "确认删除", + "sidebar.modal.confirm_table_data_action.content": "{{action}} {{table}}?此操作不可撤销。", + "sidebar.modal.confirm_table_data_action.title": "确认 {{action}}", + "sidebar.modal.create_database.title": "创建数据库", + "sidebar.modal.rename_database.title": "重命名数据库:{{name}}", "sidebar.modal.rename_schema.title": "编辑模式:{{name}}", + "sidebar.modal.rename_table.title": "重命名表:{{name}}", + "sidebar.modal.rename_view.title": "重命名视图:{{name}}", + "sidebar.modal.tag.create_description": "创建分组以整理连接。", + "sidebar.modal.tag.create_title": "新建分组", + "sidebar.modal.tag.edit_description": "更新分组名称和包含的连接。", + "sidebar.modal.tag.edit_title": "编辑分组", + "sidebar.object_group.events": "事件", + "sidebar.object_group.materialized_views": "物化视图", + "sidebar.object_group.routines": "函数和存储过程", + "sidebar.object_group.tables": "表", + "sidebar.object_group.triggers": "触发器", + "sidebar.object_group.views": "视图", + "sidebar.object.function": "函数", + "sidebar.object.procedure": "存储过程", + "sidebar.object.view": "视图", + "sidebar.placeholder.filter_table_view": "筛选表或视图", + "sidebar.placeholder.select_connection": "请选择连接", + "sidebar.placeholder.select_connection_first": "请先选择连接", + "sidebar.placeholder.tag_name": "分组名称", + "sidebar.punctuation.list_separator": "、", + "sidebar.rail.object_actions": "对象区快捷操作", + "sidebar.rail.system_actions": "系统操作", + "sidebar.search.manual_scope": "手动范围", + "sidebar.search.multi_select_supported": "支持多选", + "sidebar.search.placeholder": "搜索...", + "sidebar.search.scope_description": "选择侧边栏搜索的匹配范围。", + "sidebar.search.scope_hint": "智能模式会根据上下文搜索名称、主机、数据库和对象。", + "sidebar.search.scope_title": "搜索范围", + "sidebar.search.scope_tooltip": "当前搜索范围:{{scope}}", + "sidebar.search.scope.database": "数据库", + "sidebar.search.scope.host": "主机", + "sidebar.search.scope.object": "对象", + "sidebar.search.scope.smart": "智能", + "sidebar.search.scope.smart_description": "根据当前选中的节点自动缩小搜索范围。", + "sidebar.search.scope.smart_short": "智能", + "sidebar.search.scope.tag": "标签", + "sidebar.sql_directory.default_name": "SQL 目录", + "sidebar.sql_file_exec.cancel": "取消执行", + "sidebar.sql_file_exec.executed_label": "已执行:", + "sidebar.sql_file_exec.file_size": "文件大小:", + "sidebar.sql_file_exec.rows_separator": " 行 | 失败:", + "sidebar.sql_file_exec.rows_suffix": " 行", + "sidebar.sql_file_exec.status_label": "状态:", + "sidebar.sql_file_exec.status.cancelled": "已中止", + "sidebar.sql_file_exec.status.done": "完成", + "sidebar.sql_file_exec.status.error": "错误", + "sidebar.sql_file_exec.status.running": "运行中", + "sidebar.sql_file_exec.title": "运行外部 SQL 文件", + "sidebar.sql_file.default_name": "SQL 文件", + "sidebar.sql_template.duckdb_macro_hint": "使用 SQL Macro 实现类似函数的行为", + "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB 暂不支持存储过程", + "sidebar.sql_template.edit_routine": "编辑 {{type}} {{name}}", + "sidebar.sql_template.edit_view": "编辑视图 {{name}}", + "sidebar.sql_template.modify_then_execute": "修改并执行", + "sidebar.status.pinned": "已置顶", + "sidebar.tab.create_function": "创建函数", + "sidebar.tab.create_procedure": "创建存储过程", + "sidebar.tab.create_view": "创建视图", + "sidebar.tab.design_table": "设计表({{table}})", + "sidebar.tab.edit_event": "编辑事件:{{name}}", + "sidebar.tab.edit_routine": "编辑 {{type}}:{{name}}", + "sidebar.tab.edit_view": "编辑视图:{{name}}", + "sidebar.tab.event": "事件:{{name}}", + "sidebar.tab.materialized_view_definition": "物化视图:{{name}}", "sidebar.tab.new_event": "新建事件", + "sidebar.tab.new_query": "新建查询", + "sidebar.tab.new_query_database": "新建查询({{database}})", + "sidebar.tab.new_table": "新建表 - {{database}}", "sidebar.tab.recent_query": "最近查询", + "sidebar.tab.redis_command": "命令 - {{database}}", + "sidebar.tab.redis_monitor": "监控 - {{database}}", + "sidebar.tab.routine_definition": "{{type}}:{{name}}", + "sidebar.tab.table_overview": "表概览 - {{database}}{{schema}}", + "sidebar.tab.table_structure": "表结构({{table}})", + "sidebar.tab.trigger": "触发器:{{name}}", + "sidebar.tab.view_definition": "视图:{{name}}", + "sidebar.table_action.clear.label": "清空表", + "sidebar.table_action.clear.progress": "正在清空", + "sidebar.table_action.truncate.label": "截断表", + "sidebar.table_action.truncate.progress": "正在截断", + "sidebar.table_folder.columns": "列", + "sidebar.table_folder.foreign_keys": "外键", + "sidebar.table_folder.indexes": "索引", + "sidebar.table_folder.triggers": "触发器", + "sidebar.tree.all_saved_queries": "全部已存查询", + "sidebar.tree.default_database": "默认数据库", + "sidebar.tree.default_schema": "默认结构", + "sidebar.tree.saved_queries": "已存查询", + "sidebar.tree.unknown_connection": "未知连接", + "sidebar.tree.unmatched_saved_queries": "未匹配", + "sidebar.tree.untitled_query": "未命名查询", + "sidebar.v2_database_menu.backup_all_tables_sql": "备份全部表 · 结构 + 数据 SQL", + "sidebar.v2_database_menu.export_all_table_schema_sql": "导出全部表结构 · SQL", + "sidebar.v2_database_menu.export_backup_section": "导出与备份", + "sidebar.v2_database_menu.meta": "{{dialect}} · 数据库操作", + "sidebar.v2_database_menu.new_external_catalog": "新建外部 Catalog", + "sidebar.v2_database_menu.new_materialized_view": "新建物化视图", + "sidebar.v2_database_menu.new_schema": "新建模式", + "sidebar.v2_database_menu.refresh_object_tree": "刷新对象树", "sidebar.v2_schema_menu.backup_current_schema_sql": "备份当前模式全部表 · 结构 + 数据", "sidebar.v2_schema_menu.delete_schema_cascade": "删除模式 · DROP CASCADE", "sidebar.v2_schema_menu.edit_schema": "编辑模式", "sidebar.v2_schema_menu.export_current_schema_sql": "导出当前模式表结构 · SQL", "sidebar.v2_schema_menu.meta": "{{database}} · 模式操作", + "sidebar.v2_table_group_menu.current_database": "当前数据库", + "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} 张表 · 当前按{{sort}}排序", + "sidebar.v2_table_group_menu.sort_frequency": "使用频率", + "sidebar.v2_table_group_menu.sort_name": "名称", + "sidebar.v2_table_group_menu.title": "表", + "sidebar.v2_table_menu.ai_explain_table": "用 AI 解释这张表", + "sidebar.v2_table_menu.ai_generate_query": "用 AI 生成查询", + "sidebar.v2_table_menu.backup_sql_dump": "备份 · {{keyword}}", + "sidebar.v2_table_menu.copy_section": "复制", + "sidebar.v2_table_menu.copy_table_as_insert": "复制全表为 {{keyword}}", + "sidebar.v2_table_menu.copy_table_name": "复制表名", + "sidebar.v2_table_menu.design_table_detail": "字段 / 索引 / 外键", + "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", + "sidebar.v2_table_menu.maintenance_section": "维护", + "sidebar.v2_table_menu.meta.idle": "点击刷新统计信息读取", + "sidebar.v2_table_menu.meta.loading": "正在读取统计信息...", + "sidebar.v2_table_menu.meta.rows": "{{count}} 行", + "sidebar.v2_table_menu.meta.rows_empty": "— 行", + "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} 数据 · {{indexes}} 索引", + "sidebar.v2_table_menu.meta.unavailable": "统计信息不可用", + "sidebar.v2_table_menu.metadata_section": "元信息", + "sidebar.v2_table_menu.new_rollup": "新增 {{keyword}}", + "sidebar.v2_table_menu.open_data": "查看数据", + "sidebar.v2_table_menu.open_export_workbench": "打开导出工作台…", + "sidebar.v2_table_menu.open_in_new_tab": "在新标签打开", + "sidebar.v2_table_menu.refresh_stats": "刷新统计信息", + "sidebar.v2_table_menu.rename_compact": "重命名…", + "sidebar.v2_table_menu.truncate_table": "截断表", + "sidebar.v2_table_menu.view_in_er": "在 ER 图中查看", + "sidebar.validation.name_required": "请输入名称。", + "sidebar.validation.new_database_name_required": "请输入新数据库名称。", + "sidebar.validation.new_table_name_required": "请输入新表名。", + "sidebar.validation.new_view_name_required": "请输入新视图名称。", + "sidebar.validation.schema_name_required": "请输入模式名称。", + "sidebar.validation.tag_name_required": "请输入分组名称。", "snippet_settings.action.close": "关闭", "snippet_settings.action.delete": "删除", "snippet_settings.action.new": "新建片段", @@ -7307,6 +6959,66 @@ "store.fallback.connection_name": "连接-{{index}}", "store.fallback.connection_tag_name": "标签-{{index}}", "store.fallback.sql_snippet_name": "片段-{{index}}", + "tab_manager.close_aria": "关闭 {{title}}", + "tab_manager.empty.action.open_ai": "打开 AI", + "tab_manager.empty.aria.start_workbench": "GoNavi 起始工作台", + "tab_manager.empty.eyebrow.connections": "{{count}} 个连接", + "tab_manager.empty.eyebrow.workbench": "工作台", + "tab_manager.empty.hero.description": "选择数据源,打开查询编辑器,或在 AI 面板中带着上下文继续。", + "tab_manager.empty.hero.title": "连接、查询和分析都从一个工作台开始。", + "tab_manager.empty.quick.ai_assist.description": "解释 SQL、生成查询并审阅结果", + "tab_manager.empty.quick.ai_assist.title": "进入 AI 辅助", + "tab_manager.empty.quick.aria": "快速工作流", + "tab_manager.empty.quick.configure_source.description": "在一处设置 URI、SSH、代理和驱动", + "tab_manager.empty.quick.configure_source.title": "配置数据源", + "tab_manager.empty.quick.heading": "快速工作流", + "tab_manager.empty.quick.sql_workspace.description": "使用当前上下文打开查询编辑器", + "tab_manager.empty.quick.sql_workspace.title": "启动 SQL 工作区", + "tab_manager.hover.fallback.database_not_specified": "未指定", + "tab_manager.hover.fallback.host_not_configured": "未配置", + "tab_manager.hover.fallback.unbound_connection": "未绑定连接", + "tab_manager.hover.kind.design": "表设计", + "tab_manager.hover.kind.event": "事件", + "tab_manager.hover.kind.fallback": "标签页", + "tab_manager.hover.kind.jvm_audit": "JVM 审计", + "tab_manager.hover.kind.jvm_diagnostic": "JVM 诊断", + "tab_manager.hover.kind.jvm_monitoring": "JVM 监控", + "tab_manager.hover.kind.jvm_overview": "JVM 概览", + "tab_manager.hover.kind.jvm_resource": "JVM 资源", + "tab_manager.hover.kind.materialized_view": "物化视图", + "tab_manager.hover.kind.query": "SQL 查询", + "tab_manager.hover.kind.redis_command": "Redis 命令", + "tab_manager.hover.kind.redis_keys": "Redis Key", + "tab_manager.hover.kind.redis_monitor": "Redis 监控", + "tab_manager.hover.kind.routine": "函数 / 存储过程", + "tab_manager.hover.kind.sql_analysis": "SQL 分析工作台", + "tab_manager.hover.kind.table": "表数据", + "tab_manager.hover.kind.table_export": "导出工作台", + "tab_manager.hover.kind.table_overview": "表概览", + "tab_manager.hover.kind.trigger": "触发器", + "tab_manager.hover.kind.view": "视图", + "tab_manager.hover.label.connection": "连接", + "tab_manager.hover.label.database": "数据库", + "tab_manager.hover.label.object": "对象", + "tab_manager.hover.label.type": "类型", + "tab_manager.kind_badge.design": "设计", + "tab_manager.kind_badge.event": "事件", + "tab_manager.kind_badge.fallback": "标签", + "tab_manager.kind_badge.jvm": "JVM", + "tab_manager.kind_badge.materialized_view": "物化视图", + "tab_manager.kind_badge.query": "SQL", + "tab_manager.kind_badge.redis": "Redis", + "tab_manager.kind_badge.routine": "函数", + "tab_manager.kind_badge.sql_analysis": "分析", + "tab_manager.kind_badge.table": "表", + "tab_manager.kind_badge.table_export": "导出", + "tab_manager.kind_badge.table_overview": "库", + "tab_manager.kind_badge.trigger": "触发器", + "tab_manager.kind_badge.view": "视图", + "tab_manager.menu.close_all": "关闭所有页", + "tab_manager.menu.close_left": "关闭左侧页", + "tab_manager.menu.close_other": "关闭其他页", + "tab_manager.menu.close_right": "关闭右侧页", "tab_manager.menu.tab_display_settings": "标签设置", "tab_manager.sql_file_close.close_tabs": "关闭标签", "tab_manager.sql_file_close.continue_close": "继续关闭", @@ -7324,24 +7036,305 @@ "tab_manager.sql_file_close.save_failed": "保存 {{title}} 失败:{{detail}}", "tab_manager.sql_file_close.saved": "SQL 文件已保存", "tab_manager.sql_file_close.unknown_error": "未知错误", + "table_designer.action.add": "新增", + "table_designer.action.add_after_selected": "在选中字段后添加", + "table_designer.action.add_column": "添加字段", + "table_designer.action.apply": "应用", + "table_designer.action.cancel": "取消", + "table_designer.action.copy_selected_to_new_table": "复制选中到新表", + "table_designer.action.create": "创建", + "table_designer.action.create_table": "创建新表", + "table_designer.action.delete": "删除", + "table_designer.action.edit": "修改", + "table_designer.action.execute": "执行", + "table_designer.action.refresh": "刷新", + "table_designer.action.refresh_anyway": "仍然刷新", + "table_designer.action.save": "保存", + "table_designer.action.table_comment": "表备注", + "table_designer.action.view_statement": "查看语句", + "table_designer.column.actions": "操作", + "table_designer.column.auto_increment": "自增", + "table_designer.column.comment": "注释", + "table_designer.column.default": "默认", + "table_designer.column.name": "名", + "table_designer.column.not_null": "不是 NULL", + "table_designer.column.primary_key": "主键", + "table_designer.column.type": "类型", + "table_designer.empty.triggers": "该表暂无触发器", + "table_designer.fallback.empty": "(空)", + "table_designer.fallback.unknown_error": "未知错误", + "table_designer.fallback.unnamed_foreign_key": "(未命名外键)", + "table_designer.fallback.unnamed_index": "(未命名索引)", + "table_designer.foreign_key.column.constraint_name": "约束名", + "table_designer.foreign_key.column.fields": "字段", + "table_designer.foreign_key.column.ref_fields": "参考字段", + "table_designer.foreign_key.column.ref_table": "参考表", + "table_designer.index.column.fields": "字段", + "table_designer.index.column.name": "索引名", + "table_designer.index.column.type": "索引类型", + "table_designer.index.column.uniqueness": "唯一性", + "table_designer.index.kind.fulltext": "全文索引", + "table_designer.index.kind.normal": "普通索引", + "table_designer.index.kind.normal_nonclustered": "普通索引(非聚合)", + "table_designer.index.kind.primary_clustered": "主键索引(聚合)", + "table_designer.index.kind.spatial": "空间索引", + "table_designer.index.kind.unique": "唯一索引", + "table_designer.index.uniqueness.normal": "普通", + "table_designer.index.uniqueness.unique": "唯一", + "table_designer.label.create_statement": "{{name}} 创建语句", + "table_designer.label.create_statement_plain": "创建语句", + "table_designer.message.add_at_least_one_column": "请至少添加一个字段", + "table_designer.message.columns_copied_to_new_table": "已将 {{count}} 个字段复制到新表 {{table}}", + "table_designer.message.connection_not_found": "未找到连接", + "table_designer.message.delete_failed": "删除失败:{{detail}}", + "table_designer.message.drop_old_trigger_failed": "删除旧触发器失败:{{detail}}", "table_designer.message.duckdb_primary_key_change_unsupported": "DuckDB 当前仅支持为无主键表新增主键;已有主键的修改或删除需要通过重建表完成。", + "table_designer.message.execution_failed": "执行失败:{{detail}}", + "table_designer.message.execution_failed_plain": "执行失败", + "table_designer.message.execution_failed_prefix": "执行失败:", + "table_designer.message.foreign_key_column_count_mismatch": "本表字段数量与参考字段数量必须一致", + "table_designer.message.foreign_key_created": "外键新增成功", + "table_designer.message.foreign_key_delete_unsupported": "当前数据库暂不支持删除该外键", + "table_designer.message.foreign_key_deleted": "外键删除成功", + "table_designer.message.foreign_key_maintenance_unsupported": "当前数据库暂不支持在此维护外键", + "table_designer.message.foreign_key_name_exists": "外键约束名已存在:{{name}}", + "table_designer.message.foreign_key_name_required": "请输入外键约束名", + "table_designer.message.foreign_key_updated": "外键修改成功", + "table_designer.message.index_create_sql_placeholder": "索引创建 SQL 暂不可用", + "table_designer.message.index_create_sql_unavailable": "无法获取索引创建 SQL", + "table_designer.message.index_created": "索引新增成功", + "table_designer.message.index_delete_named_unsupported": "当前数据库暂不支持删除索引 \"{{name}}\"", + "table_designer.message.index_delete_unsupported": "当前数据库暂不支持删除该索引", + "table_designer.message.index_deleted": "索引删除成功", + "table_designer.message.index_kind_unsupported": "当前数据库不支持该索引类型", + "table_designer.message.index_maintenance_unsupported": "当前数据库暂不支持在此维护索引", + "table_designer.message.index_name_exists": "索引名已存在:{{name}}", + "table_designer.message.index_name_required": "请输入索引名", + "table_designer.message.index_restore_failed": "{{detail}};恢复原索引失败:{{restoreDetail}}", + "table_designer.message.index_restore_unavailable": "{{detail}};且无法自动恢复原索引,请尽快检查", + "table_designer.message.index_restored_after_failure": "{{detail}};已自动恢复原索引", + "table_designer.message.index_updated": "索引修改成功", + "table_designer.message.indexes_deleted": "{{count}} 个索引删除成功", + "table_designer.message.load_columns_failed": "加载字段失败:{{detail}}", + "table_designer.message.no_changes_detected": "没有检测到变更", + "table_designer.message.no_copyable_columns": "未选择可复制字段", + "table_designer.message.no_index_changes": "没有检测到索引变更", + "table_designer.message.only_normal_unique_index_supported": "当前数据库仅支持普通索引与唯一索引维护", + "table_designer.message.ref_columns_required": "请至少填写一个参考字段", + "table_designer.message.ref_table_required": "请输入参考表", + "table_designer.message.relational_index_unsupported": "当前数据源不支持关系型索引维护", + "table_designer.message.schema_saved_alter": "表结构修改成功!", + "table_designer.message.schema_saved_create": "表创建成功!", + "table_designer.message.select_at_least_one_column": "请至少选择一个字段", + "table_designer.message.select_column_before_insert": "请先选择一个字段,再执行插入。", + "table_designer.message.select_columns_to_copy": "请先勾选要复制的字段", + "table_designer.message.select_index_to_delete": "请先选择要删除的索引", + "table_designer.message.select_local_columns": "请至少选择一个本表字段", + "table_designer.message.select_one_foreign_key": "请先选择一个外键", + "table_designer.message.select_one_index": "请先选择一个索引", + "table_designer.message.statement_execution_failed_prefix": "第 {{current}}/{{total}} 条语句执行失败:", + "table_designer.message.switch_index_kind": "请将“索引类别”切换为 {{kind}} 索引", + "table_designer.message.table_comment_unsupported": "当前数据库暂不支持在此修改表备注", + "table_designer.message.table_comment_updated": "表备注更新成功", + "table_designer.message.table_name_required": "请输入表名", + "table_designer.message.target_table_required": "请输入目标表名", + "table_designer.message.trigger_created": "触发器创建成功", + "table_designer.message.trigger_deleted": "触发器删除成功", + "table_designer.message.trigger_updated": "触发器修改成功", + "table_designer.modal.column_comment_title": "字段注释", + "table_designer.modal.column_comment_title_named": "字段注释 - {{name}}", + "table_designer.modal.confirm_sql_title": "确认 SQL 变更", + "table_designer.modal.copy_columns_title": "复制选中字段到新表", + "table_designer.modal.delete_foreign_key_content": "确定删除外键约束 \"{{name}}\" 吗?", + "table_designer.modal.delete_foreign_key_title": "确认删除外键", + "table_designer.modal.delete_index_many": "确定删除以下 {{count}} 个索引吗?\n{{names}}", + "table_designer.modal.delete_index_one": "确定删除索引 {{names}} 吗?", + "table_designer.modal.delete_index_title": "确认删除索引", + "table_designer.modal.delete_trigger_content": "确定要删除触发器 \"{{name}}\" 吗?此操作不可撤销。", + "table_designer.modal.delete_trigger_title": "确认删除触发器", + "table_designer.modal.foreign_key_create_title": "新增外键", + "table_designer.modal.foreign_key_edit_title": "修改外键", + "table_designer.modal.index_create_title": "新增索引", + "table_designer.modal.index_edit_title": "修改索引", + "table_designer.modal.table_comment_title": "修改表备注", + "table_designer.modal.trigger_create_title": "新增触发器", + "table_designer.modal.trigger_detail_title": "触发器详情", + "table_designer.modal.trigger_detail_title_named": "触发器:{{name}}", + "table_designer.modal.trigger_edit_title": "修改触发器", + "table_designer.modal.unsaved_changes_content": "刷新后会丢失当前尚未保存的字段调整,是否仍要刷新并覆盖当前草稿?", + "table_designer.modal.unsaved_changes_title": "存在未保存的字段变更", + "table_designer.notice.foreign_key_readonly": "当前数据库暂不支持外键编辑,仅支持查看", + "table_designer.notice.foreign_key_replace_hint": "修改外键会执行“先删除旧外键,再创建新外键”。", + "table_designer.notice.index_readonly": "当前数据库暂不支持索引编辑,仅支持查看", + "table_designer.notice.index_restore_hint": "修改索引时若新索引创建失败,系统会尝试自动恢复原索引。", + "table_designer.notice.sql_irreversible": "请仔细检查 SQL,执行后不可撤销。", + "table_designer.notice.sql_statement_irreversible": "请仔细检查 SQL 语句,执行后不可撤销。", + "table_designer.notice.trigger_replace_hint": "修改触发器时会先删除原触发器,再创建新触发器。", + "table_designer.option.default": "默认", + "table_designer.option.recommended_suffix": "(推荐)", + "table_designer.placeholder.column_comment": "请输入字段注释", + "table_designer.placeholder.foreign_key_name": "外键约束名(例如 fk_order_user)", + "table_designer.placeholder.index_columns": "请选择索引字段(按选择顺序生效)", + "table_designer.placeholder.index_name": "索引名(例如 idx_user_name)", + "table_designer.placeholder.local_columns": "请选择本表字段(顺序需与参考字段一致)", + "table_designer.placeholder.primary_index_name": "主键索引固定名称:PRIMARY", + "table_designer.placeholder.ref_columns": "请输入参考字段(支持多个)", + "table_designer.placeholder.ref_table": "参考表(支持 db.table)", + "table_designer.placeholder.table_comment": "请输入表备注", + "table_designer.placeholder.table_name": "请输入表名", + "table_designer.placeholder.target_table_name": "请输入目标表名", "table_designer.schema_sql.doris.primary_key_hint": "-- Doris 修改主键/Key 模型需要按表模型手工迁移,已避免生成 MySQL 专属的 DROP/ADD PRIMARY KEY。", + "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB 不支持通过 COMMENT ON COLUMN 持久化字段备注,字段 {{column}} 的备注仅保留在设计器预览中。", "table_designer.schema_sql.duckdb.primary_key_hint": "-- DuckDB 当前仅支持为无主键表新增 PRIMARY KEY;已有主键的修改或删除需要通过重建表完成。", + "table_designer.schema_sql.limited_column_hint": "-- {{dialect}} 的字段约束、默认值和备注语法与 MySQL 不同,已避免生成 MySQL 专属子句,请按目标库能力补充。", + "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite 不支持直接修改字段属性,请通过创建新表、迁移数据、替换旧表的方式处理字段 {{column}}。", + "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server 删除旧主键需要原约束名;请先在索引页确认后删除。", + "table_designer.schema_sql.tdengine.timestamp_hint": "-- TDengine 普通表通常需要 TIMESTAMP 时间列,执行前请确认表模型。", + "table_designer.selection.columns_selected": "已选择字段:{{count}}", + "table_designer.selection.foreign_key_selected": "已选择:{{name}}", + "table_designer.selection.indexes_selected": "已选择:{{count}} 个索引", + "table_designer.selection.trigger_prompt": "请点击选择触发器", + "table_designer.selection.trigger_selected": "已选择:{{name}}", + "table_designer.sql_preview.change.add": "新增变更", + "table_designer.sql_preview.change.comment": "备注变更", + "table_designer.sql_preview.change.constraint": "约束变更", + "table_designer.sql_preview.change.create": "新建表结构", "table_designer.sql_preview.change.create_index": "新建索引", + "table_designer.sql_preview.change.drop": "删除变更", + "table_designer.sql_preview.change.modify": "字段属性变更", + "table_designer.sql_preview.change.rename": "重命名变更", + "table_designer.starrocks.bucket_mode.auto": "自动分桶数", + "table_designer.starrocks.bucket_mode.number": "固定分桶数", + "table_designer.starrocks.distribution.hash": "哈希分布", + "table_designer.starrocks.distribution.none": "不设置分布", + "table_designer.starrocks.distribution.random": "随机分布", + "table_designer.starrocks.key_model.aggregate": "聚合键", + "table_designer.starrocks.key_model.duplicate": "明细键", + "table_designer.starrocks.key_model.unique": "唯一键", + "table_designer.starrocks.placeholder.bucket_count": "分桶数", + "table_designer.starrocks.placeholder.distribution_columns": "分布列,例如 user_id", + "table_designer.starrocks.placeholder.key_columns": "键列,例如 id, date", + "table_designer.starrocks.placeholder.partition_clause": "分区子句,例如 PARTITION BY RANGE(date_col)(...)", + "table_designer.starrocks.table_kind.external": "外部表", + "table_designer.starrocks.table_kind.olap": "OLAP 表", + "table_designer.status.read_only": "只读", + "table_designer.summary.columns": "{{count}} 个字段", + "table_designer.summary.indexes": "索引数:{{count}},索引字段:{{fields}}", + "table_designer.tab.columns": "字段", "table_designer.tab.edit_trigger_title": "修改触发器: {{name}}", + "table_designer.tab.foreign_keys": "外键", + "table_designer.tab.indexes": "索引", + "table_designer.tab.triggers": "触发器", + "table_designer.table_comment.current": "当前备注:{{comment}}", + "table_designer.title.default_database": "默认库", + "table_designer.title.schema_designer": "结构设计器", + "table_designer.title.untitled_table": "未命名表", + "table_designer.tooltip.edit_comment_popup": "弹框编辑注释", + "table_designer.trigger.column.event": "事件", + "table_designer.trigger.column.name": "名称", + "table_designer.trigger.column.timing": "时机", + "table_designer.trigger.definition_unavailable": "无法获取完整的触发器定义", + "table_designer.trigger.field.event": "事件", + "table_designer.trigger.field.timing": "时机", + "table_designer.trigger.template.body_comment": "触发器逻辑", + "table_designer.trigger.template.enter_create": "请输入 CREATE TRIGGER 语句", + "table_overview.action.show_more": "显示更多表(剩余 {{count}})", + "table_overview.empty.no_matches": "无匹配结果", + "table_overview.empty.no_tables": "暂无表", + "table_overview.menu.backup_table_sql": "备份表 (SQL)", + "table_overview.menu.clear_table": "清空表", + "table_overview.menu.copy_structure": "复制表结构", "table_overview.menu.copy_table_name": "复制表名", + "table_overview.menu.danger_operations": "危险操作", + "table_overview.menu.delete_table": "删除表", + "table_overview.menu.design_table": "设计表", + "table_overview.menu.export_csv": "导出 CSV", + "table_overview.menu.export_html": "导出 HTML", + "table_overview.menu.export_json": "导出 JSON", + "table_overview.menu.export_markdown": "导出 Markdown", + "table_overview.menu.export_table_data": "导出表数据", + "table_overview.menu.export_xlsx": "导出 XLSX", + "table_overview.menu.new_query": "新建查询", + "table_overview.menu.rename_table": "重命名表", "table_overview.menu.table_structure": "表结构", + "table_overview.menu.truncate_table": "截断表", + "table_overview.message.copy_structure_failed": "复制表结构失败: {{detail}}", + "table_overview.message.copy_structure_success": "表结构已复制到剪贴板", "table_overview.message.copy_table_name_empty": "表名为空,无法复制", "table_overview.message.copy_table_name_failed": "复制表名失败: {{detail}}", "table_overview.message.copy_table_name_success": "表名已复制到剪贴板", + "table_overview.message.delete_table_failed": "删除表失败: {{detail}}", + "table_overview.message.delete_table_success": "表已删除", + "table_overview.message.export_failed": "导出失败: {{detail}}", + "table_overview.message.export_success": "导出成功", + "table_overview.message.exporting_table_format": "正在导出 {{table}} 为 {{format}}...", + "table_overview.message.load_tables_failed": "获取表信息失败: {{detail}}", + "table_overview.message.pinned": "已置顶表", + "table_overview.message.rename_table_failed": "重命名表失败: {{detail}}", + "table_overview.message.rename_table_success": "表已重命名", + "table_overview.message.table_data_action_failed": "{{action}}失败: {{detail}}", + "table_overview.message.table_data_action_loading": "正在对 {{table}} 执行{{action}}...", + "table_overview.message.table_data_action_success": "{{action}}成功", + "table_overview.message.unknown_error": "未知错误", + "table_overview.message.unpinned": "已取消置顶", + "table_overview.metric.data_size": "数据大小", + "table_overview.metric.engine": "引擎", + "table_overview.metric.index_size": "索引大小", + "table_overview.metric.relative_size": "相对大小", + "table_overview.modal.delete_table.content": "删除表 \"{{table}}\"?此操作无法撤销。", + "table_overview.modal.delete_table.title": "删除表", + "table_overview.modal.rename_table.placeholder": "输入新表名", + "table_overview.modal.rename_table.title": "重命名表", + "table_overview.modal.table_data_action.content": "{{action}}会永久删除表 \"{{table}}\" 中的所有数据,此操作无法撤销。是否继续?", + "table_overview.modal.table_data_action.title": "确认{{action}}", + "table_overview.placeholder.search": "搜索表名或注释...", + "table_overview.row.engine_table": "{{engine}} 表", + "table_overview.row.open_hint": "双击打开数据,右键查看更多操作", + "table_overview.section.all": "全部", + "table_overview.section.pinned": "置顶", + "table_overview.sort.name": "名称", + "table_overview.sort.rows": "行数", + "table_overview.sort.size": "大小", + "table_overview.status.hidden_count_hint": "还有 {{count}} 张未渲染,可继续加载或缩小搜索范围", + "table_overview.status.loading_tables": "加载表信息...", + "table_overview.status.matching_rendered": "匹配 {{matched}} 张表,当前渲染 {{rendered}} 张", + "table_overview.status.updating_filter": "正在更新筛选结果...", "table_overview.tab.design_table_title": "设计表({{table}})", "table_overview.tab.table_structure_title": "表结构({{table}})", + "table_overview.table_data_action.clear.label": "清空表", + "table_overview.table_data_action.truncate.label": "截断表", + "table_overview.toolbar.summary": "{{count}} 张表 · {{rows}} 行 · {{size}}", + "table_overview.tooltip.card_view": "卡片视图", + "table_overview.tooltip.list_view": "列表视图", + "table_overview.tooltip.refresh": "刷新", + "table_overview.tooltip.sort": "排序", + "table_overview.validation.table_name_required": "表名不能为空", + "table_overview.validation.table_name_unchanged": "新表名与当前表名相同", "trigger_viewer.action.edit_object": "对象修改", "trigger_viewer.edit_sql.compatibility_hint": "请确认语法兼容当前数据库后执行", "trigger_viewer.edit_sql.empty_definition": "当前触发器定义为空,请补全 CREATE TRIGGER 语句后执行", "trigger_viewer.edit_sql.fragment_definition": "当前数据源仅返回触发器定义片段,请补全 CREATE TRIGGER 语句后执行", "trigger_viewer.edit_sql.header": "修改触发器: {{name}}", "trigger_viewer.edit_sql.replace_hint": "表设计修改会先删除原触发器,再创建新触发器,请确认后执行", + "trigger_viewer.editor.definition_not_found": "未找到触发器定义", + "trigger_viewer.editor.sphinx.compat_queries_hint": "已执行多套兼容查询,可能是版本能力限制或对象类型不支持。", + "trigger_viewer.editor.sphinx.empty_result": "当前 Sphinx 实例{{version}}未返回触发器定义。", + "trigger_viewer.editor.sphinx.failed_message_label": "返回失败信息", + "trigger_viewer.editor.sphinx.failed_message_unknown": "返回失败信息:未知错误", + "trigger_viewer.editor.sphinx.unsupported_query": "当前 Sphinx 实例{{version}}不支持触发器定义查询。", + "trigger_viewer.editor.sphinx.version_suffix": "(版本: {{version}})", + "trigger_viewer.editor.unsupported.duckdb": "DuckDB 不支持触发器", + "trigger_viewer.editor.unsupported.generic": "暂不支持该数据库类型的触发器定义查看", + "trigger_viewer.editor.unsupported.mongodb": "MongoDB 不支持触发器", + "trigger_viewer.editor.unsupported.tdengine": "TDengine 不支持触发器", + "trigger_viewer.error.connection_not_found": "未找到数据库连接", + "trigger_viewer.error.load_failed": "加载失败", + "trigger_viewer.error.query_failed": "查询触发器定义失败", + "trigger_viewer.error.query_failed_detail": "查询触发器定义失败:{{detail}}", + "trigger_viewer.error.trigger_name_empty": "触发器名称为空", + "trigger_viewer.field.database": "数据库", + "trigger_viewer.field.trigger": "触发器", + "trigger_viewer.loading.definition": "加载触发器定义...", "trigger_viewer.tab.edit_trigger_title": "修改触发器: {{name}}", "trigger_viewer.warning.refresh_latest_failed": "刷新最新定义失败", "data_export.dialog.action.start": "开始导出", @@ -7455,5 +7448,133 @@ "data_export.workbench.target.batch_tables": "{{database}} · {{count}} 个对象", "data_export.workbench.target.current_database": "当前数据库", "data_export.workbench.task.export_target": "导出 {{name}}", - "data_export.workbench.title": "导出工作台" + "data_export.workbench.title": "导出工作台", + "data_grid.export.scope.all_results_cached": "全部结果(当前缓存 {{count}} 条)", + "data_grid.export.scope.all_results_cached_description": "当前查询缺少可重放 SQL 时,将导出当前缓存的全部结果。", + "data_grid.export.scope.all_results_requery": "全部结果(重新查询)", + "data_grid.export.scope.all_results_requery_description": "后台会重新执行 SQL,避免只导出当前页或当前缓存。", + "data_grid.export.scope.current_page": "当前页({{count}} 条)", + "data_grid.export.scope.current_page_description": "直接按当前结果页缓存导出。", + "data_grid.export.scope.current_page_requery_description": "后台按当前分页条件重新查询后导出当前页。", + "data_grid.export.scope.current_page_unavailable_description": "当前页依赖前端临时状态,建议直接使用快捷导出。", + "data_grid.export.scope.filtered_results_all": "筛选结果(全部)", + "data_grid.export.scope.filtered_results_all_requery_description": "按当前筛选条件重新查询数据库并导出全部筛选结果。", + "data_grid.export.scope.filtered_results_all_unavailable_description": "当前数据源或当前状态暂不支持在工作台重放筛选导出。", + "data_grid.export.scope.selected_rows": "选中行", + "data_grid.export.scope.selected_rows_count": "选中行({{count}} 条)", + "data_grid.export.scope.selected_rows_description": "仅导出当前结果集中已勾选的行。", + "sidebar.message.table_export_target_missing": "未识别到表名,无法导出。", + "sidebar.tab.batch_export_databases": "批量导出库", + "sidebar.tab.batch_export_objects": "批量导出对象", + "sidebar.tab.batch_export_objects_database": "批量导出 {{database}} 对象", + "data_export.message.already_running": "当前已有导出任务正在执行,请等待完成后再发起新的导出", + "data_export.message.export_failed": "导出失败: {{error}}", + "data_export.message.export_success": "导出成功", + "data_export.progress.stage.waiting_file_selection": "等待选择导出文件", + "sql_analysis.workbench.validation.sql_required": "请输入要诊断的 SQL", + "sql_analysis.workbench.alert.connection_missing_title": "当前工作台对应的连接已不可用", + "sql_analysis.workbench.alert.connection_missing_description": "请重新选择一个有效连接后再打开 SQL 分析工作台。", + "sql_analysis.workbench.title": "SQL 分析工作台", + "sql_analysis.workbench.view.slow_query": "慢 SQL", + "sql_analysis.workbench.view.diagnose": "SQL 诊断", + "sql_analysis.workbench.editor.placeholder": "输入要诊断的 SQL,或从慢 SQL 列表点击条目带入", + "sql_analysis.workbench.editor.hint": "支持从慢 SQL 列表点击条目直接带入", + "sql_analysis.workbench.action.run": "运行诊断", + "sql_analysis.explain.error.query_required": "查询语句为空", + "sql_analysis.explain.error.run_failed": "诊断失败", + "sql_analysis.explain.loading": "正在执行 EXPLAIN 并解析计划...", + "sql_analysis.explain.error.title": "诊断失败:", + "sql_analysis.explain.empty": "输入 SQL 后运行诊断", + "sql_analysis.explain.view.plan": "执行计划", + "sql_analysis.explain.view.raw": "原文", + "sql_analysis.explain.meta.node_count": "{{count}} 节点", + "sql_analysis.explain.raw.empty": "(无原文)", + "sql_analysis.explain_graph.label.table": "表:", + "sql_analysis.explain_graph.label.index": "索引:", + "sql_analysis.explain_graph.metric.est_rows": "估算", + "sql_analysis.explain_graph.metric.actual_rows": "实际", + "sql_analysis.explain_graph.metric.cost": "成本", + "sql_analysis.explain_graph.flag.full_scan": "全表扫描", + "sql_analysis.explain_graph.flag.filesort": "额外排序", + "sql_analysis.explain_graph.flag.temp_table": "临时表", + "sql_analysis.sidebar.stats.title": "执行统计", + "sql_analysis.sidebar.stats.total_cost": "总成本", + "sql_analysis.sidebar.stats.total_duration": "总耗时", + "sql_analysis.sidebar.stats.rows_read": "扫描行数", + "sql_analysis.sidebar.stats.buffer_hit": "缓冲命中", + "sql_analysis.sidebar.stats.max_est_rows": "最大单节点行数", + "sql_analysis.sidebar.warning.full_scan": "存在全表扫描", + "sql_analysis.sidebar.warning.filesort": "存在额外排序", + "sql_analysis.sidebar.warning.temp_table": "使用临时表", + "sql_analysis.sidebar.node.title": "节点详情", + "sql_analysis.sidebar.node.op_type": "操作类型", + "sql_analysis.sidebar.node.op_detail": "操作详情", + "sql_analysis.sidebar.node.table": "表", + "sql_analysis.sidebar.node.index": "索引", + "sql_analysis.sidebar.node.est_rows": "估算行数", + "sql_analysis.sidebar.node.actual_rows": "实际行数", + "sql_analysis.sidebar.node.loops": "循环次数", + "sql_analysis.sidebar.node.cost": "成本", + "sql_analysis.sidebar.node.duration": "耗时", + "sql_analysis.sidebar.node.buffer_hit": "缓冲命中", + "sql_analysis.sidebar.node.flags": "标志", + "sql_analysis.sidebar.node.extra": "Extra 字段({{count}})", + "sql_analysis.sidebar.suggestions.title": "索引建议({{count}})", + "sql_analysis.sidebar.suggestions.empty": "未发现明显性能问题", + "sql_analysis.sidebar.suggestions.rows": "{{count}} 行", + "sql_analysis.sidebar.suggestions.table": "表:{{table}}", + "sql_analysis.slow_query.error.load_failed": "加载失败", + "sql_analysis.slow_query.message.cleared": "已清空慢查询历史", + "sql_analysis.slow_query.error.clear_failed": "清空失败", + "sql_analysis.slow_query.sort.duration": "按耗时", + "sql_analysis.slow_query.sort.rows_read": "按扫描行数", + "sql_analysis.slow_query.sort.recent": "按时间", + "sql_analysis.slow_query.tooltip.clear_current": "清空当前连接的历史", + "sql_analysis.slow_query.loading": "加载慢查询历史...", + "sql_analysis.slow_query.error.title": "加载失败:", + "sql_analysis.slow_query.empty": "暂无慢查询记录(阈值 {{threshold}}ms)", + "sql_analysis.slow_query.title": "慢 SQL 历史", + "sql_analysis.slow_query.current_connection": "(当前连接)", + "sql_analysis.slow_query.metric.rows_read": "扫描", + "sql_analysis.slow_query.metric.rows_returned": "返回", + "sql_analysis.slow_query.preview.empty": "(无 SQL 预览)", + "sql_analysis.slow_query.relative.just_now": "刚刚", + "sql_analysis.slow_query.relative.minutes_ago": "{{count}} 分钟前", + "sql_analysis.slow_query.relative.hours_ago": "{{count}} 小时前", + "sql_analysis.slow_query.relative.days_ago": "{{count}} 天前", + "sql_analysis.slow_query.rail.tooltip.no_connection": "请先打开一个数据库连接的标签页", + "sql_analysis.slow_query.rail.tooltip.open": "打开当前连接的 SQL 分析工作台", + "sql_analysis.slow_query.rail.aria_label": "慢 SQL 工作台", + "sql_analysis.backend.error.query_required": "查询语句不能为空", + "sql_analysis.backend.error.select_only": "诊断仅支持 SELECT / WITH 查询;写操作请使用 EXPLAIN PLAN 模式(PR2 支持)", + "sql_analysis.backend.error.unsupported_db_type": "当前数据源({{dbType}})暂不支持 SQL 诊断;一期支持 MySQL/PostgreSQL/SQLite/ClickHouse/Oracle/SQLServer/OceanBase", + "sql_analysis.backend.message.completed": "诊断完成", + "query_history.backend.error.connection_fingerprint_invalid": "无法解析连接指纹", + "query_history.backend.message.loaded": "加载完成", + "query_history.backend.message.cleared": "已清空慢查询历史", + "connection.backend.error.readonly_action_blocked": "当前连接已启用生产保护,禁止执行{{action}}", + "connection.backend.action.create_database": "创建数据库", + "connection.backend.action.create_schema": "创建模式", + "connection.backend.action.rename_schema": "重命名模式", + "connection.backend.action.drop_schema": "删除模式", + "connection.backend.action.rename_database": "重命名数据库", + "connection.backend.action.drop_database": "删除数据库", + "connection.backend.action.rename_table": "重命名表", + "connection.backend.action.drop_table": "删除表", + "connection.backend.action.drop_view": "删除视图", + "connection.backend.action.drop_function_or_procedure": "删除函数或存储过程", + "connection.backend.action.rename_view": "重命名视图", + "connection.backend.action.import_data": "导入数据", + "connection.backend.action.apply_result_changes": "提交结果修改", + "connection.backend.action.preview_result_changes": "预览结果修改", + "connection.backend.action.clear_table": "清空表数据", + "connection.backend.action.truncate_table": "截断表数据", + "connection.backend.action.data_sync_write": "数据同步写入", + "connection_modal.field.readOnly.label": "生产连接保护", + "connection_modal.field.readOnly.help": "启用后当前连接仅允许查询,禁止导入、结构变更、数据写入和作为同步目标。", + "connection_modal.field.readOnly.checkbox": "标记为生产连接,只允许查询", + "query_editor.message.connection_readonly_blocked": "当前连接已启用生产保护,仅允许执行查询操作。", + "query_editor.results_panel.message.action.copy": "复制", + "query_editor.results_panel.message.copy_unsupported": "当前环境不支持复制到剪贴板", + "query_editor.results_panel.message.copy_failed": "复制消息失败:{{detail}}" } diff --git a/shared/i18n/zh-TW.json b/shared/i18n/zh-TW.json index 7f6f783..bf5b1ee 100644 --- a/shared/i18n/zh-TW.json +++ b/shared/i18n/zh-TW.json @@ -1,4863 +1,4 @@ { - "common.cancel": "取消", - "redis.db_alias.menu.set": "設定別名", - "redis.db_alias.modal.title": "{{db}} 的別名", - "redis.db_alias.modal.placeholder": "例如:快取、工作階段(留空則清除)", - "common.back_to_previous": "返回上一步", - "common.close": "關閉", - "common.confirm": "確認", - "common.continue": "繼續", - "common.delete": "刪除", - "common.edit": "編輯", - "common.error": "錯誤", - "common.loading": "載入中", - "common.named_item": "{{name}}", - "common.ok": "確定", - "common.refresh": "重新整理", - "common.save": "儲存", - "common.search": "搜尋", - "common.success": "成功", - "common.unknown": "未知", - "common.warning": "警告", - "connection.sidebar.group.untitled": "未命名分組", - "connection.sidebar.group.meta": "{{count}} 個連線 · 連線分組", - "connection.sidebar.group.badge": "分組", - "connection.sidebar.group.edit": "編輯分組", - "connection.sidebar.group.delete": "刪除分組", - "connection.sidebar.group.deleteConfirmTitle": "確認刪除", - "connection.sidebar.group.deleteConfirmContent": "確定要刪除分組 \"{{name}}\" 嗎?這不會刪除其中的連線。", - "connection.sidebar.group.expandAria": "展開連線分組 {{name}}", - "connection.sidebar.group.collapseAria": "收合連線分組 {{name}}", - "connection.sidebar.menu.section": "連線", - "connection.sidebar.menu.groupSection": "連線分組", - "connection.sidebar.menu.copy": "複製連線", - "connection.sidebar.menu.disconnect": "中斷連線", - "connection.sidebar.menu.delete": "刪除連線", - "connection.sidebar.menu.hostFallback": "位址未設定", - "connection.sidebar.menu.hostBadge": "HOST", - "connection.sidebar.menu.moveToTag": "移至標籤", - "connection.sidebar.menu.moveOutTag": "移出標籤", - "connection.sidebar.menu.moveToUngrouped": "移出分組", - "connection.sidebar.menu.createDatabase": "新增資料庫", - "connection.sidebar.menu.refresh": "重新整理連線", - "connection.sidebar.menu.current": "目前", - "connection.sidebar.duplicate.backendUnavailable": "複製連線失敗:後端介面不可用", - "connection.sidebar.duplicate.noResult": "複製連線失敗:後端未回傳結果", - "connection.sidebar.duplicate.success": "已複製連線: {{name}}", - "connection.sidebar.duplicate.failureFallback": "複製連線失敗", - "connection.sidebar.disconnect.success": "已中斷連線", - "connection.sidebar.delete.confirmTitle": "確認刪除", - "connection.sidebar.delete.confirmContent": "確定要刪除連線 \"{{name}}\" 嗎?", - "connection.sidebar.delete.backendUnavailable": "刪除連線失敗:後端介面不可用", - "connection.sidebar.delete.success": "已刪除連線", - "connection.sidebar.delete.failureFallback": "刪除連線失敗", - "find_in_database.title": "在資料庫中搜尋 — {{dbName}}", - "find_in_database.placeholder.keyword": "輸入要搜尋的字串...", - "find_in_database.match.contains": "包含", - "find_in_database.match.exact": "完全符合", - "find_in_database.message.keyword_required": "請輸入搜尋關鍵字", - "find_in_database.message.connection_config_not_found": "找不到連線設定", - "find_in_database.message.get_tables_failed": "取得資料表清單失敗: {{detail}}", - "find_in_database.message.no_tables": "目前資料庫沒有資料表", - "find_in_database.message.no_matches": "找不到符合的資料", - "find_in_database.message.search_failed": "搜尋出錯: {{detail}}", - "find_in_database.column.table_name": "資料表名稱", - "find_in_database.column.matched_columns": "符合欄位", - "find_in_database.column.match_count": "命中列數", - "find_in_database.column.action": "操作", - "find_in_database.tooltip.collapse_details": "收合詳細資料", - "find_in_database.tooltip.view_details": "檢視詳細資料", - "find_in_database.progress.searching_table": "正在搜尋 {{table}}... ({{current}}/{{total}})", - "find_in_database.summary.found_tables": "找到 {{count}} 個資料表包含符合資料", - "find_in_database.summary.searching": "(搜尋進行中...)", - "find_in_database.detail.title": "{{table}} — 符合列詳細資料", - "find_in_database.detail.row_count": "{{count}} 列", - "import_preview.title": "匯入資料預覽", - "import_preview.action.start": "開始匯入", - "import_preview.status.loading_preview": "正在載入預覽資料...", - "import_preview.status.importing": "正在匯入資料...", - "import_preview.progress.processed_rows": "已處理 {{current}} / {{total}} 列", - "import_preview.progress.success_count": "成功 {{count}}", - "import_preview.progress.error_count": "失敗 {{count}}", - "import_preview.preview.summary": "共 {{rows}} 列資料,{{columns}} 個欄位", - "import_preview.preview.description": "以下顯示前 5 列預覽資料,確認無誤後開始匯入。", - "import_preview.preview.field_list": "欄位清單:", - "import_preview.preview.table_title": "資料預覽(前 5 列):", - "import_preview.error.preview_failed": "預覽失敗", - "import_preview.error.preview_failed_detail": "預覽失敗: {{detail}}", - "import_preview.error.connection_config_not_found": "找不到連線設定", - "import_preview.error.import_failed": "匯入失敗", - "import_preview.error.import_failed_detail": "匯入失敗: {{detail}}", - "import_preview.result.completed": "匯入完成", - "import_preview.result.success_rows": "成功匯入 {{count}} 列", - "import_preview.result.failed_rows": "失敗 {{count}} 列", - "import_preview.result.error_logs": "錯誤記錄:", - "log_panel.title": "SQL 執行記錄", - "log_panel.short_title": "日誌", - "log_panel.description": "記錄執行狀態、耗時與錯誤資訊,方便快速回溯。", - "log_panel.action.clear": "清空記錄", - "log_panel.action.close": "關閉面板", - "log_panel.empty": "暫無 SQL 執行記錄", - "log_panel.column.time": "時間", - "log_panel.column.status": "狀態", - "log_panel.column.duration": "耗時", - "log_panel.column.sql_message": "SQL / 訊息", - "log_panel.affected_rows": "影響列數:{{count}}", - "table_overview.status.loading_tables": "載入資料表資訊...", - "table_overview.message.load_tables_failed": "取得資料表資訊失敗: {{detail}}", - "table_overview.message.pinned": "已置頂資料表", - "table_overview.message.unpinned": "已取消置頂", - "table_overview.message.copy_structure_success": "資料表結構已複製到剪貼簿", - "table_overview.message.copy_structure_failed": "複製資料表結構失敗: {{detail}}", - "table_overview.message.exporting_table_format": "正在匯出 {{table}} 為 {{format}}...", - "table_overview.message.export_success": "匯出成功", - "table_overview.message.export_failed": "匯出失敗: {{detail}}", - "table_overview.message.delete_table_success": "資料表已刪除", - "table_overview.message.delete_table_failed": "刪除資料表失敗: {{detail}}", - "table_overview.table_data_action.truncate.label": "截斷資料表", - "table_overview.table_data_action.clear.label": "清空資料表", - "table_overview.modal.table_data_action.title": "確認{{action}}", - "table_overview.modal.table_data_action.content": "{{action}}會永久刪除資料表 \"{{table}}\" 中的所有資料,此操作無法復原。是否繼續?", - "table_overview.message.table_data_action_loading": "正在對 {{table}} 執行{{action}}...", - "table_overview.message.table_data_action_success": "{{action}}成功", - "table_overview.message.table_data_action_failed": "{{action}}失敗: {{detail}}", - "table_overview.message.rename_table_success": "資料表已重新命名", - "table_overview.message.rename_table_failed": "重新命名資料表失敗: {{detail}}", - "table_overview.message.unknown_error": "未知錯誤", - "table_overview.modal.delete_table.title": "刪除資料表", - "table_overview.modal.delete_table.content": "刪除資料表 \"{{table}}\"?此操作無法復原。", - "table_overview.modal.rename_table.title": "重新命名資料表", - "table_overview.modal.rename_table.placeholder": "輸入新的資料表名稱", - "table_overview.validation.table_name_required": "資料表名稱不可為空", - "table_overview.validation.table_name_unchanged": "新資料表名稱與目前名稱相同", - "table_overview.toolbar.summary": "{{count}} 張資料表 · {{rows}} 列 · {{size}}", - "table_overview.placeholder.search": "搜尋資料表名稱或註解...", - "table_overview.tooltip.sort": "排序", - "table_overview.tooltip.card_view": "卡片檢視", - "table_overview.tooltip.list_view": "列表檢視", - "table_overview.tooltip.refresh": "重新整理", - "table_overview.sort.name": "名稱", - "table_overview.sort.rows": "列數", - "table_overview.sort.size": "大小", - "table_overview.metric.data_size": "資料大小", - "table_overview.metric.index_size": "索引大小", - "table_overview.metric.relative_size": "相對大小", - "table_overview.metric.engine": "引擎", - "table_overview.section.all": "全部", - "table_overview.section.pinned": "置頂", - "table_overview.row.engine_table": "{{engine}} 資料表", - "table_overview.row.open_hint": "按兩下開啟資料,按右鍵查看更多操作", - "table_overview.status.updating_filter": "正在更新篩選結果...", - "table_overview.status.matching_rendered": "符合 {{matched}} 張資料表,目前渲染 {{rendered}} 張", - "table_overview.status.hidden_count_hint": "還有 {{count}} 張未渲染,可繼續載入或縮小搜尋範圍", - "table_overview.empty.no_matches": "無符合結果", - "table_overview.empty.no_tables": "暫無資料表", - "table_overview.action.show_more": "顯示更多資料表(剩餘 {{count}})", - "table_overview.menu.new_query": "新增查詢", - "table_overview.menu.design_table": "設計資料表", - "table_overview.menu.copy_structure": "複製資料表結構", - "table_overview.menu.backup_table_sql": "備份資料表 (SQL)", - "table_overview.menu.rename_table": "重新命名資料表", - "table_overview.menu.danger_operations": "危險操作", - "table_overview.menu.truncate_table": "截斷資料表", - "table_overview.menu.clear_table": "清空資料表", - "table_overview.menu.delete_table": "刪除資料表", - "table_overview.menu.export_table_data": "匯出資料表資料", - "table_overview.menu.export_csv": "匯出 CSV", - "table_overview.menu.export_xlsx": "匯出 XLSX", - "table_overview.menu.export_json": "匯出 JSON", - "table_overview.menu.export_markdown": "匯出 Markdown", - "table_overview.menu.export_html": "匯出 HTML", - "settings.language.description": "選擇 GoNavi 的介面語言。", - "settings.language.english": "English", - "settings.language.follow_system": "跟隨系統", - "settings.language.german": "Deutsch", - "settings.language.japanese": "日本語", - "settings.language.restart_hint": "部分編輯器和系統級選單可能需要重新開啟視窗後才會完全生效。", - "settings.language.russian": "Русский", - "settings.language.simplified_chinese": "简体中文", - "settings.language.title": "語言", - "settings.language.traditional_chinese": "繁體中文", - "settings.title": "設定", - "app.about.action.check_updates": "檢查更新", - "app.about.action.download_progress": "下載进度", - "app.about.action.download_update": "下載更新", - "app.about.action.mute_this_version": "本次不再提示", - "app.about.community.ai_book": "AI全书", - "app.about.description": "查看版本資訊、儲存庫連結、更新狀態與下載入口。", - "app.about.field.author": "作者", - "app.about.field.community": "技術圈", - "app.about.field.update_status": "更新状态", - "app.about.field.version": "版本", - "app.about.message.load_failed": "获取套用資訊失败: {{error}}", - "app.about.project_links": "專案入口", - "app.about.title": "關於 GoNavi", - "app.ai_panel.action.close": "關閉面板", - "app.ai_panel.action.reload": "重新載入", - "app.ai_panel.aria.close": "關閉 AI 面板", - "app.ai_panel.error.description": "這通常是開發環境熱更新後懶載入資源失效所致。已避免整頁白屏,你可以直接重試。", - "app.ai_panel.error.title": "AI 面板載入失敗", - "app.data_root.action.migrate_and_switch": "遷移现有資料并切换", - "app.data_root.action.open_current": "開啟目前目錄", - "app.data_root.action.restore_default_directory": "還原預設目錄", - "app.data_root.action.select": "選擇目錄", - "app.data_root.action.switch_only": "仅切换到所选目錄", - "app.data_root.apply_method": "套用方式", - "app.data_root.current_directory": "目前目錄", - "app.data_root.default_directory": "預設目錄", - "app.data_root.description": "統一管理連線、代理、AI 設定與驅動等檔案型資料的根目錄。", - "app.data_root.driver_directory": "驅動目錄", - "app.data_root.backend.dialog.select_directory": "選擇 GoNavi 資料目錄", - "app.data_root.backend.error.create_target_failed": "建立目標資料目錄失敗:{{detail}}", - "app.data_root.backend.error.create_bootstrap_directory_failed": "建立預設引導目錄失敗:{{detail}}", - "app.data_root.backend.error.create_data_directory_failed": "建立資料目錄失敗:{{detail}}", - "app.data_root.backend.error.directory_empty": "資料目錄不能為空", - "app.data_root.backend.error.directory_unavailable": "資料目錄不存在或無法存取", - "app.data_root.backend.error.migrate_directory_failed": "遷移目錄失敗({{entry}}):{{detail}}", - "app.data_root.backend.error.migrate_file_failed": "遷移檔案失敗({{entry}}):{{detail}}", - "app.data_root.backend.error.open_directory_failed": "開啟資料目錄失敗:{{detail}}", - "app.data_root.backend.error.open_directory_unsupported": "目前平台暫不支援開啟目錄:{{platform}}", - "app.data_root.backend.error.read_source_failed": "讀取來源資料失敗({{entry}}):{{detail}}", - "app.data_root.backend.message.migrated_restart": "資料已遷移並切換到新目錄,建議重新啟動應用程式以完成所有模組切換", - "app.data_root.backend.message.opened": "已開啟資料目錄", - "app.data_root.backend.message.unchanged": "資料目錄未變更", - "app.data_root.backend.message.updated_restart": "資料目錄已更新,建議重新啟動應用程式,讓 AI 與其他執行中模組完全切換到新目錄", - "app.data_root.message.apply_failed": "套用資料目錄失败", - "app.data_root.message.apply_failed_with_error": "套用資料目錄失败: {{error}}", - "app.data_root.message.load_failed": "載入資料目錄資訊失败", - "app.data_root.message.load_failed_with_error": "載入資料目錄資訊失败: {{error}}", - "app.data_root.message.open_failed": "開啟資料目錄失败", - "app.data_root.message.open_failed_with_error": "開啟資料目錄失败: {{error}}", - "app.data_root.message.select_failed": "選擇資料目錄失败", - "app.data_root.message.select_failed_with_error": "選擇資料目錄失败: {{error}}", - "app.data_root.message.select_valid_first": "请先選擇有效的資料目錄", - "app.data_root.message.updated": "資料目錄已更新", - "app.data_root.placeholder.select_new_directory": "選擇新的資料目錄", - "app.data_root.restart_hint": "切换后建议重启套用,以确保 AI 与其他长生命周期模块完整切换到新目錄。敏感密碼仍保存在系统 secret store,不会随文件目錄遷移。", - "app.data_root.switch_target": "切换目标", - "app.data_root.title": "資料儲存位置", - "app.proxy.description": "统一設定更新檢查、驅動管理与未单独指定代理的連線网络出口。", - "app.proxy.enable": "啟用全局代理", - "app.proxy.host": "代理地址", - "app.proxy.host_placeholder": "例如:127.0.0.1", - "app.proxy.message.invalid_enabled": "全局代理已开启,但地址或端口无效,目前按未啟用处理", - "app.proxy.message.save_failed": "全局代理設定失败: {{error}}", - "app.proxy.password_optional": "密碼(可选)", - "app.proxy.port": "端口", - "app.proxy.scope_hint": "* 作用于更新檢查、驅動管理网络请求,以及未单独設定代理的資料库連線", - "app.proxy.section_title": "全局代理", - "app.proxy.title": "全局代理設定", - "app.proxy.type": "代理类型", - "app.proxy.username_optional": "使用者名(可选)", - "proxy.backend.error.unsupported_type": "不支援的代理類型:{{type}}", - "proxy.backend.error.host_empty": "代理主機不可為空", - "proxy.backend.error.port_invalid": "代理連接埠無效:{{port}}", - "proxy.backend.error.remote_addr_invalid": "遠端位址無效:{{address}}", - "proxy.backend.error.listen_failed": "建立本機代理監聽失敗:{{detail}}", - "proxy.backend.error.socks5_dialer_failed": "建立 SOCKS5 代理撥號器失敗:{{detail}}", - "proxy.backend.error.socks5_connect_failed": "SOCKS5 代理連線失敗:{{detail}}", - "proxy.backend.error.http_connect_failed": "連線至 HTTP 代理失敗:{{detail}}", - "proxy.backend.error.http_connect_write_failed": "傳送 HTTP CONNECT 請求失敗:{{detail}}", - "proxy.backend.error.http_connect_read_failed": "讀取 HTTP CONNECT 回應失敗:{{detail}}", - "proxy.backend.error.http_connect_status_failed": "HTTP 代理 CONNECT 失敗:{{status}}", - "app.startup_readiness.loading_local_config": "正在載入本機設定...", - "app.startup_readiness.loading_security_config": "正在載入安全設定...", - "app.security_update.error.capability_unavailable": "安全更新能力無法使用", - "app.security_update.message.completed": "已儲存設定已完成安全更新", - "app.security_update.message.needs_attention": "更新尚未完成,有少量設定需要你處理", - "app.security_update.message.not_finished_retry_later": "安全更新未完成,請稍後重試", - "app.security_update.message.postpone_failed": "暫時無法延後本次安全更新", - "app.security_update.message.rolled_back": "本次更新未完成,系統已保留目前可用設定", - "app.security_update.stage.checking_saved_config": "正在檢查已儲存設定", - "app.security_update.stage.updating_secure_storage": "正在更新安全儲存", - "app.security_update.stage.verifying_result": "正在校驗更新結果", - "security_update.banner.title": "已儲存設定可進行安全更新", - "security_update.banner.action.start_now": "立即更新", - "security_update.banner.action.view_details": "檢視詳細資訊", - "security_update.banner.action.restart_update": "重新開始更新", - "security_update.banner.action.retry_check": "重新檢查", - "security_update.backend.issue.ai_provider.migration_required": "AI 供應商設定仍儲存在目前應用程式設定中,完成安全更新後會移至新的安全儲存。", - "security_update.backend.issue.ai_provider.missing_or_resave": "AI 供應商設定已不存在,或仍需重新儲存後才能完成安全更新。", - "security_update.backend.issue.ai_provider.secret_missing": "AI 供應商設定需要補充後才能完成安全更新。", - "security_update.backend.issue.connection.incomplete": "連線設定仍需補充後才能完成安全更新。", - "security_update.backend.issue.connection.missing_or_resave": "連線設定已不存在,或仍需重新儲存後才能完成安全更新。", - "security_update.backend.issue.connection.password_missing": "連線密碼已遺失,請重新儲存後再繼續。", - "security_update.backend.issue.global_proxy.missing_or_resave": "全域代理設定已不存在,或仍需重新儲存後才能完成安全更新。", - "security_update.backend.issue.global_proxy.password_incomplete": "全域代理密碼仍需補充後才能完成安全更新。", - "security_update.backend.issue.global_proxy.password_missing": "全域代理密碼已遺失,請重新儲存後再繼續。", - "security_update.backend.issue.global_proxy.title": "全域代理", - "security_update.backend.issue.system.message": "目前環境無法完成本次安全更新,請稍後重試。", - "security_update.backend.issue.system.title": "安全更新未完成", - "security_update.intro.title": "已儲存設定安全更新", - "security_update.intro.subtitle": "使用新的安全儲存方式前,需要先完成一次本機設定更新。", - "security_update.intro.description": "為了讓已儲存的連線、代理與相關服務設定使用新的安全儲存方式,本次更新需要進行一次本機設定更新。更新前會自動建立本機備份;如果本次未完成,系統會保留目前可用設定,你也可以稍後繼續。", - "security_update.intro.action.details": "檢視詳細資訊", - "security_update.intro.action.later": "稍後提醒我", - "security_update.intro.action.start_now": "立即更新", - "security_update.progress.default_detail": "更新過程中會保留目前可用設定,請稍候。", - "security_update.settings.title": "安全更新", - "security_update.settings.subtitle": "管理已儲存設定的安全更新狀態與待處理項目。", - "security_update.settings.action.retry_check": "重新檢查", - "security_update.settings.action.restart_update": "重新開始更新", - "security_update.settings.action.start": "開始更新", - "security_update.settings.action.close": "關閉", - "security_update.settings.current_status": "目前狀態:{{status}}", - "security_update.settings.scope_title": "影響範圍", - "security_update.settings.summary.total": "總計", - "security_update.settings.summary.updated": "已更新", - "security_update.settings.summary.pending": "待處理", - "security_update.settings.summary.skipped": "已略過", - "security_update.settings.summary.failed": "失敗", - "security_update.settings.pending_list": "待處理清單", - "security_update.settings.empty_pending": "目前沒有待處理項目", - "security_update.settings.item_status": "狀態:{{status}}", - "security_update.settings.item_severity": "層級:{{severity}}", - "security_update.settings.item_default_message": "目前項目需要進一步處理後才能完成安全更新。", - "security_update.settings.recent_result": "最近一次結果", - "security_update.settings.backup_path": "備份位置:", - "security_update.settings.last_error": "最近錯誤:", - "security_update.status.pending.label": "待更新", - "security_update.status.pending.description": "偵測到可進行的安全更新,你可以現在開始或稍後繼續。", - "security_update.status.postponed.label": "待更新", - "security_update.status.postponed.description": "本次安全更新已延後,目前可用設定會繼續保留。", - "security_update.status.in_progress.label": "更新中", - "security_update.status.in_progress.description": "正在檢查並更新已儲存設定的安全儲存。", - "security_update.status.needs_attention.label": "待處理", - "security_update.status.needs_attention.description": "更新尚未完成,有少量設定需要你處理。", - "security_update.status.completed.label": "已完成", - "security_update.status.completed.description": "已儲存設定已完成安全更新。", - "security_update.status.rolled_back.label": "已復原", - "security_update.status.rolled_back.description": "本次更新未完成,系統已保留目前可用設定。", - "security_update.status.not_detected.label": "未偵測到", - "security_update.status.not_detected.description": "目前沒有需要處理的安全更新。", - "security_update.action.open_connection": "開啟連線", - "security_update.action.open_proxy_settings": "代理設定", - "security_update.action.open_ai_settings": "AI 設定", - "security_update.action.retry_update": "重新檢查", - "security_update.action.view_details": "檢視詳細資訊", - "security_update.item_status.pending": "待更新", - "security_update.item_status.updated": "已更新", - "security_update.item_status.needs_attention": "待處理", - "security_update.item_status.skipped": "已略過", - "security_update.item_status.failed": "失敗", - "security_update.severity.high": "高風險", - "security_update.severity.medium": "中風險", - "security_update.severity.low": "低風險", - "security_update.repair.warning.connection_not_found": "找不到對應連線,請先重新檢查最新狀態", - "security_update.bootstrap.legacy.connection.message": "此連線仍保存在目前應用程式的本機設定中,完成安全更新後會遷入新的安全儲存。", - "security_update.bootstrap.legacy.global_proxy.title": "全域代理", - "security_update.bootstrap.legacy.global_proxy.message": "全域代理仍保存在目前應用程式的本機設定中,完成安全更新後會遷入新的安全儲存。", - "security_update.error.capability_unavailable": "安全更新能力無法使用", - "app.settings.description": "集中處理語言、代理、主題、AI 與關於等通用設定入口。", - "app.settings.entry.about.description": "檢視版本資訊、仓库地址和更新状态。", - "app.settings.entry.about.title": "關於 GoNavi", - "app.settings.entry.ai.description": "管理模型供应商、密钥和預設行为。", - "app.settings.entry.ai.title": "AI 設定", - "app.settings.entry.proxy.description": "统一設定更新檢查、驅動管理和公共网络出口。", - "app.settings.entry.proxy.title": "全局代理", - "app.settings.entry.theme.description": "切换亮暗主題并调整界面观感。", - "app.settings.entry.theme.title": "主題与外观", - "app.settings.title": "設定中心", - "app.shortcuts.action.focusSidebarSearch.description": "定位到左側連線樹搜尋框", - "app.shortcuts.action.focusSidebarSearch.label": "聚焦側邊欄搜尋", - "app.shortcuts.action.newConnection.description": "建立新的資料庫、執行階段或其他資料來源連線", - "app.shortcuts.action.newConnection.label": "新增資料來源", - "app.shortcuts.action.newQueryTab.description": "建立新的 SQL 查詢標籤頁", - "app.shortcuts.action.newQueryTab.label": "新增查詢頁", - "app.shortcuts.action.openShortcutManager.description": "開啟快捷鍵設定面板", - "app.shortcuts.action.openShortcutManager.label": "開啟快捷鍵管理", - "app.shortcuts.action.record": "錄製", - "app.shortcuts.action.resetWindowZoom.description": "Windows 工作列還原後字體異常放大時手動觸發;會切換一次最大化讓 WebView2 重新計算字體度量", - "app.shortcuts.action.resetWindowZoom.label": "重設視窗縮放", - "app.shortcuts.action.restore_defaults": "還原預設", - "app.shortcuts.action.runQuery.description": "在目前查詢頁執行 SQL", - "app.shortcuts.action.runQuery.label": "執行 SQL", - "app.shortcuts.action.saveQuery.description": "儲存目前查詢頁;未命名查詢會開啟儲存彈窗", - "app.shortcuts.action.saveQuery.label": "儲存查詢", - "app.shortcuts.action.selectCurrentStatement.description": "在查詢編輯器中選取游標所在 SQL 語句", - "app.shortcuts.action.selectCurrentStatement.label": "選取目前語句", - "app.shortcuts.action.sendAIChatMessage.description": "在 AI 輸入框中送出目前訊息,Shift+Enter 一律換行", - "app.shortcuts.action.sendAIChatMessage.label": "AI 聊天送出", - "app.shortcuts.action.switchToNextTab.description": "在開啟的標籤頁中向右切換", - "app.shortcuts.action.switchToNextTab.label": "切換到下一個標籤頁", - "app.shortcuts.action.switchToPreviousTab.description": "在開啟的標籤頁中向左切換", - "app.shortcuts.action.switchToPreviousTab.label": "切換到上一個標籤頁", - "app.shortcuts.action.toggleAIPanel.description": "開啟右側 AI 資料洞察面板", - "app.shortcuts.action.toggleAIPanel.label": "開啟 AI 資料洞察", - "app.shortcuts.action.toggleLogPanel.description": "開啟或關閉 SQL 執行記錄面板", - "app.shortcuts.action.toggleLogPanel.label": "切換記錄面板", - "app.shortcuts.action.toggleMacFullscreen.description": "macOS 原生視窗控制模式下的全螢幕切換", - "app.shortcuts.action.toggleMacFullscreen.label": "切換原生全螢幕", - "app.shortcuts.action.toggleTheme.description": "在淺色與深色主題之間切換", - "app.shortcuts.action.toggleTheme.label": "切換主題", - "app.shortcuts.action.diagnoseQuery.description": "對目前 SQL 執行 EXPLAIN 並顯示執行計劃圖與索引建議", - "app.shortcuts.action.diagnoseQuery.label": "SQL 診斷", - "app.shortcuts.action.showSlowQueries.description": "檢視目前連線的慢 SQL 歷史記錄(預設閾值 500ms)", - "app.shortcuts.action.showSlowQueries.label": "慢 SQL 歷史", - "app.shortcuts.capture_hint": "點擊「錄製」後按下快捷鍵。按 Esc 可取消錄製。全域快捷鍵建議包含修飾鍵;AI 聊天傳送僅支援 Enter 相關組合,Shift+Enter 保留換行。", - "app.shortcuts.capture_waiting": "請按下快捷鍵...", - "app.shortcuts.context.datagrid": "資料表格", - "app.shortcuts.context.global": "瀏覽器", - "app.shortcuts.context.monaco": "編輯器", - "app.shortcuts.description": "統一檢視、錄製與啟用/停用常用快捷鍵,保持操作習慣一致。", - "app.shortcuts.message.ai_send_limit": "AI 聊天傳送快捷鍵僅支援 Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter,Shift+Enter 保留換行", - "app.shortcuts.message.conflict": "與「{{action}}」衝突,請更換一組快捷鍵", - "app.shortcuts.message.modifier_required": "快捷鍵至少包含 Ctrl / Alt / Shift / Meta 之一", - "app.shortcuts.message.reserved_conflict_info": "已覆蓋編輯器「{{labels}}」預設快捷鍵", - "app.shortcuts.message.reserved_conflict_warning": "與{{contexts}}「{{labels}}」衝突,可能失效", - "app.shortcuts.message.restored_defaults": "已還原預設快捷鍵", - "app.shortcuts.reserved.browser_close_tab": "瀏覽器關閉標籤頁", - "app.shortcuts.reserved.browser_new_incognito_window": "瀏覽器新增無痕式視窗", - "app.shortcuts.reserved.browser_new_tab": "瀏覽器新增分頁", - "app.shortcuts.reserved.browser_new_window": "瀏覽器新增視窗", - "app.shortcuts.reserved.browser_print": "瀏覽器列印", - "app.shortcuts.reserved.browser_save": "瀏覽器儲存", - "app.shortcuts.reserved.datagrid_copy": "資料表格複製", - "app.shortcuts.reserved.editor_add_selection": "編輯器新增選取區", - "app.shortcuts.reserved.editor_delete_line": "編輯器刪除行", - "app.shortcuts.reserved.editor_find": "編輯器尋找", - "app.shortcuts.reserved.editor_find_global": "編輯器全域尋找", - "app.shortcuts.reserved.editor_goto_line": "編輯器前往指定行", - "app.shortcuts.reserved.editor_insert_line_after": "編輯器在下方插入行", - "app.shortcuts.reserved.editor_insert_line_before": "編輯器在上方插入行", - "app.shortcuts.reserved.editor_quick_open": "編輯器快速開啟", - "app.shortcuts.reserved.editor_rename_symbol": "編輯器重新命名符號", - "app.shortcuts.reserved.editor_replace": "編輯器取代", - "app.shortcuts.title": "快捷鍵管理", - "app.sidebar.ai_assistant": "AI 助手", - "app.sidebar.resize_width": "拖动调整宽度", - "app.sidebar.settings": "設定", - "app.sidebar.sql_execution_log": "SQL 執行日志", - "app.sidebar.tools": "工具", - "app.tools.entry.snippets.description": "管理 SQL 程式碼片段與前綴補全。", - "app.tools.entry.snippets.title": "程式碼片段管理", - "app.theme.action.restore_defaults": "還原預設", - "app.theme.appearance.blur_hint": "* 仅控制套用内覆盖层的模糊效果", - "app.theme.appearance.blur_title": "高斯模糊 (Blur)", - "app.theme.appearance.enable_transparency_blur": "啟用透明与模糊", - "app.theme.appearance.enable_transparency_blur_hint": "關閉后保留目前阈值,重新开启时直接還原之前的設定。", - "app.theme.appearance.font_size_title": "基础字体大小 (Font Size)", - "app.theme.appearance.opacity_title": "背景不透明度 (Opacity)", - "app.theme.appearance.transparency_blur_title": "透明与模糊效果", - "app.theme.appearance.ui_scale_hint": "* 建议小屏设备設定为 85%-95%", - "app.theme.appearance.ui_scale_title": "界面缩放 (UI Scale)", - "app.theme.appearance.windows_acrylic_hint": "Windows 使用系统 Acrylic 效果,模糊程度由系统控制", - "app.theme.appearance_settings_description": "集中調整縮放、字型、透明度與模糊效果。", - "app.theme.appearance_settings_title": "外觀設定", - "app.theme.data_table.column_width_hint": "标准模式預設列宽 200px;紧凑模式預設列宽 140px。已手动拖拽调整的列宽优先保留。", - "app.theme.data_table.column_width_mode": "資料表列宽模式", - "app.theme.data_table.column_width_mode.compact": "紧凑 140px", - "app.theme.data_table.column_width_mode.standard": "标准 200px", - "app.theme.data_table.title": "資料表显示", - "app.theme.data_table.vertical_borders": "显示資料表竖向分隔线", - "app.theme.data_table.vertical_borders_hint": "仅作用于資料表页面 DataGrid,不影响其他表格组件。", - "app.theme.mac_window.restart_hint": "* 已同步隐藏右上角自定义按钮;如系统視窗样式未立即重新整理,可重启套用后再确认", - "app.theme.mac_window.title": "macOS 視窗控制", - "app.theme.mac_window.use_native_controls": "使用 macOS 原生視窗控制", - "app.theme.mac_window.use_native_controls_hint": "啟用后显示左上角红黄绿按钮,并优先使用 macOS 原生全屏行为。", - "app.theme.mode.dark.description": "適合低光源環境,視覺感受更沉穩。", - "app.theme.mode.dark.label": "深色主題", - "app.theme.mode.light.description": "適合明亮環境,視覺層次更輕盈。", - "app.theme.mode.light.label": "淺色主題", - "app.theme.mode_title": "主題模式", - "app.theme.nav.appearance.description": "縮放、字型與透明度", - "app.theme.nav.appearance.title": "外觀參數", - "app.theme.nav.theme.description": "淺色與深色切換", - "app.theme.nav.theme.title": "主題模式", - "app.theme.navigation_title": "設定導覽", - "app.theme.startup_window.fullscreen": "启动时全屏", - "app.theme.startup_window.fullscreen_windows": "启动时全屏(Windows 按最大化处理)", - "app.theme.startup_window.hint": "* 修改后下次启动生效", - "app.theme.startup_window.title": "启动視窗", - "app.theme.startup_window.windows_hint": "* Windows 下该选项按“启动时最大化”处理,修改后下次启动生效", - "app.theme.theme_settings_description": "切換淺色與深色主題,維持整體視覺風格一致。", - "app.theme.theme_settings_title": "主題設定", - "app.theme.ui_version.badge.new": "NEW", - "app.theme.ui_version.beta_warning": "新版 UI 仍在 Beta,部分畫面樣式可能與舊版不同,遇到問題可隨時切回。", - "app.theme.ui_version.description": "在保留全部功能的前提下切換整體外觀;新版採用更緊湊的資訊層級與更現代的視覺語言。", - "app.theme.ui_version.legacy.badge": "預設", - "app.theme.ui_version.legacy.description": "目前穩定介面,所有功能皆可完整使用。", - "app.theme.ui_version.legacy.label": "舊版 UI", - "app.theme.ui_version.platform_hint": "Windows、macOS 與 Linux 均可切換;切換後會立即生效,部分彈窗會在下次開啟時使用新樣式。", - "app.theme.ui_version.sidebar_search.command": "新版命令搜尋", - "app.theme.ui_version.sidebar_search.filter": "舊版側欄篩選", - "app.theme.ui_version.sidebar_search.hint": "新版命令搜尋適合跳轉連線、資料表與動作,可在面板中開啟同步開關持續篩選左側樹;舊版側欄篩選會直接顯示輸入框並持久保留篩選內容。", - "app.theme.ui_version.sidebar_search.title": "新版左側搜尋模式", - "app.theme.tab_display.title": "Tab 標籤顯示", - "app.theme.tab_display.description": "自訂連線名稱、物件類型、物件名稱、資料庫、Schema 與 Host/IP 的顯示順序;雙行模式可把上下文放到副行。", - "app.theme.tab_display.layout.single": "單行", - "app.theme.tab_display.layout.double": "雙行", - "app.theme.tab_display.badge.current": "目前", - "app.theme.tab_display.row.primary": "主行", - "app.theme.tab_display.row.secondary": "副行", - "app.theme.tab_display.action.move_up": "上移", - "app.theme.tab_display.action.move_down": "下移", - "app.theme.tab_display.preview.prefix": "目前預覽:", - "app.theme.tab_display.preview.default_label": "預設標籤", - "app.theme.tab_display.preview.secondary": ",副行 {{labels}}", - "app.theme.tab_display.preview.focused": ";目前選取 {{label}}", - "app.theme.tab_display.element.connection.label": "連線名稱", - "app.theme.tab_display.element.connection.description": "連線簡稱或環境名稱,例如 DEV", - "app.theme.tab_display.element.kind.label": "物件類型", - "app.theme.tab_display.element.kind.description": "SQL / TABLE / VIEW 等類型標籤", - "app.theme.tab_display.element.object.label": "物件名稱", - "app.theme.tab_display.element.object.description": "資料表名稱、查詢名稱、資源名稱等核心名稱", - "app.theme.tab_display.element.database.label": "資料庫", - "app.theme.tab_display.element.database.description": "目前 DB / catalog 名稱", - "app.theme.tab_display.element.schema.label": "Schema", - "app.theme.tab_display.element.schema.description": "schema / owner 前綴", - "app.theme.tab_display.element.host.label": "Host/IP", - "app.theme.tab_display.element.host.description": "連線目標位址摘要", - "app.theme.ui_version.title": "介面版本", - "app.theme.ui_version.v2.badge": "Beta", - "app.theme.ui_version.v2.description": "重新設計的緊湊介面,強化 AI 入口與資料表概覽。", - "app.theme.ui_version.v2.label": "新版 UI", - "app.tools.description": "集中處理連線設定、同步、驅動和快捷鍵相關操作。", - "app.tools.group.config.description": "匯入匯出、資料目錄與已儲存設定維護。", - "app.tools.group.config.title": "連線與設定", - "app.tools.group.workflow.description": "比對結構、分析差異並發起同步。", - "app.tools.group.workflow.title": "資料工作流", - "app.tools.group.workspace.description": "驅動、程式碼片段與全域快捷鍵。", - "app.tools.group.workspace.title": "編輯器與驅動", - "app.tools.entry.data_root.description": "檢視、切换或遷移本地資料儲存位置。", - "app.tools.entry.data_root.title": "資料目錄", - "app.tools.entry.drivers.description": "安裝、更新或移除資料库驅動。", - "app.tools.entry.drivers.title": "驅動管理", - "app.tools.entry.export.description": "匯出目前連線与可见設定字段。", - "app.tools.entry.export.title": "匯出連線設定", - "app.tools.entry.import.description": "从本地文件還原連線列表。", - "app.tools.entry.import.title": "匯入連線設定", - "app.tools.entry.security_update.description": "檢視已儲存設定的安全更新狀態。", - "app.tools.entry.security_update.status_description": "目前狀態:{{status}}", - "app.tools.entry.security_update.title": "安全更新", - "app.window_zoom.message.fullscreen_exit_first": "全螢幕狀態下無法重置縮放,請先退出全螢幕", - "app.window_zoom.message.reset_failed": "重置視窗縮放失敗", - "app.window_zoom.message.reset_success": "已重置視窗縮放", - "app.window_zoom.message.reset_success_fallback": "已重置視窗縮放(回退方案)", - "app.window_zoom.message.windows_only": "此功能僅在 Windows 平台生效", - "app.tools.entry.shortcuts.description": "檢視並調整全域快捷鍵綁定。", - "app.tools.entry.shortcuts.title": "快捷鍵管理", - "app.tools.entry.schema_compare.description": "對比來源表與目標表的結構差異,只預覽不執行。", - "app.tools.entry.schema_compare.title": "表結構比對", - "app.tools.entry.data_compare.description": "依主鍵分析新增、更新、刪除與相同行。", - "app.tools.entry.data_compare.title": "資料比對", - "app.tools.entry.sync.description": "进入跨源同步工作流。", - "app.tools.entry.sync.title": "資料同步", - "app.tools.title": "工具中心", - "app.connection_package.action.start_export": "開始匯出", - "app.connection_package.action.start_import": "開始匯入", - "app.connection_package.dialog.export_title": "匯出連線", - "app.connection_package.dialog.file_password_placeholder": "請輸入檔案保護密碼(選填)", - "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "密碼已加密保護。如需透過公網傳輸,建議設定檔案保護密碼。", - "app.connection_package.dialog.help.exclude_passwords": "將只匯出連線設定,不包含密碼。", - "app.connection_package.dialog.help.share_file_password_separately": "請透過單獨管道將密碼告知接收方,不要和檔案一起傳送。", - "app.connection_package.dialog.import_password_title": "輸入匯入密碼", - "app.connection_package.dialog.option.include_passwords": "匯出連線密碼", - "app.connection_package.dialog.option.use_file_password": "設定檔案保護密碼", - "app.connection_package.dialog.restore_password_placeholder": "請輸入恢復包密碼", - "app.connection_package.error.export_capability_unavailable": "匯出失敗:目前後端未提供新版匯出能力", - "app.connection_package.error.file_password_required": "檔案保護密碼不能為空", - "app.connection_package.error.import_capability_unavailable": "匯入失敗:目前後端未提供新版匯入能力", - "app.connection_package.error.import_no_connections": "匯入失敗:後端未返回連線列表", - "app.connection_package.error.missing_import_payload": "匯入失敗:未找到待匯入的恢復包內容", - "app.connection_package.error.refresh_failed_no_connections": "匯入成功,但重新整理連線列表失敗:後端未返回連線列表", - "app.connection_package.error.restore_password_required": "恢復包密碼不能為空", - "app.connection_package.message.export_failed": "匯出失敗", - "app.connection_package.message.export_succeeded": "匯出成功", - "app.connection_package.message.import_failed": "匯入失敗", - "app.connection_package.message.import_failed_with_error": "匯入失敗: {{error}}", - "app.connection_package.message.imported_connections": "成功匯入 {{count}} 個連線", - "app.connection_package.message.imported_with_missing_passwords": "成功匯入 {{count}} 個連線,部分連線未包含密碼,請編輯對應連線並輸入密碼後儲存", - "app.connection.message.editable_load_failed": "讀取已儲存連線詳情失敗,將改為開啟脫敏設定", - "app.connection.message.editable_load_failed_with_detail": "讀取已儲存連線詳情失敗:{{detail}},將改為開啟脫敏設定", - "app.connection_package.message.no_connections_to_export": "沒有連線可匯出", - "app.connection_package.message.unsupported_file_format": "檔案格式錯誤:僅支援 GoNavi 恢復包、歷史 JSON 連線陣列或 MySQL Workbench XML", - "app.browser_mock.export_sql_unsupported": "瀏覽器 mock 不支援 SQL 檔案匯出", - "app.browser_mock.import_connection_package_unsupported": "瀏覽器 mock 不支援恢復包匯入,僅支援歷史 JSON 連線陣列", - "app.browser_mock.export_connection_package_unsupported": "瀏覽器 mock 不支援恢復包匯出", - "app.browser_mock.mcp_http.not_running": "GoNavi MCP HTTP 服務未啟動", - "app.browser_mock.mcp_http.started": "GoNavi MCP HTTP 服務已啟動", - "app.browser_mock.mcp_http.stopped": "GoNavi MCP HTTP 服務已停止", - "app.browser_mock.mcp_server.command_required": "MCP 命令不能為空", - "app.browser_mock.mcp_server.test_success": "MCP mock 測試成功", - "app.browser_mock.mcp_tool.unavailable": "瀏覽器 mock 未接入真實 MCP 服務", - "app.browser_mock.mcp_client.claude_code.installed": "已寫入 Claude Code 使用者層級 MCP 設定,重新啟動 Claude CLI 後可在 /mcp 的 User MCPs 中看到 GoNavi。", - "app.browser_mock.mcp_client.claude_code.not_detected": "未偵測到 Claude Code 使用者層級 GoNavi MCP 設定", - "app.browser_mock.mcp_client.codex.installed": "已寫入 Codex 使用者層級 MCP 設定,重新啟動 Codex CLI 或桌面端後可看到 GoNavi。", - "app.browser_mock.mcp_client.codex.path_mismatch": "已偵測到 Codex 中的 GoNavi MCP 記錄,但與目前 GoNavi 安裝路徑不一致,建議更新", - "app.browser_mock.provider.test_failed_detail": "連線測試失敗:{{detail}}", - "app.browser_mock.provider.test_success": "端點連通性測試成功", - "app.update.action.hide_to_background": "隐藏到背景", - "app.update.action.install_update": "安裝更新", - "app.update.action.open_install_directory": "開啟安裝目錄", - "app.update.backend.error.check_failed": "檢查更新失敗:{{detail}}", - "app.update.backend.error.check_http_status": "檢查更新失敗:HTTP {{status}}", - "app.update.backend.error.download_failed": "更新下載失敗:{{detail}}", - "app.update.backend.error.install_unsupported": "目前平台暫不支援更新安裝:{{platform}}", - "app.update.backend.error.latest_version_unparseable": "無法解析最新版本號", - "app.update.backend.error.online_update_unsupported": "目前平台暫不支援線上更新:{{platform}}", - "app.update.backend.error.package_download_http_failed": "下載更新套件失敗:HTTP {{status}}", - "app.update.backend.error.package_file_busy": "更新下載失敗,檔案被占用:{{detail}}", - "app.update.backend.error.release_version_unparseable": "無法解析發行版本號", - "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS 未包含目前平台更新套件", - "app.update.backend.error.sha256sums_download_failed": "下載 SHA256SUMS 失敗:HTTP {{status}}", - "app.update.backend.error.sha256sums_missing": "Release 未提供 SHA256SUMS", - "app.update.backend.error.update_package_not_found": "未找到更新套件:{{name}}", - "app.update.backend.message.app_directory_unavailable": "無法存取應用程式目錄:{{path}}", - "app.update.backend.message.app_directory_unresolved_download": "無法判斷目前應用程式目錄,因此無法下載更新", - "app.update.backend.message.check_first": "請先檢查更新", - "app.update.backend.message.checksum_failed": "更新套件校驗失敗,請重試", - "app.update.backend.message.checksum_missing": "缺少更新套件校驗值(SHA256SUMS)", - "app.update.backend.message.create_workspace_failed": "無法在應用程式目錄建立更新工作目錄:{{path}}", - "app.update.backend.message.download_in_progress": "更新套件正在下載中,請稍後重試", - "app.update.backend.message.install_launch_failed": "啟動更新安裝程式失敗:{{detail}}", - "app.update.backend.message.install_launch_failed_with_log": "啟動更新安裝程式失敗:{{detail}}(更新日誌:{{path}})", - "app.update.backend.message.install_started": "更新已開始安裝", - "app.update.backend.message.install_started_with_log": "更新已開始安裝,日誌路徑:{{path}}", - "app.update.backend.message.latest": "已是最新版本", - "app.update.backend.message.no_downloaded_package": "未找到已下載的更新套件", - "app.update.backend.message.no_update_package": "未找到可用的更新套件", - "app.update.backend.message.open_directory_failed": "開啟更新目錄失敗:{{detail}}", - "app.update.backend.message.open_directory_unsupported": "目前平台暫不支援開啟目錄:{{platform}}", - "app.update.backend.message.opened_install_directory": "已開啟安裝目錄:{{path}}", - "app.update.backend.message.package_already_downloaded": "更新套件已下載完成", - "app.update.backend.message.package_directory_unavailable": "更新目錄不存在或無法存取", - "app.update.backend.message.package_directory_unresolved": "無法解析更新目錄", - "app.update.backend.message.package_downloaded": "更新套件下載完成", - "app.update.backend.message.package_path_empty": "更新套件路徑為空", - "app.update.backend.message.update_found": "發現新版本:{{version}}", - "app.update.download_title": "下載更新", - "app.update.download_title_with_version": "下載更新 {{version}}", - "app.update.message.check_failed": "檢查更新失败: {{error}}", - "app.update.message.download_completed": "更新下載完成", - "app.update.message.download_completed_with_path": "更新下載完成,更新包路径:{{path}}", - "app.update.message.download_failed": "更新下載失败: {{error}}", - "app.update.message.install_failed": "更新安裝失败: {{error}}", - "app.update.message.open_install_directory_failed": "開啟安裝目錄失败: {{error}}", - "app.update.message.opened_install_directory": "已開啟安裝目錄,请手动完成替换", - "app.update.message.package_ready": "更新包已就绪({{version}})", - "app.update.message.package_ready_with_path": "更新包已就绪({{version}}),路径:{{path}}", - "app.update.message.update_found": "发现新版本 {{version}}", - "app.update.status.available_downloaded": "发现新版本 {{version}}(已下載,请点击“下載进度”后安裝)", - "app.update.status.available_not_downloaded": "发现新版本 {{version}}(未下載)", - "app.update.status.check_failed": "檢查更新失败: {{error}}", - "app.update.status.checking": "正在檢查更新...", - "app.update.status.latest": "目前已是最新版本({{version}})", - "app.update.status.not_checked": "未檢查", - "connection.delete": "刪除連線", - "connection.edit": "編輯連線", - "connection.new": "新增連線", - "connection.test": "測試連線", - "connection.unnamed": "未命名連線", - "database.unnamed": "未命名資料庫", - "database.label": "資料庫", - "connection.copy_suffix": " - 副本", - "query.format": "格式化 SQL", - "query.new": "新增查詢", - "query.run": "執行", - "query.save": "儲存查詢", - "saved_query.default_name": "查詢-{{index}}", - "query.stop": "停止", - "message_publish_modal.title": "測試傳送訊息", - "message_publish_modal.title_with_connection": "測試傳送訊息 · {{connectionName}}", - "message_publish_modal.action.send": "傳送", - "message_publish_modal.error.build_command_failed": "建構傳送命令失敗", - "message_publish_modal.error.send_failed_detail": "傳送失敗:{{detail}}", - "message_publish_modal.error.unknown_error": "未知錯誤", - "message_publish_modal.field.exchange.label": "Exchange(可選)", - "message_publish_modal.field.exchange.extra": "留空會使用預設交換機;若填寫自訂交換機,請確認目標 Queue 已建立 binding。", - "message_publish_modal.field.exchange.placeholder": "例如:events.topic", - "message_publish_modal.field.routing_key.label": "Routing Key(可選)", - "message_publish_modal.field.routing_key.extra": "留空時預設使用目前 Queue 名稱。", - "message_publish_modal.field.routing_key.placeholder": "例如:orders.queue", - "message_publish_modal.field.qos.extra": "0 為 at most once,1 為 at least once,2 為 exactly once。", - "message_publish_modal.field.retain.label": "Retain 訊息", - "message_publish_modal.field.tag.label": "Tag(可選)", - "message_publish_modal.field.tag.extra": "留空表示不篩選或不寫入 Tag。", - "message_publish_modal.field.delay_level.label": "Delay Level(可選)", - "message_publish_modal.field.delay_level.extra": "RocketMQ 使用固定延時級別,0 表示立即傳送。", - "message_publish_modal.field.body_mode.label": "訊息體類型", - "message_publish_modal.field.body.label": "訊息體", - "message_publish_modal.field.body.required": "請輸入訊息體", - "message_publish_modal.field.body.extra": "JSON 模式下需輸入合法 JSON;文字模式會按原樣傳送。", - "message_publish_modal.field.body.placeholder": "請輸入訊息體", - "message_publish_modal.field.headers.label": "Headers(可選)", - "message_publish_modal.field.headers.extra": "需為 JSON 物件,例如 {{example}}。", - "message_publish_modal.field.properties.label": "Properties(可選)", - "message_publish_modal.field.properties.extra": "需為 JSON 物件,例如 {{example}}。", - "message_publish_modal.option.no_delay": "不延時", - "message_publish_modal.option.text": "文字", - "message_publish_modal.footer.success_prefix": "傳送成功後會返回", - "message_publish_modal.footer.success_suffix": ",用於確認本次測試訊息是否已提交。", - "message_publish.field.body": "訊息體", - "message_publish.field.message_key": "訊息 Key", - "message_publish.error.destination_required": "請輸入目標 Topic / Queue", - "message_publish.error.required_field": "請輸入{{field}}", - "message_publish.error.invalid_json_detail": "{{field}}不是合法 JSON:{{detail}}", - "message_publish.error.json_object_required": "{{field}} 必須是 JSON 物件", - "message_publish.error.mqtt_wildcard_topic": "MQTT 傳送 Topic 不能包含 + 或 # 萬用字元", - "message_publish.error.unsupported_type": "目前資料來源暫不支援測試傳送訊息:{{type}}", - "message_publish.presentation.rabbitmq.destination_placeholder": "例如:orders.queue", - "message_publish.presentation.rabbitmq.destination_required": "請輸入 Queue", - "message_publish.presentation.rabbitmq.alert": "目前表單會自動組裝 RabbitMQ publish JSON 命令,並透過 Management API 執行測試傳送。", - "message_publish.presentation.rabbitmq.success_hint": "Exchange 留空時會使用預設交換機,並以 Queue 名稱作為 routing key。", - "message_publish.presentation.rocketmq.destination_placeholder": "例如:orders.events", - "message_publish.presentation.topic_required": "請輸入 Topic", - "message_publish.presentation.rocketmq.alert": "目前表單會自動組裝 RocketMQ publish JSON 命令,並透過 NameServer/Broker 執行測試傳送。", - "message_publish.presentation.rocketmq.success_hint": "Tag、Keys、Delay Level 與 Properties 會一併寫入 RocketMQ 訊息屬性。", - "message_publish.presentation.keys_label": "訊息 Keys(可選)", - "message_publish.presentation.rocketmq.key_placeholder": "可輸入多個 Key,使用逗號分隔", - "message_publish.presentation.rocketmq.tag_placeholder": "例如:TagA", - "message_publish.presentation.mqtt.destination_placeholder": "例如:devices/device-001/telemetry", - "message_publish.presentation.mqtt.alert": "目前表單會自動組裝 MQTT publish JSON 命令,並直接透過 broker 執行測試傳送。", - "message_publish.presentation.mqtt.success_hint": "QoS 與 retain 可分別指定;未填寫時沿用目前連線中的預設參數。", - "message_publish.presentation.kafka.destination_placeholder": "例如:orders.events", - "message_publish.presentation.kafka.alert": "目前表單會自動組裝 Kafka publish JSON 命令,並直接呼叫後端執行測試傳送。", - "message_publish.presentation.kafka.success_hint": "Headers 會作為 Kafka Record Headers 一併傳送。", - "message_publish.presentation.key_label": "訊息 Key(可選)", - "message_publish.presentation.kafka.key_placeholder": "可留空;JSON 模式請輸入一行合法 JSON", - "connection_modal.action.browse": "瀏覽...", - "connection_modal.action.disable": "停用", - "connection_modal.action.discover_members": "自動探索成員", - "connection_modal.action.enable_and_prefer": "啟用並設為首選", - "connection_modal.badge.current_editing": "目前編輯", - "connection_modal.badge.preferred": "首選", - "connection_modal.field.additional_hosts": "附加主機", - "connection_modal.field.additional_srv_hosts_optional": "附加 SRV 主機(選填)", - "connection_modal.field.auth_source": "認證庫 (authSource)", - "connection_modal.field.cluster_additional_hosts": "叢集附加節點", - "connection_modal.field.connection_timeout_seconds": "連線逾時(秒)", - "connection_modal.field.connection_timeout_seconds_ascii": "連線逾時(秒)", - "connection_modal.field.default_database_optional": "預設連線資料庫(選填)", - "connection_modal.field.display_databases_optional": "顯示資料庫(選填)", - "connection_modal.field.file_path_absolute": "檔案路徑(絕對路徑)", - "connection_modal.field.host_address": "主機位址", - "connection_modal.field.password_optional": "密碼(選填)", - "connection_modal.field.port": "連接埠", - "connection_modal.field.port_plain": "連接埠", - "connection_modal.field.private_key_path_optional": "私鑰路徑(選填)", - "connection_modal.field.proxy_host": "代理主機", - "connection_modal.field.proxy_password_optional": "代理密碼(選填)", - "connection_modal.field.proxy_type": "代理類型", - "connection_modal.field.proxy_username_optional": "代理使用者名稱(選填)", - "connection_modal.field.replica_hosts": "從庫位址清單", - "connection_modal.field.replica_password_optional": "從庫密碼(選填)", - "connection_modal.field.replica_set_optional": "Replica Set(選填)", - "connection_modal.field.replica_set_password_optional": "Replica Set 密碼(選填)", - "connection_modal.field.replica_set_username_optional": "Replica Set 使用者名稱(選填)", - "connection_modal.field.replica_username_optional": "從庫使用者名稱(選填)", - "connection_modal.field.save_password": "儲存密碼", - "connection_modal.field.service_name": "服務名稱", - "connection_modal.field.defaultDatabase.placeholder": "例如:appdb", - "connection_modal.field.serviceName.placeholder": "例如:ORCLPDB1", - "connection_modal.field.clickHouseProtocol.auto": "自動", - "connection_modal.field.oceanBaseProtocol.label": "OceanBase 協議", - "connection_modal.field.oceanBaseProtocol.help.primary": "MySQL 租戶請選擇 MySQL;Oracle 租戶請選擇 Oracle。GoNavi 會依連接埠自動選擇:OB MySQL wire 連接埠走 OBClient capability 注入(與 Navicat 相同路徑),OBProxy Oracle listener 連接埠走標準 TNS。", - "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "如果 Oracle 租戶連線報「Error 1235」或 OBClient 握手失敗,可在「連線參數」欄位透過 {{attributes}} 覆蓋 GoNavi 預設注入的 OBClient capability。", - "connection_modal.field.ssh_host": "SSH 主機", - "connection_modal.field.ssh_password": "SSH 密碼", - "connection_modal.field.ssh_user": "SSH 使用者", - "connection_modal.field.ssl_cert_path": "SSL 憑證路徑", - "connection_modal.field.ssl_key_path": "SSL 私鑰路徑", - "connection_modal.field.tunnel_host": "HTTP Tunnel 主機", - "connection_modal.field.tunnel_password_optional": "HTTP Tunnel 密碼(選填)", - "connection_modal.field.tunnel_username_optional": "HTTP Tunnel 使用者名稱(選填)", - "connection_modal.field.username": "使用者名稱", - "connection_modal.field.username.optional_placeholder": "未啟用認證可留空", - "connection_modal.help.additional_hosts": "可選 MongoDB 成員,使用逗號、分號或空格分隔。", - "connection_modal.help.additional_srv_hosts": "可選的附加 SRV 主機,用於 MongoDB 探索。", - "connection_modal.help.connection_timeout": "用於連線測試與中繼資料載入,範圍 1-300 秒。", - "connection_modal.help.custom_driver": "已支援: mysql, postgres, sqlite, oracle, dm, kingbase;別名支援 postgresql/pgx、dm8、kingbase8/kingbasees/kingbasev8。目前不支援透過 JDBC Jar 擴充驅動程式。", - "connection_modal.help.default_database": "留空則使用伺服器預設資料庫。", - "connection_modal.help.oracle_service_name": "Oracle 服務名稱,例如 ORCLPDB1。", - "connection_modal.help.private_key_path": "使用私鑰進行 SSH 認證;若私鑰未加密,可留空密碼。", - "connection_modal.help.redis_cluster_hosts": "附加 Redis Cluster 節點,使用逗號、分號或空格分隔。", - "connection_modal.help.replica_hosts": "從庫位址使用 host:port 格式,使用逗號、分號或空格分隔。", - "connection_modal.help.select_after_test": "請先測試連線以載入可選資料庫。", - "connection_modal.jvm.access_mode_description": "選擇此 JVM 連線可使用的接入模式,並指定首選模式。", - "connection_modal.jvm.access_mode_title": "接入模式", - "connection_modal.jvm.agent_api_key_optional": "Agent API 金鑰(選填)", - "connection_modal.jvm.agent_description": "透過 GoNavi Agent 連線,適用於無法直接連線的網路環境。", - "connection_modal.jvm.agent_help": "GoNavi Agent 服務的基礎 URL。", - "connection_modal.jvm.agent_url": "Agent 位址", - "connection_modal.jvm.diagnostic.agent_bridge_description": "使用 GoNavi Agent Bridge 診斷 Endpoint。", - "connection_modal.jvm.diagnostic.arthas_tunnel_description": "透過 Arthas Tunnel 存取目標 JVM。", - "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Arthas Tunnel 伺服器的基礎 URL。", - "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", - "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", - "connection_modal.jvm.diagnostic.arthas_tunnel_url": "Arthas Tunnel 位址", - "connection_modal.jvm.diagnostic.bridge_help": "GoNavi 診斷橋接服務的基礎 URL。", - "connection_modal.jvm.diagnostic.bridge_url": "診斷橋接位址", - "connection_modal.jvm.diagnostic.mutating_commands": "變更類命令", - "connection_modal.jvm.diagnostic.mutating_commands_description": "允許可能改變執行階段狀態的命令,僅在受控環境使用。", - "connection_modal.jvm.diagnostic.observe_commands": "觀察類命令", - "connection_modal.jvm.diagnostic.observe_commands_description": "允許 dashboard、thread、JVM 資訊等唯讀命令。", - "connection_modal.jvm.diagnostic.target_agent_id": "目標 Agent ID", - "connection_modal.jvm.diagnostic.target_agent_id_help": "Arthas Tunnel 中註冊的 Agent ID。", - "connection_modal.jvm.diagnostic.target_id": "目標 ID", - "connection_modal.jvm.diagnostic.target_id_help": "診斷橋接服務識別的目標 ID;留空則由橋接服務選擇預設目標。", - "connection_modal.jvm.diagnostic.trace_commands": "追蹤類命令", - "connection_modal.jvm.diagnostic.trace_commands_description": "允許 trace 與 watch 等會增加執行階段負載的命令。", - "connection_modal.jvm.diagnostic_api_key_optional": "診斷 API 金鑰(選填)", - "connection_modal.jvm.diagnostic_description": "啟用可選診斷命令,用於 JVM 故障排查。", - "connection_modal.jvm.diagnostic_disabled_hint": "診斷增強未啟用,僅在需要執行階段排查時開啟。", - "connection_modal.jvm.diagnostic_timeout_seconds": "診斷逾時(秒)", - "connection_modal.jvm.diagnostic_title": "診斷增強", - "connection_modal.jvm.diagnostic_transport": "診斷傳輸", - "connection_modal.jvm.endpoint_api_key_optional": "Endpoint API 金鑰(選填)", - "connection_modal.jvm.endpoint_description": "使用服務暴露的 Endpoint 連線,而不是直接連線 JMX。", - "connection_modal.jvm.endpoint_help": "JVM 管理 Endpoint 的基礎 URL。", - "connection_modal.jvm.endpoint_url": "Endpoint 位址", - "connection_modal.jvm.environment": "環境", - "connection_modal.jvm.environment.dev": "開發", - "connection_modal.jvm.environment.dev_description": "風險較低的測試環境。", - "connection_modal.jvm.environment.prod": "正式", - "connection_modal.jvm.environment.prod_description": "正式環境,建議優先使用唯讀操作。", - "connection_modal.jvm.environment.uat": "UAT", - "connection_modal.jvm.environment.uat_description": "上線前驗證環境。", - "connection_modal.jvm.jmx_description": "透過 JMX 使用主機、連接埠和選填憑據連線。", - "connection_modal.jvm.jmx_host_override_optional": "JMX 主機覆寫(選填)", - "connection_modal.jvm.jmx_password_optional": "JMX 密碼(選填)", - "connection_modal.jvm.jmx_port": "JMX 連接埠", - "connection_modal.jvm.jmx_username_optional": "JMX 使用者名稱(選填)", - "connection_modal.jvm.mode.agent_description": "透過 GoNavi Agent 存取防火牆或 NAT 後的環境。", - "connection_modal.jvm.mode.endpoint_description": "使用目標服務暴露的 HTTP Endpoint。", - "connection_modal.jvm.mode.jmx_description": "使用標準 JMX 遠端存取。", - "connection_modal.jvm.preferred_mode_hint": "目前首選模式:{{mode}}", - "connection_modal.jvm.read_only_first": "優先唯讀操作", - "connection_modal.jvm.security_policy": "安全策略", - "connection_modal.message.srv_with_ssh_dns_warning": "SRV 與 SSH Tunnel 同時啟用時可能依賴本機 DNS 解析;若解析失敗,請改用標準主機清單。", - "connection_modal.messageQueue.kafka.defaultTopic.label": "預設 Topic(可選)", - "connection_modal.messageQueue.kafka.defaultTopic.help": "留空時必須在 SQL 中明確指定 Topic;填寫後可直接執行 SHOW、CONSUME 或 SELECT 預覽。", - "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "例如:orders.events", - "connection_modal.messageQueue.rocketmq.defaultTopic.label": "預設 Topic(可選)", - "connection_modal.messageQueue.rocketmq.defaultTopic.help": "留空時必須在 SQL 中明確指定 Topic;連線參數可繼續補充 groupId、namespace、tag、pullBatchSize 與 startOffset。", - "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "例如:orders.events", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "預設 Topic / Filter(可選)", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "留空時必須在 SQL 中明確指定 Topic;填寫後可直接執行 SHOW、CONSUME 或 SELECT 預覽。支援使用 /、+、#。", - "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "例如:devices/+/telemetry", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "預設 Virtual Host(可選)", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "留空預設使用 /;填寫後查詢編輯器會以目前 vhost 作為 Queue 瀏覽與測試傳送上下文。", - "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "例如:/ 或 orders-vhost", - "connection_modal.messageQueue.topology.cluster.label": "叢集模式", - "connection_modal.messageQueue.kafka.topology.single.label": "單 Broker", - "connection_modal.messageQueue.kafka.topology.single.description": "只設定一個 bootstrap broker,適合本機或簡單環境。", - "connection_modal.messageQueue.kafka.topology.cluster.description": "設定多個 bootstrap broker,提高發現與故障切換成功率。", - "connection_modal.messageQueue.rocketmq.topology.single.label": "單 NameServer", - "connection_modal.messageQueue.rocketmq.topology.single.description": "只設定一個 NameServer,適合本機或簡單環境。", - "connection_modal.messageQueue.rocketmq.topology.cluster.description": "設定多個 NameServer,提高路由發現與故障切換成功率。", - "connection_modal.messageQueue.mqtt.topology.single.label": "單 Broker", - "connection_modal.messageQueue.mqtt.topology.single.description": "只設定一個 broker,適合本機或簡單環境。", - "connection_modal.messageQueue.mqtt.topology.cluster.description": "設定多個 broker,提高連線發現與故障切換成功率。", - "connection_modal.messageQueue.kafka.extraBrokers.label": "額外 Broker 位址", - "connection_modal.messageQueue.kafka.extraBrokers.help": "可輸入多個 broker 位址,格式:host:port(按 Enter 確認)", - "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "例如:10.10.0.12:9092、10.10.0.13:9092", - "connection_modal.messageQueue.rocketmq.extraNameServers.label": "額外 NameServer 位址", - "connection_modal.messageQueue.rocketmq.extraNameServers.help": "可輸入多個 NameServer 位址,格式:host:port(按 Enter 確認)", - "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "例如:10.10.0.12:9876、10.10.0.13:9876", - "connection_modal.messageQueue.mqtt.extraBrokers.label": "額外 Broker 位址", - "connection_modal.messageQueue.mqtt.extraBrokers.help": "可輸入多個 broker 位址,格式:host:port(按 Enter 確認)", - "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "例如:10.10.0.12:1883、10.10.0.13:1883", - "connection_modal.redis.topology.single.label": "單機模式", - "connection_modal.redis.topology.single.description": "只連線一個 Redis 節點。", - "connection_modal.redis.topology.cluster.label": "叢集模式", - "connection_modal.redis.topology.cluster.description": "Redis Cluster,設定多個種子節點。", - "connection_modal.redis.topology.sentinel.label": "Sentinel 模式", - "connection_modal.redis.topology.sentinel.description": "透過 Sentinel 發現主節點,適合主從高可用。", - "connection_modal.redis.hosts.sentinel.label": "Sentinel 附加節點位址", - "connection_modal.redis.hosts.sentinel.help": "上方主機位址會作為第一個 Sentinel;這裡填寫其他 Sentinel 節點,格式:host:port", - "connection_modal.redis.hosts.sentinel.placeholder": "例如:10.10.0.12:26379、10.10.0.13:26379", - "connection_modal.redis.hosts.cluster.label": "叢集附加節點位址", - "connection_modal.redis.hosts.cluster.help": "主節點使用上方主機位址;這裡填寫其他種子節點,格式:host:port", - "connection_modal.redis.hosts.cluster.placeholder": "例如:10.10.0.12:6379、10.10.0.13:6379", - "connection_modal.redis.sentinel.master.label": "Sentinel master 名稱", - "connection_modal.redis.sentinel.master.help": "填寫 Sentinel 設定中的 monitor 名稱,例如 mymaster。", - "connection_modal.redis.sentinel.master.required": "請輸入 Sentinel master 名稱", - "connection_modal.redis.sentinel.master.placeholder": "例如:mymaster", - "connection_modal.redis.credentials.primary.label": "密碼 (可選)", - "connection_modal.redis.credentials.primary.placeholder.empty": "Redis 密碼(如果設定了 requirepass)", - "connection_modal.redis.credentials.primary.placeholder.retained": "已儲存 Redis 密碼", - "connection_modal.redis.credentials.sentinelUser.label": "Sentinel 使用者名稱(可選)", - "connection_modal.redis.credentials.sentinelUser.placeholder": "留空表示 Sentinel 不使用 ACL 使用者名稱", - "connection_modal.redis.credentials.sentinelPassword.label": "Sentinel 密碼(可選)", - "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Sentinel 自身認證密碼,留空則不傳送", - "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "已儲存 Sentinel 密碼", - "connection_modal.redis.credentials.sentinelPassword.clear": "清除已儲存 Sentinel 密碼", - "connection_modal.redis.credentials.sentinelPassword.description": "目前已儲存 Sentinel 密碼。留空表示繼續沿用,輸入新值表示替換。", - "connection_modal.redis.databaseScope.label": "顯示資料庫 (留空顯示全部)", - "connection_modal.redis.databaseScope.help": "連線測試成功後可選擇", - "connection_modal.redis.databaseScope.placeholder": "選擇顯示的資料庫", - "connection_modal.mongodb.auth.auto": "自動", - "connection_modal.mongodb.auth.auto_description": "由驅動自動選擇認證機制。", - "connection_modal.mongodb.auth.aws_iam_description": "使用 AWS IAM 認證,請在執行環境中提供 AWS IAM 憑據。", - "connection_modal.mongodb.auth.none": "無認證", - "connection_modal.mongodb.auth.none_description": "不使用 MongoDB 認證連線。", - "connection_modal.mongodb.auth.scram_sha1_description": "使用 SCRAM-SHA-1 認證。", - "connection_modal.mongodb.auth.scram_sha256_description": "使用 SCRAM-SHA-256 認證。", - "connection_modal.mongodb.auth_mechanism": "認證機制", - "connection_modal.mongodb.topology.single.label": "單機模式", - "connection_modal.mongodb.topology.replica.label": "副本集 / 多節點", - "connection_modal.mongodb.discovery.standard.label": "標準位址", - "connection_modal.mongodb.discovery.standard.description": "使用 host:port 直連或副本集節點清單。", - "connection_modal.mongodb.discovery.srv.label": "SRV 位址", - "connection_modal.mongodb.discovery.srv.description": "使用 mongodb+srv,由 DNS 探索目標節點。", - "connection_modal.mongodb.discovery.current": "目前", - "connection_modal.mongodb.discovery.srv_ssh_warning": "SRV 與 SSH Tunnel 同時啟用時,可能依賴本機 DNS 解析能力", - "connection_modal.mongodb.replica.hosts.srv.label": "附加 SRV 主機(可選)", - "connection_modal.mongodb.replica.hosts.srv.help": "可輸入多個候選主機名稱,格式:host;若留空則僅使用上方主機。", - "connection_modal.mongodb.replica.hosts.srv.placeholder": "例如:cluster-a.example.com、cluster-b.example.com", - "connection_modal.mongodb.replica.hosts.standard.label": "附加節點位址", - "connection_modal.mongodb.replica.hosts.standard.help": "可輸入多個節點位址,格式:host:port(按 Enter 確認)", - "connection_modal.mongodb.replica.hosts.standard.placeholder": "例如:10.10.0.12:27017、10.10.0.13:27017", - "connection_modal.mongodb.replica.set.label": "副本集名稱(可選)", - "connection_modal.mongodb.replica.set.placeholder": "例如:rs0", - "connection_modal.mongodb.replica.user.label": "副本集使用者名稱(可選)", - "connection_modal.mongodb.replica.user.placeholder": "留空沿用主要使用者名稱", - "connection_modal.mongodb.replica.password.label": "副本集密碼(可選)", - "connection_modal.mongodb.replica.password.placeholder.empty": "留空沿用主密碼", - "connection_modal.mongodb.replica.password.placeholder.retained": "已儲存副本集密碼", - "connection_modal.mongodb.replica.password.clear": "清除已儲存副本集密碼", - "connection_modal.mongodb.replica.password.description": "目前已儲存副本集密碼。留空表示繼續沿用,輸入新值表示替換。", - "connection_modal.mongodb.members.role": "角色", - "connection_modal.mongodb.members.health": "健康", - "connection_modal.mongodb.members.health.ok": "正常", - "connection_modal.mongodb.members.health.error": "異常", - "connection_modal.mongodb.policy.auth_source.label": "認證庫 (authSource)", - "connection_modal.mongodb.policy.auth_source.placeholder": "預設使用 database 或 admin", - "connection_modal.mongodb.read_preference": "readPreference", - "connection_modal.mongodb.read_preference.nearest": "讀取最近的成員。", - "connection_modal.mongodb.read_preference.primary": "僅從 primary 讀取。", - "connection_modal.mongodb.read_preference.primary_preferred": "優先從 primary 讀取,必要時回退到 secondary。", - "connection_modal.mongodb.read_preference.secondary": "僅從 secondary 讀取。", - "connection_modal.mongodb.read_preference.secondary_preferred": "優先從 secondary 讀取,必要時回退到 primary。", - "connection_modal.mongodb.srv_address": "SRV 位址", - "connection_modal.mongodb.srv_address_description": "使用 MongoDB SRV 記錄探索主機。", - "connection_modal.mongodb.standard_address": "標準位址", - "connection_modal.mongodb.standard_address_description": "使用主機、連接埠與可選成員清單。", - "connection_modal.network.http_tunnel": "HTTP Tunnel", - "connection_modal.network.http_tunnel_description": "透過 HTTP Tunnel 轉發資料庫流量。", - "connection_modal.network.http_tunnel_disabled_hint": "啟用 HTTP Tunnel 後可設定 Tunnel 主機、連接埠和憑據。", - "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel 不能與 SSH Tunnel 或代理同時使用。", - "connection_modal.network.http_tunnel_panel_description": "為此連線設定 HTTP Tunnel 閘道。", - "connection_modal.network.proxy": "代理", - "connection_modal.network.proxy_disabled_hint": "啟用代理後,此連線會透過 SOCKS5 或 HTTP CONNECT 轉發。", - "connection_modal.network.proxy_panel_description": "設定此連線的專用代理設定。", - "connection_modal.network.proxy_type.http_description": "使用 HTTP CONNECT 代理。", - "connection_modal.network.proxy_type.socks5_description": "使用 SOCKS5 代理。", - "connection_modal.network.ssh_disabled_hint": "啟用 SSH Tunnel 後可透過跳板機連線。", - "connection_modal.network.ssh_panel_description": "設定 SSH Tunnel 主機、憑據和選填私鑰。", - "connection_modal.network.ssh_tunnel": "SSH Tunnel", - "connection_modal.network.ssh_tunnel_description": "先透過 SSH Tunnel 再存取資料庫。", - "connection_modal.network.ssl_description": "使用 SSL/TLS 加密資料庫連線。", - "connection_modal.network.ssl_tls": "SSL/TLS", - "connection_modal.network.ssl_disabled_hint": "啟用 SSL/TLS 後可設定憑證策略。", - "connection_modal.network.ssl_mode": "SSL 模式", - "connection_modal.network.ssl_mode.preferred_description": "優先嘗試 SSL,伺服器不要求加密時允許回退。", - "connection_modal.network.ssl_mode.required_description": "必須使用 SSL,無法建立加密連線時失敗。", - "connection_modal.network.ssl_mode.skip_verify_description": "使用 SSL 但略過憑證校驗,僅用於測試或自簽憑證。", - "connection_modal.network.ssl_panel_description": "設定此連線的 SSL/TLS 策略。", - "connection_modal.placeholder.absolute_path": "/絕對/路徑/檔案", - "connection_modal.placeholder.agent_api_key": "選填 Agent API 金鑰", - "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", - "connection_modal.placeholder.custom_dsn_example": "範例:驅動專用 DSN", - "connection_modal.placeholder.default_database_or_admin": "預設資料庫或 admin", - "connection_modal.placeholder.diagnostic_api_key": "選填診斷 API 金鑰", - "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", - "connection_modal.placeholder.diagnostic_target_id": "目標 ID", - "connection_modal.placeholder.empty_without_auth": "無認證時留空", - "connection_modal.placeholder.endpoint_api_key": "選填 Endpoint API 金鑰", - "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", - "connection_modal.placeholder.example_appdb": "appdb", - "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", - "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", - "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", - "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", - "connection_modal.placeholder.example_rs0": "rs0", - "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", - "connection_modal.placeholder.no_auth": "無認證", - "connection_modal.placeholder.proxy_host": "127.0.0.1", - "connection_modal.placeholder.redis_password": "Redis 密碼", - "connection_modal.placeholder.select_databases": "選擇要顯示的資料庫", - "connection_modal.placeholder.select_redis_databases": "選擇要顯示的 Redis 資料庫", - "connection_modal.placeholder.ssh_host": "bastion.example.com", - "connection_modal.placeholder.ssl_cert_path": "/絕對/路徑/client.crt", - "connection_modal.placeholder.ssl_key_path": "/絕對/路徑/client.key", - "connection_modal.placeholder.tunnel_host": "tunnel.example.com", - "connection_modal.placeholder.use_primary_host": "使用主連線主機", - "connection_modal.placeholder.use_primary_password": "使用主連線密碼", - "connection_modal.placeholder.use_primary_password_short": "使用主密碼", - "connection_modal.placeholder.use_primary_port": "使用主連線連接埠", - "connection_modal.placeholder.use_primary_username": "使用主連線使用者名稱", - "connection_modal.placeholder.use_primary_username_short": "使用主使用者名稱", - "connection_modal.secret.clear_saved_mongo_replica_password": "清除已儲存的 MongoDB 複本密碼", - "connection_modal.secret.clear_saved_password": "清除已儲存密碼", - "connection_modal.secret.clear_saved_proxy_password": "清除已儲存的代理密碼", - "connection_modal.secret.clear_saved_replica_password": "清除已儲存的從庫密碼", - "connection_modal.secret.clear_saved_ssh_password": "清除已儲存的 SSH 密碼", - "connection_modal.secret.clear_saved_tunnel_password": "清除已儲存的 HTTP Tunnel 密碼", - "connection_modal.secret.error.saved_connection_missing": "找不到目前連線對應的已儲存密文,請重新填寫密碼並儲存後再試", - "connection_modal.secret.error.store_unavailable": "系統密文儲存目前無法使用,請檢查系統鑰匙圈或認證管理員後再試", - "connection_modal.secret.saved_mongo_replica_password": "已儲存 MongoDB 複本密碼", - "connection_modal.secret.saved_mongo_replica_password_description": "安全儲存中已有 MongoDB 複本密碼。留空將繼續使用該密碼。", - "connection_modal.secret.saved_password": "已儲存密碼", - "connection_modal.secret.saved_placeholder": "••••••(留空表示繼續沿用{{label}})", - "connection_modal.secret.saved_primary_password_description": "安全儲存中已有主連線密碼。留空將繼續使用該密碼。", - "connection_modal.secret.saved_proxy_password": "已儲存代理密碼", - "connection_modal.secret.saved_proxy_password_description": "安全儲存中已有代理密碼。留空將繼續使用該密碼。", - "connection_modal.secret.saved_redis_password": "已儲存 Redis 密碼", - "connection_modal.secret.saved_redis_password_description": "安全儲存中已有 Redis 密碼。留空將繼續使用該密碼。", - "connection_modal.secret.saved_replica_password": "已儲存從庫密碼", - "connection_modal.secret.saved_replica_password_description": "安全儲存中已有從庫密碼。留空將繼續使用該密碼。", - "connection_modal.secret.saved_ssh_password": "已儲存 SSH 密碼", - "connection_modal.secret.saved_ssh_password_description": "安全儲存中已有 SSH 密碼。留空將繼續使用該密碼。", - "connection_modal.secret.saved_tunnel_password": "已儲存 HTTP Tunnel 密碼", - "connection_modal.secret.saved_tunnel_password_description": "安全儲存中已有 HTTP Tunnel 密碼。留空將繼續使用該密碼。", - "connection_modal.section.advanced_connection": "進階連線", - "connection_modal.section.config_sections": "設定區段", - "connection_modal.status.disabled": "未啟用", - "connection_modal.status.enabled": "已啟用", - "connection_modal.status.healthy": "正常", - "connection_modal.status.unhealthy": "異常", - "connection_modal.switch.off": "關", - "connection_modal.switch.on": "開", - "connection_modal.table.health": "健康", - "connection_modal.table.role": "角色", - "connection_modal.topology.cluster": "叢集", - "connection_modal.topology.mongodb_replica": "Replica Set", - "connection_modal.topology.mongodb_replica_description": "連線 MongoDB Replica Set,並可選自動探索成員。", - "connection_modal.topology.mongodb_single_description": "連線單一 MongoDB 主機。", - "connection_modal.topology.mysql_replica_description": "使用主連線,並可選設定從庫位址。", - "connection_modal.topology.mysql_single_description": "連線單一 MySQL 相容節點。", - "connection_modal.topology.primary_replica": "主從", - "connection_modal.topology.redis_cluster_description": "連線 Redis Cluster,並列出附加節點。", - "connection_modal.topology.redis_single_description": "連線單一 Redis 節點。", - "connection_modal.topology.single": "單機模式", - "connection_modal.validation.address_or_path_required": "請輸入主機位址或檔案路徑", - "connection_modal.validation.agent_url_required": "請輸入 Agent 位址", - "connection_modal.validation.arthas_tunnel_url_required": "請輸入 Arthas Tunnel 位址", - "connection_modal.validation.dameng_ssl_cert_path_required": "請輸入達夢 SSL 憑證路徑", - "connection_modal.validation.dameng_ssl_key_path_required": "請輸入達夢 SSL 私鑰路徑", - "connection_modal.validation.diagnostic_bridge_url_required": "請輸入診斷橋接位址", - "connection_modal.validation.diagnostic_target_required": "請輸入診斷目標", - "connection_modal.validation.diagnostic_timeout_range_1_300": "診斷逾時必須介於 1 到 300 秒", - "connection_modal.validation.endpoint_url_required": "請輸入 Endpoint 位址", - "connection_modal.validation.jvm_access_mode_required": "請至少選擇一種 JVM 接入模式", - "connection_modal.validation.jvm_preferred_mode_required": "請選擇首選 JVM 接入模式", - "connection_modal.validation.oracle_service_required": "請輸入 Oracle 服務名稱", - "connection_modal.validation.port_required": "請輸入連接埠", - "connection_modal.validation.proxy_host_required": "請輸入代理主機", - "connection_modal.validation.proxy_port_required": "請輸入代理連接埠", - "connection_modal.validation.ssh_host_required": "請輸入 SSH 主機", - "connection_modal.validation.ssh_port_required": "請輸入 SSH 連接埠", - "connection_modal.validation.ssh_user_required": "請輸入 SSH 使用者", - "connection_modal.validation.timeout_range_1_300": "逾時必須介於 1 到 300 秒", - "connection_modal.validation.tunnel_host_required": "請輸入 HTTP Tunnel 主機", - "connection_modal.validation.tunnel_port_required": "請輸入 HTTP Tunnel 連接埠", - "connection_modal.validation.username_required": "請輸入使用者名稱", - "sidebar.batch_databases": "資料庫", - "sidebar.batch_tables": "資料表", - "connection_modal.ssl_hint.mysql_like": "MySQL/MariaDB/Doris/Sphinx 啟用安全傳輸策略時請啟用 SSL;本機自簽憑證可先用 Preferred 或 Skip Verify 驗證。", - "connection_modal.ssl_hint.dameng": "達夢驅動啟用 SSL 需要用戶端憑證與私鑰路徑(sslCertPath / sslKeyPath)。", - "connection_modal.ssl_hint.sqlserver": "SQL Server 生產環境建議使用 Required,並關閉 TrustServerCertificate。", - "connection_modal.ssl_hint.mongodb": "MongoDB 可透過 TLS 保護連線,憑證校驗異常時可先用 Skip Verify 驗證連通性。", - "connection_modal.ssl_hint.default": "建議優先使用 Required;僅在測試環境或自簽憑證情境使用 Skip Verify。", - "connection_modal.secret.new_value_replaces_saved": "已輸入新值,儲存時會取代目前已儲存內容。", - "connection_modal.badge.current": "目前", - "connection_modal.message.driver_not_enabled_with_name": "{{name}} 驅動未安裝或未啟用。請先在驅動管理中安裝並啟用。", - "connection_modal.driver.current": "目前", - "connection_modal.message.driver_unavailable_title": "{{name}} 驅動不可用", - "connection_modal.action.open_driver_manager": "前往驅動管理安裝", - "connection_modal.action.cancel": "取消", - "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", - "connection_modal.message.uri_generated": "URI 已產生", - "connection_modal.message.uri_generate_failed": "產生 URI 失敗", - "connection_modal.message.uri_required": "請填寫必填欄位", - "connection_modal.message.uri_type_mismatch": "URI 類型與目前資料來源不符", - "connection_modal.message.uri_parsed": "URI 已解析", - "connection_modal.message.uri_parse_failed": "解析 URI 失敗", - "connection_modal.message.uri_empty_copy": "URI 為空,無法複製", - "connection_modal.message.uri_copied": "URI 已複製", - "connection_modal.message.copy_failed": "複製失敗", - "connection_modal.message.select_ssh_key_failed": "選擇 SSH 私鑰失敗:{{error}}", - "connection_modal.error.unknown": "未知錯誤", - "connection_modal.message.select_database_file_failed": "選擇資料庫檔案失敗:{{error}}", - "connection_modal.message.save_backend_unavailable": "儲存功能無法使用:後端 API 尚未就緒", - "connection_modal.message.save_updated_disconnected": "設定已儲存(未連線)", - "connection_modal.message.save_created_disconnected": "設定已儲存(未連線)", - "connection_modal.message.save_security_refresh_failed": "設定已儲存,但無法重新整理安全性中繼資料", - "connection_modal.message.save_failed": "儲存連線失敗", - "connection_modal.message.test_requires_new_password": "請先輸入新的連線密碼,再測試連線。", - "connection_modal.secret.blocking.redis_sentinel": "測試連線前請填寫新的 Sentinel 密碼,或取消清除已儲存的 Sentinel 密碼", - "connection_modal.test.redis_database_list_timeout": "連線成功,但拉取 Redis 資料庫清單逾時(>{{seconds}} 秒)", - "connection_modal.test.redis_database_list_failure": "連線成功,但取得 Redis 資料庫清單失敗:{{detail}}", - "connection_modal.message.test_requires_new_ssh_password": "請先輸入新的 SSH 密碼,再測試連線。", - "connection_modal.message.test_requires_new_proxy_password": "請先輸入新的代理密碼,再測試連線。", - "connection_modal.message.test_requires_new_tunnel_password": "請先輸入新的 HTTP Tunnel 密碼,再測試連線。", - "connection_modal.message.test_requires_new_replica_password": "請先輸入新的從庫密碼,再測試連線。", - "connection_modal.message.test_requires_new_mongo_replica_password": "請先輸入新的 MongoDB Replica Set 密碼,再測試連線。", - "connection_modal.message.test_requires_new_mongodb_password": "請先輸入新的 MongoDB 密碼,再測試連線。", - "connection_modal.message.driver_not_enabled": "驅動未安裝或未啟用", - "connection_modal.message.connection_params_incomplete": "連線參數不完整", - "connection_modal.message.test_timeout": "操作逾時({{seconds}} 秒)", - "connection_modal.message.database_list_timeout": "操作逾時({{seconds}} 秒)", - "connection_modal.message.no_visible_schema": "未返回可見結構", - "connection_modal.message.no_visible_databases": "未返回可見資料庫", - "connection_modal.message.database_list_failed": "載入資料庫清單失敗:{{error}}", - "connection_modal.message.connection_rejected": "連線被拒絕", - "connection_modal.message.required_fields_before_test": "請先填寫必填欄位,再測試連線", - "connection_modal.message.test_failed_detail": "測試失敗:{{detail}}", - "connection_modal.error.unknown_exception": "未知錯誤", - "connection_modal.message.member_discovery_failed": "探索 MongoDB 成員失敗", - "connection_modal.message.member_discovery_success": "已探索到 {{count}} 個成員", - "connection_modal.message.unsupported_jvm_modes": "目前選擇的 JVM 接入模式不受支援", - "connection_modal.message.unsupported_jvm_diagnostic_transport": "目前選擇的 JVM 診斷傳輸不受支援", - "connection_modal.message.dameng_ssl_cert_required": "請填寫必填欄位", - "connection_modal.message.http_tunnel_host_required": "請填寫必填欄位", - "connection_modal.message.http_tunnel_port_invalid": "HTTP Tunnel 連接埠無效", - "connection_modal.message.unsupported_jvm_modes_current": "目前連線包含不受支援的 JVM 接入模式", - "connection_modal.group.relational": "關聯式資料庫", - "connection_modal.group.chinese_databases": "國產資料庫", - "connection_modal.step1.group.nosql": "NoSQL 資料庫", - "connection_modal.step1.group.relational": "關聯式資料庫", - "connection_modal.step1.group.domestic": "國產資料庫", - "connection_modal.step1.group.timeseries": "時序資料庫", - "connection_modal.step1.group.other": "其他", - "connection_modal.group.time_series": "時序資料庫", - "connection_modal.group.other": "其他", - "connection_modal.db_type.custom": "自訂", - "connection_modal.layout.mysql_compatible": "MySQL 相容連線", - "connection_modal.layout.mongodb": "MongoDB 連線", - "connection_modal.layout.redis": "Redis 連線", - "connection_modal.layout.postgres_compatible": "PostgreSQL 相容連線", - "connection_modal.layout.oracle": "Oracle 連線", - "connection_modal.layout.file": "檔案資料庫連線", - "connection_modal.layout.custom": "自訂驅動連線", - "connection_modal.layout.jvm": "JVM 執行階段連線", - "connection_modal.layout.generic_sql": "通用 SQL 連線", - "connection_modal.db_type_hint.custom": "使用自訂驅動和 DSN 連線資料庫。", - "connection_modal.db_type_hint.redis": "連線 Redis 單機或 Redis Cluster。", - "connection_modal.db_type_hint.mongodb": "連線 MongoDB 單節點、Replica Set 或 SRV 位址。", - "connection_modal.db_type_hint.file": "選擇本機 SQLite 或 DuckDB 資料庫檔案。", - "connection_modal.db_type_hint.standard": "填寫主機、連接埠、認證資訊和可選資料庫。", - "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", - "connection_modal.step1.hint.custom": "自訂驅動與 DSN", - "connection_modal.step1.hint.redis": "單機 / 叢集", - "connection_modal.step1.hint.mongodb": "單機 / Replica Set", - "connection_modal.step1.hint.oceanBase": "MySQL / Oracle 租戶", - "connection_modal.step1.hint.file": "本機檔案連線", - "connection_modal.step1.hint.standard": "標準連線設定", - "connection_modal.step.select_source": "選擇資料來源", - "connection_modal.step.select_source_description": "選擇要建立的連線類型。", - "connection_modal.message.driver_not_enabled_with_name_short": "{{name}} 驅動未安裝或未啟用,請先在驅動管理中處理。", - "connection_modal.section.basic.title": "基礎資訊", - "connection_modal.section.basic.description": "命名連線,並填寫目標位址、驅動程式與認證資訊。", - "connection_modal.field.connection_name": "連線名稱", - "connection_modal.placeholder.jvm_name": "JVM 名稱", - "connection_modal.placeholder.connection_name": "連線名稱", - "connection_modal.field.uri": "URI", - "connection_modal.help.uri": "貼上或產生連線 URI。", - "connection_modal.action.generate_uri": "產生 URI", - "connection_modal.action.parse_uri": "解析 URI", - "connection_modal.action.copy_uri": "複製 URI", - "connection_modal.secret.clear_saved_uri": "清除已儲存的 URI", - "connection_modal.secret.saved_uri_description": "安全儲存中已有連線 URI。留空將繼續使用該 URI。", - "connection_modal.field.driver_name": "驅動名稱", - "connection_modal.field.driver.placeholder": "例如: mysql, postgres", - "connection_modal.validation.driver_name_required": "請輸入驅動名稱", - "connection_modal.placeholder.driver_name": "驅動名稱", - "connection_modal.field.dsn": "DSN", - "connection_modal.field.dsn.placeholder": "例如: user:pass@tcp(localhost:3306)/dbname?charset=utf8", - "connection_modal.validation.custom_dsn_required": "請輸入連線字串", - "connection_modal.validation.custom_dsn_required_when_clearing_saved": "請輸入新的連線字串,或取消清除已儲存的 DSN", - "connection_modal.secret.clear_saved_dsn": "清除已儲存的 DSN", - "connection_modal.secret.saved_dsn_description": "安全儲存中已有 DSN。留空將繼續使用該 DSN。", - "connection_modal.message.unsupported_jvm_modes_detected": "偵測到不受支援的 JVM 接入模式", - "connection_modal.jvm.target_title": "JVM 目標", - "connection_modal.jvm.target_description": "設定 JVM 管理端點的主機、連接埠和接入方式。", - "connection_modal.field.host": "主機", - "connection_modal.validation.jvm_host_required": "請輸入 JVM 主機", - "connection_modal.field.primary_port": "主要連接埠", - "connection_modal.validation.jvm_port_required": "請輸入 JVM 連接埠", - "connection_modal.section.network.title": "網路與安全", - "connection_modal.section.network.description": "設定 SSL/TLS、SSH Tunnel、代理和 HTTP Tunnel。", - "connection_modal.message.current_driver_not_enabled": "目前驅動未啟用", - "connection_modal.section.basic.jvm_description": "設定 JVM 目標、存取模式和認證資訊。", - "connection_modal.section.basic.sql_description": "設定連線目標、驅動、認證資訊和資料庫範圍。", - "connection_modal.section.network.nav_description": "設定此連線的網路和安全選項。", - "connection_modal.section.appearance.title": "外觀", - "connection_modal.section.appearance.description": "設定連線在側邊欄中的圖示和顏色。", - "connection_modal.appearance.icon": "圖示", - "connection_modal.appearance.current_icon": "目前圖示:{{icon}}", - "connection_modal.db_icon_label.custom": "自訂", - "connection_modal.appearance.color": "顏色", - "connection_modal.appearance.custom_color": "自訂顏色", - "connection_modal.appearance.preview": "預覽", - "connection_modal.placeholder.connection_name_fallback": "連線名稱", - "connection_modal.action.reset_default": "重設為預設值", - "connection_modal.message.connection_failed": "連線失敗", - "connection_modal.action.previous_step": "上一步", - "connection_modal.message.connection_success": "連線成功", - "connection_modal.action.view_reason": "查看原因", - "connection_modal.action.test": "測試連線", - "connection_modal.action.save": "儲存", - "connection_modal.title.select_type": "選擇資料來源類型", - "connection_modal.title.select_type_description": "請從支援的資料來源中選擇一種連線類型。", - "connection_modal.title.edit": "編輯連線", - "connection_modal.title.edit_description": "編輯 {{type}} 連線設定", - "connection_modal.title.create": "新增 {{type}} 連線", - "connection_modal.title.create_description": "填寫連線設定並儲存。", - "connection_modal.test_error.title": "連線測試失敗原因", - "connection_modal.test_error.description": "查看後端回傳的完整錯誤資訊。", - "connection_modal.action.close": "關閉", - "connection_modal.test_error.empty": "沒有錯誤詳情", - "sidebar.message.duplicate_backend_unavailable": "目前版本不支援複製連線。", - "sidebar.message.duplicate_empty_result": "未傳回複製後的連線。", - "sidebar.message.duplicated_connection": "已複製連線 {{name}}。", - "sidebar.message.duplicate_failed": "複製連線失敗。", - "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "JVM Provider 探測失敗:{{error}};已保留診斷增強入口", - "sidebar.message.jvm_provider_probe_failed": "探測 JVM 提供者失敗:{{error}}", - "sidebar.error.unknown": "未知錯誤", - "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "JVM Provider 探測異常:{{error}};已保留診斷增強入口", - "sidebar.message.jvm_provider_probe_exception": "JVM 提供者探測失敗:{{error}}", - "sidebar.message.connection_failed": "連線失敗:{{error}}", - "sidebar.message.load_jvm_resources_failed": "載入 JVM 資源失敗:{{error}}", - "sidebar.message.load_tables_failed": "載入物件失敗:{{error}}", - "sidebar.message.table_pinned": "已置頂資料表", - "sidebar.message.table_unpinned": "已取消置頂", - "sidebar.message.table_structure_copied": "資料表結構已複製。", - "sidebar.message.exporting_table_format": "正在將 {{table}} 匯出為 {{format}}...", - "sidebar.message.export_success": "匯出成功。", - "sidebar.message.export_failed": "匯出失敗:{{error}}", - "sidebar.message.backing_up_database": "正在備份 {{database}}...", - "sidebar.message.exporting_database_schema": "正在匯出 {{database}} 的結構...", - "sidebar.message.exporting_database_backup": "正在備份 {{database}}(結構+資料)...", - "sidebar.message.schema_export_target_missing": "找不到目標模式,無法匯出。", - "sidebar.message.exporting_schema_structure": "正在匯出模式 {{schema}} 的結構...", - "sidebar.message.exporting_schema_backup": "正在備份模式 {{schema}}(結構+資料)...", - "sidebar.message.export_tables_same_database_required": "請選擇同一資料庫中的資料表。", - "sidebar.message.backing_up_selected_tables": "正在備份 {{count}} 個已選資料表...", - "sidebar.message.exporting_selected_table_schema": "正在匯出 {{count}} 個已選資料表的結構...", - "sidebar.message.load_database_list_failed": "載入資料庫失敗:{{error}}", - "sidebar.message.load_table_list_failed": "載入資料表失敗:{{error}}", - "sidebar.message.locate_external_sql_file_not_found": "未在外部 SQL 目錄中找到 SQL 檔案:{{path}}", - "sidebar.message.locate_connection_not_found_for_object": "找不到目前物件對應的連線", - "sidebar.message.locate_connection_not_in_tree": "未在左側樹找到目前連線", - "sidebar.message.locate_database_loading": "資料庫節點仍在載入中:{{database}},請稍後再試", - "sidebar.message.locate_database_not_found": "未在左側樹找到資料庫:{{database}}", - "sidebar.message.locate_object_loading": "{{object}} 所在的資料庫物件仍在載入中:{{database}},請稍後再試", - "sidebar.message.locate_object_not_found": "未在左側樹中找到 {{object}}:{{name}},請重新整理資料庫節點後再試", - "sidebar.message.select_object_required": "請至少選擇一個物件。", - "sidebar.message.backing_up_selected_objects": "正在備份 {{count}} 個已選物件...", - "sidebar.message.exporting_selected_object_data": "正在匯出 {{count}} 個已選物件的資料({{format}})...", - "sidebar.message.exporting_selected_object_schema": "正在匯出 {{count}} 個已選物件的結構...", - "sidebar.message.export_success_skipped_views": "匯出成功。已略過 {{count}} 個檢視的資料匯出。", - "sidebar.modal.confirm_clear_selected_tables.title": "確認清除已選資料表", - "sidebar.modal.confirm_clear_selected_tables.content": "清除 {{connection}} / {{database}} 下已選物件的資料?此操作無法復原。", - "sidebar.action.continue": "繼續", - "sidebar.action.cancel": "取消", - "sidebar.action.delete": "刪除", - "sidebar.message.clearing_selected_tables": "正在清除 {{count}} 個已選資料表...", - "sidebar.message.clear_success": "清除成功。", - "sidebar.message.clear_failed": "清除失敗:{{error}}", - "sidebar.message.select_database_required": "請至少選擇一個資料庫。", - "sidebar.message.database_export_success": "已匯出 {{database}}。", - "sidebar.message.database_export_failed": "匯出 {{database}} 失敗:{{error}}", - "sidebar.message.connection_config_not_found": "找不到連線設定。", - "sidebar.sql_file_exec.title": "執行外部 SQL 檔案", - "sidebar.message.read_file_failed": "讀取檔案失敗:{{error}}", - "sidebar.message.select_connection_or_database_first": "請先選擇連線或資料庫。", - "sidebar.message.schema_create_unsupported": "目前資料庫不支援建立 schema。", - "sidebar.message.schema_target_missing": "請選擇要建立 schema 的資料庫。", - "sidebar.message.schema_created": "schema 已建立。", - "sidebar.message.operation_create_failed": "建立失敗:{{error}}", - "sidebar.sql_file.default_name": "SQL 檔案", - "sidebar.message.sql_file_context_incomplete": "SQL 檔案內容不完整。", - "sidebar.message.sql_file_path_incomplete": "SQL 檔案路徑不完整,無法開啟。", - "sidebar.message.select_host_before_large_sql_file": "請先選擇 Host,再執行大型 SQL 檔案。", - "sidebar.message.read_sql_file_failed": "讀取 SQL 檔案失敗:{{error}}", - "sidebar.message.external_sql_file_parent_missing": "找不到可新增 SQL 檔案的目錄。", - "sidebar.message.external_sql_file_rename_target_missing": "找不到可重新命名的 SQL 檔案。", - "sidebar.message.external_sql_file_delete_target_missing": "找不到可刪除的 SQL 檔案。", - "sidebar.message.external_sql_directory_parent_missing": "找不到可新增目錄的位置。", - "sidebar.message.external_sql_directory_rename_target_missing": "找不到可重新命名的目錄。", - "sidebar.message.external_sql_directory_delete_target_missing": "找不到可刪除的 SQL 目錄。", - "sidebar.message.sql_file_name_required": "SQL 檔案名稱不能空白。", - "sidebar.message.sql_directory_name_required": "目錄名稱不能空白。", - "sidebar.message.create_sql_file_failed": "新增 SQL 檔案失敗:{{error}}", - "sidebar.message.sql_file_created": "SQL 檔案已新增。", - "sidebar.message.rename_sql_file_failed": "重新命名 SQL 檔案失敗:{{error}}", - "sidebar.message.sql_file_renamed": "SQL 檔案已重新命名。", - "sidebar.message.delete_sql_file_failed": "刪除 SQL 檔案失敗:{{error}}", - "sidebar.message.sql_file_deleted": "SQL 檔案已刪除。", - "sidebar.message.create_sql_directory_failed": "新增目錄失敗:{{error}}", - "sidebar.message.sql_directory_created": "目錄已新增。", - "sidebar.message.rename_sql_directory_failed": "重新命名目錄失敗:{{error}}", - "sidebar.message.external_sql_directory_rename_sync_failed": "目錄已重新命名,但無法同步外部 SQL 目錄清單,請重新新增目錄。", - "sidebar.message.sql_directory_renamed": "目錄已重新命名。", - "sidebar.message.delete_sql_directory_failed": "刪除 SQL 目錄失敗:{{error}}", - "sidebar.message.sql_directory_deleted": "SQL 目錄已刪除。", - "sidebar.message.add_sql_directory_database_required": "請先選擇資料庫,再新增 SQL 目錄。", - "sidebar.message.select_sql_directory_failed": "選擇 SQL 目錄失敗:{{error}}", - "sidebar.message.sql_directory_path_invalid": "SQL 目錄路徑無效。", - "sidebar.sql_directory.default_name": "SQL 目錄", - "sidebar.message.external_sql_directory_added": "外部 SQL 目錄已新增。", - "sidebar.message.external_sql_directory_not_found": "找不到 SQL 目錄。", - "sidebar.message.external_sql_directory_removed": "外部 SQL 目錄已移除。", - "sidebar.message.external_sql_directory_context_missing": "SQL 目錄內容缺失。", - "sidebar.message.external_sql_directory_refreshed": "外部 SQL 目錄已重新整理。", - "sidebar.message.database_created": "資料庫已建立。", - "sidebar.message.create_failed": "建立失敗:{{error}}", - "sidebar.modal.confirm_delete_database.title": "刪除資料庫", - "sidebar.modal.confirm_delete_database.content": "刪除 {{name}}?此操作無法復原。", - "sidebar.modal.confirm_delete_sql_file.title": "刪除 SQL 檔案", - "sidebar.modal.confirm_delete_sql_file.content": "刪除 \"{{name}}\"?此操作會刪除本機磁碟檔案,無法復原。", - "sidebar.modal.confirm_delete_sql_directory.title": "刪除 SQL 目錄", - "sidebar.modal.confirm_delete_sql_directory.content": "刪除 \"{{name}}\"?此操作會刪除本機磁碟目錄,且僅支援刪除空目錄。", - "sidebar.modal.confirm_delete_table.title": "刪除資料表", - "sidebar.modal.confirm_delete_table.content": "刪除 {{name}}?此操作無法復原。", - "sidebar.modal.confirm_table_data_action.title": "確認 {{action}}", - "sidebar.modal.confirm_table_data_action.content": "{{action}} {{table}}?此操作無法復原。", - "sidebar.modal.confirm_delete_view.title": "刪除檢視", - "sidebar.modal.confirm_delete_view.content": "刪除 {{name}}?此操作無法復原。", - "sidebar.modal.confirm_delete_routine.title": "刪除 {{type}}", - "sidebar.modal.confirm_delete_routine.content": "刪除 {{type}} {{name}}?此操作無法復原。", - "sidebar.search.scope.smart": "智慧", - "sidebar.search.scope_title": "搜尋範圍", - "sidebar.search.scope_description": "選擇側邊欄搜尋的比對範圍。", - "sidebar.badge.recommended": "推薦", - "sidebar.search.scope.smart_description": "依目前選取的節點自動縮小搜尋範圍。", - "sidebar.search.manual_scope": "手動範圍", - "sidebar.search.multi_select_supported": "支援多選", - "sidebar.search.scope_hint": "智慧模式會依內容搜尋名稱、主機、資料庫和物件。", - "sidebar.modal.confirm_delete.title": "確認刪除", - "sidebar.modal.confirm_delete_tag.content": "確定要刪除分組 \"{{name}}\" 嗎?這不會刪除其中的連線。", - "sidebar.menu.edit_connection": "編輯連線", - "sidebar.menu.delete_connection": "刪除連線", - "sidebar.modal.confirm_delete_connection.content": "刪除連線 {{name}}?", - "sidebar.message.delete_connection_backend_unavailable": "刪除連線後端不可用。", - "sidebar.message.connection_deleted": "連線已刪除。", - "sidebar.message.delete_connection_failed": "刪除連線失敗。", - "sidebar.modal.confirm_delete_saved_query.content": "確定要刪除已儲存的查詢「{{name}}」嗎?此操作無法復原。", - "sidebar.search.placeholder": "搜尋...", - "sidebar.punctuation.list_separator": "、", - "sidebar.command_search.label": "搜尋表、連線、動作", - "sidebar.command_search.placeholder": "搜尋表、連線、動作... 或問 AI", - "sidebar.command_search.sync_to_filter_tooltip": "同步輸入內容到左側篩選", - "sidebar.command_search.sync_to_filter_aria": "同步到左側篩選", - "sidebar.command_search.reset_filter": "重設側欄篩選", - "sidebar.command_search.no_synced_filter": "沒有已同步的側欄篩選", - "sidebar.command_search.no_filter_content": "沒有篩選內容", - "sidebar.command_search.object_kind.all": "全部", - "sidebar.command_search.object_kind.tables": "表格", - "sidebar.command_search.object_kind.views": "檢視", - "sidebar.command_search.object_kind.routines": "函式", - "sidebar.command_search.object_kind.events": "事件", - "sidebar.command_search.object_kind.filter_aria": "物件篩選", - "sidebar.command_search.scope.smart": "智慧", - "sidebar.command_search.scope.object": "表物件", - "sidebar.command_search.scope.database": "資料庫", - "sidebar.command_search.scope.host": "Host", - "sidebar.command_search.scope.tag": "標籤", - "sidebar.command_search.scope.summary_smart": "智慧", - "sidebar.command_search.scope.title": "搜尋範圍", - "sidebar.command_search.scope.description": "「智慧」會自動匹配最可能的命中項;手動模式支援按維度組合篩選。", - "sidebar.command_search.scope.recommended": "推薦", - "sidebar.command_search.scope.smart_help": "適合日常檢索,自動涵蓋名稱、資料庫、Host 和標籤等高頻維度。", - "sidebar.command_search.scope.manual_title": "手動範圍", - "sidebar.command_search.scope.multi_select": "支援多選組合", - "sidebar.command_search.scope.manual_help": "智慧與其他項互斥。若你明確知道要搜的是物件、資料庫、Host 或標籤,建議切到手動範圍以減少雜訊結果。", - "sidebar.command_search.scope.tooltip": "搜尋範圍:{{scope}}", - "sidebar.command_search.scope.compact_smart": "智", - "sidebar.search.scope_tooltip": "目前搜尋範圍:{{scope}}", - "sidebar.search.scope.smart_short": "智慧", - "sidebar.rail.object_actions": "物件區快捷操作", - "sidebar.rail.system_actions": "系統操作", - "sidebar.action.new_group": "新增群組", - "sidebar.action.batch_tables": "批次處理資料表", - "sidebar.action.batch_databases": "批次處理資料庫", - "sidebar.action.locate_current_table": "定位目前開啟的表", - "sidebar.action.pin_table": "置頂資料表", - "sidebar.action.unpin_table": "取消置頂", - "sidebar.status.pinned": "已置頂", - "sidebar.v2_table_menu.meta.rows_empty": "— 筆", - "sidebar.v2_table_menu.meta.rows": "{{count}} 筆", - "sidebar.v2_table_menu.meta.idle": "點擊重新整理以載入統計資訊", - "sidebar.v2_table_menu.meta.loading": "正在載入統計資訊...", - "sidebar.v2_table_menu.meta.unavailable": "統計資訊無法使用", - "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} 資料 · {{indexes}} 索引", - "sidebar.v2_table_menu.open_data": "查看資料", - "sidebar.v2_table_menu.design_table_detail": "欄位 / 索引 / 外鍵", - "sidebar.v2_table_menu.open_in_new_tab": "在新分頁開啟", - "sidebar.v2_table_menu.metadata_section": "中繼資料", - "sidebar.v2_table_menu.view_in_er": "在 ER 圖中檢視", - "sidebar.v2_table_menu.copy_section": "複製", - "sidebar.v2_table_menu.copy_table_name": "複製資料表名稱", - "sidebar.copy_object_name.label.table": "資料表名稱", - "sidebar.copy_object_name.label.view": "檢視名稱", - "sidebar.copy_object_name.label.materialized_view": "物化檢視名稱", - "sidebar.copy_object_name.label.event": "事件名稱", - "sidebar.copy_object_name.empty": "{{label}}為空,無法複製", - "sidebar.copy_object_name.copied": "{{label}}已複製到剪貼簿", - "sidebar.copy_object_name.failed": "複製{{label}}失敗:{{error}}", - "sidebar.v2_table_menu.copy_table_as_insert": "複製整個資料表為 {{keyword}}", - "sidebar.v2_table_menu.maintenance_section": "維護", - "sidebar.v2_table_menu.rename_compact": "重新命名…", - "sidebar.v2_table_menu.new_rollup": "新增 {{keyword}}", - "sidebar.v2_table_menu.backup_sql_dump": "備份 · {{keyword}}", - "sidebar.v2_table_menu.refresh_stats": "重新整理統計資訊", - "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", - "sidebar.v2_table_menu.open_export_workbench": "開啟匯出工作台…", - "sidebar.v2_table_menu.truncate_table": "截斷資料表", - "sidebar.v2_table_menu.ai_explain_table": "用 AI 解釋這張資料表", - "sidebar.v2_table_menu.ai_generate_query": "用 AI 產生查詢", - "sidebar.v2_table_group_menu.title": "資料表", - "sidebar.v2_table_group_menu.current_database": "目前資料庫", - "sidebar.v2_table_group_menu.sort_name": "名稱", - "sidebar.v2_table_group_menu.sort_frequency": "使用頻率", - "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} 張資料表 · 目前依{{sort}}排序", - "sidebar.message.locate_current_table_unavailable": "目前分頁沒有可定位的表", - "sidebar.locate.object.table": "資料表", - "sidebar.locate.object.view": "檢視", - "sidebar.locate.object.materialized_view": "物化檢視", - "sidebar.locate.object.routine": "函式/預存程序", - "sidebar.locate.object.trigger": "觸發器", - "sidebar.active_connection.current_host_database": "目前 Host 與資料庫", - "sidebar.active_connection.no_database_selected": "未選擇資料庫", - "sidebar.active_connection.no_host_selected": "未選擇 Host", - "sidebar.active_connection.actions": "連線操作", - "sidebar.modal.tag.edit_title": "編輯分組", - "sidebar.modal.tag.create_title": "建立分組", - "sidebar.modal.tag.edit_description": "更新分組名稱和包含的連線。", - "sidebar.modal.tag.create_description": "建立分組以整理連線。", - "sidebar.field.tag_name": "分組名稱", - "sidebar.validation.tag_name_required": "請輸入分組名稱。", - "sidebar.placeholder.tag_name": "分組名稱", - "sidebar.field.select_connections": "選擇連線", - "sidebar.modal.create_database.title": "建立資料庫", - "sidebar.field.database_name": "資料庫名稱", - "sidebar.validation.name_required": "請輸入名稱。", - "sidebar.modal.rename_database.title": "重新命名資料庫:{{name}}", - "sidebar.field.new_database_name": "新資料庫名稱", - "sidebar.validation.new_database_name_required": "請輸入新資料庫名稱。", - "sidebar.field.schema_name": "模式名稱", - "sidebar.validation.schema_name_required": "請輸入模式名稱。", - "sidebar.modal.rename_table.title": "重新命名資料表:{{name}}", - "sidebar.field.new_table_name": "新資料表名稱", - "sidebar.validation.new_table_name_required": "請輸入新資料表名稱。", - "sidebar.modal.rename_view.title": "重新命名檢視:{{name}}", - "sidebar.field.new_view_name": "新檢視名稱", - "sidebar.validation.new_view_name_required": "請輸入新檢視名稱。", - "sidebar.modal.batch_tables.title": "批次處理資料表", - "sidebar.modal.batch_tables.description": "選擇資料表和檢視,並在一次操作中匯出或清除。", - "sidebar.action.clear_tables": "清除資料表", - "sidebar.action.export_schema": "匯出結構", - "sidebar.action.export_data_only": "僅匯出資料", - "sidebar.action.backup_schema_data": "備份結構和資料", - "sidebar.field.select_connection": "選擇連線", - "sidebar.placeholder.select_connection": "請選擇連線", - "sidebar.field.select_database": "選擇資料庫", - "sidebar.placeholder.select_connection_first": "請先選擇連線", - "sidebar.modal.batch_tables.selection_hint": "選擇本次批次處理的資料表或檢視。", - "sidebar.placeholder.filter_table_view": "篩選資料表或檢視", - "sidebar.filter.all_objects": "全部物件", - "sidebar.filter.tables_only": "僅資料表", - "sidebar.filter.views_only": "僅檢視", - "sidebar.filter.scope_filtered": "目前篩選", - "sidebar.filter.scope_all": "全部範圍", - "sidebar.batch.filtered_count": "已篩選 {{filtered}} / {{total}} 個物件", - "sidebar.action.select_all": "全選", - "sidebar.action.clear_selection": "清除選取", - "sidebar.action.invert_selection": "反向選取", - "sidebar.batch.selected_objects": "已選擇 {{selected}} / {{total}} 個物件", - "sidebar.modal.batch_databases.title": "批次資料庫操作", - "sidebar.modal.batch_databases.description": "選擇資料庫,並匯出結構或執行完整備份。", - "sidebar.action.export_database_schema_count": "匯出結構({{count}})", - "sidebar.action.backup_database_count": "備份資料庫({{count}})", - "sidebar.modal.batch_databases.selection_hint": "從所選連線中選擇資料庫。", - "sidebar.batch.selected_databases": "已選擇 {{selected}} / {{total}} 個資料庫", - "sidebar.sql_file_exec.cancel": "取消執行", - "sidebar.action.close": "關閉", - "sidebar.sql_file_exec.file_size": "檔案大小:", - "sidebar.sql_file_exec.status_label": "狀態:", - "sidebar.sql_file_exec.status.running": "執行中", - "sidebar.sql_file_exec.status.done": "完成", - "sidebar.sql_file_exec.status.cancelled": "已終止", - "sidebar.sql_file_exec.status.error": "錯誤", - "sidebar.sql_file_exec.executed_label": "已執行:", - "sidebar.sql_file_exec.rows_separator": " 列 | 失敗:", - "sidebar.sql_file_exec.rows_suffix": " 列", - "connection_modal.config_section.identity.title": "身分資訊", - "connection_modal.config_section.identity.description": "設定身分資訊。", - "connection_modal.config_section.uri.title": "連線 URI", - "connection_modal.config_section.uri.description": "輸入、產生或解析連線 URI。", - "connection_modal.config_section.target.title": "目標位址", - "connection_modal.config_section.target.description": "設定目標位址。", - "connection_modal.config_section.fileTarget.title": "檔案資料庫", - "connection_modal.config_section.fileTarget.description": "設定檔案資料庫。", - "connection_modal.config_section.connectionMode.title": "連線模式", - "connection_modal.config_section.connectionMode.description": "設定連線模式。", - "connection_modal.config_section.mongoDiscovery.title": "MongoDB 探索", - "connection_modal.config_section.mongoDiscovery.description": "設定MongoDB 探索。", - "connection_modal.config_section.replica.title": "複本/從庫", - "connection_modal.config_section.replica.description": "設定複本/從庫。", - "connection_modal.config_section.service.title": "服務與資料庫", - "connection_modal.config_section.service.description": "設定服務與資料庫。", - "connection_modal.config_section.mongoPolicy.title": "MongoDB 原則", - "connection_modal.config_section.mongoPolicy.description": "設定MongoDB 原則。", - "connection_modal.config_section.credentials.title": "認證資訊", - "connection_modal.config_section.credentials.description": "設定認證資訊。", - "connection_modal.config_section.databaseScope.title": "資料庫範圍", - "connection_modal.config_section.databaseScope.description": "設定資料庫範圍。", - "connection_modal.config_section.customDriver.title": "自訂驅動", - "connection_modal.config_section.customDriver.description": "設定自訂驅動。", - "connection_modal.config_section.customDsn.title": "自訂 DSN", - "connection_modal.config_section.customDsn.description": "設定自訂 DSN。", - "connection_modal.config_section.jvmRuntime.title": "JVM 執行階段", - "connection_modal.config_section.jvmRuntime.description": "設定JVM 執行階段。", - "connection_modal.field.password": "密碼", - "sidebar.menu.refresh": "重新整理", - "sidebar.search.scope.object": "物件", - "sidebar.search.scope.database": "資料庫", - "sidebar.search.scope.host": "主機", - "sidebar.search.scope.tag": "標籤", - "sidebar.tree.saved_queries": "已儲存查詢", - "sidebar.tree.untitled_query": "未命名查詢", - "sidebar.tree.default_database": "預設資料庫", - "sidebar.tree.unknown_connection": "未知連線", - "sidebar.tree.unmatched_saved_queries": "未匹配", - "sidebar.tree.all_saved_queries": "全部已儲存查詢", - "sidebar.tree.default_schema": "預設結構", - "sidebar.object_group.tables": "資料表", - "sidebar.object_group.views": "檢視", - "sidebar.object_group.routines": "函式和預存程序", - "sidebar.object_group.triggers": "觸發器", - "sidebar.object_group.events": "事件", - "sidebar.object_group.materialized_views": "物化檢視", - "sidebar.table_folder.columns": "欄位", - "sidebar.table_folder.indexes": "索引", - "sidebar.table_folder.foreign_keys": "外鍵", - "sidebar.table_folder.triggers": "觸發器", - "sidebar.object.view": "檢視", - "sidebar.object.function": "函式", - "sidebar.object.procedure": "預存程序", - "sidebar.table_action.truncate.label": "截斷資料表", - "sidebar.table_action.truncate.progress": "正在截斷", - "sidebar.table_action.clear.label": "清除資料表", - "sidebar.table_action.clear.progress": "正在清除", - "sidebar.tab.table_structure": "資料表結構({{table}})", - "sidebar.tab.design_table": "設計資料表({{table}})", - "sidebar.tab.new_table": "新增資料表 - {{database}}", - "sidebar.tab.table_overview": "資料表概覽 - {{database}}{{schema}}", - "sidebar.tab.trigger": "觸發器:{{name}}", - "sidebar.tab.event": "事件:{{name}}", - "sidebar.tab.edit_event": "編輯事件:{{name}}", - "sidebar.tab.materialized_view_definition": "物化檢視:{{name}}", - "sidebar.tab.view_definition": "檢視:{{name}}", - "sidebar.tab.edit_view": "編輯檢視:{{name}}", - "sidebar.tab.create_view": "建立檢視", - "sidebar.tab.routine_definition": "{{type}}:{{name}}", - "sidebar.tab.edit_routine": "編輯 {{type}}:{{name}}", - "sidebar.tab.create_function": "建立函式", - "sidebar.tab.create_procedure": "建立預存程序", - "sidebar.tab.new_query": "新增查詢", - "sidebar.tab.new_query_database": "新增查詢({{database}})", - "sidebar.tab.redis_command": "命令 - {{database}}", - "sidebar.tab.redis_monitor": "監控 - {{database}}", - "tab_manager.menu.close_all": "關閉所有分頁", - "tab_manager.menu.close_left": "關閉左側分頁", - "tab_manager.menu.close_other": "關閉其他分頁", - "tab_manager.menu.close_right": "關閉右側分頁", - "tab_manager.close_aria": "關閉 {{title}}", - "tab_manager.kind_badge.query": "SQL", - "tab_manager.kind_badge.table": "表", - "tab_manager.kind_badge.design": "設計", - "tab_manager.kind_badge.table_overview": "庫", - "tab_manager.kind_badge.redis": "Redis", - "tab_manager.kind_badge.jvm": "JVM", - "tab_manager.kind_badge.trigger": "觸發器", - "tab_manager.kind_badge.materialized_view": "物化視圖", - "tab_manager.kind_badge.view": "視圖", - "tab_manager.kind_badge.event": "事件", - "tab_manager.kind_badge.routine": "函式", - "tab_manager.kind_badge.table_export": "匯出", - "tab_manager.kind_badge.sql_analysis": "分析", - "tab_manager.kind_badge.fallback": "標籤", - "tab_manager.empty.action.open_ai": "開啟 AI", - "tab_manager.empty.aria.start_workbench": "GoNavi 起始工作台", - "tab_manager.empty.eyebrow.connections": "{{count}} 個連線", - "tab_manager.empty.eyebrow.workbench": "工作台", - "tab_manager.empty.hero.description": "選擇資料來源、開啟查詢編輯器,或在 AI 面板中帶著上下文繼續。", - "tab_manager.empty.hero.title": "連線、查詢與分析都從同一個工作台開始。", - "tab_manager.empty.quick.ai_assist.description": "解釋 SQL、產生查詢並檢閱結果", - "tab_manager.empty.quick.ai_assist.title": "進入 AI 輔助", - "tab_manager.empty.quick.aria": "快速工作流程", - "tab_manager.empty.quick.configure_source.description": "在一處設定 URI、SSH、代理與驅動", - "tab_manager.empty.quick.configure_source.title": "設定資料來源", - "tab_manager.empty.quick.heading": "快速工作流程", - "tab_manager.empty.quick.sql_workspace.description": "使用目前上下文開啟查詢編輯器", - "tab_manager.empty.quick.sql_workspace.title": "啟動 SQL 工作區", - "tab_manager.hover.fallback.database_not_specified": "未指定", - "tab_manager.hover.fallback.host_not_configured": "未設定", - "tab_manager.hover.fallback.unbound_connection": "未綁定連線", - "tab_manager.hover.kind.design": "表設計", - "tab_manager.hover.kind.event": "事件", - "tab_manager.hover.kind.fallback": "分頁", - "tab_manager.hover.kind.jvm_audit": "JVM 稽核", - "tab_manager.hover.kind.jvm_diagnostic": "JVM 診斷", - "tab_manager.hover.kind.jvm_monitoring": "JVM 監控", - "tab_manager.hover.kind.jvm_overview": "JVM 概覽", - "tab_manager.hover.kind.jvm_resource": "JVM 資源", - "tab_manager.hover.kind.materialized_view": "物化視圖", - "tab_manager.hover.kind.query": "SQL 查詢", - "tab_manager.hover.kind.redis_command": "Redis 命令", - "tab_manager.hover.kind.redis_keys": "Redis Key", - "tab_manager.hover.kind.redis_monitor": "Redis 監控", - "tab_manager.hover.kind.routine": "函數 / 程序", - "tab_manager.hover.kind.table": "表資料", - "tab_manager.hover.kind.table_export": "匯出工作台", - "tab_manager.hover.kind.sql_analysis": "SQL 分析工作台", - "tab_manager.hover.kind.table_overview": "表概覽", - "tab_manager.hover.kind.trigger": "觸發器", - "tab_manager.hover.kind.view": "視圖", - "tab_manager.hover.label.connection": "連線", - "tab_manager.hover.label.database": "資料庫", - "tab_manager.hover.label.object": "物件", - "tab_manager.hover.label.type": "類型", - "sidebar.message.no_visible_databases": "未傳回可見資料庫或結構。請檢查帳號權限,或從右鍵選單重新整理。", - "sidebar.message.visual_new_table_unsupported": "目前資料來源暫不支援視覺化新增資料表。", - "sidebar.message.jvm_resources_backend_unavailable": "JVM 資源後端不可用。", - "sidebar.message.external_sql_directory_read_failed": "讀取 SQL 目錄 {{name}} 失敗:{{error}}", - "sidebar.message.sphinx_unsupported_objects": "此 Sphinx 執行個體不支援這些物件能力:{{objects}}。已啟用相容模式。", - "sidebar.message.sidebar_filter_sync_enabled": "已開啟左側篩選同步。", - "sidebar.message.sidebar_filter_sync_disabled": "已關閉左側篩選同步。", - "sidebar.message.sidebar_filter_reset": "已重設側欄篩選。", - "sidebar.message.database_name_required": "請輸入資料庫名稱。", - "sidebar.message.database_name_unchanged": "資料庫名稱未變更。", - "sidebar.message.database_renamed": "資料庫已重新命名。", - "sidebar.message.database_deleted": "資料庫已刪除。", - "sidebar.message.table_name_required": "請輸入資料表名稱。", - "sidebar.message.table_name_unchanged": "資料表名稱未變更。", - "sidebar.message.table_renamed": "資料表已重新命名。", - "sidebar.message.table_deleted": "資料表已刪除。", - "sidebar.message.view_name_required": "請輸入檢視名稱。", - "sidebar.message.view_name_unchanged": "檢視名稱未變更。", - "sidebar.message.view_deleted": "檢視已刪除。", - "sidebar.message.view_renamed": "檢視已重新命名。", - "sidebar.message.routine_deleted": "{{type}} 已刪除。", - "sidebar.message.rename_failed": "重新命名失敗:{{error}}", - "sidebar.message.delete_failed": "刪除失敗:{{error}}", - "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", - "sidebar.message.table_data_action_success": "{{action}} 已完成。", - "sidebar.message.table_data_action_failed": "{{action}} 失敗:{{error}}", - "sidebar.message.disconnected": "已中斷。", - "sidebar.message.database_closed": "資料庫已關閉。", - "sidebar.message.saved_query_deleted": "已儲存查詢已刪除。", - "sidebar.message.saved_query_name_unchanged": "新舊查詢名稱相同,無需修改。", - "sidebar.message.saved_query_renamed": "查詢已重新命名。", - "sidebar.menu.sort_by_name": "依名稱排序", - "sidebar.menu.sort_by_frequency": "依使用頻率排序", - "sidebar.menu.create_view": "建立檢視", - "sidebar.menu.create_function": "建立函式", - "sidebar.menu.create_procedure": "建立預存程序", - "sidebar.menu.edit_tag": "編輯分組", - "sidebar.menu.delete_tag": "刪除分組", - "sidebar.menu.new_command_window": "新增命令視窗", - "sidebar.menu.redis_monitor": "Redis 監控", - "sidebar.menu.duplicate_connection": "複製連線", - "sidebar.menu.disconnect": "斷開連線", - "sidebar.menu.move_out_of_tag": "移出分組", - "sidebar.menu.create_database": "建立資料庫", - "sidebar.menu.new_query": "新增查詢", - "sidebar.menu.move_to_tag": "移至分組", - "sidebar.menu.browse_keys": "瀏覽鍵", - "sidebar.menu.create_table": "建立資料表", - "sidebar.menu.rename_database": "重新命名資料庫", - "sidebar.menu.danger_operations": "危險操作", - "sidebar.menu.delete_database": "刪除資料庫", - "sidebar.menu.export_all_table_schema_sql": "匯出全部資料表結構(SQL)", - "sidebar.menu.backup_all_tables_sql": "備份全部資料表(結構和資料 SQL)", - "sidebar.menu.close_database": "關閉資料庫", - "sidebar.menu.browse_view_data": "瀏覽檢視資料", - "sidebar.menu.view_definition": "檢視定義", - "sidebar.menu.browse_materialized_view_data": "瀏覽物化檢視資料", - "sidebar.menu.materialized_view_definition": "物化檢視定義", - "sidebar.menu.view_object_definition": "查看定義", - "sidebar.menu.edit_view": "編輯檢視", - "sidebar.menu.rename_view": "重新命名檢視", - "sidebar.menu.delete_view": "刪除檢視", - "sidebar.menu.view_routine_definition": "檢視例程定義", - "sidebar.menu.edit_definition": "編輯定義", - "sidebar.menu.delete_routine": "刪除{{type}}", - "sidebar.menu.design_table": "設計資料表", - "sidebar.menu.copy_table_structure": "複製資料表結構", - "sidebar.menu.backup_table_sql": "備份資料表(SQL)", - "sidebar.menu.rename_table": "重新命名資料表", - "sidebar.menu.truncate_table": "截斷資料表", - "sidebar.menu.clear_table": "清除資料表", - "sidebar.menu.delete_table": "刪除資料表", - "sidebar.menu.export_table_data": "匯出資料表資料", - "sidebar.menu.export_csv": "匯出 CSV", - "sidebar.menu.export_xlsx": "匯出 XLSX", - "sidebar.menu.export_json": "匯出 JSON", - "sidebar.menu.export_markdown": "匯出 Markdown", - "sidebar.menu.export_html": "匯出 HTML", - "sidebar.menu.open_query": "開啟查詢", - "sidebar.menu.rename_query": "重新命名查詢", - "sidebar.menu.delete_query": "刪除查詢", - "sidebar.menu.add_sql_directory": "新增 SQL 目錄", - "sidebar.menu.refresh_directory": "重新整理目錄", - "sidebar.menu.remove_directory": "移除目錄", - "sidebar.menu.open_sql_file": "開啟 SQL 檔案", - "sidebar.menu.new_sql_file": "新增 SQL 檔案", - "sidebar.menu.new_sql_directory": "新增目錄", - "sidebar.menu.rename_sql_directory": "重新命名目錄", - "sidebar.menu.delete_local_directory": "刪除本機目錄", - "sidebar.menu.delete_sql_directory": "刪除目錄", - "sidebar.menu.rename_sql_file": "重新命名 SQL 檔案", - "sidebar.menu.new_sql_file_in_directory": "在此目錄新增 SQL 檔案", - "sidebar.menu.new_sql_directory_in_directory": "在此目錄新增目錄", - "sidebar.menu.delete_sql_file": "刪除 SQL 檔案", - "sidebar.batch.group.tables": "資料表", - "sidebar.batch.group.views": "檢視", - "sidebar.batch.no_matching_objects": "沒有符合的物件", - "sidebar.sql_template.edit_view": "編輯檢視 {{name}}", - "sidebar.sql_template.modify_then_execute": "修改並執行", - "sidebar.sql_template.edit_routine": "編輯 {{type}} {{name}}", - "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB 尚不支援預存程序", - "sidebar.sql_template.duckdb_macro_hint": "使用 SQL Macro 實作類似函式的行為", - "connection_modal.network.ssl_mode.preferred": "偏好", - "connection_modal.network.ssl_mode.required": "必要", - "connection_modal.network.ssl_mode.skip_verify": "略過驗證", - "sidebar.external_sql.root": "外部 SQL 檔案", - "sidebar.external_sql.directory_fallback": "SQL 目錄", - "sidebar.external_sql_modal.title.create_file": "新增 SQL 檔案", - "sidebar.external_sql_modal.title.rename_file": "重新命名 SQL 檔案", - "sidebar.external_sql_modal.title.create_directory": "新增目錄", - "sidebar.external_sql_modal.title.rename_directory": "重新命名目錄", - "sidebar.external_sql_modal.action.create": "新增", - "sidebar.external_sql_modal.action.rename": "重新命名", - "sidebar.external_sql_modal.field.directory_name": "目錄名稱", - "sidebar.external_sql_modal.field.sql_file_name": "SQL 檔案名稱", - "sidebar.external_sql_modal.validation.directory_name_required": "請輸入目錄名稱", - "sidebar.external_sql_modal.validation.sql_file_name_required": "請輸入 SQL 檔案名稱", - "sidebar.external_sql_modal.validation.directory_name_no_separator": "目錄名稱不能包含路徑分隔符", - "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "檔案名稱不能包含路徑分隔符", - "sidebar.external_sql_modal.help.directory": "目錄只會顯示在外部 SQL 目錄樹中,非 SQL 檔案仍不會顯示", - "sidebar.external_sql_modal.help.sql_file": "未輸入 .sql 後綴時會自動補齊", - "sidebar.external_sql_modal.placeholder.directory_name": "例如:reports", - "sidebar.external_sql_modal.placeholder.sql_file_name": "例如:report.sql", - "sidebar.jvm.action.monitoring": "持續監控", - "sidebar.jvm.action.diagnostic": "診斷增強", - "sidebar.jvm.tab.overview": "JVM 概覽", - "sidebar.jvm.tab.resource": "JVM 資源", - "sidebar.jvm.tab.audit": "JVM 稽核", - "sidebar.jvm.tab.diagnostic": "JVM 診斷", - "sidebar.jvm.tab.monitoring": "JVM 監控", - "jvm.backend.message.connect_success": "JVM 連線成功", - "jvm.backend.error.preview_confirmation_missing": "預覽確認權杖缺失,請重新預覽後再提交", - "jvm.backend.error.confirmation_token_missing": "缺少確認權杖,請先完成預覽確認", - "jvm.backend.error.confirmation_token_invalid": "確認權杖無效,請重新預覽並確認", - "jvm.backend.error.confirmation_token_expired": "確認權杖已過期,請重新預覽並確認", - "jvm.backend.error.preview_context_hash_failed": "產生 JVM 預覽上下文失敗: {{detail}}", - "jvm.backend.error.preview_payload_hash_failed": "產生 JVM 預覽 Payload 摘要失敗: {{detail}}", - "jvm.backend.error.change_blocked_by_guard": "目前變更已被 Guard 攔截", - "jvm.backend.error.change_blocked_read_only": "目前連線為唯讀,禁止寫入", - "jvm.backend.error.change_resource_id_required": "JVM 資源 ID 不能為空", - "jvm.backend.error.change_action_required": "JVM 變更操作不能為空", - "jvm.backend.error.change_reason_required": "JVM 變更原因不能為空", - "jvm.backend.error.change_confirmation_token_failed": "產生 JVM 變更確認權杖失敗: {{detail}}", - "jvm.backend.error.disallowed_mode": "目前連線不允許使用 {{mode}} 模式", - "jvm.backend.error.resource_path_invalid": "JVM 資源路徑無效: {{detail}}", - "jvm.backend.error.audit_write_blocked": "稽核記錄寫入失敗,已阻止 JVM 變更: {{detail}}", - "jvm.backend.warning.failed_audit_write_failed": "失敗稽核寫入失敗: {{detail}}", - "jvm.backend.warning.terminal_audit_write_failed": "終態稽核寫入失敗: {{detail}}", - "jvm.backend.separator.message_warning": ";", - "jvm.backend.capability.reason.read_only": "目前連線為唯讀", - "jvm.backend.monitoring.error.snapshot_unsupported": "{{provider}} 監控快照暫未支援", - "jvm.backend.monitoring.error.session_not_found": "找不到 {{connectionId}} {{providerMode}} 的 JVM 監控會話", - "jvm.backend.monitoring.warning.sample_auto_stopped": "監控採樣連續失敗 {{count}} 次,已自動停止本次監控會話", - "jvm.backend.connection_error.suggestion": "建議:{{detail}}", - "jvm.backend.connection_error.technical_detail": "技術細節:{{detail}}", - "jvm.backend.connection_error.generic": "JVM 連線失敗", - "jvm.backend.connection_error.endpoint.base_url_required": "Endpoint 連線失敗:未填寫 Endpoint Base URL。", - "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Endpoint 連線失敗:Endpoint Base URL 格式不合法。", - "jvm.backend.connection_error.endpoint.base_url_invalid.help": "請填寫完整的 `http://` 或 `https://` 位址,並指向實作 GoNavi JVM HTTP 合約的管理介面根路徑,例如 `http://127.0.0.1:19090/manage/jvm`。", - "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Endpoint 連線失敗:目前只支援 HTTP 或 HTTPS 協定。", - "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "請將 Endpoint Base URL 改成以 `http://` 或 `https://` 開頭的位址。", - "jvm.backend.connection_error.endpoint.not_found.summary": "Endpoint 連線失敗:目標位址已回應,但找不到 GoNavi JVM 管理介面。", - "jvm.backend.connection_error.endpoint.not_found.help": "請確認 Base URL 指向 JVM 管理介面根路徑,而不是一般業務介面、健康檢查位址或閘道首頁。", - "jvm.backend.connection_error.endpoint.connection_refused.summary": "Endpoint 連線失敗:目標管理介面未監聽,或目前位址無法連線。", - "jvm.backend.connection_error.endpoint.connection_refused.help": "請確認 Base URL 指向實作 GoNavi JVM HTTP 合約的管理介面,並檢查服務監聽、連接埠對映與防火牆。", - "jvm.backend.connection_error.endpoint.unauthorized.summary": "Endpoint 連線失敗:目標管理介面已回應,但目前 API Key 無效或缺失。", - "jvm.backend.connection_error.endpoint.unauthorized.help": "請檢查連線中的 Endpoint API Key 是否與目標服務設定一致。", - "jvm.backend.connection_error.endpoint.forbidden.summary": "Endpoint 連線失敗:目前請求被目標管理介面拒絕。", - "jvm.backend.connection_error.endpoint.forbidden.help": "請確認目前用戶端來源、鑑權設定和存取策略允許 GoNavi 存取該管理介面。", - "jvm.backend.connection_error.endpoint.timeout.summary": "Endpoint 連線失敗:存取目標管理介面逾時。", - "jvm.backend.connection_error.endpoint.timeout.help": "請確認 Base URL 可連線、目標服務已完成啟動,並視需要增加連線逾時時間。", - "jvm.backend.connection_error.agent.base_url_required": "Agent 連線失敗:未填寫 Agent Base URL。", - "jvm.backend.connection_error.agent.base_url_invalid.summary": "Agent 連線失敗:Agent Base URL 格式不合法。", - "jvm.backend.connection_error.agent.base_url_invalid.help": "請填寫完整的 `http://` 或 `https://` 位址,例如 `http://127.0.0.1:19090/gonavi/agent/jvm`。", - "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Agent 連線失敗:目前只支援 HTTP 或 HTTPS 協定。", - "jvm.backend.connection_error.agent.scheme_unsupported.help": "請將 Agent Base URL 改成以 `http://` 或 `https://` 開頭的位址。", - "jvm.backend.connection_error.agent.connection_refused.summary": "Agent 連線失敗:目標 Agent 管理連接埠未監聽,或目前位址無法連線。", - "jvm.backend.connection_error.agent.connection_refused.help": "請確認 Java 服務已透過 `-javaagent` 啟動 GoNavi Agent,並檢查 Base URL、連接埠對映與防火牆。", - "jvm.backend.connection_error.agent.unauthorized.summary": "Agent 連線失敗:Agent 已回應,但目前 API Key 無效或缺失。", - "jvm.backend.connection_error.agent.unauthorized.help": "請檢查連線中的 Agent API Key 是否與目標服務啟動參數一致。", - "jvm.backend.connection_error.agent.forbidden.summary": "Agent 連線失敗:目前請求被 Agent 拒絕。", - "jvm.backend.connection_error.agent.forbidden.help": "請確認目前用戶端來源、鑑權設定和 Agent 存取策略允許 GoNavi 存取。", - "jvm.backend.connection_error.agent.timeout.summary": "Agent 連線失敗:存取 Agent 管理連接埠逾時。", - "jvm.backend.connection_error.agent.timeout.help": "請確認目標位址可連線、Agent 已完成啟動,並視需要增加連線逾時時間。", - "jvm.backend.connection_error.jmx.host_required": "JMX 連線失敗:未填寫主機位址。", - "jvm.backend.connection_error.jmx.port_invalid": "JMX 連線失敗:連接埠無效,請填寫 1-65535 之間的有效連接埠。", - "jvm.backend.connection_error.jmx.java_missing.summary": "JMX 連線失敗:目前機器未找到 `java` runtime,GoNavi 無法啟動 JMX helper。", - "jvm.backend.connection_error.jmx.java_missing.help": "請先安裝 JRE/JDK,或透過環境變數 `GONAVI_JMX_JAVA_BIN` 指向正確的 `java` 可執行檔。", - "jvm.backend.connection_error.jmx.non_jrmp.summary": "JMX 連線失敗:{{target}} 不是標準 JMX 遠端管理連接埠,目前更像一般業務連接埠或 HTTP 連接埠。", - "jvm.backend.connection_error.jmx.non_jrmp.help": "請改填應用實際暴露的 JMX 連接埠,而不是業務 `server.port`。如果服務只開啟 `-Dcom.sun.management.jmxremote`,但沒有設定 `jmxremote.port`,也無法直接遠端連線。", - "jvm.backend.connection_error.jmx.no_such_object.summary": "JMX 連線失敗:{{target}} 上雖然有 RMI 服務,但不是可用的 JMX RMIServer 連接埠。", - "jvm.backend.connection_error.jmx.no_such_object.help": "這通常代表填到了 RMI 註冊連接埠、除錯連接埠或其他 Java 服務連接埠。請檢查 `jmxremote.port` 和 `jmxremote.rmi.port` 設定是否正確。", - "jvm.backend.connection_error.jmx.connection_reset.summary": "JMX 連線失敗:{{target}} 上的服務主動中斷連線,目前連接埠不是相容的標準 JMX RMI 連接埠。", - "jvm.backend.connection_error.jmx.connection_reset.help": "請確認填寫的是 JVM 真正對外暴露的 JMX 連接埠,而不是業務連接埠、除錯連接埠或被代理轉發的連接埠。", - "jvm.backend.connection_error.jmx.connection_refused.summary": "JMX 連線失敗:無法連線到 {{target}},對應連接埠沒有監聽或目前網路無法連線。", - "jvm.backend.connection_error.jmx.connection_refused.help": "請確認目標 JVM 已開啟遠端 JMX,並檢查主機、防火牆、連接埠對映和 SSH/代理設定。", - "jvm.backend.connection_error.jmx.auth.summary": "JMX 連線失敗:{{target}} 需要認證,或目前憑證不可用。", - "jvm.backend.connection_error.jmx.auth.help": "請確認目標 JMX 是否關閉認證;如果必須認證,需要補充使用者名稱/密碼後再連線。", - "jvm.backend.connection_error.jmx.timeout.summary": "JMX 連線失敗:連線 {{target}} 逾時。", - "jvm.backend.connection_error.jmx.timeout.help": "請確認連接埠可連線、網路未被攔截,並視需要增加連線逾時時間。", - "jvm.backend.diagnostic.error.disabled": "目前連線未啟用 JVM 診斷增強模式", - "jvm.backend.diagnostic.error.session_id_required": "診斷會話 ID 不能為空,請先建立會話", - "jvm.backend.diagnostic.error.command_required": "診斷命令不能為空", - "jvm.backend.diagnostic.error.cancel_identifiers_required": "取消命令缺少 sessionId 或 commandId", - "jvm.backend.diagnostic.error.audit_write_blocked": "診斷稽核記錄寫入失敗,已阻止命令執行: {{detail}}", - "jvm.backend.diagnostic.error.execute_canceled": "診斷執行請求已終止:{{detail}}", - "jvm.backend.diagnostic.error.transport_unsupported": "不支援的 JVM 診斷傳輸模式:{{transport}}", - "jvm.backend.diagnostic.warning.audit_write_failed": "稽核記錄寫入失敗: {{detail}}", - "jvm.backend.diagnostic.message.command_completed": "診斷命令執行完成", - "jvm.backend.diagnostic.message.cancel_requested": "已傳送取消請求,等待診斷橋接端結束命令", - "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas 命令執行完成", - "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas 命令已終止", - "jvm.backend.diagnostic.policy.observe_not_allowed": "目前連線未開放觀察類診斷命令:{{command}}", - "jvm.backend.diagnostic.policy.trace_not_allowed": "目前連線未開放追蹤類診斷命令:{{command}}", - "jvm.backend.diagnostic.policy.mutating_not_allowed": "目前連線未開放高風險診斷命令:{{command}}", - "jvm.backend.diagnostic.policy.read_only_observe_only": "目前連線為唯讀模式,僅允許觀察類診斷命令", - "jvm.backend.diagnostic.policy.multiline_not_supported": "診斷命令不支援換行或多命令輸入", - "jvm.backend.diagnostic.arthas.base_url_required": "Arthas Tunnel 位址不能為空", - "jvm.backend.diagnostic.arthas.base_url_invalid": "Arthas Tunnel 位址格式不正確:{{detail}}", - "jvm.backend.diagnostic.arthas.target_id_required": "Arthas Tunnel 需要填寫目標實例標識(targetId / agentId)", - "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel 僅支援 http/https/ws/wss 位址:{{scheme}}", - "jvm.backend.diagnostic.arthas.session_missing": "診斷會話不存在,請重新建立 Arthas Tunnel 會話", - "jvm.backend.diagnostic.arthas.session_config_changed": "Arthas Tunnel 會話設定已變更,請重新建立診斷會話", - "jvm.backend.diagnostic.arthas.command_already_running": "目前 Arthas Tunnel 會話已有命令在執行,請先等待完成或取消", - "jvm.backend.diagnostic.arthas.no_running_command": "目前 Arthas Tunnel 會話沒有正在執行的命令", - "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "目前 Arthas Tunnel 會話的活動命令與待取消命令不一致", - "jvm.backend.diagnostic.arthas.connection_not_ready": "Arthas Tunnel 連線尚未建立完成,請稍後重試", - "jvm.backend.diagnostic.arthas.http_failed": "Arthas Tunnel 連線失敗:HTTP {{status}}", - "jvm.backend.diagnostic.arthas.connect_timeout": "建立 Arthas Tunnel WebSocket 連線逾時,{{timeout}} 內未收到回應", - "jvm.backend.diagnostic.arthas.connect_canceled": "建立 Arthas Tunnel WebSocket 連線已終止", - "jvm.backend.diagnostic.arthas.connect_failed": "建立 Arthas Tunnel WebSocket 連線失敗:{{detail}}", - "jvm.backend.diagnostic.arthas.request_encode_failed": "Arthas Tunnel 請求編碼失敗:{{detail}}", - "jvm.backend.diagnostic.arthas.write_deadline_failed": "Arthas Tunnel 寫入逾時設定失敗:{{detail}}", - "jvm.backend.diagnostic.arthas.send_timeout": "向 Arthas Tunnel 傳送終端指令逾時,{{timeout}} 內未收到回應", - "jvm.backend.diagnostic.arthas.send_canceled": "向 Arthas Tunnel 傳送終端指令已終止", - "jvm.backend.diagnostic.arthas.send_failed": "向 Arthas Tunnel 傳送終端指令失敗:{{detail}}", - "jvm.backend.diagnostic.arthas.read_deadline_failed": "Arthas Tunnel 讀取逾時設定失敗:{{detail}}", - "jvm.backend.diagnostic.arthas.read_timeout": "讀取 Arthas Tunnel 輸出逾時,{{timeout}} 內未收到回應", - "jvm.backend.diagnostic.arthas.read_canceled": "讀取 Arthas Tunnel 輸出已終止", - "jvm.backend.diagnostic.arthas.read_failed": "讀取 Arthas Tunnel 輸出失敗:{{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed": "Arthas Tunnel 連線已關閉:{{detail}}", - "jvm.backend.diagnostic.arthas.connection_closed_code": "Arthas Tunnel 連線已關閉:code={{code}}", - "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel 命令執行逾時,{{timeout}} 內未完成", - "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel 命令已終止", - "jvm.backend.diagnostic.arthas.target_not_found": "找不到目標實例,請確認 targetId / agentId 是否填寫正確,且對應 tunnel client 已上線", - "jvm.backend.diagnostic.arthas.target_not_found_with_id": "找不到目標實例 {{target}},請確認 targetId / agentId 是否填寫正確,且對應 tunnel client 已上線", - "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Arthas Tunnel 終端指令編碼失敗:{{detail}}", - "jvm_resource.error.connection_missing": "連線不存在或已被刪除", - "jvm_resource.error.resource_path_empty": "資源路徑為空", - "jvm_resource.error.get_value_unavailable": "JVMGetValue 後端方法不可用", - "jvm_resource.error.read_failed": "讀取 JVM 資源失敗", - "jvm_resource.error.ai_plan_missing_context": "AI 計畫缺少來源上下文,請在目標 JVM 資源頁重新產生後再套用。", - "jvm_resource.error.ai_plan_context_mismatch": "目前 JVM 分頁與 AI 計畫的來源上下文不一致,已拒絕自動套用。", - "jvm_resource.error.ai_plan_to_draft_failed": "AI 計畫暫時無法轉換為 JVM 預覽草稿", - "jvm_resource.message.ai_plan_draft_filled": "已從 AI 計畫填入草稿,目標資源為 {{resourceId}},請先執行「預覽變更」再確認寫入。", - "jvm_ai_plan.error.resource_locator_missing": "AI 計畫缺少可用的資源定位資訊", - "jvm_ai_plan.error.reason_missing": "AI 計畫缺少變更原因", - "jvm_ai_plan.error.action_missing": "AI 計畫缺少可執行 action", - "jvm_ai_plan.error.payload_json_object_required": "目前 JVM 預覽要求 payload 仍然是 JSON 物件", - "jvm_ai_plan.snapshot.unavailable": "目前資源快照尚未成功載入。", - "jvm_ai_plan.actions.none": "目前資源未宣告支援動作。若要產生計畫,請僅在能從快照內容明確推斷時給出 action,並保持 payload 為 JSON 物件。", - "jvm_ai_plan.actions.label": " ({{label}})", - "jvm_ai_plan.actions.description": ":{{description}}", - "jvm_ai_plan.actions.payload_fields": ";payload 欄位:{{fields}}", - "jvm_ai_plan.actions.field_separator": "、", - "jvm_ai_plan.actions.required_suffix": "(required)", - "jvm_ai_plan.prompt.resource_path_missing": "(未提供資源路徑)", - "jvm_ai_plan.prompt.environment_unknown": "unknown", - "jvm_ai_plan.prompt.intro": "請分析下面這個 JVM 資源,並產生一個可用於 GoNavi「預覽變更」的結構化修改計畫。", - "jvm_ai_plan.prompt.connection_name": "連線名稱:{{connectionName}}", - "jvm_ai_plan.prompt.target_host": "目標主機:{{host}}", - "jvm_ai_plan.prompt.provider_mode": "Provider 模式:{{providerMode}}", - "jvm_ai_plan.prompt.environment": "執行環境:{{environmentLabel}}", - "jvm_ai_plan.prompt.connection_policy.read_only": "唯讀連線,目前只能產生計畫和風險分析,不能假設已執行", - "jvm_ai_plan.prompt.connection_policy.writable": "可寫連線,但仍必須先預覽再由人工確認", - "jvm_ai_plan.prompt.connection_policy": "連線策略:{{policy}}", - "jvm_ai_plan.prompt.resource_path": "目前資源路徑:{{resourcePath}}", - "jvm_ai_plan.prompt.snapshot_title": "目前資源快照:", - "jvm_ai_plan.prompt.supported_actions_title": "目前資源支援動作:", - "jvm_ai_plan.prompt.output_requirements_title": "輸出要求:", - "jvm_ai_plan.prompt.requirement.single_json_block": "1. 可以先給一小段分析,但必須包含且只包含一個 ```json 程式碼區塊。", - "jvm_ai_plan.prompt.requirement.fields": "2. 程式碼區塊裡的 JSON 欄位必須嚴格是:targetType、selector、action、payload、reason。", - "jvm_ai_plan.prompt.requirement.resource_path": "3. selector.resourcePath 優先使用目前資源路徑 {{resourcePath}},不要憑空編造其他路徑。", - "jvm_ai_plan.prompt.requirement.action": "4. action 優先從「目前資源支援動作」裡選擇;如果目前資源未宣告支援動作,才允許基於快照內容推斷。", - "jvm_ai_plan.prompt.requirement.payload": "5. payload 只能使用 JSON 物件包裝,不要輸出腳本、命令或原始二進位。若需要純文字值,也請包裝成 {\"format\":\"text\",\"value\":\"...\"}。", - "jvm_ai_plan.prompt.requirement.no_execute": "6. 不要聲稱已經執行修改,也不要輸出腳本或命令。", - "jvm_ai_plan.prompt.example_title": "JSON 範例:", - "jvm_ai_plan.prompt.example_reason": "修復快取髒值", - "jvm_resource.error.reason_required": "請填寫變更原因", - "jvm_resource.error.payload_object_required": "Payload 必須是 JSON 物件", - "jvm_resource.error.resource_id_empty": "資源 ID 為空,無法產生變更草稿", - "jvm_resource.error.preview_unavailable": "JVMPreviewChange 後端方法不可用", - "jvm_resource.error.draft_invalid": "變更草稿不合法", - "jvm_resource.error.preview_failed": "預覽 JVM 變更失敗", - "jvm_resource.error.preview_result_invalid": "預覽結果格式不正確", - "jvm_resource.error.apply_unavailable": "JVMApplyChange 後端方法不可用", - "jvm_resource.error.preview_required": "請先預覽變更,再確認執行", - "jvm_resource.error.context_changed": "資源上下文已變更,請重新預覽後再執行", - "jvm_resource.error.confirmation_missing": "確認權杖缺失,請重新預覽後再執行", - "jvm_resource.presentation.action.set.label": "設定屬性", - "jvm_resource.presentation.action.set.description": "更新目前資源公開的可寫屬性值。", - "jvm_resource.presentation.action.invoke.label": "呼叫操作", - "jvm_resource.presentation.action.invoke.description": "呼叫目前資源公開的管理操作。", - "jvm_resource.presentation.action.put.label": "寫入資源", - "jvm_resource.presentation.action.put.description": "將 payload 內容寫入目前 JVM 資源。", - "jvm_resource.presentation.action.clear.label": "清空資源", - "jvm_resource.presentation.action.clear.description": "清空目前 JVM 資源中的資料或狀態。", - "jvm_resource.presentation.action.evict.label": "逐出快取", - "jvm_resource.presentation.action.evict.description": "將目標快取項目從目前 JVM 執行階段逐出。", - "jvm_resource.presentation.action.remove.label": "移除項目", - "jvm_resource.presentation.action.remove.description": "移除目前資源中的指定項目。", - "jvm_resource.presentation.action.delete.label": "刪除資源", - "jvm_resource.presentation.action.delete.description": "刪除或取消註冊目前資源。", - "jvm_resource.presentation.action.refresh.label": "重新整理資源", - "jvm_resource.presentation.action.refresh.description": "重新整理目前資源的執行階段狀態。", - "jvm_resource.presentation.action.reload.label": "重新載入", - "jvm_resource.presentation.action.reload.description": "重新載入目前資源或其設定。", - "jvm_resource.presentation.action.reset.label": "重設狀態", - "jvm_resource.presentation.action.reset.description": "將目前資源還原為初始或預設狀態。", - "jvm_resource.presentation.unnamed_action": "未命名動作", - "jvm_resource.presentation.risk.low": "低", - "jvm_resource.presentation.risk.medium": "中", - "jvm_resource.presentation.risk.high": "高", - "jvm_resource.presentation.risk.unknown": "未知", - "jvm_resource.presentation.audit_result.unknown": "未知", - "jvm_resource.presentation.audit_result.applied": "已執行", - "jvm_resource.presentation.audit_result.success": "成功", - "jvm_resource.presentation.audit_result.warning": "警告", - "jvm_resource.presentation.audit_result.blocked": "已阻擋", - "jvm_resource.presentation.audit_result.failed": "失敗", - "jvm_resource.error.apply_failed": "執行 JVM 變更失敗", - "jvm_resource.message.apply_success": "JVM 變更已執行", - "jvm_resource.title": "JVM 資源工作台", - "jvm_resource.badge.read_only": "唯讀連線", - "jvm_resource.badge.writable": "可寫入連線", - "jvm_resource.action.audit": "稽核記錄", - "jvm_resource.action.generate_ai_plan": "AI 產生計畫", - "jvm_resource.action.ask_ai_plan": "讓 AI 產生計畫", - "jvm_resource.card.snapshot": "資源快照", - "jvm_resource.field.resource_id": "資源 ID", - "jvm_resource.field.resource_type": "資源類型", - "jvm_resource.field.format": "格式", - "jvm_resource.field.version": "版本", - "jvm_resource.field.available_actions": "可用動作", - "jvm_resource.section.resource_value": "資源值", - "jvm_resource.section.metadata": "中繼資料", - "jvm_resource.empty.no_resource_data": "暫無資源資料", - "jvm_resource.card.change_draft": "變更草稿", - "jvm_resource.field.resource_path": "資源路徑", - "jvm_resource.field.target_resource": "目標資源", - "jvm_resource.field.resource_version": "資源版本", - "jvm_resource.field.draft_source": "草稿來源", - "jvm_resource.draft_source.ai_plan": "AI 輔助草稿", - "jvm_resource.draft_source.manual": "手動編輯", - "jvm_resource.section.supported_actions": "資源支援動作", - "jvm_resource.field.payload_fields": "Payload 欄位:", - "jvm_resource.marker.required_suffix": "(必填)", - "jvm_resource.list_separator": "、", - "jvm_resource.field.action": "動作", - "jvm_resource.placeholder.action_jmx": "例如 set 或 invoke", - "jvm_resource.placeholder.action_default": "例如 put / clear / evict", - "jvm_resource.message.current_action": "目前動作:", - "jvm_resource.field.reason": "變更原因", - "jvm_resource.placeholder.reason": "填寫本次 JVM 資源變更原因", - "jvm_resource.field.payload": "Payload(JSON)", - "jvm_resource.message.payload_hint": "預覽會使用目前草稿;確認執行會使用最近一次成功預覽的請求,修改草稿後請重新預覽。", - "jvm_resource.message.payload_template_applied": "已依目前動作填入建議範本。", - "jvm_resource.action.preview_change": "預覽變更", - "jvm_overview.connection_missing.message": "連線不存在或已被刪除", - "jvm_overview.error.capability_load_failed": "讀取 JVM 模式能力失敗", - "jvm_overview.eyebrow": "JVM 執行階段", - "jvm_overview.title": "JVM 執行階段概覽", - "jvm_overview.badge.read_only": "唯讀連線", - "jvm_overview.badge.writable": "可寫連線", - "jvm_overview.card.connection_summary": "連線摘要", - "jvm_overview.card.mode_capability": "模式能力", - "jvm_overview.field.current_mode": "目前模式", - "jvm_overview.field.allowed_modes": "允許模式", - "jvm_overview.field.jmx_address": "JMX 位址", - "jvm_overview.field.endpoint": "Endpoint", - "jvm_overview.field.agent": "Agent", - "jvm_overview.field.resource_browse": "資源瀏覽", - "jvm_overview.value.enabled": "已啟用", - "jvm_overview.value.not_configured": "未設定", - "jvm_overview.value.resource_browse_lazy_load": "透過側邊欄展開模式節點後延遲載入", - "jvm_overview.empty.capabilities": "暫無模式能力資料", - "jvm_overview.capability.can_browse": "可瀏覽", - "jvm_overview.capability.cannot_browse": "不可瀏覽", - "jvm_overview.capability.writable": "可寫", - "jvm_overview.capability.read_only": "唯讀", - "jvm_overview.capability.preview_supported": "支援預覽", - "jvm_overview.capability.preview_unsupported": "不支援預覽", - "jvm_monitoring_dashboard.connection_missing.message": "連線不存在或已被刪除", - "jvm_monitoring_dashboard.error.history_unavailable": "JVMGetMonitoringHistory 後端方法不可用", - "jvm_monitoring_dashboard.error.history_load_failed": "讀取監控歷史失敗", - "jvm_monitoring_dashboard.error.start_unavailable": "JVMStartMonitoring 後端方法不可用", - "jvm_monitoring_dashboard.error.start_failed": "開始監控失敗", - "jvm_monitoring_dashboard.error.stop_unavailable": "JVMStopMonitoring 後端方法不可用", - "jvm_monitoring_dashboard.error.stop_failed": "停止監控失敗", - "jvm_monitoring_dashboard.title": "JVM 持續監控", - "jvm_monitoring_dashboard.status.sampling": "取樣中", - "jvm_monitoring_dashboard.status.stopped": "未執行", - "jvm_monitoring_dashboard.action.refresh": "重新整理", - "jvm_monitoring_dashboard.action.start": "開始監控", - "jvm_monitoring_dashboard.action.stop": "停止監控", - "jvm_monitoring_dashboard.degraded.message": "監控能力存在降級", - "jvm_monitoring_dashboard.empty.title": "目前尚未開始持續監控", - "jvm_monitoring_dashboard.empty.description": "點擊「開始監控」後,GoNavi 會在目前會話內持續保留該連線的取樣結果;切換分頁不會停止取樣。", - "jvm_diagnostic.workbench.eyebrow": "JVM 診斷", - "jvm_diagnostic.workbench.title": "JVM 診斷工作台", - "jvm_diagnostic.workbench.status.session_established": "會話已建立", - "jvm_diagnostic.workbench.status.no_session": "未建會話", - "jvm_diagnostic.workbench.status.command_running": "命令執行中", - "jvm_diagnostic.workbench.action.probe": "檢查能力", - "jvm_diagnostic.workbench.action.restart_session": "重建會話", - "jvm_diagnostic.workbench.action.start_session": "新建會話", - "jvm_diagnostic.workbench.action.execute_command": "執行命令", - "jvm_diagnostic.workbench.action.cancel_command": "取消命令", - "jvm_diagnostic.connection_missing.message": "連線不存在或已被刪除", - "jvm_diagnostic.error.probe_unavailable": "JVMProbeDiagnosticCapabilities 後端方法不可用", - "jvm_diagnostic.error.probe_failed": "檢查診斷能力失敗", - "jvm_diagnostic.error.start_unavailable": "JVMStartDiagnosticSession 後端方法不可用", - "jvm_diagnostic.error.start_failed": "建立診斷會話失敗", - "jvm_diagnostic.error.history_load_failed": "載入診斷歷史失敗", - "jvm_diagnostic.error.execute_unavailable": "JVMExecuteDiagnosticCommand 後端方法不可用", - "jvm_diagnostic.error.execute_session_required": "請先建立診斷會話,再執行命令", - "jvm_diagnostic.error.execute_command_required": "診斷命令不能為空", - "jvm_diagnostic.error.execute_failed": "診斷命令執行失敗", - "jvm_diagnostic.error.cancel_unavailable": "JVMCancelDiagnosticCommand 後端方法不可用", - "jvm_diagnostic.error.cancel_failed": "取消診斷命令失敗", - "jvm_diagnostic.message.cancel_sent": "已送出取消請求", - "jvm_diagnostic.session.default_title": "JVM 診斷控制台", - "jvm_diagnostic.session.default_reason": "從控制台啟動會話", - "jvm_diagnostic.ai_plan.error.transport_mismatch": "AI 計畫的診斷 transport 為 {{planTransport}},與目前控制台 {{currentTransport}} 不一致,請重新產生計畫後再套用。", - "jvm_diagnostic.ai_plan.message.filled": "AI 診斷計畫已回填到控制台", - "jvm_diagnostic.session_capability.title": "會話與能力", - "jvm_diagnostic.session_capability.description": "目前通道、權限與快速維護", - "jvm_diagnostic.session_capability.status.session_established": "會話已建立", - "jvm_diagnostic.session_capability.status.no_session": "未建會話", - "jvm_diagnostic.session_capability.status.command_running": "命令執行中", - "jvm_diagnostic.session_capability.status.idle": "閒置", - "jvm_diagnostic.session_capability.session_id_hint": "建立會話後會在這裡顯示會話 ID。", - "jvm_diagnostic.session_capability.note": "能力檢查不會執行命令;執行命令前必須先建立會話。稽核歷史會顯示最近命令記錄,未建立會話時也可能包含過去會話的記錄。", - "jvm_diagnostic.session_capability.action.clear_output": "清空輸出", - "jvm_diagnostic.session_capability.action.refresh_history": "重新整理歷史", - "jvm_diagnostic.workflow.probe.title": "檢查能力", - "jvm_diagnostic.workflow.probe.description": "只讀取診斷通道、串流輸出與命令權限,不建立會話。", - "jvm_diagnostic.workflow.session.title": "新建會話", - "jvm_diagnostic.workflow.session.description": "建立診斷上下文,後續命令都會綁定到這個會話。", - "jvm_diagnostic.workflow.command.title": "執行命令", - "jvm_diagnostic.workflow.command.description": "會話建立後顯示命令編輯器、原因輸入與範本。", - "jvm_diagnostic.capability.empty.title": "尚未檢查能力", - "jvm_diagnostic.capability.empty.description": "能力檢查只讀取通道權限和命令策略,不會建立會話或執行命令。", - "jvm_diagnostic.capability_result.title": "能力檢查結果", - "jvm_diagnostic.capability_result.session_allowed": "可建立會話", - "jvm_diagnostic.capability_result.session_denied": "不可建立會話", - "jvm_diagnostic.capability_result.streaming_supported": "串流輸出", - "jvm_diagnostic.capability_result.streaming_unsupported": "不支援串流", - "jvm_diagnostic.capability_result.observe_allowed": "觀察命令", - "jvm_diagnostic.capability_result.observe_denied": "禁止觀察", - "jvm_diagnostic.capability_result.trace_allowed": "追蹤命令", - "jvm_diagnostic.capability_result.mutating_allowed": "高風險命令", - "jvm_diagnostic.no_session.title": "開始一次診斷", - "jvm_diagnostic.no_session.description": "先建立會話,再顯示命令編輯器和範本", - "jvm_diagnostic.no_session.alert.title": "命令輸入會在會話建立後顯示", - "jvm_diagnostic.no_session.alert.description": "這可避免在未綁定會話時誤以為命令已可執行,也能確保稽核記錄、輸出串流和取消命令都綁定到同一個會話。", - "jvm_diagnostic.no_session.action.start": "新建診斷會話", - "jvm_diagnostic.no_session.action.probe": "先檢查能力", - "jvm_diagnostic.command_input.title": "命令輸入", - "jvm_diagnostic.command_input.description": "支援自動完成。按 Ctrl/Cmd + Enter 執行。", - "jvm_diagnostic.command_input.command_label": "診斷命令", - "jvm_diagnostic.command_input.command_description": "輸入 Arthas/診斷命令,例如 thread -n 5、dashboard 或 jvm;下方範本可一鍵填入。", - "jvm_diagnostic.command_input.reason_label": "診斷原因(選填)", - "jvm_diagnostic.command_input.reason_placeholder": "例如:排查 CPU 飆高、確認執行緒阻塞,或定位慢方法", - "jvm_diagnostic.command_input.reason_help": "用於稽核記錄和 AI 上下文。它不會作為 Arthas 命令傳送到目標 JVM。", - "jvm_diagnostic.command_templates.title": "命令範本", - "jvm_diagnostic.output.title": "即時輸出", - "jvm_diagnostic.output.description": "依後端事件流追加顯示", - "jvm_diagnostic.output.empty.description": "暫無即時輸出。命令執行後,這裡會依時間順序追加後端返回內容。", - "jvm_diagnostic.output.local_pending": "已提交診斷命令,等待後端輸出:{{command}}", - "jvm_diagnostic.output.frontend_completed_fallback": "診斷命令呼叫已返回,但未收到後端終態事件,前端已兜底結束等待狀態。", - "jvm_diagnostic.presentation.category.observe": "觀察類命令", - "jvm_diagnostic.presentation.category.trace": "追蹤類命令", - "jvm_diagnostic.presentation.category.mutating": "高風險命令", - "jvm_diagnostic.presentation.phase.running": "執行中", - "jvm_diagnostic.presentation.phase.completed": "已完成", - "jvm_diagnostic.presentation.phase.failed": "失敗", - "jvm_diagnostic.presentation.phase.canceling": "取消中", - "jvm_diagnostic.presentation.phase.diagnostic": "診斷事件", - "jvm_diagnostic.presentation.event.diagnostic": "診斷輸出", - "jvm_diagnostic.presentation.event.chunk": "輸出片段", - "jvm_diagnostic.presentation.event.done": "執行結束", - "jvm_diagnostic.presentation.chunk.empty_event": "空事件", - "jvm_diagnostic.history.title": "稽核歷史", - "jvm_diagnostic.history.description": "最近命令與執行狀態", - "jvm_diagnostic.history.current_session": "目前會話", - "jvm_diagnostic.history.no_session": "尚未建立診斷會話", - "jvm_diagnostic.history.recent_records": "最近記錄", - "jvm_diagnostic.history.reason_missing": "未填寫診斷原因", - "jvm_diagnostic.history.no_records": "尚無診斷歷史", - "jvm_audit.eyebrow": "JVM 稽核", - "jvm_audit.title": "JVM 變更稽核", - "jvm_audit.card.records": "稽核記錄", - "jvm_audit.description.current_range": "目前範圍:最近 {{limit}} 筆", - "jvm_audit.option.last_records": "最近 {{limit}} 筆", - "jvm_audit.action.refresh": "重新整理", - "jvm_audit.column.time": "時間", - "jvm_audit.column.mode": "模式", - "jvm_audit.column.action": "動作", - "jvm_audit.column.resource": "資源", - "jvm_audit.column.reason": "原因", - "jvm_audit.column.source": "來源", - "jvm_audit.column.result": "結果", - "jvm_audit.source.ai_plan": "AI 輔助", - "jvm_audit.source.manual": "手動", - "jvm_audit.error.connection_missing": "連線不存在或已被刪除", - "jvm_audit.error.backend_unavailable": "JVMListAuditRecords 後端方法不可用", - "jvm_audit.error.load_failed": "讀取 JVM 稽核記錄失敗{{separator}}{{detail}}", - "jvm_audit.empty.load_failed": "目前無法載入稽核記錄", - "jvm_audit.empty.no_records": "暫無稽核記錄", - "query_editor.placeholder.connection": "選擇連線", - "query_editor.placeholder.database": "選擇資料庫", - "query_editor.max_rows.tooltip": "最大傳回列數。SELECT 陳述式會自動加上 LIMIT,避免過大的結果集造成介面停滯。", - "query_editor.max_rows.option_500": "最大列數:500", - "query_editor.max_rows.option_1000": "最大列數:1000", - "query_editor.max_rows.option_5000": "最大列數:5000", - "query_editor.max_rows.option_20000": "最大列數:20000", - "query_editor.max_rows.option_unlimited": "最大列數:不限", - "query_editor.action.run": "執行", - "query_editor.action.run_with_shortcut": "執行({{shortcut}})", - "query_editor.action.stop": "停止", - "query_editor.action.save": "儲存", - "query_editor.action.save_with_shortcut": "儲存({{shortcut}})", - "query_editor.completion.documentation.comment": "備註:{{comment}}", - "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + 點擊切換到該資料庫", - "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + 點擊開啟該資料表", - "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + 點擊開啟該檢視", - "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + 點擊開啟該實體化檢視", - "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + 點擊開啟該觸發器", - "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + 點擊開啟該預存程序", - "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + 點擊開啟該函式", - "query_editor.object_info.database": "資料庫", - "query_editor.object_info.table": "資料表", - "query_editor.object_info.column": "欄位", - "query_editor.object_info.materialized_view": "物化檢視", - "query_editor.object_info.label.database": "資料庫", - "query_editor.object_info.label.table": "資料表", - "query_editor.object_info.label.type": "類型", - "query_editor.object_info.label.schema": "Schema", - "query_editor.object_info.label.separator": ":", - "query_editor.action.more": "更多", - "query_editor.action.format": "格式化", - "query_editor.action.format_sql": "格式化 SQL", - "query_editor.action.resize_editor": "拖曳以調整高度", - "query_editor.action.ai_generate_sql": "AI 產生 SQL", - "query_editor.action.ai_explain_sql": "AI 解釋 SQL", - "query_editor.action.ai_optimize_sql": "AI 最佳化 SQL", - "query_editor.action.ai_generate_sql_menu": "產生 SQL", - "query_editor.action.ai_explain_sql_menu": "解釋 SQL", - "query_editor.action.ai_optimize_sql_menu": "最佳化 SQL", - "query_editor.action.ai_schema_analysis": "結構描述分析", - "query_editor.action.show_results_panel": "顯示結果區", - "query_editor.action.hide_results_panel": "隱藏結果區", - "query_editor.action.show_results_panel_with_shortcut": "顯示結果區({{shortcut}})", - "query_editor.action.hide_results_panel_with_shortcut": "隱藏結果區({{shortcut}})", - "query_editor.action.results": "結果", - "query_editor.transaction.delay.immediate": "立即", - "query_editor.transaction.mode.tooltip": "參考 DBeaver:SQL 編輯器執行 INSERT/UPDATE/DELETE/MERGE/REPLACE 等 DML 時,會先進入 GoNavi 代管交易;手動提交需要自行提交/回滾,自動提交會在執行成功後自動 COMMIT。", - "query_editor.transaction.mode.manual": "手動", - "query_editor.transaction.mode.auto": "自動", - "query_editor.transaction.status.auto_commit_countdown": "{{seconds}}s 後自動提交", - "query_editor.transaction.status.auto_committing": "自動提交中", - "query_editor.transaction.action.commit": "提交", - "query_editor.transaction.action.commit_with_count": "提交 ({{count}})", - "query_editor.transaction.action.rollback": "回滾", - "query_editor.transaction.message.pending_managed_transaction": "目前 SQL 編輯器已有未提交交易,請先提交或回滾後再執行新的新增、更新或刪除語句。", - "query_editor.action.show_object_info": "查看物件資訊", - "query_editor.action.rename_query": "重新命名查詢", - "query_editor.action.export_sql_file": "匯出 SQL 檔案", - "query_editor.format.keyword_upper": "關鍵字大寫", - "query_editor.format.keyword_lower": "關鍵字小寫", - "query_editor.format.restore_last_format": "還原上次美化", - "query_editor.format.snippet_settings": "程式碼片段管理...", - "query_editor.format.shortcut_settings": "快捷鍵設定...", - "query_editor.message.format_failed": "格式化失敗:SQL 語法可能無效。", - "query_editor.message.no_format_restore_snapshot": "沒有可還原的美化前 SQL", - "query_editor.message.format_restore_success": "已還原到美化前 SQL", - "query_editor.message.page_query_failed": "翻頁失敗:{{error}}", - "query_editor.message.page_query_empty": "翻頁未傳回結果集", - "query_editor.message.refresh_failed": "重新整理失敗:{{error}}", - "query_editor.message.select_database_first": "請先選擇資料庫。", - "query_editor.message.connection_not_found": "找不到連線。", - "query_editor.message.unsupported_source": "此資料來源不支援 SQL 查詢編輯器。請改用其專用頁面。", - "query_editor.message.no_executable_sql": "沒有可執行的 SQL。", - "query_editor.message.no_selectable_sql": "沒有可選取的 SQL 陳述式。", - "query_editor.message.statement_failed_prefix": "第 {{index}} 個陳述式執行失敗:", - "query_editor.message.execution_success": "執行成功。", - "query_editor.message.execution_multi_success": "已執行 {{statements}} 個陳述式,並產生 {{results}} 個結果集。", - "query_editor.message.execution_result_sets_success": "執行完成,並產生 {{results}} 個結果集。", - "query_editor.message.execution_failed_with_error": "查詢執行失敗:{{error}}", - "query_editor.message.cancel_no_running": "沒有正在執行的查詢可取消。", - "query_editor.message.cancel_success": "查詢已終止。", - "query_editor.message.cancel_failed": "取消查詢失敗:{{error}}", - "query_editor.message.read_only_no_safe_locator": "未偵測到主鍵或可用唯一索引,無法安全提交修改。", - "query_editor.message.read_only_index_metadata_unavailable": "無法載入唯一索引中繼資料,無法安全提交修改。", - "query_editor.message.read_only_table_locator_metadata_unavailable": "無法載入 {{table}} 的主鍵/唯一索引中繼資料,無法安全提交修改。", - "query_editor.message.read_only_system_metadata": "系統中繼資料查詢結果維持唯讀。", - "query_editor.message.read_only_oracle_rowid_injection_unavailable": "Oracle 查詢使用 * 時無法自動注入 ROWID 定位欄,已維持唯讀。", - "query_editor.message.read_only_warning_with_detail": "查詢結果維持唯讀:{{detail}}", - "query_editor.message.object_info_target_not_found": "目前游標未定位到可識別的資料表或欄位。", - "query_editor.message.insert_success": "程式碼已插入目前游標位置。", - "query_editor.message.append_success": "已附加程式碼。", - "query_editor.message.saved": "查詢已儲存。", - "query_editor.message.sql_file_saved": "SQL 檔案已儲存。", - "query_editor.message.save_sql_file_failed": "儲存 SQL 檔案失敗:{{error}}", - "query_editor.message.save_query_failed": "儲存查詢失敗:{{error}}", - "query_editor.message.export_sql_file_success": "SQL 檔案已匯出。", - "query_editor.message.export_sql_file_failed": "匯出 SQL 檔案失敗:{{error}}", - "query_editor.message.save_first_before_rename": "請先儲存查詢後再重新命名。", - "query_editor.message.renamed": "查詢已重新命名。", - "query_editor.empty_state.title": "等待執行 SQL", - "query_editor.empty_state.description": "執行查詢後,結果會在下方以新版資料網格顯示。", - "query_editor.result.tab_title": "結果 {{index}}({{count}})", - "query_editor.result.tab_title_success": "結果 {{index}} ✓", - "query_editor.result.close": "關閉結果", - "query_editor.result.execution_success": "執行成功", - "query_editor.result.affected_rows": "受影響列數:{{count}}", - "query_editor.result.execution_failed": "執行失敗", - "query_editor.result.ai_diagnose": "AI 診斷", - "query_editor.results_panel.tooltip.hide": "隱藏結果區", - "query_editor.results_panel.tooltip.hide_with_shortcut": "隱藏結果區({{shortcut}})", - "query_editor.results_panel.menu.close_other": "關閉其他頁", - "query_editor.results_panel.menu.close_left": "關閉左側", - "query_editor.results_panel.menu.close_right": "關閉右側", - "query_editor.results_panel.menu.close_all": "關閉所有", - "query_editor.results_panel.action.hide": "隱藏", - "query_editor.results_panel.aria.hide": "隱藏結果區", - "query_editor.results_panel.tab.message": "訊息 {{index}}", - "query_editor.results_panel.tab.result": "結果 {{index}}", - "query_editor.results_panel.message.title": "執行訊息", - "query_editor.results_panel.panel.title": "結果區", - "query_editor.save_modal.title": "儲存查詢", - "query_editor.save_modal.rename_title": "重新命名查詢", - "query_editor.save_modal.rename_ok": "重新命名", - "query_editor.save_modal.name_label": "查詢名稱", - "query_editor.save_modal.name_required": "請輸入查詢名稱。", - "query_editor.save_modal.name_placeholder": "例如:查詢所有使用者", - "query_editor.save_modal.unnamed": "未命名查詢", - "query_editor.ai_prompt.default_source": "資料庫", - "query_editor.ai_prompt.default_database": "預設", - "query_editor.ai_prompt.context": "內容:{{type}} {{name}},目前選取的資料庫為 {{database}}。\n", - "query_editor.ai_prompt.generate": "請根據目前的資料庫結構產生查詢陳述式。", - "query_editor.ai_prompt.explain": "請解釋以下 SQL 陳述式的執行邏輯:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.optimize": "請分析以下 SQL 陳述式的效能問題,並提出最佳化建議:\n```sql\n{{sql}}\n```", - "query_editor.ai_prompt.schema": "請分析目前的資料庫結構,並提出效能與設計上的改善建議。", - "query_editor.ai_prompt.diagnose": "我在執行以下 SQL 時遇到錯誤:\n```sql\n{{sql}}\n```\n\n資料庫傳回的錯誤如下:\n```text\n{{error}}\n```\n\n請分析錯誤原因,並提出修正建議。", - "query_editor.slash_command.query.label": "自然語言查詢", - "query_editor.slash_command.query.description": "描述你想查詢的內容", - "query_editor.slash_command.query.prompt": "請為這個需求撰寫 SQL 查詢:", - "query_editor.slash_command.sql.label": "產生 SQL", - "query_editor.slash_command.sql.description": "描述需求並產生陳述式", - "query_editor.slash_command.sql.prompt": "請根據以下需求產生 SQL:", - "query_editor.slash_command.explain.label": "解釋 SQL", - "query_editor.slash_command.explain.description": "解釋選取 SQL 的邏輯", - "query_editor.slash_command.explain.prompt": "請解釋以下 SQL 陳述式的執行邏輯:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.optimize.label": "最佳化分析", - "query_editor.slash_command.optimize.description": "分析 SQL 效能瓶頸", - "query_editor.slash_command.optimize.prompt": "請分析以下 SQL 陳述式的效能問題,並提出最佳化建議:\n```sql\n{{sql}}\n```", - "query_editor.slash_command.schema.label": "資料表設計檢查", - "query_editor.slash_command.schema.description": "檢查資料表結構品質", - "query_editor.slash_command.schema.prompt": "請檢查相關資料表的設計,包括欄位型別、正規化、索引與改善建議。", - "query_editor.slash_command.index.label": "索引建議", - "query_editor.slash_command.index.description": "建議索引策略", - "query_editor.slash_command.index.prompt": "請根據目前的資料表結構與常見查詢情境,建議索引策略,必要時附上 SQL。", - "query_editor.slash_command.diff.label": "資料表比較", - "query_editor.slash_command.diff.description": "比較資料表差異並產生變更", - "query_editor.slash_command.diff.prompt": "請比較這兩個資料表結構,並產生從舊版本遷移到新版本的 ALTER 陳述式。", - "query_editor.slash_command.mock.label": "測試資料", - "query_editor.slash_command.mock.description": "產生 INSERT 測試資料", - "query_editor.slash_command.mock.prompt": "請為相關資料表產生 10 筆具有合理業務語意的 INSERT 測試資料。", - "query_editor.completion.detail.aggregate": "彙總函式", - "query_editor.completion.detail.string": "字串函式", - "query_editor.completion.detail.math": "數學函式", - "query_editor.completion.detail.date_time": "日期與時間函式", - "query_editor.completion.detail.conditional": "條件函式", - "query_editor.completion.detail.conversion": "型別轉換函式", - "query_editor.completion.detail.json": "JSON 函式", - "query_editor.completion.detail.utility": "工具函式", - "query_editor.completion.detail.info": "資訊函式", - "query_editor.completion.detail.window": "視窗函式", - "query_editor.completion.detail.sql_function": "SQL 函式", - "query_editor.completion.detail.aggregate_count": "彙總 - 計數", - "query_editor.completion.detail.string_concat": "字串 - 串接", - "query_editor.completion.detail.math_abs": "數學 - 絕對值", - "query_editor.completion.detail.date_now": "日期 - 目前日期與時間", - "query_editor.completion.detail.conditional_if": "條件 - IF", - "query_editor.completion.detail.conversion_cast": "轉換 - 型別轉換", - "query_editor.completion.detail.json_extract": "JSON - 擷取值", - "query_editor.completion.detail.crypto_md5": "雜湊 - MD5", - "query_editor.completion.detail.info_database": "資訊 - 目前資料庫", - "query_editor.completion.detail.window_row_number": "視窗 - 列號", - "query_editor.completion.detail.modifier_distinct": "修飾 - 去除重複", - "query_editor.completion.action.absolute_value": "絕對值", - "query_editor.completion.action.approximate_distinct": "近似去重", - "query_editor.completion.action.approximate_distinct_count": "近似去重計數", - "query_editor.completion.action.approximate_percentile": "近似百分位", - "query_editor.completion.action.approximate_quantile": "近似分位數", - "query_editor.completion.action.array_aggregation": "陣列聚合", - "query_editor.completion.action.array_length": "陣列長度", - "query_editor.completion.action.average": "平均值", - "query_editor.completion.action.bitmap_aggregation": "Bitmap 彙總", - "query_editor.completion.action.bitmap_construction": "建立 Bitmap", - "query_editor.completion.action.bitmap_count": "Bitmap 計數", - "query_editor.completion.action.boolean_and_aggregation": "布林與彙總", - "query_editor.completion.action.boolean_or_aggregation": "布林或彙總", - "query_editor.completion.action.character_length": "字元長度", - "query_editor.completion.action.concat_with_separator": "帶分隔符串接", - "query_editor.completion.action.concatenation": "串接", - "query_editor.completion.action.condition_mapping": "條件映射", - "query_editor.completion.action.conditional_check": "條件判斷", - "query_editor.completion.action.count": "計數", - "query_editor.completion.action.current_database": "目前資料庫", - "query_editor.completion.action.current_date": "目前日期", - "query_editor.completion.action.current_date_time": "目前日期與時間", - "query_editor.completion.action.current_time": "目前時間", - "query_editor.completion.action.current_timestamp": "目前時間戳", - "query_editor.completion.action.current_user": "目前使用者", - "query_editor.completion.action.database_current_time": "資料庫目前時間", - "query_editor.completion.action.date_addition": "日期加法", - "query_editor.completion.action.date_conversion": "轉日期", - "query_editor.completion.action.date_difference": "日期差", - "query_editor.completion.action.date_field_extraction": "日期欄位擷取", - "query_editor.completion.action.date_formatting": "日期格式化", - "query_editor.completion.action.date_subtraction": "日期減法", - "query_editor.completion.action.date_truncation": "日期截斷", - "query_editor.completion.action.date_value": "日期", - "query_editor.completion.action.datetime_conversion": "轉日期時間", - "query_editor.completion.action.datetime_value": "日期時間", - "query_editor.completion.action.decimal_truncation": "截斷小數", - "query_editor.completion.action.dense_rank": "連續排名", - "query_editor.completion.action.distinct_array_aggregation": "去重陣列聚合", - "query_editor.completion.action.e_power": "e 的次方", - "query_editor.completion.action.elapsed_time": "經過時間", - "query_editor.completion.action.epoch_seconds": "時間戳秒數", - "query_editor.completion.action.exact_distinct": "精確去重", - "query_editor.completion.action.first_non_null": "回傳第一個非 NULL", - "query_editor.completion.action.first_value": "第一個值", - "query_editor.completion.action.format_as_text": "格式化為文字", - "query_editor.completion.action.group_concatenation": "分組串接", - "query_editor.completion.action.guid_generation": "產生 GUID", - "query_editor.completion.action.hexadecimal": "十六進位", - "query_editor.completion.action.high_precision_current_time": "高精度目前時間", - "query_editor.completion.action.hll_aggregation": "HLL 彙總", - "query_editor.completion.action.hll_hash": "HLL 雜湊", - "query_editor.completion.action.instant_rate_of_change": "瞬時變化率", - "query_editor.completion.action.int64_conversion": "轉 Int64", - "query_editor.completion.action.interpolation": "插值", - "query_editor.completion.action.json_string_extraction": "JSON 字串擷取", - "query_editor.completion.action.json_unquote": "JSON 去引號", - "query_editor.completion.action.json_value_extraction": "JSON 擷取", - "query_editor.completion.action.json_value_set": "JSON 設定", - "query_editor.completion.action.jsonb_path_extraction": "JSONB 路徑擷取", - "query_editor.completion.action.julian_day": "儒略日", - "query_editor.completion.action.last_insert_id": "最後插入 ID", - "query_editor.completion.action.last_row": "最後一列", - "query_editor.completion.action.last_value": "最後一個值", - "query_editor.completion.action.least_squares": "最小二乘", - "query_editor.completion.action.left_padding": "左填充", - "query_editor.completion.action.left_space_trimming": "去左空格", - "query_editor.completion.action.left_substring": "從左截取", - "query_editor.completion.action.length": "長度", - "query_editor.completion.action.list_aggregation": "清單聚合", - "query_editor.completion.action.list_unnest": "展開清單", - "query_editor.completion.action.log_base_10": "以 10 為底對數", - "query_editor.completion.action.log_base_2": "以 2 為底對數", - "query_editor.completion.action.logarithm": "對數", - "query_editor.completion.action.lowercase": "轉小寫", - "query_editor.completion.action.maximum": "最大值", - "query_editor.completion.action.md5_hash": "MD5 雜湊", - "query_editor.completion.action.minimum": "最小值", - "query_editor.completion.action.modulo": "取模", - "query_editor.completion.action.month_addition": "增加月份", - "query_editor.completion.action.month_difference": "月份差", - "query_editor.completion.action.month_end_date": "月末日期", - "query_editor.completion.action.next_row": "後一列", - "query_editor.completion.action.null_branch": "NULL 分支", - "query_editor.completion.action.null_if_equal": "相等回傳 NULL", - "query_editor.completion.action.null_replacement": "NULL 取代", - "query_editor.completion.action.number_conversion": "轉數字", - "query_editor.completion.action.number_formatting": "數字格式化", - "query_editor.completion.action.position_lookup": "查找位置", - "query_editor.completion.action.power_operation": "冪運算", - "query_editor.completion.action.previous_row": "前一列", - "query_editor.completion.action.quantile": "分位數", - "query_editor.completion.action.random_number": "隨機數", - "query_editor.completion.action.rank": "排名", - "query_editor.completion.action.rate_of_change": "變化率", - "query_editor.completion.action.regex_match": "正規表示式匹配", - "query_editor.completion.action.regex_replace": "正規表示式替換", - "query_editor.completion.action.replacement": "替換", - "query_editor.completion.action.right_padding": "右填充", - "query_editor.completion.action.right_space_trimming": "去右空格", - "query_editor.completion.action.right_substring": "從右截取", - "query_editor.completion.action.round_down": "向下取整", - "query_editor.completion.action.round_up": "向上取整", - "query_editor.completion.action.rounding": "四捨五入", - "query_editor.completion.action.row_number": "列號", - "query_editor.completion.action.set_lookup": "集合查找", - "query_editor.completion.action.sha1_hash": "SHA1 雜湊", - "query_editor.completion.action.sha2_hash": "SHA2 雜湊", - "query_editor.completion.action.space_trimming": "去空格", - "query_editor.completion.action.spread": "最大最小差", - "query_editor.completion.action.sql_literal": "SQL 字面量", - "query_editor.completion.action.square_root": "平方根", - "query_editor.completion.action.string_aggregation": "字串聚合", - "query_editor.completion.action.string_conversion": "轉字串", - "query_editor.completion.action.string_repetition": "重複字串", - "query_editor.completion.action.string_reversal": "字串反轉", - "query_editor.completion.action.string_to_date": "字串轉日期", - "query_editor.completion.action.string_to_timestamp": "字串轉時間戳", - "query_editor.completion.action.struct_construction": "建立結構體", - "query_editor.completion.action.substring_extraction": "截取子串", - "query_editor.completion.action.sum": "求和", - "query_editor.completion.action.time_difference": "時間差", - "query_editor.completion.action.time_value": "時間", - "query_editor.completion.action.time_weighted_average": "時間加權平均", - "query_editor.completion.action.timestamp_difference": "時間戳差", - "query_editor.completion.action.truncate_date_or_number": "截斷日期或數字", - "query_editor.completion.action.try_conversion": "嘗試轉換", - "query_editor.completion.action.type_conversion": "型別轉換", - "query_editor.completion.action.unix_time_to_datetime": "Unix 時間戳轉時間", - "query_editor.completion.action.unix_timestamp": "Unix 時間戳", - "query_editor.completion.action.uppercase": "轉大寫", - "query_editor.completion.action.uuid_generation": "產生 UUID", - "query_editor.completion.action.value_formatting": "格式化", - "query_editor.completion.action.version": "版本", - "data_grid.action.apply": "套用", - "data_grid.ai_prompt.analyze_page": "請分析以下查詢結果資料(前 {{count}} 列樣本):\n```json\n{{json}}\n```\n\n請分析資料特徵、發現規律,或提供業務洞察。", - "data_grid.batch_fill.set_null": "設為 NULL", - "data_grid.batch_fill.title": "批次填入({{count}} 個儲存格)", - "data_grid.batch_fill.value_placeholder": "輸入要填入的值", - "data_grid.cell_editor.now": "此刻", - "data_grid.cell_editor.title": "編輯儲存格", - "data_grid.cell_editor.title_with_column": "編輯儲存格:{{column}}", - "data_grid.column.comment_tooltip": "註解:{{comment}}", - "data_grid.column.drag_tooltip": "拖曳調整欄位順序", - "data_grid.column.foreign_key_jump_title": "跳轉到外鍵表:{{tableName}}", - "data_grid.column.foreign_key_tooltip": "外鍵:{{target}}", - "data_grid.column.resize_tooltip": "拖曳調整欄寬,按兩下自動適配", - "data_grid.column.type_tooltip": "型別:{{type}}", - "data_grid.column_quick_find.placeholder": "跳到欄位列...", - "data_grid.column_quick_find.tooltip": "輸入欄位名稱,按 Enter 或點定位按鈕即可跳到對應欄", - "data_grid.ai_insight.prompt": "請幫我分析以下查詢結果資料(取前 {{count}} 筆範例):\n```json\n{{json}}\n```\n\n請分析資料特徵、找出規律,或提供一些業務洞察。", - "data_grid.datetime_picker.now": "此刻", - "data_grid.column_settings.column_visibility": "欄位顯示", - "data_grid.column_settings.display_settings": "顯示設定", - "data_grid.column_settings.field_info": "欄位資訊", - "data_grid.column_settings.hide_all": "全部隱藏", - "data_grid.column_settings.remember_column_order": "記住自訂欄位順序", - "data_grid.column_settings.remember_hidden_columns": "記住隱藏欄位設定", - "data_grid.column_settings.reset_hidden": "重設隱藏", - "data_grid.column_settings.reset_hidden_success": "已恢復全部欄位顯示", - "data_grid.column_settings.reset_order": "重設順序", - "data_grid.column_settings.reset_order_success": "已恢復預設欄位排序", - "data_grid.column_settings.search_columns_placeholder": "搜尋欄位名稱...", - "data_grid.column_settings.show_all": "全部顯示", - "data_grid.column_settings.show_comments": "在表頭顯示欄位註解", - "data_grid.column_settings.show_types": "在表頭顯示欄位型別", - "data_grid.context_menu.auto_fit_column": "依內容自動調整欄寬", - "data_grid.context_menu.clear_column_sort": "取消此欄位排序", - "data_grid.context_menu.column_display_section": "欄位顯示", - "data_grid.context_menu.column_no_comment": "暫無備註", - "data_grid.context_menu.column_unknown_type": "未知類型", - "data_grid.context_menu.column_unnamed_field": "未命名欄位", - "data_grid.context_menu.copy_as_csv": "複製為 CSV", - "data_grid.context_menu.copy_as_delete": "複製為 DELETE", - "data_grid.context_menu.copy_as_insert": "複製為 INSERT", - "data_grid.context_menu.copy_as_json": "複製為 JSON", - "data_grid.context_menu.copy_as_markdown": "複製為 Markdown", - "data_grid.context_menu.copy_as_update": "複製為 UPDATE", - "data_grid.context_menu.copy_column_data": "複製欄資料", - "data_grid.context_menu.copy_field_name": "複製欄位名稱", - "data_grid.context_menu.copy_row_data": "複製列資料", - "data_grid.context_menu.current_marker": "目前", - "data_grid.context_menu.current_row": "目前列", - "data_grid.context_menu.current_cell": "目前儲存格", - "data_grid.context_menu.edit_section": "編輯", - "data_grid.context_menu.edit_row": "編輯此列", - "data_grid.context_menu.copy_row_as_new": "複製此列為新增列", - "data_grid.context_menu.undo_cell_change": "撤銷此儲存格修改", - "data_grid.context_menu.export_as_csv": "匯出為 CSV", - "data_grid.context_menu.export_as_excel": "匯出為 Excel", - "data_grid.context_menu.export_as_html": "匯出為 HTML", - "data_grid.context_menu.export_as_json": "匯出為 JSON", - "data_grid.context_menu.export_selected": "匯出選取資料", - "data_grid.context_menu.fill_to_selected_rows": "填入到選取列({{count}})", - "data_grid.context_menu.hide_column": "隱藏此欄位", - "data_grid.context_menu.hide_column_comment": "隱藏欄位備註", - "data_grid.context_menu.hide_column_type": "隱藏欄位型別", - "data_grid.context_menu.paste_copied_columns": "貼上已複製欄位(同名欄位)", - "data_grid.context_menu.paste_row_as_new": "貼上為新增列", - "data_grid.context_menu.paste_row_as_new_count": "貼上為新增列({{count}})", - "data_grid.context_menu.show_column_comment": "顯示欄位備註", - "data_grid.context_menu.show_column_type": "顯示欄位型別", - "data_grid.context_menu.sort_ascending": "遞增排序", - "data_grid.context_menu.sort_descending": "遞減排序", - "data_grid.context_menu.sort_section": "排序", - "data_grid.copy_sql.error.missing_safe_where": "目前結果集缺少可安全定位列資料的主鍵/唯一鍵,且未涵蓋資料表的全部欄位,無法產生 WHERE 條件。", - "data_grid.copy_sql.error.missing_table_name": "目前結果集未關聯明確資料表名稱,無法產生 {{mode}} SQL。", - "data_grid.copy_sql.error.no_copyable_fields": "目前結果集沒有可複製的欄位,無法產生 SQL。", - "data_grid.data_panel.click_cell_description": "點選表格中的儲存格可預覽完整資料", - "data_grid.data_panel.click_cell_title": "點選儲存格檢視資料", - "data_grid.data_panel.title": "資料預覽", - "data_grid.ddl.copy": "複製 DDL", - "data_grid.ddl.layout_bottom": "底部", - "data_grid.ddl.layout_side": "側欄", - "data_grid.ddl.loading": "正在載入 DDL...", - "data_grid.ddl.reload": "重新載入", - "data_grid.ddl.sidebar_aria": "資料表 DDL 側欄", - "data_grid.ddl.view": "檢視 DDL", - "data_grid.error_boundary.description": "資料表格渲染時發生錯誤,資料格式可能無效。", - "data_grid.error_boundary.retry": "重試", - "data_grid.error_boundary.title": "渲染錯誤", - "data_grid.export.all_data": "匯出全部資料", - "data_grid.export.all_rows": "匯出全部列({{count}} 列)", - "data_grid.export.all_rows_requery": "匯出全部(重新查詢)", - "data_grid.export.current_page": "匯出目前頁({{count}} 列)", - "data_grid.export.current_page_rows": "匯出目前頁({{count}} 列)", - "data_grid.export.group_filtered_results": "篩選結果", - "data_grid.export.group_full_table": "全表", - "data_grid.export.no_selection_prompt": "未選取列,請選擇匯出範圍:", - "data_grid.export.options_title": "匯出選項", - "data_grid.export.query_result_title": "匯出查詢結果", - "data_grid.export.scope_prompt": "請選擇匯出範圍:", - "data_grid.export.selected_rows": "匯出已選列({{count}} 列)", - "data_grid.table_fallback.query_result": "查詢結果", - "data_grid.metadata_view.fields_badge": "欄位", - "data_grid.metadata_view.er_table_badge": "表", - "data_grid.metadata_view.er_field_badge": "欄位", - "data_grid.metadata_view.er_current_badge": "目前表", - "data_grid.metadata_view.er_reference_badge": "引用", - "data_grid.metadata_view.er_referenced_by_badge": "被引用", - "data_grid.metadata_view.er_related_table_count": "{{count}} 張關聯表", - "data_grid.metadata_view.er_relation_count": "{{count}} 條關係", - "data_grid.metadata_view.er_hidden_columns": "還有 {{count}} 個欄位", - "data_grid.metadata_view.er_expand_hidden_columns": "展開剩餘 {{count}} 個欄位", - "data_grid.metadata_view.er_expand_fields": "展開全部欄位", - "data_grid.metadata_view.er_collapse_fields": "收起欄位摘要", - "data_grid.metadata_view.er_relation_depth": "{{count}} 層關係", - "data_grid.metadata_view.er_expand_relations": "展開下一層關係", - "data_grid.metadata_view.er_reset_relations": "重置為一層", - "data_grid.metadata_view.er_empty": "目前表尚未發現外鍵關係", - "data_grid.metadata_view.er_partial_warning": "部分關係未能完整載入,圖中結果可能不完整", - "data_grid.metadata_view.er_open_table": "打開表", - "data_grid.metadata_view.field_count": "{{count}} 個欄位", - "data_grid.metadata_view.column_name": "名稱", - "data_grid.metadata_view.column_type": "型別", - "data_grid.metadata_view.default_value": "預設值", - "data_grid.metadata_view.comment": "註解", - "data_grid.filter.add_condition": "新增條件", - "data_grid.filter.add_sort": "新增排序", - "data_grid.filter.apply": "套用", - "data_grid.filter.apply_where": "套用 WHERE", - "data_grid.filter.clear": "清除", - "data_grid.filter.custom_where_placeholder": "輸入自訂 WHERE 表達式(不含 WHERE),例如:status IN ('A','B')", - "data_grid.filter.disable_all": "全部停用", - "data_grid.filter.enable_all": "全部啟用", - "data_grid.filter.enabled": "啟用", - "data_grid.filter.end_value_placeholder": "結束值", - "data_grid.filter.first_condition": "首先", - "data_grid.filter.invalid_quick_where": "WHERE 條件不能包含分號或 SQL 註解", - "data_grid.filter.list_values_placeholder": "多個值以逗號或換行分隔", - "data_grid.filter.logic.and": "且 (AND)", - "data_grid.filter.logic.or": "或 (OR)", - "data_grid.filter.mongodb_query_placeholder": "輸入 MongoDB JSON 查詢物件,例如 {\"status\":\"A\"}", - "data_grid.filter.no_value_placeholder": "不需要輸入值", - "data_grid.filter.op.between": "介於", - "data_grid.filter.op.contains": "包含", - "data_grid.filter.op.custom": "[自訂]", - "data_grid.filter.op.ends_with": "結尾為", - "data_grid.filter.op.in_list": "在清單中", - "data_grid.filter.op.is_empty": "為空字串", - "data_grid.filter.op.is_not_empty": "不為空字串", - "data_grid.filter.op.is_not_null": "不是 NULL", - "data_grid.filter.op.is_null": "為 NULL", - "data_grid.filter.op.not_between": "不介於", - "data_grid.filter.op.not_contains": "不包含", - "data_grid.filter.op.not_ends_with": "結尾不是", - "data_grid.filter.op.not_in_list": "不在清單中", - "data_grid.filter.op.not_starts_with": "開頭不是", - "data_grid.filter.op.starts_with": "開頭為", - "data_grid.filter.quick_where_placeholder": "輸入 WHERE 後面的條件,例如 status = 1 AND name LIKE 'A%'", - "data_grid.filter.search_field_placeholder": "搜尋欄位名稱", - "data_grid.filter.select_sort_field_placeholder": "選擇排序欄位", - "data_grid.filter.sort_asc": "升冪", - "data_grid.filter.sort_desc": "降冪", - "data_grid.filter.sort_label": "排序", - "data_grid.filter.start_value_placeholder": "起始值", - "data_grid.filter.suggestion.column": "欄位", - "data_grid.filter.suggestion.keyword": "關鍵字", - "data_grid.filter.suggestion.operator": "運算子", - "data_grid.filter.then_label": "然後", - "data_grid.json_editor.apply_changes": "套用修改", - "data_grid.json_editor.description": "依目前結果順序編輯。JSON 模式不支援新增或刪除記錄,需要此操作請使用表格模式。", - "data_grid.json_editor.format": "格式化 JSON", - "data_grid.json_editor.invalid_format": "JSON 格式無效:{{error}}", - "data_grid.json_editor.title": "編輯 JSON 結果集", - "data_grid.message.cell_edit_mode_entered": "已啟用儲存格編輯模式,可拖曳選取多個儲存格。", - "data_grid.message.cell_edit_mode_exited": "已退出儲存格編輯模式。", - "data_grid.message.change_set_build_failed": "無法建立變更集", - "data_grid.message.change_set_build_failed_detail": "無法建立變更集:{{detail}}", - "data_grid.message.column_order_reset": "已還原預設欄位順序", - "data_grid.message.column_quick_find_not_found": "找不到欄位列:{{query}}", - "data_grid.message.column_quick_find_not_rendered": "欄位列「{{column}}」目前尚未渲染,無法定位", - "data_grid.message.column_visibility_reset": "已還原全部欄位", - "data_grid.message.auto_commit_failed": "自動提交失敗:{{detail}}", - "data_grid.message.auto_commit_success": "自動提交成功", - "data_grid.message.commit_failed": "提交失敗:{{detail}}", - "data_grid.message.undo_added_row_hint": "新增列請使用刪除選取或整表回滾來撤銷", - "data_grid.message.undo_cell_original_missing": "找不到該儲存格的原始資料,無法撤銷", - "data_grid.message.undo_cell_success": "已撤銷儲存格修改", - "data_grid.message.copied_columns": "已複製 {{count}} 欄,可貼上到目標列。", - "data_grid.message.copied_rows": "已複製 {{count}} 列,可作為新列貼上。", - "data_grid.message.copied_to_clipboard": "已複製到剪貼簿", - "data_grid.message.copy_columns_first": "請先複製欄位值", - "data_grid.message.copy_columns_same_row_only": "複製欄位值時只能選取同一列的儲存格", - "data_grid.message.copy_rows_first": "請先複製列", - "data_grid.message.copy_sql_not_supported": "此資料來源不支援複製 SQL,請改用 JSON/CSV/Markdown 複製。", - "data_grid.message.current_record_not_editable": "目前記錄不可編輯", - "data_grid.message.current_row_no_copyable_content": "目前列沒有可複製內容", - "data_grid.message.ddl_copied": "DDL 已複製到剪貼簿", - "data_grid.message.ddl_copy_failed": "複製 DDL 失敗", - "data_grid.message.ddl_load_failed": "載入 DDL 失敗", - "data_grid.message.ddl_missing_context": "目前資料表缺少連線或表名,無法檢視 DDL", - "data_grid.message.drag_select_cells_to_copy": "請先拖曳選取要複製的儲存格", - "data_grid.message.export_failed": "匯出失敗:{{detail}}", - "data_grid.message.export_success": "匯出完成", - "data_grid.message.export_with_uncommitted_changes": "存在未提交修改,將依可見表格資料匯出。如需完整長欄位資料,請先提交。", - "data_grid.message.exporting": "正在匯出...", - "data_grid.message.exporting_all": "正在匯出全部資料...", - "data_grid.message.exporting_rows": "正在匯出 {{count}} 列...", - "data_grid.message.filled_cells": "已填入 {{count}} 個儲存格", - "data_grid.message.filled_rows": "已填入 {{count}} 列", - "data_grid.message.current_field_not_editable": "目前欄位不可編輯", - "data_grid.message.filtered_export_not_supported": "此資料來源不支援匯出篩選結果", - "data_grid.message.filtered_export_uses_committed_data": "存在未提交修改。篩選結果匯出將使用已提交的資料庫資料。", - "data_grid.message.import_done": "匯入完成", - "data_grid.message.json_applied": "JSON 修改已套用到目前結果集,可繼續提交交易。", - "data_grid.message.json_invalid": "JSON 無效:{{detail}}", - "data_grid.message.json_parse_failed": "JSON 解析失敗:{{detail}}", - "data_grid.message.json_record_count_mismatch": "記錄數量不一致:目前 {{current}} 列,JSON 有 {{json}} 列。此模式下不要新增或刪除記錄。", - "data_grid.message.json_record_missing_row_key": "第 {{index}} 筆記錄缺少列識別,無法套用", - "data_grid.message.json_record_not_object": "第 {{index}} 筆記錄不是物件,無法套用", - "data_grid.message.json_view_must_be_array": "JSON 檢視必須是陣列,且每一項對應一筆記錄", - "data_grid.message.keep_one_visible_column": "至少保留一個可見欄位", - "data_grid.message.locate_record_to_edit": "請先定位要編輯的記錄", - "data_grid.message.locator_column_value_empty": "定位欄位 {{column}} 的值為空,無法安全提交修改。", - "data_grid.message.no_changes_to_commit": "沒有需要提交的修改", - "data_grid.message.no_copyable_cells": "未識別到可複製的儲存格", - "data_grid.message.no_copyable_columns": "未識別到可複製的欄位", - "data_grid.message.no_copyable_rows": "未識別到可複製的列", - "data_grid.message.no_data_changes": "資料沒有變更", - "data_grid.message.no_ddl_to_copy": "沒有可複製的 DDL", - "data_grid.message.no_field_name": "未識別到欄位名稱", - "data_grid.message.no_safe_locator": "目前結果沒有可用的安全列定位方式,無法提交修改。", - "data_grid.message.no_filter_applied": "目前未套用篩選條件", - "data_grid.message.no_rows_selected": "目前未選取任何列", - "data_grid.message.no_other_rows_to_fill": "沒有其他選取列可填入", - "data_grid.message.no_pasteable_editable_fields": "沒有可貼上的可編輯欄位", - "data_grid.message.no_pasteable_rows": "沒有可貼上的列", - "data_grid.message.pasted_columns_to_rows": "已貼上到 {{rows}} 列,共 {{cells}} 個儲存格", - "data_grid.message.pasted_rows_as_new": "已將 {{count}} 列作為新列貼上,提交前請先檢查。", - "data_grid.message.preview_sql_failed": "產生預覽 SQL 失敗", - "data_grid.message.preview_sql_failed_detail": "產生預覽 SQL 失敗:{{detail}}", - "data_grid.preview_sql.copied": "已複製", - "data_grid.preview_sql.no_changes": "無變更", - "data_grid.preview_sql.summary": "共 {{deletes}} 條 DELETE,{{updates}} 條 UPDATE,{{inserts}} 條 INSERT", - "data_grid.preview_sql.title": "變更預覽", - "data_grid.message.result_set_no_copyable_content": "目前結果集沒有可複製內容", - "data_grid.message.saved": "已儲存", - "data_grid.message.select_cells_to_fill": "請先選取要填入的儲存格", - "data_grid.message.select_file_failed": "選擇檔案失敗:{{detail}}", - "data_grid.message.select_rows_to_copy": "請先選取要複製的列", - "data_grid.message.select_rows_to_fill": "請先選取要填入的列", - "data_grid.message.select_same_row_cells_to_copy": "請先選取同一列中的儲存格進行複製", - "data_grid.message.select_target_rows": "請先選取目標列", - "data_grid.message.selected_cells_no_update": "選取的儲存格不需要更新", - "data_grid.message.selection_no_copyable_content": "目前選區沒有可複製內容", - "data_grid.message.target_row_not_found": "找不到目標列,請重新整理後再試。", - "data_grid.message.target_rows_cannot_only_source": "目標列不能只有來源列,請選取其他列。", - "data_grid.message.target_rows_no_update": "目標列不需要更新", - "data_grid.message.transaction_committed": "交易已提交", - "data_viewer.message.result_not_ready": "目前結果集尚未就緒,請先執行一次載入", - "data_viewer.message.query_failed": "查詢失敗", - "data_viewer.message.query_timeout": "查詢超過連線逾時時間,已中斷。請調高連線逾時時間,或縮小查詢範圍後再試。", - "data_viewer.message.duckdb_query_timeout": "DuckDB 查詢超過連線逾時時間,已中斷。請調高連線逾時時間,或縮小排序/篩選範圍後再試。", - "data_viewer.message.connection_not_found": "找不到連線", - "data_viewer.message.fetch_data_failed_detail": "取得資料失敗:{{detail}}", - "data_viewer.message.total_count_failed": "統計總數失敗", - "data_viewer.message.total_count_failed_detail": "統計總數失敗:{{detail}}", - "data_viewer.message.total_count_parse_failed": "統計結果解析失敗", - "data_viewer.message.mongo_filter_invalid_detail": "Mongo 篩選條件無效:{{detail}}", - "data_viewer.message.mongo_filter_parse_failed": "解析失敗", - "data_viewer.message.sort_buffer_retry_succeeded": "已自動提升排序緩衝並重試成功。", - "data_viewer.read_only.reason.mongo_id_missing": "MongoDB 結果集中缺少 _id,無法安全提交修改。", - "data_viewer.read_only.reason.metadata_unavailable": "無法載入主鍵/唯一索引中繼資料,無法安全提交修改。", - "data_viewer.read_only.reason.index_metadata_unavailable": "無法載入唯一索引中繼資料,無法安全提交修改。", - "data_viewer.read_only.reason.no_safe_locator": "未偵測到主鍵或可用唯一索引,無法安全提交修改。", - "data_viewer.read_only.reason.oracle_rowid_missing": "未偵測到主鍵或可用唯一索引,且結果集中缺少 Oracle ROWID,無法安全提交修改。", - "data_viewer.read_only.reason.primary_key_column_missing": "結果集中缺少主鍵欄位 {{columns}},無法安全提交修改。", - "data_viewer.read_only.warning.table": "表 {{target}} 保持唯讀:{{reason}}", - "data_viewer.read_only.warning.collection": "集合 {{target}} 保持唯讀:{{reason}}", - "data_viewer.sql_log.phase.main_query": "主查詢", - "data_viewer.sql_log.phase.complex_type_fallback_retry": "複雜型別降級重試", - "data_viewer.sql_log.phase.sort_buffer_retry": "重試({{size}} sort_buffer)", - "definition_viewer.object.view": "檢視", - "definition_viewer.object.materialized_view": "物化檢視", - "definition_viewer.object.routine": "函式/預存程序", - "definition_viewer.object.event": "事件", - "definition_viewer.loading.view_definition": "載入檢視定義...", - "definition_viewer.loading.routine_definition": "載入函式/預存程序定義...", - "definition_viewer.loading.event_definition": "載入事件定義...", - "definition_viewer.error.load_failed": "載入失敗", - "definition_viewer.error.connection_not_found": "找不到資料庫連線", - "definition_viewer.error.view_name_empty": "檢視名稱為空", - "definition_viewer.error.event_name_empty": "事件名稱為空", - "definition_viewer.error.routine_name_empty": "函式/預存程序名稱為空", - "definition_viewer.error.query_failed": "查詢定義失敗", - "definition_viewer.error.query_failed_detail": "查詢定義失敗:{{detail}}", - "definition_viewer.field.database": "資料庫", - "definition_viewer.field.type": "類型", - "definition_viewer.editor.unsupported_view_definition": "暫不支援此資料庫類型的檢視定義查看", - "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite 不支援函式/預存程序定義管理", - "definition_viewer.editor.unsupported_routine_definition": "暫不支援此資料庫類型的函式/預存程序定義查看", - "definition_viewer.editor.unsupported_event_definition": "暫不支援此資料庫類型的事件定義查看", - "definition_viewer.editor.unsupported_object_definition": "暫不支援此物件定義查看", - "definition_viewer.editor.view_definition_not_found": "找不到檢視定義", - "definition_viewer.editor.routine_definition_not_found": "找不到函式/預存程序定義", - "definition_viewer.editor.event_definition_not_found": "找不到事件定義", - "definition_viewer.editor.object_definition_not_found": "找不到{{object}}定義", - "definition_viewer.editor.metadata_fallback.header": "目前資料來源未返回可執行的定義文字,已返回中繼資料", - "definition_viewer.editor.metadata_fallback.name_label": "名稱", - "definition_viewer.editor.metadata_fallback.type_label": "類型", - "definition_viewer.editor.event_fragment_fallback.header": "目前資料來源未返回完整 CREATE EVENT 語句,已返回事件定義片段", - "definition_viewer.editor.sphinx.empty_result": "目前 Sphinx 實例{{version}}未返回{{object}}定義。", - "definition_viewer.editor.sphinx.compat_queries_hint": "已執行多組相容查詢,可能是版本能力限制或物件類型不支援。", - "definition_viewer.editor.sphinx.unsupported_query": "目前 Sphinx 實例{{version}}不支援查詢{{object}}定義。", - "definition_viewer.editor.sphinx.failed_message_label": "返回失敗訊息", - "definition_viewer.editor.sphinx.failed_message_unknown": "返回失敗資訊:未知錯誤", - "definition_viewer.editor.sphinx.version_suffix": "(版本: {{version}})", - "trigger_viewer.loading.definition": "載入觸發器定義...", - "trigger_viewer.error.load_failed": "載入失敗", - "trigger_viewer.error.connection_not_found": "找不到資料庫連線", - "trigger_viewer.error.trigger_name_empty": "觸發器名稱為空", - "trigger_viewer.error.query_failed": "查詢觸發器定義失敗", - "trigger_viewer.error.query_failed_detail": "查詢觸發器定義失敗:{{detail}}", - "trigger_viewer.field.trigger": "觸發器", - "trigger_viewer.field.database": "資料庫", - "trigger_viewer.editor.unsupported.duckdb": "DuckDB 不支援觸發器", - "trigger_viewer.editor.unsupported.tdengine": "TDengine 不支援觸發器", - "trigger_viewer.editor.unsupported.mongodb": "MongoDB 不支援觸發器", - "trigger_viewer.editor.unsupported.generic": "暫不支援此資料庫類型的觸發器定義查看", - "trigger_viewer.editor.definition_not_found": "找不到觸發器定義", - "trigger_viewer.editor.sphinx.version_suffix": "(版本: {{version}})", - "trigger_viewer.editor.sphinx.empty_result": "目前 Sphinx 實例{{version}}未返回觸發器定義。", - "trigger_viewer.editor.sphinx.compat_queries_hint": "已執行多組相容查詢,可能是版本能力限制或物件類型不支援。", - "trigger_viewer.editor.sphinx.unsupported_query": "目前 Sphinx 實例{{version}}不支援查詢觸發器定義。", - "trigger_viewer.editor.sphinx.failed_message_label": "返回失敗訊息", - "trigger_viewer.editor.sphinx.failed_message_unknown": "返回失敗訊息:未知錯誤", - "data_grid.modal.export_options.all_data": "匯出全部資料", - "data_grid.modal.export_options.current_page": "匯出目前頁({{count}} 列)", - "data_grid.modal.export_options.filtered_results": "篩選結果", - "data_grid.modal.export_options.no_rows_selected": "未選取列,請選擇匯出範圍:", - "data_grid.modal.export_options.title": "匯出選項", - "data_grid.modal.export_options.whole_table": "整張表", - "data_grid.page_find.next": "下一個", - "data_grid.page_find.placeholder": "目前頁查找...", - "data_grid.page_find.previous": "上一個", - "data_grid.page_find.summary": "{{occurrences}} 處符合 / {{cells}} 個儲存格", - "data_grid.page_find.tooltip": "僅在目前頁已載入列中查找,不會變更 WHERE 條件。", - "data_grid.preview_panel.no_cell_description": "點選表格中的儲存格以預覽完整資料", - "data_grid.preview_panel.no_cell_title": "點選儲存格查看資料", - "data_grid.record_view.edit_current": "編輯目前記錄", - "data_grid.record_view.edit_json": "編輯 JSON", - "data_grid.record_view.empty": "目前結果集沒有資料", - "data_grid.record_view.json_record_count": "目前結果集 {{count}} 筆記錄", - "data_grid.record_view.next": "下一筆", - "data_grid.record_view.previous": "上一筆", - "data_grid.record_view.record_position": "記錄 {{current}} / {{total}}", - "data_grid.pagination.jump_action": "跳", - "data_grid.pagination.jump_aria": "跳轉頁碼", - "data_grid.pagination.jump_label": "跳頁", - "data_grid.pagination.page.current": "第 {{current}} 頁", - "data_grid.pagination.page.known": "第 {{current}} / {{totalPages}} 頁", - "data_grid.pagination.page_size_aria": "每頁列數", - "data_grid.pagination.page_size_option": "{{count}} 列 / 頁", - "data_grid.pagination.result_set": "結果集", - "data_grid.pagination.summary.approximate": "目前 {{current}} 列 / 約 {{total}} 列", - "data_grid.pagination.summary.cancelled": "目前 {{current}} 列 / 計數已停止", - "data_grid.pagination.summary.counting": "目前 {{current}} 列 / 正在統計總數...", - "data_grid.pagination.summary.counting_exact": "目前 {{current}} 列 / 正在統計精確總數...", - "data_grid.pagination.summary.empty": "目前 0 列 / 共 0 列", - "data_grid.pagination.summary.known": "目前 {{current}} 列 / 共 {{total}} 列", - "data_grid.pagination.summary.not_counted": "目前 {{current}} 列 / 未統計總數", - "data_grid.secondary.column_display": "欄位顯示", - "data_grid.secondary.data_preview": "資料預覽", - "data_grid.secondary.er_diagram": "ER 圖", - "data_grid.secondary.jump_column": "跳欄", - "data_grid.secondary.live": "即時", - "data_grid.secondary.object_design": "物件設計", - "data_grid.embedded_designer.title": "設計表({{tableName}})", - "data_grid.secondary.pending_changes": "未提交 {{count}}", - "data_grid.secondary.row_count": "{{count}} 列", - "data_grid.secondary.view_ddl": "查看 DDL", - "data_grid.row_editor.popup_edit": "彈窗編輯", - "data_grid.row_editor.title": "編輯列", - "data_grid.toolbar.add_row": "新增列", - "data_grid.toolbar.ai_insight": "AI 資料洞察", - "data_grid.toolbar.ai_insight_short": "AI 洞察", - "data_grid.toolbar.ai_insight_tooltip": "讓 AI 分析目前查詢頁資料", - "data_grid.toolbar.batch_fill": "批次填入({{count}})", - "data_grid.toolbar.cancel_count": "取消計數", - "data_grid.toolbar.cancel_count_tooltip": "取消本次精確總數統計,不影響目前瀏覽。", - "data_grid.toolbar.cell_editor": "儲存格編輯", - "data_grid.toolbar.commit": "提交交易({{count}})", - "data_grid.toolbar.commit_label": "提交交易", - "data_grid.toolbar.commit_delay.seconds": "{{seconds}} 秒", - "data_grid.toolbar.commit_mode.auto": "自動提交", - "data_grid.toolbar.commit_mode.auto_countdown": "{{seconds}}s 後提交", - "data_grid.toolbar.commit_mode.manual": "手動提交", - "data_grid.toolbar.commit_mode.tooltip": "控制表格資料編輯後的提交方式。手動提交更安全;自動提交會在最後一次修改後依所選時間提交。", - "data_grid.toolbar.copied_columns_count": "已複製 {{count}} 欄", - "data_grid.toolbar.copy": "複製", - "data_grid.toolbar.copy_row": "複製列", - "data_grid.toolbar.copy_selection": "複製選區({{count}})", - "data_grid.toolbar.copy_selection_columns": "複製選區欄位值({{count}})", - "data_grid.toolbar.count_total": "統計總數", - "data_grid.toolbar.count_total_tooltip": "依目前篩選條件統計精確總數", - "data_grid.toolbar.delete_selected": "刪除選取", - "data_grid.toolbar.export": "匯出", - "data_grid.toolbar.filter": "篩選", - "data_grid.toolbar.import": "匯入", - "data_grid.toolbar.paste_row": "貼上列", - "data_grid.toolbar.paste_row_count": "貼上列({{count}})", - "data_grid.toolbar.paste_to_selected_rows": "貼上到選取列({{count}})", - "data_grid.toolbar.preview_sql": "預覽 SQL", - "data_grid.toolbar.preview_sql_generate": "產生預覽 SQL", - "data_grid.toolbar.refresh": "重新整理", - "data_grid.toolbar.rollback": "回滾", - "data_grid.toolbar.selected_count": "已選 {{count}}", - "data_grid.toolbar.undo_delete": "撤銷刪除", - "data_grid.view.edit_current_record": "編輯目前記錄", - "data_grid.view.edit_json": "編輯 JSON", - "data_grid.view.empty_result": "目前結果集沒有資料", - "data_grid.view.next_record": "下一筆記錄", - "data_grid.view.previous_record": "上一筆記錄", - "data_grid.view.record_count": "目前結果集:{{count}} 筆記錄", - "data_grid.view.record_position": "記錄 {{current}} / {{total}}", - "data_grid.view.result_view": "結果檢視", - "data_grid.view.table": "表格", - "data_grid.view.text": "文字", - "table_designer.action.add": "新增", - "table_designer.action.add_after_selected": "在選取欄位後新增", - "table_designer.action.add_column": "新增欄位", - "table_designer.action.apply": "套用", - "table_designer.action.cancel": "取消", - "table_designer.action.copy_selected_to_new_table": "複製選取欄位到新表", - "table_designer.action.create": "建立", - "table_designer.action.create_table": "建立新表", - "table_designer.action.delete": "刪除", - "table_designer.action.edit": "修改", - "table_designer.action.execute": "執行", - "table_designer.action.refresh": "重新整理", - "table_designer.action.refresh_anyway": "仍要重新整理", - "table_designer.action.save": "儲存", - "table_designer.action.table_comment": "表註解", - "table_designer.action.view_statement": "檢視語句", - "table_designer.column.actions": "操作", - "table_designer.column.auto_increment": "自增", - "table_designer.column.comment": "註解", - "table_designer.column.default": "預設", - "table_designer.column.name": "名稱", - "table_designer.column.not_null": "不是 NULL", - "table_designer.column.primary_key": "主鍵", - "table_designer.column.type": "類型", - "table_designer.empty.triggers": "此表尚無觸發器", - "table_designer.fallback.empty": "(空)", - "table_designer.fallback.unknown_error": "未知錯誤", - "table_designer.fallback.unnamed_foreign_key": "(未命名外鍵)", - "table_designer.fallback.unnamed_index": "(未命名索引)", - "table_designer.foreign_key.column.constraint_name": "約束名稱", - "table_designer.foreign_key.column.fields": "欄位", - "table_designer.foreign_key.column.ref_fields": "參照欄位", - "table_designer.foreign_key.column.ref_table": "參照表", - "table_designer.index.column.fields": "欄位", - "table_designer.index.column.name": "索引名稱", - "table_designer.index.column.type": "索引類型", - "table_designer.index.column.uniqueness": "唯一性", - "table_designer.index.kind.fulltext": "全文索引", - "table_designer.index.kind.normal": "一般索引", - "table_designer.index.kind.normal_nonclustered": "一般索引(非叢集)", - "table_designer.index.kind.primary_clustered": "主鍵索引(叢集)", - "table_designer.index.kind.spatial": "空間索引", - "table_designer.index.kind.unique": "唯一索引", - "table_designer.index.uniqueness.normal": "一般", - "table_designer.index.uniqueness.unique": "唯一", - "table_designer.label.create_statement": "{{name}} 建立語句", - "table_designer.label.create_statement_plain": "建立語句", - "table_designer.message.add_at_least_one_column": "請至少新增一個欄位", - "table_designer.message.columns_copied_to_new_table": "已將 {{count}} 個欄位複製到新表 {{table}}", - "table_designer.message.connection_not_found": "找不到連線", - "table_designer.message.delete_failed": "刪除失敗:{{detail}}", - "table_designer.message.drop_old_trigger_failed": "刪除舊觸發器失敗:{{detail}}", - "table_designer.message.execution_failed": "執行失敗:{{detail}}", - "table_designer.message.execution_failed_plain": "執行失敗", - "table_designer.message.execution_failed_prefix": "執行失敗:", - "table_designer.message.foreign_key_column_count_mismatch": "本表欄位數量必須與參照欄位數量一致", - "table_designer.message.foreign_key_created": "外鍵新增成功", - "table_designer.message.foreign_key_delete_unsupported": "目前資料庫暫不支援刪除此外鍵", - "table_designer.message.foreign_key_deleted": "外鍵刪除成功", - "table_designer.message.foreign_key_maintenance_unsupported": "目前資料庫暫不支援在此維護外鍵", - "table_designer.message.foreign_key_name_exists": "外鍵約束名稱已存在:{{name}}", - "table_designer.message.foreign_key_name_required": "請輸入外鍵約束名稱", - "table_designer.message.foreign_key_updated": "外鍵修改成功", - "table_designer.message.index_created": "索引新增成功", - "table_designer.message.index_create_sql_unavailable": "無法取得索引建立 SQL", - "table_designer.message.index_create_sql_placeholder": "索引建立 SQL 暫不可用", - "table_designer.message.index_delete_named_unsupported": "目前資料庫暫不支援刪除索引 \"{{name}}\"", - "table_designer.message.index_delete_unsupported": "目前資料庫暫不支援刪除此索引", - "table_designer.message.index_deleted": "索引刪除成功", - "table_designer.message.index_kind_unsupported": "目前資料庫不支援此索引類型", - "table_designer.message.index_maintenance_unsupported": "目前資料庫暫不支援在此維護索引", - "table_designer.message.index_name_exists": "索引名稱已存在:{{name}}", - "table_designer.message.index_name_required": "請輸入索引名稱", - "table_designer.message.index_restore_failed": "{{detail}};恢復原索引失敗:{{restoreDetail}}", - "table_designer.message.index_restore_unavailable": "{{detail}};且無法自動恢復原索引,請盡快檢查", - "table_designer.message.index_restored_after_failure": "{{detail}};已自動恢復原索引", - "table_designer.message.index_updated": "索引修改成功", - "table_designer.message.indexes_deleted": "{{count}} 個索引刪除成功", - "table_designer.message.load_columns_failed": "載入欄位失敗:{{detail}}", - "table_designer.message.no_changes_detected": "未偵測到變更", - "table_designer.message.no_copyable_columns": "未選取可複製欄位", - "table_designer.message.no_index_changes": "未偵測到索引變更", - "table_designer.message.only_normal_unique_index_supported": "目前資料庫僅支援一般索引與唯一索引維護", - "table_designer.message.ref_columns_required": "請至少填寫一個參照欄位", - "table_designer.message.ref_table_required": "請輸入參照表", - "table_designer.message.relational_index_unsupported": "目前資料來源不支援關聯式索引維護", - "table_designer.message.schema_saved_alter": "表結構修改成功!", - "table_designer.message.schema_saved_create": "表建立成功!", - "table_designer.message.select_at_least_one_column": "請至少選取一個欄位", - "table_designer.message.select_column_before_insert": "請先選取一個欄位,再執行插入。", - "table_designer.message.select_columns_to_copy": "請先勾選要複製的欄位", - "table_designer.message.select_index_to_delete": "請先選取要刪除的索引", - "table_designer.message.select_local_columns": "請至少選取一個本表欄位", - "table_designer.message.select_one_foreign_key": "請先選取一個外鍵", - "table_designer.message.select_one_index": "請先選取一個索引", - "table_designer.message.statement_execution_failed_prefix": "第 {{current}}/{{total}} 條語句執行失敗:", - "table_designer.message.switch_index_kind": "請將「索引類別」切換為 {{kind}} 索引", - "table_designer.message.table_comment_unsupported": "目前資料庫暫不支援在此修改表註解", - "table_designer.message.table_comment_updated": "表註解更新成功", - "table_designer.message.table_name_required": "請輸入表名", - "table_designer.message.target_table_required": "請輸入目標表名", - "table_designer.message.trigger_created": "觸發器建立成功", - "table_designer.message.trigger_deleted": "觸發器刪除成功", - "table_designer.message.trigger_updated": "觸發器修改成功", - "table_designer.modal.column_comment_title": "欄位註解", - "table_designer.modal.column_comment_title_named": "欄位註解 - {{name}}", - "table_designer.modal.confirm_sql_title": "確認 SQL 變更", - "table_designer.modal.copy_columns_title": "複製選取欄位到新表", - "table_designer.modal.delete_foreign_key_content": "確定要刪除外鍵約束 \"{{name}}\" 嗎?", - "table_designer.modal.delete_foreign_key_title": "確認刪除外鍵", - "table_designer.modal.delete_index_many": "確定要刪除以下 {{count}} 個索引嗎?\n{{names}}", - "table_designer.modal.delete_index_one": "確定要刪除索引 {{names}} 嗎?", - "table_designer.modal.delete_index_title": "確認刪除索引", - "table_designer.modal.delete_trigger_content": "確定要刪除觸發器 \"{{name}}\" 嗎?此操作無法復原。", - "table_designer.modal.delete_trigger_title": "確認刪除觸發器", - "table_designer.modal.foreign_key_create_title": "新增外鍵", - "table_designer.modal.foreign_key_edit_title": "修改外鍵", - "table_designer.modal.index_create_title": "新增索引", - "table_designer.modal.index_edit_title": "修改索引", - "table_designer.modal.table_comment_title": "修改表註解", - "table_designer.modal.trigger_create_title": "新增觸發器", - "table_designer.modal.trigger_detail_title": "觸發器詳情", - "table_designer.modal.trigger_detail_title_named": "觸發器:{{name}}", - "table_designer.modal.trigger_edit_title": "修改觸發器", - "table_designer.modal.unsaved_changes_content": "重新整理後會遺失目前尚未儲存的欄位調整,是否仍要重新整理並覆蓋目前草稿?", - "table_designer.modal.unsaved_changes_title": "存在未儲存的欄位變更", - "table_designer.notice.foreign_key_readonly": "目前資料庫暫不支援外鍵編輯,僅支援檢視", - "table_designer.notice.foreign_key_replace_hint": "修改外鍵會執行「先刪除舊外鍵,再建立新外鍵」。", - "table_designer.notice.index_readonly": "目前資料庫暫不支援索引編輯,僅支援檢視", - "table_designer.notice.index_restore_hint": "修改索引時若新索引建立失敗,系統會嘗試自動恢復原索引。", - "table_designer.notice.sql_irreversible": "請仔細檢查 SQL,執行後無法復原。", - "table_designer.notice.sql_statement_irreversible": "請仔細檢查 SQL 語句,執行後無法復原。", - "table_designer.notice.trigger_replace_hint": "修改觸發器時會先刪除原觸發器,再建立新觸發器。", - "table_designer.option.default": "預設", - "table_designer.option.recommended_suffix": "(建議)", - "table_designer.placeholder.column_comment": "請輸入欄位註解", - "table_designer.placeholder.foreign_key_name": "外鍵約束名稱(例如 fk_order_user)", - "table_designer.placeholder.index_columns": "請選擇索引欄位(依選取順序生效)", - "table_designer.placeholder.index_name": "索引名稱(例如 idx_user_name)", - "table_designer.placeholder.local_columns": "請選擇本表欄位(順序需與參照欄位一致)", - "table_designer.placeholder.primary_index_name": "主鍵索引固定名稱:PRIMARY", - "table_designer.placeholder.ref_columns": "請輸入參照欄位(支援多個)", - "table_designer.placeholder.ref_table": "參照表(支援 db.table)", - "table_designer.placeholder.table_comment": "請輸入表註解", - "table_designer.placeholder.table_name": "請輸入表名", - "table_designer.placeholder.target_table_name": "請輸入目標表名", - "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB 不支援透過 COMMENT ON COLUMN 持久化欄位註解,欄位 {{column}} 的註解僅保留在設計器預覽中。", - "table_designer.schema_sql.limited_column_hint": "-- {{dialect}} 的欄位約束、預設值與註解語法不同於 MySQL,已避免產生 MySQL 專屬子句,請依目標庫能力補充。", - "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite 不支援直接修改欄位屬性,請透過建立新表、遷移資料、替換舊表的方式處理欄位 {{column}}。", - "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server 刪除舊主鍵需要原約束名稱;請先在索引頁確認後刪除。", - "table_designer.schema_sql.tdengine.timestamp_hint": "-- TDengine 普通表通常需要 TIMESTAMP 時間欄位,執行前請確認表模型。", - "table_designer.starrocks.table_kind.olap": "OLAP 表", - "table_designer.starrocks.table_kind.external": "外部表", - "table_designer.starrocks.key_model.duplicate": "明細鍵", - "table_designer.starrocks.key_model.unique": "唯一鍵", - "table_designer.starrocks.key_model.aggregate": "聚合鍵", - "table_designer.starrocks.placeholder.key_columns": "鍵欄位,例如 id, date", - "table_designer.starrocks.placeholder.partition_clause": "分割區子句,例如 PARTITION BY RANGE(date_col)(...)", - "table_designer.starrocks.distribution.hash": "雜湊分佈", - "table_designer.starrocks.distribution.random": "隨機分佈", - "table_designer.starrocks.distribution.none": "不設定分佈", - "table_designer.starrocks.placeholder.distribution_columns": "分佈欄位,例如 user_id", - "table_designer.starrocks.bucket_mode.auto": "自動分桶數", - "table_designer.starrocks.bucket_mode.number": "固定分桶數", - "table_designer.starrocks.placeholder.bucket_count": "分桶數", - "table_designer.selection.columns_selected": "已選取欄位:{{count}}", - "table_designer.selection.foreign_key_selected": "已選取:{{name}}", - "table_designer.selection.indexes_selected": "已選取:{{count}} 個索引", - "table_designer.selection.trigger_prompt": "請點選觸發器", - "table_designer.selection.trigger_selected": "已選取:{{name}}", - "table_designer.sql_preview.change.add": "新增變更", - "table_designer.sql_preview.change.comment": "註解變更", - "table_designer.sql_preview.change.constraint": "約束變更", - "table_designer.sql_preview.change.create": "新建表結構", - "table_designer.sql_preview.change.drop": "刪除變更", - "table_designer.sql_preview.change.modify": "欄位屬性變更", - "table_designer.sql_preview.change.rename": "重新命名變更", - "table_designer.summary.indexes": "索引數:{{count}},索引欄位:{{fields}}", - "table_designer.summary.columns": "{{count}} 個欄位", - "table_designer.status.read_only": "唯讀", - "table_designer.title.untitled_table": "未命名表", - "table_designer.title.default_database": "預設庫", - "table_designer.title.schema_designer": "結構設計器", - "table_designer.tab.columns": "欄位", - "table_designer.tab.foreign_keys": "外鍵", - "table_designer.tab.indexes": "索引", - "table_designer.tab.triggers": "觸發器", - "table_designer.table_comment.current": "目前註解:{{comment}}", - "table_designer.tooltip.edit_comment_popup": "在彈窗中編輯註解", - "table_designer.trigger.column.event": "事件", - "table_designer.trigger.column.name": "名稱", - "table_designer.trigger.column.timing": "時機", - "table_designer.trigger.definition_unavailable": "無法取得完整的觸發器定義", - "table_designer.trigger.field.event": "事件", - "table_designer.trigger.field.timing": "時機", - "table_designer.trigger.template.body_comment": "觸發器邏輯", - "table_designer.trigger.template.enter_create": "請輸入 CREATE TRIGGER 語句", - "redis_command.action.clear_console": "清空控制台", - "redis_command.action.execute": "執行(Cmd+Enter)", - "redis_command.completion.detail": "Redis 命令", - "redis_command.message.command_required": "請輸入要執行的命令", - "redis_command.output.empty_hint": "在此控制台執行命令,結果會依返回內容顯示。", - "redis_command.output.selection_tip": "提示:選取任意行後按 Ctrl + Enter,僅執行所選內容。", - "redis_command.output.title": "執行輸出", - "redis_command.state.connection_not_found": "找不到連線", - "redis_command.title.console": "Redis 控制台", - "redis.backend.message.connect_success": "連線成功", - "redis.backend.message.set_success": "設定成功", - "redis.backend.message.select_db_success": "切換成功", - "redis.backend.message.rename_success": "重新命名成功", - "redis.backend.message.delete_success": "刪除成功", - "redis.backend.message.add_success": "新增成功", - "redis.backend.message.flush_success": "清空成功", - "redis.backend.error.command_required": "命令不能為空", - "redis.backend.error.argument_required": "{{name}} 不能為空", - "redis.backend.error.argument_invalid_type": "{{name}} 類型無效", - "redis.backend.error.address_required": "Redis 連線地址不能為空", - "redis.backend.error.node_address_required": "Redis 節點地址不能為空", - "redis.backend.error.invalid_node_address": "無效 Redis 節點地址:{{address}}", - "redis.backend.error.invalid_port": "無效 Redis 連接埠:{{address}}", - "redis_monitor.action.pause_refresh": "暫停重新整理", - "redis_monitor.action.refresh_now": "立即重新整理", - "redis_monitor.action.resume_refresh": "繼續重新整理", - "redis_monitor.chart.clients_keys": "連線資訊(用戶端與 Keys)", - "redis_monitor.chart.cpu_usage": "CPU 使用率", - "redis_monitor.chart.memory": "記憶體開銷", - "redis_monitor.chart.qps": "請求吞吐量(QPS)", - "redis_monitor.message.fetch_failed": "取得 Redis 資訊失敗:{{detail}}", - "redis_monitor.metric.blocked_clients": "阻塞:{{value}}", - "redis_monitor.metric.clients": "用戶端", - "redis_monitor.metric.days": "天數:{{value}}", - "redis_monitor.metric.memory_peak": "峰值:{{value}}", - "redis_monitor.metric.memory_used": "已用記憶體", - "redis_monitor.metric.ops": "吞吐量(OPS)", - "redis_monitor.metric.uptime": "執行時間", - "redis_monitor.series.clients": "用戶端", - "redis_monitor.series.rss_memory": "RSS 記憶體", - "redis_monitor.series.system": "系統", - "redis_monitor.series.total_keys": "Key 總數", - "redis_monitor.series.used_memory": "已用記憶體", - "redis_monitor.series.user": "使用者", - "redis_monitor.server_details.title": "伺服器詳細參數", - "redis_monitor.state.connection_not_found": "找不到連線", - "redis_monitor.title.instance": "Redis 執行個體監控", - "redis_viewer.action.add_field": "新增欄位", - "redis_viewer.action.add_list_head": "推入頭部", - "redis_viewer.action.add_list_tail": "推入尾部", - "redis_viewer.action.add_member": "新增成員", - "redis_viewer.action.add_stream_entry": "新增項目", - "redis_viewer.action.clear_group_selection": "清除選取", - "redis_viewer.action.clear_selection": "清除選取", - "redis_viewer.action.copy": "複製", - "redis_viewer.action.copy_key_name": "複製 Key 名稱", - "redis_viewer.action.copy_value": "複製值", - "redis_viewer.action.delete_key": "刪除 Key", - "redis_viewer.action.delete_selected": "刪除已選項目({{count}})", - "redis_viewer.action.edit": "編輯", - "redis_viewer.action.load_more": "載入更多", - "redis_viewer.action.new_key": "新增", - "redis_viewer.action.refresh": "重新整理", - "redis_viewer.action.rename_key": "重新命名 Key", - "redis_viewer.action.select_all_loaded": "全選已載入", - "redis_viewer.action.select_group": "選取", - "redis_viewer.action.set_ttl": "設定 TTL", - "redis_viewer.aria.collapse_group": "收合群組", - "redis_viewer.aria.expand_group": "展開群組", - "redis_viewer.confirm.delete_field": "要刪除此欄位嗎?", - "redis_viewer.confirm.delete_key": "要刪除 Key \"{{key}}\" 嗎?", - "redis_viewer.confirm.delete_member": "要刪除此成員嗎?", - "redis_viewer.confirm.delete_selected": "要刪除選取的 {{count}} 個 Key 嗎?", - "redis_viewer.confirm.delete_stream_entry": "要刪除此 Stream 項目嗎?", - "redis_viewer.field.field_name": "欄位名稱", - "redis_viewer.field.fields_json": "欄位 JSON:", - "redis_viewer.field.key": "Key", - "redis_viewer.field.member": "成員:", - "redis_viewer.field.new_key_name": "新 Key 名稱", - "redis_viewer.field.new_score": "新分數:", - "redis_viewer.field.score": "分數:", - "redis_viewer.field.stream_id": "ID(選填,預設 *):", - "redis_viewer.field.ttl_seconds": "TTL(秒)", - "redis_viewer.field.value": "值", - "redis_viewer.help.ttl_forever": "-1 表示永不過期", - "redis_viewer.hint.binary_readonly": "二進位資料無法編輯", - "redis_viewer.hint.switch_auto_to_edit": "切換到 Auto 模式後即可編輯", - "redis_viewer.label.encoding": "編碼:{{encoding}}", - "redis_viewer.label.keys_count": "{{count}} 個 Key", - "redis_viewer.label.node_count": "{{count}} 個節點", - "redis_viewer.label.length": "長度:{{count}}", - "redis_viewer.label.original_key": "原 Key:{{key}}", - "redis_viewer.message.add_failed": "新增失敗:{{detail}}", - "redis_viewer.message.add_success": "已新增", - "redis_viewer.message.add_success_with_id": "已新增 {{id}}", - "redis_viewer.message.copied": "已複製", - "redis_viewer.message.copy_failed": "複製失敗", - "redis_viewer.message.create_failed": "建立失敗:{{detail}}", - "redis_viewer.message.create_success": "已建立", - "redis_viewer.message.delete_failed": "刪除失敗:{{detail}}", - "redis_viewer.message.delete_success": "已刪除", - "redis_viewer.message.deleted_keys": "已刪除 {{count}} 個 Key", - "redis_viewer.message.fields_json_invalid": "欄位 JSON 無效", - "redis_viewer.message.fields_must_be_json_object": "欄位必須是 JSON 物件", - "redis_viewer.message.fields_required": "請至少提供一個欄位", - "redis_viewer.message.key_check_failed": "檢查目標 Key 失敗:{{detail}}", - "redis_viewer.message.key_missing_removed": "Key 已不存在或已過期,已從清單移除", - "redis_viewer.message.key_name_copied": "Key 名稱已複製", - "redis_viewer.message.load_keys_failed": "載入 Key 失敗:{{detail}}", - "redis_viewer.message.new_key_name_required": "請輸入新的 Key 名稱", - "redis_viewer.message.rename_failed": "重新命名失敗:{{detail}}", - "redis_viewer.message.rename_same_key": "新的 Key 名稱必須與原名稱不同", - "redis_viewer.message.rename_success": "Key 已重新命名", - "redis_viewer.message.save_failed": "儲存失敗:{{detail}}", - "redis_viewer.message.save_success": "已儲存", - "redis_viewer.message.set_failed": "設定失敗:{{detail}}", - "redis_viewer.message.stream_entry_not_deleted": "未刪除任何 Stream 項目,可能已不存在", - "redis_viewer.message.target_key_exists": "目標 Key 已存在:{{key}}", - "redis_viewer.message.ttl_set_success": "TTL 已更新", - "redis_viewer.message.update_failed": "更新失敗:{{detail}}", - "redis_viewer.message.update_success": "已更新", - "redis_viewer.message.value_load_failed": "取得值失敗:{{detail}}", - "redis_viewer.modal.add_element": "新增元素", - "redis_viewer.modal.add_element_head": "向頭部新增元素", - "redis_viewer.modal.add_field": "新增欄位", - "redis_viewer.modal.add_member": "新增成員", - "redis_viewer.modal.add_stream_entry": "新增 Stream 項目", - "redis_viewer.modal.edit_field": "編輯欄位:{{field}}", - "redis_viewer.modal.edit_index": "編輯索引 {{index}}", - "redis_viewer.modal.edit_value": "編輯值", - "redis_viewer.modal.new_key": "新增 Key", - "redis_viewer.modal.rename_key": "重新命名 Key", - "redis_viewer.modal.set_ttl": "設定 TTL", - "redis_viewer.modal.update_score": "更新分數", - "redis_viewer.notice.large_keyspace_mode": "大型 Keyspace 效能模式已啟用。節點渲染已簡化,最多保留 {{count}} 個展開群組。", - "redis_viewer.placeholder.key_name": "Key 名稱", - "redis_viewer.placeholder.member_value": "輸入成員值", - "redis_viewer.placeholder.new_element_value": "輸入新元素值", - "redis_viewer.placeholder.new_key_name": "new:key:name", - "redis_viewer.placeholder.new_member_value": "輸入新成員值", - "redis_viewer.placeholder.search_exact": "輸入完整 Key 或命名空間進行精確搜尋", - "redis_viewer.placeholder.search_fuzzy": "搜尋 Key(模糊比對)", - "redis_viewer.placeholder.stream_id": "例如:* 或 1723110000000-0", - "redis_viewer.placeholder.value": "值", - "redis_viewer.search.exact": "精確", - "redis_viewer.search.fuzzy": "模糊", - "redis_viewer.topology.cluster": "Cluster", - "redis_viewer.topology.sentinel": "Sentinel", - "redis_viewer.topology.single": "單機", - "redis_viewer.state.connection_not_found": "找不到連線", - "redis_viewer.state.empty_selection": "選取一個 Key 以查看詳細資料", - "redis_viewer.table.action": "操作", - "redis_viewer.table.field": "欄位", - "redis_viewer.table.fields": "欄位", - "redis_viewer.table.index": "索引", - "redis_viewer.table.member": "成員", - "redis_viewer.table.score": "分數", - "redis_viewer.table.value": "值", - "redis_viewer.title.active_key": "目前 Key", - "redis_viewer.title.key_explorer": "Key 瀏覽器", - "redis_viewer.title.namespace_key": "命名空間 / Key", - "redis_viewer.title.type_ttl": "類型 / TTL", - "redis_viewer.tooltip.copy_fields_json": "複製欄位 JSON", - "redis_viewer.tooltip.copy_id": "複製 ID", - "redis_viewer.tooltip.copy_key_name": "複製 Key 名稱", - "redis_viewer.tooltip.copy_value": "複製值", - "redis_viewer.tooltip.resize_panels": "拖曳以調整大小", - "redis_viewer.ttl.days_hours": "{{days}} 天 {{hours}} 小時", - "redis_viewer.ttl.expired": "已過期", - "redis_viewer.ttl.forever": "永久", - "redis_viewer.ttl.hours_minutes": "{{hours}} 小時 {{minutes}} 分鐘", - "redis_viewer.ttl.minutes_seconds": "{{minutes}} 分鐘 {{seconds}} 秒", - "redis_viewer.ttl.seconds": "{{seconds}} 秒", - "redis_viewer.validation.key_required": "請輸入 Key", - "redis_viewer.validation.new_key_name_required": "請輸入新的 Key 名稱", - "redis_viewer.validation.value_required": "請輸入值", - "redis_viewer.view.auto": "Auto", - "redis_viewer.view.hex": "Hex", - "redis_viewer.view.text": "原始文字", - "redis_viewer.view.title": "檢視模式", - "ai_chat.header.default_session_title": "新對話", - "ai_chat.header.export_time": "匯出時間:", - "ai_chat.header.export_user": "你", - "ai_chat.header.tooltip.close": "關閉面板", - "ai_chat.header.tooltip.export_markdown": "匯出為 Markdown", - "ai_chat.header.tooltip.history": "歷史對話", - "ai_chat.header.tooltip.new_chat": "新對話", - "ai_chat.header.tooltip.new_chat_clear": "新對話(清空目前內容)", - "ai_chat.header.tooltip.settings": "AI 設定", - "ai_chat.header.session.connected": "{{title}} · 已連線", - "ai_chat.header.mode_tabs.aria_label": "AI 工作模式", - "ai_chat.header.mode.chat": "對話", - "ai_chat.header.mode.insights": "自動洞察", - "ai_chat.header.mode.history": "歷史", - "ai_chat.header.action.export": "匯出", - "ai_chat.history.action.new_chat": "開啟新對話", - "ai_chat.history.default_session_title": "新對話", - "ai_chat.history.empty.no_matches": "沒有相符的對話記錄", - "ai_chat.history.search.placeholder": "搜尋歷史記錄...", - "ai_chat.history.title": "對話歷史", - "ai_chat.history.tooltip.collapse": "收合", - "ai_chat.history.tooltip.delete": "刪除", - "ai_chat.welcome.description.default": "我是你的智慧資料庫助手。我可以協助產生 SQL 查詢、分析資料表結構、解釋執行邏輯並最佳化資料庫效能。", - "ai_chat.welcome.description.with_context": "已自動關聯 {{count}} 張資料表結構,點選下方按鈕即可開始分析。", - "ai_chat.welcome.title": "你好,我是 GoNavi AI", - "ai_chat.quick_action.explain_schema": "🔍 解釋資料表結構", - "ai_chat.quick_action.explain_schema.hint.with_context": "逐欄位說明含義與約束", - "ai_chat.quick_action.explain_schema.prompt.with_context": "請詳細解釋以下資料表的設計意圖和欄位含義:{{tables}}", - "ai_chat.quick_action.explain_schema.title": "解釋資料表結構", - "ai_chat.quick_action.explain_sql": "🔍 解釋 SQL", - "ai_chat.quick_action.explain_sql.hint.default": "說明執行邏輯", - "ai_chat.quick_action.explain_sql.prompt.default": "請解釋以下 SQL 語句的執行邏輯:\n```sql\n\n```", - "ai_chat.quick_action.explain_sql.title": "解釋 SQL", - "ai_chat.quick_action.generate_sql": "📝 產生 SQL", - "ai_chat.quick_action.generate_sql.hint.default": "用自然語言產生查詢", - "ai_chat.quick_action.generate_sql.hint.with_context": "用自然語言產生查詢", - "ai_chat.quick_action.generate_sql.prompt.default": "請根據目前資料庫表結構產生一條查詢語句:", - "ai_chat.quick_action.generate_sql.prompt.with_context": "請根據以下資料表結構產生一條常用查詢語句:{{tables}}", - "ai_chat.quick_action.generate_sql.title": "產生 SQL", - "ai_chat.quick_action.optimize": "⚡ 最佳化建議", - "ai_chat.quick_action.optimize.hint.default": "效能與索引建議", - "ai_chat.quick_action.optimize.hint.with_context": "索引、正規化與潛在風險", - "ai_chat.quick_action.optimize.prompt.default": "請分析以下 SQL 語句的效能並提供最佳化建議:\n```sql\n\n```", - "ai_chat.quick_action.optimize.prompt.with_context": "請分析以下資料表的結構設計,提供索引最佳化和查詢效能最佳化建議:{{tables}}", - "ai_chat.quick_action.optimize.title": "最佳化建議", - "ai_chat.quick_action.schema_analysis": "🏗️ 結構分析", - "ai_chat.quick_action.schema_analysis.hint.default": "結構品質分析", - "ai_chat.quick_action.schema_analysis.hint.with_context": "資料表關係與依賴圖", - "ai_chat.quick_action.schema_analysis.prompt.default": "請分析目前資料庫的表結構並提供最佳化建議。", - "ai_chat.quick_action.schema_analysis.prompt.with_context": "請對以下資料表進行全面的 Schema 分析,包括資料型別選擇、正規化評估和改進建議:{{tables}}", - "ai_chat.quick_action.schema_analysis.title": "Schema 分析", - "ai_chat.quick_action.table_separator": "、", - "ai_chat.welcome.suggestion.channel_distribution.default": "過去 7 天訂單渠道分布", - "ai_chat.welcome.suggestion.channel_distribution.with_context": "過去 7 天關鍵渠道分布", - "ai_chat.welcome.suggestion.cleanup.default": "幫我寫一條清理異常資料的 SQL", - "ai_chat.welcome.suggestion.cleanup.with_context": "幫我寫一條停用異常渠道的 SQL", - "ai_chat.welcome.suggestion.divider": "或直接提問", - "ai_chat.welcome.suggestion.low_rows.default": "為什麼目前結果只有少量記錄?", - "ai_chat.welcome.suggestion.low_rows.with_context": "為什麼 {{table}} 只有少量記錄?", - "ai_chat.input.action.send": "傳送", - "ai_chat.input.action.stop": "停止產生", - "ai_chat.input.context.connection_tooltip": "目前資料查詢上下文", - "ai_chat.input.context.memory_tooltip": "目前工作階段記憶已用字元。達到 {{limit}} 限制時會觸發自動壓縮。", - "ai_chat.input.context.tag_label": "關聯上下文({{count}})", - "ai_chat.input.message.context_added": "已將 {{count}} 張資料表結構加入上下文", - "ai_chat.input.message.context_load_failed": "載入資料表上下文失敗:{{detail}}", - "ai_chat.input.message.context_removed": "已從上下文移除 {{count}} 張資料表結構", - "ai_chat.input.message.context_synced": "上下文已同步:新增 {{added}},移除 {{removed}}", - "ai_chat.input.message.fetch_table_schema_failed": "取得資料表 {{table}} 結構失敗:{{detail}}", - "ai_chat.input.message.fetch_tables_failed": "取得資料表失敗:{{detail}}", - "ai_chat.input.message.select_database_context_first": "請先在左側選取一個資料庫作為對話上下文", - "ai_chat.input.message.selection_unchanged": "選取的資料表沒有變更", - "ai_chat.input.modal.empty_tables": "找不到符合「{{query}}」的資料表", - "ai_chat.input.modal.invert_matching": "反選符合結果", - "ai_chat.input.modal.ok": "同步所選資料表至上下文", - "ai_chat.input.modal.search_table.placeholder": "在目前資料庫搜尋資料表名稱...", - "ai_chat.input.modal.select_all_matching": "全選符合的資料表({{count}})", - "ai_chat.input.modal.switch_database.placeholder": "切換資料庫", - "ai_chat.input.modal.title": "關聯資料庫表結構上下文", - "ai_chat.input.model.placeholder": "選擇模型", - "ai_chat.input.placeholder": "輸入訊息...({{shortcut}},Shift+Enter 換行,/ 快捷命令)", - "ai_chat.input.slash.diff.desc": "比較兩張資料表差異並產生變更", - "ai_chat.input.slash.diff.label": "🔄 資料表比較", - "ai_chat.input.slash.diff.prompt": "請比較以下兩張資料表的結構差異,並產生從舊版本遷移到新版本的 ALTER 語句:", - "ai_chat.input.slash.explain.desc": "解釋選取 SQL 的邏輯", - "ai_chat.input.slash.explain.label": "💡 解釋 SQL", - "ai_chat.input.slash.explain.prompt": "請解釋以下 SQL 的執行邏輯和每一步的作用:\n```sql\n\n```", - "ai_chat.input.slash.index.desc": "推薦最佳索引方案", - "ai_chat.input.slash.index.label": "📊 索引建議", - "ai_chat.input.slash.index.prompt": "請基於目前表結構和常見查詢情境,推薦最佳索引方案並提供建表語句:", - "ai_chat.input.slash.mock.desc": "產生 INSERT 測試資料", - "ai_chat.input.slash.mock.label": "🎲 造測試資料", - "ai_chat.input.slash.mock.prompt": "請為目前關聯的資料表產生 10 條符合業務語意的測試資料 INSERT 語句:", - "ai_chat.input.slash.optimize.desc": "分析 SQL 效能瓶頸", - "ai_chat.input.slash.optimize.label": "⚡ 最佳化分析", - "ai_chat.input.slash.optimize.prompt": "請分析以下 SQL 的效能問題,並提供最佳化後的版本:\n```sql\n\n```", - "ai_chat.input.slash.query.desc": "用自然語言描述想查詢的內容", - "ai_chat.input.slash.query.label": "🔍 自然語言查詢", - "ai_chat.input.slash.query.prompt": "幫我寫一條 SQL 查詢:", - "ai_chat.input.slash.schema.desc": "評審資料表結構設計品質", - "ai_chat.input.slash.schema.label": "🏗️ 資料表設計評審", - "ai_chat.input.slash.schema.prompt": "請全面評審目前關聯表的設計,包括欄位型別、正規化、索引策略等方面的改進建議:", - "ai_chat.input.slash.sql.desc": "描述需求並自動產生語句", - "ai_chat.input.slash.sql.label": "📝 產生 SQL", - "ai_chat.input.slash.sql.prompt": "請根據以下需求產生 SQL:", - "ai_chat.input.tooltip.attach_table_context": "關聯附帶資料庫表上下文", - "ai_chat.input.tooltip.upload_image": "上傳圖片/截圖", - "ai_chat.tools.mcp_fallback_description": "{{serverName}} 提供的 MCP 工具 {{toolName}}", - "ai_chat.composer_notice.missing_model.description": "開啟下方模型下拉選單並選擇模型;若清單為空,請檢查供應商入口與 API Key。", - "ai_chat.composer_notice.missing_model.title": "請先選擇模型", - "ai_chat.composer_notice.missing_provider.description": "請先在 AI 設定中新增並啟用一個模型供應商。", - "ai_chat.composer_notice.missing_provider.title": "尚無可用供應商", - "ai_chat.composer_notice.model_fetch_failed.default_description": "請檢查供應商入口、API Key 或帳號權限,然後重新開啟模型下拉選單。", - "ai_chat.composer_notice.model_fetch_failed.detail_description": "供應商返回:{{detail}}", - "ai_chat.composer_notice.model_fetch_failed.title": "模型清單載入失敗", - "ai_chat.message.action.copy_full": "複製全文", - "ai_chat.message.action.copied": "已複製", - "ai_chat.message.action.delete": "刪除單則訊息", - "ai_chat.message.action.edit": "編輯此則訊息(移除其後所有記錄並重新傳送)", - "ai_chat.message.action.retry": "重新生成(移除此則並觸發上次使用者輸入重送)", - "ai_chat.message.action.copy_error_raw": "複製報錯原文", - "ai_chat.message.action.copied_error_raw": "已複製報錯原文", - "ai_chat.message.role.user": "你", - "ai_chat.message.image_alt": "附件圖片 {{index}}", - "ai_chat.message.code.copy": "複製程式碼", - "ai_chat.message.code.copied": "已複製", - "ai_chat.message.code.insert": "插入", - "ai_chat.message.code.insert_tooltip": "將此段 SQL 注入查詢工作區(可快速修改或執行)", - "ai_chat.message.code.execute": "執行", - "ai_chat.message.code.execute_tooltip": "立即執行(受 AI 安全策略管控)", - "ai_chat.message.code.executing": "執行中...", - "ai_chat.message.code.preview": "預覽", - "ai_chat.message.code.preview_tooltip": "在聊天內預覽查詢結果(最多 20 列)", - "ai_chat.message.code.expand_all": "展開全部程式碼", - "ai_chat.message.code.collapse": "收合程式碼", - "ai_chat.message.code.preview_result": "預覽結果({{rows}} 列 × {{columns}} 欄)", - "ai_chat.message.code.preview_collapse": "收合", - "ai_chat.message.code.view_result": "查看結果({{rows}} 列)", - "ai_chat.message.code.query_no_result": "查詢無結果", - "ai_chat.message.code.execute_failed": "執行失敗", - "ai_chat.message.security.blocked": "🔒 安全策略攔截:目前安全層級不允許執行 {{operationType}} 類型的 SQL。請在 AI 設定中調整安全層級。", - "ai_chat.message.security.confirm_title": "⚠️ 安全確認", - "ai_chat.message.security.default_warning": "此 SQL 為 {{operationType}} 操作,確定要執行嗎?", - "ai_chat.message.security.confirm_execute": "確認執行", - "ai_chat.message.thinking.title": "思考過程", - "ai_chat.message.thinking.active": "思考中...", - "ai_chat.message.thinking.count": "({{count}} 字)", - "ai_chat.message.tool_result.title": "探針執行結果 ({{name}})", - "ai_chat.message.tool_result.char_count": "{{count}} 個字元", - "ai_chat.message.tool_result.no_data": "無資料", - "ai_chat.message.tool_call.get_connections": "取得可用連線資訊", - "ai_chat.message.tool_call.get_databases": "掃描資料庫清單", - "ai_chat.message.tool_call.get_tables": "分析資料表結構資訊", - "ai_chat.message.tool_call.get_columns": "核對真實欄位定義", - "ai_chat.message.tool_call.get_table_ddl": "擷取建表語句", - "ai_chat.message.tool_call.execute_sql": "執行唯讀 SQL 驗證", - "ai_chat.message.tool_call.running": "正在執行資料探針...", - "ai_chat.message.tool_call.done": "資料探針執行完畢 ({{count}} 項)", - "ai_chat.message.wait.connecting": "正在建立連線", - "ai_chat.message.jvm.apply_preview": "套用到 JVM 預覽", - "ai_chat.message.jvm.apply_diagnostic": "套用到診斷控制台", - "ai_chat.message.jvm.missing_plan_context": "這則 JVM 計畫缺少來源頁籤上下文,請在目標 JVM 資源頁重新生成。", - "ai_chat.message.jvm.plan_target_not_found": "找不到與此 JVM 計畫相符的資源頁籤,請先開啟原目標資源後再套用。", - "ai_chat.message.jvm.missing_diagnostic_context": "這則診斷計畫缺少來源頁籤上下文,請在目標診斷控制台重新生成。", - "ai_chat.message.jvm.diagnostic_target_not_found": "找不到與此診斷計畫相符的診斷控制台頁籤,請先開啟原目標控制台後再套用。", - "ai_chat.message.mermaid.parse_failed": "Mermaid 解析失敗:{{detail}}", - "ai_chat.message.mermaid.render_failed": "Mermaid 渲染異常:{{detail}}", - "ai_chat.panel.history.empty": "暫無歷史對話", - "ai_chat.panel.insight.context.linked_title": "已關聯 {{count}} 張表", - "ai_chat.panel.insight.context.empty_title": "尚未關聯資料表結構", - "ai_chat.panel.insight.context.linked_body": "目前對話會帶上 {{tables}} 的結構上下文。", - "ai_chat.panel.insight.context.empty_body": "在資料表頁開啟 AI 後會自動關聯目前資料表,也可以在輸入框上方手動新增上下文。", - "ai_chat.panel.insight.context.table_separator": "、", - "ai_chat.panel.insight.context.more_tables_suffix": " 等表", - "ai_chat.panel.insight.query.slowest_title": "最近最慢查詢 {{duration}}ms", - "ai_chat.panel.insight.query.empty_title": "暫無查詢耗時樣本", - "ai_chat.panel.insight.query.empty_body": "執行查詢後,這裡會顯示可用於最佳化分析的 SQL 線索。", - "ai_chat.panel.insight.status.failed_title": "{{count}} 筆最近查詢失敗", - "ai_chat.panel.insight.status.ok_title": "最近查詢狀態正常", - "ai_chat.panel.insight.status.recent_body": "已記錄 {{count}} 筆最近 SQL,可直接讓 AI 解釋或最佳化。", - "ai_chat.panel.insight.status.empty_body": "暫無 SQL 日誌。", - "ai_chat.panel.insight.write.detected_title": "偵測到 {{count}} 筆寫入操作", - "ai_chat.panel.insight.write.readonly_title": "目前以唯讀分析為主", - "ai_chat.panel.insight.write.detected_body": "涉及寫入的 SQL 建議先產生預覽與回滾語句,再執行提交。", - "ai_chat.panel.insight.write.readonly_body": "AI 預設優先解釋、產生 SELECT、分析 Schema 與最佳化索引。", - "ai_chat.panel.render_error.title": "這條 AI 訊息渲染失敗,已自動隔離", - "ai_chat.panel.render_error.description": "其餘對話仍可繼續使用。你可以先刪除這條異常訊息,再繼續操作。", - "ai_chat.panel.render_error.unknown": "未知渲染錯誤", - "ai_chat.panel.render_error.retry": "重試渲染", - "ai_chat.panel.render_error.delete": "刪除這條訊息", - "ai_chat.panel.status.memory_compressing": "⚙️ 對話已超載,正在啟動記憶壓縮...", - "ai_chat.panel.status.memory_compress_failed": "❌ 記憶壓縮失敗,將嘗試原樣接續...", - "ai_chat.panel.status.memory_summary": "【自動記憶重塑】已將超長歷史壓縮為摘要:\n\n{{summary}}", - "ai_chat.panel.status.memory_probe_summary": "【自動記憶重塑】已將超長歷史探針資料與對話壓縮為摘要:\n\n{{summary}}", - "ai_chat.panel.prompt.memory_summary": "這是一段超長對話的歷史記錄。為了釋放上下文空間並保留你的記憶核心,請你仔細閱讀,並以「技術事實、已探索出的資料結構狀態、使用者的中心訴求、目前進展」為準則,進行高度濃縮的結構化總結。\n注意:\n1. 客觀準確,不能遺漏關鍵業務邏輯或已探索出的表名/欄位。\n2. 剔除無效執行過程、客套話、JSON 返回值本身。\n3. 請控制在 1000-2000 字左右,輸出純乾貨 Markdown。\n4. 開頭直接輸出總結,不要帶寒暄。", - "ai_chat.panel.prompt.jvm_diagnostic": "你是 GoNavi 的 JVM 診斷助手。目前頁籤是 Arthas 相容診斷工作台,目標是輸出可回填到診斷控制台的結構化診斷計畫。\n\n目前連線:{{connectionName}}\n目標主機:{{host}}\n診斷 transport:{{transport}}\n執行環境:{{environment}}\n連線策略:{{readOnlyPolicy}}\n命令權限:observe={{observePolicy}},trace={{tracePolicy}},mutating={{mutatingPolicy}}\n\n回答規則:\n1. 可以先給一小段分析,但必須包含且只包含一個 ```json 程式碼區塊。\n2. JSON 欄位嚴格限定為 intent、transport、command、riskLevel、reason、expectedSignals。\n3. transport 必須填寫上方的診斷 transport,不要編造其他 transport。\n4. command 必須是單條診斷命令,不要帶 shell 提示符、換行拼接、多條命令或程式碼圍欄。\n5. riskLevel 只能是 low、medium、high。\n6. expectedSignals 必須是字串陣列,描述執行後需要重點觀察的信號。\n7. 如果命令權限不允許某類操作,就不要輸出該類命令;無法滿足時直接說明限制。", - "ai_chat.panel.jvm_diagnostic.policy.read_only": "預設按唯讀診斷思路回答,只生成 observe、trace、排障命令,不要假設已經執行。", - "ai_chat.panel.jvm_diagnostic.policy.plan_first": "允許生成診斷命令,但仍然必須先給計畫,再由使用者決定是否執行。", - "ai_chat.panel.jvm_diagnostic.permission.allowed": "允許", - "ai_chat.panel.jvm_diagnostic.permission.forbidden": "禁止", - "ai_chat.panel.prompt.jvm_runtime": "你是 GoNavi 的 JVM 執行時分析助手。目前上下文不是 SQL,而是 JVM 資源工作台。\n\n目前連線:{{connectionName}}\n目標主機:{{host}}\nProvider 模式:{{providerMode}}\n執行環境:{{environment}}\n連線策略:{{connectionPolicy}}\n資源路徑狀態:{{resourcePathStatus}}\n\n回答規則:\n1. 你可以解釋資源結構、風險、修改建議和回滾建議。\n2. 如果使用者要求生成 JVM 修改方案,必須輸出一個唯一的 ```json 程式碼區塊,且 JSON 欄位嚴格限定為 targetType、selector、action、payload、reason。\n3. action 優先使用目前資源快照或中繼資料裡已經宣告的 supportedActions;如果目前資源沒有宣告,再基於快照內容謹慎推斷。\n4. selector.resourcePath 優先使用目前 resourcePath;如果目前路徑未知,就明確說明無法精確定位,不要編造路徑。\n5. payload 只能使用 {\"format\":\"json\",\"value\":{...}} 或 {\"format\":\"text\",\"value\":\"...\"} 這兩種包裝形式,不要輸出腳本、命令或裸值。\n6. 不要輸出腳本、命令或已經執行成功之類的表述。", - "ai_chat.panel.jvm_runtime.policy.read_only": "唯讀連線,只能分析和生成變更計畫,絕不能假設已執行寫入。", - "ai_chat.panel.jvm_runtime.policy.preview_required": "可寫連線,但任何修改都必須先生成預覽並等待人工確認。", - "ai_chat.panel.jvm_runtime.resource_path.current": "目前 resourcePath:{{resourcePath}}", - "ai_chat.panel.jvm_runtime.resource_path.missing": "目前未選中具體 resourcePath。", - "ai_chat.panel.prompt.sql.context_tables": "你是專業的資料庫助手。目前連線的資料庫類型是 {{dbDisplayType}}。請使用該方言生成 SQL。以下是使用者關聯的資料表結構 DDL,回答時請優先參考:\n\n{{ddlChunks}}", - "ai_chat.panel.prompt.sql.current_database": "你是專業的資料庫助手。目前連線的資料庫類型是 {{dbDisplayType}},目前資料庫名為 {{targetDbName}}。如果使用者需要查詢特定資料表或目前資料庫的資訊,你可以呼叫提供的 get_tables 工具主動取得資料表資訊。", - "ai_chat.panel.prompt.sql.no_context": "你是專業的資料庫助手。使用者目前在介面上沒有選中任何具體資料庫或資料表作為上下文。\n\n重要規則:\n1. 如果你需要幫使用者尋找目標表,千萬不要憑空猜測表名!必須呼叫工具取得真實資料。\n2. 完整工作流程:get_connections → get_databases → get_tables → get_columns → 生成 SQL。每一步都不可跳過。\n3. 【連線優先順序 - 極重要】取得連線列表後,必須按以下優先順序依次檢索:\n - 第一優先:host 為 localhost、127.0.0.1、或包含「本機」的連線\n - 第二優先:name 或 host 包含「開發」、「dev」、「local」的連線,或 host 為 10.x、192.168.x、172.16-31.x 等內網 IP 的連線\n - 第三優先:其他連線(如「測試」、「生產」等)\n 如果在高優先順序連線中已找到目標表,直接使用該連線,不再查找低優先順序連線。\n4. 如果在目前資料庫中未找到目標表,必須繼續查詢其他資料庫,不要放棄。\n5. 只有當所有可能的資料庫都已檢查完畢,或者已經明確找到目標表時,才可以停止。\n6. 如果是常規問答(不涉及資料庫查詢)則正常作答即可。\n\nSQL 生成規則(極重要,必須嚴格遵守):\n7. 【欄位精確性 - 絕對紅線】生成 SQL 之前,必須先呼叫 get_columns 取得目標表的真實欄位列表。SQL 中的每一個欄位名必須與 get_columns 返回的 field 欄位完全一致(區分大小寫)。不得自行拼湊、縮寫或聯想欄位名(例如欄位是 channel 就必須寫 channel,不得寫成 pay_channel)。\n8. 生成 SQL 時禁止使用 \"database.table\" 格式的限定前綴,只寫表名本身。\n9. 報告結果時,連線名/ID 和資料庫名必須嚴格來自同一個 get_tables 呼叫的實際參數。禁止將 A 連線的 connectionId 與 B 連線的 dbName 混搭。\n10. 如果有多個名稱相似的資料庫,請明確告訴使用者目標表具體位於哪個資料庫。\n11. 【關鍵】每個 SQL 程式碼區塊的第一行必須新增上下文宣告註解,格式嚴格為:-- @context connectionId=<連線ID> dbName=<資料庫名>。connectionId 和 dbName 必須來自同一個成功的 get_tables 呼叫(也就是你在該呼叫中傳入的實際參數值)。範例:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\n目前存在的連線:[{{connList}}]", - "ai_chat.panel.prompt.sql.no_connections": "你是專業的資料庫助手。目前應用中沒有可用資料庫連線。\n\n如果使用者的問題需要資料庫結構或 SQL,請先說明無法呼叫 get_connections、get_databases、get_tables、get_columns 取得真實資料庫資訊,並引導使用者建立連線後重試。不要猜測 connectionId、dbName、表名或欄位名。\n\n如果是常規問答(不涉及資料庫查詢)則正常作答即可。", - "ai_chat.panel.model_control.force_tool_call": "請直接使用 function call 呼叫工具執行操作,不要只用文字描述計畫。", - "ai_chat.panel.model_control.continue_after_summary": "請根據上述最新狀態與探索結果,繼續完成你先前未竟的分析或執行下一步。", - "ai_chat.panel.local_tool.get_connections.description": "當需要查詢、操作資料庫但使用者沒有選擇任何連線上下文時,取得目前軟體中可用的所有資料庫連線資訊。返回資料包含連線 ID (id) 與名稱 (name)。", - "ai_chat.panel.local_tool.get_databases.description": "取得指定連線 (connectionId) 下的所有資料庫 (Database/Schema) 名稱。", - "ai_chat.panel.local_tool.get_tables.description": "當已經確定目標連線與 dbName 後,如果使用者詢問或隱含提到資料表但你不知道確切 tableName,呼叫此工具取得該資料庫下的所有資料表名稱清單(只含資料表名稱,協助你推斷目標資料表)。", - "ai_chat.panel.local_tool.get_columns.description": "取得指定資料表的 field 清單(field 名稱、類型、是否可空、預設值、註解等)。在產生 SQL 之前必須先呼叫此工具確認真實 field 名稱,禁止猜測 field 名稱。", - "ai_chat.panel.local_tool.get_table_ddl.description": "取得指定資料表的完整 CREATE TABLE DDL,包含 field、索引、約束等完整結構資訊。", - "ai_chat.panel.local_tool.execute_sql.description": "在指定連線與資料庫上執行 SQL 查詢並返回結果。受安全層級控制,唯讀模式下只能執行 SELECT/SHOW/DESCRIBE 等查詢操作。結果最多返回 50 列。", - "ai_chat.panel.local_tool.param.connection_id": "connectionId(連線 ID)", - "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId(從 get_connections 取得)", - "ai_chat.panel.local_tool.param.db_name": "dbName(資料庫名)", - "ai_chat.panel.local_tool.param.table_name": "tableName(資料表名)", - "ai_chat.panel.local_tool.param.sql": "要執行的 SQL 語句", - "ai_chat.panel.tool_error.connection_not_found": "找不到連線", - "ai_chat.panel.tool_error.unknown_function": "未知函式:{{functionName}}", - "ai_chat.panel.tool_error.fetch_databases_failed": "取得資料庫清單失敗:{{detail}}", - "ai_chat.panel.tool_error.fetch_tables_failed": "取得資料表清單失敗:{{detail}}", - "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ 以下為 {{tableName}} 表的真實欄位清單。生成 SQL 時只能使用這些 field 值作為欄名,必須原樣使用,禁止修改、縮寫或自行拼湊欄位名。\n可用欄位:{{fieldNames}}\n詳細資訊:{{detailJson}}", - "ai_chat.panel.tool_error.fetch_columns_failed": "取得欄位清單失敗:{{detail}}", - "ai_chat.panel.tool_error.fetch_table_ddl_failed": "取得 CREATE TABLE 語句失敗:{{detail}}", - "ai_chat.panel.tool_error.sql_blocked": "安全策略已攔截此請求:目前安全層級不允許執行 {{operationType}} SQL。請向使用者展示該 SQL,並請使用者手動執行。", - "ai_chat.panel.tool_error.sql_execute_failed": "SQL 執行失敗", - "ai_chat.panel.tool_error.sql_execute_exception": "SQL 執行異常:{{detail}}", - "ai_chat.panel.error.unknown": "未知錯誤", - "ai_chat.panel.error.http_server": "HTTP {{code}} 伺服器錯誤", - "ai_chat.panel.error.html_response": "伺服器返回了異常 HTML 回應(可能是閘道逾時或服務不可用)", - "ai_chat.panel.error.truncated_suffix": "...(已截斷)", - "ai_chat.panel.notice.fetch_models_failed": "取得模型清單失敗:{{detail}}", - "ai_chat.panel.message.error": "❌ 錯誤: {{detail}}", - "ai_chat.panel.message.empty_response": "❌ 模型未能成功回應任何內容,可能遭遇頻控、上下文超載或理解拒絕。", - "ai_chat.panel.message.request_interrupted": "❌ 請求中斷:未收到任何具體回覆。", - "ai_chat.panel.message.service_not_ready": "❌ AI Service 尚未就緒", - "ai_chat.panel.message.send_failed": "❌ 傳送失敗: {{detail}}", - "ai_chat.panel.probe.max_rounds": "⚠️ 工具呼叫已達 {{count}} 輪上限,已自動終止循環。如需繼續探索,請傳送新的訊息。", - "ai_chat.panel.probe.consecutive_failed": "⚠️ 探針連續 3 輪執行失敗,已自動終止。請檢查連線狀態後重試。", - "ai_chat.panel.status.summarizing_probe": "正在彙總探針執行結果", - "ai_chat.panel.status.returning_runtime_data": "向模型回傳執行期資料", - "ai_chat.panel.status.deep_reasoning": "模型正在深度推理", - "ai_chat.panel.status.waiting_instruction": "等待下發操作指令", - "ai_chat.panel.status.analyzing_chain": "正在深度思考鏈路與邏輯", - "ai_chat.panel.status.model_connecting": "模型接入中", - "ai_chat.panel.status.waking_engine": "正在喚醒推理引擎", - "ai_chat.panel.status.waiting_response": "等待模型回應", - "ai_chat.panel.session.default_title": "新對話", - "ai_settings.title": "AI 設定", - "ai_settings.subtitle": "設定 AI 模型、安全級別和上下文選項", - "ai_settings.nav.title": "設定導覽", - "ai_settings.nav.providers.title": "模型供應商", - "ai_settings.nav.providers.description": "設定大模型端點與密鑰", - "ai_settings.nav.safety.title": "安全控制", - "ai_settings.nav.safety.description": "限制 AI 操作風險級別", - "ai_settings.nav.context.title": "上下文", - "ai_settings.nav.context.description": "設定攜帶的資料庫架構資訊", - "ai_settings.nav.tools.title": "內建工具", - "ai_settings.nav.tools.description": "查看 AI 可呼叫的資料探針", - "ai_settings.nav.prompts.title": "內建提示詞", - "ai_settings.nav.prompts.description": "查看系統預設的底層要求", - "ai_settings.provider.empty.title": "尚未設定模型供應商", - "ai_settings.provider.empty.description": "新增一個供應商以開始使用 AI 助手", - "ai_settings.provider.no_model": "尚未選擇模型", - "ai_settings.provider.next_provider": "下一個供應商", - "ai_settings.provider.action.add": "新增模型供應商", - "ai_settings.provider.action.edit": "編輯", - "ai_settings.provider.action.delete": "刪除", - "ai_settings.provider.confirm_delete": "確認刪除?", - "ai_settings.provider.editor.add_title": "新增模型供應商", - "ai_settings.provider.editor.edit_title": "編輯模型供應商", - "ai_settings.provider_preset.openai.label": "OpenAI", - "ai_settings.provider_preset.openai.desc": "GPT-5.4 / 5.3 系列", - "ai_settings.provider_preset.deepseek.label": "DeepSeek", - "ai_settings.provider_preset.deepseek.desc": "DeepSeek-V4 / R1 模型", - "ai_settings.provider_preset.qwen_bailian.label": "通義千問(百煉通用)", - "ai_settings.provider_preset.qwen_bailian.desc": "百煉 Anthropic 相容端點 / 模型從遠端拉取", - "ai_settings.provider_preset.qwen_coding_plan.label": "通義千問(Coding Plan)", - "ai_settings.provider_preset.qwen_coding_plan.desc": "Claude Code CLI 代理鏈路 / 使用官方支援模型清單", - "ai_settings.provider_preset.zhipu.label": "智譜 GLM", - "ai_settings.provider_preset.zhipu.desc": "GLM-5 / GLM-5-Turbo 模型", - "ai_settings.provider_preset.moonshot.label": "Kimi", - "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5(Anthropic 相容)", - "ai_settings.provider_preset.anthropic.label": "Claude", - "ai_settings.provider_preset.anthropic.desc": "Claude Opus/Sonnet 模型", - "ai_settings.provider_preset.gemini.label": "Gemini", - "ai_settings.provider_preset.gemini.desc": "Gemini 3.1 / 2.5 系列", - "ai_settings.provider_preset.volcengine_ark.label": "火山方舟", - "ai_settings.provider_preset.volcengine_ark.desc": "Ark 通用推理 / 豆包模型", - "ai_settings.provider_preset.volcengine_coding.label": "火山 Coding Plan", - "ai_settings.provider_preset.volcengine_coding.desc": "Ark Code / Coding Plan 鏈路", - "ai_settings.provider_preset.minimax.label": "MiniMax", - "ai_settings.provider_preset.minimax.desc": "M3 / M2.7 系列(Anthropic 相容)", - "ai_settings.provider_preset.ollama.label": "Ollama", - "ai_settings.provider_preset.ollama.desc": "本機部署開源模型", - "ai_settings.provider_preset.custom.label": "自訂", - "ai_settings.provider_preset.custom.desc": "自訂 API 端點", - "ai_settings.form.section.service_type": "服務類型", - "ai_settings.form.section.basic": "基本資訊", - "ai_settings.form.section.auth_connection": "認證與連線", - "ai_settings.form.provider_name": "供應商名稱", - "ai_settings.form.provider_name_required": "請輸入名稱", - "ai_settings.form.provider_name_placeholder": "例如:我的自建 OpenAI / 專屬大模型", - "ai_settings.form.api_format": "API 格式", - "ai_settings.form.model_list": "可用模型清單(選填)", - "ai_settings.form.model_list_placeholder": "設定指定的模型 ID,留空則預設從服務端拉取", - "ai_settings.form.api_key": "API Key", - "ai_settings.form.api_key_required": "請輸入 API Key", - "ai_settings.form.api_key_keep_placeholder": "留空表示繼續沿用已儲存密鑰", - "ai_settings.form.api_key_placeholder": "sk-... / 你的 API Key", - "ai_settings.form.api_key_saved_hint": "目前已儲存 API Key。留空表示繼續沿用,輸入新值表示替換。", - "ai_settings.form.clear_saved_api_key": "清除已儲存 API Key", - "ai_settings.form.api_endpoint": "API Endpoint (URL)", - "ai_settings.form.api_endpoint_required": "請輸入有效的端點地址", - "ai_settings.action.back": "返回", - "ai_settings.action.save": "儲存", - "ai_settings.action.test": "測試連線", - "ai_settings.action.retest": "重新測試", - "ai_settings.action.connection_ok": "連線正常", - "ai_settings.message.deleted": "已刪除", - "ai_settings.message.deleted_and_switched": "已刪除,並自動切換到「{{name}}」", - "ai_settings.message.delete_failed": "刪除失敗", - "ai_settings.message.delete_failed_detail": "刪除失敗:{{detail}}", - "ai_settings.message.saved": "已儲存", - "ai_settings.message.save_failed": "儲存失敗", - "ai_settings.message.save_failed_detail": "儲存失敗:{{detail}}", - "ai_settings.message.switched": "已切換", - "ai_settings.message.switch_failed": "切換失敗", - "ai_settings.message.switch_failed_detail": "切換失敗:{{detail}}", - "ai_settings.message.test_requires_new_api_key": "測試連線前請填寫新的 API Key,或取消清除已儲存密鑰", - "ai_settings.message.test_success": "連線成功", - "ai_settings.message.test_failed": "測試失敗", - "ai_settings.message.test_failed_detail": "測試失敗:{{detail}}", - "ai_settings.message.unknown_error": "未知錯誤", - "ai_settings.safety.description": "控制 AI 可執行的 SQL 操作類型,保護資料安全", - "ai_settings.safety.readonly.label": "唯讀模式", - "ai_settings.safety.readonly.desc": "AI 僅可執行 SELECT 等查詢操作,安全性最高。", - "ai_settings.safety.readwrite.label": "讀寫模式", - "ai_settings.safety.readwrite.desc": "AI 可執行 INSERT/UPDATE/DELETE,危險操作需要二次確認。", - "ai_settings.safety.full.label": "完整模式", - "ai_settings.safety.full.desc": "AI 可執行所有操作(含 DDL),高風險操作會自動警示。", - "ai_settings.context.description": "控制傳送給 AI 的資料庫上下文資訊量", - "ai_settings.context.schema_only.label": "僅結構", - "ai_settings.context.schema_only.desc": "只傳遞表格和欄位結構資訊給 AI", - "ai_settings.context.with_samples.label": "含取樣資料", - "ai_settings.context.with_samples.desc": "包含少量取樣資料,協助 AI 理解資料特徵", - "ai_settings.context.with_results.label": "含查詢結果", - "ai_settings.context.with_results.desc": "傳遞最近的查詢結果作為上下文", - "ai_settings.prompts.description": "以下為目前版本 GoNavi 預設的底層 AI 提示詞(唯讀)。它們會被動態注入到對應場景的請求上下文中。", - "ai_settings.prompts.message.saved": "自訂提示詞已儲存", - "ai_settings.prompts.message.save_failed": "儲存自訂提示詞失敗", - "ai_settings.mcp_server.message.saved": "MCP 服務已儲存", - "ai_settings.mcp_server.message.save_failed": "儲存 MCP 服務失敗", - "ai_settings.mcp_server.message.deleted": "MCP 服務已刪除", - "ai_settings.mcp_server.message.delete_failed": "刪除 MCP 服務失敗", - "ai_settings.mcp_server.message.test_success": "MCP 服務連線成功", - "ai_settings.mcp_server.message.test_failed": "MCP 服務測試失敗", - "ai_settings.mcp_server.message.test_request_failed": "測試 MCP 服務失敗", - "ai_settings.clipboard.error.unsupported": "目前環境不支援複製到剪貼簿", - "ai_settings.mcp_http.error.control_unsupported_runtime": "目前執行階段暫不支援 MCP HTTP 服務控制", - "ai_settings.mcp_http.error.start_unsupported_version": "目前版本暫不支援啟動 MCP HTTP 服務", - "ai_settings.mcp_http.error.stop_unsupported_version": "目前版本暫不支援停止 MCP HTTP 服務", - "ai_settings.mcp_http.message.started": "GoNavi MCP HTTP 服務已啟動", - "ai_settings.mcp_http.message.stopped": "GoNavi MCP HTTP 服務已停止", - "ai_settings.mcp_http.message.toggle_failed": "切換 GoNavi MCP HTTP 服務失敗", - "ai_settings.mcp_http.message.url_unavailable": "目前沒有可複製的 MCP HTTP URL", - "ai_settings.mcp_http.message.url_copied": "MCP HTTP URL 已複製", - "ai_settings.mcp_http.message.authorization_header_required": "請先啟動 MCP HTTP 服務生成 Authorization Header", - "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header 已複製", - "ai_settings.mcp_http.status.not_running": "GoNavi MCP HTTP 服務未啟動", - "ai_settings.skill.message.saved": "Skill 已儲存", - "ai_settings.skill.message.save_failed": "儲存 Skill 失敗", - "ai_settings.skill.message.deleted": "Skill 已刪除", - "ai_settings.skill.message.delete_failed": "刪除 Skill 失敗", - "ai_settings.tools.description": "AI 助手在處理資料庫相關問題時,可以自動呼叫以下內建工具取得真實資料,全程無需人工介入。", - "ai_settings.tools.workflow": "💡 工作流程:get_connections → get_databases → get_tables → get_columns → 生成 SQL", - "ai_settings.tools.params_label": "參數:", - "ai_settings.tools.builtin_tool_label": "內建工具", - "ai_settings.tools.search.aria_label": "搜尋內建工具", - "ai_settings.tools.search.placeholder": "搜尋工具、流程或參數,例如 mcp / lineLimit / allowMutating / 事務", - "ai_settings.tools.search.clear": "清除", - "ai_settings.tools.summary": "目前顯示 {{flowVisible}}/{{flowTotal}} 條推薦流程,{{toolVisible}}/{{toolTotal}} 個內建工具。", - "ai_settings.tools.empty.no_matches": "沒有符合的內建工具。可以改搜更寬泛的關鍵字,例如 mcp、日誌、連線、事務、快捷鍵、schema。", - "ai_settings.tools.parameters.hint_title": "參數提示", - "ai_settings.tools.parameters.type_label": "類型:{{type}}", - "ai_settings.tools.parameters.required": "必填", - "ai_settings.tools.parameters.optional": "可選", - "ai_settings.tools.parameters.enum_values": "可選值:{{values}}", - "ai_settings.tools.parameters.default_value": "預設:{{value}}", - "ai_settings.tools.parameters.example": "範例:", - "ai_settings.tools.params.none": "無參數", - "ai_settings.tools.get_connections.desc": "取得所有可用的資料庫連線", - "ai_settings.tools.get_connections.detail": "返回連線 ID、名稱、類型(MySQL/PostgreSQL 等)和 Host 地址。AI 會根據返回資訊決定優先探索哪個連線。", - "ai_settings.tools.get_databases.desc": "取得指定連線下的所有資料庫", - "ai_settings.tools.get_databases.detail": "傳入 connectionId,返回該連線下的資料庫或結構名稱清單。", - "ai_settings.tools.get_tables.desc": "取得指定資料庫下的所有表名", - "ai_settings.tools.get_tables.detail": "傳入 connectionId 和 dbName,返回表名清單。AI 用它來定位使用者提到的目標表。", - "ai_settings.tools.get_columns.desc": "取得指定表格的欄位結構", - "ai_settings.tools.get_columns.detail": "傳入 connectionId、dbName 和 tableName,返回每個欄位的名稱、類型、是否可空、預設值和註解。AI 在產生 SQL 前必須呼叫此工具確認真實欄位名。", - "ai_settings.tools.get_table_ddl.desc": "取得表格建表語句", - "ai_settings.tools.get_table_ddl.detail": "傳入 connectionId、dbName 和 tableName,返回完整的 CREATE TABLE 語句,包含欄位定義、索引、約束等資訊。", - "ai_settings.tools.execute_sql.desc": "執行 SQL 查詢並返回結果", - "ai_settings.tools.execute_sql.detail": "傳入 connectionId、dbName 和 sql,在目標資料庫上執行 SQL 並返回結果(最多 50 行)。受安全級別控制,唯讀模式下僅允許 SELECT/SHOW/DESCRIBE。", - "driver_manager.title": "驅動管理", - "driver_manager.action.refresh": "重新整理", - "driver_manager.action.network_check": "網路檢測", - "driver_manager.action.close": "關閉", - "driver_manager.action.open_global_proxy_settings": "開啟全域代理設定", - "driver_manager.action.open_directory": "開啟驅動目錄", - "driver_manager.action.import_directory": "匯入驅動目錄", - "driver_manager.action.import_package": "匯入驅動包", - "driver_manager.action.install_enable": "安裝並啟用", - "driver_manager.action.remove": "移除", - "driver_manager.action.logs": "日誌", - "driver_manager.column.data_source": "資料來源", - "driver_manager.column.package_size": "安裝包大小", - "driver_manager.column.status": "狀態", - "driver_manager.column.progress": "安裝進度", - "driver_manager.column.version": "驅動版本", - "driver_manager.column.actions": "操作", - "driver_manager.description.install_required": "除 MySQL / Redis / Oracle / PostgreSQL 外,其他資料來源需先安裝並啟用後才能連線。", - "driver_manager.directory_info.title": "驅動目錄與重複使用說明", - "driver_manager.directory_info.details_label": "查看驅動目錄與重複使用說明", - "driver_manager.directory_info.reuse_help": "自動下載和手動匯入的驅動都會儲存在以下目錄;後續版本升級可重複使用已下載驅動。", - "driver_manager.directory_info.root_dir": "驅動根目錄:{{path}}", - "driver_manager.directory_info.log_file": "執行日誌檔案:{{path}}", - "driver_manager.empty.default": "暫無驅動資料", - "driver_manager.empty.search": "未找到符合「{{keyword}}」的驅動", - "driver_manager.filter_summary.match": "符合 {{filtered}} / {{total}}", - "driver_manager.filter_summary.total": "共 {{total}} 個驅動", - "driver_manager.import.directory_help": "如果應用內下載鏈路失敗,可先手動下載驅動包到此目錄,再使用「匯入驅動包」或「匯入驅動目錄」完成安裝。", - "driver_manager.import.single_file_help": "行內「匯入驅動包」僅用於單個驅動檔案/總包(如 `mariadb-driver-agent`、`mariadb-driver-agent.exe`、`GoNavi-DriverAgents.zip`),不支援直接匯入 JDBC Jar;批次匯入請使用上方「匯入驅動目錄」。", - "driver.guidance.customConnectionDriverHelp": "已支援: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase;別名支援 postgresql/pgx、open_gauss/open-gauss、dm8、kingbase8/kingbasees/kingbasev8。請填寫 GoNavi 已註冊的 Go database/sql 驅動名稱,不要直接填寫系統 ODBC/JDBC 驅動名稱,也不要匯入 JDBC Jar。", - "driver_manager.local_source.file": "檔案", - "driver_manager.local_source.directory": "目錄", - "driver_manager.log.start_auto_install": "開始自動安裝", - "driver_manager.log.done_auto_install": "自動安裝完成{{version}}", - "driver_manager.log.start_local_import": "開始本機匯入{{version}}({{source}}):{{path}}", - "driver_manager.log.done_local_import": "本機匯入安裝完成{{version}}", - "driver_manager.log.skip_installed_dedupe": "已偵測到驅動已安裝,目錄匯入去重略過", - "driver_manager.log.force_overwrite_reinstall": "已啟用覆寫已安裝模式,將執行重新匯入", - "driver_manager.log.skip_slim_build": "目前發行包為精簡構建,已略過目錄匯入", - "driver_manager.log.start_remove": "開始移除驅動", - "driver_manager.log.done_remove": "驅動移除完成", - "driver_manager.log.progress_line": "【{{status}}】{{message}}({{percent}}%)", - "driver_manager.log_modal.title": "驅動日誌 - {{name}}", - "driver_manager.log_modal.install_dir": "安裝目錄:{{path}}", - "driver_manager.log_modal.executable_path": "驅動可執行檔:{{path}}", - "driver_manager.log_modal.empty": "目前驅動暫無操作日誌。", - "driver_manager.message.load_status_failed": "取得驅動狀態失敗", - "driver_manager.message.load_status_failed_detail": "取得驅動狀態失敗:{{detail}}", - "driver_manager.message.network_check_failed": "驅動網路檢測失敗", - "driver_manager.message.network_check_failed_detail": "驅動網路檢測失敗:{{detail}}", - "driver_manager.message.network_check_completed": "驅動網路檢測已完成", - "driver_manager.message.load_version_failed": "{{name}} 版本清單載入失敗", - "driver_manager.message.load_version_failed_detail": "載入 {{name}} 版本清單失敗:{{detail}}", - "driver_manager.message.install_start": "開始安裝", - "driver_manager.message.install_failed": "安裝 {{name}} 失敗", - "driver_manager.message.install_failed_detail": "安裝 {{name}} 失敗:{{detail}}", - "driver_manager.message.install_success": "{{name}}{{version}} 已安裝並啟用", - "driver_manager.message.local_path_required": "未選擇有效的本機匯入{{source}}", - "driver_manager.message.local_import_start": "開始匯入本機驅動包", - "driver_manager.message.local_import_failed": "匯入 {{name}} 本機驅動包失敗", - "driver_manager.message.local_import_failed_detail": "匯入 {{name}} 本機驅動包失敗:{{detail}}", - "driver_manager.message.local_import_success": "{{name}}{{version}} 本機驅動包已安裝並啟用", - "driver_manager.message.select_local_file_failed": "選擇本機驅動包檔案失敗", - "driver_manager.message.select_local_file_failed_detail": "選擇本機驅動包檔案失敗:{{detail}}", - "driver_manager.message.local_file_required": "未選擇有效的驅動包檔案", - "driver_manager.message.select_local_directory_failed": "選擇本機驅動包目錄失敗", - "driver_manager.message.select_local_directory_failed_detail": "選擇本機驅動包目錄失敗:{{detail}}", - "driver_manager.message.local_directory_required": "未選擇有效的驅動包目錄", - "driver_manager.message.no_external_drivers_to_import": "目前沒有可匯入的外部驅動", - "driver_manager.message.skip.dedupe": "去重略過 {{count}}", - "driver_manager.message.skip.slim": "精簡版略過 {{count}}", - "driver_manager.message.skip_suffix": ",{{items}}", - "driver_manager.message.overwrite_suffix": "(覆寫已安裝)", - "driver_manager.message.directory_import_completed": "目錄匯入完成{{mode}}:成功 {{success}}{{skip}}", - "driver_manager.message.directory_import_completed_with_failure": "目錄匯入完成{{mode}}:成功 {{success}},失敗 {{failed}}{{skip}}", - "driver_manager.message.directory_import_failed": "目錄匯入失敗{{mode}}:失敗 {{failed}}{{skip}}", - "driver_manager.message.open_directory_failed": "開啟驅動目錄失敗", - "driver_manager.message.open_directory_failed_detail": "開啟驅動目錄失敗:{{detail}}", - "driver_manager.message.remove_failed": "移除 {{name}} 失敗", - "driver_manager.message.remove_failed_detail": "移除 {{name}} 失敗:{{detail}}", - "driver_manager.message.remove_success": "{{name}} 已移除", - "driver_manager.network.alert.download_chain_unreachable": "重要提醒:驅動下載鏈路網域不可達", - "driver_manager.network.alert.download_network_unreachable": "重要提醒:驅動下載網路不可達", - "driver_manager.network.summary.download_chain_unreachable": "GitHub API 可達,但驅動下載資產網域不可達。", - "driver_manager.network.summary.unreachable_proxy_configured": "偵測到部分驅動下載地址不可達,請確認已設定的代理有效後重試。", - "driver_manager.network.summary.proxy_recommended": "偵測到部分驅動下載地址不可達,建議先設定 HTTP/HTTPS/SOCKS5 代理後再安裝驅動。", - "driver_manager.network.summary.unreachable": "偵測到部分驅動下載地址不可達,請檢查網路後重試。", - "driver_manager.network.summary.reachable_with_proxy": "驅動下載網路已透過目前代理連通。", - "driver_manager.network.summary.reachable": "驅動下載網路檢測通過,可直接安裝驅動。", - "driver_manager.network.chain_alert.description": "目前可能可以開啟 GitHub 頁面,但驅動包下載會跳轉到資產網域。請優先在 GoNavi 頂部「代理」中啟用全域代理(填寫代理應用的本機地址和連接埠)。", - "driver_manager.network.chain_alert.allow_hosts": "若仍失敗,請在代理規則放行:{{hosts}};若仍無法調整規則,再考慮開啟 TUN 模式。", - "driver_manager.network.proxy_env_detected": "偵測到代理環境變數:{{keys}}", - "driver_manager.network.details_label": "查看網路檢測明細", - "driver_manager.network.github_latency": "代理鏈路到 GitHub 的連通性延遲:{{status}}{{latency}}{{detail}}", - "driver_manager.network.reachable": "可達", - "driver_manager.network.unreachable": "不可達", - "driver_manager.network.no_result": "暫無結果", - "driver_manager.network.latency_value": ",{{latency}}ms", - "driver_manager.network.error_value": ",{{detail}}", - "driver_manager.network.no_proxy_env": "未偵測到系統代理環境變數。", - "driver_manager.network.checking": "正在檢測驅動下載網路...", - "driver_manager.network.not_checked": "尚未完成網路檢測", - "driver_manager.progress.local_package_start": "開始安裝本機驅動包", - "driver_manager.progress.metadata_write": "寫入驅動元資料", - "driver_manager.progress.local_package_done": "本機驅動包匯入完成", - "driver_manager.progress.install_start": "開始安裝", - "driver_manager.progress.pure_go_enabled": "安裝完成,純 Go 驅動已啟用", - "driver_manager.progress.agent_install_start": "開始安裝 {{name}} 驅動代理", - "driver_manager.progress.agent_install_done": "{{name}} 驅動代理安裝完成", - "driver_manager.progress.download_prebuilt_agent": "下載預編譯 {{name}} 驅動代理", - "driver_manager.progress.download_bundle": "下載 {{name}} 驅動總包", - "driver_manager.progress.extract_agent_from_bundle": "從驅動總包提取 {{name}} 代理", - "driver_manager.progress.unzip_agent": "解壓縮 {{name}} 驅動代理", - "driver_manager.progress.source_build_preferred": "優先使用本機原始碼建置 {{name}} 驅動代理", - "driver_manager.progress.dev_build_fallback": "未命中預編譯包,嘗試開發態本機建置", - "driver_manager.progress.plan.source_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});目前版本僅允許本機原始碼建置", - "driver_manager.progress.plan.source_first": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試本機原始碼建置,失敗後繼續下載兜底", - "driver_manager.progress.plan.direct_then_bundle": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試 {{direct}} 個預編譯直鏈,失敗後轉入 {{bundle}} 個驅動總包來源", - "driver_manager.progress.plan.explicit_direct": "準備安裝 {{name}} 驅動代理(版本 {{version}});僅允許明確版本資產,先嘗試 {{direct}} 個預編譯直鏈", - "driver_manager.progress.plan.direct_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試 {{direct}} 個預編譯直鏈", - "driver_manager.progress.plan.bundle_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});未提供預編譯直鏈,直接嘗試 {{bundle}} 個驅動總包來源", - "driver_manager.progress.plan.source_fallback": "準備安裝 {{name}} 驅動代理(版本 {{version}});未命中發布資產時將回退到本機原始碼建置", - "driver_manager.progress.fallback.direct_to_bundle": "預編譯直鏈未命中,轉入驅動總包兜底({{name}},剩餘 {{bundle}} 個總包來源)", - "driver_manager.progress.fallback.explicit_skip_bundle": "預編譯直鏈未命中;目前版本僅允許明確資產,略過驅動總包({{name}})", - "driver_manager.progress.fallback.bundle_available": "直鏈不可用,轉入驅動總包兜底({{name}},剩餘 {{bundle}} 個總包來源)", - "driver_manager.progress.fallback.source_build": "發布資產未命中,準備回退到本機原始碼建置({{name}})", - "driver_manager.progress.backend_empty": "後端未返回進度說明", - "driver_manager.progress.backend_detail": "後端詳情:{{detail}}", - "driver_manager.progress.status.start": "開始", - "driver_manager.progress.status.downloading": "下載中", - "driver_manager.progress.status.done": "完成", - "driver_manager.progress.status.error": "錯誤", - "driver_manager.progress.status.unknown": "未知", - "driver_manager.option.force_overwrite_installed": "覆寫已安裝", - "driver_manager.punctuation.list_separator": "、", - "driver_manager.search.placeholder": "搜尋驅動名稱/類型(如 DuckDB、clickhouse)", - "driver_manager.search.built_in": "內建", - "driver_manager.search.external": "外部", - "driver_manager.status.calculating": "計算中...", - "driver_manager.status.built_in_available": "內建可用", - "driver_manager.status.installing_percent": "安裝中 {{percent}}%", - "driver_manager.status.enabled": "已啟用", - "driver_manager.status.installed": "已安裝", - "driver_manager.status.disabled": "未啟用", - "driver_manager.status.full_required": "需 Full 版", - "driver_manager.version.default": "預設版本", - "driver_manager.version.inline_suffix": "({{version}})", - "driver_manager.version.group.year": "{{year}} 年", - "driver_manager.version.group.other": "其他", - "driver_manager.version.placeholder.select": "選擇驅動版本", - "driver_manager.version.placeholder.load_on_expand": "點擊展開載入版本", - "driver_manager.version.installed_locked_with_version": "{{version}}(已安裝,移除後可更換)", - "driver_manager.version.installed_locked": "已安裝(移除後可更換)", - "driver_manager.version.mongodb_hint": "目前僅支援 MongoDB 1.17.x 和 2.x;更舊的 1.x 暫不提供安裝。", - "driver_manager.backend.dialog.select_download_directory": "選擇驅動下載目錄", - "driver_manager.backend.dialog.select_package_file": "選擇驅動包檔案(非 JDBC Jar)", - "driver_manager.backend.dialog.select_package_directory": "選擇驅動包目錄", - "driver_manager.backend.driver_fallback_name": "驅動", - "driver_manager.backend.package_size.built_in": "內建", - "driver_manager.backend.package_size.to_be_published": "待發布", - "driver_manager.backend.version.unlabeled": "未標註版本", - "driver_manager.backend.version.latest_suffix": "(最新)", - "driver_manager.backend.version.recommended_suffix": "(推薦)", - "driver_manager.backend.message.unsupported_builtin_manifest_url": "不支援的內建驅動清單地址:{{url}}", - "driver_manager.backend.message.jdbc_jar_unsupported": "目前驅動管理不支援直接匯入 JDBC Jar。GoNavi 使用 Go 驅動與可選 driver-agent;請改用驅動包或驅動目錄。如需連線到 Kingbase,請優先使用 Kingbase 連線類型,或在自訂連線中填寫 kingbase / kingbase8。", - "driver_manager.backend.message.runtime_directory_configured": "驅動執行階段目錄已生效", - "driver_manager.backend.message.opened_directory": "已開啟驅動目錄:{{path}}", - "driver_manager.backend.message.log_hint": "(詳細日誌:{{path}})", - "driver_manager.backend.message.local_import_failed_detail": "匯入本機驅動包失敗:{{detail}}", - "driver_manager.backend.message.metadata_write_failed_detail": "寫入驅動元資料失敗:{{detail}}", - "driver_manager.backend.message.driver_install_success": "驅動安裝成功", - "driver_manager.backend.message.download_failed_detail": "驅動下載安裝失敗:{{detail}}", - "driver_manager.backend.message.package_removed": "驅動包已移除", - "driver_manager.backend.error.unknown": "未知錯誤", - "driver_manager.backend.error.unsupported_driver_type": "不支援的驅動類型", - "driver_manager.backend.error.builtin_download_not_required": "內建驅動不需要下載擴充包", - "driver_manager.backend.error.builtin_install_not_required": "內建驅動不需要安裝擴充包", - "driver_manager.backend.error.builtin_version_not_required": "內建驅動不需要選擇版本", - "driver_manager.backend.error.builtin_package_not_required": "內建驅動沒有安裝包", - "driver_manager.backend.error.builtin_remove_not_allowed": "內建驅動不可移除", - "driver_manager.backend.error.optional_go_only": "此處僅支援純 Go 可選驅動的安裝與啟用", - "driver_manager.backend.error.package_size_unsupported": "此驅動不支援查詢安裝包大小", - "driver_manager.backend.error.version_empty": "版本號為空", - "driver_manager.backend.error.asset_name_empty": "驅動資產名稱為空", - "driver_manager.backend.error.mongo_version_unsupported": "MongoDB 版本 {{version}} 目前不受支援;僅支援 1.17.x 和 2.x", - "driver_manager.backend.error.open_directory_unsupported": "目前平台不支援開啟目錄:{{platform}}", - "driver_manager.backend.error.open_directory_failed": "開啟驅動目錄失敗:{{detail}}", - "driver_manager.backend.error.create_directory_failed": "建立驅動目錄失敗:{{detail}}", - "driver_manager.backend.error.remove_package_failed": "移除驅動包失敗:{{detail}}", - "driver_manager.backend.error.manifest_scheme_unsupported": "不支援的驅動清單地址協定:{{scheme}}", - "driver_manager.backend.error.manifest_fetch_failed": "拉取驅動清單失敗:{{detail}}", - "driver_manager.backend.error.manifest_parse_failed": "解析驅動清單失敗:{{detail}}", - "driver_manager.backend.error.manifest_url_empty": "驅動清單地址為空", - "driver_manager.backend.error.manifest_too_large": "驅動清單超過大小限制", - "driver_manager.backend.error.local_manifest_url_invalid": "無效的本機驅動清單地址", - "driver_manager.backend.error.file_manifest_url_invalid": "無效的檔案驅動清單地址", - "driver_manager.backend.error.driver_type_empty": "驅動類型為空", - "driver_manager.backend.error.no_driver_versions": "未找到可用驅動版本", - "driver_manager.backend.error.module_path_empty": "模組路徑為空", - "driver_manager.backend.error.module_version_list_empty": "模組版本列表為空", - "driver_manager.backend.error.module_version_list_fetch_failed": "拉取模組版本列表失敗:{{detail}}", - "driver_manager.backend.error.module_version_list_read_failed": "讀取模組版本列表失敗:{{detail}}", - "driver_manager.backend.error.driver_version_list_fetch_failed": "拉取驅動版本列表失敗:{{detail}}", - "driver_manager.backend.error.driver_version_list_parse_failed": "解析驅動版本列表失敗:{{detail}}", - "driver_manager.backend.error.cache_key_empty": "快取 key 為空", - "driver_manager.backend.error.release_empty": "Release 為空", - "driver_manager.backend.error.bundle_index_asset_missing": "未找到驅動總包索引資產", - "driver_manager.backend.error.bundle_index_empty": "驅動總包索引為空", - "driver_manager.backend.error.bundle_index_fetch_failed": "拉取驅動總包索引失敗:{{detail}}", - "driver_manager.backend.error.bundle_index_parse_failed": "解析驅動總包索引失敗:{{detail}}", - "driver_manager.backend.error.tag_empty": "Tag 為空", - "driver_manager.backend.error.api_url_empty": "API 地址為空", - "driver_manager.backend.error.release_info_fetch_failed": "拉取 Release 資訊失敗:{{detail}}", - "driver_manager.backend.error.local_package_path_empty": "本機驅動包路徑為空", - "driver_manager.backend.error.local_directory_path_empty": "本機驅動目錄路徑為空", - "driver_manager.backend.error.file_path_empty": "檔案路徑為空", - "driver_manager.backend.error.download_url_empty": "下載地址為空", - "driver_manager.backend.error.bundle_url_empty": "驅動總包下載地址為空", - "driver_manager.backend.error.read_local_package_failed": "讀取本機驅動包失敗:{{detail}}", - "driver_manager.backend.error.read_local_directory_failed": "讀取本機驅動目錄失敗:{{detail}}", - "driver_manager.backend.error.scan_local_directory_failed": "掃描本機驅動目錄失敗:{{detail}}", - "driver_manager.backend.error.open_local_package_failed": "開啟本機驅動包失敗:{{detail}}", - "driver_manager.backend.error.read_local_package_entry_failed": "讀取本機驅動包項目失敗:{{detail}}", - "driver_manager.backend.error.download_failed": "下載失敗:{{detail}}", - "driver_manager.backend.error.bundle_download_failed": "下載驅動總包失敗:{{detail}}", - "driver_manager.backend.error.open_bundle_failed": "開啟驅動總包失敗:{{detail}}", - "driver_manager.backend.error.read_bundle_entry_failed": "讀取驅動總包項目失敗:{{detail}}", - "driver_manager.backend.error.source_build_failed": "本機原始碼建置失敗:{{detail}}", - "driver_manager.backend.error.prebuilt_downloads_failed": "預編譯包下載失敗:{{detail}}", - "driver_manager.backend.status.built_in_available": "內建驅動已就緒,可直接連線", - "driver_manager.backend.status.optional_enabled": "純 Go 驅動已啟用,可直接連線", - "driver_manager.backend.status.installed_pending_with_version": "驅動已安裝(版本:{{version}}),等待生效", - "driver_manager.backend.status.installed_pending": "驅動已安裝,等待生效", - "driver_manager.backend.status.optional_disabled_with_version": "未啟用(版本:{{version}})", - "driver_manager.backend.status.optional_disabled_generic": "未啟用", - "driver_manager.backend.status.needs_update": "需要重新安裝以套用驅動側更新。", - "driver_manager.backend.status.installed_revision": "已安裝 revision {{revision}}。", - "driver_manager.backend.status.expected_revision": "目前需要 revision {{revision}}。", - "driver_manager.backend.status.affected_connections": "影響 {{count}} 個已儲存連線", - "driver_manager.backend.status.unrecognized_driver_type": "未識別的資料來源類型", - "driver_manager.backend.status.slim_build_required": "{{name}} 未包含在目前 slim build 中;請安裝 Full 版以使用此驅動", - "driver_manager.backend.status.agent_path_failed": "{{name}} 驅動代理路徑解析失敗,請在驅動管理中重新安裝啟用", - "driver_manager.backend.status.agent_missing": "{{name}} 驅動代理缺失,請在驅動管理中重新安裝啟用", - "driver_manager.backend.status.optional_disabled": "{{name}} 純 Go 驅動未啟用,請先在驅動管理中安裝並啟用", - "driver_manager.backend.status.agent_unavailable_reinstall": "{{name}} 驅動代理不可用:{{detail}}。請在驅動管理中重新安裝啟用", - "driver_manager.backend.status.agent_arch_incompatible_detail": "{{name}} 驅動代理架構不相容:檔案={{file}},目前程序={{process}}。請在驅動管理中重新安裝啟用", - "driver_manager.backend.network.probe.github_driver_release": "GitHub 驅動發布", - "driver_manager.backend.network.probe.github_release_asset_domain": "GitHub Release 資產網域", - "driver_manager.backend.network.probe.go_module_proxy": "Go 模組代理", - "driver_manager.backend.network.error.probe_url_empty": "探測 URL 為空", - "driver_manager.backend.network.error.probe_host_missing": "探測 URL 缺少主機", - "driver_manager.backend.network.summary.download_chain_unreachable": "GitHub API 可達,但驅動下載鏈路不可達。請優先在 GoNavi 啟用全域代理,並在代理規則中放行 github.com、api.github.com、release-assets.githubusercontent.com、objects.githubusercontent.com、raw.githubusercontent.com;若仍失敗,再考慮開啟 TUN 模式。", - "driver_manager.backend.progress.plan.source_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});目前版本僅允許本機原始碼建置", - "driver_manager.backend.progress.plan.source_first": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試本機原始碼建置,失敗後繼續下載兜底", - "driver_manager.backend.progress.plan.direct_then_bundle": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試 {{direct}} 個預編譯直鏈,失敗後轉入 {{bundle}} 個驅動總包來源", - "driver_manager.backend.progress.plan.explicit_direct": "準備安裝 {{name}} 驅動代理(版本 {{version}});僅允許明確版本資產,先嘗試 {{direct}} 個預編譯直鏈", - "driver_manager.backend.progress.plan.direct_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試 {{direct}} 個預編譯直鏈", - "driver_manager.backend.progress.plan.bundle_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});未提供預編譯直鏈,直接嘗試 {{bundle}} 個驅動總包來源", - "driver_manager.backend.progress.plan.source_fallback": "準備安裝 {{name}} 驅動代理(版本 {{version}});未命中發布資產時將回退到本機原始碼建置", - "driver_manager.backend.progress.fallback.direct_to_bundle": "預編譯直鏈未命中,轉入驅動總包兜底({{name}},剩餘 {{bundle}} 個總包來源)", - "driver_manager.backend.progress.fallback.explicit_skip_bundle": "預編譯直鏈未命中;目前版本僅允許明確資產,略過驅動總包({{name}})", - "driver_manager.backend.progress.fallback.bundle_available": "直鏈不可用,轉入驅動總包兜底({{name}},剩餘 {{bundle}} 個總包來源)", - "driver_manager.backend.progress.fallback.source_build": "發布資產未命中,準備回退到本機原始碼建置({{name}})", - "data_sync.action.analyze_diff": "對比差異", - "data_sync.action.cancel": "取消", - "data_sync.action.close": "關閉", - "data_sync.action.continue_sync": "繼續同步", - "data_sync.action.next": "下一步", - "data_sync.action.previous": "上一步", - "data_sync.action.start_sync": "開始同步", - "data_sync.action.view": "查看", - "data_sync.compare_entry.action.return_to_compare": "返回比對", - "data_sync.compare_entry.alert.data": "目前為「資料比對」入口:固定依主鍵分析列級差異,不執行寫入。", - "data_sync.compare_entry.alert.schema": "目前為「表結構比對」入口:固定只分析結構差異並產生可審閱 SQL,不執行變更。", - "data_sync.compare_entry.option.auto_add_columns": "產生目標表缺失欄位的相容變更 SQL(僅預覽,不執行)", - "data_sync.compare_entry.option.source_dataset.query": "依 SQL 結果集比對", - "data_sync.compare_entry.option.source_dataset.table": "依表比對", - "data_sync.compare_entry.preview.selection_hint": "列選取只影響 SQL 預覽範圍,不會執行寫入。", - "data_sync.compare_entry.preview.sql.data_help": "SQL 預覽會依目前勾選的插入、更新、刪除與列選取範圍產生,僅用於審閱差異。", - "data_sync.compare_entry.preview.sql.schema_help": "SQL 預覽顯示結構差異建議語句,僅用於審閱差異。", - "data_sync.compare_entry.result.completed": "比對完成", - "data_sync.compare_entry.result.failed": "比對失敗", - "data_sync.compare_entry.result.running": "正在比對", - "data_sync.compare_entry.result.running_description": "目前階段:{{stage}}{{table}}", - "data_sync.compare_entry.result.stage_fallback": "執行中", - "data_sync.compare_entry.result.success_summary": "已成功比對 {{tables}} 張表。", - "data_sync.compare_entry.result.table_suffix": ",表:{{table}}", - "data_sync.compare_entry.title.analysis_log": "分析日誌", - "data_sync.compare_entry.workflow_help": "目前入口只做差異分析與預覽,不會執行同步、建表、補欄位或刪除資料。", - "data_sync.entry_mode.compare.action.start": "開始比對", - "data_sync.entry_mode.compare.option_title": "比對選項", - "data_sync.entry_mode.compare.result_title": "比對結果", - "data_sync.entry_mode.data_compare.badge": "資料比對", - "data_sync.entry_mode.data_compare.description": "依主鍵比對來源表與目標表的資料差異,查看新增、更新和刪除明細。", - "data_sync.entry_mode.data_compare.hero_description": "適合核對兩端資料一致性,只做差異分析與列級預覽,不執行寫入。", - "data_sync.entry_mode.data_compare.table_select_label": "請選擇需要比對資料的表:", - "data_sync.entry_mode.data_compare.title": "資料比對", - "data_sync.entry_mode.schema_compare.badge": "結構比對", - "data_sync.entry_mode.schema_compare.description": "依來源表與目標表產生結構差異、相容風險和可審閱 SQL。", - "data_sync.entry_mode.schema_compare.hero_description": "適合發布前核對兩端表結構差異,只做分析與預覽,不執行結構變更。", - "data_sync.entry_mode.schema_compare.table_select_label": "請選擇需要比對結構的表:", - "data_sync.entry_mode.schema_compare.title": "表結構比對", - "data_sync.entry_mode.sync.hero_description": "適合目標表已存在的場景,先做差異分析,再依勾選執行插入、更新或刪除。", - "data_sync.alert.auto_create_scope": "自動建表目前僅支援 MySQL 到 Kingbase。會遷移欄位、主鍵、一般索引、唯一索引和聯合索引,並明確跳過全文、空間、前綴和函數類索引。", - "data_sync.alert.auto_create_planner_scope": "自動建表目前僅支援 MySQL 到 Kingbase。會遷移欄位、主鍵、一般索引、唯一索引和聯合索引,並明確跳過全文、空間、前綴和函數類索引。", - "data_sync.alert.existing_target_only": "資料同步預設使用已有目標表執行。需要跨資料來源建表並導入時,請切換到跨庫遷移。", - "data_sync.alert.full_overwrite": "全量覆寫會清空目標表資料,請謹慎使用。", - "data_sync.alert.migration_mode": "目前為跨庫遷移。適合將表遷移到另一資料來源,並自動建表和導入資料。", - "data_sync.alert.query_mode": "SQL 結果集同步目前支援來源端自定義 SQL 到單個已存在目標表。查詢結果必須包含目標表主鍵列。", - "data_sync.alert.sync_mode": "目前為資料同步。適合目標表已存在時做增量同步或覆寫導入。", - "data_sync.badge.migration_mode": "遷移模式", - "data_sync.badge.source_pending": "待選來源連線", - "data_sync.badge.source_selected": "已選來源連線", - "data_sync.badge.sync_mode": "同步模式", - "data_sync.badge.table_count": "{{count}} 張表", - "data_sync.backend.error.restore_source_secret_failed": "還原來源資料庫連線密文失敗:{{detail}}", - "data_sync.backend.error.restore_target_secret_failed": "恢復目標資料庫連線密文失敗:{{detail}}", - "data_sync.backend.error.connect_source_failed": "來源資料庫連線失敗:{{detail}}", - "data_sync.backend.error.connect_target_failed": "目標資料庫連線失敗:{{detail}}", - "data_sync.backend.error.init_source_driver_failed": "初始化來源資料庫驅動失敗:{{detail}}", - "data_sync.backend.error.init_target_driver_failed": "初始化目標資料庫驅動失敗:{{detail}}", - "data_sync.backend.error.preview_composite_pk_unsupported": "複合主鍵({{columns}})暫不支援資料預覽", - "data_sync.backend.error.preview_pk_required": "無主鍵,不支援資料預覽", - "data_sync.backend.error.target_pk_required_for_query_diff": "目標表無主鍵,不支援基於 SQL 結果集的差異分析", - "data_sync.backend.result.analyzed_tables": "已完成 {{count}} 張表的差異分析", - "data_sync.backend.result.analyzed_target_tables": "已完成 {{count}} 個目標表的差異分析", - "data_sync.backend.summary.diff_completed": "差異分析完成", - "data_sync.backend.summary.source_query_diff_completed": "SQL 結果集差異分析完成", - "data_sync.backend.validation.query_mode_data_only": "SQL 結果集同步目前僅支援只同步資料", - "data_sync.backend.validation.single_target_table_required": "SQL 結果集同步要求且僅允許選擇一個目標表", - "data_sync.backend.validation.source_query_required": "來源查詢 SQL 不能為空", - "data_sync.backend.validation.target_table_required": "目標表不能為空", - "data_sync.backend.warning.index_columns_missing": "索引 {{name}} 缺少欄位定義,已跳過", - "data_sync.backend.warning.index_prefix_length_unsupported": "索引 {{name}} 使用前綴長度,目前暫不支援遷移", - "data_sync.backend.warning.index_type_unsupported": "索引 {{name}} 型別={{type}},目前暫不支援自動遷移", - "data_sync.confirm.full_overwrite.content": "全量覆寫會先清空目標表資料再插入,請確認目標庫已完成備份。", - "data_sync.confirm.full_overwrite.ok": "繼續執行", - "data_sync.confirm.full_overwrite.title": "確認全量覆寫", - "data_sync.modal.full_overwrite_title": "確認全量覆寫", - "data_sync.modal.full_overwrite_content": "全量覆寫會先清空目標表資料再插入,請確認目標庫已完成備份。", - "data_sync.modal.full_overwrite_ok": "繼續執行", - "data_sync.diff.column.delete": "刪除", - "data_sync.diff.column.insert": "插入", - "data_sync.diff.column.plan": "計畫", - "data_sync.diff.column.preview": "預覽", - "data_sync.diff.column.risk": "風險", - "data_sync.diff.column.same": "相同", - "data_sync.diff.column.table": "表名", - "data_sync.diff.column.target_table": "目標表", - "data_sync.diff.column.update": "更新", - "data_sync.diff.more_warnings": "還有 {{count}} 項未展開", - "data_sync.diff.target_exists": "已存在", - "data_sync.diff.target_missing": "不存在", - "data_sync.diff.title": "對比結果", - "data_sync.diff.warning_title": "預檢發現風險或降級項,請在執行前確認。", - "data_sync.message.precheck_warnings": "預檢發現風險或降級項,請在執行前確認。", - "data_sync.message.more_items_collapsed": "還有 {{count}} 項未展開", - "data_sync.table.table_name": "表名", - "data_sync.table.target_table": "目標表", - "data_sync.table.target_exists": "已存在", - "data_sync.table.target_missing": "不存在", - "data_sync.table.plan": "計畫", - "data_sync.table.insert": "插入", - "data_sync.table.update": "更新", - "data_sync.table.delete": "刪除", - "data_sync.table.same": "相同", - "data_sync.table.risk": "風險", - "data_sync.table.preview": "預覽", - "data_sync.title.compare_result": "對比結果", - "data_sync.field.connection": "連線", - "data_sync.field.database": "資料庫", - "data_sync.field.migration_content": "遷移內容", - "data_sync.field.migration_mode": "遷移模式", - "data_sync.field.mongo_collection_name": "Mongo 集合名(可選)", - "data_sync.field.source_dataset_mode": "來源資料方式", - "data_sync.field.source_query_sql": "來源查詢 SQL", - "data_sync.field.sync_content": "同步內容", - "data_sync.field.sync_mode": "同步模式", - "data_sync.field.target_table": "目標表", - "data_sync.field.target_table_requirement": "目標表要求", - "data_sync.field.target_table_strategy": "目標表處理策略", - "data_sync.field.workflow_type": "功能型別", - "data_sync.help.mongo_collection_mongo_to_redis": "MongoDB 到 Redis 情境通常直接選擇來源集合。僅在需要明確回退集合名時填寫。", - "data_sync.help.mongo_collection_redis_to_mongo": "留空時使用預設集合名。填寫後,本次 Redis 鍵空間會寫入該 Mongo 集合。", - "data_sync.help.workflow_type": "先選擇本次是同步已有目標表,還是執行跨庫遷移。頁面會按功能型別調整更安全的預設策略。", - "data_sync.help.select_tables": "請選擇需要同步的表:", - "data_sync.help.source_query_mode": "請輸入來源查詢 SQL,並選擇一個目標表。差異分析會直接基於該結果集與目標表對比。", - "data_sync.hero.migration_description": "將來源表遷移到另一資料庫,按策略自動建表、導入資料並補建相容索引。", - "data_sync.hero.migration_title": "跨資料源遷移", - "data_sync.hero.sync_description": "基於已有目標表先做差異比對,再按勾選執行插入、更新或刪除。", - "data_sync.hero.sync_title": "資料同步", - "data_sync.log.level.error": "錯誤", - "data_sync.log.level.info": "資訊", - "data_sync.log.level.warn": "警告", - "data_sync.log.title": "執行日誌", - "data_sync.message.analysis_complete": "差異分析完成", - "data_sync.message.analysis_failed": "差異分析失敗", - "data_sync.message.analysis_failed_detail": "差異分析失敗:{{detail}}", - "data_sync.message.analyze_before_sync": "請先對比差異,再開始同步", - "data_sync.message.close_blocked_running": "同步執行中,暫不支援關閉窗口。", - "data_sync.message.fetch_source_databases_failed": "取得來源資料庫失敗", - "data_sync.message.fetch_source_databases_failed_detail": "取得來源資料庫失敗:{{detail}}", - "data_sync.message.fetch_tables_failed": "取得表列表失敗", - "data_sync.message.fetch_tables_failed_detail": "取得表列表失敗:{{detail}}", - "data_sync.message.fetch_target_databases_failed": "取得目標資料庫失敗", - "data_sync.message.fetch_target_databases_failed_detail": "取得目標資料庫失敗:{{detail}}", - "data_sync.message.preview_load_failed": "載入差異預覽失敗", - "data_sync.message.preview_load_failed_detail": "載入差異預覽失敗:{{detail}}", - "data_sync.message.select_connections_first": "請先選擇連線", - "data_sync.message.select_databases_first": "請先選擇資料庫", - "data_sync.message.select_source_database": "請選擇來源資料庫", - "data_sync.message.select_target_database": "請選擇目標資料庫", - "data_sync.message.sync_execution_failed": "同步執行失敗", - "data_sync.message.sync_execution_failed_detail": "同步執行失敗:{{detail}}", - "data_sync.option.auto_add_columns": "自動補齊目標表缺失欄位(目前支援 MySQL 目標及 MySQL 到 Kingbase;SQL 結果集模式暫不支援)", - "data_sync.option.content.both": "同步結構和資料", - "data_sync.option.content.data": "僅同步資料", - "data_sync.option.content.schema": "僅同步結構", - "data_sync.option.create_indexes": "自動遷移相容的一般索引和唯一索引(僅自動建表模式生效)", - "data_sync.option.source_dataset.query": "按 SQL 結果集同步", - "data_sync.option.source_dataset.table": "按表同步", - "data_sync.option.show_same_tables": "显示相同表", - "data_sync.option.sync_mode.full_overwrite": "全量覆寫(清空目標表後插入)", - "data_sync.option.sync_mode.insert_only": "僅插入(不對比目標;無主鍵表將跳過)", - "data_sync.option.sync_mode.insert_update": "增量同步(對比差異後選擇插入、更新和刪除)", - "data_sync.option.target_strategy.auto_create_if_missing": "目標表不存在時自動建表", - "data_sync.option.target_strategy.existing_only": "僅使用已有目標表", - "data_sync.option.target_strategy.smart": "智慧模式(存在則直接導入,不存在則自動建表)", - "data_sync.option.workflow.migration": "跨庫遷移(自動建表後導入)", - "data_sync.option.workflow.sync": "資料同步(基於已有目標表做差異同步)", - "data_sync.placeholder.mongo_collection_name": "請輸入 Mongo 集合名", - "data_sync.placeholder.source_query_sql": "例如:SELECT id, name, email FROM users WHERE status = 'active'", - "data_sync.placeholder.target_table": "請選擇一個目標表", - "data_sync.preview.action.copy_sql": "複製 SQL", - "data_sync.preview.column.changed_columns": "變更欄位", - "data_sync.preview.column.data": "資料", - "data_sync.preview.column.detail": "詳情", - "data_sync.preview.column.primary_key": "主鍵", - "data_sync.preview.data_summary": "插入 {{inserts}},更新 {{updates}},刪除 {{deletes}}(預覽每種類型最多展示 200 行)", - "data_sync.preview.delete_warning": "刪除預設不勾選。請確認業務影響後再啟用刪除。", - "data_sync.preview.loading": "正在載入差異預覽...", - "data_sync.preview.message.copy_failed": "複製失敗,請手動複製。", - "data_sync.preview.message.sql_copied": "SQL 已複制", - "data_sync.preview.schema_plan_help": "以下為本次結構同步計畫執行的語句。", - "data_sync.preview.schema_statement_count": "檢測到 {{count}} 條結構變更語句", - "data_sync.preview.schema_warning_title": "結構預覽包含風險或降級項", - "data_sync.preview.selection_hint.delete": "未勾選任何行時會同步全部刪除差異。如不想執行刪除,請在對比結果中取消刪除。", - "data_sync.preview.selection_hint.insert": "未勾選任何行時會同步全部插入差異。如不想執行插入,請在對比結果中取消插入。", - "data_sync.preview.selection_hint.update": "未勾選任何行時會同步全部更新差異。如不想執行更新,請在對比結果中取消更新。", - "data_sync.preview.side.source": "源", - "data_sync.preview.side.target": "目標", - "data_sync.preview.sql.data_help": "SQL 預覽會按目前勾選的插入、更新、刪除和行選擇範圍產生,用於審核確認。", - "data_sync.preview.sql.no_data_sql": "-- 目前選擇範圍沒有可預覽 SQL", - "data_sync.preview.sql.no_schema_changes": "-- 目前表結構無可執行變更", - "data_sync.preview.sql.schema_help": "SQL 預覽展示將執行的結構變更語句,用于审核確認。", - "data_sync.preview.sql.schema_statement_count": "共 {{count}} 條結構變更語句", - "data_sync.preview.sql.statement_count": "共 {{count}} 條語句(預覽資料每種類型最多展示 200 行)", - "data_sync.preview.tab.delete": "刪除({{count}})", - "data_sync.preview.tab.insert": "插入({{count}})", - "data_sync.preview.tab.schema": "結構({{count}})", - "data_sync.preview.tab.sql": "SQL({{count}})", - "data_sync.preview.tab.update": "更新({{count}})", - "data_sync.preview.title": "差異預覽:{{table}}", - "data_sync.preview.update_detail_title": "更新詳情:{{table}} / {{pk}}", - "data_sync.plan.use_existing_target": "使用已有目標表導入", - "data_sync.plan.target_missing_manual_create": "目標表不存在,需先手動建立", - "data_sync.plan.target_missing_auto_create": "目標表不存在,將自動建表後導入", - "data_sync.plan.target_missing_cannot_sync": "目標表不存在,無法執行同步", - "data_sync.plan.target_missing_auto_create_all": "目標表不存在,執行時將自動建表並導入全部來源資料", - "data_sync.plan.schema_changes_detected": "檢測到 {{count}} 條結構變更", - "data_sync.plan.add_missing_columns_before_import": "補齊 {{count}} 個缺失欄位後導入", - "data_sync.plan.missing_columns_no_executable_sql": "目標表缺失 {{count}} 個欄位,但未產生可執行補齊 SQL", - "data_sync.plan.missing_columns_auto_add_unsupported": "目標表缺失 {{count}} 個欄位,目前庫對暫不支援自動補齊", - "data_sync.plan.missing_columns_auto_add_disabled": "目標表缺失 {{count}} 個欄位,未開啟自動補齊", - "data_sync.plan.schema_only_no_data_diff": "僅同步結構,未執行資料差異分析", - "data_sync.plan.schema_only": "僅同步結構", - "data_sync.plan.schema_preview": "結構預覽", - "data_sync.plan.schema_aligned": "表結構已一致", - "data_sync.plan.auto_create_unsupported": "目前庫對暫不支援自動建表", - "data_sync.plan.tdengine_time_column_missing": "來源表未識別到可對應為 TDengine 首列的時間列,無法自動建表", - "data_sync.plan.use_existing_target_collection": "使用已有目標集合導入", - "data_sync.plan.target_collection_missing_manual_create": "目標集合不存在,需先手動建立", - "data_sync.plan.target_collection_missing_auto_create": "目標集合不存在,將自動建立集合後導入", - "data_sync.plan.redis_key_to_mongodb_document": "按 Redis Key 產生 MongoDB 文件導入", - "data_sync.plan.migrate_to_collection": "遷移到集合 {{collection}}", - "data_sync.plan.migrate_to_target": "遷移到 {{target}}", - "data_sync.plan.source_query_preview": "SQL 結果集同步預覽", - "data_sync.plan.migration_kernel_planning": "目前資料庫組合已進入遷移規劃階段,等待結構推斷和目標方言產生支援", - "data_sync.plan.backend_summary": "後端計畫摘要", - "data_sync.progress.stage.analysis_started": "差異分析開始", - "data_sync.progress.stage.analysis_completed": "差異分析完成", - "data_sync.progress.stage.sync_started": "開始同步", - "data_sync.progress.stage.connecting_source": "連線來源資料庫", - "data_sync.progress.stage.connecting_target": "連線目標資料庫", - "data_sync.progress.stage.analyzing_table": "分析表({{current}}/{{total}})", - "data_sync.progress.stage.syncing_table": "同步表({{current}}/{{total}})", - "data_sync.progress.stage.table_completed": "表處理完成", - "data_sync.progress.stage.creating_target_table": "建立目標表", - "data_sync.progress.stage.syncing_schema": "同步表結構", - "data_sync.progress.stage.creating_indexes": "建立索引", - "data_sync.progress.stage.reading_source": "讀取來源表資料", - "data_sync.progress.stage.reading_target": "讀取目標表資料", - "data_sync.progress.stage.comparing_diff": "對比差異", - "data_sync.progress.stage.clearing_target": "清空目標表", - "data_sync.progress.stage.checking_columns": "檢查欄位一致性", - "data_sync.progress.stage.applying_changes": "套用變更", - "data_sync.progress.stage.completed": "同步完成", - "data_sync.progress.stage.failed": "同步失敗", - "data_sync.progress.stage.redis_keyspace_started": "開始 Redis 鍵空間遷移", - "data_sync.progress.stage.creating_target_collection": "建立目標集合", - "data_sync.progress.stage.migrating_key": "遷移 Key({{current}}/{{total}})", - "data_sync.progress.stage.mongodb_keyspace_started": "開始 MongoDB 鍵空間遷移", - "data_sync.progress.stage.migrating_collection": "遷移集合({{current}}/{{total}})", - "data_sync.progress.stage.collection_completed": "集合處理完成", - "data_sync.progress.stage.backend_update": "正在處理後端進度", - "data_sync.progress.stage.analyzing_diff": "差異分析", - "data_sync.progress.stage.executing": "執行中", - "data_sync.progress.stage.preparing": "準備開始", - "data_sync.query_mode.help": "請輸入來源查詢 SQL,並選擇一個目標表。差異分析會直接基於該結果集與目標表對比。", - "data_sync.result.completed": "同步完成", - "data_sync.result.failed": "同步失敗", - "data_sync.result.failed_description": "同步未完成。", - "data_sync.result.failed_detail": "同步失敗:{{detail}}", - "data_sync.result.running": "正在同步", - "data_sync.result.running_description": "目前階段:{{stage}}{{table}}", - "data_sync.result.success_summary": "成功同步 {{tables}} 張表。插入:{{inserted}},更新:{{updated}}", - "data_sync.result.table_suffix": ",表:{{table}}", - "data_sync.section.migration_options": "遷移選項", - "data_sync.section.source_database": "來源資料庫", - "data_sync.section.sync_options": "同步選項", - "data_sync.section.target_database": "目標資料庫", - "data_sync.title.source_database": "來源資料庫", - "data_sync.title.target_database": "目標資料庫", - "data_sync.title.migration_options": "遷移選項", - "data_sync.title.sync_options": "同步選項", - "data_sync.title.execution_log": "執行日誌", - "data_sync.step.configure": "配置源與目標", - "data_sync.step.result": "執行結果", - "data_sync.step.select_tables": "選擇表", - "data_sync.table_picker.help": "請選擇需要同步的表:", - "data_sync.table_picker.item_unit": "項", - "data_sync.table_picker.items_unit": "項", - "data_sync.table_picker.not_found": "暫無資料", - "data_sync.table_picker.search_placeholder": "搜尋表...", - "data_sync.table_picker.selected_title": "已選表", - "data_sync.table_picker.show_same": "显示相同表", - "data_sync.table_picker.source_title": "來源表", - "data_sync.transfer.source_tables": "???", - "data_sync.transfer.selected_tables": "已選表", - "data_sync.transfer.item_unit": "項", - "data_sync.transfer.items_unit": "項", - "data_sync.transfer.search_placeholder": "搜尋表...", - "data_sync.transfer.empty": "暫無資料", - "data_sync.title.migration_description": "按來源庫到目標庫完成建表、導入與風險預檢。", - "data_sync.title.migration_workbench": "跨庫遷移工作台", - "data_sync.title.sync_description": "按已有目標表完成差異比對、同步執行與結果確認。", - "data_sync.title.sync_workbench": "資料同步工作台", - "data_sync.title.migration": "跨資料源遷移", - "data_sync.title.sync": "資料同步", - "data_sync.validation.query_mode_data_only": "SQL 結果集同步僅支援只同步資料", - "data_sync.validation.single_target_table_required": "SQL 結果集同步需要選擇一個目標表", - "data_sync.validation.source_query_required": "請輸入來源查詢 SQL", - "data_sync.validation.table_required": "請選擇至少一張表", - "data_sync.plan.use_existing_target_table": "使用已有目標表導入", - "data_sync.plan.missing_columns_auto_add": "補齊 {{count}} 個缺失欄位後導入", - "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "來源表未識別到可對應為 TDengine 首列的時間列,無法自動建表", - "data_sync.plan.redis_mongo_keyspace_import": "按 Redis Key 產生 MongoDB 文件導入", - "data_sync.plan.redis_mongo_target_collection_missing_manual": "目標集合不存在,需先手動建立", - "data_sync.plan.redis_mongo_target_collection_auto_create": "目標集合不存在,將自動建立集合後導入", - "data_sync.backend.summary.redis_mongo_planned_action": "遷移到集合 {{collection}}", - "data_sync.backend.summary.mongo_redis_planned_action": "遷移到 {{target}}", - "data_sync.plan.mongo_relational_kernel_planned": "目前資料庫組合已進入遷移規劃階段,等待結構推斷和目標方言產生支援", - "data_sync.progress.stage.redis_mongo_creating_collection": "建立目標集合", - "data_sync.progress.stage.redis_mongo_migrating_key": "遷移 Key({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_migrating_collection": "遷移集合({{current}}/{{total}})", - "data_sync.progress.stage.mongo_redis_collection_completed": "集合處理完成", - "data_sync.backend.error.apply_changes_unsupported": "目標驅動不支援套用資料變更", - "data_sync.backend.error.apply_source_query_changes_failed": "套用 SQL 結果集變更失敗: {{detail}}", - "data_sync.backend.error.clear_target_failed": "清空目標表失敗: {{detail}}", - "data_sync.backend.error.connect_source_mongodb_failed": "來源 MongoDB 連線失敗: {{detail}}", - "data_sync.backend.error.connect_source_redis_failed": "來源 Redis 連線失敗: {{detail}}", - "data_sync.backend.error.connect_target_mongodb_failed": "目標 MongoDB 連線失敗: {{detail}}", - "data_sync.backend.error.connect_target_redis_failed": "目標 Redis 連線失敗: {{detail}}", - "data_sync.backend.error.diff_composite_pk_unsupported": "複合主鍵 ({{columns}}) 不支援差異比對同步", - "data_sync.backend.error.diff_pk_required": "沒有主鍵。差異比對同步不受支援;請使用 insert-only 或 full-overwrite 模式直接導入。", - "data_sync.backend.error.execute_source_query_failed": "執行來源查詢失敗: {{detail}}", - "data_sync.backend.error.init_source_mongodb_driver_failed": "初始化來源 MongoDB 驅動失敗: {{detail}}", - "data_sync.backend.error.init_target_mongodb_driver_failed": "初始化目標 MongoDB 驅動失敗: {{detail}}", - "data_sync.backend.error.inspect_mongodb_collection_failed": "檢查目標 MongoDB collection 失敗: {{detail}}", - "data_sync.backend.error.list_mongodb_collections_failed": "列出 MongoDB collection 失敗: {{detail}}", - "data_sync.backend.error.load_target_columns_failed": "載入目標表欄位失敗: {{detail}}", - "data_sync.backend.error.mongo_document_write_unsupported": "目標驅動不支援寫入 MongoDB document", - "data_sync.backend.error.mongo_redis_analyze_collection_failed": "分析 MongoDB collection {{collection}} 失敗: {{detail}}", - "data_sync.backend.error.mongo_redis_document_key_missing": "MongoDB document 缺少 key 欄位", - "data_sync.backend.error.mongo_redis_document_type_missing": "MongoDB document 缺少欄位 {{field}},Redis Key={{key}}", - "data_sync.backend.error.mongo_redis_empty_target_value": "Redis Key {{key}} 的目標值為空", - "data_sync.backend.error.mongo_redis_unsupported_type": "Redis Key {{key}} 不支援類型 {{type}}", - "data_sync.backend.error.mongo_redis_value_invalid": "Redis Key {{key}} 的 {{type}} payload 無效;實際類型={{actual}}", - "data_sync.backend.error.mongo_redis_write_key_failed": "寫入 Redis Key {{key}} 失敗: {{detail}}", - "data_sync.backend.error.read_redis_key_failed": "讀取 Redis Key {{key}} 失敗: {{detail}}", - "data_sync.backend.error.read_source_table_failed": "讀取來源表失敗: {{detail}}", - "data_sync.backend.error.read_target_redis_key_failed": "讀取目標 Redis Key {{key}} 失敗: {{detail}}", - "data_sync.backend.error.read_target_table_failed": "讀取目標表失敗: {{detail}}", - "data_sync.backend.error.redis_mongo_analyze_changes_failed": "分析 Redis 遷移變更失敗: {{detail}}", - "data_sync.backend.error.redis_mongo_apply_changes_failed": "套用 Redis 遷移變更失敗: {{detail}}", - "data_sync.backend.error.redis_mongo_build_changes_failed": "建立 Redis 遷移變更失敗: {{detail}}", - "data_sync.backend.error.redis_mongo_create_collection_failed": "建立目標 MongoDB collection 失敗: {{detail}}", - "data_sync.backend.error.scan_redis_keys_failed": "掃描 Redis Key 失敗: {{detail}}", - "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "目標表為複合主鍵 ({{columns}}),不支援 SQL 結果集差異分析", - "data_sync.backend.error.target_table_columns_missing": "目標表 {{table}} 不存在或無法讀取欄位定義", - "data_sync.backend.result.mongo_redis_analyzed_collections": "已完成 {{count}} 個 MongoDB collection 的 Redis 遷移分析", - "data_sync.backend.result.mongo_redis_completed": "MongoDB keyspace 遷移完成;已處理 {{collections}} 個 collection 和 {{keys}} 個 Redis Key", - "data_sync.backend.result.mongo_redis_no_collections": "沒有可遷移的 MongoDB collection", - "data_sync.backend.result.mongo_redis_no_documents": "沒有可遷移的 MongoDB Redis document", - "data_sync.backend.result.redis_mongo_analyzed_keys": "已完成 {{count}} 個 Redis Key 的 MongoDB 遷移分析", - "data_sync.backend.result.redis_mongo_completed": "Redis keyspace 遷移完成;已處理 {{count}} 個 Redis Key", - "data_sync.backend.result.redis_mongo_no_keys": "沒有可遷移的 Redis Key", - "data_sync.backend.summary.mongo_redis_diff": "執行時將插入 {{inserts}} 個 Redis Key,並更新 {{updates}} 個 Redis Key", - "data_sync.backend.summary.mongo_redis_empty_collection": "collection 中沒有可遷移的 document", - "data_sync.backend.summary.mongo_redis_same_keys": "匹配的 Redis Key 已是最新", - "data_sync.backend.summary.mongo_redis_warning_document_format": "僅支援包含 key/type/ttl/value 欄位的 document", - "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB 到 Redis 會將全量覆寫降級為增量同步,以避免刪除 DB 中其他 Redis Key", - "data_sync.backend.summary.mongo_redis_warning_keyspace": "MongoDB collection 中的 document 將按 keyspace 語意寫入 Redis", - "data_sync.backend.summary.redis_mongo_insert_document": "執行時將插入新的 MongoDB document", - "data_sync.backend.summary.redis_mongo_same_document": "匹配的 MongoDB document 已是最新", - "data_sync.backend.summary.redis_mongo_update_document": "執行時將更新現有 MongoDB document", - "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key 將寫入為 MongoDB document", - "data_sync.plan.data_import_without_diff": "目前模式不進行差異比對,直接導入來源表資料。", - "data_sync.plan.mongo_relational_entry_warning": "{{objectKind}} 從 {{sourceType}} 到 {{targetType}} 的遷移目前僅提供結構推斷規劃提示", - "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis 到 MongoDB 按 keyspace 語意遷移,不執行表結構檢查", - "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Redis TTL 和 collection 排序語意會作為 document 欄位保留,但可能無法完全等價", - "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "目前策略要求目標 MongoDB collection 已存在,執行時不會自動建立", - "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state 尚未遷移", - "data_sync.plan.target_missing_preview_unavailable": "目標表不存在,差異預覽不可用。", - "data_sync.progress.stage.redis_mongo_started": "Redis 到 MongoDB keyspace 遷移開始", - "data_sync.progress.stage.mongo_redis_started": "MongoDB 到 Redis keyspace 遷移開始", - "data_sync.schema_inference.mongo_relational_issue": "{{sourceType}} -> {{targetType}} 的結構推斷仍在開發中;目前僅提供遷移規劃提示。", - "data_sync.schema_inference.mongo_relational_resolution": "後續迭代將從取樣資料產生欄位定義和型別降級策略。", - "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view 語意尚未自動遷移到 PG-like 目標", - "data_sync.backend.warning.auto_create_pair_unsupported": "自動建表目前僅支援 MySQL -> Kingbase;目前組合={{sourceType}} -> {{targetType}}", - "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "欄位 {{column}} 型別 {{type}} 已降級為 json", - "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "欄位 {{column}} 型別 {{type}} 已降級為 jsonb", - "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "欄位 {{column}} enum 型別 {{type}} 已降級為 varchar(255)", - "data_sync.backend.warning.clickhouse_order_by_tuple_used": "未檢測到來源主鍵,ClickHouse 將使用 ORDER BY tuple();查詢效能可能受影響", - "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse 不保留關聯式外鍵或唯一約束語意;僅遷移欄位和資料", - "data_sync.backend.warning.clickhouse_source_metadata_limited": "ClickHouse 來源端索引和約束元資料有限;反向遷移以欄位和資料為主", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "ClickHouse 來源端未返回主鍵資訊,目標 MySQL 表不會自動建立主鍵", - "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "ClickHouse 來源端未返回主鍵資訊,目標 PG-like 表不會自動建立主鍵", - "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "ClickHouse 目標建議使用 insert-only 或 full-overwrite;update/delete 語意與傳統關聯式資料庫不同", - "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "欄位 {{column}} 型別 {{type}} 沒有專用 MySQL 對應,已降級為 text", - "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "欄位 {{column}} 型別 {{type}} 沒有專用 PG-like 對應,已降級為 text", - "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "欄位 {{column}} 型別 {{type}} 已對應為 numeric(20,0),以避免 unsigned 溢出", - "data_sync.backend.warning.column_type_degraded_clickhouse_string": "欄位 {{column}} 型別 {{type}} 已降級為 String", - "data_sync.backend.warning.column_type_empty_clickhouse_string": "欄位 {{column}} 型別為空,已降級為 String", - "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "欄位 {{column}} 為使用者自定義型別,已降級為 String", - "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "欄位 {{column}} 的 AUTO_INCREMENT 不會作為 ClickHouse 自增語意保留", - "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "欄位 {{column}} 的二進位型別已降級為 String", - "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "欄位 {{column}} 型別 {{type}} 已降級為 String", - "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "欄位 {{column}} 型別 {{type}} 沒有專用 ClickHouse 對應,已降級為 String", - "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "欄位 {{column}} 的 identity/自增語意不會保留到 ClickHouse", - "data_sync.backend.warning.target_existing_only_required": "目前策略要求目標表已存在,執行時不會自動建立。", - "data_sync.backend.warning.target_exists_data_only_no_indexes": "目標表已存在。僅執行資料導入;不會自動重建現有索引和約束。", - "data_sync.backend.warning.target_missing_columns": "目標表缺少 {{count}} 個欄位: {{columns}}", - "data_sync.backend.warning.target_table_existing_only_required": "目前策略要求目標表已存在,執行時不會自動建立。", - "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "來源 ORDER BY/PARTITION/TTL/Projection/materialized-view 語意尚未自動遷移到 TDengine", - "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "源索引、外鍵、觸發器、唯一約束和自增語意尚未自動遷移到 TDengine", - "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "源索引、外鍵、觸發器、唯一約束、identity 和 sequence 語意尚未自動遷移到 TDengine", - "data_sync.unsupported.tdengine_source_relational_semantics": "TDengine 索引、外鍵、觸發器、supertable、TTL 和其他時序語意尚未自動遷移", - "data_sync.unsupported.tdengine_target_missing_timestamp": "TDengine regular table 的第一列必須是 TIMESTAMP;目前來源表沒有可直接對應的時間欄位", - "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "來源 supertable、TAGS、TTL、retention policy 和索引語意尚未自動遷移到 TDengine regular table", - "data_sync.warning.target_exists_strategy_no_auto_create": "目前策略要求目標表已存在,執行時不會自動建立。", - "data_sync.warning.target_missing_columns": "目標表缺少 {{count}} 個欄位: {{columns}}", - "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "TDengine 來源目前不會自動為已有目標表補齊欄位;請先確認目標結構", - "data_sync.warning.tdengine_source_mysql_type_fallback": "欄位 {{column}} 型別 {{type}} 沒有專用 MySQL 對應,已降級為 {{targetType}}", - "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "欄位 {{column}} 型別 {{type}} 已對應為 {{targetType}},以避免 unsigned 溢出", - "data_sync.warning.tdengine_source_pglike_type_fallback": "欄位 {{column}} 型別 {{type}} 沒有專用 PG-like 對應,已降級為 {{targetType}}", - "data_sync.warning.tdengine_source_semantics_degraded": "TDengine 到關聯式目標目前僅遷移欄位和資料;supertable、TAG 關聯、retention policy 和其他時序語意可能降級或遺失", - "data_sync.warning.tdengine_source_tag_column_degraded": "欄位 {{column}} 是 TDengine TAG 列,將在關聯式目標中降級為一般欄位", - "data_sync.warning.tdengine_source_tag_column_mapped": "欄位 {{column}} 是 TDengine TAG 列,已對應為一般欄位", - "data_sync.warning.tdengine_target_auto_create_basic_table_only": "TDengine 目標 auto-create 目前僅建立基礎表;索引、外鍵、觸發器、supertable/TAGS/TTL 不會自動遷移", - "data_sync.warning.tdengine_target_auto_increment_not_migrated": "欄位 {{column}} 的自增語意不會遷移到 TDengine", - "data_sync.warning.tdengine_target_binary_type_fallback": "欄位 {{column}} 型別 {{type}} 已按字串語意降級為 {{targetType}}", - "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "欄位 {{column}} 型別 {{type}} 已提升為第一個 TDengine TIMESTAMP 欄位", - "data_sync.warning.tdengine_target_empty_type_fallback": "欄位 {{column}} 型別為空,已降級為 {{targetType}}", - "data_sync.warning.tdengine_target_enum_type_fallback": "欄位 {{column}} enum 型別 {{type}} 已降級為 {{targetType}}", - "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "TDengine 目標目前不會自動為已有目標表補齊欄位;請先確認目標結構", - "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "欄位 {{column}} 的 FixedString 長度無法解析,已降級為 {{targetType}}", - "data_sync.warning.tdengine_target_identity_not_migrated": "欄位 {{column}} 的自增/identity 語意不會遷移到 TDengine", - "data_sync.warning.tdengine_target_insert_only": "TDengine 目標目前僅支援 INSERT 寫入;update/delete 差異將在執行時被拒絕", - "data_sync.warning.tdengine_target_json_regular_table_fallback": "欄位 {{column}} 型別 {{type}} 在 TDengine regular table 中不保留 TAG 語意,已降級為 {{targetType}}", - "data_sync.warning.tdengine_target_json_tag_only_fallback": "欄位 {{column}} 型別 {{type}} 已降級為 {{targetType}},因為 TDengine JSON 僅適用於 TAG", - "data_sync.warning.tdengine_target_missing_time_column": "來源表沒有可對應的時間欄位,因此無法自動建表。繼續前請手動準備 TDengine 目標表和時間欄位。", - "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "欄位 {{column}} 的主鍵語意不會作為關聯約束遷移到 TDengine", - "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "欄位 {{column}} 型別 {{type}} 沒有專用 TDengine 同庫對應,已降級為 {{targetType}}", - "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "欄位 {{column}} 是 TDengine TAG 列,遷移到 regular table 後將降級為一般欄位", - "data_sync.warning.tdengine_target_time_only_type_fallback": "欄位 {{column}} 型別 {{type}} 沒有穩定的 TDengine time-only 對應,已降級為 {{targetType}}", - "data_sync.warning.tdengine_target_timestamp_column_reordered": "TDengine 基礎表要求時間欄位在首列;欄位 {{column}} 已移動到第一位", - "data_sync.warning.tdengine_target_type_fallback": "欄位 {{column}} 型別 {{type}} 已降級為 {{targetType}}", - "data_sync.warning.tdengine_target_type_no_mapping_fallback": "欄位 {{column}} 型別 {{type}} 沒有專用 TDengine 對應,已降級為 {{targetType}}", - "data_sync.warning.tdengine_target_user_defined_type_fallback": "欄位 {{column}} 為使用者自定義型別,已降級為 {{targetType}}", - "data_sync.backend.error.analyze_prepare_secrets_failed": "準備資料同步分析金鑰失敗: {{detail}}", - "data_sync.backend.error.apply_changes_failed": "套用變更失敗: {{detail}}", - "data_sync.backend.error.auto_add_column_failed": "自動補齊欄位失敗: 欄位={{column}}, 錯誤={{detail}}", - "data_sync.backend.error.build_migration_plan_failed": "產生遷移計畫失敗: 表={{table}}, 錯誤={{detail}}", - "data_sync.backend.error.create_indexes_failed": "建立索引失敗: 表={{table}}, 錯誤={{detail}}", - "data_sync.backend.error.create_table_sql_empty": "表 {{table}} 自動建表失敗: 建表 SQL 為空", - "data_sync.backend.error.create_target_table_failed": "建立目標表失敗: 表={{table}}, 錯誤={{detail}}", - "data_sync.backend.error.exec_ddl_statement_failed": "{{stage}}失敗: SQL={{sql}}, 錯誤={{detail}}", - "data_sync.backend.error.mongo_read_source_samples_failed": "讀取來源 MongoDB collection 樣本失敗: {{detail}}", - "data_sync.backend.error.pre_create_table_sql_failed": "預執行建表 SQL 失敗: 表={{table}}, 錯誤={{detail}}", - "data_sync.backend.error.prepare_secrets_failed": "準備資料同步金鑰失敗: {{detail}}", - "data_sync.backend.error.preview_failed": "資料同步預覽失敗: {{detail}}", - "data_sync.backend.error.preview_prepare_secrets_failed": "準備資料同步預覽金鑰失敗: {{detail}}", - "data_sync.backend.error.read_source_table_failed_with_table": "讀取來源表 {{table}} 失敗: {{detail}}", - "data_sync.backend.error.read_target_table_failed_with_table": "讀取目標表 {{table}} 失敗: {{detail}}", - "data_sync.backend.error.refresh_columns_after_create_failed": "建立目標表後載入欄位失敗: 表={{table}}, 錯誤={{detail}}", - "data_sync.backend.error.source_collection_no_migratable_fields": "來源 MongoDB collection 未推斷出可遷移欄位: {{collection}}", - "data_sync.backend.error.source_table_columns_failed": "取得來源表欄位失敗: {{detail}}", - "data_sync.backend.error.source_table_missing_or_no_columns": "來源表不存在或無欄位定義: {{table}}", - "data_sync.backend.error.sync_table_schema_failed": "同步表結構失敗: 表={{table}}, 錯誤={{detail}}", - "data_sync.backend.error.target_collection_check_failed": "檢查目標 MongoDB collection 失敗: {{detail}}", - "data_sync.backend.error.target_table_columns_failed": "取得目標表欄位失敗: {{detail}}", - "data_sync.backend.label.content_data_only": "僅同步資料", - "data_sync.backend.label.content_schema_and_data": "同步結構+資料", - "data_sync.backend.label.content_schema_only": "僅同步結構", - "data_sync.backend.label.mode_full_overwrite": "全量覆蓋", - "data_sync.backend.label.mode_insert_only": "僅插入", - "data_sync.backend.label.mode_insert_update": "增量同步", - "data_sync.backend.label.target_strategy_auto_create_if_missing": "目標缺失時自動建立", - "data_sync.backend.label.target_strategy_existing_only": "僅使用既有目標", - "data_sync.backend.label.target_strategy_smart": "智慧處理目標", - "data_sync.backend.log.auto_add_columns_completed": "自動補齊欄位完成: 成功={{succeeded}}, 失敗={{failed}}", - "data_sync.backend.log.change_counts": "需插入 {{inserts}} 行,需更新 {{updates}} 行,需刪除 {{deletes}} 行", - "data_sync.backend.log.connecting_source": "正在連線來源資料庫: {{host}}...", - "data_sync.backend.log.connecting_target": "正在連線目標資料庫: {{host}}...", - "data_sync.backend.log.data_already_consistent": "資料一致,無需變更。", - "data_sync.backend.log.ddl_statement_succeeded": "表 {{table}} {{stage}}成功: {{sql}}", - "data_sync.backend.log.fatal_error": "致命錯誤: {{message}}", - "data_sync.backend.log.missing_columns_auto_add_disabled": "目標表缺少 {{count}} 個欄位,但未開啟自動補齊,將自動忽略: {{columns}}", - "data_sync.backend.log.missing_columns_auto_add_started": "目標表缺少 {{count}} 個欄位,開始自動補齊: {{columns}}", - "data_sync.backend.log.mongo_redis_keyspace_options": "MongoDB 到 Redis keyspace 遷移;模式={{mode}};目標={{target}}", - "data_sync.backend.log.mongo_redis_migrating_key": "正在寫入 Redis Key {{key}}", - "data_sync.backend.log.mongo_redis_syncing_collection": "正在同步 MongoDB collection {{collection}}", - "data_sync.backend.log.redis_mongo_keyspace_options": "Redis 到 MongoDB keyspace 遷移;模式={{mode}};目標策略={{strategy}}", - "data_sync.backend.log.redis_mongo_migrating_key": "正在遷移 Redis Key {{key}}", - "data_sync.backend.log.source_query_no_changes": "SQL 結果集與目標表一致,無需套用變更", - "data_sync.backend.log.source_query_sync_completed": "SQL 結果集同步完成: 插入={{inserts}}, 更新={{updates}}, 刪除={{deletes}}", - "data_sync.backend.log.source_query_sync_source": "同步來源: SQL 結果集 -> 目標表 {{table}};模式: {{mode}}", - "data_sync.backend.log.sync_options": "同步內容: {{content}};模式: {{mode}};自動補欄位: {{autoAddColumns}};目標表策略: {{targetTableStrategy}};建立索引: {{createIndexes}}", - "data_sync.backend.log.syncing_table": "正在同步表: {{table}}", - "data_sync.backend.log.table_no_operations_skipped": "表 {{table}} 未勾選任何操作,已跳過", - "data_sync.backend.log.target_table_created": "目標表建立成功: {{table}}", - "data_sync.backend.log.target_table_no_operations": "目標表 {{table}} 未勾選任何操作,已跳過", - "data_sync.backend.log.unknown_sync_content_data_only": "未知同步內容 {{content}},已自動使用僅同步資料", - "data_sync.backend.result.preview_ready": "資料同步預覽已就緒", - "data_sync.backend.result.sync_completed": "同步完成: 表={{tables}}, 插入={{rowsInserted}}, 更新={{rowsUpdated}}, 刪除={{rowsDeleted}}", - "data_sync.backend.warning.apply_changes_unsupported": "目標驅動不支援套用資料變更。", - "data_sync.backend.warning.auto_add_column_sql_generation_failed": "欄位 {{column}} 自動補齊 SQL 產生失敗: {{detail}}", - "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "欄位 {{column}} 為自增列,補齊到已有目標表時不會自動補建 {{feature}}", - "data_sync.backend.warning.column_default_expression_skipped": "欄位 {{column}} 的預設值 {{default}} 包含表達式,目前未自動遷移", - "data_sync.backend.warning.column_empty_string_default_not_preserved": "欄位 {{column}} 的空字串預設值未保留", - "data_sync.backend.warning.column_type_degraded": "欄位 {{column}} 型別 {{sourceType}} 已降級為 {{targetType}}", - "data_sync.backend.warning.column_type_empty_degraded": "欄位 {{column}} 型別為空,已降級為 {{targetType}}", - "data_sync.backend.warning.column_type_mapped": "欄位 {{column}} 型別 {{sourceType}} 已對應為 {{targetType}}", - "data_sync.backend.warning.column_type_no_mapping_degraded": "欄位 {{column}} 型別 {{sourceType}} 沒有專用對應,已降級為 {{targetType}}", - "data_sync.backend.warning.column_user_defined_degraded": "欄位 {{column}} 為使用者自定義型別,已降級為 {{targetType}}", - "data_sync.backend.warning.composite_pk_skipped": "表 {{table}} 為複合主鍵 ({{columns}}),暫不支援差異同步,已跳過", - "data_sync.backend.warning.full_overwrite_clearing_target": "全量覆寫模式:即將清空目標表 {{table}}", - "data_sync.backend.warning.load_target_columns_skip_check_failed": "取得目標表欄位失敗,已跳過欄位一致性檢查: {{detail}}", - "data_sync.backend.warning.mongo_redis_document_format": "MongoDB 到 Redis 目前僅支援包含 key/type/ttl/value 欄位的 document", - "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "MongoDB 到 Redis 遷移會將全量覆蓋降級為增量同步", - "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "欄位 {{column}} 為 unsigned bigint auto_increment,已降級為 {{targetType}},且不保留自增語意", - "data_sync.backend.warning.refresh_columns_after_add_failed": "補齊欄位後刷新目標欄位失敗: 表={{table}}, 錯誤={{detail}}", - "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "Redis 到 MongoDB 遷移會將全量覆蓋降級為增量同步", - "data_sync.backend.warning.source_indexes_read_failed": "讀取來源表索引失敗,已跳過索引遷移: {{detail}}", - "data_sync.backend.warning.table_pk_required_skipped": "表 {{table}} 未找到主鍵,目前模式需要差異比對,已跳過", - "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "表 {{table}} 的目標表不存在,目前策略不允許自動建表,已跳過", - "data_sync.backend.warning.unknown_content_default_data": "未知同步內容 {{content}},已自動使用僅同步資料", - "data_sync.backend.warning.unknown_mode_default_insert_update": "未知同步模式 {{mode}},已自動使用增量同步", - "data_sync.plan.mongo_target_collection_missing_auto_create": "目標 MongoDB collection {{collection}} 不存在,將自動建立後導入。", - "data_sync.plan.mongo_target_collection_missing_manual_create": "目標 MongoDB collection {{collection}} 不存在,需先手動建立。", - "data_sync.schema_sync.error.create_statement_empty": "建表語句為空", - "data_sync.schema_sync.error.create_target_table_failed": "建立目標表 {{table}} 失敗: {{detail}}", - "data_sync.schema_sync.error.get_columns_after_create_failed": "建立目標表 {{table}} 後取得欄位失敗: {{detail}}", - "data_sync.schema_sync.error.get_create_statement_failed": "取得來源表 {{table}} 建表語句失敗: {{detail}}", - "data_sync.schema_sync.error.get_source_columns_failed": "取得來源表 {{table}} 欄位失敗: {{detail}}", - "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "目標表 {{table}} 不存在,源型別 {{sourceType}} 暫不支援自動建表: {{detail}}", - "data_sync.schema_sync.log.add_column_failed": "補齊欄位失敗: 表={{table}}, 欄位={{column}}, 錯誤={{detail}}", - "data_sync.schema_sync.log.column_added": "已補齊欄位: 表={{table}}, 欄位={{column}}, 型別={{type}}", - "data_sync.schema_sync.log.completed": "表結構同步完成: {{table}},新增欄位 {{count}} 個", - "data_sync.schema_sync.log.schema_aligned": "表結構一致: {{table}}", - "data_sync.schema_sync.log.target_created": "目標表建立成功: {{table}}", - "data_sync.schema_sync.log.target_missing_create": "目標表 {{table}} 不存在,開始嘗試建立表結構", - "data_sync.schema_sync.warning.target_unsupported": "目標資料庫型別={{targetType}} 暫不支援結構同步,已跳過表 {{table}}", - "data_sync.unsupported.mongo_index_columns_missing": "索引 {{name}} 缺少欄位定義,已跳過", - "data_sync.unsupported.mongo_index_create_command_failed": "索引 {{name}} 產生 MongoDB createIndexes 命令失敗: {{detail}}", - "data_sync.unsupported.mongo_index_prefix_length": "索引 {{name}} 使用前綴長度,MongoDB 目標暫不支援等價遷移", - "data_sync.warning.mongo_field_mixed_bson_types": "欄位 {{field}} 存在多種 BSON 值型別,已降級為相容型別", - "data_sync.warning.mongo_index_type_normalized": "索引 {{name}} 型別={{type}} 將按一般索引遷移到 MongoDB", - "data_sync.warning.mongo_source_collection_index_read_failed": "讀取來源 MongoDB collection 索引失敗,已跳過索引遷移: {{detail}}", - "data_sync.warning.mongo_source_empty_sample_id_only": "來源 MongoDB collection 暫無樣本資料,僅按 `_id` 產生基礎主鍵列", - "data_sync.warning.mongo_source_primary_key_missing": "MongoDB 來源 collection 未推斷出穩定主鍵,目標表不會自動建立主鍵", - "data_sync.warning.mongo_source_table_index_read_failed": "讀取來源表索引失敗,已跳過索引遷移: {{detail}}", - "data_sync.warning.mongo_target_collection_existing_only_required": "目前策略要求目標 MongoDB collection 已存在,執行時不會自動建立", - "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB 是弱結構目標,欄位結構以寫入 document 為準,不執行目標列檢查", - "file.backend.dialog.export_connections": "匯出連線", - "file.backend.dialog.export_data": "匯出資料", - "file.backend.dialog.export_database_sql": "匯出 {{database}} (SQL)", - "file.backend.dialog.export_query_result": "匯出查詢結果", - "file.backend.dialog.export_table": "匯出 {{table}}", - "file.backend.dialog.export_tables_sql": "匯出資料表 (SQL)", - "file.backend.dialog.import_data": "匯入到 {{table}}", - "file.backend.dialog.select_config_file": "選擇設定檔", - "file.backend.dialog.select_database_file": "選擇資料庫檔案", - "file.backend.dialog.select_duckdb_file": "選擇 DuckDB 資料檔案", - "file.backend.dialog.select_sql_directory": "選擇 SQL 目錄", - "file.backend.dialog.select_sql_file": "選擇 SQL 檔案", - "file.backend.dialog.select_sqlite_file": "選擇 SQLite 資料檔案", - "file.backend.dialog.select_ssh_key_file": "選擇 SSH 私鑰檔案", - "file.backend.html_export.document_title": "GoNavi 資料匯出", - "file.backend.html_export.empty_rows": "(0 筆)", - "file.backend.html_export.heading": "GoNavi 資料匯出", - "file.backend.html_export.meta": "列數: {{rowCount}} · 欄數: {{columnCount}} · 產生時間: {{generatedAt}}", - "file.backend.sql_dump.database": "資料庫: {{database}}", - "file.backend.sql_dump.empty_rows": "(0 筆)", - "file.backend.sql_dump.generated_at": "產生時間: {{generatedAt}}", - "file.backend.sql_dump.table": "資料表: {{objectName}}", - "file.backend.sql_dump.title": "GoNavi SQL 匯出", - "file.backend.sql_dump.view": "檢視: {{objectName}}", - "file.backend.sql_dump.view_data_skipped": "已略過檢視資料匯出(不會為檢視產生 INSERT)。", - "file.backend.error.batch_commit_unsupported": "目前資料庫型別不支援批次提交", - "file.backend.error.connection_export_file_too_large": "連線匯出檔案過大", - "file.backend.error.connection_import_file_too_large": "連線匯入檔案過大", - "file.backend.error.connection_package_decrypt_failed": "檔案密碼錯誤或檔案已損壞", - "file.backend.error.connection_package_password_required": "恢復包密碼不能為空", - "file.backend.error.connection_package_payload_too_large": "連線恢復包內容過大", - "file.backend.error.connection_package_unsupported": "不支援的連線恢復包格式", - "file.backend.error.database_name_required": "資料庫名稱不能為空", - "file.backend.error.directory_path_required": "目錄路徑不能為空", - "file.backend.error.export_unsupported_format": "不支援的匯出格式: {{format}}", - "file.backend.error.file_path_empty": "檔案路徑為空", - "file.backend.error.file_path_required": "檔案路徑不能為空", - "file.backend.error.import_file_empty": "檔案路徑不能為空", - "file.backend.error.import_csv_empty_or_missing_header": "CSV 為空或缺少標題列", - "file.backend.error.import_csv_open_failed": "無法開啟 CSV: {{detail}}", - "file.backend.error.import_csv_read_failed": "無法讀取 CSV: {{detail}}", - "file.backend.error.import_excel_empty_or_missing_header": "Excel 為空或缺少標題列", - "file.backend.error.import_excel_no_sheets": "Excel 檔案沒有工作表", - "file.backend.error.import_excel_parse_failed": "無法解析 Excel: {{detail}}", - "file.backend.error.import_excel_read_failed": "無法讀取 Excel: {{detail}}", - "file.backend.error.import_json_parse_failed": "無法解析 JSON: {{detail}}", - "file.backend.error.import_json_root_not_array": "JSON 根必須是陣列", - "file.backend.error.import_unsupported_format": "不支援的檔案格式", - "file.backend.error.invalid_export_mode": "無效的匯出模式", - "file.backend.error.mysql_workbench_no_connections": "未在 XML 中找到有效的連線設定", - "file.backend.error.mysql_workbench_parse_failed": "解析 MySQL Workbench XML 失敗: {{detail}}", - "file.backend.error.open_file_failed": "無法開啟檔案: {{detail}}", - "file.backend.error.query_required": "查詢語句不能為空", - "file.backend.error.read_file_error_summary": "檔案讀取錯誤: {{detail}}。已執行 {{count}} 條。", - "file.backend.error.read_file_info_failed": "無法讀取檔案資訊: {{detail}}", - "file.backend.error.selected_path_not_directory": "所選路徑不是目錄", - "file.backend.error.selected_path_not_sql_file": "所選路徑不是 SQL 檔案", - "file.backend.error.select_with_query_required": "僅支援 SELECT/WITH 查詢匯出", - "file.backend.error.task_not_found": "未找到該任務", - "file.backend.error.table_data_batch_limit": "單次最多處理 {{max}} 張表,目前選取 {{count}} 張", - "file.backend.error.table_data_clear_failed": "清空 {{table}} 失敗: {{detail}}", - "file.backend.error.table_data_clear_failed_partial": "清空 {{table}} 失敗: {{detail}}(注意:前 {{count}} 張表已清空且無法復原)", - "file.backend.error.table_data_mode_unsupported": "不支援的表資料清理模式: {{mode}}", - "file.backend.error.table_data_no_tables": "未指定要處理的表", - "file.backend.error.table_data_truncate_failed": "截斷 {{table}} 失敗: {{detail}}", - "file.backend.error.table_data_truncate_failed_partial": "截斷 {{table}} 失敗: {{detail}}(注意:前 {{count}} 張表已截斷且無法復原)", - "file.backend.error.table_data_truncate_unsupported": "目前資料庫型別 {{type}} 不支援截斷表,請改用清空表", - "file.backend.error.write_failed": "寫入失敗: {{detail}}", - "file.backend.message.cancel_requested": "已送出取消請求", - "file.backend.message.execution_cancelled": "執行已終止。已執行 {{executed}} 條,失敗 {{failed}} 條,耗時 {{duration}}。", - "file.backend.message.execution_completed": "執行完成。成功 {{success}} 條,失敗 {{failed}} 條,耗時 {{duration}}。", - "file.backend.message.execution_error_detail_header": "錯誤詳情(前 {{count}} 條):", - "file.backend.message.execution_more_errors": "...還有 {{count}} 條錯誤未顯示", - "file.backend.message.export_completed": "匯出完成", - "file.backend.message.import_no_data": "無可匯入資料", - "file.backend.message.import_row_failed": "第 {{index}} 列匯入失敗: {{detail}}", - "file.backend.message.import_summary": "已匯入: {{imported}}, 失敗: {{failed}}", - "file.backend.message.statement_failed": "第 {{index}} 條語句執行失敗: {{detail}}\n SQL: {{sql}}", - "file.backend.message.table_data_clear_succeeded": "清空成功", - "file.backend.message.table_data_truncate_succeeded": "截斷成功", - "file.backend.message.transaction_committed": "交易提交成功", - "file.backend.message.user_cancelled": "使用者取消執行", - "file.backend.filter.all_files": "所有檔案", - "file.backend.filter.all_files_pattern": "所有檔案 (*.*)", - "file.backend.filter.connection_package": "GoNavi 連線包 (*.gonavi-conn)", - "file.backend.filter.database_files": "資料庫檔案", - "file.backend.filter.data_files": "資料檔案", - "file.backend.filter.duckdb_files": "DuckDB 檔案", - "file.backend.filter.json_files": "JSON 檔案 (*.json)", - "file.backend.filter.mysql_workbench_connections": "MySQL Workbench 連線 (*.xml)", - "file.backend.filter.private_key_files": "私鑰檔案", - "file.backend.filter.sql_files": "SQL 檔案 (*.sql)", - "file.backend.filter.sqlite_files": "SQLite 檔案", - "ai_service.backend.message.provider_test_success": "端點連通性測試成功", - "ai_service.backend.error.provider_test_failed": "連線測試失敗: {{detail}}", - "ai_service.backend.error.provider_auth_failed": "API Key 無效或請求被拒絕 (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_status_failed": "端點返回異常狀態 (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_http_server_error": "上游伺服器返回內部錯誤 (HTTP {{status}}){{body}}", - "ai_service.backend.error.provider_request_create_failed": "建立請求失敗: {{detail}}", - "ai_service.backend.error.provider_request_serialize_failed": "序列化請求失敗: {{detail}}", - "ai_service.backend.error.provider_secret_read_failed": "讀取 Provider secret 失敗: {{detail}}", - "ai_service.backend.error.provider_secret_save_failed": "儲存 Provider secret 失敗: {{detail}}", - "ai_service.backend.error.provider_secret_saved_read_failed": "讀取已儲存 Provider secret 失敗: {{detail}}", - "ai_service.backend.error.provider_secret_delete_failed": "刪除 Provider secret 失敗: {{detail}}", - "ai_service.backend.error.provider_secret_load_failed": "載入 AI Provider secret 失敗(provider={{provider}}): {{detail}}", - "ai_service.backend.error.config_rewrite_failed": "重寫 AI 設定失敗: {{detail}}", - "ai_service.backend.error.config_read_failed": "讀取 AI 設定失敗: {{detail}}", - "ai_service.backend.error.config_load_failed": "載入 AI 設定失敗: {{detail}}", - "ai_service.backend.error.config_serialize_failed": "序列化 AI 設定失敗: {{detail}}", - "ai_service.backend.error.config_dir_create_failed": "建立設定目錄失敗: {{detail}}", - "ai_service.backend.error.config_write_failed": "寫入 AI 設定失敗: {{detail}}", - "ai_service.backend.error.daily_secret_store_unavailable": "日常密文儲存不可用: {{detail}}", - "ai_service.backend.error.secret_store_unavailable": "密文儲存不可用: {{detail}}", - "ai_service.backend.error.provider_secret_bundle_parse_failed": "解析 provider secret bundle 失敗: {{detail}}", - "ai_service.backend.error.models_request_create_failed": "建立模型列表請求失敗: {{detail}}", - "ai_service.backend.error.models_request_failed": "請求模型列表失敗: {{detail}}", - "ai_service.backend.error.models_http_status_failed": "模型列表端點返回異常狀態 (HTTP {{status}}){{body}}", - "ai_service.backend.error.models_parse_failed": "解析模型列表失敗: {{detail}}", - "ai_service.backend.error.active_provider_not_found": "未找到作用中的 AI Provider", - "ai_service.backend.error.editable_provider_not_found": "未找到要編輯的 AI Provider: {{detail}}", - "ai_service.backend.error.provider_not_configured": "未設定 AI Provider,請先在設定中設定。", - "ai_service.backend.error.volcengine_coding_models_empty": "目前接口未返回可用的火山 Coding Plan 模型,請檢查帳號權限或切換到「火山方舟」供應商", - "ai_service.backend.error.session_missing": "會話不存在", - "ai_service.backend.error.session_corrupt": "會話資料損壞", - "ai_service.backend.error.sessions_dir_create_failed": "建立 sessions 目錄失敗: {{detail}}", - "ai_service.backend.error.session_serialize_failed": "序列化會話資料失敗: {{detail}}", - "ai_service.backend.error.session_write_failed": "儲存會話失敗: {{detail}}", - "ai_service.backend.error.session_delete_failed": "刪除會話失敗: {{detail}}", - "ai_service.backend.warning.sql_drop": "高危 SQL:DROP 語句會永久刪除資料庫物件", - "ai_service.backend.warning.sql_truncate": "高危 SQL:TRUNCATE 會清空表中所有資料", - "ai_service.backend.warning.sql_delete_without_where": "高危 SQL:DELETE 語句缺少 WHERE 條件,將刪除所有資料", - "ai_service.backend.warning.sql_update_without_where": "高危 SQL:UPDATE 語句缺少 WHERE 條件,將更新所有記錄", - "jvm_monitoring_charts.title.heap": "堆記憶體", - "jvm_monitoring_charts.title.gc": "垃圾回收", - "jvm_monitoring_charts.title.threads": "執行緒", - "jvm_monitoring_charts.title.classes": "類別載入", - "jvm_monitoring_charts.empty.heap.no_samples": "暫無堆記憶體採樣資料", - "jvm_monitoring_charts.empty.heap.metric_unavailable": "目前監控來源未提供堆記憶體指標", - "jvm_monitoring_charts.empty.gc.no_samples": "暫無垃圾回收採樣資料", - "jvm_monitoring_charts.empty.gc.metric_unavailable": "目前監控來源未提供垃圾回收指標", - "jvm_monitoring_charts.empty.threads.no_samples": "暫無執行緒採樣資料", - "jvm_monitoring_charts.empty.threads.metric_unavailable": "目前監控來源未提供執行緒指標", - "jvm_monitoring_charts.empty.classes.no_samples": "暫無類別載入採樣資料", - "jvm_monitoring_charts.empty.classes.metric_unavailable": "目前監控來源未提供類別載入指標", - "jvm_monitoring_charts.legend.heap_used": "堆記憶體已使用", - "jvm_monitoring_charts.legend.heap_committed": "堆記憶體已提交", - "jvm_monitoring_charts.legend.gc_count": "垃圾回收次數", - "jvm_monitoring_charts.legend.gc_time_ms": "垃圾回收耗時(ms)", - "jvm_monitoring_charts.legend.thread_count": "執行緒數", - "jvm_monitoring_charts.legend.daemon_thread_count": "守護執行緒數", - "jvm_monitoring_charts.legend.peak_thread_count": "執行緒峰值", - "jvm_monitoring_charts.legend.loaded_classes": "已載入類別", - "jvm_monitoring_charts.legend.unloaded_classes": "已卸載類別", - "jvm_monitoring_status_cards.title.heap": "堆記憶體", - "jvm_monitoring_status_cards.title.gc_pressure": "垃圾回收壓力", - "jvm_monitoring_status_cards.title.threads": "執行緒", - "jvm_monitoring_status_cards.title.classes": "類別載入", - "jvm_monitoring_status_cards.meta.heap_committed": "已提交 {{value}}", - "jvm_monitoring_status_cards.meta.waiting_samples": "等待採樣", - "jvm_monitoring_status_cards.meta.gc_total_time": "累計 {{value}}", - "jvm_monitoring_status_cards.meta.thread_peak": "峰值 {{value}}", - "jvm_monitoring_status_cards.status.sampling": "採樣中", - "jvm_monitoring_status_cards.status.stopped": "未執行", - "jvm_monitoring_status_cards.thread_state.runnable_count": "可執行 {{count}}", - "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "排障指標", - "jvm_monitoring_detail_panel.title.thread_state_distribution": "執行緒狀態分布", - "jvm_monitoring_detail_panel.title.recent_gc_details": "最近垃圾回收明細", - "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "能力與降級", - "jvm_monitoring_detail_panel.field.process_cpu": "行程 CPU", - "jvm_monitoring_detail_panel.field.system_cpu": "系統 CPU", - "jvm_monitoring_detail_panel.field.process_physical_memory": "行程實體記憶體", - "jvm_monitoring_detail_panel.field.process_virtual_memory": "行程虛擬記憶體", - "jvm_monitoring_detail_panel.memory_missing.title": "行程實體記憶體缺失原因", - "jvm_monitoring_detail_panel.memory_missing.jmx": "JMX 連線未暴露行程駐留實體記憶體屬性,目前只能讀取行程虛擬記憶體指標;如需行程實體記憶體,請切換到 HTTP 端點或增強代理採集。", - "jvm_monitoring_detail_panel.memory_missing.default": "目前監控來源未返回行程駐留實體記憶體指標;請確認 HTTP 端點或增強代理已採集並上報行程實體記憶體。", - "jvm_monitoring_detail_panel.empty.thread_states": "暫無執行緒狀態採樣", - "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "目前監控來源未提供事件級垃圾回收資料", - "jvm_monitoring_detail_panel.empty.recent_gc_events": "最近視窗暫無垃圾回收事件", - "jvm_monitoring_detail_panel.gc.before": "回收前", - "jvm_monitoring_detail_panel.gc.after": "回收後", - "jvm_monitoring_presentation.metric.heap_used": "堆積記憶體", - "jvm_monitoring_presentation.metric.heap_non_heap": "非堆積記憶體", - "jvm_monitoring_presentation.metric.gc_count": "垃圾回收次數", - "jvm_monitoring_presentation.metric.gc_time": "垃圾回收耗時", - "jvm_monitoring_presentation.metric.gc_events": "最近垃圾回收事件", - "jvm_monitoring_presentation.metric.thread_count": "執行緒數", - "jvm_monitoring_presentation.metric.thread_states": "執行緒狀態", - "jvm_monitoring_presentation.metric.class_loading": "類別載入", - "jvm_monitoring_presentation.metric.cpu_process": "行程 CPU", - "jvm_monitoring_presentation.metric.cpu_system": "系統 CPU", - "jvm_monitoring_presentation.metric.memory_rss": "行程實體記憶體", - "jvm_monitoring_presentation.metric.memory_virtual": "行程虛擬記憶體", - "jvm_monitoring_presentation.thread_state.new": "新建", - "jvm_monitoring_presentation.thread_state.runnable": "可執行", - "jvm_monitoring_presentation.thread_state.blocked": "封鎖", - "jvm_monitoring_presentation.thread_state.waiting": "等待中", - "jvm_monitoring_presentation.thread_state.timed_waiting": "限時等待", - "jvm_monitoring_presentation.thread_state.terminated": "已終止", - "jvm_monitoring_presentation.availability.missing_metrics": "缺失指標:{{metrics}}", - "jvm_monitoring_presentation.availability.provider_warnings": "監控來源告警:{{warnings}}", - "jvm_monitoring_presentation.availability.no_obvious_degradation": "目前監控工作階段未發現明顯降級。", - "jvm_change_preview_modal.title": "JVM 變更預覽", - "jvm_change_preview_modal.status.no_preview": "暫無預覽結果", - "jvm_change_preview_modal.status.generated": "預覽已產生", - "jvm_change_preview_modal.action.confirm_execute": "確認執行", - "jvm_change_preview_modal.action.close": "關閉", - "jvm_change_preview_modal.section.summary": "變更摘要", - "jvm_change_preview_modal.section.before": "變更前", - "jvm_change_preview_modal.section.after": "變更後", - "jvm_change_preview_modal.field.resource_id": "資源 ID", - "jvm_change_preview_modal.field.version": "版本", - "jvm_change_preview_modal.field.format": "格式", - "jvm_change_preview_modal.risk.label": "風險 {{level}}", - "jvm_change_preview_modal.risk.low": "低", - "jvm_change_preview_modal.risk.medium": "中", - "jvm_change_preview_modal.risk.high": "高", - "jvm_change_preview_modal.risk.unknown": "未知", - "jvm_change_preview_modal.permission.requires_confirmation": "需要確認", - "jvm_change_preview_modal.permission.allowed": "允許執行", - "jvm_change_preview_modal.permission.forbidden": "禁止執行", - "jvm_change_preview_modal.blocking.label": "阻斷原因", - "jvm_change_preview_modal.blocking.alert_message": "目前變更不可執行", - "jvm_diagnostic.completion.category.observe": "觀察類命令", - "jvm_diagnostic.completion.category.trace": "追蹤類命令", - "jvm_diagnostic.completion.category.mutating": "高風險命令", - "jvm_diagnostic.completion.category.control": "控制命令", - "jvm_diagnostic.completion.preset.category.observe": "觀察類命令", - "jvm_diagnostic.completion.preset.category.trace": "追蹤類命令", - "jvm_diagnostic.completion.preset.category.mutating": "高風險命令", - "jvm_diagnostic.completion.preset.thread-top.documentation": "查看最繁忙執行緒,快速定位阻塞或高 CPU 執行緒。", - "jvm_diagnostic.completion.preset.dashboard.documentation": "查看 JVM 執行總覽。", - "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "追蹤慢方法呼叫路徑。", - "jvm_diagnostic.completion.preset.watch-return.documentation": "觀察入參與回傳值。", - "jvm_diagnostic.completion.preset.ognl-sample.documentation": "高風險表達式命令,預設僅作示意。", - "jvm_diagnostic.completion.command.dashboard.documentation": "查看 JVM 執行總覽。", - "jvm_diagnostic.completion.command.jvm.documentation": "查看 JVM 記憶體、執行緒、類別載入、GC 和執行參數資訊。", - "jvm_diagnostic.completion.command.thread.documentation": "查看熱點執行緒、執行緒堆疊和阻塞執行緒。", - "jvm_diagnostic.completion.command.sc.documentation": "搜尋匹配類別資訊。", - "jvm_diagnostic.completion.command.sm.documentation": "查看類別的方法簽名。", - "jvm_diagnostic.completion.command.jad.documentation": "反編譯指定類別。", - "jvm_diagnostic.completion.command.sysprop.documentation": "查看系統屬性。", - "jvm_diagnostic.completion.command.sysenv.documentation": "查看環境變數。", - "jvm_diagnostic.completion.command.classloader.documentation": "查看類別載入器資訊。", - "jvm_diagnostic.completion.command.trace.documentation": "追蹤方法呼叫耗時路徑。", - "jvm_diagnostic.completion.command.watch.documentation": "觀察入參、回傳值或例外。", - "jvm_diagnostic.completion.command.stack.documentation": "輸出方法呼叫堆疊。", - "jvm_diagnostic.completion.command.monitor.documentation": "週期性統計方法呼叫。", - "jvm_diagnostic.completion.command.tt.documentation": "方法時光隧道,記錄和回放呼叫。", - "jvm_diagnostic.completion.command.ognl.documentation": "執行 OGNL 表達式,預設需要額外授權。", - "jvm_diagnostic.completion.command.vmtool.documentation": "直接操作 JVM 物件或執行 VMTool 動作。", - "jvm_diagnostic.completion.command.redefine.documentation": "重新定義類別位元碼。", - "jvm_diagnostic.completion.command.retransform.documentation": "重新觸發類別轉換。", - "jvm_diagnostic.completion.command.stop.documentation": "停止目前背景任務。", - "jvm_diagnostic.completion.detail.execute_directly": "直接執行", - "jvm_diagnostic.completion.detail.thread_option": "執行緒參數", - "jvm_diagnostic.completion.detail.class_search_template": "類別搜尋範本", - "jvm_diagnostic.completion.detail.method_search_template": "方法搜尋範本", - "jvm_diagnostic.completion.detail.decompile_template": "反編譯範本", - "jvm_diagnostic.completion.detail.system_property_template": "系統屬性範本", - "jvm_diagnostic.completion.detail.environment_variable_template": "環境變數範本", - "jvm_diagnostic.completion.detail.classloader_template": "類別載入器範本", - "jvm_diagnostic.completion.detail.trace_template": "追蹤範本", - "jvm_diagnostic.completion.detail.trace_option": "追蹤參數", - "jvm_diagnostic.completion.detail.watch_template": "觀察範本", - "jvm_diagnostic.completion.detail.watch_option": "觀察參數", - "jvm_diagnostic.completion.detail.stack_template": "呼叫堆疊範本", - "jvm_diagnostic.completion.detail.monitor_template": "監控範本", - "jvm_diagnostic.completion.detail.time_tunnel_template": "時光隧道範本", - "jvm_diagnostic.completion.detail.high_risk_template": "高風險範本", - "jvm_diagnostic.completion.argument.command_template.label": "{{command}} 範本", - "jvm_diagnostic.completion.argument.detail_mode_d.label": "詳細模式 (-d)", - "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", - "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "查看目前 JVM 執行總覽。", - "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", - "jvm_diagnostic.completion.argument.jvm.direct.documentation": "查看 JVM 記憶體、執行緒、類別載入、GC 和執行參數資訊。", - "jvm_diagnostic.completion.argument.thread.busy_top.label": "繁忙執行緒 TOP N (-n)", - "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "查看 CPU 最繁忙的前 N 個執行緒。", - "jvm_diagnostic.completion.argument.thread.blocking.label": "阻塞執行緒 (-b)", - "jvm_diagnostic.completion.argument.thread.blocking.documentation": "查找目前阻塞其他執行緒的執行緒。", - "jvm_diagnostic.completion.argument.thread.thread_id.label": "指定執行緒 ID", - "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "查看指定執行緒的詳細堆疊資訊。", - "jvm_diagnostic.completion.argument.sc.class_pattern.label": "類別匹配範本", - "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "依類別名稱模式搜尋。", - "jvm_diagnostic.completion.argument.sc.detail.documentation": "輸出類別詳細資訊。", - "jvm_diagnostic.completion.argument.sm.method_signature.label": "方法簽名範本", - "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "查看類別的方法簽名。", - "jvm_diagnostic.completion.argument.sm.detail.documentation": "輸出方法詳細簽名。", - "jvm_diagnostic.completion.argument.jad.template.label": "反編譯範本", - "jvm_diagnostic.completion.argument.jad.template.documentation": "反編譯指定類別。", - "jvm_diagnostic.completion.argument.sysprop.property.label": "查看屬性", - "jvm_diagnostic.completion.argument.sysprop.property.documentation": "讀取指定系統屬性。", - "jvm_diagnostic.completion.argument.sysenv.variable.label": "查看環境變數", - "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "讀取指定環境變數。", - "jvm_diagnostic.completion.argument.classloader.tree.label": "樹狀檢視 (-t)", - "jvm_diagnostic.completion.argument.classloader.tree.documentation": "輸出類別載入器樹狀結構。", - "jvm_diagnostic.completion.argument.classloader.url_stat.label": "全部 URL 統計 (--url-stat)", - "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "查看類別載入器 URL 統計。", - "jvm_diagnostic.completion.argument.classloader.hash.label": "指定類別載入器 Hash", - "jvm_diagnostic.completion.argument.classloader.hash.documentation": "查看指定類別載入器詳情。", - "jvm_diagnostic.completion.argument.trace.template.documentation": "追蹤慢方法呼叫鏈路。", - "jvm_diagnostic.completion.argument.trace.condition.label": "條件過濾 '#cost > 100'", - "jvm_diagnostic.completion.argument.trace.condition.documentation": "追加 trace 條件表達式。", - "jvm_diagnostic.completion.argument.watch.template.documentation": "觀察入參、回傳值或例外。", - "jvm_diagnostic.completion.argument.watch.expand_depth.label": "展開層級 -x 2", - "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "設定物件展開層級。", - "jvm_diagnostic.completion.argument.stack.template.documentation": "輸出方法呼叫堆疊。", - "jvm_diagnostic.completion.argument.monitor.template.documentation": "按週期統計方法呼叫情況。", - "jvm_diagnostic.completion.argument.tt.record.label": "tt 錄製範本", - "jvm_diagnostic.completion.argument.tt.record.documentation": "錄製指定方法呼叫。", - "jvm_diagnostic.completion.argument.tt.list.label": "查看記錄列表 (-l)", - "jvm_diagnostic.completion.argument.tt.list.documentation": "查看目前錄製列表。", - "jvm_diagnostic.completion.argument.tt.replay.label": "回放記錄 (-i)", - "jvm_diagnostic.completion.argument.tt.replay.documentation": "查看指定記錄詳情。", - "jvm_diagnostic.completion.argument.ognl.template.documentation": "執行 OGNL 表達式,高風險命令預設受策略限制。", - "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", - "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "取得指定類別實例,高風險命令預設受策略限制。", - "jvm_diagnostic.completion.argument.redefine.template.documentation": "重新定義類別位元碼檔案路徑。", - "jvm_diagnostic.completion.argument.retransform.template.documentation": "重新轉換指定類別。", - "jvm_diagnostic.completion.argument.stop.direct.label": "stop", - "jvm_diagnostic.completion.argument.stop.direct.documentation": "停止目前背景任務。", - "app.about.action.open_install_directory": "開啟安裝目錄", - "app.about.action.install_update": "安裝更新", - "app.about.action.hide_to_background": "隱藏到背景", - "app.about.download_progress.title": "下載更新", - "app.about.download_progress.title_with_version": "下載更新 {{version}}", - "app.about.update_status.not_checked": "尚未檢查", - "app.about.update_status.checking": "正在檢查更新...", - "app.about.update_status.check_failed": "檢查更新失敗: {{error}}", - "app.about.update_status.new_version_downloaded": "發現新版本 {{version}}(已下載,請點擊「下載進度」後安裝)", - "app.about.update_status.new_version_not_downloaded": "發現新版本 {{version}}(未下載)", - "app.about.update_status.latest": "目前已是最新版本({{version}})", - "app.about.message.update_package_ready": "更新套件已就緒({{version}})", - "app.about.message.update_package_ready_with_path": "更新套件已就緒({{version}}),路徑:{{path}}", - "app.about.message.download_completed": "更新下載完成", - "app.about.message.download_completed_with_path": "更新下載完成,更新套件路徑:{{path}}", - "app.about.message.download_failed_with_error": "更新下載失敗: {{error}}", - "app.about.message.install_directory_opened_manual_replace": "已開啟安裝目錄,請手動完成替換", - "app.about.message.open_install_directory_failed_with_error": "開啟安裝目錄失敗: {{error}}", - "app.about.message.install_failed_with_error": "更新安裝失敗: {{error}}", - "app.about.message.check_failed_with_error": "檢查更新失敗: {{error}}", - "app.about.message.new_version_found": "發現新版本 {{version}}", - "app.theme.font_family.title": "字型族", - "app.theme.font_family.ui_title": "介面字型 (UI Font Family)", - "app.theme.font_family.mono_title": "程式碼字型 (Mono Font Family)", - "app.theme.font_family.load_failed": "載入系統字型失敗", - "app.theme.font_family.load_failed_fallback": "系統字型載入失敗,目前回退到常見字型預設:{{error}}", - "app.theme.font_family.loaded_ui_hint": "已讀取目前系統 {{count}} 個字型族,支援輸入搜尋比對。清空後回退預設 UI 字型。", - "app.theme.font_family.loading_ui_hint": "依目前系統即時載入已安裝字型,支援輸入搜尋比對。清空後回退預設 UI 字型。", - "app.theme.font_family.mono_fallback_hint": "目前已回退到常見程式碼字型預設。作用於 SQL 編輯器、AI 程式碼區塊、日誌、DDL 與資料表等寬內容。", - "app.theme.font_family.mono_hint": "優先顯示目前系統已安裝字型,名稱接近 Mono/Code/Console 的字型會排在前面。作用於 SQL 編輯器、AI 程式碼區塊、日誌、DDL 與資料表等寬內容。", - "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux 未偵測到中文 CJK 字體,介面可能顯示方框。請安裝:", - "app.theme.font_family.linux_cjk_install_suffix": ",然後重新啟動 GoNavi。", - "app.linux_cjk_font_banner.title": "Linux CJK 字體缺失", - "app.linux_cjk_font_banner.description": "中文可能顯示為方框。請安裝字體後重新啟動 GoNavi:", - "app.linux_cjk_font_banner.action.open_font_settings": "字體設定", - "app.theme.data_table.density": "表格密度", - "app.theme.data_table.density.comfortable": "舒適", - "app.theme.data_table.density.standard": "標準", - "app.theme.data_table.density.compact": "緊湊", - "app.theme.data_table.density_hint": "控制列高、欄寬和內距。舒適適合大螢幕細看;緊湊適合最大化資訊密度。已手動拖曳的欄寬會優先保留。", - "app.theme.data_table.font_size": "資料表字型大小", - "app.theme.data_table.sidebar_tree_font_size": "左側庫表字型大小", - "app.theme.data_table.follow_global": "跟隨全域", - "sidebar.message.operation_rename_failed": "重新命名失敗:{{error}}", - "sidebar.message.operation_drop_failed": "刪除失敗:{{error}}", - "sidebar.v2_database_menu.meta": "{{dialect}} · 資料庫操作", - "sidebar.v2_database_menu.new_schema": "新建模式", - "sidebar.v2_database_menu.new_materialized_view": "新建物化檢視", - "sidebar.v2_database_menu.new_external_catalog": "新建外部 Catalog", - "sidebar.v2_database_menu.refresh_object_tree": "重新整理物件樹", - "sidebar.v2_database_menu.export_backup_section": "匯出與備份", - "sidebar.v2_database_menu.export_all_table_schema_sql": "匯出全部資料表結構 · SQL", - "sidebar.v2_database_menu.backup_all_tables_sql": "備份全部資料表 · 結構 + 資料 SQL", - "ai_settings.message.load_provider_failed": "讀取供應商設定失敗", - "data_sync.field.schema": "模式", - "data_sync.message.fetch_target_schemas_failed_detail": "取得目標模式失敗: {{detail}}", - "data_sync.message.select_target_schema": "請選擇目標模式", - "connection_modal.field.readOnly.label": "正式連線保護", - "connection_modal.field.readOnly.help": "啟用後目前連線僅允許查詢,禁止匯入、結構變更、資料寫入與作為同步目標。", - "connection_modal.field.readOnly.checkbox": "標記為正式連線,只允許查詢", - "query_editor.message.connection_readonly_blocked": "目前連線已啟用正式保護,僅允許執行查詢操作。", - "query_editor.results_panel.message.action.copy": "複製", - "query_editor.results_panel.message.copy_unsupported": "目前環境不支援複製到剪貼簿", - "query_editor.results_panel.message.copy_failed": "複製訊息失敗:{{detail}}", "ai_chat.builtin_tools.database.execute_sql.desc": "执行 SQL 查询并返回结果", "ai_chat.builtin_tools.database.execute_sql.detail": "传入 connectionId、dbName 和 sql,在目标数据库上执行 SQL 并返回结果(最多 50 行)。受安全级别控制,只读模式下仅允许 SELECT/SHOW/DESCRIBE。", "ai_chat.builtin_tools.database.execute_sql.parameters.connectionId.description": "连接ID", @@ -5037,7 +178,38 @@ "ai_chat.builtin_tools.flows.upstream_request.title": "追踪 AI 上游请求", "ai_chat.builtin_tools.flows.workspace_tabs.description": "适合先看当前打开了哪些 SQL / 表 / 命令页签,再切到目标页签继续做字段核对、对比分析和只读验证。", "ai_chat.builtin_tools.flows.workspace_tabs.title": "盘点当前工作区", + "ai_chat.composer_notice.missing_model.description": "開啟下方模型下拉選單並選擇模型;若清單為空,請檢查供應商入口與 API Key。", + "ai_chat.composer_notice.missing_model.title": "請先選擇模型", + "ai_chat.composer_notice.missing_provider.description": "請先在 AI 設定中新增並啟用一個模型供應商。", + "ai_chat.composer_notice.missing_provider.title": "尚無可用供應商", + "ai_chat.composer_notice.model_fetch_failed.default_description": "請檢查供應商入口、API Key 或帳號權限,然後重新開啟模型下拉選單。", + "ai_chat.composer_notice.model_fetch_failed.detail_description": "供應商返回:{{detail}}", + "ai_chat.composer_notice.model_fetch_failed.title": "模型清單載入失敗", + "ai_chat.header.action.export": "匯出", + "ai_chat.header.default_session_title": "新對話", + "ai_chat.header.export_time": "匯出時間:", + "ai_chat.header.export_user": "你", + "ai_chat.header.mode_tabs.aria_label": "AI 工作模式", + "ai_chat.header.mode.chat": "對話", + "ai_chat.header.mode.history": "歷史", + "ai_chat.header.mode.insights": "自動洞察", + "ai_chat.header.session.connected": "{{title}} · 已連線", + "ai_chat.header.tooltip.close": "關閉面板", + "ai_chat.header.tooltip.export_markdown": "匯出為 Markdown", + "ai_chat.header.tooltip.history": "歷史對話", + "ai_chat.header.tooltip.new_chat": "新對話", + "ai_chat.header.tooltip.new_chat_clear": "新對話(清空目前內容)", + "ai_chat.header.tooltip.settings": "AI 設定", + "ai_chat.history.action.new_chat": "開啟新對話", + "ai_chat.history.default_session_title": "新對話", "ai_chat.history.empty.no_history": "還沒有歷史對話", + "ai_chat.history.empty.no_matches": "沒有相符的對話記錄", + "ai_chat.history.search.placeholder": "搜尋歷史記錄...", + "ai_chat.history.title": "對話歷史", + "ai_chat.history.tooltip.collapse": "收合", + "ai_chat.history.tooltip.delete": "刪除", + "ai_chat.input.action.send": "傳送", + "ai_chat.input.action.stop": "停止產生", "ai_chat.input.attachment.excel.worksheet_header": "[工作表: {{sheetName}}]", "ai_chat.input.attachment.kind.document": "檔案", "ai_chat.input.attachment.kind.excel": "Excel", @@ -5069,8 +241,10 @@ "ai_chat.input.attachment.warning.too_large": "檔案超過 {{size}},已附加檔案資訊但未讀取正文。", "ai_chat.input.attachment.warning.unsupported_type": "目前已附加此檔案類型,但尚未擷取正文;如需模型分析內容,請改用 markdown、txt、docx、xlsx 或 pdf。", "ai_chat.input.context.add": "新增", + "ai_chat.input.context.connection_tooltip": "目前資料查詢上下文", "ai_chat.input.context.current_count": "目前上下文 · {{count}}", "ai_chat.input.context.label": "關聯上下文", + "ai_chat.input.context.memory_tooltip": "目前工作階段記憶已用字元。達到 {{limit}} 限制時會觸發自動壓縮。", "ai_chat.input.context.selector.cancel": "取消", "ai_chat.input.context.selector.confirm": "同步所選資料表到上下文", "ai_chat.input.context.selector.database_placeholder": "切換資料庫", @@ -5080,7 +254,25 @@ "ai_chat.input.context.selector.search_placeholder": "在目前資料庫搜尋資料表名稱...", "ai_chat.input.context.selector.select_all": "全選符合的資料表({{count}})", "ai_chat.input.context.selector.title": "關聯資料表結構上下文", + "ai_chat.input.context.tag_label": "關聯上下文({{count}})", + "ai_chat.input.message.context_added": "已將 {{count}} 張資料表結構加入上下文", + "ai_chat.input.message.context_load_failed": "載入資料表上下文失敗:{{detail}}", + "ai_chat.input.message.context_removed": "已從上下文移除 {{count}} 張資料表結構", "ai_chat.input.message.context_sync_failed": "同步 AI 上下文失敗:{{detail}}", + "ai_chat.input.message.context_synced": "上下文已同步:新增 {{added}},移除 {{removed}}", + "ai_chat.input.message.fetch_table_schema_failed": "取得資料表 {{table}} 結構失敗:{{detail}}", + "ai_chat.input.message.fetch_tables_failed": "取得資料表失敗:{{detail}}", + "ai_chat.input.message.select_database_context_first": "請先在左側選取一個資料庫作為對話上下文", + "ai_chat.input.message.selection_unchanged": "選取的資料表沒有變更", + "ai_chat.input.modal.empty_tables": "找不到符合「{{query}}」的資料表", + "ai_chat.input.modal.invert_matching": "反選符合結果", + "ai_chat.input.modal.ok": "同步所選資料表至上下文", + "ai_chat.input.modal.search_table.placeholder": "在目前資料庫搜尋資料表名稱...", + "ai_chat.input.modal.select_all_matching": "全選符合的資料表({{count}})", + "ai_chat.input.modal.switch_database.placeholder": "切換資料庫", + "ai_chat.input.modal.title": "關聯資料庫表結構上下文", + "ai_chat.input.model.placeholder": "選擇模型", + "ai_chat.input.placeholder": "輸入訊息...({{shortcut}},Shift+Enter 換行,/ 快捷命令)", "ai_chat.input.placeholder_compact": "輸入訊息... {{shortcut}} · / 命令", "ai_chat.input.shortcut.disabled": "快捷鍵傳送已關閉", "ai_chat.input.shortcut.send_with_combo": "{{shortcut}} 傳送", @@ -5110,11 +302,17 @@ "ai_chat.input.slash.connfail.keywords": "連線失敗|冷卻|驗證失敗|ssh|mysql", "ai_chat.input.slash.connfail.label": "🧯 連線失敗探針", "ai_chat.input.slash.connfail.prompt": "請先呼叫 inspect_recent_connection_failures,幫我總結最近資料庫連線失敗、連線冷卻、驗證失敗與 SSH 隧道異常的真實日誌結論;如果已經有明確地址或類型,再結合 inspect_current_connection 或 inspect_saved_connections 繼續縮小範圍。", + "ai_chat.input.slash.diff.desc": "比較兩張資料表差異並產生變更", "ai_chat.input.slash.diff.keywords": "diff|遷移|alter", + "ai_chat.input.slash.diff.label": "🔄 資料表比較", + "ai_chat.input.slash.diff.prompt": "請比較以下兩張資料表的結構差異,並產生從舊版本遷移到新版本的 ALTER 語句:", "ai_chat.input.slash.empty.description": "可以先試試這些常用入口,快速進到 SQL 生成、AI 體檢或 MCP 排查。", "ai_chat.input.slash.empty.summary": "目前共提供 {{count}} 個 slash 命令,支援按命令名稱、說明或關鍵字搜尋。", "ai_chat.input.slash.empty.title": "沒有符合的快捷命令", + "ai_chat.input.slash.explain.desc": "解釋選取 SQL 的邏輯", "ai_chat.input.slash.explain.keywords": "解釋|sql|邏輯", + "ai_chat.input.slash.explain.label": "💡 解釋 SQL", + "ai_chat.input.slash.explain.prompt": "請解釋以下 SQL 的執行邏輯和每一步的作用:\n```sql\n\n```", "ai_chat.input.slash.health.desc": "呼叫體檢探針總覽目前 AI 設定", "ai_chat.input.slash.health.keywords": "health|體檢|ai設定|探針", "ai_chat.input.slash.health.label": "🩺 AI 設定體檢", @@ -5123,7 +321,10 @@ "ai_chat.input.slash.hotspots.keywords": "大檔案|臃腫|拆分|重構|hotspots|程式碼熱點|幾千行", "ai_chat.input.slash.hotspots.label": "🧱 程式碼熱點", "ai_chat.input.slash.hotspots.prompt": "請先呼叫 inspect_codebase_hotspots,讀取目前 GoNavi 前端大檔熱點、建議拆分切片與測試目標,再告訴我下一步最適合拆哪個檔案、拆到什麼邊界,以及要跑哪些驗證。關鍵字:", + "ai_chat.input.slash.index.desc": "推薦最佳索引方案", "ai_chat.input.slash.index.keywords": "index|索引|慢查詢", + "ai_chat.input.slash.index.label": "📊 索引建議", + "ai_chat.input.slash.index.prompt": "請基於目前表結構和常見查詢情境,推薦最佳索引方案並提供建表語句:", "ai_chat.input.slash.mcp.desc": "檢查 MCP 服務與外部客戶端狀態", "ai_chat.input.slash.mcp.keywords": "mcp|codex|claude|openclaw|hermans|外部客戶端", "ai_chat.input.slash.mcp.label": "🪛 排查 MCP 接入", @@ -5144,19 +345,34 @@ "ai_chat.input.slash.mcptool.keywords": "mcp工具|mcp工具參數|schema|arguments|參數|工具呼叫|inputschema", "ai_chat.input.slash.mcptool.label": "🧩 MCP 工具參數", "ai_chat.input.slash.mcptool.prompt": "請先呼叫 inspect_mcp_setup 找到目前已發現的 MCP 工具 alias;如果我已經給了工具名或關鍵字,再呼叫 inspect_mcp_tool_schema 讀取對應 inputSchema,告訴我必填參數、欄位型別、列舉值、巢狀路徑,以及 arguments JSON 應該怎麼寫。", + "ai_chat.input.slash.mock.desc": "產生 INSERT 測試資料", "ai_chat.input.slash.mock.keywords": "mock|測試資料|insert", + "ai_chat.input.slash.mock.label": "🎲 造測試資料", + "ai_chat.input.slash.mock.prompt": "請為目前關聯的資料表產生 10 條符合業務語意的測試資料 INSERT 語句:", + "ai_chat.input.slash.optimize.desc": "分析 SQL 效能瓶頸", "ai_chat.input.slash.optimize.keywords": "最佳化|索引|效能", + "ai_chat.input.slash.optimize.label": "⚡ 最佳化分析", + "ai_chat.input.slash.optimize.prompt": "請分析以下 SQL 的效能問題,並提供最佳化後的版本:\n```sql\n\n```", + "ai_chat.input.slash.query.desc": "用自然語言描述想查詢的內容", "ai_chat.input.slash.query.keywords": "查詢|自然語言|查資料", + "ai_chat.input.slash.query.label": "🔍 自然語言查詢", + "ai_chat.input.slash.query.prompt": "幫我寫一條 SQL 查詢:", "ai_chat.input.slash.safety.desc": "確認唯讀/寫入邊界和 allowMutating", "ai_chat.input.slash.safety.keywords": "安全|唯讀|allowmutating|ddl|dml", "ai_chat.input.slash.safety.label": "🛡️ 查看寫入安全", "ai_chat.input.slash.safety.prompt": "請先呼叫 inspect_ai_safety,告訴我目前 AI 和 GoNavi MCP 的寫入邊界、是否唯讀,以及 execute_sql 是否需要 allowMutating。", + "ai_chat.input.slash.schema.desc": "評審資料表結構設計品質", "ai_chat.input.slash.schema.keywords": "schema|表結構|設計", + "ai_chat.input.slash.schema.label": "🏗️ 資料表設計評審", + "ai_chat.input.slash.schema.prompt": "請全面評審目前關聯表的設計,包括欄位型別、正規化、索引策略等方面的改進建議:", "ai_chat.input.slash.shortcuts.desc": "讀取目前 Win/Mac 快捷鍵設定", "ai_chat.input.slash.shortcuts.keywords": "快捷鍵|shortcuts|結果區|mac|windows", "ai_chat.input.slash.shortcuts.label": "⌨️ 快捷鍵探針", "ai_chat.input.slash.shortcuts.prompt": "請先呼叫 inspect_shortcuts,告訴我目前 GoNavi 的快捷鍵設定,尤其是執行 SQL、切換結果區、打開 AI 面板與 AI 發送訊息這些動作在目前平台和另一平台分別怎麼按,是否改過預設值。", + "ai_chat.input.slash.sql.desc": "描述需求並自動產生語句", "ai_chat.input.slash.sql.keywords": "sql|產生|查詢語句", + "ai_chat.input.slash.sql.label": "📝 產生 SQL", + "ai_chat.input.slash.sql.prompt": "請根據以下需求產生 SQL:", "ai_chat.input.slash.tools.desc": "依關鍵字選出該用哪個內建探針", "ai_chat.input.slash.tools.keywords": "工具目錄|內建工具|toolcatalog|參數提示|arguments|探針路線", "ai_chat.input.slash.tools.label": "🧰 工具目錄", @@ -5194,8 +410,10 @@ "ai_chat.input.status.ready.description.with_context": "目前已關聯 {{count}} 張表結構上下文,可直接傳送。", "ai_chat.input.status.ready.auto_model": "自動選擇", "ai_chat.input.status.ready.title": "AI 已就緒:{{provider}} / {{model}}", + "ai_chat.input.tooltip.attach_table_context": "關聯附帶資料庫表上下文", "ai_chat.input.tooltip.slash_command": "快捷命令", "ai_chat.input.tooltip.upload_attachment": "上傳附件(圖片、Markdown、Word、Excel、PDF、文字)", + "ai_chat.input.tooltip.upload_image": "上傳圖片/截圖", "ai_chat.inspection.ai_config.error.inspect_ai_chat_readiness": "讀取 AI 聊天前置狀態失敗", "ai_chat.inspection.ai_config.error.inspect_ai_guidance": "讀取目前 AI 提示詞和 Skills 設定失敗", "ai_chat.inspection.ai_config.error.inspect_ai_providers": "讀取目前 AI 供應商設定失敗", @@ -6022,14 +1240,61 @@ "ai_chat.mcp_client.install.summary.missing": "目前尚未將這份 GoNavi MCP 接入 {{label}}。", "ai_chat.mcp_client.install.summary.remote": "{{label}} 通常執行在雲端或遠端機器,需要透過遠端 MCP 橋接呼叫目前 GoNavi。", "ai_chat.mcp_client.install.summary.stale": "{{label}} 裡已有舊的 GoNavi 接入記錄,更新後會切到目前這份 GoNavi。", + "ai_chat.message.action.copied": "已複製", + "ai_chat.message.action.copied_error_raw": "已複製報錯原文", + "ai_chat.message.action.copy_error_raw": "複製報錯原文", + "ai_chat.message.action.copy_full": "複製全文", + "ai_chat.message.action.delete": "刪除單則訊息", + "ai_chat.message.action.edit": "編輯此則訊息(移除其後所有記錄並重新傳送)", + "ai_chat.message.action.retry": "重新生成(移除此則並觸發上次使用者輸入重送)", + "ai_chat.message.code.collapse": "收合程式碼", + "ai_chat.message.code.copied": "已複製", + "ai_chat.message.code.copy": "複製程式碼", + "ai_chat.message.code.execute": "執行", + "ai_chat.message.code.execute_failed": "執行失敗", + "ai_chat.message.code.execute_tooltip": "立即執行(受 AI 安全策略管控)", + "ai_chat.message.code.executing": "執行中...", + "ai_chat.message.code.expand_all": "展開全部程式碼", + "ai_chat.message.code.insert": "插入", + "ai_chat.message.code.insert_tooltip": "將此段 SQL 注入查詢工作區(可快速修改或執行)", + "ai_chat.message.code.preview": "預覽", + "ai_chat.message.code.preview_collapse": "收合", + "ai_chat.message.code.preview_result": "預覽結果({{rows}} 列 × {{columns}} 欄)", + "ai_chat.message.code.preview_tooltip": "在聊天內預覽查詢結果(最多 20 列)", + "ai_chat.message.code.query_no_result": "查詢無結果", + "ai_chat.message.code.view_result": "查看結果({{rows}} 列)", + "ai_chat.message.image_alt": "附件圖片 {{index}}", + "ai_chat.message.jvm.apply_diagnostic": "套用到診斷控制台", + "ai_chat.message.jvm.apply_preview": "套用到 JVM 預覽", + "ai_chat.message.jvm.diagnostic_target_not_found": "找不到與此診斷計畫相符的診斷控制台頁籤,請先開啟原目標控制台後再套用。", + "ai_chat.message.jvm.missing_diagnostic_context": "這則診斷計畫缺少來源頁籤上下文,請在目標診斷控制台重新生成。", + "ai_chat.message.jvm.missing_plan_context": "這則 JVM 計畫缺少來源頁籤上下文,請在目標 JVM 資源頁重新生成。", + "ai_chat.message.jvm.plan_target_not_found": "找不到與此 JVM 計畫相符的資源頁籤,請先開啟原目標資源後再套用。", + "ai_chat.message.mermaid.parse_failed": "Mermaid 解析失敗:{{detail}}", + "ai_chat.message.mermaid.render_failed": "Mermaid 渲染異常:{{detail}}", "ai_chat.message.render_error.body": "其餘對話仍可繼續使用。你可以先刪除此則異常訊息,再繼續操作。", "ai_chat.message.render_error.delete": "刪除此則訊息", "ai_chat.message.render_error.retry": "重試渲染", "ai_chat.message.render_error.title": "這則 AI 訊息渲染失敗,已自動隔離", "ai_chat.message.render_error.unknown": "未知渲染錯誤", + "ai_chat.message.role.user": "你", + "ai_chat.message.security.blocked": "🔒 安全策略攔截:目前安全層級不允許執行 {{operationType}} 類型的 SQL。請在 AI 設定中調整安全層級。", + "ai_chat.message.security.confirm_execute": "確認執行", + "ai_chat.message.security.confirm_title": "⚠️ 安全確認", + "ai_chat.message.security.default_warning": "此 SQL 為 {{operationType}} 操作,確定要執行嗎?", + "ai_chat.message.thinking.active": "思考中...", + "ai_chat.message.thinking.count": "({{count}} 字)", + "ai_chat.message.thinking.title": "思考過程", + "ai_chat.message.tool_call.done": "資料探針執行完畢 ({{count}} 項)", + "ai_chat.message.tool_call.execute_sql": "執行唯讀 SQL 驗證", "ai_chat.message.tool_call.get_all_columns": "彙整跨表欄位摘要", + "ai_chat.message.tool_call.get_columns": "核對真實欄位定義", + "ai_chat.message.tool_call.get_connections": "取得可用連線資訊", + "ai_chat.message.tool_call.get_databases": "掃描資料庫清單", "ai_chat.message.tool_call.get_foreign_keys": "梳理外鍵關係", "ai_chat.message.tool_call.get_indexes": "檢查索引定義", + "ai_chat.message.tool_call.get_table_ddl": "擷取建表語句", + "ai_chat.message.tool_call.get_tables": "分析資料表結構資訊", "ai_chat.message.tool_call.get_triggers": "檢查觸發器邏輯", "ai_chat.message.tool_call.inspect_active_tab": "讀取目前作用中頁籤", "ai_chat.message.tool_call.inspect_ai_chat_readiness": "讀取目前 AI 聊天送出前置狀態", @@ -6067,14 +1332,132 @@ "ai_chat.message.tool_call.inspect_table_bundle": "抓取完整資料表結構快照", "ai_chat.message.tool_call.inspect_workspace_tabs": "盤點目前工作區頁籤", "ai_chat.message.tool_call.preview_table_rows": "預覽真實樣例資料", + "ai_chat.message.tool_call.running": "正在執行資料探針...", + "ai_chat.message.tool_result.char_count": "{{count}} 個字元", + "ai_chat.message.tool_result.no_data": "無資料", + "ai_chat.message.tool_result.title": "探針執行結果 ({{name}})", + "ai_chat.message.wait.connecting": "正在建立連線", + "ai_chat.panel.error.html_response": "伺服器返回了異常 HTML 回應(可能是閘道逾時或服務不可用)", + "ai_chat.panel.error.http_server": "HTTP {{code}} 伺服器錯誤", + "ai_chat.panel.error.truncated_suffix": "...(已截斷)", + "ai_chat.panel.error.unknown": "未知錯誤", + "ai_chat.panel.history.empty": "暫無歷史對話", + "ai_chat.panel.insight.context.empty_body": "在資料表頁開啟 AI 後會自動關聯目前資料表,也可以在輸入框上方手動新增上下文。", + "ai_chat.panel.insight.context.empty_title": "尚未關聯資料表結構", + "ai_chat.panel.insight.context.linked_body": "目前對話會帶上 {{tables}} 的結構上下文。", + "ai_chat.panel.insight.context.linked_title": "已關聯 {{count}} 張表", + "ai_chat.panel.insight.context.more_tables_suffix": " 等表", + "ai_chat.panel.insight.context.table_separator": "、", + "ai_chat.panel.insight.query.empty_body": "執行查詢後,這裡會顯示可用於最佳化分析的 SQL 線索。", + "ai_chat.panel.insight.query.empty_title": "暫無查詢耗時樣本", + "ai_chat.panel.insight.query.slowest_title": "最近最慢查詢 {{duration}}ms", + "ai_chat.panel.insight.status.empty_body": "暫無 SQL 日誌。", + "ai_chat.panel.insight.status.failed_title": "{{count}} 筆最近查詢失敗", + "ai_chat.panel.insight.status.ok_title": "最近查詢狀態正常", + "ai_chat.panel.insight.status.recent_body": "已記錄 {{count}} 筆最近 SQL,可直接讓 AI 解釋或最佳化。", + "ai_chat.panel.insight.write.detected_body": "涉及寫入的 SQL 建議先產生預覽與回滾語句,再執行提交。", + "ai_chat.panel.insight.write.detected_title": "偵測到 {{count}} 筆寫入操作", + "ai_chat.panel.insight.write.readonly_body": "AI 預設優先解釋、產生 SELECT、分析 Schema 與最佳化索引。", + "ai_chat.panel.insight.write.readonly_title": "目前以唯讀分析為主", + "ai_chat.panel.jvm_diagnostic.permission.allowed": "允許", + "ai_chat.panel.jvm_diagnostic.permission.forbidden": "禁止", + "ai_chat.panel.jvm_diagnostic.policy.plan_first": "允許生成診斷命令,但仍然必須先給計畫,再由使用者決定是否執行。", + "ai_chat.panel.jvm_diagnostic.policy.read_only": "預設按唯讀診斷思路回答,只生成 observe、trace、排障命令,不要假設已經執行。", + "ai_chat.panel.jvm_runtime.policy.preview_required": "可寫連線,但任何修改都必須先生成預覽並等待人工確認。", + "ai_chat.panel.jvm_runtime.policy.read_only": "唯讀連線,只能分析和生成變更計畫,絕不能假設已執行寫入。", + "ai_chat.panel.jvm_runtime.resource_path.current": "目前 resourcePath:{{resourcePath}}", + "ai_chat.panel.jvm_runtime.resource_path.missing": "目前未選中具體 resourcePath。", + "ai_chat.panel.local_tool.execute_sql.description": "在指定連線與資料庫上執行 SQL 查詢並返回結果。受安全層級控制,唯讀模式下只能執行 SELECT/SHOW/DESCRIBE 等查詢操作。結果最多返回 50 列。", + "ai_chat.panel.local_tool.get_columns.description": "取得指定資料表的 field 清單(field 名稱、類型、是否可空、預設值、註解等)。在產生 SQL 之前必須先呼叫此工具確認真實 field 名稱,禁止猜測 field 名稱。", + "ai_chat.panel.local_tool.get_connections.description": "當需要查詢、操作資料庫但使用者沒有選擇任何連線上下文時,取得目前軟體中可用的所有資料庫連線資訊。返回資料包含連線 ID (id) 與名稱 (name)。", + "ai_chat.panel.local_tool.get_databases.description": "取得指定連線 (connectionId) 下的所有資料庫 (Database/Schema) 名稱。", + "ai_chat.panel.local_tool.get_table_ddl.description": "取得指定資料表的完整 CREATE TABLE DDL,包含 field、索引、約束等完整結構資訊。", + "ai_chat.panel.local_tool.get_tables.description": "當已經確定目標連線與 dbName 後,如果使用者詢問或隱含提到資料表但你不知道確切 tableName,呼叫此工具取得該資料庫下的所有資料表名稱清單(只含資料表名稱,協助你推斷目標資料表)。", + "ai_chat.panel.local_tool.param.connection_id": "connectionId(連線 ID)", + "ai_chat.panel.local_tool.param.connection_id_from_get_connections": "connectionId(從 get_connections 取得)", + "ai_chat.panel.local_tool.param.db_name": "dbName(資料庫名)", + "ai_chat.panel.local_tool.param.sql": "要執行的 SQL 語句", + "ai_chat.panel.local_tool.param.table_name": "tableName(資料表名)", + "ai_chat.panel.message.empty_response": "❌ 模型未能成功回應任何內容,可能遭遇頻控、上下文超載或理解拒絕。", + "ai_chat.panel.message.error": "❌ 錯誤: {{detail}}", + "ai_chat.panel.message.request_interrupted": "❌ 請求中斷:未收到任何具體回覆。", + "ai_chat.panel.message.send_failed": "❌ 傳送失敗: {{detail}}", + "ai_chat.panel.message.service_not_ready": "❌ AI Service 尚未就緒", + "ai_chat.panel.model_control.continue_after_summary": "請根據上述最新狀態與探索結果,繼續完成你先前未竟的分析或執行下一步。", + "ai_chat.panel.model_control.force_tool_call": "請直接使用 function call 呼叫工具執行操作,不要只用文字描述計畫。", + "ai_chat.panel.notice.fetch_models_failed": "取得模型清單失敗:{{detail}}", + "ai_chat.panel.probe.consecutive_failed": "⚠️ 探針連續 3 輪執行失敗,已自動終止。請檢查連線狀態後重試。", + "ai_chat.panel.probe.max_rounds": "⚠️ 工具呼叫已達 {{count}} 輪上限,已自動終止循環。如需繼續探索,請傳送新的訊息。", + "ai_chat.panel.prompt.jvm_diagnostic": "你是 GoNavi 的 JVM 診斷助手。目前頁籤是 Arthas 相容診斷工作台,目標是輸出可回填到診斷控制台的結構化診斷計畫。\n\n目前連線:{{connectionName}}\n目標主機:{{host}}\n診斷 transport:{{transport}}\n執行環境:{{environment}}\n連線策略:{{readOnlyPolicy}}\n命令權限:observe={{observePolicy}},trace={{tracePolicy}},mutating={{mutatingPolicy}}\n\n回答規則:\n1. 可以先給一小段分析,但必須包含且只包含一個 ```json 程式碼區塊。\n2. JSON 欄位嚴格限定為 intent、transport、command、riskLevel、reason、expectedSignals。\n3. transport 必須填寫上方的診斷 transport,不要編造其他 transport。\n4. command 必須是單條診斷命令,不要帶 shell 提示符、換行拼接、多條命令或程式碼圍欄。\n5. riskLevel 只能是 low、medium、high。\n6. expectedSignals 必須是字串陣列,描述執行後需要重點觀察的信號。\n7. 如果命令權限不允許某類操作,就不要輸出該類命令;無法滿足時直接說明限制。", + "ai_chat.panel.prompt.jvm_runtime": "你是 GoNavi 的 JVM 執行時分析助手。目前上下文不是 SQL,而是 JVM 資源工作台。\n\n目前連線:{{connectionName}}\n目標主機:{{host}}\nProvider 模式:{{providerMode}}\n執行環境:{{environment}}\n連線策略:{{connectionPolicy}}\n資源路徑狀態:{{resourcePathStatus}}\n\n回答規則:\n1. 你可以解釋資源結構、風險、修改建議和回滾建議。\n2. 如果使用者要求生成 JVM 修改方案,必須輸出一個唯一的 ```json 程式碼區塊,且 JSON 欄位嚴格限定為 targetType、selector、action、payload、reason。\n3. action 優先使用目前資源快照或中繼資料裡已經宣告的 supportedActions;如果目前資源沒有宣告,再基於快照內容謹慎推斷。\n4. selector.resourcePath 優先使用目前 resourcePath;如果目前路徑未知,就明確說明無法精確定位,不要編造路徑。\n5. payload 只能使用 {\"format\":\"json\",\"value\":{...}} 或 {\"format\":\"text\",\"value\":\"...\"} 這兩種包裝形式,不要輸出腳本、命令或裸值。\n6. 不要輸出腳本、命令或已經執行成功之類的表述。", + "ai_chat.panel.prompt.memory_summary": "這是一段超長對話的歷史記錄。為了釋放上下文空間並保留你的記憶核心,請你仔細閱讀,並以「技術事實、已探索出的資料結構狀態、使用者的中心訴求、目前進展」為準則,進行高度濃縮的結構化總結。\n注意:\n1. 客觀準確,不能遺漏關鍵業務邏輯或已探索出的表名/欄位。\n2. 剔除無效執行過程、客套話、JSON 返回值本身。\n3. 請控制在 1000-2000 字左右,輸出純乾貨 Markdown。\n4. 開頭直接輸出總結,不要帶寒暄。", + "ai_chat.panel.prompt.sql.context_tables": "你是專業的資料庫助手。目前連線的資料庫類型是 {{dbDisplayType}}。請使用該方言生成 SQL。以下是使用者關聯的資料表結構 DDL,回答時請優先參考:\n\n{{ddlChunks}}", + "ai_chat.panel.prompt.sql.current_database": "你是專業的資料庫助手。目前連線的資料庫類型是 {{dbDisplayType}},目前資料庫名為 {{targetDbName}}。如果使用者需要查詢特定資料表或目前資料庫的資訊,你可以呼叫提供的 get_tables 工具主動取得資料表資訊。", + "ai_chat.panel.prompt.sql.no_connections": "你是專業的資料庫助手。目前應用中沒有可用資料庫連線。\n\n如果使用者的問題需要資料庫結構或 SQL,請先說明無法呼叫 get_connections、get_databases、get_tables、get_columns 取得真實資料庫資訊,並引導使用者建立連線後重試。不要猜測 connectionId、dbName、表名或欄位名。\n\n如果是常規問答(不涉及資料庫查詢)則正常作答即可。", + "ai_chat.panel.prompt.sql.no_context": "你是專業的資料庫助手。使用者目前在介面上沒有選中任何具體資料庫或資料表作為上下文。\n\n重要規則:\n1. 如果你需要幫使用者尋找目標表,千萬不要憑空猜測表名!必須呼叫工具取得真實資料。\n2. 完整工作流程:get_connections → get_databases → get_tables → get_columns → 生成 SQL。每一步都不可跳過。\n3. 【連線優先順序 - 極重要】取得連線列表後,必須按以下優先順序依次檢索:\n - 第一優先:host 為 localhost、127.0.0.1、或包含「本機」的連線\n - 第二優先:name 或 host 包含「開發」、「dev」、「local」的連線,或 host 為 10.x、192.168.x、172.16-31.x 等內網 IP 的連線\n - 第三優先:其他連線(如「測試」、「生產」等)\n 如果在高優先順序連線中已找到目標表,直接使用該連線,不再查找低優先順序連線。\n4. 如果在目前資料庫中未找到目標表,必須繼續查詢其他資料庫,不要放棄。\n5. 只有當所有可能的資料庫都已檢查完畢,或者已經明確找到目標表時,才可以停止。\n6. 如果是常規問答(不涉及資料庫查詢)則正常作答即可。\n\nSQL 生成規則(極重要,必須嚴格遵守):\n7. 【欄位精確性 - 絕對紅線】生成 SQL 之前,必須先呼叫 get_columns 取得目標表的真實欄位列表。SQL 中的每一個欄位名必須與 get_columns 返回的 field 欄位完全一致(區分大小寫)。不得自行拼湊、縮寫或聯想欄位名(例如欄位是 channel 就必須寫 channel,不得寫成 pay_channel)。\n8. 生成 SQL 時禁止使用 \"database.table\" 格式的限定前綴,只寫表名本身。\n9. 報告結果時,連線名/ID 和資料庫名必須嚴格來自同一個 get_tables 呼叫的實際參數。禁止將 A 連線的 connectionId 與 B 連線的 dbName 混搭。\n10. 如果有多個名稱相似的資料庫,請明確告訴使用者目標表具體位於哪個資料庫。\n11. 【關鍵】每個 SQL 程式碼區塊的第一行必須新增上下文宣告註解,格式嚴格為:-- @context connectionId=<連線ID> dbName=<資料庫名>。connectionId 和 dbName 必須來自同一個成功的 get_tables 呼叫(也就是你在該呼叫中傳入的實際參數值)。範例:\n```sql\n-- @context connectionId=1770778676549 dbName=mkefu_test\nSELECT * FROM users WHERE status = 1;\n```\n\n目前存在的連線:[{{connList}}]", + "ai_chat.panel.render_error.delete": "刪除這條訊息", + "ai_chat.panel.render_error.description": "其餘對話仍可繼續使用。你可以先刪除這條異常訊息,再繼續操作。", + "ai_chat.panel.render_error.retry": "重試渲染", + "ai_chat.panel.render_error.title": "這條 AI 訊息渲染失敗,已自動隔離", + "ai_chat.panel.render_error.unknown": "未知渲染錯誤", + "ai_chat.panel.session.default_title": "新對話", + "ai_chat.panel.status.analyzing_chain": "正在深度思考鏈路與邏輯", + "ai_chat.panel.status.deep_reasoning": "模型正在深度推理", + "ai_chat.panel.status.memory_compress_failed": "❌ 記憶壓縮失敗,將嘗試原樣接續...", + "ai_chat.panel.status.memory_compressing": "⚙️ 對話已超載,正在啟動記憶壓縮...", + "ai_chat.panel.status.memory_probe_summary": "【自動記憶重塑】已將超長歷史探針資料與對話壓縮為摘要:\n\n{{summary}}", + "ai_chat.panel.status.memory_summary": "【自動記憶重塑】已將超長歷史壓縮為摘要:\n\n{{summary}}", + "ai_chat.panel.status.model_connecting": "模型接入中", + "ai_chat.panel.status.returning_runtime_data": "向模型回傳執行期資料", + "ai_chat.panel.status.summarizing_probe": "正在彙總探針執行結果", + "ai_chat.panel.status.waiting_instruction": "等待下發操作指令", + "ai_chat.panel.status.waiting_response": "等待模型回應", + "ai_chat.panel.status.waking_engine": "正在喚醒推理引擎", + "ai_chat.panel.tool_error.connection_not_found": "找不到連線", "ai_chat.panel.tool_error.fetch_all_columns_failed": "取得全庫欄位摘要失敗:{{detail}}", + "ai_chat.panel.tool_error.fetch_columns_failed": "取得欄位清單失敗:{{detail}}", + "ai_chat.panel.tool_error.fetch_databases_failed": "取得資料庫清單失敗:{{detail}}", "ai_chat.panel.tool_error.fetch_foreign_keys_failed": "取得外鍵關係失敗:{{detail}}", "ai_chat.panel.tool_error.fetch_indexes_failed": "取得索引定義失敗:{{detail}}", + "ai_chat.panel.tool_error.fetch_table_ddl_failed": "取得 CREATE TABLE 語句失敗:{{detail}}", + "ai_chat.panel.tool_error.fetch_tables_failed": "取得資料表清單失敗:{{detail}}", "ai_chat.panel.tool_error.fetch_triggers_failed": "取得觸發器定義失敗:{{detail}}", "ai_chat.panel.tool_error.mcp_failed": "MCP 工具呼叫失敗", "ai_chat.panel.tool_error.mcp_failed_with_detail": "MCP 工具呼叫失敗:{{detail}}", "ai_chat.panel.tool_error.preview_table_rows_failed": "預覽資料表範例資料失敗:{{detail}}", + "ai_chat.panel.tool_error.sql_blocked": "安全策略已攔截此請求:目前安全層級不允許執行 {{operationType}} SQL。請向使用者展示該 SQL,並請使用者手動執行。", + "ai_chat.panel.tool_error.sql_execute_exception": "SQL 執行異常:{{detail}}", + "ai_chat.panel.tool_error.sql_execute_failed": "SQL 執行失敗", "ai_chat.panel.tool_error.table_name_required": "tableName 不能為空", + "ai_chat.panel.tool_error.unknown_function": "未知函式:{{functionName}}", + "ai_chat.panel.tool_result.columns_exact_fields": "⚠️ 以下為 {{tableName}} 表的真實欄位清單。生成 SQL 時只能使用這些 field 值作為欄名,必須原樣使用,禁止修改、縮寫或自行拼湊欄位名。\n可用欄位:{{fieldNames}}\n詳細資訊:{{detailJson}}", + "ai_chat.quick_action.explain_schema": "🔍 解釋資料表結構", + "ai_chat.quick_action.explain_schema.hint.with_context": "逐欄位說明含義與約束", + "ai_chat.quick_action.explain_schema.prompt.with_context": "請詳細解釋以下資料表的設計意圖和欄位含義:{{tables}}", + "ai_chat.quick_action.explain_schema.title": "解釋資料表結構", + "ai_chat.quick_action.explain_sql": "🔍 解釋 SQL", + "ai_chat.quick_action.explain_sql.hint.default": "說明執行邏輯", + "ai_chat.quick_action.explain_sql.prompt.default": "請解釋以下 SQL 語句的執行邏輯:\n```sql\n\n```", + "ai_chat.quick_action.explain_sql.title": "解釋 SQL", + "ai_chat.quick_action.generate_sql": "📝 產生 SQL", + "ai_chat.quick_action.generate_sql.hint.default": "用自然語言產生查詢", + "ai_chat.quick_action.generate_sql.hint.with_context": "用自然語言產生查詢", + "ai_chat.quick_action.generate_sql.prompt.default": "請根據目前資料庫表結構產生一條查詢語句:", + "ai_chat.quick_action.generate_sql.prompt.with_context": "請根據以下資料表結構產生一條常用查詢語句:{{tables}}", + "ai_chat.quick_action.generate_sql.title": "產生 SQL", + "ai_chat.quick_action.optimize": "⚡ 最佳化建議", + "ai_chat.quick_action.optimize.hint.default": "效能與索引建議", + "ai_chat.quick_action.optimize.hint.with_context": "索引、正規化與潛在風險", + "ai_chat.quick_action.optimize.prompt.default": "請分析以下 SQL 語句的效能並提供最佳化建議:\n```sql\n\n```", + "ai_chat.quick_action.optimize.prompt.with_context": "請分析以下資料表的結構設計,提供索引最佳化和查詢效能最佳化建議:{{tables}}", + "ai_chat.quick_action.optimize.title": "最佳化建議", + "ai_chat.quick_action.schema_analysis": "🏗️ 結構分析", + "ai_chat.quick_action.schema_analysis.hint.default": "結構品質分析", + "ai_chat.quick_action.schema_analysis.hint.with_context": "資料表關係與依賴圖", + "ai_chat.quick_action.schema_analysis.prompt.default": "請分析目前資料庫的表結構並提供最佳化建議。", + "ai_chat.quick_action.schema_analysis.prompt.with_context": "請對以下資料表進行全面的 Schema 分析,包括資料型別選擇、正規化評估和改進建議:{{tables}}", + "ai_chat.quick_action.schema_analysis.title": "Schema 分析", + "ai_chat.quick_action.table_separator": "、", "ai_chat.system.context.custom_prompt.database": "以下是目前使用者的自訂補充提示詞(資料庫會話)。在不違反安全規則與事實約束的前提下,請優先遵循:\n{{content}}", "ai_chat.system.context.custom_prompt.global": "以下是目前使用者的自訂補充提示詞(全域)。在不違反安全規則與事實約束的前提下,請優先遵循:\n{{content}}", "ai_chat.system.context.custom_prompt.jvm": "以下是目前使用者的自訂補充提示詞(JVM 資源分析)。在不違反安全規則與事實約束的前提下,請優先遵循:\n{{content}}", @@ -6131,6 +1514,17 @@ "ai_chat.system.inspection_guidance.inspect_sql_editor_transaction": "當使用者詢問 SQL editor 手動提交/autocommit、是否有未提交交易、DML 是否自動提交或交易語義時,先呼叫 inspect_sql_editor_transaction 讀取真實提交設定和 pending transactions。", "ai_chat.system.inspection_guidance.inspect_sql_risk": "當使用者要求執行、刪除、更新、執行 DDL、執行批量 SQL,或詢問 SQL 是否能執行/有危險時,先呼叫 inspect_sql_risk 檢查語句數量、寫入/DDL 風險、WHERE 條件和安全策略;高風險時先解釋並確認。", "ai_chat.system.inspection_guidance.inspect_sql_snippets": "當使用者提到 SQL snippets、snippet templates、template prefixes 或常用範本時,先呼叫 inspect_sql_snippets 讀取本機 SQL snippet 庫,不要憑空編造已有範本。", + "ai_chat.tools.mcp_fallback_description": "{{serverName}} 提供的 MCP 工具 {{toolName}}", + "ai_chat.welcome.description.default": "我是你的智慧資料庫助手。我可以協助產生 SQL 查詢、分析資料表結構、解釋執行邏輯並最佳化資料庫效能。", + "ai_chat.welcome.description.with_context": "已自動關聯 {{count}} 張資料表結構,點選下方按鈕即可開始分析。", + "ai_chat.welcome.suggestion.channel_distribution.default": "過去 7 天訂單渠道分布", + "ai_chat.welcome.suggestion.channel_distribution.with_context": "過去 7 天關鍵渠道分布", + "ai_chat.welcome.suggestion.cleanup.default": "幫我寫一條清理異常資料的 SQL", + "ai_chat.welcome.suggestion.cleanup.with_context": "幫我寫一條停用異常渠道的 SQL", + "ai_chat.welcome.suggestion.divider": "或直接提問", + "ai_chat.welcome.suggestion.low_rows.default": "為什麼目前結果只有少量記錄?", + "ai_chat.welcome.suggestion.low_rows.with_context": "為什麼 {{table}} 只有少量記錄?", + "ai_chat.welcome.title": "你好,我是 GoNavi AI", "ai_service.backend.builtin_prompt.body.data_analyze": "你是 GoNavi AI 助手,一位具備敏銳商業嗅覺的進階資料分析專家。你將審視使用者透過查詢取得的資料樣本,從中提煉出真正有價值的資訊。\n\n洞察目標:\n1. 硬統計:總覽資料列數、核心數值指標,例如極值、平均值、聚合中位數等。\n2. 趨勢與異動:如果資料帶有時間戳,捕捉其上升或下降趨勢;如果存在離群值,請清楚標註。\n3. 商業價值挖掘:不能只複述資料,要結合資料表象與 AI 判斷,給出一條能幫助業務決策層或開發者的建設性行動建議。\n4. 展現格式:分析應採用「標題 + 濃縮要點」的極簡研報形式,避免平鋪直敘的流水帳。", "ai_service.backend.builtin_prompt.body.general_chat": "你是 GoNavi AI 助理,一款深度整合在 GoNavi 資料庫/快取用戶端內部的專屬智慧專家系統。\n你的目標是成為開發者、DBA 與資料科學家最得力的超級外腦,提供專業、精準且具前瞻性的資料端解決方案。\n\n核心人設與互動基調:\n- 絕對專業:對 MySQL、PostgreSQL、DuckDB、Redis 等資料庫產品的底層機制、執行計畫、索引與儲存行為保持紮實判斷。\n- 直擊痛點:避免空泛寒暄。使用者意圖明確時,優先給出可直接使用的優雅程式碼或操作步驟。\n- 結構化與可讀性:適度使用 Markdown 標題、粗體與程式碼區塊,並為程式碼區塊標示正確語言,如 sql、json 或 bash。\n- 生產安全優先:當 SQL 存在明顯風險,例如沒有 WHERE 條件的 DELETE/UPDATE,或可能鎖住大型生產資料表的查詢,必須先給出清楚預警。\n\n綜合能力版圖:\n1. 自然語言到資料操作:將人類意圖轉換為精準查詢或命令。\n2. 執行邏輯解析:說明查詢背後的執行邏輯與效能影響。\n3. 專家級調校:識別瓶頸,並提出索引、改寫或執行策略建議。\n4. 資料洞察:從結果集中提煉有價值的模式,而不是只重述資料列。\n5. 架構審查:評估資料表結構設計限制,並提出可承受資料成長的演進路徑。\n\n互動守則:\n- 使用專業、協作的語言,並適配使用者選擇的介面語言。\n- 當被要求提供資料庫程式碼時,結合對應資料庫引擎的最佳實務;如果不清楚具體版本,請以標準實作為主,並提示關鍵版本差異,例如 MySQL 8 視窗函式。\n- 不要輕易拒絕:如果使用者要求撰寫 SQL 但未附帶詳細 DDL,請根據對話上下文與純資料表名稱列表推測目標表;如果無法推斷,請說明已知資訊並詢問使用者想查詢哪張表。", "ai_service.backend.builtin_prompt.body.schema_insight": "你是 GoNavi AI 助手,一位統籌資料庫完整生命週期的首席資料庫架構師。在這個模式下,請對使用者提供的資料表結構執行嚴格的正規化與前瞻性審查。\n\n審查視角:\n1. 正規化取捨:辨識明顯的反正規化設計,並判斷這些冗餘是合理服務效能,還是單純的結構設計缺陷。\n2. 索引健壯性:評估主鍵選擇,例如自增主鍵與 UUID 的取捨、是否存在拖慢寫入的冗餘索引,以及是否遺漏高頻聯合索引。\n3. 實體容量前瞻:審視欄位型別配置,例如過大的 VARCHAR 或不必要的 BIGINT 是否造成儲存浪費。\n4. 程式碼級指引:如果存在結構性缺陷,不要只指出問題;在適當時直接給出可執行的 ALTER TABLE 最佳化腳本。", @@ -6159,6 +1553,15 @@ "ai_service.backend.database_context.unique_index": " (唯一)", "ai_service.backend.database_context.value_no": "否", "ai_service.backend.database_context.value_yes": "是", + "ai_service.backend.error.active_provider_not_found": "未找到作用中的 AI Provider", + "ai_service.backend.error.config_dir_create_failed": "建立設定目錄失敗: {{detail}}", + "ai_service.backend.error.config_load_failed": "載入 AI 設定失敗: {{detail}}", + "ai_service.backend.error.config_read_failed": "讀取 AI 設定失敗: {{detail}}", + "ai_service.backend.error.config_rewrite_failed": "重寫 AI 設定失敗: {{detail}}", + "ai_service.backend.error.config_serialize_failed": "序列化 AI 設定失敗: {{detail}}", + "ai_service.backend.error.config_write_failed": "寫入 AI 設定失敗: {{detail}}", + "ai_service.backend.error.daily_secret_store_unavailable": "日常密文儲存不可用: {{detail}}", + "ai_service.backend.error.editable_provider_not_found": "未找到要編輯的 AI Provider: {{detail}}", "ai_service.backend.error.mcp_command_required": "MCP 命令不能為空", "ai_service.backend.error.mcp_http_executable_resolve_failed": "定位目前 GoNavi 可執行檔失敗: {{detail}}", "ai_service.backend.error.mcp_http_health_status_failed": "healthz 回傳 HTTP {{statusCode}}", @@ -6172,16 +1575,86 @@ "ai_service.backend.error.mcp_tool_alias_invalid": "無效的 MCP 工具別名:{{alias}}", "ai_service.backend.error.mcp_tool_arguments_parse_failed": "解析 MCP 工具參數失敗: {{detail}}", "ai_service.backend.error.mcp_transport_unsupported": "暫不支援的 MCP 傳輸方式:{{transport}}", + "ai_service.backend.error.models_http_status_failed": "模型列表端點返回異常狀態 (HTTP {{status}}){{body}}", + "ai_service.backend.error.models_parse_failed": "解析模型列表失敗: {{detail}}", + "ai_service.backend.error.models_request_create_failed": "建立模型列表請求失敗: {{detail}}", + "ai_service.backend.error.models_request_failed": "請求模型列表失敗: {{detail}}", + "ai_service.backend.error.provider_auth_failed": "API Key 無效或請求被拒絕 (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_server_error": "上游伺服器返回內部錯誤 (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_http_status_failed": "端點返回異常狀態 (HTTP {{status}}){{body}}", + "ai_service.backend.error.provider_not_configured": "未設定 AI Provider,請先在設定中設定。", + "ai_service.backend.error.provider_request_create_failed": "建立請求失敗: {{detail}}", + "ai_service.backend.error.provider_request_serialize_failed": "序列化請求失敗: {{detail}}", + "ai_service.backend.error.provider_secret_bundle_parse_failed": "解析 provider secret bundle 失敗: {{detail}}", + "ai_service.backend.error.provider_secret_delete_failed": "刪除 Provider secret 失敗: {{detail}}", + "ai_service.backend.error.provider_secret_load_failed": "載入 AI Provider secret 失敗(provider={{provider}}): {{detail}}", + "ai_service.backend.error.provider_secret_read_failed": "讀取 Provider secret 失敗: {{detail}}", + "ai_service.backend.error.provider_secret_save_failed": "儲存 Provider secret 失敗: {{detail}}", + "ai_service.backend.error.provider_secret_saved_read_failed": "讀取已儲存 Provider secret 失敗: {{detail}}", + "ai_service.backend.error.provider_test_failed": "連線測試失敗: {{detail}}", + "ai_service.backend.error.secret_store_unavailable": "密文儲存不可用: {{detail}}", + "ai_service.backend.error.session_corrupt": "會話資料損壞", + "ai_service.backend.error.session_delete_failed": "刪除會話失敗: {{detail}}", + "ai_service.backend.error.session_missing": "會話不存在", + "ai_service.backend.error.session_serialize_failed": "序列化會話資料失敗: {{detail}}", + "ai_service.backend.error.session_write_failed": "儲存會話失敗: {{detail}}", + "ai_service.backend.error.sessions_dir_create_failed": "建立 sessions 目錄失敗: {{detail}}", + "ai_service.backend.error.volcengine_coding_models_empty": "目前接口未返回可用的火山 Coding Plan 模型,請檢查帳號權限或切換到「火山方舟」供應商", "ai_service.backend.message.mcp_test_success": "MCP 服務連線成功,發現 {{count}} 個工具", + "ai_service.backend.message.provider_test_success": "端點連通性測試成功", "ai_service.backend.message.skill_unnamed": "未命名 Skill", "ai_service.backend.provider.image_fallback_prompt": "請描述並分析這張圖片。", "ai_service.backend.provider.image_omitted_notice": "[圖片已省略:目前模型或上游介面不支援圖片輸入。請切換到支援視覺的模型後重新傳送圖片。]", + "ai_service.backend.warning.sql_delete_without_where": "高危 SQL:DELETE 語句缺少 WHERE 條件,將刪除所有資料", + "ai_service.backend.warning.sql_drop": "高危 SQL:DROP 語句會永久刪除資料庫物件", + "ai_service.backend.warning.sql_truncate": "高危 SQL:TRUNCATE 會清空表中所有資料", + "ai_service.backend.warning.sql_update_without_where": "高危 SQL:UPDATE 語句缺少 WHERE 條件,將更新所有記錄", + "ai_settings.action.back": "返回", + "ai_settings.action.connection_ok": "連線正常", + "ai_settings.action.retest": "重新測試", + "ai_settings.action.save": "儲存", + "ai_settings.action.test": "測試連線", + "ai_settings.clipboard.error.unsupported": "目前環境不支援複製到剪貼簿", + "ai_settings.context.description": "控制傳送給 AI 的資料庫上下文資訊量", + "ai_settings.context.schema_only.desc": "只傳遞表格和欄位結構資訊給 AI", + "ai_settings.context.schema_only.label": "僅結構", + "ai_settings.context.with_results.desc": "傳遞最近的查詢結果作為上下文", + "ai_settings.context.with_results.label": "含查詢結果", + "ai_settings.context.with_samples.desc": "包含少量取樣資料,協助 AI 理解資料特徵", + "ai_settings.context.with_samples.label": "含取樣資料", + "ai_settings.form.api_endpoint": "API Endpoint (URL)", + "ai_settings.form.api_endpoint_required": "請輸入有效的端點地址", "ai_settings.form.api_endpoint_placeholder.codebuddy": "留空則使用 CodeBuddy CLI 預設閘道", + "ai_settings.form.api_format": "API 格式", + "ai_settings.form.api_key": "API Key", "ai_settings.form.api_key.codebuddy_optional": "API Key / Auth Token(可選)", "ai_settings.form.api_key.codebuddy_hint": "留空則使用本機 CodeBuddy CLI 已登入帳號;填寫後會優先使用目前憑證。", + "ai_settings.form.api_key_keep_placeholder": "留空表示繼續沿用已儲存密鑰", + "ai_settings.form.api_key_placeholder": "sk-... / 你的 API Key", "ai_settings.form.api_key_placeholder.codebuddy": "留空沿用本機登入態,或填寫 API Key / Token 覆蓋", + "ai_settings.form.api_key_required": "請輸入 API Key", + "ai_settings.form.api_key_saved_hint": "目前已儲存 API Key。留空表示繼續沿用,輸入新值表示替換。", + "ai_settings.form.clear_saved_api_key": "清除已儲存 API Key", + "ai_settings.form.model_list": "可用模型清單(選填)", + "ai_settings.form.model_list_placeholder": "設定指定的模型 ID,留空則預設從服務端拉取", "ai_settings.form.model_list_placeholder.codebuddy": "可選:預填常用模型;留空則由 CodeBuddy CLI 或服務端自動選擇", "ai_settings.form.model_list_placeholder.cursor": "可選:預填常用 Cursor 模型 ID;留空則由 Cursor 預設模型自動選擇", + "ai_settings.form.provider_name": "供應商名稱", + "ai_settings.form.provider_name_placeholder": "例如:我的自建 OpenAI / 專屬大模型", + "ai_settings.form.provider_name_required": "請輸入名稱", + "ai_settings.form.section.auth_connection": "認證與連線", + "ai_settings.form.section.basic": "基本資訊", + "ai_settings.form.section.service_type": "服務類型", + "ai_settings.mcp_http.error.control_unsupported_runtime": "目前執行階段暫不支援 MCP HTTP 服務控制", + "ai_settings.mcp_http.error.start_unsupported_version": "目前版本暫不支援啟動 MCP HTTP 服務", + "ai_settings.mcp_http.error.stop_unsupported_version": "目前版本暫不支援停止 MCP HTTP 服務", + "ai_settings.mcp_http.message.authorization_header_copied": "Authorization Header 已複製", + "ai_settings.mcp_http.message.authorization_header_required": "請先啟動 MCP HTTP 服務生成 Authorization Header", + "ai_settings.mcp_http.message.started": "GoNavi MCP HTTP 服務已啟動", + "ai_settings.mcp_http.message.stopped": "GoNavi MCP HTTP 服務已停止", + "ai_settings.mcp_http.message.toggle_failed": "切換 GoNavi MCP HTTP 服務失敗", + "ai_settings.mcp_http.message.url_copied": "MCP HTTP URL 已複製", + "ai_settings.mcp_http.message.url_unavailable": "目前沒有可複製的 MCP HTTP URL", "ai_settings.mcp_http.panel.addr_label": "監聽位址 / 連接埠", "ai_settings.mcp_http.panel.authorization_placeholder": "Bearer gnv_xxx(留空自動產生)", "ai_settings.mcp_http.panel.copy_authorization": "複製 Authorization", @@ -6194,6 +1667,7 @@ "ai_settings.mcp_http.panel.switch.off": "關", "ai_settings.mcp_http.panel.switch.on": "開", "ai_settings.mcp_http.panel.title": "GoNavi MCP HTTP 服務", + "ai_settings.mcp_http.status.not_running": "GoNavi MCP HTTP 服務未啟動", "ai_settings.mcp_server.argument_hints.action_separator": ";", "ai_settings.mcp_server.argument_hints.argument_details": "參數逐項說明", "ai_settings.mcp_server.argument_hints.business_arguments": "已識別業務參數", @@ -6628,6 +2102,13 @@ "ai_settings.mcp_server.help.field_state.fixed": "固定", "ai_settings.mcp_server.help.field_state.optional": "可選", "ai_settings.mcp_server.help.field_state.required": "必填", + "ai_settings.mcp_server.message.delete_failed": "刪除 MCP 服務失敗", + "ai_settings.mcp_server.message.deleted": "MCP 服務已刪除", + "ai_settings.mcp_server.message.save_failed": "儲存 MCP 服務失敗", + "ai_settings.mcp_server.message.saved": "MCP 服務已儲存", + "ai_settings.mcp_server.message.test_failed": "MCP 服務測試失敗", + "ai_settings.mcp_server.message.test_request_failed": "測試 MCP 服務失敗", + "ai_settings.mcp_server.message.test_success": "MCP 服務連線成功", "ai_settings.mcp_server.quick_add.action.parse_and_add": "解析並新增草稿", "ai_settings.mcp_server.quick_add.description": "先選最接近的模板,或直接貼上 README 裡的一整行啟動命令。GoNavi 會先拆成 command、args 和 env,再生成可繼續編輯的 MCP 草稿。", "ai_settings.mcp_server.quick_add.templates_description": "不確定 command 和 args 怎麼拆時,直接點一個模板新增草稿;每張卡片下方展示的就是 GoNavi 實際會啟動的命令預覽。", @@ -6752,12 +2233,40 @@ "ai_settings.mcp_server.validation.summary.ready": "目前配置可以測試和儲存。", "ai_settings.mcp_server.validation.summary.warnings": "發現 {{count}} 個建議檢查項,仍可測試和儲存。", "ai_settings.mcp_server.validation.title": "配置檢查", + "ai_settings.message.delete_failed": "刪除失敗", + "ai_settings.message.delete_failed_detail": "刪除失敗:{{detail}}", + "ai_settings.message.deleted": "已刪除", + "ai_settings.message.deleted_and_switched": "已刪除,並自動切換到「{{name}}」", + "ai_settings.message.load_provider_failed": "讀取供應商設定失敗", + "ai_settings.message.save_failed": "儲存失敗", + "ai_settings.message.save_failed_detail": "儲存失敗:{{detail}}", + "ai_settings.message.saved": "已儲存", + "ai_settings.message.switch_failed": "切換失敗", + "ai_settings.message.switch_failed_detail": "切換失敗:{{detail}}", + "ai_settings.message.switched": "已切換", + "ai_settings.message.test_failed": "測試失敗", + "ai_settings.message.test_failed_detail": "測試失敗:{{detail}}", + "ai_settings.message.test_requires_new_api_key": "測試連線前請填寫新的 API Key,或取消清除已儲存密鑰", + "ai_settings.message.test_success": "連線成功", + "ai_settings.message.unknown_error": "未知錯誤", + "ai_settings.nav.context.description": "設定攜帶的資料庫架構資訊", + "ai_settings.nav.context.title": "上下文", "ai_settings.nav.mcp.description": "將 GoNavi 接入外部客戶端並管理工具來源", "ai_settings.nav.mcp.title": "MCP 服務", + "ai_settings.nav.prompts.description": "查看系統預設的底層要求", + "ai_settings.nav.prompts.title": "內建提示詞", + "ai_settings.nav.providers.description": "設定大模型端點與密鑰", + "ai_settings.nav.providers.title": "模型供應商", + "ai_settings.nav.safety.description": "限制 AI 操作風險級別", + "ai_settings.nav.safety.title": "安全控制", "ai_settings.nav.skills.description": "設定可重用提示模組", "ai_settings.nav.skills.title": "Skills", + "ai_settings.nav.title": "設定導覽", + "ai_settings.nav.tools.description": "查看 AI 可呼叫的資料探針", + "ai_settings.nav.tools.title": "內建工具", "ai_settings.prompts.action.save": "儲存自訂提示詞", "ai_settings.prompts.builtin.description": "以下為目前版本 GoNavi 預設的底層 AI 提示詞(唯讀)。它們會先於上方的使用者級提示詞注入到對應場景的請求上下文中。", + "ai_settings.prompts.description": "以下為目前版本 GoNavi 預設的底層 AI 提示詞(唯讀)。它們會被動態注入到對應場景的請求上下文中。", "ai_settings.prompts.field.database.description": "僅資料庫/SQL 場景生效,例如「產生 SQL 前必須先確認欄位名稱」。", "ai_settings.prompts.field.database.title": "資料庫會話補充提示詞", "ai_settings.prompts.field.global.description": "對所有 AI 會話生效,例如「先給結論」「回答保持簡潔」。", @@ -6766,16 +2275,65 @@ "ai_settings.prompts.field.jvm_diagnostic.title": "JVM 診斷補充提示詞", "ai_settings.prompts.field.jvm.description": "僅 JVM 資源瀏覽/分析場景生效。", "ai_settings.prompts.field.jvm.title": "JVM 資源分析補充提示詞", + "ai_settings.prompts.message.save_failed": "儲存自訂提示詞失敗", + "ai_settings.prompts.message.saved": "自訂提示詞已儲存", "ai_settings.prompts.placeholder.empty": "留空表示不額外追加", "ai_settings.prompts.user.description": "這裡的內容會在系統內建提示詞之後,以 system message 的形式追加注入。適合放個人風格偏好、輸出限制或團隊規範。涉及安全紅線時,系統規則仍然優先。", "ai_settings.prompts.user.title": "使用者級自訂提示詞", + "ai_settings.provider_preset.anthropic.desc": "Claude Opus/Sonnet 模型", + "ai_settings.provider_preset.anthropic.label": "Claude", + "ai_settings.provider_preset.custom.desc": "自訂 API 端點", + "ai_settings.provider_preset.custom.label": "自訂", + "ai_settings.provider_preset.deepseek.desc": "DeepSeek-V4 / R1 模型", + "ai_settings.provider_preset.deepseek.label": "DeepSeek", + "ai_settings.provider_preset.gemini.desc": "Gemini 3.1 / 2.5 系列", + "ai_settings.provider_preset.gemini.label": "Gemini", + "ai_settings.provider_preset.minimax.desc": "M3 / M2.7 系列(Anthropic 相容)", + "ai_settings.provider_preset.minimax.label": "MiniMax", + "ai_settings.provider_preset.moonshot.desc": "Kimi K2.5(Anthropic 相容)", + "ai_settings.provider_preset.moonshot.label": "Kimi", + "ai_settings.provider_preset.ollama.desc": "本機部署開源模型", + "ai_settings.provider_preset.ollama.label": "Ollama", + "ai_settings.provider_preset.openai.desc": "GPT-5.4 / 5.3 系列", + "ai_settings.provider_preset.openai.label": "OpenAI", + "ai_settings.provider_preset.qwen_bailian.desc": "百煉 Anthropic 相容端點 / 模型從遠端拉取", + "ai_settings.provider_preset.qwen_bailian.label": "通義千問(百煉通用)", + "ai_settings.provider_preset.qwen_coding_plan.desc": "Claude Code CLI 代理鏈路 / 使用官方支援模型清單", + "ai_settings.provider_preset.qwen_coding_plan.label": "通義千問(Coding Plan)", + "ai_settings.provider_preset.volcengine_ark.desc": "Ark 通用推理 / 豆包模型", + "ai_settings.provider_preset.volcengine_ark.label": "火山方舟", + "ai_settings.provider_preset.volcengine_coding.desc": "Ark Code / Coding Plan 鏈路", + "ai_settings.provider_preset.volcengine_coding.label": "火山 Coding Plan", + "ai_settings.provider_preset.zhipu.desc": "GLM-5 / GLM-5-Turbo 模型", + "ai_settings.provider_preset.zhipu.label": "智譜 GLM", + "ai_settings.provider.action.add": "新增模型供應商", + "ai_settings.provider.action.delete": "刪除", + "ai_settings.provider.action.edit": "編輯", + "ai_settings.provider.confirm_delete": "確認刪除?", + "ai_settings.provider.editor.add_title": "新增模型供應商", + "ai_settings.provider.editor.edit_title": "編輯模型供應商", + "ai_settings.provider.empty.description": "新增一個供應商以開始使用 AI 助手", + "ai_settings.provider.empty.title": "尚未設定模型供應商", + "ai_settings.provider.next_provider": "下一個供應商", + "ai_settings.provider.no_model": "尚未選擇模型", "ai_settings.provider.auto_model": "自動選擇", + "ai_settings.safety.description": "控制 AI 可執行的 SQL 操作類型,保護資料安全", + "ai_settings.safety.full.desc": "AI 可執行所有操作(含 DDL),高風險操作會自動警示。", + "ai_settings.safety.full.label": "完整模式", + "ai_settings.safety.readonly.desc": "AI 僅可執行 SELECT 等查詢操作,安全性最高。", + "ai_settings.safety.readonly.label": "唯讀模式", + "ai_settings.safety.readwrite.desc": "AI 可執行 INSERT/UPDATE/DELETE,危險操作需要二次確認。", + "ai_settings.safety.readwrite.label": "讀寫模式", "ai_settings.skill.action.add": "新增 Skill", "ai_settings.skill.confirm_delete": "刪除這個 Skill?", "ai_settings.skill.description": "Skill 不是另一條大型提示詞,而是「命名的提示模組 + 作用域 + 工具依賴」。目前階段仍建議保留在主倉庫內,不需要另外建立 GitHub 倉庫;只有未來要分發共享 skill pack 時,再考慮拆倉。", "ai_settings.skill.description_placeholder": "給自己看的說明,例如:輸出 SQL 前必須先確認欄位名稱和風險", "ai_settings.skill.empty": "還沒有 Skill。你可以為資料庫、JVM、診斷場景分別定義專用的 system prompt。", "ai_settings.skill.hint": "啟用後會依 scope 注入對應會話;如果依賴的工具不存在,該 Skill 會被自動略過。", + "ai_settings.skill.message.delete_failed": "刪除 Skill 失敗", + "ai_settings.skill.message.deleted": "Skill 已刪除", + "ai_settings.skill.message.save_failed": "儲存 Skill 失敗", + "ai_settings.skill.message.saved": "Skill 已儲存", "ai_settings.skill.name_placeholder": "Skill 名稱,例如:SQL 審查 / JVM 診斷計畫", "ai_settings.skill.required_tools_placeholder": "可選:宣告這個 Skill 依賴哪些工具", "ai_settings.skill.scope.database.desc": "僅 SQL / 資料庫場景啟用", @@ -6790,6 +2348,37 @@ "ai_settings.skill.status.disabled": "已停用", "ai_settings.skill.status.enabled": "已啟用", "ai_settings.skill.system_prompt_placeholder": "輸入這條 Skill 要追加的 system prompt。建議聚焦一個明確能力,不要和全域提示詞重複。", + "ai_settings.subtitle": "設定 AI 模型、安全級別和上下文選項", + "ai_settings.title": "AI 設定", + "ai_settings.tools.builtin_tool_label": "內建工具", + "ai_settings.tools.description": "AI 助手在處理資料庫相關問題時,可以自動呼叫以下內建工具取得真實資料,全程無需人工介入。", + "ai_settings.tools.empty.no_matches": "沒有符合的內建工具。可以改搜更寬泛的關鍵字,例如 mcp、日誌、連線、事務、快捷鍵、schema。", + "ai_settings.tools.execute_sql.desc": "執行 SQL 查詢並返回結果", + "ai_settings.tools.execute_sql.detail": "傳入 connectionId、dbName 和 sql,在目標資料庫上執行 SQL 並返回結果(最多 50 行)。受安全級別控制,唯讀模式下僅允許 SELECT/SHOW/DESCRIBE。", + "ai_settings.tools.get_columns.desc": "取得指定表格的欄位結構", + "ai_settings.tools.get_columns.detail": "傳入 connectionId、dbName 和 tableName,返回每個欄位的名稱、類型、是否可空、預設值和註解。AI 在產生 SQL 前必須呼叫此工具確認真實欄位名。", + "ai_settings.tools.get_connections.desc": "取得所有可用的資料庫連線", + "ai_settings.tools.get_connections.detail": "返回連線 ID、名稱、類型(MySQL/PostgreSQL 等)和 Host 地址。AI 會根據返回資訊決定優先探索哪個連線。", + "ai_settings.tools.get_databases.desc": "取得指定連線下的所有資料庫", + "ai_settings.tools.get_databases.detail": "傳入 connectionId,返回該連線下的資料庫或結構名稱清單。", + "ai_settings.tools.get_table_ddl.desc": "取得表格建表語句", + "ai_settings.tools.get_table_ddl.detail": "傳入 connectionId、dbName 和 tableName,返回完整的 CREATE TABLE 語句,包含欄位定義、索引、約束等資訊。", + "ai_settings.tools.get_tables.desc": "取得指定資料庫下的所有表名", + "ai_settings.tools.get_tables.detail": "傳入 connectionId 和 dbName,返回表名清單。AI 用它來定位使用者提到的目標表。", + "ai_settings.tools.parameters.default_value": "預設:{{value}}", + "ai_settings.tools.parameters.enum_values": "可選值:{{values}}", + "ai_settings.tools.parameters.example": "範例:", + "ai_settings.tools.parameters.hint_title": "參數提示", + "ai_settings.tools.parameters.optional": "可選", + "ai_settings.tools.parameters.required": "必填", + "ai_settings.tools.parameters.type_label": "類型:{{type}}", + "ai_settings.tools.params_label": "參數:", + "ai_settings.tools.params.none": "無參數", + "ai_settings.tools.search.aria_label": "搜尋內建工具", + "ai_settings.tools.search.clear": "清除", + "ai_settings.tools.search.placeholder": "搜尋工具、流程或參數,例如 mcp / lineLimit / allowMutating / 事務", + "ai_settings.tools.summary": "目前顯示 {{flowVisible}}/{{flowTotal}} 條推薦流程,{{toolVisible}}/{{toolTotal}} 個內建工具。", + "ai_settings.tools.workflow": "💡 工作流程:get_connections → get_databases → get_tables → get_columns → 生成 SQL", "ai.service.mcp_client.claude_code.config_dir_create_failed": "建立 Claude Code 設定目錄失敗:{{detail}}", "ai.service.mcp_client.claude_code.config_format_invalid": "Claude Code 設定格式異常:{{path}} 應為 {{expected}}", "ai.service.mcp_client.claude_code.config_parse_failed": "解析 Claude Code 設定失敗:{{detail}}", @@ -6816,12 +2405,111 @@ "ai.service.mcp_client.executable_path_failed": "定位目前 GoNavi 可執行檔失敗:{{detail}}", "ai.service.mcp_client.remote.status.message": "{{label}} 通常部署在雲端或遠端環境;請透過遠端 MCP 橋接接入 Windows GoNavi,資料庫密碼仍保存在 GoNavi 本機。", "ai.service.mcp_client.user_home_dir_unavailable": "無法判定目前使用者目錄", + "app.about.action.check_updates": "檢查更新", + "app.about.action.download_progress": "下載进度", + "app.about.action.download_update": "下載更新", + "app.about.action.hide_to_background": "隱藏到背景", + "app.about.action.install_update": "安裝更新", + "app.about.action.mute_this_version": "本次不再提示", + "app.about.action.open_install_directory": "開啟安裝目錄", + "app.about.community.ai_book": "AI全书", + "app.about.description": "查看版本資訊、儲存庫連結、更新狀態與下載入口。", + "app.about.download_progress.title": "下載更新", + "app.about.download_progress.title_with_version": "下載更新 {{version}}", + "app.about.field.author": "作者", + "app.about.field.community": "技術圈", + "app.about.field.update_status": "更新状态", + "app.about.field.version": "版本", + "app.about.message.check_failed_with_error": "檢查更新失敗: {{error}}", + "app.about.message.download_completed": "更新下載完成", + "app.about.message.download_completed_with_path": "更新下載完成,更新套件路徑:{{path}}", + "app.about.message.download_failed_with_error": "更新下載失敗: {{error}}", + "app.about.message.install_directory_opened_manual_replace": "已開啟安裝目錄,請手動完成替換", + "app.about.message.install_failed_with_error": "更新安裝失敗: {{error}}", + "app.about.message.load_failed": "获取套用資訊失败: {{error}}", + "app.about.message.new_version_found": "發現新版本 {{version}}", + "app.about.message.open_install_directory_failed_with_error": "開啟安裝目錄失敗: {{error}}", + "app.about.message.update_package_ready": "更新套件已就緒({{version}})", + "app.about.message.update_package_ready_with_path": "更新套件已就緒({{version}}),路徑:{{path}}", + "app.about.project_links": "專案入口", + "app.about.title": "關於 GoNavi", + "app.about.update_status.check_failed": "檢查更新失敗: {{error}}", + "app.about.update_status.checking": "正在檢查更新...", + "app.about.update_status.latest": "目前已是最新版本({{version}})", + "app.about.update_status.new_version_downloaded": "發現新版本 {{version}}(已下載,請點擊「下載進度」後安裝)", + "app.about.update_status.new_version_not_downloaded": "發現新版本 {{version}}(未下載)", + "app.about.update_status.not_checked": "尚未檢查", + "app.ai_panel.action.close": "關閉面板", + "app.ai_panel.action.reload": "重新載入", + "app.ai_panel.aria.close": "關閉 AI 面板", + "app.ai_panel.error.description": "這通常是開發環境熱更新後懶載入資源失效所致。已避免整頁白屏,你可以直接重試。", + "app.ai_panel.error.title": "AI 面板載入失敗", "app.backend.error.reset_webview_zoom_failed": "重設 WebView2 zoom 失敗:{{detail}}", + "app.browser_mock.export_connection_package_unsupported": "瀏覽器 mock 不支援恢復包匯出", + "app.browser_mock.export_sql_unsupported": "瀏覽器 mock 不支援 SQL 檔案匯出", + "app.browser_mock.import_connection_package_unsupported": "瀏覽器 mock 不支援恢復包匯入,僅支援歷史 JSON 連線陣列", + "app.browser_mock.mcp_client.claude_code.installed": "已寫入 Claude Code 使用者層級 MCP 設定,重新啟動 Claude CLI 後可在 /mcp 的 User MCPs 中看到 GoNavi。", + "app.browser_mock.mcp_client.claude_code.not_detected": "未偵測到 Claude Code 使用者層級 GoNavi MCP 設定", + "app.browser_mock.mcp_client.codex.installed": "已寫入 Codex 使用者層級 MCP 設定,重新啟動 Codex CLI 或桌面端後可看到 GoNavi。", + "app.browser_mock.mcp_client.codex.path_mismatch": "已偵測到 Codex 中的 GoNavi MCP 記錄,但與目前 GoNavi 安裝路徑不一致,建議更新", + "app.browser_mock.mcp_http.not_running": "GoNavi MCP HTTP 服務未啟動", + "app.browser_mock.mcp_http.started": "GoNavi MCP HTTP 服務已啟動", + "app.browser_mock.mcp_http.stopped": "GoNavi MCP HTTP 服務已停止", + "app.browser_mock.mcp_server.command_required": "MCP 命令不能為空", + "app.browser_mock.mcp_server.test_success": "MCP mock 測試成功", + "app.browser_mock.mcp_tool.unavailable": "瀏覽器 mock 未接入真實 MCP 服務", + "app.browser_mock.provider.test_failed_detail": "連線測試失敗:{{detail}}", + "app.browser_mock.provider.test_success": "端點連通性測試成功", + "app.connection_package.action.start_export": "開始匯出", + "app.connection_package.action.start_import": "開始匯入", + "app.connection_package.dialog.export_title": "匯出連線", + "app.connection_package.dialog.file_password_placeholder": "請輸入檔案保護密碼(選填)", + "app.connection_package.dialog.help.encrypted_passwords_recommend_file_password": "密碼已加密保護。如需透過公網傳輸,建議設定檔案保護密碼。", + "app.connection_package.dialog.help.exclude_passwords": "將只匯出連線設定,不包含密碼。", + "app.connection_package.dialog.help.share_file_password_separately": "請透過單獨管道將密碼告知接收方,不要和檔案一起傳送。", + "app.connection_package.dialog.import_password_title": "輸入匯入密碼", + "app.connection_package.dialog.option.include_passwords": "匯出連線密碼", + "app.connection_package.dialog.option.use_file_password": "設定檔案保護密碼", + "app.connection_package.dialog.restore_password_placeholder": "請輸入恢復包密碼", + "app.connection_package.error.export_capability_unavailable": "匯出失敗:目前後端未提供新版匯出能力", + "app.connection_package.error.file_password_required": "檔案保護密碼不能為空", + "app.connection_package.error.import_capability_unavailable": "匯入失敗:目前後端未提供新版匯入能力", + "app.connection_package.error.import_no_connections": "匯入失敗:後端未返回連線列表", + "app.connection_package.error.missing_import_payload": "匯入失敗:未找到待匯入的恢復包內容", + "app.connection_package.error.refresh_failed_no_connections": "匯入成功,但重新整理連線列表失敗:後端未返回連線列表", + "app.connection_package.error.restore_password_required": "恢復包密碼不能為空", + "app.connection_package.message.export_failed": "匯出失敗", + "app.connection_package.message.export_succeeded": "匯出成功", + "app.connection_package.message.import_failed": "匯入失敗", + "app.connection_package.message.import_failed_with_error": "匯入失敗: {{error}}", + "app.connection_package.message.imported_connections": "成功匯入 {{count}} 個連線", + "app.connection_package.message.imported_with_missing_passwords": "成功匯入 {{count}} 個連線,部分連線未包含密碼,請編輯對應連線並輸入密碼後儲存", + "app.connection_package.message.no_connections_to_export": "沒有連線可匯出", + "app.connection_package.message.unsupported_file_format": "檔案格式錯誤:僅支援 GoNavi 恢復包、歷史 JSON 連線陣列或 MySQL Workbench XML", + "app.connection.message.editable_load_failed": "讀取已儲存連線詳情失敗,將改為開啟脫敏設定", + "app.connection.message.editable_load_failed_with_detail": "讀取已儲存連線詳情失敗:{{detail}},將改為開啟脫敏設定", + "app.data_root.action.migrate_and_switch": "遷移现有資料并切换", + "app.data_root.action.open_current": "開啟目前目錄", + "app.data_root.action.restore_default_directory": "還原預設目錄", + "app.data_root.action.select": "選擇目錄", + "app.data_root.action.switch_only": "仅切换到所选目錄", + "app.data_root.apply_method": "套用方式", + "app.data_root.backend.dialog.select_directory": "選擇 GoNavi 資料目錄", + "app.data_root.backend.error.create_bootstrap_directory_failed": "建立預設引導目錄失敗:{{detail}}", + "app.data_root.backend.error.create_data_directory_failed": "建立資料目錄失敗:{{detail}}", + "app.data_root.backend.error.create_target_failed": "建立目標資料目錄失敗:{{detail}}", + "app.data_root.backend.error.directory_empty": "資料目錄不能為空", + "app.data_root.backend.error.directory_unavailable": "資料目錄不存在或無法存取", + "app.data_root.backend.error.migrate_directory_failed": "遷移目錄失敗({{entry}}):{{detail}}", + "app.data_root.backend.error.migrate_file_failed": "遷移檔案失敗({{entry}}):{{detail}}", + "app.data_root.backend.error.open_directory_failed": "開啟資料目錄失敗:{{detail}}", + "app.data_root.backend.error.open_directory_unsupported": "目前平台暫不支援開啟目錄:{{platform}}", "app.data_root.backend.error.parse_migrated_security_update_manifest_failed": "解析遷移後的安全更新備份清單失敗:{{detail}}", "app.data_root.backend.error.parse_migrated_security_update_result_failed": "解析遷移後的安全更新結果失敗:{{detail}}", "app.data_root.backend.error.read_migrated_security_update_manifest_failed": "讀取遷移後的安全更新備份清單失敗:{{detail}}", "app.data_root.backend.error.read_migrated_security_update_result_failed": "讀取遷移後的安全更新結果失敗:{{detail}}", "app.data_root.backend.error.read_migrated_security_update_state_failed": "讀取遷移後的安全更新狀態失敗:{{detail}}", + "app.data_root.backend.error.read_source_failed": "讀取來源資料失敗({{entry}}):{{detail}}", "app.data_root.backend.error.read_source_root_failed": "讀取來源資料目錄失敗:{{detail}}", "app.data_root.backend.error.resolve_source_failed": "解析來源資料目錄失敗:{{detail}}", "app.data_root.backend.error.resolve_target_failed": "解析目標資料目錄失敗:{{detail}}", @@ -6829,11 +2517,539 @@ "app.data_root.backend.error.write_migrated_security_update_manifest_failed": "寫入遷移後的安全更新備份清單失敗:{{detail}}", "app.data_root.backend.error.write_migrated_security_update_result_failed": "寫入遷移後的安全更新結果失敗:{{detail}}", "app.data_root.backend.error.write_migrated_security_update_state_failed": "寫入遷移後的安全更新狀態失敗:{{detail}}", + "app.data_root.backend.message.migrated_restart": "資料已遷移並切換到新目錄,建議重新啟動應用程式以完成所有模組切換", + "app.data_root.backend.message.opened": "已開啟資料目錄", + "app.data_root.backend.message.unchanged": "資料目錄未變更", + "app.data_root.backend.message.updated_restart": "資料目錄已更新,建議重新啟動應用程式,讓 AI 與其他執行中模組完全切換到新目錄", + "app.data_root.current_directory": "目前目錄", + "app.data_root.default_directory": "預設目錄", + "app.data_root.description": "統一管理連線、代理、AI 設定與驅動等檔案型資料的根目錄。", + "app.data_root.driver_directory": "驅動目錄", + "app.data_root.message.apply_failed": "套用資料目錄失败", + "app.data_root.message.apply_failed_with_error": "套用資料目錄失败: {{error}}", + "app.data_root.message.load_failed": "載入資料目錄資訊失败", + "app.data_root.message.load_failed_with_error": "載入資料目錄資訊失败: {{error}}", + "app.data_root.message.open_failed": "開啟資料目錄失败", + "app.data_root.message.open_failed_with_error": "開啟資料目錄失败: {{error}}", + "app.data_root.message.select_failed": "選擇資料目錄失败", + "app.data_root.message.select_failed_with_error": "選擇資料目錄失败: {{error}}", + "app.data_root.message.select_valid_first": "请先選擇有效的資料目錄", + "app.data_root.message.updated": "資料目錄已更新", + "app.data_root.placeholder.select_new_directory": "選擇新的資料目錄", + "app.data_root.restart_hint": "切换后建议重启套用,以确保 AI 与其他长生命周期模块完整切换到新目錄。敏感密碼仍保存在系统 secret store,不会随文件目錄遷移。", + "app.data_root.switch_target": "切换目标", + "app.data_root.title": "資料儲存位置", + "app.linux_cjk_font_banner.action.open_font_settings": "字體設定", + "app.linux_cjk_font_banner.description": "中文可能顯示為方框。請安裝字體後重新啟動 GoNavi:", + "app.linux_cjk_font_banner.title": "Linux CJK 字體缺失", + "app.proxy.description": "统一設定更新檢查、驅動管理与未单独指定代理的連線网络出口。", + "app.proxy.enable": "啟用全局代理", + "app.proxy.host": "代理地址", + "app.proxy.host_placeholder": "例如:127.0.0.1", "app.proxy.message.config_applied": "全局代理設定已生效", + "app.proxy.message.invalid_enabled": "全局代理已开启,但地址或端口无效,目前按未啟用处理", + "app.proxy.message.save_failed": "全局代理設定失败: {{error}}", + "app.proxy.password_optional": "密碼(可选)", + "app.proxy.port": "端口", + "app.proxy.scope_hint": "* 作用于更新檢查、驅動管理网络请求,以及未单独設定代理的資料库連線", + "app.proxy.section_title": "全局代理", + "app.proxy.title": "全局代理設定", + "app.proxy.type": "代理类型", + "app.proxy.username_optional": "使用者名(可选)", + "app.security_update.error.capability_unavailable": "安全更新能力無法使用", + "app.security_update.message.completed": "已儲存設定已完成安全更新", + "app.security_update.message.needs_attention": "更新尚未完成,有少量設定需要你處理", + "app.security_update.message.not_finished_retry_later": "安全更新未完成,請稍後重試", + "app.security_update.message.postpone_failed": "暫時無法延後本次安全更新", + "app.security_update.message.rolled_back": "本次更新未完成,系統已保留目前可用設定", + "app.security_update.stage.checking_saved_config": "正在檢查已儲存設定", + "app.security_update.stage.updating_secure_storage": "正在更新安全儲存", + "app.security_update.stage.verifying_result": "正在校驗更新結果", + "app.settings.description": "集中處理語言、代理、主題、AI 與關於等通用設定入口。", + "app.settings.entry.about.description": "檢視版本資訊、仓库地址和更新状态。", + "app.settings.entry.about.title": "關於 GoNavi", + "app.settings.entry.ai.description": "管理模型供应商、密钥和預設行为。", + "app.settings.entry.ai.title": "AI 設定", + "app.settings.entry.proxy.description": "统一設定更新檢查、驅動管理和公共网络出口。", + "app.settings.entry.proxy.title": "全局代理", + "app.settings.entry.theme.description": "切换亮暗主題并调整界面观感。", + "app.settings.entry.theme.title": "主題与外观", + "app.settings.title": "設定中心", + "app.shortcuts.action.diagnoseQuery.description": "對目前 SQL 執行 EXPLAIN 並顯示執行計劃圖與索引建議", + "app.shortcuts.action.diagnoseQuery.label": "SQL 診斷", + "app.shortcuts.action.focusSidebarSearch.description": "定位到左側連線樹搜尋框", + "app.shortcuts.action.focusSidebarSearch.label": "聚焦側邊欄搜尋", + "app.shortcuts.action.newConnection.description": "建立新的資料庫、執行階段或其他資料來源連線", + "app.shortcuts.action.newConnection.label": "新增資料來源", + "app.shortcuts.action.newQueryTab.description": "建立新的 SQL 查詢標籤頁", + "app.shortcuts.action.newQueryTab.label": "新增查詢頁", + "app.shortcuts.action.openShortcutManager.description": "開啟快捷鍵設定面板", + "app.shortcuts.action.openShortcutManager.label": "開啟快捷鍵管理", + "app.shortcuts.action.record": "錄製", + "app.shortcuts.action.resetWindowZoom.description": "Windows 工作列還原後字體異常放大時手動觸發;會切換一次最大化讓 WebView2 重新計算字體度量", + "app.shortcuts.action.resetWindowZoom.label": "重設視窗縮放", + "app.shortcuts.action.restore_defaults": "還原預設", + "app.shortcuts.action.runQuery.description": "在目前查詢頁執行 SQL", + "app.shortcuts.action.runQuery.label": "執行 SQL", + "app.shortcuts.action.saveQuery.description": "儲存目前查詢頁;未命名查詢會開啟儲存彈窗", + "app.shortcuts.action.saveQuery.label": "儲存查詢", + "app.shortcuts.action.selectCurrentStatement.description": "在查詢編輯器中選取游標所在 SQL 語句", + "app.shortcuts.action.selectCurrentStatement.label": "選取目前語句", + "app.shortcuts.action.sendAIChatMessage.description": "在 AI 輸入框中送出目前訊息,Shift+Enter 一律換行", + "app.shortcuts.action.sendAIChatMessage.label": "AI 聊天送出", + "app.shortcuts.action.showSlowQueries.description": "檢視目前連線的慢 SQL 歷史記錄(預設閾值 500ms)", + "app.shortcuts.action.showSlowQueries.label": "慢 SQL 歷史", + "app.shortcuts.action.switchToNextTab.description": "在開啟的標籤頁中向右切換", + "app.shortcuts.action.switchToNextTab.label": "切換到下一個標籤頁", + "app.shortcuts.action.switchToPreviousTab.description": "在開啟的標籤頁中向左切換", + "app.shortcuts.action.switchToPreviousTab.label": "切換到上一個標籤頁", + "app.shortcuts.action.toggleAIPanel.description": "開啟右側 AI 資料洞察面板", + "app.shortcuts.action.toggleAIPanel.label": "開啟 AI 資料洞察", + "app.shortcuts.action.toggleLogPanel.description": "開啟或關閉 SQL 執行記錄面板", + "app.shortcuts.action.toggleLogPanel.label": "切換記錄面板", + "app.shortcuts.action.toggleMacFullscreen.description": "macOS 原生視窗控制模式下的全螢幕切換", + "app.shortcuts.action.toggleMacFullscreen.label": "切換原生全螢幕", "app.shortcuts.action.toggleQueryResultsPanel.description": "在查詢編輯器中顯示或隱藏下方結果區域", "app.shortcuts.action.toggleQueryResultsPanel.label": "切換結果區", + "app.shortcuts.action.toggleTheme.description": "在淺色與深色主題之間切換", + "app.shortcuts.action.toggleTheme.label": "切換主題", + "app.shortcuts.capture_hint": "點擊「錄製」後按下快捷鍵。按 Esc 可取消錄製。全域快捷鍵建議包含修飾鍵;AI 聊天傳送僅支援 Enter 相關組合,Shift+Enter 保留換行。", + "app.shortcuts.capture_waiting": "請按下快捷鍵...", + "app.shortcuts.context.datagrid": "資料表格", + "app.shortcuts.context.global": "瀏覽器", + "app.shortcuts.context.monaco": "編輯器", + "app.shortcuts.description": "統一檢視、錄製與啟用/停用常用快捷鍵,保持操作習慣一致。", + "app.shortcuts.message.ai_send_limit": "AI 聊天傳送快捷鍵僅支援 Enter / Ctrl+Enter / Cmd+Enter / Alt+Enter,Shift+Enter 保留換行", + "app.shortcuts.message.conflict": "與「{{action}}」衝突,請更換一組快捷鍵", + "app.shortcuts.message.modifier_required": "快捷鍵至少包含 Ctrl / Alt / Shift / Meta 之一", + "app.shortcuts.message.reserved_conflict_info": "已覆蓋編輯器「{{labels}}」預設快捷鍵", + "app.shortcuts.message.reserved_conflict_warning": "與{{contexts}}「{{labels}}」衝突,可能失效", + "app.shortcuts.message.restored_defaults": "已還原預設快捷鍵", + "app.shortcuts.reserved.browser_close_tab": "瀏覽器關閉標籤頁", + "app.shortcuts.reserved.browser_new_incognito_window": "瀏覽器新增無痕式視窗", + "app.shortcuts.reserved.browser_new_tab": "瀏覽器新增分頁", + "app.shortcuts.reserved.browser_new_window": "瀏覽器新增視窗", + "app.shortcuts.reserved.browser_print": "瀏覽器列印", + "app.shortcuts.reserved.browser_save": "瀏覽器儲存", + "app.shortcuts.reserved.datagrid_copy": "資料表格複製", + "app.shortcuts.reserved.editor_add_selection": "編輯器新增選取區", + "app.shortcuts.reserved.editor_delete_line": "編輯器刪除行", + "app.shortcuts.reserved.editor_find": "編輯器尋找", + "app.shortcuts.reserved.editor_find_global": "編輯器全域尋找", + "app.shortcuts.reserved.editor_goto_line": "編輯器前往指定行", + "app.shortcuts.reserved.editor_insert_line_after": "編輯器在下方插入行", + "app.shortcuts.reserved.editor_insert_line_before": "編輯器在上方插入行", + "app.shortcuts.reserved.editor_quick_open": "編輯器快速開啟", + "app.shortcuts.reserved.editor_rename_symbol": "編輯器重新命名符號", + "app.shortcuts.reserved.editor_replace": "編輯器取代", + "app.shortcuts.title": "快捷鍵管理", + "app.sidebar.ai_assistant": "AI 助手", + "app.sidebar.resize_width": "拖动调整宽度", + "app.sidebar.settings": "設定", + "app.sidebar.sql_execution_log": "SQL 執行日志", + "app.sidebar.tools": "工具", + "app.startup_readiness.loading_local_config": "正在載入本機設定...", + "app.startup_readiness.loading_security_config": "正在載入安全設定...", + "app.theme.action.restore_defaults": "還原預設", + "app.theme.appearance_settings_description": "集中調整縮放、字型、透明度與模糊效果。", + "app.theme.appearance_settings_title": "外觀設定", + "app.theme.appearance.blur_hint": "* 仅控制套用内覆盖层的模糊效果", + "app.theme.appearance.blur_title": "高斯模糊 (Blur)", + "app.theme.appearance.enable_transparency_blur": "啟用透明与模糊", + "app.theme.appearance.enable_transparency_blur_hint": "關閉后保留目前阈值,重新开启时直接還原之前的設定。", + "app.theme.appearance.font_size_title": "基础字体大小 (Font Size)", + "app.theme.appearance.opacity_title": "背景不透明度 (Opacity)", + "app.theme.appearance.transparency_blur_title": "透明与模糊效果", + "app.theme.appearance.ui_scale_hint": "* 建议小屏设备設定为 85%-95%", + "app.theme.appearance.ui_scale_title": "界面缩放 (UI Scale)", + "app.theme.appearance.windows_acrylic_hint": "Windows 使用系统 Acrylic 效果,模糊程度由系统控制", + "app.theme.data_table.column_width_hint": "标准模式預設列宽 200px;紧凑模式預設列宽 140px。已手动拖拽调整的列宽优先保留。", + "app.theme.data_table.column_width_mode": "資料表列宽模式", + "app.theme.data_table.column_width_mode.compact": "紧凑 140px", + "app.theme.data_table.column_width_mode.standard": "标准 200px", + "app.theme.data_table.density": "表格密度", + "app.theme.data_table.density_hint": "控制列高、欄寬和內距。舒適適合大螢幕細看;緊湊適合最大化資訊密度。已手動拖曳的欄寬會優先保留。", + "app.theme.data_table.density.comfortable": "舒適", + "app.theme.data_table.density.compact": "緊湊", + "app.theme.data_table.density.standard": "標準", + "app.theme.data_table.follow_global": "跟隨全域", + "app.theme.data_table.font_size": "資料表字型大小", + "app.theme.data_table.sidebar_tree_font_size": "左側庫表字型大小", + "app.theme.data_table.title": "資料表显示", + "app.theme.data_table.vertical_borders": "显示資料表竖向分隔线", + "app.theme.data_table.vertical_borders_hint": "仅作用于資料表页面 DataGrid,不影响其他表格组件。", "app.theme.font_family.default_mono_option": "預設程式碼字型", "app.theme.font_family.default_ui_option": "預設 UI 字型", + "app.theme.font_family.linux_cjk_install_prefix": "Ubuntu/Linux 未偵測到中文 CJK 字體,介面可能顯示方框。請安裝:", + "app.theme.font_family.linux_cjk_install_suffix": ",然後重新啟動 GoNavi。", + "app.theme.font_family.load_failed": "載入系統字型失敗", + "app.theme.font_family.load_failed_fallback": "系統字型載入失敗,目前回退到常見字型預設:{{error}}", + "app.theme.font_family.loaded_ui_hint": "已讀取目前系統 {{count}} 個字型族,支援輸入搜尋比對。清空後回退預設 UI 字型。", + "app.theme.font_family.loading_ui_hint": "依目前系統即時載入已安裝字型,支援輸入搜尋比對。清空後回退預設 UI 字型。", + "app.theme.font_family.mono_fallback_hint": "目前已回退到常見程式碼字型預設。作用於 SQL 編輯器、AI 程式碼區塊、日誌、DDL 與資料表等寬內容。", + "app.theme.font_family.mono_hint": "優先顯示目前系統已安裝字型,名稱接近 Mono/Code/Console 的字型會排在前面。作用於 SQL 編輯器、AI 程式碼區塊、日誌、DDL 與資料表等寬內容。", + "app.theme.font_family.mono_title": "程式碼字型 (Mono Font Family)", + "app.theme.font_family.title": "字型族", + "app.theme.font_family.ui_title": "介面字型 (UI Font Family)", + "app.theme.mac_window.restart_hint": "* 已同步隐藏右上角自定义按钮;如系统視窗样式未立即重新整理,可重启套用后再确认", + "app.theme.mac_window.title": "macOS 視窗控制", + "app.theme.mac_window.use_native_controls": "使用 macOS 原生視窗控制", + "app.theme.mac_window.use_native_controls_hint": "啟用后显示左上角红黄绿按钮,并优先使用 macOS 原生全屏行为。", + "app.theme.mode_title": "主題模式", + "app.theme.mode.dark.description": "適合低光源環境,視覺感受更沉穩。", + "app.theme.mode.dark.label": "深色主題", + "app.theme.mode.light.description": "適合明亮環境,視覺層次更輕盈。", + "app.theme.mode.light.label": "淺色主題", + "app.theme.nav.appearance.description": "縮放、字型與透明度", + "app.theme.nav.appearance.title": "外觀參數", + "app.theme.nav.theme.description": "淺色與深色切換", + "app.theme.nav.theme.title": "主題模式", + "app.theme.navigation_title": "設定導覽", + "app.theme.startup_window.fullscreen": "启动时全屏", + "app.theme.startup_window.fullscreen_windows": "启动时全屏(Windows 按最大化处理)", + "app.theme.startup_window.hint": "* 修改后下次启动生效", + "app.theme.startup_window.title": "启动視窗", + "app.theme.startup_window.windows_hint": "* Windows 下该选项按“启动时最大化”处理,修改后下次启动生效", + "app.theme.tab_display.action.move_down": "下移", + "app.theme.tab_display.action.move_up": "上移", + "app.theme.tab_display.badge.current": "目前", + "app.theme.tab_display.description": "自訂連線名稱、物件類型、物件名稱、資料庫、Schema 與 Host/IP 的顯示順序;雙行模式可把上下文放到副行。", + "app.theme.tab_display.element.connection.description": "連線簡稱或環境名稱,例如 DEV", + "app.theme.tab_display.element.connection.label": "連線名稱", + "app.theme.tab_display.element.database.description": "目前 DB / catalog 名稱", + "app.theme.tab_display.element.database.label": "資料庫", + "app.theme.tab_display.element.host.description": "連線目標位址摘要", + "app.theme.tab_display.element.host.label": "Host/IP", + "app.theme.tab_display.element.kind.description": "SQL / TABLE / VIEW 等類型標籤", + "app.theme.tab_display.element.kind.label": "物件類型", + "app.theme.tab_display.element.object.description": "資料表名稱、查詢名稱、資源名稱等核心名稱", + "app.theme.tab_display.element.object.label": "物件名稱", + "app.theme.tab_display.element.schema.description": "schema / owner 前綴", + "app.theme.tab_display.element.schema.label": "Schema", + "app.theme.tab_display.layout.double": "雙行", + "app.theme.tab_display.layout.single": "單行", + "app.theme.tab_display.preview.default_label": "預設標籤", + "app.theme.tab_display.preview.focused": ";目前選取 {{label}}", + "app.theme.tab_display.preview.prefix": "目前預覽:", + "app.theme.tab_display.preview.secondary": ",副行 {{labels}}", + "app.theme.tab_display.row.primary": "主行", + "app.theme.tab_display.row.secondary": "副行", + "app.theme.tab_display.title": "Tab 標籤顯示", + "app.theme.theme_settings_description": "切換淺色與深色主題,維持整體視覺風格一致。", + "app.theme.theme_settings_title": "主題設定", + "app.theme.ui_version.badge.new": "NEW", + "app.theme.ui_version.beta_warning": "新版 UI 仍在 Beta,部分畫面樣式可能與舊版不同,遇到問題可隨時切回。", + "app.theme.ui_version.description": "在保留全部功能的前提下切換整體外觀;新版採用更緊湊的資訊層級與更現代的視覺語言。", + "app.theme.ui_version.legacy.badge": "預設", + "app.theme.ui_version.legacy.description": "目前穩定介面,所有功能皆可完整使用。", + "app.theme.ui_version.legacy.label": "舊版 UI", + "app.theme.ui_version.platform_hint": "Windows、macOS 與 Linux 均可切換;切換後會立即生效,部分彈窗會在下次開啟時使用新樣式。", + "app.theme.ui_version.sidebar_search.command": "新版命令搜尋", + "app.theme.ui_version.sidebar_search.filter": "舊版側欄篩選", + "app.theme.ui_version.sidebar_search.hint": "新版命令搜尋適合跳轉連線、資料表與動作,可在面板中開啟同步開關持續篩選左側樹;舊版側欄篩選會直接顯示輸入框並持久保留篩選內容。", + "app.theme.ui_version.sidebar_search.title": "新版左側搜尋模式", + "app.theme.ui_version.title": "介面版本", + "app.theme.ui_version.v2.badge": "Beta", + "app.theme.ui_version.v2.description": "重新設計的緊湊介面,強化 AI 入口與資料表概覽。", + "app.theme.ui_version.v2.label": "新版 UI", + "app.tools.description": "集中處理連線設定、同步、驅動和快捷鍵相關操作。", + "app.tools.entry.data_compare.description": "依主鍵分析新增、更新、刪除與相同行。", + "app.tools.entry.data_compare.title": "資料比對", + "app.tools.entry.data_root.description": "檢視、切换或遷移本地資料儲存位置。", + "app.tools.entry.data_root.title": "資料目錄", + "app.tools.entry.drivers.description": "安裝、更新或移除資料库驅動。", + "app.tools.entry.drivers.title": "驅動管理", + "app.tools.entry.export.description": "匯出目前連線与可见設定字段。", + "app.tools.entry.export.title": "匯出連線設定", + "app.tools.entry.import.description": "从本地文件還原連線列表。", + "app.tools.entry.import.title": "匯入連線設定", + "app.tools.entry.schema_compare.description": "對比來源表與目標表的結構差異,只預覽不執行。", + "app.tools.entry.schema_compare.title": "表結構比對", + "app.tools.entry.security_update.description": "檢視已儲存設定的安全更新狀態。", + "app.tools.entry.security_update.status_description": "目前狀態:{{status}}", + "app.tools.entry.security_update.title": "安全更新", + "app.tools.entry.shortcuts.description": "檢視並調整全域快捷鍵綁定。", + "app.tools.entry.shortcuts.title": "快捷鍵管理", + "app.tools.entry.snippets.description": "管理 SQL 程式碼片段與前綴補全。", + "app.tools.entry.snippets.title": "程式碼片段管理", + "app.tools.entry.sync.description": "进入跨源同步工作流。", + "app.tools.entry.sync.title": "資料同步", + "app.tools.group.config.description": "匯入匯出、資料目錄與已儲存設定維護。", + "app.tools.group.config.title": "連線與設定", + "app.tools.group.workflow.description": "比對結構、分析差異並發起同步。", + "app.tools.group.workflow.title": "資料工作流", + "app.tools.group.workspace.description": "驅動、程式碼片段與全域快捷鍵。", + "app.tools.group.workspace.title": "編輯器與驅動", + "app.tools.title": "工具中心", + "app.update.action.hide_to_background": "隐藏到背景", + "app.update.action.install_update": "安裝更新", + "app.update.action.open_install_directory": "開啟安裝目錄", + "app.update.backend.error.check_failed": "檢查更新失敗:{{detail}}", + "app.update.backend.error.check_http_status": "檢查更新失敗:HTTP {{status}}", + "app.update.backend.error.download_failed": "更新下載失敗:{{detail}}", + "app.update.backend.error.install_unsupported": "目前平台暫不支援更新安裝:{{platform}}", + "app.update.backend.error.latest_version_unparseable": "無法解析最新版本號", + "app.update.backend.error.online_update_unsupported": "目前平台暫不支援線上更新:{{platform}}", + "app.update.backend.error.package_download_http_failed": "下載更新套件失敗:HTTP {{status}}", + "app.update.backend.error.package_file_busy": "更新下載失敗,檔案被占用:{{detail}}", + "app.update.backend.error.release_version_unparseable": "無法解析發行版本號", + "app.update.backend.error.sha256_missing_current_package": "SHA256SUMS 未包含目前平台更新套件", + "app.update.backend.error.sha256sums_download_failed": "下載 SHA256SUMS 失敗:HTTP {{status}}", + "app.update.backend.error.sha256sums_missing": "Release 未提供 SHA256SUMS", + "app.update.backend.error.update_package_not_found": "未找到更新套件:{{name}}", + "app.update.backend.message.app_directory_unavailable": "無法存取應用程式目錄:{{path}}", + "app.update.backend.message.app_directory_unresolved_download": "無法判斷目前應用程式目錄,因此無法下載更新", + "app.update.backend.message.check_first": "請先檢查更新", + "app.update.backend.message.checksum_failed": "更新套件校驗失敗,請重試", + "app.update.backend.message.checksum_missing": "缺少更新套件校驗值(SHA256SUMS)", + "app.update.backend.message.create_workspace_failed": "無法在應用程式目錄建立更新工作目錄:{{path}}", + "app.update.backend.message.download_in_progress": "更新套件正在下載中,請稍後重試", + "app.update.backend.message.install_launch_failed": "啟動更新安裝程式失敗:{{detail}}", + "app.update.backend.message.install_launch_failed_with_log": "啟動更新安裝程式失敗:{{detail}}(更新日誌:{{path}})", + "app.update.backend.message.install_started": "更新已開始安裝", + "app.update.backend.message.install_started_with_log": "更新已開始安裝,日誌路徑:{{path}}", + "app.update.backend.message.latest": "已是最新版本", + "app.update.backend.message.no_downloaded_package": "未找到已下載的更新套件", + "app.update.backend.message.no_update_package": "未找到可用的更新套件", + "app.update.backend.message.open_directory_failed": "開啟更新目錄失敗:{{detail}}", + "app.update.backend.message.open_directory_unsupported": "目前平台暫不支援開啟目錄:{{platform}}", + "app.update.backend.message.opened_install_directory": "已開啟安裝目錄:{{path}}", + "app.update.backend.message.package_already_downloaded": "更新套件已下載完成", + "app.update.backend.message.package_directory_unavailable": "更新目錄不存在或無法存取", + "app.update.backend.message.package_directory_unresolved": "無法解析更新目錄", + "app.update.backend.message.package_downloaded": "更新套件下載完成", + "app.update.backend.message.package_path_empty": "更新套件路徑為空", + "app.update.backend.message.update_found": "發現新版本:{{version}}", + "app.update.download_title": "下載更新", + "app.update.download_title_with_version": "下載更新 {{version}}", + "app.update.message.check_failed": "檢查更新失败: {{error}}", + "app.update.message.download_completed": "更新下載完成", + "app.update.message.download_completed_with_path": "更新下載完成,更新包路径:{{path}}", + "app.update.message.download_failed": "更新下載失败: {{error}}", + "app.update.message.install_failed": "更新安裝失败: {{error}}", + "app.update.message.open_install_directory_failed": "開啟安裝目錄失败: {{error}}", + "app.update.message.opened_install_directory": "已開啟安裝目錄,请手动完成替换", + "app.update.message.package_ready": "更新包已就绪({{version}})", + "app.update.message.package_ready_with_path": "更新包已就绪({{version}}),路径:{{path}}", + "app.update.message.update_found": "发现新版本 {{version}}", + "app.update.status.available_downloaded": "发现新版本 {{version}}(已下載,请点击“下載进度”后安裝)", + "app.update.status.available_not_downloaded": "发现新版本 {{version}}(未下載)", + "app.update.status.check_failed": "檢查更新失败: {{error}}", + "app.update.status.checking": "正在檢查更新...", + "app.update.status.latest": "目前已是最新版本({{version}})", + "app.update.status.not_checked": "未檢查", + "app.window_zoom.message.fullscreen_exit_first": "全螢幕狀態下無法重置縮放,請先退出全螢幕", + "app.window_zoom.message.reset_failed": "重置視窗縮放失敗", + "app.window_zoom.message.reset_success": "已重置視窗縮放", + "app.window_zoom.message.reset_success_fallback": "已重置視窗縮放(回退方案)", + "app.window_zoom.message.windows_only": "此功能僅在 Windows 平台生效", + "common.back_to_previous": "返回上一步", + "common.cancel": "取消", + "common.close": "關閉", + "common.confirm": "確認", + "common.continue": "繼續", + "common.delete": "刪除", + "common.edit": "編輯", + "common.error": "錯誤", + "common.loading": "載入中", + "common.named_item": "{{name}}", + "common.ok": "確定", + "common.refresh": "重新整理", + "common.save": "儲存", + "common.search": "搜尋", + "common.success": "成功", + "common.unknown": "未知", + "common.warning": "警告", + "connection_modal.action.browse": "瀏覽...", + "connection_modal.action.cancel": "取消", + "connection_modal.action.close": "關閉", + "connection_modal.action.copy_uri": "複製 URI", + "connection_modal.action.disable": "停用", + "connection_modal.action.discover_members": "自動探索成員", + "connection_modal.action.enable_and_prefer": "啟用並設為首選", + "connection_modal.action.generate_uri": "產生 URI", + "connection_modal.action.open_driver_manager": "前往驅動管理安裝", + "connection_modal.action.parse_uri": "解析 URI", + "connection_modal.action.previous_step": "上一步", + "connection_modal.action.reset_default": "重設為預設值", + "connection_modal.action.save": "儲存", + "connection_modal.action.test": "測試連線", + "connection_modal.action.view_reason": "查看原因", + "connection_modal.appearance.color": "顏色", + "connection_modal.appearance.current_icon": "目前圖示:{{icon}}", + "connection_modal.appearance.custom_color": "自訂顏色", + "connection_modal.appearance.icon": "圖示", + "connection_modal.appearance.preview": "預覽", + "connection_modal.badge.current": "目前", + "connection_modal.badge.current_editing": "目前編輯", + "connection_modal.badge.preferred": "首選", + "connection_modal.config_section.connectionMode.description": "設定連線模式。", + "connection_modal.config_section.connectionMode.title": "連線模式", + "connection_modal.config_section.credentials.description": "設定認證資訊。", + "connection_modal.config_section.credentials.title": "認證資訊", + "connection_modal.config_section.customDriver.description": "設定自訂驅動。", + "connection_modal.config_section.customDriver.title": "自訂驅動", + "connection_modal.config_section.customDsn.description": "設定自訂 DSN。", + "connection_modal.config_section.customDsn.title": "自訂 DSN", + "connection_modal.config_section.databaseScope.description": "設定資料庫範圍。", + "connection_modal.config_section.databaseScope.title": "資料庫範圍", + "connection_modal.config_section.fileTarget.description": "設定檔案資料庫。", + "connection_modal.config_section.fileTarget.title": "檔案資料庫", + "connection_modal.config_section.identity.description": "設定身分資訊。", + "connection_modal.config_section.identity.title": "身分資訊", + "connection_modal.config_section.jvmRuntime.description": "設定JVM 執行階段。", + "connection_modal.config_section.jvmRuntime.title": "JVM 執行階段", + "connection_modal.config_section.mongoDiscovery.description": "設定MongoDB 探索。", + "connection_modal.config_section.mongoDiscovery.title": "MongoDB 探索", + "connection_modal.config_section.mongoPolicy.description": "設定MongoDB 原則。", + "connection_modal.config_section.mongoPolicy.title": "MongoDB 原則", + "connection_modal.config_section.replica.description": "設定複本/從庫。", + "connection_modal.config_section.replica.title": "複本/從庫", + "connection_modal.config_section.service.description": "設定服務與資料庫。", + "connection_modal.config_section.service.title": "服務與資料庫", + "connection_modal.config_section.target.description": "設定目標位址。", + "connection_modal.config_section.target.title": "目標位址", + "connection_modal.config_section.uri.description": "輸入、產生或解析連線 URI。", + "connection_modal.config_section.uri.title": "連線 URI", + "connection_modal.db_icon_label.custom": "自訂", + "connection_modal.db_type_hint.custom": "使用自訂驅動和 DSN 連線資料庫。", + "connection_modal.db_type_hint.file": "選擇本機 SQLite 或 DuckDB 資料庫檔案。", + "connection_modal.db_type_hint.mongodb": "連線 MongoDB 單節點、Replica Set 或 SRV 位址。", + "connection_modal.db_type_hint.redis": "連線 Redis 單機或 Redis Cluster。", + "connection_modal.db_type_hint.standard": "填寫主機、連接埠、認證資訊和可選資料庫。", + "connection_modal.db_type.custom": "自訂", + "connection_modal.driver.current": "目前", + "connection_modal.error.unknown": "未知錯誤", + "connection_modal.error.unknown_exception": "未知錯誤", + "connection_modal.field.additional_hosts": "附加主機", + "connection_modal.field.additional_srv_hosts_optional": "附加 SRV 主機(選填)", + "connection_modal.field.auth_source": "認證庫 (authSource)", + "connection_modal.field.clickHouseProtocol.auto": "自動", + "connection_modal.field.cluster_additional_hosts": "叢集附加節點", + "connection_modal.field.connection_name": "連線名稱", + "connection_modal.field.connection_timeout_seconds": "連線逾時(秒)", + "connection_modal.field.connection_timeout_seconds_ascii": "連線逾時(秒)", + "connection_modal.field.default_database_optional": "預設連線資料庫(選填)", + "connection_modal.field.defaultDatabase.placeholder": "例如:appdb", + "connection_modal.field.display_databases_optional": "顯示資料庫(選填)", + "connection_modal.field.driver_name": "驅動名稱", + "connection_modal.field.driver.placeholder": "例如: mysql, postgres", + "connection_modal.field.dsn": "DSN", + "connection_modal.field.dsn.placeholder": "例如: user:pass@tcp(localhost:3306)/dbname?charset=utf8", + "connection_modal.field.file_path_absolute": "檔案路徑(絕對路徑)", + "connection_modal.field.host": "主機", + "connection_modal.field.host_address": "主機位址", + "connection_modal.field.oceanBaseProtocol.help.connectionAttributes": "如果 Oracle 租戶連線報「Error 1235」或 OBClient 握手失敗,可在「連線參數」欄位透過 {{attributes}} 覆蓋 GoNavi 預設注入的 OBClient capability。", + "connection_modal.field.oceanBaseProtocol.help.primary": "MySQL 租戶請選擇 MySQL;Oracle 租戶請選擇 Oracle。GoNavi 會依連接埠自動選擇:OB MySQL wire 連接埠走 OBClient capability 注入(與 Navicat 相同路徑),OBProxy Oracle listener 連接埠走標準 TNS。", + "connection_modal.field.oceanBaseProtocol.label": "OceanBase 協議", + "connection_modal.field.password": "密碼", + "connection_modal.field.password_optional": "密碼(選填)", + "connection_modal.field.port": "連接埠", + "connection_modal.field.port_plain": "連接埠", + "connection_modal.field.primary_port": "主要連接埠", + "connection_modal.field.private_key_path_optional": "私鑰路徑(選填)", + "connection_modal.field.proxy_host": "代理主機", + "connection_modal.field.proxy_password_optional": "代理密碼(選填)", + "connection_modal.field.proxy_type": "代理類型", + "connection_modal.field.proxy_username_optional": "代理使用者名稱(選填)", + "connection_modal.field.replica_hosts": "從庫位址清單", + "connection_modal.field.replica_password_optional": "從庫密碼(選填)", + "connection_modal.field.replica_set_optional": "Replica Set(選填)", + "connection_modal.field.replica_set_password_optional": "Replica Set 密碼(選填)", + "connection_modal.field.replica_set_username_optional": "Replica Set 使用者名稱(選填)", + "connection_modal.field.replica_username_optional": "從庫使用者名稱(選填)", + "connection_modal.field.save_password": "儲存密碼", + "connection_modal.field.service_name": "服務名稱", + "connection_modal.field.serviceName.placeholder": "例如:ORCLPDB1", + "connection_modal.field.ssh_host": "SSH 主機", + "connection_modal.field.ssh_password": "SSH 密碼", + "connection_modal.field.ssh_user": "SSH 使用者", + "connection_modal.field.ssl_cert_path": "SSL 憑證路徑", + "connection_modal.field.ssl_key_path": "SSL 私鑰路徑", + "connection_modal.field.tunnel_host": "HTTP Tunnel 主機", + "connection_modal.field.tunnel_password_optional": "HTTP Tunnel 密碼(選填)", + "connection_modal.field.tunnel_username_optional": "HTTP Tunnel 使用者名稱(選填)", + "connection_modal.field.uri": "URI", + "connection_modal.field.username": "使用者名稱", + "connection_modal.field.username.optional_placeholder": "未啟用認證可留空", + "connection_modal.group.chinese_databases": "國產資料庫", + "connection_modal.group.other": "其他", + "connection_modal.group.relational": "關聯式資料庫", + "connection_modal.group.time_series": "時序資料庫", + "connection_modal.help.additional_hosts": "可選 MongoDB 成員,使用逗號、分號或空格分隔。", + "connection_modal.help.additional_srv_hosts": "可選的附加 SRV 主機,用於 MongoDB 探索。", + "connection_modal.help.connection_timeout": "用於連線測試與中繼資料載入,範圍 1-300 秒。", + "connection_modal.help.custom_driver": "已支援: mysql, postgres, sqlite, oracle, dm, kingbase;別名支援 postgresql/pgx、dm8、kingbase8/kingbasees/kingbasev8。目前不支援透過 JDBC Jar 擴充驅動程式。", + "connection_modal.help.default_database": "留空則使用伺服器預設資料庫。", + "connection_modal.help.oracle_service_name": "Oracle 服務名稱,例如 ORCLPDB1。", + "connection_modal.help.private_key_path": "使用私鑰進行 SSH 認證;若私鑰未加密,可留空密碼。", + "connection_modal.help.redis_cluster_hosts": "附加 Redis Cluster 節點,使用逗號、分號或空格分隔。", + "connection_modal.help.replica_hosts": "從庫位址使用 host:port 格式,使用逗號、分號或空格分隔。", + "connection_modal.help.select_after_test": "請先測試連線以載入可選資料庫。", + "connection_modal.help.uri": "貼上或產生連線 URI。", + "connection_modal.jvm.access_mode_description": "選擇此 JVM 連線可使用的接入模式,並指定首選模式。", + "connection_modal.jvm.access_mode_title": "接入模式", + "connection_modal.jvm.agent_api_key_optional": "Agent API 金鑰(選填)", + "connection_modal.jvm.agent_description": "透過 GoNavi Agent 連線,適用於無法直接連線的網路環境。", + "connection_modal.jvm.agent_help": "GoNavi Agent 服務的基礎 URL。", + "connection_modal.jvm.agent_url": "Agent 位址", + "connection_modal.jvm.diagnostic_api_key_optional": "診斷 API 金鑰(選填)", + "connection_modal.jvm.diagnostic_description": "啟用可選診斷命令,用於 JVM 故障排查。", + "connection_modal.jvm.diagnostic_disabled_hint": "診斷增強未啟用,僅在需要執行階段排查時開啟。", + "connection_modal.jvm.diagnostic_timeout_seconds": "診斷逾時(秒)", + "connection_modal.jvm.diagnostic_title": "診斷增強", + "connection_modal.jvm.diagnostic_transport": "診斷傳輸", + "connection_modal.jvm.diagnostic.agent_bridge_description": "使用 GoNavi Agent Bridge 診斷 Endpoint。", + "connection_modal.jvm.diagnostic.arthas_tunnel_description": "透過 Arthas Tunnel 存取目標 JVM。", + "connection_modal.jvm.diagnostic.arthas_tunnel_help": "Arthas Tunnel 伺服器的基礎 URL。", + "connection_modal.jvm.diagnostic.arthas_tunnel_url": "Arthas Tunnel 位址", + "connection_modal.jvm.diagnostic.bridge_help": "GoNavi 診斷橋接服務的基礎 URL。", + "connection_modal.jvm.diagnostic.bridge_url": "診斷橋接位址", + "connection_modal.jvm.diagnostic.mutating_commands": "變更類命令", + "connection_modal.jvm.diagnostic.mutating_commands_description": "允許可能改變執行階段狀態的命令,僅在受控環境使用。", + "connection_modal.jvm.diagnostic.observe_commands": "觀察類命令", + "connection_modal.jvm.diagnostic.observe_commands_description": "允許 dashboard、thread、JVM 資訊等唯讀命令。", + "connection_modal.jvm.diagnostic.target_agent_id": "目標 Agent ID", + "connection_modal.jvm.diagnostic.target_agent_id_help": "Arthas Tunnel 中註冊的 Agent ID。", + "connection_modal.jvm.diagnostic.target_id": "目標 ID", + "connection_modal.jvm.diagnostic.target_id_help": "診斷橋接服務識別的目標 ID;留空則由橋接服務選擇預設目標。", + "connection_modal.jvm.diagnostic.trace_commands": "追蹤類命令", + "connection_modal.jvm.diagnostic.trace_commands_description": "允許 trace 與 watch 等會增加執行階段負載的命令。", + "connection_modal.jvm.diagnostic.transport.agent_bridge": "Agent Bridge", + "connection_modal.jvm.diagnostic.transport.arthas_tunnel": "Arthas Tunnel", + "connection_modal.jvm.endpoint_api_key_optional": "Endpoint API 金鑰(選填)", + "connection_modal.jvm.endpoint_description": "使用服務暴露的 Endpoint 連線,而不是直接連線 JMX。", + "connection_modal.jvm.endpoint_help": "JVM 管理 Endpoint 的基礎 URL。", + "connection_modal.jvm.endpoint_url": "Endpoint 位址", + "connection_modal.jvm.environment": "環境", + "connection_modal.jvm.environment.dev": "開發", + "connection_modal.jvm.environment.dev_description": "風險較低的測試環境。", + "connection_modal.jvm.environment.prod": "正式", + "connection_modal.jvm.environment.prod_description": "正式環境,建議優先使用唯讀操作。", + "connection_modal.jvm.environment.uat": "UAT", + "connection_modal.jvm.environment.uat_description": "上線前驗證環境。", + "connection_modal.jvm.jmx_description": "透過 JMX 使用主機、連接埠和選填憑據連線。", + "connection_modal.jvm.jmx_host_override_optional": "JMX 主機覆寫(選填)", + "connection_modal.jvm.jmx_password_optional": "JMX 密碼(選填)", + "connection_modal.jvm.jmx_port": "JMX 連接埠", + "connection_modal.jvm.jmx_username_optional": "JMX 使用者名稱(選填)", + "connection_modal.jvm.mode.agent_description": "透過 GoNavi Agent 存取防火牆或 NAT 後的環境。", + "connection_modal.jvm.mode.endpoint_description": "使用目標服務暴露的 HTTP Endpoint。", + "connection_modal.jvm.mode.jmx_description": "使用標準 JMX 遠端存取。", + "connection_modal.jvm.preferred_mode_hint": "目前首選模式:{{mode}}", + "connection_modal.jvm.read_only_first": "優先唯讀操作", + "connection_modal.jvm.security_policy": "安全策略", + "connection_modal.jvm.target_description": "設定 JVM 管理端點的主機、連接埠和接入方式。", + "connection_modal.jvm.target_title": "JVM 目標", + "connection_modal.layout.custom": "自訂驅動連線", + "connection_modal.layout.file": "檔案資料庫連線", + "connection_modal.layout.generic_sql": "通用 SQL 連線", + "connection_modal.layout.jvm": "JVM 執行階段連線", + "connection_modal.layout.mongodb": "MongoDB 連線", + "connection_modal.layout.mysql_compatible": "MySQL 相容連線", + "connection_modal.layout.oracle": "Oracle 連線", + "connection_modal.layout.postgres_compatible": "PostgreSQL 相容連線", + "connection_modal.layout.redis": "Redis 連線", "connection_modal.layoutKind.custom": "自訂驅動", "connection_modal.layoutKind.file": "檔案型資料庫", "connection_modal.layoutKind.genericSql": "標準 SQL", @@ -6846,18 +3062,1308 @@ "connection_modal.layoutKind.search": "搜尋引擎", "connection_modal.layoutKind.timeseries": "時序資料庫", "connection_modal.layoutKind.vector": "向量資料庫", + "connection_modal.message.connection_failed": "連線失敗", + "connection_modal.message.connection_params_incomplete": "連線參數不完整", + "connection_modal.message.connection_rejected": "連線被拒絕", + "connection_modal.message.connection_success": "連線成功", + "connection_modal.message.copy_failed": "複製失敗", + "connection_modal.message.current_driver_not_enabled": "目前驅動未啟用", + "connection_modal.message.dameng_ssl_cert_required": "請填寫必填欄位", + "connection_modal.message.database_list_failed": "載入資料庫清單失敗:{{error}}", + "connection_modal.message.database_list_timeout": "操作逾時({{seconds}} 秒)", + "connection_modal.message.driver_not_enabled": "驅動未安裝或未啟用", + "connection_modal.message.driver_not_enabled_with_name": "{{name}} 驅動未安裝或未啟用。請先在驅動管理中安裝並啟用。", + "connection_modal.message.driver_not_enabled_with_name_short": "{{name}} 驅動未安裝或未啟用,請先在驅動管理中處理。", + "connection_modal.message.driver_unavailable_title": "{{name}} 驅動不可用", + "connection_modal.message.http_tunnel_host_required": "請填寫必填欄位", + "connection_modal.message.http_tunnel_port_invalid": "HTTP Tunnel 連接埠無效", + "connection_modal.message.member_discovery_failed": "探索 MongoDB 成員失敗", + "connection_modal.message.member_discovery_success": "已探索到 {{count}} 個成員", + "connection_modal.message.no_visible_databases": "未返回可見資料庫", + "connection_modal.message.no_visible_schema": "未返回可見結構", + "connection_modal.message.required_fields_before_test": "請先填寫必填欄位,再測試連線", + "connection_modal.message.save_backend_unavailable": "儲存功能無法使用:後端 API 尚未就緒", + "connection_modal.message.save_created_disconnected": "設定已儲存(未連線)", + "connection_modal.message.save_failed": "儲存連線失敗", + "connection_modal.message.save_security_refresh_failed": "設定已儲存,但無法重新整理安全性中繼資料", + "connection_modal.message.save_updated_disconnected": "設定已儲存(未連線)", + "connection_modal.message.select_database_file_failed": "選擇資料庫檔案失敗:{{error}}", + "connection_modal.message.select_ssh_key_failed": "選擇 SSH 私鑰失敗:{{error}}", + "connection_modal.message.srv_with_ssh_dns_warning": "SRV 與 SSH Tunnel 同時啟用時可能依賴本機 DNS 解析;若解析失敗,請改用標準主機清單。", + "connection_modal.message.test_failed_detail": "測試失敗:{{detail}}", + "connection_modal.message.test_requires_new_mongo_replica_password": "請先輸入新的 MongoDB Replica Set 密碼,再測試連線。", + "connection_modal.message.test_requires_new_mongodb_password": "請先輸入新的 MongoDB 密碼,再測試連線。", + "connection_modal.message.test_requires_new_password": "請先輸入新的連線密碼,再測試連線。", + "connection_modal.message.test_requires_new_proxy_password": "請先輸入新的代理密碼,再測試連線。", + "connection_modal.message.test_requires_new_replica_password": "請先輸入新的從庫密碼,再測試連線。", + "connection_modal.message.test_requires_new_ssh_password": "請先輸入新的 SSH 密碼,再測試連線。", + "connection_modal.message.test_requires_new_tunnel_password": "請先輸入新的 HTTP Tunnel 密碼,再測試連線。", + "connection_modal.message.test_timeout": "操作逾時({{seconds}} 秒)", + "connection_modal.message.unsupported_jvm_diagnostic_transport": "目前選擇的 JVM 診斷傳輸不受支援", + "connection_modal.message.unsupported_jvm_modes": "目前選擇的 JVM 接入模式不受支援", + "connection_modal.message.unsupported_jvm_modes_current": "目前連線包含不受支援的 JVM 接入模式", + "connection_modal.message.unsupported_jvm_modes_detected": "偵測到不受支援的 JVM 接入模式", + "connection_modal.message.uri_copied": "URI 已複製", + "connection_modal.message.uri_empty_copy": "URI 為空,無法複製", + "connection_modal.message.uri_generate_failed": "產生 URI 失敗", + "connection_modal.message.uri_generated": "URI 已產生", + "connection_modal.message.uri_parse_failed": "解析 URI 失敗", + "connection_modal.message.uri_parsed": "URI 已解析", + "connection_modal.message.uri_required": "請填寫必填欄位", + "connection_modal.message.uri_type_mismatch": "URI 類型與目前資料來源不符", + "connection_modal.messageQueue.kafka.defaultTopic.help": "留空時必須在 SQL 中明確指定 Topic;填寫後可直接執行 SHOW、CONSUME 或 SELECT 預覽。", + "connection_modal.messageQueue.kafka.defaultTopic.label": "預設 Topic(可選)", + "connection_modal.messageQueue.kafka.defaultTopic.placeholder": "例如:orders.events", + "connection_modal.messageQueue.kafka.extraBrokers.help": "可輸入多個 broker 位址,格式:host:port(按 Enter 確認)", + "connection_modal.messageQueue.kafka.extraBrokers.label": "額外 Broker 位址", + "connection_modal.messageQueue.kafka.extraBrokers.placeholder": "例如:10.10.0.12:9092、10.10.0.13:9092", + "connection_modal.messageQueue.kafka.topology.cluster.description": "設定多個 bootstrap broker,提高發現與故障切換成功率。", + "connection_modal.messageQueue.kafka.topology.single.description": "只設定一個 bootstrap broker,適合本機或簡單環境。", + "connection_modal.messageQueue.kafka.topology.single.label": "單 Broker", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.help": "留空時必須在 SQL 中明確指定 Topic;填寫後可直接執行 SHOW、CONSUME 或 SELECT 預覽。支援使用 /、+、#。", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.label": "預設 Topic / Filter(可選)", + "connection_modal.messageQueue.mqtt.defaultTopicFilter.placeholder": "例如:devices/+/telemetry", + "connection_modal.messageQueue.mqtt.extraBrokers.help": "可輸入多個 broker 位址,格式:host:port(按 Enter 確認)", + "connection_modal.messageQueue.mqtt.extraBrokers.label": "額外 Broker 位址", + "connection_modal.messageQueue.mqtt.extraBrokers.placeholder": "例如:10.10.0.12:1883、10.10.0.13:1883", + "connection_modal.messageQueue.mqtt.topology.cluster.description": "設定多個 broker,提高連線發現與故障切換成功率。", + "connection_modal.messageQueue.mqtt.topology.single.description": "只設定一個 broker,適合本機或簡單環境。", + "connection_modal.messageQueue.mqtt.topology.single.label": "單 Broker", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.help": "留空預設使用 /;填寫後查詢編輯器會以目前 vhost 作為 Queue 瀏覽與測試傳送上下文。", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.label": "預設 Virtual Host(可選)", + "connection_modal.messageQueue.rabbitmq.defaultVirtualHost.placeholder": "例如:/ 或 orders-vhost", + "connection_modal.messageQueue.rocketmq.defaultTopic.help": "留空時必須在 SQL 中明確指定 Topic;連線參數可繼續補充 groupId、namespace、tag、pullBatchSize 與 startOffset。", + "connection_modal.messageQueue.rocketmq.defaultTopic.label": "預設 Topic(可選)", + "connection_modal.messageQueue.rocketmq.defaultTopic.placeholder": "例如:orders.events", + "connection_modal.messageQueue.rocketmq.extraNameServers.help": "可輸入多個 NameServer 位址,格式:host:port(按 Enter 確認)", + "connection_modal.messageQueue.rocketmq.extraNameServers.label": "額外 NameServer 位址", + "connection_modal.messageQueue.rocketmq.extraNameServers.placeholder": "例如:10.10.0.12:9876、10.10.0.13:9876", + "connection_modal.messageQueue.rocketmq.topology.cluster.description": "設定多個 NameServer,提高路由發現與故障切換成功率。", + "connection_modal.messageQueue.rocketmq.topology.single.description": "只設定一個 NameServer,適合本機或簡單環境。", + "connection_modal.messageQueue.rocketmq.topology.single.label": "單 NameServer", + "connection_modal.messageQueue.topology.cluster.label": "叢集模式", + "connection_modal.mongodb.auth_mechanism": "認證機制", + "connection_modal.mongodb.auth.auto": "自動", + "connection_modal.mongodb.auth.auto_description": "由驅動自動選擇認證機制。", + "connection_modal.mongodb.auth.aws_iam_description": "使用 AWS IAM 認證,請在執行環境中提供 AWS IAM 憑據。", + "connection_modal.mongodb.auth.none": "無認證", + "connection_modal.mongodb.auth.none_description": "不使用 MongoDB 認證連線。", + "connection_modal.mongodb.auth.scram_sha1_description": "使用 SCRAM-SHA-1 認證。", + "connection_modal.mongodb.auth.scram_sha256_description": "使用 SCRAM-SHA-256 認證。", + "connection_modal.mongodb.discovery.current": "目前", + "connection_modal.mongodb.discovery.srv_ssh_warning": "SRV 與 SSH Tunnel 同時啟用時,可能依賴本機 DNS 解析能力", + "connection_modal.mongodb.discovery.srv.description": "使用 mongodb+srv,由 DNS 探索目標節點。", + "connection_modal.mongodb.discovery.srv.label": "SRV 位址", + "connection_modal.mongodb.discovery.standard.description": "使用 host:port 直連或副本集節點清單。", + "connection_modal.mongodb.discovery.standard.label": "標準位址", + "connection_modal.mongodb.members.health": "健康", + "connection_modal.mongodb.members.health.error": "異常", + "connection_modal.mongodb.members.health.ok": "正常", + "connection_modal.mongodb.members.role": "角色", + "connection_modal.mongodb.policy.auth_source.label": "認證庫 (authSource)", + "connection_modal.mongodb.policy.auth_source.placeholder": "預設使用 database 或 admin", + "connection_modal.mongodb.read_preference": "readPreference", + "connection_modal.mongodb.read_preference.nearest": "讀取最近的成員。", + "connection_modal.mongodb.read_preference.primary": "僅從 primary 讀取。", + "connection_modal.mongodb.read_preference.primary_preferred": "優先從 primary 讀取,必要時回退到 secondary。", + "connection_modal.mongodb.read_preference.secondary": "僅從 secondary 讀取。", + "connection_modal.mongodb.read_preference.secondary_preferred": "優先從 secondary 讀取,必要時回退到 primary。", + "connection_modal.mongodb.replica.hosts.srv.help": "可輸入多個候選主機名稱,格式:host;若留空則僅使用上方主機。", + "connection_modal.mongodb.replica.hosts.srv.label": "附加 SRV 主機(可選)", + "connection_modal.mongodb.replica.hosts.srv.placeholder": "例如:cluster-a.example.com、cluster-b.example.com", + "connection_modal.mongodb.replica.hosts.standard.help": "可輸入多個節點位址,格式:host:port(按 Enter 確認)", + "connection_modal.mongodb.replica.hosts.standard.label": "附加節點位址", + "connection_modal.mongodb.replica.hosts.standard.placeholder": "例如:10.10.0.12:27017、10.10.0.13:27017", + "connection_modal.mongodb.replica.password.clear": "清除已儲存副本集密碼", + "connection_modal.mongodb.replica.password.description": "目前已儲存副本集密碼。留空表示繼續沿用,輸入新值表示替換。", + "connection_modal.mongodb.replica.password.label": "副本集密碼(可選)", + "connection_modal.mongodb.replica.password.placeholder.empty": "留空沿用主密碼", + "connection_modal.mongodb.replica.password.placeholder.retained": "已儲存副本集密碼", + "connection_modal.mongodb.replica.set.label": "副本集名稱(可選)", + "connection_modal.mongodb.replica.set.placeholder": "例如:rs0", + "connection_modal.mongodb.replica.user.label": "副本集使用者名稱(可選)", + "connection_modal.mongodb.replica.user.placeholder": "留空沿用主要使用者名稱", + "connection_modal.mongodb.srv_address": "SRV 位址", + "connection_modal.mongodb.srv_address_description": "使用 MongoDB SRV 記錄探索主機。", + "connection_modal.mongodb.standard_address": "標準位址", + "connection_modal.mongodb.standard_address_description": "使用主機、連接埠與可選成員清單。", + "connection_modal.mongodb.topology.replica.label": "副本集 / 多節點", + "connection_modal.mongodb.topology.single.label": "單機模式", + "connection_modal.network.http_tunnel": "HTTP Tunnel", + "connection_modal.network.http_tunnel_description": "透過 HTTP Tunnel 轉發資料庫流量。", + "connection_modal.network.http_tunnel_disabled_hint": "啟用 HTTP Tunnel 後可設定 Tunnel 主機、連接埠和憑據。", + "connection_modal.network.http_tunnel_mutex_hint": "HTTP Tunnel 不能與 SSH Tunnel 或代理同時使用。", + "connection_modal.network.http_tunnel_panel_description": "為此連線設定 HTTP Tunnel 閘道。", + "connection_modal.network.proxy": "代理", + "connection_modal.network.proxy_disabled_hint": "啟用代理後,此連線會透過 SOCKS5 或 HTTP CONNECT 轉發。", + "connection_modal.network.proxy_panel_description": "設定此連線的專用代理設定。", + "connection_modal.network.proxy_type.http_description": "使用 HTTP CONNECT 代理。", + "connection_modal.network.proxy_type.socks5_description": "使用 SOCKS5 代理。", + "connection_modal.network.ssh_disabled_hint": "啟用 SSH Tunnel 後可透過跳板機連線。", + "connection_modal.network.ssh_panel_description": "設定 SSH Tunnel 主機、憑據和選填私鑰。", + "connection_modal.network.ssh_tunnel": "SSH Tunnel", + "connection_modal.network.ssh_tunnel_description": "先透過 SSH Tunnel 再存取資料庫。", + "connection_modal.network.ssl_description": "使用 SSL/TLS 加密資料庫連線。", + "connection_modal.network.ssl_disabled_hint": "啟用 SSL/TLS 後可設定憑證策略。", + "connection_modal.network.ssl_mode": "SSL 模式", + "connection_modal.network.ssl_mode.preferred": "偏好", + "connection_modal.network.ssl_mode.preferred_description": "優先嘗試 SSL,伺服器不要求加密時允許回退。", + "connection_modal.network.ssl_mode.required": "必要", + "connection_modal.network.ssl_mode.required_description": "必須使用 SSL,無法建立加密連線時失敗。", + "connection_modal.network.ssl_mode.skip_verify": "略過驗證", + "connection_modal.network.ssl_mode.skip_verify_description": "使用 SSL 但略過憑證校驗,僅用於測試或自簽憑證。", + "connection_modal.network.ssl_panel_description": "設定此連線的 SSL/TLS 策略。", + "connection_modal.network.ssl_tls": "SSL/TLS", + "connection_modal.placeholder.absolute_path": "/絕對/路徑/檔案", + "connection_modal.placeholder.agent_api_key": "選填 Agent API 金鑰", + "connection_modal.placeholder.agent_url": "http://127.0.0.1:19090", + "connection_modal.placeholder.connection_name": "連線名稱", + "connection_modal.placeholder.connection_name_fallback": "連線名稱", + "connection_modal.placeholder.custom_dsn_example": "範例:驅動專用 DSN", + "connection_modal.placeholder.default_database_or_admin": "預設資料庫或 admin", + "connection_modal.placeholder.diagnostic_api_key": "選填診斷 API 金鑰", + "connection_modal.placeholder.diagnostic_target_agent_id": "Arthas Agent ID", + "connection_modal.placeholder.diagnostic_target_id": "目標 ID", + "connection_modal.placeholder.driver_name": "驅動名稱", + "connection_modal.placeholder.empty_without_auth": "無認證時留空", + "connection_modal.placeholder.endpoint_api_key": "選填 Endpoint API 金鑰", + "connection_modal.placeholder.endpoint_url": "http://127.0.0.1:8080", + "connection_modal.placeholder.example_appdb": "appdb", + "connection_modal.placeholder.example_mongo_hosts": "mongo2:27017, mongo3:27017", + "connection_modal.placeholder.example_mysql_replica_hosts": "replica1:3306, replica2:3306", + "connection_modal.placeholder.example_orclpdb1": "ORCLPDB1", + "connection_modal.placeholder.example_redis_hosts": "redis2:6379, redis3:6379", + "connection_modal.placeholder.example_rs0": "rs0", + "connection_modal.placeholder.example_srv_hosts": "cluster0.example.mongodb.net", + "connection_modal.placeholder.jvm_name": "JVM 名稱", + "connection_modal.placeholder.no_auth": "無認證", + "connection_modal.placeholder.proxy_host": "127.0.0.1", + "connection_modal.placeholder.redis_password": "Redis 密碼", + "connection_modal.placeholder.select_databases": "選擇要顯示的資料庫", + "connection_modal.placeholder.select_redis_databases": "選擇要顯示的 Redis 資料庫", + "connection_modal.placeholder.ssh_host": "bastion.example.com", + "connection_modal.placeholder.ssl_cert_path": "/絕對/路徑/client.crt", + "connection_modal.placeholder.ssl_key_path": "/絕對/路徑/client.key", + "connection_modal.placeholder.tunnel_host": "tunnel.example.com", + "connection_modal.placeholder.uri_example_postgres": "postgresql://user:pass@localhost:5432/appdb?sslmode=require", + "connection_modal.placeholder.use_primary_host": "使用主連線主機", + "connection_modal.placeholder.use_primary_password": "使用主連線密碼", + "connection_modal.placeholder.use_primary_password_short": "使用主密碼", + "connection_modal.placeholder.use_primary_port": "使用主連線連接埠", + "connection_modal.placeholder.use_primary_username": "使用主連線使用者名稱", + "connection_modal.placeholder.use_primary_username_short": "使用主使用者名稱", + "connection_modal.redis.credentials.primary.label": "密碼 (可選)", + "connection_modal.redis.credentials.primary.placeholder.empty": "Redis 密碼(如果設定了 requirepass)", + "connection_modal.redis.credentials.primary.placeholder.retained": "已儲存 Redis 密碼", + "connection_modal.redis.credentials.sentinelPassword.clear": "清除已儲存 Sentinel 密碼", + "connection_modal.redis.credentials.sentinelPassword.description": "目前已儲存 Sentinel 密碼。留空表示繼續沿用,輸入新值表示替換。", + "connection_modal.redis.credentials.sentinelPassword.label": "Sentinel 密碼(可選)", + "connection_modal.redis.credentials.sentinelPassword.placeholder.empty": "Sentinel 自身認證密碼,留空則不傳送", + "connection_modal.redis.credentials.sentinelPassword.placeholder.retained": "已儲存 Sentinel 密碼", + "connection_modal.redis.credentials.sentinelUser.label": "Sentinel 使用者名稱(可選)", + "connection_modal.redis.credentials.sentinelUser.placeholder": "留空表示 Sentinel 不使用 ACL 使用者名稱", + "connection_modal.redis.databaseScope.help": "連線測試成功後可選擇", + "connection_modal.redis.databaseScope.label": "顯示資料庫 (留空顯示全部)", + "connection_modal.redis.databaseScope.placeholder": "選擇顯示的資料庫", + "connection_modal.redis.hosts.cluster.help": "主節點使用上方主機位址;這裡填寫其他種子節點,格式:host:port", + "connection_modal.redis.hosts.cluster.label": "叢集附加節點位址", + "connection_modal.redis.hosts.cluster.placeholder": "例如:10.10.0.12:6379、10.10.0.13:6379", + "connection_modal.redis.hosts.sentinel.help": "上方主機位址會作為第一個 Sentinel;這裡填寫其他 Sentinel 節點,格式:host:port", + "connection_modal.redis.hosts.sentinel.label": "Sentinel 附加節點位址", + "connection_modal.redis.hosts.sentinel.placeholder": "例如:10.10.0.12:26379、10.10.0.13:26379", + "connection_modal.redis.sentinel.master.help": "填寫 Sentinel 設定中的 monitor 名稱,例如 mymaster。", + "connection_modal.redis.sentinel.master.label": "Sentinel master 名稱", + "connection_modal.redis.sentinel.master.placeholder": "例如:mymaster", + "connection_modal.redis.sentinel.master.required": "請輸入 Sentinel master 名稱", + "connection_modal.redis.topology.cluster.description": "Redis Cluster,設定多個種子節點。", + "connection_modal.redis.topology.cluster.label": "叢集模式", + "connection_modal.redis.topology.sentinel.description": "透過 Sentinel 發現主節點,適合主從高可用。", + "connection_modal.redis.topology.sentinel.label": "Sentinel 模式", + "connection_modal.redis.topology.single.description": "只連線一個 Redis 節點。", + "connection_modal.redis.topology.single.label": "單機模式", + "connection_modal.secret.blocking.redis_sentinel": "測試連線前請填寫新的 Sentinel 密碼,或取消清除已儲存的 Sentinel 密碼", + "connection_modal.secret.clear_saved_dsn": "清除已儲存的 DSN", + "connection_modal.secret.clear_saved_mongo_replica_password": "清除已儲存的 MongoDB 複本密碼", + "connection_modal.secret.clear_saved_password": "清除已儲存密碼", + "connection_modal.secret.clear_saved_proxy_password": "清除已儲存的代理密碼", + "connection_modal.secret.clear_saved_replica_password": "清除已儲存的從庫密碼", + "connection_modal.secret.clear_saved_ssh_password": "清除已儲存的 SSH 密碼", + "connection_modal.secret.clear_saved_tunnel_password": "清除已儲存的 HTTP Tunnel 密碼", + "connection_modal.secret.clear_saved_uri": "清除已儲存的 URI", "connection_modal.secret.error.saved_connection_deleted": "找不到已儲存連線,可能已被刪除,請重新整理後再試", + "connection_modal.secret.error.saved_connection_missing": "找不到目前連線對應的已儲存密文,請重新填寫密碼並儲存後再試", + "connection_modal.secret.error.store_unavailable": "系統密文儲存目前無法使用,請檢查系統鑰匙圈或認證管理員後再試", + "connection_modal.secret.new_value_replaces_saved": "已輸入新值,儲存時會取代目前已儲存內容。", + "connection_modal.secret.saved_dsn_description": "安全儲存中已有 DSN。留空將繼續使用該 DSN。", + "connection_modal.secret.saved_mongo_replica_password": "已儲存 MongoDB 複本密碼", + "connection_modal.secret.saved_mongo_replica_password_description": "安全儲存中已有 MongoDB 複本密碼。留空將繼續使用該密碼。", + "connection_modal.secret.saved_password": "已儲存密碼", + "connection_modal.secret.saved_placeholder": "••••••(留空表示繼續沿用{{label}})", + "connection_modal.secret.saved_primary_password_description": "安全儲存中已有主連線密碼。留空將繼續使用該密碼。", + "connection_modal.secret.saved_proxy_password": "已儲存代理密碼", + "connection_modal.secret.saved_proxy_password_description": "安全儲存中已有代理密碼。留空將繼續使用該密碼。", + "connection_modal.secret.saved_redis_password": "已儲存 Redis 密碼", + "connection_modal.secret.saved_redis_password_description": "安全儲存中已有 Redis 密碼。留空將繼續使用該密碼。", + "connection_modal.secret.saved_replica_password": "已儲存從庫密碼", + "connection_modal.secret.saved_replica_password_description": "安全儲存中已有從庫密碼。留空將繼續使用該密碼。", + "connection_modal.secret.saved_ssh_password": "已儲存 SSH 密碼", + "connection_modal.secret.saved_ssh_password_description": "安全儲存中已有 SSH 密碼。留空將繼續使用該密碼。", + "connection_modal.secret.saved_tunnel_password": "已儲存 HTTP Tunnel 密碼", + "connection_modal.secret.saved_tunnel_password_description": "安全儲存中已有 HTTP Tunnel 密碼。留空將繼續使用該密碼。", + "connection_modal.secret.saved_uri_description": "安全儲存中已有連線 URI。留空將繼續使用該 URI。", + "connection_modal.section.advanced_connection": "進階連線", + "connection_modal.section.appearance.description": "設定連線在側邊欄中的圖示和顏色。", + "connection_modal.section.appearance.title": "外觀", + "connection_modal.section.basic.description": "命名連線,並填寫目標位址、驅動程式與認證資訊。", + "connection_modal.section.basic.jvm_description": "設定 JVM 目標、存取模式和認證資訊。", + "connection_modal.section.basic.sql_description": "設定連線目標、驅動、認證資訊和資料庫範圍。", + "connection_modal.section.basic.title": "基礎資訊", + "connection_modal.section.config_sections": "設定區段", + "connection_modal.section.network.description": "設定 SSL/TLS、SSH Tunnel、代理和 HTTP Tunnel。", + "connection_modal.section.network.nav_description": "設定此連線的網路和安全選項。", + "connection_modal.section.network.title": "網路與安全", + "connection_modal.ssl_hint.dameng": "達夢驅動啟用 SSL 需要用戶端憑證與私鑰路徑(sslCertPath / sslKeyPath)。", + "connection_modal.ssl_hint.default": "建議優先使用 Required;僅在測試環境或自簽憑證情境使用 Skip Verify。", + "connection_modal.ssl_hint.mongodb": "MongoDB 可透過 TLS 保護連線,憑證校驗異常時可先用 Skip Verify 驗證連通性。", + "connection_modal.ssl_hint.mysql_like": "MySQL/MariaDB/Doris/Sphinx 啟用安全傳輸策略時請啟用 SSL;本機自簽憑證可先用 Preferred 或 Skip Verify 驗證。", + "connection_modal.ssl_hint.sqlserver": "SQL Server 生產環境建議使用 Required,並關閉 TrustServerCertificate。", + "connection_modal.status.disabled": "未啟用", + "connection_modal.status.enabled": "已啟用", + "connection_modal.status.healthy": "正常", + "connection_modal.status.unhealthy": "異常", + "connection_modal.step.select_source": "選擇資料來源", + "connection_modal.step.select_source_description": "選擇要建立的連線類型。", + "connection_modal.step1.group.domestic": "國產資料庫", "connection_modal.step1.group.message_queue": "訊息佇列", + "connection_modal.step1.group.nosql": "NoSQL 資料庫", + "connection_modal.step1.group.other": "其他", + "connection_modal.step1.group.relational": "關聯式資料庫", + "connection_modal.step1.group.timeseries": "時序資料庫", "connection_modal.step1.group.vector": "向量資料庫", "connection_modal.step1.hint.chroma": "Collection 瀏覽、向量檢索與中繼資料過濾", + "connection_modal.step1.hint.custom": "自訂驅動與 DSN", "connection_modal.step1.hint.elasticsearch": "索引瀏覽、Mapping 檢查、JSON DSL 與 query_string 查詢", + "connection_modal.step1.hint.file": "本機檔案連線", "connection_modal.step1.hint.goldendb": "MySQL 相容 / 分散式交易", + "connection_modal.step1.hint.jvm": "JMX / Endpoint / Agent", + "connection_modal.step1.hint.mongodb": "單機 / Replica Set", + "connection_modal.step1.hint.oceanBase": "MySQL / Oracle 租戶", "connection_modal.step1.hint.qdrant": "Collection 瀏覽、向量搜尋與 Payload 過濾", + "connection_modal.step1.hint.redis": "單機 / 叢集", + "connection_modal.step1.hint.standard": "標準連線設定", + "connection_modal.switch.off": "關", + "connection_modal.switch.on": "開", + "connection_modal.table.health": "健康", + "connection_modal.table.role": "角色", + "connection_modal.test_error.description": "查看後端回傳的完整錯誤資訊。", + "connection_modal.test_error.empty": "沒有錯誤詳情", + "connection_modal.test_error.title": "連線測試失敗原因", + "connection_modal.test.redis_database_list_failure": "連線成功,但取得 Redis 資料庫清單失敗:{{detail}}", + "connection_modal.test.redis_database_list_timeout": "連線成功,但拉取 Redis 資料庫清單逾時(>{{seconds}} 秒)", + "connection_modal.title.create": "新增 {{type}} 連線", + "connection_modal.title.create_description": "填寫連線設定並儲存。", + "connection_modal.title.edit": "編輯連線", + "connection_modal.title.edit_description": "編輯 {{type}} 連線設定", + "connection_modal.title.select_type": "選擇資料來源類型", + "connection_modal.title.select_type_description": "請從支援的資料來源中選擇一種連線類型。", + "connection_modal.topology.cluster": "叢集", + "connection_modal.topology.mongodb_replica": "Replica Set", + "connection_modal.topology.mongodb_replica_description": "連線 MongoDB Replica Set,並可選自動探索成員。", + "connection_modal.topology.mongodb_single_description": "連線單一 MongoDB 主機。", + "connection_modal.topology.mysql_replica_description": "使用主連線,並可選設定從庫位址。", + "connection_modal.topology.mysql_single_description": "連線單一 MySQL 相容節點。", + "connection_modal.topology.primary_replica": "主從", + "connection_modal.topology.redis_cluster_description": "連線 Redis Cluster,並列出附加節點。", + "connection_modal.topology.redis_single_description": "連線單一 Redis 節點。", + "connection_modal.topology.single": "單機模式", + "connection_modal.validation.address_or_path_required": "請輸入主機位址或檔案路徑", + "connection_modal.validation.agent_url_required": "請輸入 Agent 位址", + "connection_modal.validation.arthas_tunnel_url_required": "請輸入 Arthas Tunnel 位址", + "connection_modal.validation.custom_dsn_required": "請輸入連線字串", + "connection_modal.validation.custom_dsn_required_when_clearing_saved": "請輸入新的連線字串,或取消清除已儲存的 DSN", + "connection_modal.validation.dameng_ssl_cert_path_required": "請輸入達夢 SSL 憑證路徑", + "connection_modal.validation.dameng_ssl_key_path_required": "請輸入達夢 SSL 私鑰路徑", + "connection_modal.validation.diagnostic_bridge_url_required": "請輸入診斷橋接位址", + "connection_modal.validation.diagnostic_target_required": "請輸入診斷目標", + "connection_modal.validation.diagnostic_timeout_range_1_300": "診斷逾時必須介於 1 到 300 秒", + "connection_modal.validation.driver_name_required": "請輸入驅動名稱", + "connection_modal.validation.endpoint_url_required": "請輸入 Endpoint 位址", + "connection_modal.validation.jvm_access_mode_required": "請至少選擇一種 JVM 接入模式", + "connection_modal.validation.jvm_host_required": "請輸入 JVM 主機", + "connection_modal.validation.jvm_port_required": "請輸入 JVM 連接埠", + "connection_modal.validation.jvm_preferred_mode_required": "請選擇首選 JVM 接入模式", + "connection_modal.validation.oracle_service_required": "請輸入 Oracle 服務名稱", + "connection_modal.validation.port_required": "請輸入連接埠", + "connection_modal.validation.proxy_host_required": "請輸入代理主機", + "connection_modal.validation.proxy_port_required": "請輸入代理連接埠", + "connection_modal.validation.ssh_host_required": "請輸入 SSH 主機", + "connection_modal.validation.ssh_port_required": "請輸入 SSH 連接埠", + "connection_modal.validation.ssh_user_required": "請輸入 SSH 使用者", + "connection_modal.validation.timeout_range_1_300": "逾時必須介於 1 到 300 秒", + "connection_modal.validation.tunnel_host_required": "請輸入 HTTP Tunnel 主機", + "connection_modal.validation.tunnel_port_required": "請輸入 HTTP Tunnel 連接埠", + "connection_modal.validation.username_required": "請輸入使用者名稱", + "connection.copy_suffix": " - 副本", + "connection.delete": "刪除連線", + "connection.edit": "編輯連線", + "connection.new": "新增連線", "connection.oceanbase.error.unsupported_protocol": "OceanBase 目前僅支援 MySQL/Oracle 租戶協議,不支援「{{value}}」;請改用 MySQL 或 Oracle。", + "connection.sidebar.delete.backendUnavailable": "刪除連線失敗:後端介面不可用", + "connection.sidebar.delete.confirmContent": "確定要刪除連線 \"{{name}}\" 嗎?", + "connection.sidebar.delete.confirmTitle": "確認刪除", + "connection.sidebar.delete.failureFallback": "刪除連線失敗", + "connection.sidebar.delete.success": "已刪除連線", + "connection.sidebar.disconnect.success": "已中斷連線", + "connection.sidebar.duplicate.backendUnavailable": "複製連線失敗:後端介面不可用", + "connection.sidebar.duplicate.failureFallback": "複製連線失敗", + "connection.sidebar.duplicate.noResult": "複製連線失敗:後端未回傳結果", + "connection.sidebar.duplicate.success": "已複製連線: {{name}}", + "connection.sidebar.group.badge": "分組", + "connection.sidebar.group.collapseAria": "收合連線分組 {{name}}", + "connection.sidebar.group.delete": "刪除分組", + "connection.sidebar.group.deleteConfirmContent": "確定要刪除分組 \"{{name}}\" 嗎?這不會刪除其中的連線。", + "connection.sidebar.group.deleteConfirmTitle": "確認刪除", + "connection.sidebar.group.edit": "編輯分組", + "connection.sidebar.group.expandAria": "展開連線分組 {{name}}", + "connection.sidebar.group.meta": "{{count}} 個連線 · 連線分組", + "connection.sidebar.group.untitled": "未命名分組", + "connection.sidebar.menu.copy": "複製連線", + "connection.sidebar.menu.createDatabase": "新增資料庫", + "connection.sidebar.menu.current": "目前", + "connection.sidebar.menu.delete": "刪除連線", + "connection.sidebar.menu.disconnect": "中斷連線", + "connection.sidebar.menu.groupSection": "連線分組", + "connection.sidebar.menu.hostBadge": "HOST", + "connection.sidebar.menu.hostFallback": "位址未設定", + "connection.sidebar.menu.moveOutTag": "移出標籤", + "connection.sidebar.menu.moveToTag": "移至標籤", + "connection.sidebar.menu.moveToUngrouped": "移出分組", + "connection.sidebar.menu.refresh": "重新整理連線", + "connection.sidebar.menu.section": "連線", + "connection.test": "測試連線", + "connection.unnamed": "未命名連線", + "data_grid.action.apply": "套用", + "data_grid.ai_insight.prompt": "請幫我分析以下查詢結果資料(取前 {{count}} 筆範例):\n```json\n{{json}}\n```\n\n請分析資料特徵、找出規律,或提供一些業務洞察。", + "data_grid.ai_prompt.analyze_page": "請分析以下查詢結果資料(前 {{count}} 列樣本):\n```json\n{{json}}\n```\n\n請分析資料特徵、發現規律,或提供業務洞察。", "data_grid.aria.row_number": "行號", + "data_grid.batch_fill.set_null": "設為 NULL", + "data_grid.batch_fill.title": "批次填入({{count}} 個儲存格)", + "data_grid.batch_fill.value_placeholder": "輸入要填入的值", + "data_grid.cell_editor.now": "此刻", + "data_grid.cell_editor.title": "編輯儲存格", + "data_grid.cell_editor.title_with_column": "編輯儲存格:{{column}}", + "data_grid.column_quick_find.placeholder": "跳到欄位列...", + "data_grid.column_quick_find.tooltip": "輸入欄位名稱,按 Enter 或點定位按鈕即可跳到對應欄", + "data_grid.column_settings.column_visibility": "欄位顯示", + "data_grid.column_settings.display_settings": "顯示設定", + "data_grid.column_settings.field_info": "欄位資訊", + "data_grid.column_settings.hide_all": "全部隱藏", + "data_grid.column_settings.remember_column_order": "記住自訂欄位順序", + "data_grid.column_settings.remember_hidden_columns": "記住隱藏欄位設定", + "data_grid.column_settings.reset_hidden": "重設隱藏", + "data_grid.column_settings.reset_hidden_success": "已恢復全部欄位顯示", + "data_grid.column_settings.reset_order": "重設順序", + "data_grid.column_settings.reset_order_success": "已恢復預設欄位排序", + "data_grid.column_settings.search_columns_placeholder": "搜尋欄位名稱...", + "data_grid.column_settings.show_all": "全部顯示", + "data_grid.column_settings.show_comments": "在表頭顯示欄位註解", + "data_grid.column_settings.show_types": "在表頭顯示欄位型別", + "data_grid.column.comment_tooltip": "註解:{{comment}}", + "data_grid.column.drag_tooltip": "拖曳調整欄位順序", + "data_grid.column.foreign_key_jump_title": "跳轉到外鍵表:{{tableName}}", + "data_grid.column.foreign_key_tooltip": "外鍵:{{target}}", + "data_grid.column.resize_tooltip": "拖曳調整欄寬,按兩下自動適配", + "data_grid.column.type_tooltip": "型別:{{type}}", + "data_grid.context_menu.auto_fit_column": "依內容自動調整欄寬", + "data_grid.context_menu.clear_column_sort": "取消此欄位排序", + "data_grid.context_menu.column_display_section": "欄位顯示", + "data_grid.context_menu.column_no_comment": "暫無備註", + "data_grid.context_menu.column_unknown_type": "未知類型", + "data_grid.context_menu.column_unnamed_field": "未命名欄位", + "data_grid.context_menu.copy_as_csv": "複製為 CSV", + "data_grid.context_menu.copy_as_delete": "複製為 DELETE", + "data_grid.context_menu.copy_as_insert": "複製為 INSERT", + "data_grid.context_menu.copy_as_json": "複製為 JSON", + "data_grid.context_menu.copy_as_markdown": "複製為 Markdown", + "data_grid.context_menu.copy_as_update": "複製為 UPDATE", + "data_grid.context_menu.copy_column_data": "複製欄資料", + "data_grid.context_menu.copy_field_name": "複製欄位名稱", + "data_grid.context_menu.copy_row_as_new": "複製此列為新增列", + "data_grid.context_menu.copy_row_data": "複製列資料", + "data_grid.context_menu.current_cell": "目前儲存格", + "data_grid.context_menu.current_marker": "目前", + "data_grid.context_menu.current_row": "目前列", + "data_grid.context_menu.edit_row": "編輯此列", + "data_grid.context_menu.edit_section": "編輯", + "data_grid.context_menu.export_as_csv": "匯出為 CSV", + "data_grid.context_menu.export_as_excel": "匯出為 Excel", + "data_grid.context_menu.export_as_html": "匯出為 HTML", + "data_grid.context_menu.export_as_json": "匯出為 JSON", + "data_grid.context_menu.export_selected": "匯出選取資料", + "data_grid.context_menu.fill_to_selected_rows": "填入到選取列({{count}})", + "data_grid.context_menu.hide_column": "隱藏此欄位", + "data_grid.context_menu.hide_column_comment": "隱藏欄位備註", + "data_grid.context_menu.hide_column_type": "隱藏欄位型別", + "data_grid.context_menu.paste_copied_columns": "貼上已複製欄位(同名欄位)", + "data_grid.context_menu.paste_row_as_new": "貼上為新增列", + "data_grid.context_menu.paste_row_as_new_count": "貼上為新增列({{count}})", + "data_grid.context_menu.show_column_comment": "顯示欄位備註", + "data_grid.context_menu.show_column_type": "顯示欄位型別", + "data_grid.context_menu.sort_ascending": "遞增排序", + "data_grid.context_menu.sort_descending": "遞減排序", + "data_grid.context_menu.sort_section": "排序", + "data_grid.context_menu.undo_cell_change": "撤銷此儲存格修改", + "data_grid.copy_sql.error.missing_safe_where": "目前結果集缺少可安全定位列資料的主鍵/唯一鍵,且未涵蓋資料表的全部欄位,無法產生 WHERE 條件。", + "data_grid.copy_sql.error.missing_table_name": "目前結果集未關聯明確資料表名稱,無法產生 {{mode}} SQL。", + "data_grid.copy_sql.error.no_copyable_fields": "目前結果集沒有可複製的欄位,無法產生 SQL。", + "data_grid.data_panel.click_cell_description": "點選表格中的儲存格可預覽完整資料", + "data_grid.data_panel.click_cell_title": "點選儲存格檢視資料", + "data_grid.data_panel.title": "資料預覽", + "data_grid.datetime_picker.now": "此刻", + "data_grid.ddl.copy": "複製 DDL", + "data_grid.ddl.layout_bottom": "底部", + "data_grid.ddl.layout_side": "側欄", + "data_grid.ddl.loading": "正在載入 DDL...", + "data_grid.ddl.reload": "重新載入", + "data_grid.ddl.sidebar_aria": "資料表 DDL 側欄", + "data_grid.ddl.view": "檢視 DDL", + "data_grid.embedded_designer.title": "設計表({{tableName}})", + "data_grid.error_boundary.description": "資料表格渲染時發生錯誤,資料格式可能無效。", + "data_grid.error_boundary.retry": "重試", + "data_grid.error_boundary.title": "渲染錯誤", + "data_grid.export.all_data": "匯出全部資料", + "data_grid.export.all_rows": "匯出全部列({{count}} 列)", + "data_grid.export.all_rows_requery": "匯出全部(重新查詢)", + "data_grid.export.current_page": "匯出目前頁({{count}} 列)", + "data_grid.export.current_page_rows": "匯出目前頁({{count}} 列)", + "data_grid.export.group_filtered_results": "篩選結果", + "data_grid.export.group_full_table": "全表", + "data_grid.export.no_selection_prompt": "未選取列,請選擇匯出範圍:", + "data_grid.export.options_title": "匯出選項", + "data_grid.export.query_result_title": "匯出查詢結果", + "data_grid.export.scope_prompt": "請選擇匯出範圍:", + "data_grid.export.selected_rows": "匯出已選列({{count}} 列)", + "data_grid.filter.add_condition": "新增條件", + "data_grid.filter.add_sort": "新增排序", + "data_grid.filter.apply": "套用", + "data_grid.filter.apply_where": "套用 WHERE", + "data_grid.filter.clear": "清除", + "data_grid.filter.custom_where_placeholder": "輸入自訂 WHERE 表達式(不含 WHERE),例如:status IN ('A','B')", + "data_grid.filter.disable_all": "全部停用", + "data_grid.filter.enable_all": "全部啟用", + "data_grid.filter.enabled": "啟用", + "data_grid.filter.end_value_placeholder": "結束值", + "data_grid.filter.first_condition": "首先", + "data_grid.filter.invalid_quick_where": "WHERE 條件不能包含分號或 SQL 註解", + "data_grid.filter.list_values_placeholder": "多個值以逗號或換行分隔", + "data_grid.filter.logic.and": "且 (AND)", + "data_grid.filter.logic.or": "或 (OR)", + "data_grid.filter.mongodb_query_placeholder": "輸入 MongoDB JSON 查詢物件,例如 {\"status\":\"A\"}", + "data_grid.filter.no_value_placeholder": "不需要輸入值", + "data_grid.filter.op.between": "介於", + "data_grid.filter.op.contains": "包含", + "data_grid.filter.op.custom": "[自訂]", + "data_grid.filter.op.ends_with": "結尾為", + "data_grid.filter.op.in_list": "在清單中", + "data_grid.filter.op.is_empty": "為空字串", + "data_grid.filter.op.is_not_empty": "不為空字串", + "data_grid.filter.op.is_not_null": "不是 NULL", + "data_grid.filter.op.is_null": "為 NULL", + "data_grid.filter.op.not_between": "不介於", + "data_grid.filter.op.not_contains": "不包含", + "data_grid.filter.op.not_ends_with": "結尾不是", + "data_grid.filter.op.not_in_list": "不在清單中", + "data_grid.filter.op.not_starts_with": "開頭不是", + "data_grid.filter.op.starts_with": "開頭為", + "data_grid.filter.quick_where_placeholder": "輸入 WHERE 後面的條件,例如 status = 1 AND name LIKE 'A%'", + "data_grid.filter.search_field_placeholder": "搜尋欄位名稱", + "data_grid.filter.select_sort_field_placeholder": "選擇排序欄位", + "data_grid.filter.sort_asc": "升冪", + "data_grid.filter.sort_desc": "降冪", + "data_grid.filter.sort_label": "排序", + "data_grid.filter.start_value_placeholder": "起始值", + "data_grid.filter.suggestion.column": "欄位", + "data_grid.filter.suggestion.keyword": "關鍵字", + "data_grid.filter.suggestion.operator": "運算子", + "data_grid.filter.then_label": "然後", + "data_grid.json_editor.apply_changes": "套用修改", + "data_grid.json_editor.description": "依目前結果順序編輯。JSON 模式不支援新增或刪除記錄,需要此操作請使用表格模式。", + "data_grid.json_editor.format": "格式化 JSON", + "data_grid.json_editor.invalid_format": "JSON 格式無效:{{error}}", + "data_grid.json_editor.title": "編輯 JSON 結果集", + "data_grid.message.auto_commit_failed": "自動提交失敗:{{detail}}", + "data_grid.message.auto_commit_success": "自動提交成功", + "data_grid.message.cell_edit_mode_entered": "已啟用儲存格編輯模式,可拖曳選取多個儲存格。", + "data_grid.message.cell_edit_mode_exited": "已退出儲存格編輯模式。", + "data_grid.message.change_set_build_failed": "無法建立變更集", + "data_grid.message.change_set_build_failed_detail": "無法建立變更集:{{detail}}", + "data_grid.message.column_order_reset": "已還原預設欄位順序", + "data_grid.message.column_quick_find_not_found": "找不到欄位列:{{query}}", + "data_grid.message.column_quick_find_not_rendered": "欄位列「{{column}}」目前尚未渲染,無法定位", + "data_grid.message.column_visibility_reset": "已還原全部欄位", + "data_grid.message.commit_failed": "提交失敗:{{detail}}", + "data_grid.message.copied_columns": "已複製 {{count}} 欄,可貼上到目標列。", + "data_grid.message.copied_rows": "已複製 {{count}} 列,可作為新列貼上。", + "data_grid.message.copied_to_clipboard": "已複製到剪貼簿", + "data_grid.message.copy_columns_first": "請先複製欄位值", + "data_grid.message.copy_columns_same_row_only": "複製欄位值時只能選取同一列的儲存格", + "data_grid.message.copy_rows_first": "請先複製列", + "data_grid.message.copy_sql_not_supported": "此資料來源不支援複製 SQL,請改用 JSON/CSV/Markdown 複製。", + "data_grid.message.current_field_not_editable": "目前欄位不可編輯", + "data_grid.message.current_record_not_editable": "目前記錄不可編輯", + "data_grid.message.current_row_no_copyable_content": "目前列沒有可複製內容", + "data_grid.message.ddl_copied": "DDL 已複製到剪貼簿", + "data_grid.message.ddl_copy_failed": "複製 DDL 失敗", + "data_grid.message.ddl_load_failed": "載入 DDL 失敗", + "data_grid.message.ddl_missing_context": "目前資料表缺少連線或表名,無法檢視 DDL", + "data_grid.message.drag_select_cells_to_copy": "請先拖曳選取要複製的儲存格", + "data_grid.message.export_failed": "匯出失敗:{{detail}}", + "data_grid.message.export_success": "匯出完成", + "data_grid.message.export_with_uncommitted_changes": "存在未提交修改,將依可見表格資料匯出。如需完整長欄位資料,請先提交。", + "data_grid.message.exporting": "正在匯出...", + "data_grid.message.exporting_all": "正在匯出全部資料...", + "data_grid.message.exporting_rows": "正在匯出 {{count}} 列...", + "data_grid.message.filled_cells": "已填入 {{count}} 個儲存格", + "data_grid.message.filled_rows": "已填入 {{count}} 列", + "data_grid.message.filtered_export_not_supported": "此資料來源不支援匯出篩選結果", + "data_grid.message.filtered_export_uses_committed_data": "存在未提交修改。篩選結果匯出將使用已提交的資料庫資料。", + "data_grid.message.import_done": "匯入完成", + "data_grid.message.json_applied": "JSON 修改已套用到目前結果集,可繼續提交交易。", + "data_grid.message.json_invalid": "JSON 無效:{{detail}}", + "data_grid.message.json_parse_failed": "JSON 解析失敗:{{detail}}", + "data_grid.message.json_record_count_mismatch": "記錄數量不一致:目前 {{current}} 列,JSON 有 {{json}} 列。此模式下不要新增或刪除記錄。", + "data_grid.message.json_record_missing_row_key": "第 {{index}} 筆記錄缺少列識別,無法套用", + "data_grid.message.json_record_not_object": "第 {{index}} 筆記錄不是物件,無法套用", + "data_grid.message.json_view_must_be_array": "JSON 檢視必須是陣列,且每一項對應一筆記錄", + "data_grid.message.keep_one_visible_column": "至少保留一個可見欄位", + "data_grid.message.locate_record_to_edit": "請先定位要編輯的記錄", + "data_grid.message.locator_column_value_empty": "定位欄位 {{column}} 的值為空,無法安全提交修改。", + "data_grid.message.no_changes_to_commit": "沒有需要提交的修改", + "data_grid.message.no_copyable_cells": "未識別到可複製的儲存格", + "data_grid.message.no_copyable_columns": "未識別到可複製的欄位", + "data_grid.message.no_copyable_rows": "未識別到可複製的列", + "data_grid.message.no_data_changes": "資料沒有變更", + "data_grid.message.no_ddl_to_copy": "沒有可複製的 DDL", + "data_grid.message.no_field_name": "未識別到欄位名稱", + "data_grid.message.no_filter_applied": "目前未套用篩選條件", + "data_grid.message.no_other_rows_to_fill": "沒有其他選取列可填入", + "data_grid.message.no_pasteable_editable_fields": "沒有可貼上的可編輯欄位", + "data_grid.message.no_pasteable_rows": "沒有可貼上的列", + "data_grid.message.no_rows_selected": "目前未選取任何列", + "data_grid.message.no_safe_locator": "目前結果沒有可用的安全列定位方式,無法提交修改。", + "data_grid.message.pasted_columns_to_rows": "已貼上到 {{rows}} 列,共 {{cells}} 個儲存格", + "data_grid.message.pasted_rows_as_new": "已將 {{count}} 列作為新列貼上,提交前請先檢查。", + "data_grid.message.preview_sql_failed": "產生預覽 SQL 失敗", + "data_grid.message.preview_sql_failed_detail": "產生預覽 SQL 失敗:{{detail}}", + "data_grid.message.result_set_no_copyable_content": "目前結果集沒有可複製內容", "data_grid.message.rollback_failed": "回滾失敗:{{detail}}", + "data_grid.message.saved": "已儲存", + "data_grid.message.select_cells_to_fill": "請先選取要填入的儲存格", + "data_grid.message.select_file_failed": "選擇檔案失敗:{{detail}}", + "data_grid.message.select_rows_to_copy": "請先選取要複製的列", + "data_grid.message.select_rows_to_fill": "請先選取要填入的列", + "data_grid.message.select_same_row_cells_to_copy": "請先選取同一列中的儲存格進行複製", + "data_grid.message.select_target_rows": "請先選取目標列", + "data_grid.message.selected_cells_no_update": "選取的儲存格不需要更新", + "data_grid.message.selection_no_copyable_content": "目前選區沒有可複製內容", + "data_grid.message.target_row_not_found": "找不到目標列,請重新整理後再試。", + "data_grid.message.target_rows_cannot_only_source": "目標列不能只有來源列,請選取其他列。", + "data_grid.message.target_rows_no_update": "目標列不需要更新", + "data_grid.message.transaction_committed": "交易已提交", "data_grid.message.transaction_rolled_back": "交易已回滾", + "data_grid.message.undo_added_row_hint": "新增列請使用刪除選取或整表回滾來撤銷", + "data_grid.message.undo_cell_original_missing": "找不到該儲存格的原始資料,無法撤銷", + "data_grid.message.undo_cell_success": "已撤銷儲存格修改", + "data_grid.metadata_view.column_name": "名稱", + "data_grid.metadata_view.column_type": "型別", + "data_grid.metadata_view.comment": "註解", + "data_grid.metadata_view.default_value": "預設值", + "data_grid.metadata_view.er_collapse_fields": "收起欄位摘要", + "data_grid.metadata_view.er_current_badge": "目前表", + "data_grid.metadata_view.er_empty": "目前表尚未發現外鍵關係", + "data_grid.metadata_view.er_expand_fields": "展開全部欄位", + "data_grid.metadata_view.er_expand_hidden_columns": "展開剩餘 {{count}} 個欄位", + "data_grid.metadata_view.er_expand_relations": "展開下一層關係", + "data_grid.metadata_view.er_field_badge": "欄位", + "data_grid.metadata_view.er_hidden_columns": "還有 {{count}} 個欄位", + "data_grid.metadata_view.er_open_table": "打開表", + "data_grid.metadata_view.er_partial_warning": "部分關係未能完整載入,圖中結果可能不完整", + "data_grid.metadata_view.er_reference_badge": "引用", + "data_grid.metadata_view.er_referenced_by_badge": "被引用", + "data_grid.metadata_view.er_related_table_count": "{{count}} 張關聯表", + "data_grid.metadata_view.er_relation_count": "{{count}} 條關係", + "data_grid.metadata_view.er_relation_depth": "{{count}} 層關係", + "data_grid.metadata_view.er_reset_relations": "重置為一層", + "data_grid.metadata_view.er_table_badge": "表", + "data_grid.metadata_view.field_count": "{{count}} 個欄位", + "data_grid.metadata_view.fields_badge": "欄位", + "data_grid.modal.export_options.all_data": "匯出全部資料", + "data_grid.modal.export_options.current_page": "匯出目前頁({{count}} 列)", + "data_grid.modal.export_options.filtered_results": "篩選結果", + "data_grid.modal.export_options.no_rows_selected": "未選取列,請選擇匯出範圍:", + "data_grid.modal.export_options.title": "匯出選項", + "data_grid.modal.export_options.whole_table": "整張表", + "data_grid.page_find.next": "下一個", + "data_grid.page_find.placeholder": "目前頁查找...", + "data_grid.page_find.previous": "上一個", + "data_grid.page_find.summary": "{{occurrences}} 處符合 / {{cells}} 個儲存格", + "data_grid.page_find.tooltip": "僅在目前頁已載入列中查找,不會變更 WHERE 條件。", + "data_grid.pagination.jump_action": "跳", + "data_grid.pagination.jump_aria": "跳轉頁碼", + "data_grid.pagination.jump_label": "跳頁", + "data_grid.pagination.page_size_aria": "每頁列數", + "data_grid.pagination.page_size_option": "{{count}} 列 / 頁", + "data_grid.pagination.page.current": "第 {{current}} 頁", + "data_grid.pagination.page.known": "第 {{current}} / {{totalPages}} 頁", + "data_grid.pagination.result_set": "結果集", + "data_grid.pagination.summary.approximate": "目前 {{current}} 列 / 約 {{total}} 列", + "data_grid.pagination.summary.cancelled": "目前 {{current}} 列 / 計數已停止", + "data_grid.pagination.summary.counting": "目前 {{current}} 列 / 正在統計總數...", + "data_grid.pagination.summary.counting_exact": "目前 {{current}} 列 / 正在統計精確總數...", + "data_grid.pagination.summary.empty": "目前 0 列 / 共 0 列", + "data_grid.pagination.summary.known": "目前 {{current}} 列 / 共 {{total}} 列", + "data_grid.pagination.summary.not_counted": "目前 {{current}} 列 / 未統計總數", + "data_grid.preview_panel.no_cell_description": "點選表格中的儲存格以預覽完整資料", + "data_grid.preview_panel.no_cell_title": "點選儲存格查看資料", + "data_grid.preview_sql.copied": "已複製", + "data_grid.preview_sql.no_changes": "無變更", + "data_grid.preview_sql.summary": "共 {{deletes}} 條 DELETE,{{updates}} 條 UPDATE,{{inserts}} 條 INSERT", + "data_grid.preview_sql.title": "變更預覽", + "data_grid.record_view.edit_current": "編輯目前記錄", + "data_grid.record_view.edit_json": "編輯 JSON", + "data_grid.record_view.empty": "目前結果集沒有資料", + "data_grid.record_view.json_record_count": "目前結果集 {{count}} 筆記錄", + "data_grid.record_view.next": "下一筆", + "data_grid.record_view.previous": "上一筆", + "data_grid.record_view.record_position": "記錄 {{current}} / {{total}}", + "data_grid.row_editor.popup_edit": "彈窗編輯", + "data_grid.row_editor.title": "編輯列", + "data_grid.secondary.column_display": "欄位顯示", + "data_grid.secondary.data_preview": "資料預覽", + "data_grid.secondary.er_diagram": "ER 圖", + "data_grid.secondary.jump_column": "跳欄", + "data_grid.secondary.live": "即時", + "data_grid.secondary.object_design": "物件設計", + "data_grid.secondary.pending_changes": "未提交 {{count}}", + "data_grid.secondary.row_count": "{{count}} 列", + "data_grid.secondary.view_ddl": "查看 DDL", + "data_grid.table_fallback.query_result": "查詢結果", + "data_grid.toolbar.add_row": "新增列", + "data_grid.toolbar.ai_insight": "AI 資料洞察", + "data_grid.toolbar.ai_insight_short": "AI 洞察", + "data_grid.toolbar.ai_insight_tooltip": "讓 AI 分析目前查詢頁資料", + "data_grid.toolbar.batch_fill": "批次填入({{count}})", + "data_grid.toolbar.cancel_count": "取消計數", + "data_grid.toolbar.cancel_count_tooltip": "取消本次精確總數統計,不影響目前瀏覽。", + "data_grid.toolbar.cell_editor": "儲存格編輯", + "data_grid.toolbar.commit": "提交交易({{count}})", + "data_grid.toolbar.commit_delay.seconds": "{{seconds}} 秒", + "data_grid.toolbar.commit_label": "提交交易", + "data_grid.toolbar.commit_mode.auto": "自動提交", + "data_grid.toolbar.commit_mode.auto_countdown": "{{seconds}}s 後提交", + "data_grid.toolbar.commit_mode.manual": "手動提交", + "data_grid.toolbar.commit_mode.tooltip": "控制表格資料編輯後的提交方式。手動提交更安全;自動提交會在最後一次修改後依所選時間提交。", + "data_grid.toolbar.copied_columns_count": "已複製 {{count}} 欄", + "data_grid.toolbar.copy": "複製", + "data_grid.toolbar.copy_row": "複製列", + "data_grid.toolbar.copy_selection": "複製選區({{count}})", + "data_grid.toolbar.copy_selection_columns": "複製選區欄位值({{count}})", + "data_grid.toolbar.count_total": "統計總數", + "data_grid.toolbar.count_total_tooltip": "依目前篩選條件統計精確總數", + "data_grid.toolbar.delete_selected": "刪除選取", + "data_grid.toolbar.export": "匯出", + "data_grid.toolbar.filter": "篩選", + "data_grid.toolbar.import": "匯入", + "data_grid.toolbar.paste_row": "貼上列", + "data_grid.toolbar.paste_row_count": "貼上列({{count}})", + "data_grid.toolbar.paste_to_selected_rows": "貼上到選取列({{count}})", + "data_grid.toolbar.preview_sql": "預覽 SQL", + "data_grid.toolbar.preview_sql_generate": "產生預覽 SQL", + "data_grid.toolbar.refresh": "重新整理", + "data_grid.toolbar.rollback": "回滾", + "data_grid.toolbar.selected_count": "已選 {{count}}", + "data_grid.toolbar.undo_delete": "撤銷刪除", + "data_grid.view.edit_current_record": "編輯目前記錄", + "data_grid.view.edit_json": "編輯 JSON", + "data_grid.view.empty_result": "目前結果集沒有資料", + "data_grid.view.next_record": "下一筆記錄", + "data_grid.view.previous_record": "上一筆記錄", + "data_grid.view.record_count": "目前結果集:{{count}} 筆記錄", + "data_grid.view.record_position": "記錄 {{current}} / {{total}}", + "data_grid.view.result_view": "結果檢視", + "data_grid.view.table": "表格", + "data_grid.view.text": "文字", + "data_sync.action.analyze_diff": "對比差異", + "data_sync.action.cancel": "取消", + "data_sync.action.close": "關閉", + "data_sync.action.continue_sync": "繼續同步", + "data_sync.action.next": "下一步", + "data_sync.action.previous": "上一步", + "data_sync.action.start_sync": "開始同步", + "data_sync.action.view": "查看", + "data_sync.alert.auto_create_planner_scope": "自動建表目前僅支援 MySQL 到 Kingbase。會遷移欄位、主鍵、一般索引、唯一索引和聯合索引,並明確跳過全文、空間、前綴和函數類索引。", + "data_sync.alert.auto_create_scope": "自動建表目前僅支援 MySQL 到 Kingbase。會遷移欄位、主鍵、一般索引、唯一索引和聯合索引,並明確跳過全文、空間、前綴和函數類索引。", + "data_sync.alert.existing_target_only": "資料同步預設使用已有目標表執行。需要跨資料來源建表並導入時,請切換到跨庫遷移。", + "data_sync.alert.full_overwrite": "全量覆寫會清空目標表資料,請謹慎使用。", + "data_sync.alert.migration_mode": "目前為跨庫遷移。適合將表遷移到另一資料來源,並自動建表和導入資料。", + "data_sync.alert.query_mode": "SQL 結果集同步目前支援來源端自定義 SQL 到單個已存在目標表。查詢結果必須包含目標表主鍵列。", + "data_sync.alert.sync_mode": "目前為資料同步。適合目標表已存在時做增量同步或覆寫導入。", + "data_sync.backend.error.analyze_prepare_secrets_failed": "準備資料同步分析金鑰失敗: {{detail}}", + "data_sync.backend.error.apply_changes_failed": "套用變更失敗: {{detail}}", + "data_sync.backend.error.apply_changes_unsupported": "目標驅動不支援套用資料變更", + "data_sync.backend.error.apply_source_query_changes_failed": "套用 SQL 結果集變更失敗: {{detail}}", + "data_sync.backend.error.auto_add_column_failed": "自動補齊欄位失敗: 欄位={{column}}, 錯誤={{detail}}", + "data_sync.backend.error.build_migration_plan_failed": "產生遷移計畫失敗: 表={{table}}, 錯誤={{detail}}", + "data_sync.backend.error.clear_target_failed": "清空目標表失敗: {{detail}}", + "data_sync.backend.error.connect_source_failed": "來源資料庫連線失敗:{{detail}}", + "data_sync.backend.error.connect_source_mongodb_failed": "來源 MongoDB 連線失敗: {{detail}}", + "data_sync.backend.error.connect_source_redis_failed": "來源 Redis 連線失敗: {{detail}}", + "data_sync.backend.error.connect_target_failed": "目標資料庫連線失敗:{{detail}}", + "data_sync.backend.error.connect_target_mongodb_failed": "目標 MongoDB 連線失敗: {{detail}}", + "data_sync.backend.error.connect_target_redis_failed": "目標 Redis 連線失敗: {{detail}}", + "data_sync.backend.error.create_indexes_failed": "建立索引失敗: 表={{table}}, 錯誤={{detail}}", + "data_sync.backend.error.create_table_sql_empty": "表 {{table}} 自動建表失敗: 建表 SQL 為空", + "data_sync.backend.error.create_target_table_failed": "建立目標表失敗: 表={{table}}, 錯誤={{detail}}", + "data_sync.backend.error.diff_composite_pk_unsupported": "複合主鍵 ({{columns}}) 不支援差異比對同步", + "data_sync.backend.error.diff_pk_required": "沒有主鍵。差異比對同步不受支援;請使用 insert-only 或 full-overwrite 模式直接導入。", + "data_sync.backend.error.exec_ddl_statement_failed": "{{stage}}失敗: SQL={{sql}}, 錯誤={{detail}}", + "data_sync.backend.error.execute_source_query_failed": "執行來源查詢失敗: {{detail}}", + "data_sync.backend.error.init_source_driver_failed": "初始化來源資料庫驅動失敗:{{detail}}", + "data_sync.backend.error.init_source_mongodb_driver_failed": "初始化來源 MongoDB 驅動失敗: {{detail}}", + "data_sync.backend.error.init_target_driver_failed": "初始化目標資料庫驅動失敗:{{detail}}", + "data_sync.backend.error.init_target_mongodb_driver_failed": "初始化目標 MongoDB 驅動失敗: {{detail}}", + "data_sync.backend.error.inspect_mongodb_collection_failed": "檢查目標 MongoDB collection 失敗: {{detail}}", + "data_sync.backend.error.list_mongodb_collections_failed": "列出 MongoDB collection 失敗: {{detail}}", + "data_sync.backend.error.load_target_columns_failed": "載入目標表欄位失敗: {{detail}}", + "data_sync.backend.error.mongo_document_write_unsupported": "目標驅動不支援寫入 MongoDB document", + "data_sync.backend.error.mongo_read_source_samples_failed": "讀取來源 MongoDB collection 樣本失敗: {{detail}}", + "data_sync.backend.error.mongo_redis_analyze_collection_failed": "分析 MongoDB collection {{collection}} 失敗: {{detail}}", + "data_sync.backend.error.mongo_redis_document_key_missing": "MongoDB document 缺少 key 欄位", + "data_sync.backend.error.mongo_redis_document_type_missing": "MongoDB document 缺少欄位 {{field}},Redis Key={{key}}", + "data_sync.backend.error.mongo_redis_empty_target_value": "Redis Key {{key}} 的目標值為空", + "data_sync.backend.error.mongo_redis_unsupported_type": "Redis Key {{key}} 不支援類型 {{type}}", + "data_sync.backend.error.mongo_redis_value_invalid": "Redis Key {{key}} 的 {{type}} payload 無效;實際類型={{actual}}", + "data_sync.backend.error.mongo_redis_write_key_failed": "寫入 Redis Key {{key}} 失敗: {{detail}}", + "data_sync.backend.error.pre_create_table_sql_failed": "預執行建表 SQL 失敗: 表={{table}}, 錯誤={{detail}}", + "data_sync.backend.error.prepare_secrets_failed": "準備資料同步金鑰失敗: {{detail}}", + "data_sync.backend.error.preview_composite_pk_unsupported": "複合主鍵({{columns}})暫不支援資料預覽", + "data_sync.backend.error.preview_failed": "資料同步預覽失敗: {{detail}}", + "data_sync.backend.error.preview_pk_required": "無主鍵,不支援資料預覽", + "data_sync.backend.error.preview_prepare_secrets_failed": "準備資料同步預覽金鑰失敗: {{detail}}", + "data_sync.backend.error.read_redis_key_failed": "讀取 Redis Key {{key}} 失敗: {{detail}}", + "data_sync.backend.error.read_source_table_failed": "讀取來源表失敗: {{detail}}", + "data_sync.backend.error.read_source_table_failed_with_table": "讀取來源表 {{table}} 失敗: {{detail}}", + "data_sync.backend.error.read_target_redis_key_failed": "讀取目標 Redis Key {{key}} 失敗: {{detail}}", + "data_sync.backend.error.read_target_table_failed": "讀取目標表失敗: {{detail}}", + "data_sync.backend.error.read_target_table_failed_with_table": "讀取目標表 {{table}} 失敗: {{detail}}", + "data_sync.backend.error.redis_mongo_analyze_changes_failed": "分析 Redis 遷移變更失敗: {{detail}}", + "data_sync.backend.error.redis_mongo_apply_changes_failed": "套用 Redis 遷移變更失敗: {{detail}}", + "data_sync.backend.error.redis_mongo_build_changes_failed": "建立 Redis 遷移變更失敗: {{detail}}", + "data_sync.backend.error.redis_mongo_create_collection_failed": "建立目標 MongoDB collection 失敗: {{detail}}", + "data_sync.backend.error.refresh_columns_after_create_failed": "建立目標表後載入欄位失敗: 表={{table}}, 錯誤={{detail}}", + "data_sync.backend.error.restore_source_secret_failed": "還原來源資料庫連線密文失敗:{{detail}}", + "data_sync.backend.error.restore_target_secret_failed": "恢復目標資料庫連線密文失敗:{{detail}}", + "data_sync.backend.error.scan_redis_keys_failed": "掃描 Redis Key 失敗: {{detail}}", + "data_sync.backend.error.source_collection_no_migratable_fields": "來源 MongoDB collection 未推斷出可遷移欄位: {{collection}}", + "data_sync.backend.error.source_table_columns_failed": "取得來源表欄位失敗: {{detail}}", + "data_sync.backend.error.source_table_missing_or_no_columns": "來源表不存在或無欄位定義: {{table}}", + "data_sync.backend.error.sync_table_schema_failed": "同步表結構失敗: 表={{table}}, 錯誤={{detail}}", + "data_sync.backend.error.target_collection_check_failed": "檢查目標 MongoDB collection 失敗: {{detail}}", + "data_sync.backend.error.target_composite_pk_query_diff_unsupported": "目標表為複合主鍵 ({{columns}}),不支援 SQL 結果集差異分析", + "data_sync.backend.error.target_pk_required_for_query_diff": "目標表無主鍵,不支援基於 SQL 結果集的差異分析", + "data_sync.backend.error.target_table_columns_failed": "取得目標表欄位失敗: {{detail}}", + "data_sync.backend.error.target_table_columns_missing": "目標表 {{table}} 不存在或無法讀取欄位定義", + "data_sync.backend.label.content_data_only": "僅同步資料", + "data_sync.backend.label.content_schema_and_data": "同步結構+資料", + "data_sync.backend.label.content_schema_only": "僅同步結構", + "data_sync.backend.label.mode_full_overwrite": "全量覆蓋", + "data_sync.backend.label.mode_insert_only": "僅插入", + "data_sync.backend.label.mode_insert_update": "增量同步", + "data_sync.backend.label.target_strategy_auto_create_if_missing": "目標缺失時自動建立", + "data_sync.backend.label.target_strategy_existing_only": "僅使用既有目標", + "data_sync.backend.label.target_strategy_smart": "智慧處理目標", + "data_sync.backend.log.auto_add_columns_completed": "自動補齊欄位完成: 成功={{succeeded}}, 失敗={{failed}}", + "data_sync.backend.log.change_counts": "需插入 {{inserts}} 行,需更新 {{updates}} 行,需刪除 {{deletes}} 行", + "data_sync.backend.log.connecting_source": "正在連線來源資料庫: {{host}}...", + "data_sync.backend.log.connecting_target": "正在連線目標資料庫: {{host}}...", + "data_sync.backend.log.data_already_consistent": "資料一致,無需變更。", + "data_sync.backend.log.ddl_statement_succeeded": "表 {{table}} {{stage}}成功: {{sql}}", + "data_sync.backend.log.fatal_error": "致命錯誤: {{message}}", + "data_sync.backend.log.missing_columns_auto_add_disabled": "目標表缺少 {{count}} 個欄位,但未開啟自動補齊,將自動忽略: {{columns}}", + "data_sync.backend.log.missing_columns_auto_add_started": "目標表缺少 {{count}} 個欄位,開始自動補齊: {{columns}}", + "data_sync.backend.log.mongo_redis_keyspace_options": "MongoDB 到 Redis keyspace 遷移;模式={{mode}};目標={{target}}", + "data_sync.backend.log.mongo_redis_migrating_key": "正在寫入 Redis Key {{key}}", + "data_sync.backend.log.mongo_redis_syncing_collection": "正在同步 MongoDB collection {{collection}}", + "data_sync.backend.log.redis_mongo_keyspace_options": "Redis 到 MongoDB keyspace 遷移;模式={{mode}};目標策略={{strategy}}", + "data_sync.backend.log.redis_mongo_migrating_key": "正在遷移 Redis Key {{key}}", + "data_sync.backend.log.source_query_no_changes": "SQL 結果集與目標表一致,無需套用變更", + "data_sync.backend.log.source_query_sync_completed": "SQL 結果集同步完成: 插入={{inserts}}, 更新={{updates}}, 刪除={{deletes}}", + "data_sync.backend.log.source_query_sync_source": "同步來源: SQL 結果集 -> 目標表 {{table}};模式: {{mode}}", + "data_sync.backend.log.sync_options": "同步內容: {{content}};模式: {{mode}};自動補欄位: {{autoAddColumns}};目標表策略: {{targetTableStrategy}};建立索引: {{createIndexes}}", + "data_sync.backend.log.syncing_table": "正在同步表: {{table}}", + "data_sync.backend.log.table_no_operations_skipped": "表 {{table}} 未勾選任何操作,已跳過", + "data_sync.backend.log.target_table_created": "目標表建立成功: {{table}}", + "data_sync.backend.log.target_table_no_operations": "目標表 {{table}} 未勾選任何操作,已跳過", + "data_sync.backend.log.unknown_sync_content_data_only": "未知同步內容 {{content}},已自動使用僅同步資料", + "data_sync.backend.result.analyzed_tables": "已完成 {{count}} 張表的差異分析", + "data_sync.backend.result.analyzed_target_tables": "已完成 {{count}} 個目標表的差異分析", + "data_sync.backend.result.mongo_redis_analyzed_collections": "已完成 {{count}} 個 MongoDB collection 的 Redis 遷移分析", + "data_sync.backend.result.mongo_redis_completed": "MongoDB keyspace 遷移完成;已處理 {{collections}} 個 collection 和 {{keys}} 個 Redis Key", + "data_sync.backend.result.mongo_redis_no_collections": "沒有可遷移的 MongoDB collection", + "data_sync.backend.result.mongo_redis_no_documents": "沒有可遷移的 MongoDB Redis document", + "data_sync.backend.result.preview_ready": "資料同步預覽已就緒", + "data_sync.backend.result.redis_mongo_analyzed_keys": "已完成 {{count}} 個 Redis Key 的 MongoDB 遷移分析", + "data_sync.backend.result.redis_mongo_completed": "Redis keyspace 遷移完成;已處理 {{count}} 個 Redis Key", + "data_sync.backend.result.redis_mongo_no_keys": "沒有可遷移的 Redis Key", + "data_sync.backend.result.sync_completed": "同步完成: 表={{tables}}, 插入={{rowsInserted}}, 更新={{rowsUpdated}}, 刪除={{rowsDeleted}}", + "data_sync.backend.summary.diff_completed": "差異分析完成", + "data_sync.backend.summary.mongo_redis_diff": "執行時將插入 {{inserts}} 個 Redis Key,並更新 {{updates}} 個 Redis Key", + "data_sync.backend.summary.mongo_redis_empty_collection": "collection 中沒有可遷移的 document", + "data_sync.backend.summary.mongo_redis_planned_action": "遷移到 {{target}}", + "data_sync.backend.summary.mongo_redis_same_keys": "匹配的 Redis Key 已是最新", + "data_sync.backend.summary.mongo_redis_warning_document_format": "僅支援包含 key/type/ttl/value 欄位的 document", + "data_sync.backend.summary.mongo_redis_warning_full_overwrite_downgrade": "MongoDB 到 Redis 會將全量覆寫降級為增量同步,以避免刪除 DB 中其他 Redis Key", + "data_sync.backend.summary.mongo_redis_warning_keyspace": "MongoDB collection 中的 document 將按 keyspace 語意寫入 Redis", + "data_sync.backend.summary.redis_mongo_insert_document": "執行時將插入新的 MongoDB document", + "data_sync.backend.summary.redis_mongo_planned_action": "遷移到集合 {{collection}}", + "data_sync.backend.summary.redis_mongo_same_document": "匹配的 MongoDB document 已是最新", + "data_sync.backend.summary.redis_mongo_update_document": "執行時將更新現有 MongoDB document", + "data_sync.backend.summary.redis_mongo_warning_document_write": "Redis Key 將寫入為 MongoDB document", + "data_sync.backend.summary.source_query_diff_completed": "SQL 結果集差異分析完成", + "data_sync.backend.unsupported.clickhouse_objects_to_pg_like": "ClickHouse ORDER BY/PARTITION/TTL/Projection/materialized-view 語意尚未自動遷移到 PG-like 目標", + "data_sync.backend.validation.query_mode_data_only": "SQL 結果集同步目前僅支援只同步資料", + "data_sync.backend.validation.single_target_table_required": "SQL 結果集同步要求且僅允許選擇一個目標表", + "data_sync.backend.validation.source_query_required": "來源查詢 SQL 不能為空", + "data_sync.backend.validation.target_table_required": "目標表不能為空", + "data_sync.backend.warning.apply_changes_unsupported": "目標驅動不支援套用資料變更。", + "data_sync.backend.warning.auto_add_column_sql_generation_failed": "欄位 {{column}} 自動補齊 SQL 產生失敗: {{detail}}", + "data_sync.backend.warning.auto_create_pair_unsupported": "自動建表目前僅支援 MySQL -> Kingbase;目前組合={{sourceType}} -> {{targetType}}", + "data_sync.backend.warning.auto_increment_not_preserved_existing_target_add_column": "欄位 {{column}} 為自增列,補齊到已有目標表時不會自動補建 {{feature}}", + "data_sync.backend.warning.clickhouse_complex_type_degraded_mysql": "欄位 {{column}} 型別 {{type}} 已降級為 json", + "data_sync.backend.warning.clickhouse_complex_type_degraded_pg_like": "欄位 {{column}} 型別 {{type}} 已降級為 jsonb", + "data_sync.backend.warning.clickhouse_enum_degraded_pg_like": "欄位 {{column}} enum 型別 {{type}} 已降級為 varchar(255)", + "data_sync.backend.warning.clickhouse_order_by_tuple_used": "未檢測到來源主鍵,ClickHouse 將使用 ORDER BY tuple();查詢效能可能受影響", + "data_sync.backend.warning.clickhouse_relational_constraints_not_preserved": "ClickHouse 不保留關聯式外鍵或唯一約束語意;僅遷移欄位和資料", + "data_sync.backend.warning.clickhouse_source_metadata_limited": "ClickHouse 來源端索引和約束元資料有限;反向遷移以欄位和資料為主", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_mysql": "ClickHouse 來源端未返回主鍵資訊,目標 MySQL 表不會自動建立主鍵", + "data_sync.backend.warning.clickhouse_source_primary_key_missing_pg_like": "ClickHouse 來源端未返回主鍵資訊,目標 PG-like 表不會自動建立主鍵", + "data_sync.backend.warning.clickhouse_target_insert_only_recommended": "ClickHouse 目標建議使用 insert-only 或 full-overwrite;update/delete 語意與傳統關聯式資料庫不同", + "data_sync.backend.warning.clickhouse_type_degraded_mysql_text": "欄位 {{column}} 型別 {{type}} 沒有專用 MySQL 對應,已降級為 text", + "data_sync.backend.warning.clickhouse_type_degraded_pg_like_text": "欄位 {{column}} 型別 {{type}} 沒有專用 PG-like 對應,已降級為 text", + "data_sync.backend.warning.clickhouse_uint64_mapped_numeric_pg_like": "欄位 {{column}} 型別 {{type}} 已對應為 numeric(20,0),以避免 unsigned 溢出", + "data_sync.backend.warning.column_default_expression_skipped": "欄位 {{column}} 的預設值 {{default}} 包含表達式,目前未自動遷移", + "data_sync.backend.warning.column_empty_string_default_not_preserved": "欄位 {{column}} 的空字串預設值未保留", + "data_sync.backend.warning.column_type_degraded": "欄位 {{column}} 型別 {{sourceType}} 已降級為 {{targetType}}", + "data_sync.backend.warning.column_type_degraded_clickhouse_string": "欄位 {{column}} 型別 {{type}} 已降級為 String", + "data_sync.backend.warning.column_type_empty_clickhouse_string": "欄位 {{column}} 型別為空,已降級為 String", + "data_sync.backend.warning.column_type_empty_degraded": "欄位 {{column}} 型別為空,已降級為 {{targetType}}", + "data_sync.backend.warning.column_type_mapped": "欄位 {{column}} 型別 {{sourceType}} 已對應為 {{targetType}}", + "data_sync.backend.warning.column_type_no_mapping_degraded": "欄位 {{column}} 型別 {{sourceType}} 沒有專用對應,已降級為 {{targetType}}", + "data_sync.backend.warning.column_user_defined_degraded": "欄位 {{column}} 為使用者自定義型別,已降級為 {{targetType}}", + "data_sync.backend.warning.column_user_defined_degraded_clickhouse_string": "欄位 {{column}} 為使用者自定義型別,已降級為 String", + "data_sync.backend.warning.composite_pk_skipped": "表 {{table}} 為複合主鍵 ({{columns}}),暫不支援差異同步,已跳過", + "data_sync.backend.warning.full_overwrite_clearing_target": "全量覆寫模式:即將清空目標表 {{table}}", + "data_sync.backend.warning.index_columns_missing": "索引 {{name}} 缺少欄位定義,已跳過", + "data_sync.backend.warning.index_prefix_length_unsupported": "索引 {{name}} 使用前綴長度,目前暫不支援遷移", + "data_sync.backend.warning.index_type_unsupported": "索引 {{name}} 型別={{type}},目前暫不支援自動遷移", + "data_sync.backend.warning.load_target_columns_skip_check_failed": "取得目標表欄位失敗,已跳過欄位一致性檢查: {{detail}}", + "data_sync.backend.warning.mongo_redis_document_format": "MongoDB 到 Redis 目前僅支援包含 key/type/ttl/value 欄位的 document", + "data_sync.backend.warning.mongo_redis_full_overwrite_downgrade": "MongoDB 到 Redis 遷移會將全量覆蓋降級為增量同步", + "data_sync.backend.warning.mysql_auto_increment_not_preserved_clickhouse": "欄位 {{column}} 的 AUTO_INCREMENT 不會作為 ClickHouse 自增語意保留", + "data_sync.backend.warning.mysql_binary_degraded_clickhouse_string": "欄位 {{column}} 的二進位型別已降級為 String", + "data_sync.backend.warning.mysql_time_degraded_clickhouse_string": "欄位 {{column}} 型別 {{type}} 已降級為 String", + "data_sync.backend.warning.mysql_type_degraded_clickhouse_string": "欄位 {{column}} 型別 {{type}} 沒有專用 ClickHouse 對應,已降級為 String", + "data_sync.backend.warning.mysql_unsigned_bigint_auto_increment_degraded": "欄位 {{column}} 為 unsigned bigint auto_increment,已降級為 {{targetType}},且不保留自增語意", + "data_sync.backend.warning.pg_like_identity_not_preserved_clickhouse": "欄位 {{column}} 的 identity/自增語意不會保留到 ClickHouse", + "data_sync.backend.warning.redis_mongo_full_overwrite_downgrade": "Redis 到 MongoDB 遷移會將全量覆蓋降級為增量同步", + "data_sync.backend.warning.refresh_columns_after_add_failed": "補齊欄位後刷新目標欄位失敗: 表={{table}}, 錯誤={{detail}}", + "data_sync.backend.warning.source_indexes_read_failed": "讀取來源表索引失敗,已跳過索引遷移: {{detail}}", + "data_sync.backend.warning.table_pk_required_skipped": "表 {{table}} 未找到主鍵,目前模式需要差異比對,已跳過", + "data_sync.backend.warning.target_existing_only_required": "目前策略要求目標表已存在,執行時不會自動建立。", + "data_sync.backend.warning.target_exists_data_only_no_indexes": "目標表已存在。僅執行資料導入;不會自動重建現有索引和約束。", + "data_sync.backend.warning.target_missing_columns": "目標表缺少 {{count}} 個欄位: {{columns}}", + "data_sync.backend.warning.target_missing_skip_auto_create_disabled": "表 {{table}} 的目標表不存在,目前策略不允許自動建表,已跳過", + "data_sync.backend.warning.target_table_existing_only_required": "目前策略要求目標表已存在,執行時不會自動建立。", + "data_sync.backend.warning.unknown_content_default_data": "未知同步內容 {{content}},已自動使用僅同步資料", + "data_sync.backend.warning.unknown_mode_default_insert_update": "未知同步模式 {{mode}},已自動使用增量同步", + "data_sync.badge.migration_mode": "遷移模式", + "data_sync.badge.source_pending": "待選來源連線", + "data_sync.badge.source_selected": "已選來源連線", + "data_sync.badge.sync_mode": "同步模式", + "data_sync.badge.table_count": "{{count}} 張表", + "data_sync.compare_entry.action.return_to_compare": "返回比對", + "data_sync.compare_entry.alert.data": "目前為「資料比對」入口:固定依主鍵分析列級差異,不執行寫入。", + "data_sync.compare_entry.alert.schema": "目前為「表結構比對」入口:固定只分析結構差異並產生可審閱 SQL,不執行變更。", + "data_sync.compare_entry.option.auto_add_columns": "產生目標表缺失欄位的相容變更 SQL(僅預覽,不執行)", + "data_sync.compare_entry.option.source_dataset.query": "依 SQL 結果集比對", + "data_sync.compare_entry.option.source_dataset.table": "依表比對", + "data_sync.compare_entry.preview.selection_hint": "列選取只影響 SQL 預覽範圍,不會執行寫入。", + "data_sync.compare_entry.preview.sql.data_help": "SQL 預覽會依目前勾選的插入、更新、刪除與列選取範圍產生,僅用於審閱差異。", + "data_sync.compare_entry.preview.sql.schema_help": "SQL 預覽顯示結構差異建議語句,僅用於審閱差異。", + "data_sync.compare_entry.result.completed": "比對完成", + "data_sync.compare_entry.result.failed": "比對失敗", + "data_sync.compare_entry.result.running": "正在比對", + "data_sync.compare_entry.result.running_description": "目前階段:{{stage}}{{table}}", + "data_sync.compare_entry.result.stage_fallback": "執行中", + "data_sync.compare_entry.result.success_summary": "已成功比對 {{tables}} 張表。", + "data_sync.compare_entry.result.table_suffix": ",表:{{table}}", + "data_sync.compare_entry.title.analysis_log": "分析日誌", + "data_sync.compare_entry.workflow_help": "目前入口只做差異分析與預覽,不會執行同步、建表、補欄位或刪除資料。", + "data_sync.confirm.full_overwrite.content": "全量覆寫會先清空目標表資料再插入,請確認目標庫已完成備份。", + "data_sync.confirm.full_overwrite.ok": "繼續執行", + "data_sync.confirm.full_overwrite.title": "確認全量覆寫", + "data_sync.diff.column.delete": "刪除", + "data_sync.diff.column.insert": "插入", + "data_sync.diff.column.plan": "計畫", + "data_sync.diff.column.preview": "預覽", + "data_sync.diff.column.risk": "風險", + "data_sync.diff.column.same": "相同", + "data_sync.diff.column.table": "表名", + "data_sync.diff.column.target_table": "目標表", + "data_sync.diff.column.update": "更新", + "data_sync.diff.more_warnings": "還有 {{count}} 項未展開", + "data_sync.diff.target_exists": "已存在", + "data_sync.diff.target_missing": "不存在", + "data_sync.diff.title": "對比結果", + "data_sync.diff.warning_title": "預檢發現風險或降級項,請在執行前確認。", + "data_sync.entry_mode.compare.action.start": "開始比對", + "data_sync.entry_mode.compare.option_title": "比對選項", + "data_sync.entry_mode.compare.result_title": "比對結果", + "data_sync.entry_mode.data_compare.badge": "資料比對", + "data_sync.entry_mode.data_compare.description": "依主鍵比對來源表與目標表的資料差異,查看新增、更新和刪除明細。", + "data_sync.entry_mode.data_compare.hero_description": "適合核對兩端資料一致性,只做差異分析與列級預覽,不執行寫入。", + "data_sync.entry_mode.data_compare.table_select_label": "請選擇需要比對資料的表:", + "data_sync.entry_mode.data_compare.title": "資料比對", + "data_sync.entry_mode.schema_compare.badge": "結構比對", + "data_sync.entry_mode.schema_compare.description": "依來源表與目標表產生結構差異、相容風險和可審閱 SQL。", + "data_sync.entry_mode.schema_compare.hero_description": "適合發布前核對兩端表結構差異,只做分析與預覽,不執行結構變更。", + "data_sync.entry_mode.schema_compare.table_select_label": "請選擇需要比對結構的表:", + "data_sync.entry_mode.schema_compare.title": "表結構比對", + "data_sync.entry_mode.sync.hero_description": "適合目標表已存在的場景,先做差異分析,再依勾選執行插入、更新或刪除。", + "data_sync.field.connection": "連線", + "data_sync.field.database": "資料庫", + "data_sync.field.migration_content": "遷移內容", + "data_sync.field.migration_mode": "遷移模式", + "data_sync.field.mongo_collection_name": "Mongo 集合名(可選)", + "data_sync.field.schema": "模式", + "data_sync.field.source_dataset_mode": "來源資料方式", + "data_sync.field.source_query_sql": "來源查詢 SQL", + "data_sync.field.sync_content": "同步內容", + "data_sync.field.sync_mode": "同步模式", + "data_sync.field.target_table": "目標表", + "data_sync.field.target_table_requirement": "目標表要求", + "data_sync.field.target_table_strategy": "目標表處理策略", + "data_sync.field.workflow_type": "功能型別", + "data_sync.help.mongo_collection_mongo_to_redis": "MongoDB 到 Redis 情境通常直接選擇來源集合。僅在需要明確回退集合名時填寫。", + "data_sync.help.mongo_collection_redis_to_mongo": "留空時使用預設集合名。填寫後,本次 Redis 鍵空間會寫入該 Mongo 集合。", + "data_sync.help.select_tables": "請選擇需要同步的表:", + "data_sync.help.source_query_mode": "請輸入來源查詢 SQL,並選擇一個目標表。差異分析會直接基於該結果集與目標表對比。", + "data_sync.help.workflow_type": "先選擇本次是同步已有目標表,還是執行跨庫遷移。頁面會按功能型別調整更安全的預設策略。", + "data_sync.hero.migration_description": "將來源表遷移到另一資料庫,按策略自動建表、導入資料並補建相容索引。", + "data_sync.hero.migration_title": "跨資料源遷移", + "data_sync.hero.sync_description": "基於已有目標表先做差異比對,再按勾選執行插入、更新或刪除。", + "data_sync.hero.sync_title": "資料同步", + "data_sync.log.level.error": "錯誤", + "data_sync.log.level.info": "資訊", + "data_sync.log.level.warn": "警告", + "data_sync.log.title": "執行日誌", + "data_sync.message.analysis_complete": "差異分析完成", + "data_sync.message.analysis_failed": "差異分析失敗", + "data_sync.message.analysis_failed_detail": "差異分析失敗:{{detail}}", + "data_sync.message.analyze_before_sync": "請先對比差異,再開始同步", + "data_sync.message.close_blocked_running": "同步執行中,暫不支援關閉窗口。", + "data_sync.message.fetch_source_databases_failed": "取得來源資料庫失敗", + "data_sync.message.fetch_source_databases_failed_detail": "取得來源資料庫失敗:{{detail}}", + "data_sync.message.fetch_tables_failed": "取得表列表失敗", + "data_sync.message.fetch_tables_failed_detail": "取得表列表失敗:{{detail}}", + "data_sync.message.fetch_target_databases_failed": "取得目標資料庫失敗", + "data_sync.message.fetch_target_databases_failed_detail": "取得目標資料庫失敗:{{detail}}", + "data_sync.message.fetch_target_schemas_failed_detail": "取得目標模式失敗: {{detail}}", + "data_sync.message.more_items_collapsed": "還有 {{count}} 項未展開", + "data_sync.message.precheck_warnings": "預檢發現風險或降級項,請在執行前確認。", + "data_sync.message.preview_load_failed": "載入差異預覽失敗", + "data_sync.message.preview_load_failed_detail": "載入差異預覽失敗:{{detail}}", + "data_sync.message.select_connections_first": "請先選擇連線", + "data_sync.message.select_databases_first": "請先選擇資料庫", + "data_sync.message.select_source_database": "請選擇來源資料庫", + "data_sync.message.select_target_database": "請選擇目標資料庫", + "data_sync.message.select_target_schema": "請選擇目標模式", + "data_sync.message.sync_execution_failed": "同步執行失敗", + "data_sync.message.sync_execution_failed_detail": "同步執行失敗:{{detail}}", + "data_sync.modal.full_overwrite_content": "全量覆寫會先清空目標表資料再插入,請確認目標庫已完成備份。", + "data_sync.modal.full_overwrite_ok": "繼續執行", + "data_sync.modal.full_overwrite_title": "確認全量覆寫", + "data_sync.option.auto_add_columns": "自動補齊目標表缺失欄位(目前支援 MySQL 目標及 MySQL 到 Kingbase;SQL 結果集模式暫不支援)", + "data_sync.option.content.both": "同步結構和資料", + "data_sync.option.content.data": "僅同步資料", + "data_sync.option.content.schema": "僅同步結構", + "data_sync.option.create_indexes": "自動遷移相容的一般索引和唯一索引(僅自動建表模式生效)", + "data_sync.option.show_same_tables": "显示相同表", + "data_sync.option.source_dataset.query": "按 SQL 結果集同步", + "data_sync.option.source_dataset.table": "按表同步", + "data_sync.option.sync_mode.full_overwrite": "全量覆寫(清空目標表後插入)", + "data_sync.option.sync_mode.insert_only": "僅插入(不對比目標;無主鍵表將跳過)", + "data_sync.option.sync_mode.insert_update": "增量同步(對比差異後選擇插入、更新和刪除)", + "data_sync.option.target_strategy.auto_create_if_missing": "目標表不存在時自動建表", + "data_sync.option.target_strategy.existing_only": "僅使用已有目標表", + "data_sync.option.target_strategy.smart": "智慧模式(存在則直接導入,不存在則自動建表)", + "data_sync.option.workflow.migration": "跨庫遷移(自動建表後導入)", + "data_sync.option.workflow.sync": "資料同步(基於已有目標表做差異同步)", + "data_sync.placeholder.mongo_collection_name": "請輸入 Mongo 集合名", + "data_sync.placeholder.source_query_sql": "例如:SELECT id, name, email FROM users WHERE status = 'active'", + "data_sync.placeholder.target_table": "請選擇一個目標表", + "data_sync.plan.add_missing_columns_before_import": "補齊 {{count}} 個缺失欄位後導入", + "data_sync.plan.auto_create_unsupported": "目前庫對暫不支援自動建表", + "data_sync.plan.backend_summary": "後端計畫摘要", + "data_sync.plan.data_import_without_diff": "目前模式不進行差異比對,直接導入來源表資料。", + "data_sync.plan.migrate_to_collection": "遷移到集合 {{collection}}", + "data_sync.plan.migrate_to_target": "遷移到 {{target}}", + "data_sync.plan.migration_kernel_planning": "目前資料庫組合已進入遷移規劃階段,等待結構推斷和目標方言產生支援", + "data_sync.plan.missing_columns_auto_add": "補齊 {{count}} 個缺失欄位後導入", + "data_sync.plan.missing_columns_auto_add_disabled": "目標表缺失 {{count}} 個欄位,未開啟自動補齊", + "data_sync.plan.missing_columns_auto_add_unsupported": "目標表缺失 {{count}} 個欄位,目前庫對暫不支援自動補齊", + "data_sync.plan.missing_columns_no_executable_sql": "目標表缺失 {{count}} 個欄位,但未產生可執行補齊 SQL", + "data_sync.plan.mongo_relational_entry_warning": "{{objectKind}} 從 {{sourceType}} 到 {{targetType}} 的遷移目前僅提供結構推斷規劃提示", + "data_sync.plan.mongo_relational_kernel_planned": "目前資料庫組合已進入遷移規劃階段,等待結構推斷和目標方言產生支援", + "data_sync.plan.mongo_target_collection_missing_auto_create": "目標 MongoDB collection {{collection}} 不存在,將自動建立後導入。", + "data_sync.plan.mongo_target_collection_missing_manual_create": "目標 MongoDB collection {{collection}} 不存在,需先手動建立。", + "data_sync.plan.redis_key_to_mongodb_document": "按 Redis Key 產生 MongoDB 文件導入", + "data_sync.plan.redis_mongo_keyspace_import": "按 Redis Key 產生 MongoDB 文件導入", + "data_sync.plan.redis_mongo_keyspace_warning_no_schema": "Redis 到 MongoDB 按 keyspace 語意遷移,不執行表結構檢查", + "data_sync.plan.redis_mongo_keyspace_warning_semantics": "Redis TTL 和 collection 排序語意會作為 document 欄位保留,但可能無法完全等價", + "data_sync.plan.redis_mongo_target_collection_auto_create": "目標集合不存在,將自動建立集合後導入", + "data_sync.plan.redis_mongo_target_collection_existing_only_warning": "目前策略要求目標 MongoDB collection 已存在,執行時不會自動建立", + "data_sync.plan.redis_mongo_target_collection_missing_manual": "目標集合不存在,需先手動建立", + "data_sync.plan.redis_mongo_unsupported_objects": "Redis Consumer Group / PubSub / Lua scripts / transaction state 尚未遷移", + "data_sync.plan.schema_aligned": "表結構已一致", + "data_sync.plan.schema_changes_detected": "檢測到 {{count}} 條結構變更", + "data_sync.plan.schema_only": "僅同步結構", + "data_sync.plan.schema_only_no_data_diff": "僅同步結構,未執行資料差異分析", + "data_sync.plan.schema_preview": "結構預覽", + "data_sync.plan.source_query_preview": "SQL 結果集同步預覽", + "data_sync.plan.target_collection_missing_auto_create": "目標集合不存在,將自動建立集合後導入", + "data_sync.plan.target_collection_missing_manual_create": "目標集合不存在,需先手動建立", + "data_sync.plan.target_missing_auto_create": "目標表不存在,將自動建表後導入", + "data_sync.plan.target_missing_auto_create_all": "目標表不存在,執行時將自動建表並導入全部來源資料", + "data_sync.plan.target_missing_cannot_sync": "目標表不存在,無法執行同步", + "data_sync.plan.target_missing_manual_create": "目標表不存在,需先手動建立", + "data_sync.plan.target_missing_preview_unavailable": "目標表不存在,差異預覽不可用。", + "data_sync.plan.tdengine_target_missing_timestamp_auto_create_unavailable": "來源表未識別到可對應為 TDengine 首列的時間列,無法自動建表", + "data_sync.plan.tdengine_time_column_missing": "來源表未識別到可對應為 TDengine 首列的時間列,無法自動建表", + "data_sync.plan.use_existing_target": "使用已有目標表導入", + "data_sync.plan.use_existing_target_collection": "使用已有目標集合導入", + "data_sync.plan.use_existing_target_table": "使用已有目標表導入", + "data_sync.preview.action.copy_sql": "複製 SQL", + "data_sync.preview.column.changed_columns": "變更欄位", + "data_sync.preview.column.data": "資料", + "data_sync.preview.column.detail": "詳情", + "data_sync.preview.column.primary_key": "主鍵", + "data_sync.preview.data_summary": "插入 {{inserts}},更新 {{updates}},刪除 {{deletes}}(預覽每種類型最多展示 200 行)", + "data_sync.preview.delete_warning": "刪除預設不勾選。請確認業務影響後再啟用刪除。", + "data_sync.preview.loading": "正在載入差異預覽...", + "data_sync.preview.message.copy_failed": "複製失敗,請手動複製。", + "data_sync.preview.message.sql_copied": "SQL 已複制", + "data_sync.preview.schema_plan_help": "以下為本次結構同步計畫執行的語句。", + "data_sync.preview.schema_statement_count": "檢測到 {{count}} 條結構變更語句", + "data_sync.preview.schema_warning_title": "結構預覽包含風險或降級項", + "data_sync.preview.selection_hint.delete": "未勾選任何行時會同步全部刪除差異。如不想執行刪除,請在對比結果中取消刪除。", + "data_sync.preview.selection_hint.insert": "未勾選任何行時會同步全部插入差異。如不想執行插入,請在對比結果中取消插入。", + "data_sync.preview.selection_hint.update": "未勾選任何行時會同步全部更新差異。如不想執行更新,請在對比結果中取消更新。", + "data_sync.preview.side.source": "源", + "data_sync.preview.side.target": "目標", + "data_sync.preview.sql.data_help": "SQL 預覽會按目前勾選的插入、更新、刪除和行選擇範圍產生,用於審核確認。", + "data_sync.preview.sql.no_data_sql": "-- 目前選擇範圍沒有可預覽 SQL", + "data_sync.preview.sql.no_schema_changes": "-- 目前表結構無可執行變更", + "data_sync.preview.sql.schema_help": "SQL 預覽展示將執行的結構變更語句,用于审核確認。", + "data_sync.preview.sql.schema_statement_count": "共 {{count}} 條結構變更語句", + "data_sync.preview.sql.statement_count": "共 {{count}} 條語句(預覽資料每種類型最多展示 200 行)", + "data_sync.preview.tab.delete": "刪除({{count}})", + "data_sync.preview.tab.insert": "插入({{count}})", + "data_sync.preview.tab.schema": "結構({{count}})", + "data_sync.preview.tab.sql": "SQL({{count}})", + "data_sync.preview.tab.update": "更新({{count}})", + "data_sync.preview.title": "差異預覽:{{table}}", + "data_sync.preview.update_detail_title": "更新詳情:{{table}} / {{pk}}", + "data_sync.progress.stage.analysis_completed": "差異分析完成", + "data_sync.progress.stage.analysis_started": "差異分析開始", + "data_sync.progress.stage.analyzing_diff": "差異分析", + "data_sync.progress.stage.analyzing_table": "分析表({{current}}/{{total}})", + "data_sync.progress.stage.applying_changes": "套用變更", + "data_sync.progress.stage.backend_update": "正在處理後端進度", + "data_sync.progress.stage.checking_columns": "檢查欄位一致性", + "data_sync.progress.stage.clearing_target": "清空目標表", + "data_sync.progress.stage.collection_completed": "集合處理完成", + "data_sync.progress.stage.comparing_diff": "對比差異", + "data_sync.progress.stage.completed": "同步完成", + "data_sync.progress.stage.connecting_source": "連線來源資料庫", + "data_sync.progress.stage.connecting_target": "連線目標資料庫", + "data_sync.progress.stage.creating_indexes": "建立索引", + "data_sync.progress.stage.creating_target_collection": "建立目標集合", + "data_sync.progress.stage.creating_target_table": "建立目標表", + "data_sync.progress.stage.executing": "執行中", + "data_sync.progress.stage.failed": "同步失敗", + "data_sync.progress.stage.migrating_collection": "遷移集合({{current}}/{{total}})", + "data_sync.progress.stage.migrating_key": "遷移 Key({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_collection_completed": "集合處理完成", + "data_sync.progress.stage.mongo_redis_migrating_collection": "遷移集合({{current}}/{{total}})", + "data_sync.progress.stage.mongo_redis_started": "MongoDB 到 Redis keyspace 遷移開始", + "data_sync.progress.stage.mongodb_keyspace_started": "開始 MongoDB 鍵空間遷移", + "data_sync.progress.stage.preparing": "準備開始", + "data_sync.progress.stage.reading_source": "讀取來源表資料", + "data_sync.progress.stage.reading_target": "讀取目標表資料", + "data_sync.progress.stage.redis_keyspace_started": "開始 Redis 鍵空間遷移", + "data_sync.progress.stage.redis_mongo_creating_collection": "建立目標集合", + "data_sync.progress.stage.redis_mongo_migrating_key": "遷移 Key({{current}}/{{total}})", + "data_sync.progress.stage.redis_mongo_started": "Redis 到 MongoDB keyspace 遷移開始", + "data_sync.progress.stage.sync_started": "開始同步", + "data_sync.progress.stage.syncing_schema": "同步表結構", + "data_sync.progress.stage.syncing_table": "同步表({{current}}/{{total}})", + "data_sync.progress.stage.table_completed": "表處理完成", + "data_sync.query_mode.help": "請輸入來源查詢 SQL,並選擇一個目標表。差異分析會直接基於該結果集與目標表對比。", + "data_sync.result.completed": "同步完成", + "data_sync.result.failed": "同步失敗", + "data_sync.result.failed_description": "同步未完成。", + "data_sync.result.failed_detail": "同步失敗:{{detail}}", + "data_sync.result.running": "正在同步", + "data_sync.result.running_description": "目前階段:{{stage}}{{table}}", + "data_sync.result.success_summary": "成功同步 {{tables}} 張表。插入:{{inserted}},更新:{{updated}}", + "data_sync.result.table_suffix": ",表:{{table}}", + "data_sync.schema_inference.mongo_relational_issue": "{{sourceType}} -> {{targetType}} 的結構推斷仍在開發中;目前僅提供遷移規劃提示。", + "data_sync.schema_inference.mongo_relational_resolution": "後續迭代將從取樣資料產生欄位定義和型別降級策略。", + "data_sync.schema_sync.error.create_statement_empty": "建表語句為空", + "data_sync.schema_sync.error.create_target_table_failed": "建立目標表 {{table}} 失敗: {{detail}}", + "data_sync.schema_sync.error.get_columns_after_create_failed": "建立目標表 {{table}} 後取得欄位失敗: {{detail}}", + "data_sync.schema_sync.error.get_create_statement_failed": "取得來源表 {{table}} 建表語句失敗: {{detail}}", + "data_sync.schema_sync.error.get_source_columns_failed": "取得來源表 {{table}} 欄位失敗: {{detail}}", + "data_sync.schema_sync.error.target_missing_auto_create_unsupported": "目標表 {{table}} 不存在,源型別 {{sourceType}} 暫不支援自動建表: {{detail}}", + "data_sync.schema_sync.log.add_column_failed": "補齊欄位失敗: 表={{table}}, 欄位={{column}}, 錯誤={{detail}}", + "data_sync.schema_sync.log.column_added": "已補齊欄位: 表={{table}}, 欄位={{column}}, 型別={{type}}", + "data_sync.schema_sync.log.completed": "表結構同步完成: {{table}},新增欄位 {{count}} 個", + "data_sync.schema_sync.log.schema_aligned": "表結構一致: {{table}}", + "data_sync.schema_sync.log.target_created": "目標表建立成功: {{table}}", + "data_sync.schema_sync.log.target_missing_create": "目標表 {{table}} 不存在,開始嘗試建立表結構", + "data_sync.schema_sync.warning.target_unsupported": "目標資料庫型別={{targetType}} 暫不支援結構同步,已跳過表 {{table}}", + "data_sync.section.migration_options": "遷移選項", + "data_sync.section.source_database": "來源資料庫", + "data_sync.section.sync_options": "同步選項", + "data_sync.section.target_database": "目標資料庫", + "data_sync.step.configure": "配置源與目標", + "data_sync.step.result": "執行結果", + "data_sync.step.select_tables": "選擇表", + "data_sync.table_picker.help": "請選擇需要同步的表:", + "data_sync.table_picker.item_unit": "項", + "data_sync.table_picker.items_unit": "項", + "data_sync.table_picker.not_found": "暫無資料", + "data_sync.table_picker.search_placeholder": "搜尋表...", + "data_sync.table_picker.selected_title": "已選表", + "data_sync.table_picker.show_same": "显示相同表", + "data_sync.table_picker.source_title": "來源表", + "data_sync.table.delete": "刪除", + "data_sync.table.insert": "插入", + "data_sync.table.plan": "計畫", + "data_sync.table.preview": "預覽", + "data_sync.table.risk": "風險", + "data_sync.table.same": "相同", + "data_sync.table.table_name": "表名", + "data_sync.table.target_exists": "已存在", + "data_sync.table.target_missing": "不存在", + "data_sync.table.target_table": "目標表", + "data_sync.table.update": "更新", + "data_sync.title.compare_result": "對比結果", + "data_sync.title.execution_log": "執行日誌", + "data_sync.title.migration": "跨資料源遷移", + "data_sync.title.migration_description": "按來源庫到目標庫完成建表、導入與風險預檢。", + "data_sync.title.migration_options": "遷移選項", + "data_sync.title.migration_workbench": "跨庫遷移工作台", + "data_sync.title.source_database": "來源資料庫", + "data_sync.title.sync": "資料同步", + "data_sync.title.sync_description": "按已有目標表完成差異比對、同步執行與結果確認。", + "data_sync.title.sync_options": "同步選項", + "data_sync.title.sync_workbench": "資料同步工作台", + "data_sync.title.target_database": "目標資料庫", + "data_sync.transfer.empty": "暫無資料", + "data_sync.transfer.item_unit": "項", + "data_sync.transfer.items_unit": "項", + "data_sync.transfer.search_placeholder": "搜尋表...", + "data_sync.transfer.selected_tables": "已選表", + "data_sync.transfer.source_tables": "???", + "data_sync.unsupported.clickhouse_to_tdengine_schema_semantics": "來源 ORDER BY/PARTITION/TTL/Projection/materialized-view 語意尚未自動遷移到 TDengine", + "data_sync.unsupported.mongo_index_columns_missing": "索引 {{name}} 缺少欄位定義,已跳過", + "data_sync.unsupported.mongo_index_create_command_failed": "索引 {{name}} 產生 MongoDB createIndexes 命令失敗: {{detail}}", + "data_sync.unsupported.mongo_index_prefix_length": "索引 {{name}} 使用前綴長度,MongoDB 目標暫不支援等價遷移", + "data_sync.unsupported.mysql_to_tdengine_schema_semantics": "源索引、外鍵、觸發器、唯一約束和自增語意尚未自動遷移到 TDengine", + "data_sync.unsupported.pglike_to_tdengine_schema_semantics": "源索引、外鍵、觸發器、唯一約束、identity 和 sequence 語意尚未自動遷移到 TDengine", + "data_sync.unsupported.tdengine_source_relational_semantics": "TDengine 索引、外鍵、觸發器、supertable、TTL 和其他時序語意尚未自動遷移", + "data_sync.unsupported.tdengine_target_missing_timestamp": "TDengine regular table 的第一列必須是 TIMESTAMP;目前來源表沒有可直接對應的時間欄位", + "data_sync.unsupported.tdengine_to_tdengine_regular_table_semantics": "來源 supertable、TAGS、TTL、retention policy 和索引語意尚未自動遷移到 TDengine regular table", + "data_sync.validation.query_mode_data_only": "SQL 結果集同步僅支援只同步資料", + "data_sync.validation.single_target_table_required": "SQL 結果集同步需要選擇一個目標表", + "data_sync.validation.source_query_required": "請輸入來源查詢 SQL", + "data_sync.validation.table_required": "請選擇至少一張表", + "data_sync.warning.mongo_field_mixed_bson_types": "欄位 {{field}} 存在多種 BSON 值型別,已降級為相容型別", + "data_sync.warning.mongo_index_type_normalized": "索引 {{name}} 型別={{type}} 將按一般索引遷移到 MongoDB", + "data_sync.warning.mongo_source_collection_index_read_failed": "讀取來源 MongoDB collection 索引失敗,已跳過索引遷移: {{detail}}", + "data_sync.warning.mongo_source_empty_sample_id_only": "來源 MongoDB collection 暫無樣本資料,僅按 `_id` 產生基礎主鍵列", + "data_sync.warning.mongo_source_primary_key_missing": "MongoDB 來源 collection 未推斷出穩定主鍵,目標表不會自動建立主鍵", + "data_sync.warning.mongo_source_table_index_read_failed": "讀取來源表索引失敗,已跳過索引遷移: {{detail}}", + "data_sync.warning.mongo_target_collection_existing_only_required": "目前策略要求目標 MongoDB collection 已存在,執行時不會自動建立", + "data_sync.warning.mongo_target_collection_weak_schema": "MongoDB 是弱結構目標,欄位結構以寫入 document 為準,不執行目標列檢查", + "data_sync.warning.target_exists_strategy_no_auto_create": "目前策略要求目標表已存在,執行時不會自動建立。", + "data_sync.warning.target_missing_columns": "目標表缺少 {{count}} 個欄位: {{columns}}", + "data_sync.warning.tdengine_source_existing_target_no_auto_add_columns": "TDengine 來源目前不會自動為已有目標表補齊欄位;請先確認目標結構", + "data_sync.warning.tdengine_source_mysql_type_fallback": "欄位 {{column}} 型別 {{type}} 沒有專用 MySQL 對應,已降級為 {{targetType}}", + "data_sync.warning.tdengine_source_pg_unsigned_overflow_safeguard": "欄位 {{column}} 型別 {{type}} 已對應為 {{targetType}},以避免 unsigned 溢出", + "data_sync.warning.tdengine_source_pglike_type_fallback": "欄位 {{column}} 型別 {{type}} 沒有專用 PG-like 對應,已降級為 {{targetType}}", + "data_sync.warning.tdengine_source_semantics_degraded": "TDengine 到關聯式目標目前僅遷移欄位和資料;supertable、TAG 關聯、retention policy 和其他時序語意可能降級或遺失", + "data_sync.warning.tdengine_source_tag_column_degraded": "欄位 {{column}} 是 TDengine TAG 列,將在關聯式目標中降級為一般欄位", + "data_sync.warning.tdengine_source_tag_column_mapped": "欄位 {{column}} 是 TDengine TAG 列,已對應為一般欄位", + "data_sync.warning.tdengine_target_auto_create_basic_table_only": "TDengine 目標 auto-create 目前僅建立基礎表;索引、外鍵、觸發器、supertable/TAGS/TTL 不會自動遷移", + "data_sync.warning.tdengine_target_auto_increment_not_migrated": "欄位 {{column}} 的自增語意不會遷移到 TDengine", + "data_sync.warning.tdengine_target_binary_type_fallback": "欄位 {{column}} 型別 {{type}} 已按字串語意降級為 {{targetType}}", + "data_sync.warning.tdengine_target_column_promoted_to_timestamp": "欄位 {{column}} 型別 {{type}} 已提升為第一個 TDengine TIMESTAMP 欄位", + "data_sync.warning.tdengine_target_empty_type_fallback": "欄位 {{column}} 型別為空,已降級為 {{targetType}}", + "data_sync.warning.tdengine_target_enum_type_fallback": "欄位 {{column}} enum 型別 {{type}} 已降級為 {{targetType}}", + "data_sync.warning.tdengine_target_existing_table_no_auto_add_columns": "TDengine 目標目前不會自動為已有目標表補齊欄位;請先確認目標結構", + "data_sync.warning.tdengine_target_fixedstring_length_parse_failed": "欄位 {{column}} 的 FixedString 長度無法解析,已降級為 {{targetType}}", + "data_sync.warning.tdengine_target_identity_not_migrated": "欄位 {{column}} 的自增/identity 語意不會遷移到 TDengine", + "data_sync.warning.tdengine_target_insert_only": "TDengine 目標目前僅支援 INSERT 寫入;update/delete 差異將在執行時被拒絕", + "data_sync.warning.tdengine_target_json_regular_table_fallback": "欄位 {{column}} 型別 {{type}} 在 TDengine regular table 中不保留 TAG 語意,已降級為 {{targetType}}", + "data_sync.warning.tdengine_target_json_tag_only_fallback": "欄位 {{column}} 型別 {{type}} 已降級為 {{targetType}},因為 TDengine JSON 僅適用於 TAG", + "data_sync.warning.tdengine_target_missing_time_column": "來源表沒有可對應的時間欄位,因此無法自動建表。繼續前請手動準備 TDengine 目標表和時間欄位。", + "data_sync.warning.tdengine_target_pk_constraint_not_migrated": "欄位 {{column}} 的主鍵語意不會作為關聯約束遷移到 TDengine", + "data_sync.warning.tdengine_target_same_db_type_no_mapping_fallback": "欄位 {{column}} 型別 {{type}} 沒有專用 TDengine 同庫對應,已降級為 {{targetType}}", + "data_sync.warning.tdengine_target_tag_column_degraded_to_regular": "欄位 {{column}} 是 TDengine TAG 列,遷移到 regular table 後將降級為一般欄位", + "data_sync.warning.tdengine_target_time_only_type_fallback": "欄位 {{column}} 型別 {{type}} 沒有穩定的 TDengine time-only 對應,已降級為 {{targetType}}", + "data_sync.warning.tdengine_target_timestamp_column_reordered": "TDengine 基礎表要求時間欄位在首列;欄位 {{column}} 已移動到第一位", + "data_sync.warning.tdengine_target_type_fallback": "欄位 {{column}} 型別 {{type}} 已降級為 {{targetType}}", + "data_sync.warning.tdengine_target_type_no_mapping_fallback": "欄位 {{column}} 型別 {{type}} 沒有專用 TDengine 對應,已降級為 {{targetType}}", + "data_sync.warning.tdengine_target_user_defined_type_fallback": "欄位 {{column}} 為使用者自定義型別,已降級為 {{targetType}}", + "data_viewer.message.connection_not_found": "找不到連線", + "data_viewer.message.duckdb_query_timeout": "DuckDB 查詢超過連線逾時時間,已中斷。請調高連線逾時時間,或縮小排序/篩選範圍後再試。", + "data_viewer.message.fetch_data_failed_detail": "取得資料失敗:{{detail}}", + "data_viewer.message.mongo_filter_invalid_detail": "Mongo 篩選條件無效:{{detail}}", + "data_viewer.message.mongo_filter_parse_failed": "解析失敗", + "data_viewer.message.query_failed": "查詢失敗", + "data_viewer.message.query_timeout": "查詢超過連線逾時時間,已中斷。請調高連線逾時時間,或縮小查詢範圍後再試。", + "data_viewer.message.result_not_ready": "目前結果集尚未就緒,請先執行一次載入", + "data_viewer.message.sort_buffer_retry_succeeded": "已自動提升排序緩衝並重試成功。", + "data_viewer.message.total_count_failed": "統計總數失敗", + "data_viewer.message.total_count_failed_detail": "統計總數失敗:{{detail}}", + "data_viewer.message.total_count_parse_failed": "統計結果解析失敗", "data_viewer.read_only.reason.duckdb_rowid_missing": "未偵測到主鍵、可用唯一索引或 DuckDB rowid,無法安全提交修改。", + "data_viewer.read_only.reason.index_metadata_unavailable": "無法載入唯一索引中繼資料,無法安全提交修改。", + "data_viewer.read_only.reason.metadata_unavailable": "無法載入主鍵/唯一索引中繼資料,無法安全提交修改。", + "data_viewer.read_only.reason.mongo_id_missing": "MongoDB 結果集中缺少 _id,無法安全提交修改。", + "data_viewer.read_only.reason.no_safe_locator": "未偵測到主鍵或可用唯一索引,無法安全提交修改。", + "data_viewer.read_only.reason.oracle_rowid_missing": "未偵測到主鍵或可用唯一索引,且結果集中缺少 Oracle ROWID,無法安全提交修改。", + "data_viewer.read_only.reason.primary_key_column_missing": "結果集中缺少主鍵欄位 {{columns}},無法安全提交修改。", + "data_viewer.read_only.warning.collection": "集合 {{target}} 保持唯讀:{{reason}}", + "data_viewer.read_only.warning.table": "表 {{target}} 保持唯讀:{{reason}}", + "data_viewer.sql_log.phase.complex_type_fallback_retry": "複雜型別降級重試", + "data_viewer.sql_log.phase.main_query": "主查詢", + "data_viewer.sql_log.phase.sort_buffer_retry": "重試({{size}} sort_buffer)", + "database.label": "資料庫", + "database.unnamed": "未命名資料庫", "db.backend.action.delete": "刪除", "db.backend.action.update": "更新", "db.backend.error.batch_insert_exec_required": "批次插入的執行函式不可為空", @@ -6979,6 +4485,41 @@ "definition_viewer.edit.comment_empty_definition": "目前物件定義為空,請補齊 {{name}} 的 DDL 後再執行", "definition_viewer.edit.comment_title": "修改{{object}}: {{name}}", "definition_viewer.edit.tab_title": "修改{{object}}: {{name}}", + "definition_viewer.editor.event_definition_not_found": "找不到事件定義", + "definition_viewer.editor.event_fragment_fallback.header": "目前資料來源未返回完整 CREATE EVENT 語句,已返回事件定義片段", + "definition_viewer.editor.metadata_fallback.header": "目前資料來源未返回可執行的定義文字,已返回中繼資料", + "definition_viewer.editor.metadata_fallback.name_label": "名稱", + "definition_viewer.editor.metadata_fallback.type_label": "類型", + "definition_viewer.editor.object_definition_not_found": "找不到{{object}}定義", + "definition_viewer.editor.routine_definition_not_found": "找不到函式/預存程序定義", + "definition_viewer.editor.sphinx.compat_queries_hint": "已執行多組相容查詢,可能是版本能力限制或物件類型不支援。", + "definition_viewer.editor.sphinx.empty_result": "目前 Sphinx 實例{{version}}未返回{{object}}定義。", + "definition_viewer.editor.sphinx.failed_message_label": "返回失敗訊息", + "definition_viewer.editor.sphinx.failed_message_unknown": "返回失敗資訊:未知錯誤", + "definition_viewer.editor.sphinx.unsupported_query": "目前 Sphinx 實例{{version}}不支援查詢{{object}}定義。", + "definition_viewer.editor.sphinx.version_suffix": "(版本: {{version}})", + "definition_viewer.editor.unsupported_event_definition": "暫不支援此資料庫類型的事件定義查看", + "definition_viewer.editor.unsupported_object_definition": "暫不支援此物件定義查看", + "definition_viewer.editor.unsupported_routine_definition": "暫不支援此資料庫類型的函式/預存程序定義查看", + "definition_viewer.editor.unsupported_sqlite_routine_definition": "SQLite 不支援函式/預存程序定義管理", + "definition_viewer.editor.unsupported_view_definition": "暫不支援此資料庫類型的檢視定義查看", + "definition_viewer.editor.view_definition_not_found": "找不到檢視定義", + "definition_viewer.error.connection_not_found": "找不到資料庫連線", + "definition_viewer.error.event_name_empty": "事件名稱為空", + "definition_viewer.error.load_failed": "載入失敗", + "definition_viewer.error.query_failed": "查詢定義失敗", + "definition_viewer.error.query_failed_detail": "查詢定義失敗:{{detail}}", + "definition_viewer.error.routine_name_empty": "函式/預存程序名稱為空", + "definition_viewer.error.view_name_empty": "檢視名稱為空", + "definition_viewer.field.database": "資料庫", + "definition_viewer.field.type": "類型", + "definition_viewer.loading.event_definition": "載入事件定義...", + "definition_viewer.loading.routine_definition": "載入函式/預存程序定義...", + "definition_viewer.loading.view_definition": "載入檢視定義...", + "definition_viewer.object.event": "事件", + "definition_viewer.object.materialized_view": "物化檢視", + "definition_viewer.object.routine": "函式/預存程序", + "definition_viewer.object.view": "檢視", "definition_viewer.warning.refresh_latest_failed": "重新整理最新定義失敗", "dev.perf_data_grid.columns": "欄數", "dev.perf_data_grid.density.comfortable": "標準", @@ -6993,41 +4534,106 @@ "dev.perf_data_grid.ui_version.legacy_short": "舊版", "dev.perf_data_grid.ui_version.v2": "新版 UI", "dev.perf_data_grid.ui_version.v2_short": "新版", + "driver_manager.action.close": "關閉", + "driver_manager.action.import_directory": "匯入驅動目錄", + "driver_manager.action.import_package": "匯入驅動包", + "driver_manager.action.install_enable": "安裝並啟用", + "driver_manager.action.logs": "日誌", + "driver_manager.action.network_check": "網路檢測", + "driver_manager.action.open_directory": "開啟驅動目錄", + "driver_manager.action.open_global_proxy_settings": "開啟全域代理設定", + "driver_manager.action.refresh": "重新整理", + "driver_manager.action.remove": "移除", "driver_manager.action.switch_version": "切換版本", + "driver_manager.backend.dialog.select_download_directory": "選擇驅動下載目錄", + "driver_manager.backend.dialog.select_package_directory": "選擇驅動包目錄", + "driver_manager.backend.dialog.select_package_file": "選擇驅動包檔案(非 JDBC Jar)", + "driver_manager.backend.driver_fallback_name": "驅動", "driver_manager.backend.error.agent_hash_failed": "計算驅動代理摘要失敗:{{detail}}", "driver_manager.backend.error.agent_metadata_unavailable": "{{name}} 驅動代理版本中繼資料不可用,請安裝目前版本對應的 driver-agent:{{detail}}", "driver_manager.backend.error.agent_path_occupied_by_directory": "{{name}} 驅動代理路徑被目錄占用:{{path}}", "driver_manager.backend.error.agent_revision_mismatch": "{{name}} 驅動代理 revision 不相符(已安裝:{{actual}},目前需要:{{expected}}),請安裝目前版本對應的 driver-agent", "driver_manager.backend.error.agent_revision_mismatch_empty_actual": "{{name}} 驅動代理 revision 不相符(已安裝:空,目前需要:{{expected}}),請安裝目前版本對應的 driver-agent", + "driver_manager.backend.error.api_url_empty": "API 地址為空", + "driver_manager.backend.error.asset_name_empty": "驅動資產名稱為空", + "driver_manager.backend.error.builtin_download_not_required": "內建驅動不需要下載擴充包", + "driver_manager.backend.error.builtin_install_not_required": "內建驅動不需要安裝擴充包", + "driver_manager.backend.error.builtin_package_not_required": "內建驅動沒有安裝包", + "driver_manager.backend.error.builtin_remove_not_allowed": "內建驅動不可移除", + "driver_manager.backend.error.builtin_version_not_required": "內建驅動不需要選擇版本", + "driver_manager.backend.error.bundle_download_failed": "下載驅動總包失敗:{{detail}}", "driver_manager.backend.error.bundle_entry_missing": "驅動總包內未找到 {{name}}(期望路徑 {{path}})", + "driver_manager.backend.error.bundle_index_asset_missing": "未找到驅動總包索引資產", + "driver_manager.backend.error.bundle_index_empty": "驅動總包索引為空", + "driver_manager.backend.error.bundle_index_fetch_failed": "拉取驅動總包索引失敗:{{detail}}", + "driver_manager.backend.error.bundle_index_parse_failed": "解析驅動總包索引失敗:{{detail}}", + "driver_manager.backend.error.bundle_url_empty": "驅動總包下載地址為空", "driver_manager.backend.error.bundled_agent_hash_failed": "計算預置 {{name}} 驅動代理摘要失敗:{{detail}}", + "driver_manager.backend.error.cache_key_empty": "快取 key 為空", "driver_manager.backend.error.chmod_agent_failed": "設定驅動代理權限失敗:{{detail}}", "driver_manager.backend.error.close_agent_file_failed": "關閉驅動代理檔案失敗:{{detail}}", "driver_manager.backend.error.copy_bundled_agent_failed": "複製預置 {{name}} 驅動代理失敗:{{detail}}", "driver_manager.backend.error.copy_runtime_dependency_entry_failed": "複製執行階段依賴 {{name}} 失敗:{{detail}}", "driver_manager.backend.error.copy_runtime_dependency_failed": "複製 {{name}} 執行階段依賴失敗:{{detail}}", "driver_manager.backend.error.create_agent_temp_file_failed": "建立驅動代理暫存檔失敗:{{detail}}", + "driver_manager.backend.error.create_directory_failed": "建立驅動目錄失敗:{{detail}}", "driver_manager.backend.error.create_named_directory_failed": "建立 {{name}} 驅動目錄失敗:{{detail}}", + "driver_manager.backend.error.download_failed": "下載失敗:{{detail}}", + "driver_manager.backend.error.download_url_empty": "下載地址為空", + "driver_manager.backend.error.driver_type_empty": "驅動類型為空", + "driver_manager.backend.error.driver_version_list_fetch_failed": "拉取驅動版本列表失敗:{{detail}}", + "driver_manager.backend.error.driver_version_list_parse_failed": "解析驅動版本列表失敗:{{detail}}", "driver_manager.backend.error.driver_version_unsupported": "{{name}} 版本 {{version}} 目前不受支援", "driver_manager.backend.error.extract_runtime_dependency_failed": "解壓縮執行階段依賴 {{name}} 失敗:{{detail}}", + "driver_manager.backend.error.file_manifest_url_invalid": "無效的檔案驅動清單地址", + "driver_manager.backend.error.file_path_empty": "檔案路徑為空", "driver_manager.backend.error.go_not_found_prebuilt_missing": "目前環境未安裝 Go,且未找到可用的 {{name}} 預編譯代理包", "driver_manager.backend.error.import_local_agent_failed": "匯入本機驅動代理失敗:{{detail}}", "driver_manager.backend.error.import_local_agent_runtime_failed": "匯入本機驅動代理執行階段依賴失敗:{{detail}}", "driver_manager.backend.error.install_prebuilt_package_failed": "安裝預編譯驅動包失敗:{{detail}}", "driver_manager.backend.error.local_directory_entry_missing": "目錄中未找到 {{name}} 代理檔案(優先路徑 {{path}},候選檔名 {{assetCandidates}} / {{baseCandidates}})", "driver_manager.backend.error.local_directory_not_directory": "本機驅動目錄路徑不是目錄:{{path}}", + "driver_manager.backend.error.local_directory_path_empty": "本機驅動目錄路徑為空", "driver_manager.backend.error.local_directory_scan_limit": "本機驅動目錄項目過多(超過 {{max}}),請縮小目錄範圍或直接選擇 zip/單檔", + "driver_manager.backend.error.local_manifest_url_invalid": "無效的本機驅動清單地址", "driver_manager.backend.error.local_package_entry_missing": "本機驅動包內未找到 {{name}} 代理檔案(期望路徑 {{path}})", + "driver_manager.backend.error.local_package_path_empty": "本機驅動包路徑為空", + "driver_manager.backend.error.manifest_fetch_failed": "拉取驅動清單失敗:{{detail}}", + "driver_manager.backend.error.manifest_parse_failed": "解析驅動清單失敗:{{detail}}", + "driver_manager.backend.error.manifest_scheme_unsupported": "不支援的驅動清單地址協定:{{scheme}}", + "driver_manager.backend.error.manifest_too_large": "驅動清單超過大小限制", + "driver_manager.backend.error.manifest_url_empty": "驅動清單地址為空", "driver_manager.backend.error.metadata_file_write_failed": "寫入驅動中繼資料檔案失敗:{{detail}}", "driver_manager.backend.error.metadata_payload_encode_failed": "序列化驅動中繼資料失敗:{{detail}}", + "driver_manager.backend.error.module_path_empty": "模組路徑為空", + "driver_manager.backend.error.module_version_list_empty": "模組版本列表為空", + "driver_manager.backend.error.module_version_list_fetch_failed": "拉取模組版本列表失敗:{{detail}}", + "driver_manager.backend.error.module_version_list_read_failed": "讀取模組版本列表失敗:{{detail}}", + "driver_manager.backend.error.mongo_version_unsupported": "MongoDB 版本 {{version}} 目前不受支援;僅支援 1.17.x 和 2.x", "driver_manager.backend.error.named_agent_hash_failed": "計算 {{name}} 驅動代理摘要失敗:{{detail}}", "driver_manager.backend.error.named_chmod_agent_failed": "設定 {{name}} 驅動代理權限失敗:{{detail}}", + "driver_manager.backend.error.no_driver_versions": "未找到可用驅動版本", + "driver_manager.backend.error.open_bundle_failed": "開啟驅動總包失敗:{{detail}}", + "driver_manager.backend.error.open_directory_failed": "開啟驅動目錄失敗:{{detail}}", + "driver_manager.backend.error.open_directory_unsupported": "目前平台不支援開啟目錄:{{platform}}", + "driver_manager.backend.error.open_local_package_failed": "開啟本機驅動包失敗:{{detail}}", + "driver_manager.backend.error.optional_go_only": "此處僅支援純 Go 可選驅動的安裝與啟用", + "driver_manager.backend.error.package_size_unsupported": "此驅動不支援查詢安裝包大小", + "driver_manager.backend.error.prebuilt_downloads_failed": "預編譯包下載失敗:{{detail}}", + "driver_manager.backend.error.read_bundle_entry_failed": "讀取驅動總包項目失敗:{{detail}}", + "driver_manager.backend.error.read_local_directory_failed": "讀取本機驅動目錄失敗:{{detail}}", + "driver_manager.backend.error.read_local_package_entry_failed": "讀取本機驅動包項目失敗:{{detail}}", + "driver_manager.backend.error.read_local_package_failed": "讀取本機驅動包失敗:{{detail}}", + "driver_manager.backend.error.release_empty": "Release 為空", + "driver_manager.backend.error.release_info_fetch_failed": "拉取 Release 資訊失敗:{{detail}}", "driver_manager.backend.error.remove_installed_agent_failed": "清理已安裝的 {{name}} 驅動代理失敗:{{detail}}", + "driver_manager.backend.error.remove_package_failed": "移除驅動包失敗:{{detail}}", "driver_manager.backend.error.replace_agent_failed": "替換驅動代理失敗:{{detail}}", "driver_manager.backend.error.runtime_dependency_directory_empty": "執行階段依賴目錄為空", "driver_manager.backend.error.runtime_dependency_entry_missing": "驅動包缺少執行階段依賴:{{name}}", "driver_manager.backend.error.runtime_dependency_required": "{{name}} 目前平台需要隨包提供執行階段依賴({{files}}),不能安裝單檔代理;請使用驅動總包、驅動專屬 zip 或本機原始碼建置", "driver_manager.backend.error.runtime_dependency_target_directory_empty": "執行階段依賴目標目錄為空", + "driver_manager.backend.error.scan_local_directory_failed": "掃描本機驅動目錄失敗:{{detail}}", "driver_manager.backend.error.source_build_command_failed": "建置 {{name}} 驅動代理失敗:{{detail}},輸出:{{output}}", "driver_manager.backend.error.source_build_duckdb_windows_cgo_toolchain_prepare_failed": "準備 DuckDB Windows CGO 編譯器失敗:{{detail}}", "driver_manager.backend.error.source_build_duckdb_windows_dlltool_resolve_failed": "定位 DuckDB Windows dlltool 失敗:{{detail}}", @@ -7036,6 +4642,7 @@ "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found": "找不到可用的 gcc.exe/g++.exe;{{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_gcc_not_found_with_checked": "找不到可用的 gcc.exe/g++.exe,已檢查:{{checked}};{{hint}}", "driver_manager.backend.error.source_build_duckdb_windows_toolchain_install_hint": "請先安裝 MSYS2 UCRT64 工具鏈:winget install --id MSYS2.MSYS2 -e;然後執行 C:\\msys64\\usr\\bin\\bash.exe -lc \"pacman -S --needed --noconfirm mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-binutils\"", + "driver_manager.backend.error.source_build_failed": "本機原始碼建置失敗:{{detail}}", "driver_manager.backend.error.source_build_go_mod_read_failed": "讀取 go.mod 失敗:{{detail}}", "driver_manager.backend.error.source_build_module_dependency_missing": "未在 go.mod 中找到驅動相依:{{modulePath}}", "driver_manager.backend.error.source_build_module_or_version_empty": "驅動模組或版本為空", @@ -7047,53 +4654,297 @@ "driver_manager.backend.error.source_build_timeout": "建置 {{name}} 驅動代理逾時(超過 {{timeout}}),請優先使用預編譯驅動包或本機驅動包匯入", "driver_manager.backend.error.source_build_workdir_unavailable": "取得目前目錄失敗:{{detail}}", "driver_manager.backend.error.sync_agent_failed": "落盤驅動代理失敗:{{detail}}", + "driver_manager.backend.error.tag_empty": "Tag 為空", + "driver_manager.backend.error.unknown": "未知錯誤", + "driver_manager.backend.error.unsupported_driver_type": "不支援的驅動類型", + "driver_manager.backend.error.version_empty": "版本號為空", "driver_manager.backend.error.write_agent_failed": "寫入驅動代理失敗:{{detail}}", "driver_manager.backend.error.zip_entry_empty": "zip 項目為空", + "driver_manager.backend.message.download_failed_detail": "驅動下載安裝失敗:{{detail}}", + "driver_manager.backend.message.driver_install_success": "驅動安裝成功", + "driver_manager.backend.message.jdbc_jar_unsupported": "目前驅動管理不支援直接匯入 JDBC Jar。GoNavi 使用 Go 驅動與可選 driver-agent;請改用驅動包或驅動目錄。如需連線到 Kingbase,請優先使用 Kingbase 連線類型,或在自訂連線中填寫 kingbase / kingbase8。", + "driver_manager.backend.message.local_import_failed_detail": "匯入本機驅動包失敗:{{detail}}", + "driver_manager.backend.message.log_hint": "(詳細日誌:{{path}})", + "driver_manager.backend.message.metadata_write_failed_detail": "寫入驅動元資料失敗:{{detail}}", + "driver_manager.backend.message.opened_directory": "已開啟驅動目錄:{{path}}", + "driver_manager.backend.message.package_removed": "驅動包已移除", + "driver_manager.backend.message.runtime_directory_configured": "驅動執行階段目錄已生效", + "driver_manager.backend.message.unsupported_builtin_manifest_url": "不支援的內建驅動清單地址:{{url}}", + "driver_manager.backend.network.error.probe_host_missing": "探測 URL 缺少主機", + "driver_manager.backend.network.error.probe_url_empty": "探測 URL 為空", "driver_manager.backend.network.error.timeout": "網路連線逾時", + "driver_manager.backend.network.probe.github_driver_release": "GitHub 驅動發布", + "driver_manager.backend.network.probe.github_release_asset_domain": "GitHub Release 資產網域", + "driver_manager.backend.network.probe.go_module_proxy": "Go 模組代理", + "driver_manager.backend.network.summary.download_chain_unreachable": "GitHub API 可達,但驅動下載鏈路不可達。請優先在 GoNavi 啟用全域代理,並在代理規則中放行 github.com、api.github.com、release-assets.githubusercontent.com、objects.githubusercontent.com、raw.githubusercontent.com;若仍失敗,再考慮開啟 TUN 模式。", + "driver_manager.backend.package_size.built_in": "內建", + "driver_manager.backend.package_size.to_be_published": "待發布", + "driver_manager.backend.progress.fallback.bundle_available": "直鏈不可用,轉入驅動總包兜底({{name}},剩餘 {{bundle}} 個總包來源)", + "driver_manager.backend.progress.fallback.direct_to_bundle": "預編譯直鏈未命中,轉入驅動總包兜底({{name}},剩餘 {{bundle}} 個總包來源)", + "driver_manager.backend.progress.fallback.explicit_skip_bundle": "預編譯直鏈未命中;目前版本僅允許明確資產,略過驅動總包({{name}})", + "driver_manager.backend.progress.fallback.source_build": "發布資產未命中,準備回退到本機原始碼建置({{name}})", + "driver_manager.backend.progress.plan.bundle_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});未提供預編譯直鏈,直接嘗試 {{bundle}} 個驅動總包來源", + "driver_manager.backend.progress.plan.direct_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試 {{direct}} 個預編譯直鏈", + "driver_manager.backend.progress.plan.direct_then_bundle": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試 {{direct}} 個預編譯直鏈,失敗後轉入 {{bundle}} 個驅動總包來源", + "driver_manager.backend.progress.plan.explicit_direct": "準備安裝 {{name}} 驅動代理(版本 {{version}});僅允許明確版本資產,先嘗試 {{direct}} 個預編譯直鏈", + "driver_manager.backend.progress.plan.source_fallback": "準備安裝 {{name}} 驅動代理(版本 {{version}});未命中發布資產時將回退到本機原始碼建置", + "driver_manager.backend.progress.plan.source_first": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試本機原始碼建置,失敗後繼續下載兜底", + "driver_manager.backend.progress.plan.source_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});目前版本僅允許本機原始碼建置", + "driver_manager.backend.status.affected_connections": "影響 {{count}} 個已儲存連線", + "driver_manager.backend.status.agent_arch_incompatible_detail": "{{name}} 驅動代理架構不相容:檔案={{file}},目前程序={{process}}。請在驅動管理中重新安裝啟用", + "driver_manager.backend.status.agent_missing": "{{name}} 驅動代理缺失,請在驅動管理中重新安裝啟用", + "driver_manager.backend.status.agent_path_failed": "{{name}} 驅動代理路徑解析失敗,請在驅動管理中重新安裝啟用", "driver_manager.backend.status.agent_revision_update_detail": "原因:目前 GoNavi 版本要求更新後的 {{name}} driver-agent(revision: {{expected}})。影響:driver-agent 是獨立二進位,不會隨主程式自動更新;若不重新安裝,會繼續使用舊 agent 邏輯,驅動側已修復或優化的行為不會生效,舊版本問題也可能持續出現。強烈建議重新安裝對應 driver-agent", "driver_manager.backend.status.agent_revision_update_detail_with_actual": "原因:目前 GoNavi 版本要求更新後的 {{name}} driver-agent(revision: {{expected}})。影響:driver-agent 是獨立二進位,不會隨主程式自動更新;若不重新安裝,會繼續使用舊 agent 邏輯,驅動側已修復或優化的行為不會生效,舊版本問題也可能持續出現。強烈建議重新安裝對應 driver-agent(已安裝標記:{{actual}},目前需要:{{expected}})", + "driver_manager.backend.status.agent_unavailable_reinstall": "{{name}} 驅動代理不可用:{{detail}}。請在驅動管理中重新安裝啟用", + "driver_manager.backend.status.built_in_available": "內建驅動已就緒,可直接連線", + "driver_manager.backend.status.expected_revision": "目前需要 revision {{revision}}。", + "driver_manager.backend.status.installed_pending": "驅動已安裝,等待生效", + "driver_manager.backend.status.installed_pending_with_version": "驅動已安裝(版本:{{version}}),等待生效", + "driver_manager.backend.status.installed_revision": "已安裝 revision {{revision}}。", "driver_manager.backend.status.mongodb_compatibility_update_detail": "原因:目前建議的 MongoDB 相容驅動版本為 {{recommended}},已安裝版本為 {{installed}}。影響:MongoDB 2.x driver-agent 使用官方 v2 驅動,要求服務端 MongoDB 4.2+;連線到 MongoDB 4.0 時可能出現 wire version 7 不相容。強烈建議重新安裝對應 driver-agent", + "driver_manager.backend.status.needs_update": "需要重新安裝以套用驅動側更新。", + "driver_manager.backend.status.optional_disabled": "{{name}} 純 Go 驅動未啟用,請先在驅動管理中安裝並啟用", + "driver_manager.backend.status.optional_disabled_generic": "未啟用", + "driver_manager.backend.status.optional_disabled_with_version": "未啟用(版本:{{version}})", + "driver_manager.backend.status.optional_enabled": "純 Go 驅動已啟用,可直接連線", + "driver_manager.backend.status.slim_build_required": "{{name}} 未包含在目前 slim build 中;請安裝 Full 版以使用此驅動", + "driver_manager.backend.status.unrecognized_driver_type": "未識別的資料來源類型", + "driver_manager.backend.version.latest_suffix": "(最新)", + "driver_manager.backend.version.recommended_suffix": "(推薦)", + "driver_manager.backend.version.unlabeled": "未標註版本", + "driver_manager.column.actions": "操作", + "driver_manager.column.data_source": "資料來源", + "driver_manager.column.package_size": "安裝包大小", + "driver_manager.column.progress": "安裝進度", + "driver_manager.column.status": "狀態", + "driver_manager.column.version": "驅動版本", + "driver_manager.description.install_required": "除 MySQL / Redis / Oracle / PostgreSQL 外,其他資料來源需先安裝並啟用後才能連線。", + "driver_manager.directory_info.details_label": "查看驅動目錄與重複使用說明", + "driver_manager.directory_info.log_file": "執行日誌檔案:{{path}}", + "driver_manager.directory_info.reuse_help": "自動下載和手動匯入的驅動都會儲存在以下目錄;後續版本升級可重複使用已下載驅動。", + "driver_manager.directory_info.root_dir": "驅動根目錄:{{path}}", + "driver_manager.directory_info.title": "驅動目錄與重複使用說明", + "driver_manager.empty.default": "暫無驅動資料", + "driver_manager.empty.search": "未找到符合「{{keyword}}」的驅動", + "driver_manager.filter_summary.match": "符合 {{filtered}} / {{total}}", + "driver_manager.filter_summary.total": "共 {{total}} 個驅動", + "driver_manager.import.directory_help": "如果應用內下載鏈路失敗,可先手動下載驅動包到此目錄,再使用「匯入驅動包」或「匯入驅動目錄」完成安裝。", + "driver_manager.import.single_file_help": "行內「匯入驅動包」僅用於單個驅動檔案/總包(如 `mariadb-driver-agent`、`mariadb-driver-agent.exe`、`GoNavi-DriverAgents.zip`),不支援直接匯入 JDBC Jar;批次匯入請使用上方「匯入驅動目錄」。", + "driver_manager.local_source.directory": "目錄", + "driver_manager.local_source.file": "檔案", + "driver_manager.log_modal.empty": "目前驅動暫無操作日誌。", + "driver_manager.log_modal.executable_path": "驅動可執行檔:{{path}}", + "driver_manager.log_modal.install_dir": "安裝目錄:{{path}}", + "driver_manager.log_modal.title": "驅動日誌 - {{name}}", + "driver_manager.log.done_auto_install": "自動安裝完成{{version}}", + "driver_manager.log.done_local_import": "本機匯入安裝完成{{version}}", + "driver_manager.log.done_remove": "驅動移除完成", + "driver_manager.log.force_overwrite_reinstall": "已啟用覆寫已安裝模式,將執行重新匯入", + "driver_manager.log.progress_line": "【{{status}}】{{message}}({{percent}}%)", + "driver_manager.log.skip_installed_dedupe": "已偵測到驅動已安裝,目錄匯入去重略過", + "driver_manager.log.skip_slim_build": "目前發行包為精簡構建,已略過目錄匯入", + "driver_manager.log.start_auto_install": "開始自動安裝", + "driver_manager.log.start_local_import": "開始本機匯入{{version}}({{source}}):{{path}}", + "driver_manager.log.start_remove": "開始移除驅動", + "driver_manager.message.directory_import_completed": "目錄匯入完成{{mode}}:成功 {{success}}{{skip}}", + "driver_manager.message.directory_import_completed_with_failure": "目錄匯入完成{{mode}}:成功 {{success}},失敗 {{failed}}{{skip}}", + "driver_manager.message.directory_import_failed": "目錄匯入失敗{{mode}}:失敗 {{failed}}{{skip}}", + "driver_manager.message.install_failed": "安裝 {{name}} 失敗", + "driver_manager.message.install_failed_detail": "安裝 {{name}} 失敗:{{detail}}", "driver_manager.message.install_failed_fallback": "安裝 {{name}} 失敗", + "driver_manager.message.install_start": "開始安裝", + "driver_manager.message.install_success": "{{name}}{{version}} 已安裝並啟用", "driver_manager.message.install_watchdog_timeout": "安裝 {{name}} 超過 {{minutes}} 分鐘仍未完成。背景工作可能仍在下載或建置,請稍後重新整理狀態;若多次出現,請檢查代理或改用本機驅動包匯入。", + "driver_manager.message.load_status_failed": "取得驅動狀態失敗", + "driver_manager.message.load_status_failed_detail": "取得驅動狀態失敗:{{detail}}", + "driver_manager.message.load_version_failed": "{{name}} 版本清單載入失敗", + "driver_manager.message.load_version_failed_detail": "載入 {{name}} 版本清單失敗:{{detail}}", + "driver_manager.message.local_directory_required": "未選擇有效的驅動包目錄", + "driver_manager.message.local_file_required": "未選擇有效的驅動包檔案", + "driver_manager.message.local_import_failed": "匯入 {{name}} 本機驅動包失敗", + "driver_manager.message.local_import_failed_detail": "匯入 {{name}} 本機驅動包失敗:{{detail}}", + "driver_manager.message.local_import_start": "開始匯入本機驅動包", + "driver_manager.message.local_import_success": "{{name}}{{version}} 本機驅動包已安裝並啟用", + "driver_manager.message.local_path_required": "未選擇有效的本機匯入{{source}}", + "driver_manager.message.network_check_completed": "驅動網路檢測已完成", + "driver_manager.message.network_check_failed": "驅動網路檢測失敗", + "driver_manager.message.network_check_failed_detail": "驅動網路檢測失敗:{{detail}}", + "driver_manager.message.no_external_drivers_to_import": "目前沒有可匯入的外部驅動", + "driver_manager.message.open_directory_failed": "開啟驅動目錄失敗", + "driver_manager.message.open_directory_failed_detail": "開啟驅動目錄失敗:{{detail}}", + "driver_manager.message.overwrite_suffix": "(覆寫已安裝)", + "driver_manager.message.remove_failed": "移除 {{name}} 失敗", + "driver_manager.message.remove_failed_detail": "移除 {{name}} 失敗:{{detail}}", + "driver_manager.message.remove_success": "{{name}} 已移除", + "driver_manager.message.select_local_directory_failed": "選擇本機驅動包目錄失敗", + "driver_manager.message.select_local_directory_failed_detail": "選擇本機驅動包目錄失敗:{{detail}}", + "driver_manager.message.select_local_file_failed": "選擇本機驅動包檔案失敗", + "driver_manager.message.select_local_file_failed_detail": "選擇本機驅動包檔案失敗:{{detail}}", + "driver_manager.message.skip_suffix": ",{{items}}", + "driver_manager.message.skip.dedupe": "去重略過 {{count}}", + "driver_manager.message.skip.slim": "精簡版略過 {{count}}", + "driver_manager.network.alert.download_chain_unreachable": "重要提醒:驅動下載鏈路網域不可達", + "driver_manager.network.alert.download_network_unreachable": "重要提醒:驅動下載網路不可達", + "driver_manager.network.chain_alert.allow_hosts": "若仍失敗,請在代理規則放行:{{hosts}};若仍無法調整規則,再考慮開啟 TUN 模式。", + "driver_manager.network.chain_alert.description": "目前可能可以開啟 GitHub 頁面,但驅動包下載會跳轉到資產網域。請優先在 GoNavi 頂部「代理」中啟用全域代理(填寫代理應用的本機地址和連接埠)。", + "driver_manager.network.checking": "正在檢測驅動下載網路...", + "driver_manager.network.details_label": "查看網路檢測明細", + "driver_manager.network.error_value": ",{{detail}}", + "driver_manager.network.github_latency": "代理鏈路到 GitHub 的連通性延遲:{{status}}{{latency}}{{detail}}", + "driver_manager.network.latency_value": ",{{latency}}ms", + "driver_manager.network.no_proxy_env": "未偵測到系統代理環境變數。", + "driver_manager.network.no_result": "暫無結果", + "driver_manager.network.not_checked": "尚未完成網路檢測", + "driver_manager.network.proxy_env_detected": "偵測到代理環境變數:{{keys}}", + "driver_manager.network.reachable": "可達", + "driver_manager.network.summary.download_chain_unreachable": "GitHub API 可達,但驅動下載資產網域不可達。", + "driver_manager.network.summary.proxy_recommended": "偵測到部分驅動下載地址不可達,建議先設定 HTTP/HTTPS/SOCKS5 代理後再安裝驅動。", + "driver_manager.network.summary.reachable": "驅動下載網路檢測通過,可直接安裝驅動。", + "driver_manager.network.summary.reachable_with_proxy": "驅動下載網路已透過目前代理連通。", + "driver_manager.network.summary.unreachable": "偵測到部分驅動下載地址不可達,請檢查網路後重試。", + "driver_manager.network.summary.unreachable_proxy_configured": "偵測到部分驅動下載地址不可達,請確認已設定的代理有效後重試。", + "driver_manager.network.unreachable": "不可達", + "driver_manager.option.force_overwrite_installed": "覆寫已安裝", "driver_manager.package_size.built_in": "內建", "driver_manager.package_size.pending_release": "待發布", + "driver_manager.progress.agent_install_done": "{{name}} 驅動代理安裝完成", + "driver_manager.progress.agent_install_start": "開始安裝 {{name}} 驅動代理", + "driver_manager.progress.backend_detail": "後端詳情:{{detail}}", + "driver_manager.progress.backend_empty": "後端未返回進度說明", + "driver_manager.progress.dev_build_fallback": "未命中預編譯包,嘗試開發態本機建置", + "driver_manager.progress.download_bundle": "下載 {{name}} 驅動總包", + "driver_manager.progress.download_prebuilt_agent": "下載預編譯 {{name}} 驅動代理", "driver_manager.progress.download_prebuilt_package": "下載預編譯 {{name}} 驅動包", + "driver_manager.progress.extract_agent_from_bundle": "從驅動總包提取 {{name}} 代理", + "driver_manager.progress.fallback.bundle_available": "直鏈不可用,轉入驅動總包兜底({{name}},剩餘 {{bundle}} 個總包來源)", + "driver_manager.progress.fallback.direct_to_bundle": "預編譯直鏈未命中,轉入驅動總包兜底({{name}},剩餘 {{bundle}} 個總包來源)", + "driver_manager.progress.fallback.explicit_skip_bundle": "預編譯直鏈未命中;目前版本僅允許明確資產,略過驅動總包({{name}})", + "driver_manager.progress.fallback.source_build": "發布資產未命中,準備回退到本機原始碼建置({{name}})", + "driver_manager.progress.install_start": "開始安裝", + "driver_manager.progress.local_package_done": "本機驅動包匯入完成", + "driver_manager.progress.local_package_start": "開始安裝本機驅動包", + "driver_manager.progress.metadata_write": "寫入驅動元資料", + "driver_manager.progress.plan.bundle_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});未提供預編譯直鏈,直接嘗試 {{bundle}} 個驅動總包來源", + "driver_manager.progress.plan.direct_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試 {{direct}} 個預編譯直鏈", + "driver_manager.progress.plan.direct_then_bundle": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試 {{direct}} 個預編譯直鏈,失敗後轉入 {{bundle}} 個驅動總包來源", + "driver_manager.progress.plan.explicit_direct": "準備安裝 {{name}} 驅動代理(版本 {{version}});僅允許明確版本資產,先嘗試 {{direct}} 個預編譯直鏈", "driver_manager.progress.plan.require_source_first": "準備安裝 {{name}} 驅動代理(版本 {{version}});開發態使用本機原始碼建置,失敗後不使用發行包兜底", + "driver_manager.progress.plan.source_fallback": "準備安裝 {{name}} 驅動代理(版本 {{version}});未命中發布資產時將回退到本機原始碼建置", + "driver_manager.progress.plan.source_first": "準備安裝 {{name}} 驅動代理(版本 {{version}});先嘗試本機原始碼建置,失敗後繼續下載兜底", + "driver_manager.progress.plan.source_only": "準備安裝 {{name}} 驅動代理(版本 {{version}});目前版本僅允許本機原始碼建置", + "driver_manager.progress.pure_go_enabled": "安裝完成,純 Go 驅動已啟用", + "driver_manager.progress.source_build_preferred": "優先使用本機原始碼建置 {{name}} 驅動代理", + "driver_manager.progress.status.done": "完成", + "driver_manager.progress.status.downloading": "下載中", + "driver_manager.progress.status.error": "錯誤", + "driver_manager.progress.status.start": "開始", + "driver_manager.progress.status.unknown": "未知", + "driver_manager.progress.unzip_agent": "解壓縮 {{name}} 驅動代理", "driver_manager.progress.wait_bundle": "等待 {{name}} 驅動總包下載完成", + "driver_manager.punctuation.list_separator": "、", + "driver_manager.search.built_in": "內建", + "driver_manager.search.external": "外部", + "driver_manager.search.placeholder": "搜尋驅動名稱/類型(如 DuckDB、clickhouse)", + "driver_manager.status.built_in_available": "內建可用", + "driver_manager.status.calculating": "計算中...", + "driver_manager.status.disabled": "未啟用", + "driver_manager.status.enabled": "已啟用", + "driver_manager.status.full_required": "需 Full 版", + "driver_manager.status.installed": "已安裝", + "driver_manager.status.installing_percent": "安裝中 {{percent}}%", + "driver_manager.title": "驅動管理", "driver_manager.version.current_fallback": "目前版本", + "driver_manager.version.default": "預設版本", + "driver_manager.version.group.other": "其他", + "driver_manager.version.group.year": "{{year}} 年", + "driver_manager.version.inline_suffix": "({{version}})", "driver_manager.version.installed": "已安裝{{suffix}}", + "driver_manager.version.installed_locked": "已安裝(移除後可更換)", + "driver_manager.version.installed_locked_with_version": "{{version}}(已安裝,移除後可更換)", "driver_manager.version.installed_with_version": "{{version}}(已安裝{{suffix}})", "driver_manager.version.latest_suffix": "(最新)", + "driver_manager.version.mongodb_hint": "目前僅支援 MongoDB 1.17.x 和 2.x;更舊的 1.x 暫不提供安裝。", "driver_manager.version.needs_reinstall_suffix": ",需重新安裝", + "driver_manager.version.placeholder.load_on_expand": "點擊展開載入版本", + "driver_manager.version.placeholder.select": "選擇驅動版本", "driver_manager.version.recommended_suffix": "(推薦)", "driver_manager.version.switch_pending": "目前已安裝 {{installedVersion}},已選擇 {{targetVersion}},點擊「切換版本」即可生效", "driver_manager.version.target_fallback": "目標版本", "driver_manager.version.unlabeled": "未標註版本", + "driver.guidance.customConnectionDriverHelp": "已支援: mysql, starrocks, oceanbase, postgres, opengauss, sqlite, oracle, dm, kingbase;別名支援 postgresql/pgx、open_gauss/open-gauss、dm8、kingbase8/kingbasees/kingbasev8。請填寫 GoNavi 已註冊的 Go database/sql 驅動名稱,不要直接填寫系統 ODBC/JDBC 驅動名稱,也不要匯入 JDBC Jar。", + "file.backend.dialog.export_connections": "匯出連線", + "file.backend.dialog.export_data": "匯出資料", + "file.backend.dialog.export_database_sql": "匯出 {{database}} (SQL)", + "file.backend.dialog.export_query_result": "匯出查詢結果", + "file.backend.dialog.export_table": "匯出 {{table}}", + "file.backend.dialog.export_tables_sql": "匯出資料表 (SQL)", + "file.backend.dialog.import_data": "匯入到 {{table}}", "file.backend.dialog.select_ca_server_certificate_file": "選擇 CA/伺服器憑證檔案", "file.backend.dialog.select_client_certificate_file": "選擇用戶端憑證檔案", "file.backend.dialog.select_client_private_key_file": "選擇用戶端私鑰檔案", + "file.backend.dialog.select_config_file": "選擇設定檔", + "file.backend.dialog.select_database_file": "選擇資料庫檔案", + "file.backend.dialog.select_duckdb_file": "選擇 DuckDB 資料檔案", + "file.backend.dialog.select_sql_directory": "選擇 SQL 目錄", + "file.backend.dialog.select_sql_file": "選擇 SQL 檔案", + "file.backend.dialog.select_sqlite_file": "選擇 SQLite 資料檔案", + "file.backend.dialog.select_ssh_key_file": "選擇 SSH 私鑰檔案", "file.backend.dialog.select_tls_certificate_file": "選擇 TLS 憑證檔案", "file.backend.error.app_log_file_not_found": "目前找不到 GoNavi 日誌檔案", + "file.backend.error.batch_commit_unsupported": "目前資料庫型別不支援批次提交", + "file.backend.error.connection_export_file_too_large": "連線匯出檔案過大", + "file.backend.error.connection_import_file_too_large": "連線匯入檔案過大", + "file.backend.error.connection_package_decrypt_failed": "檔案密碼錯誤或檔案已損壞", + "file.backend.error.connection_package_password_required": "恢復包密碼不能為空", + "file.backend.error.connection_package_payload_too_large": "連線恢復包內容過大", + "file.backend.error.connection_package_unsupported": "不支援的連線恢復包格式", "file.backend.error.create_directory_failed": "無法建立目錄: {{detail}}", "file.backend.error.create_sql_file_failed": "無法建立 SQL 檔案: {{detail}}", + "file.backend.error.database_name_required": "資料庫名稱不能為空", "file.backend.error.delete_sql_directory_failed": "無法刪除目錄: {{detail}}(僅支援刪除空目錄)", "file.backend.error.delete_sql_file_failed": "無法刪除 SQL 檔案: {{detail}}", "file.backend.error.directory_exists": "目錄已存在", "file.backend.error.directory_name_no_separator": "目錄名稱不能包含路徑分隔符", "file.backend.error.directory_name_required": "目錄名稱不能為空", + "file.backend.error.directory_path_required": "目錄路徑不能為空", + "file.backend.error.export_unsupported_format": "不支援的匯出格式: {{format}}", + "file.backend.error.file_path_empty": "檔案路徑為空", + "file.backend.error.file_path_required": "檔案路徑不能為空", + "file.backend.error.import_csv_empty_or_missing_header": "CSV 為空或缺少標題列", + "file.backend.error.import_csv_open_failed": "無法開啟 CSV: {{detail}}", + "file.backend.error.import_csv_read_failed": "無法讀取 CSV: {{detail}}", + "file.backend.error.import_excel_empty_or_missing_header": "Excel 為空或缺少標題列", + "file.backend.error.import_excel_no_sheets": "Excel 檔案沒有工作表", + "file.backend.error.import_excel_parse_failed": "無法解析 Excel: {{detail}}", + "file.backend.error.import_excel_read_failed": "無法讀取 Excel: {{detail}}", + "file.backend.error.import_file_empty": "檔案路徑不能為空", + "file.backend.error.import_json_parse_failed": "無法解析 JSON: {{detail}}", + "file.backend.error.import_json_root_not_array": "JSON 根必須是陣列", + "file.backend.error.import_unsupported_format": "不支援的檔案格式", + "file.backend.error.invalid_export_mode": "無效的匯出模式", + "file.backend.error.mysql_workbench_no_connections": "未在 XML 中找到有效的連線設定", + "file.backend.error.mysql_workbench_parse_failed": "解析 MySQL Workbench XML 失敗: {{detail}}", "file.backend.error.navicat_connection_password_parse_failed": "連線 {{name}} 的密碼解析失敗", "file.backend.error.navicat_connection_proxy_password_parse_failed": "連線 {{name}} 的代理密碼解析失敗", "file.backend.error.navicat_connection_ssh_password_parse_failed": "連線 {{name}} 的 SSH 密碼解析失敗", "file.backend.error.navicat_ncx_no_connections": "未在 Navicat NCX 中找到 GoNavi 支援的有效連線設定", "file.backend.error.navicat_ncx_parse_failed": "解析 Navicat NCX 失敗", "file.backend.error.navicat_secret_decrypt_failed": "解密 Navicat 密碼失敗", + "file.backend.error.open_file_failed": "無法開啟檔案: {{detail}}", + "file.backend.error.query_required": "查詢語句不能為空", "file.backend.error.read_directory_info_failed": "無法讀取目錄資訊: {{detail}}", + "file.backend.error.read_file_error_summary": "檔案讀取錯誤: {{detail}}。已執行 {{count}} 條。", + "file.backend.error.read_file_info_failed": "無法讀取檔案資訊: {{detail}}", "file.backend.error.read_target_directory_info_failed": "無法讀取目標目錄資訊: {{detail}}", "file.backend.error.read_target_file_info_failed": "無法讀取目標檔案資訊: {{detail}}", "file.backend.error.rename_directory_failed": "無法重新命名目錄: {{detail}}", "file.backend.error.rename_sql_file_failed": "無法重新命名 SQL 檔案: {{detail}}", "file.backend.error.schema_export_no_objects": "未在模式 {{schema}} 下取得可匯出的資料表或檢視", "file.backend.error.schema_name_required": "模式名稱不能為空", + "file.backend.error.select_with_query_required": "僅支援 SELECT/WITH 查詢匯出", + "file.backend.error.selected_path_not_directory": "所選路徑不是目錄", + "file.backend.error.selected_path_not_sql_file": "所選路徑不是 SQL 檔案", "file.backend.error.sql_file_batch_execution_failed": "第 {{index}} 條起的批次語句執行失敗: {{detail}}", "file.backend.error.sql_file_batch_rollback_failed": "批次執行失敗: {{detail}};回滾失敗: {{rollbackDetail}}", "file.backend.error.sql_file_exists": "SQL 檔案已存在", @@ -7101,15 +4952,338 @@ "file.backend.error.sql_file_name_no_separator": "SQL 檔案名稱不能包含路徑分隔符", "file.backend.error.sql_file_name_required": "SQL 檔案名稱不能為空", "file.backend.error.sql_file_statement_execution_failed": "第 {{index}} 條語句執行失敗: {{detail}}", + "file.backend.error.table_data_batch_limit": "單次最多處理 {{max}} 張表,目前選取 {{count}} 張", + "file.backend.error.table_data_clear_failed": "清空 {{table}} 失敗: {{detail}}", + "file.backend.error.table_data_clear_failed_partial": "清空 {{table}} 失敗: {{detail}}(注意:前 {{count}} 張表已清空且無法復原)", + "file.backend.error.table_data_mode_unsupported": "不支援的表資料清理模式: {{mode}}", + "file.backend.error.table_data_no_tables": "未指定要處理的表", + "file.backend.error.table_data_truncate_failed": "截斷 {{table}} 失敗: {{detail}}", + "file.backend.error.table_data_truncate_failed_partial": "截斷 {{table}} 失敗: {{detail}}(注意:前 {{count}} 張表已截斷且無法復原)", + "file.backend.error.table_data_truncate_unsupported": "目前資料庫型別 {{type}} 不支援截斷表,請改用清空表", "file.backend.error.target_directory_exists": "目標目錄已存在", "file.backend.error.target_sql_file_exists": "目標 SQL 檔案已存在", + "file.backend.error.task_not_found": "未找到該任務", + "file.backend.error.write_failed": "寫入失敗: {{detail}}", + "file.backend.filter.all_files": "所有檔案", + "file.backend.filter.all_files_pattern": "所有檔案 (*.*)", "file.backend.filter.certificate_files": "憑證檔案", + "file.backend.filter.connection_package": "GoNavi 連線包 (*.gonavi-conn)", + "file.backend.filter.data_files": "資料檔案", + "file.backend.filter.database_files": "資料庫檔案", + "file.backend.filter.duckdb_files": "DuckDB 檔案", + "file.backend.filter.json_files": "JSON 檔案 (*.json)", + "file.backend.filter.mysql_workbench_connections": "MySQL Workbench 連線 (*.xml)", + "file.backend.filter.private_key_files": "私鑰檔案", + "file.backend.filter.sql_files": "SQL 檔案 (*.sql)", + "file.backend.filter.sqlite_files": "SQLite 檔案", + "file.backend.html_export.document_title": "GoNavi 資料匯出", + "file.backend.html_export.empty_rows": "(0 筆)", + "file.backend.html_export.heading": "GoNavi 資料匯出", + "file.backend.html_export.meta": "列數: {{rowCount}} · 欄數: {{columnCount}} · 產生時間: {{generatedAt}}", + "file.backend.message.cancel_requested": "已送出取消請求", + "file.backend.message.execution_cancelled": "執行已終止。已執行 {{executed}} 條,失敗 {{failed}} 條,耗時 {{duration}}。", + "file.backend.message.execution_completed": "執行完成。成功 {{success}} 條,失敗 {{failed}} 條,耗時 {{duration}}。", + "file.backend.message.execution_error_detail_header": "錯誤詳情(前 {{count}} 條):", + "file.backend.message.execution_more_errors": "...還有 {{count}} 條錯誤未顯示", + "file.backend.message.export_completed": "匯出完成", + "file.backend.message.import_no_data": "無可匯入資料", + "file.backend.message.import_row_failed": "第 {{index}} 列匯入失敗: {{detail}}", + "file.backend.message.import_summary": "已匯入: {{imported}}, 失敗: {{failed}}", + "file.backend.message.statement_failed": "第 {{index}} 條語句執行失敗: {{detail}}\n SQL: {{sql}}", + "file.backend.message.table_data_clear_succeeded": "清空成功", + "file.backend.message.table_data_truncate_succeeded": "截斷成功", + "file.backend.message.transaction_committed": "交易提交成功", + "file.backend.message.user_cancelled": "使用者取消執行", + "file.backend.sql_dump.database": "資料庫: {{database}}", + "file.backend.sql_dump.empty_rows": "(0 筆)", + "file.backend.sql_dump.generated_at": "產生時間: {{generatedAt}}", + "file.backend.sql_dump.table": "資料表: {{objectName}}", + "file.backend.sql_dump.title": "GoNavi SQL 匯出", + "file.backend.sql_dump.view": "檢視: {{objectName}}", + "file.backend.sql_dump.view_data_skipped": "已略過檢視資料匯出(不會為檢視產生 INSERT)。", + "find_in_database.column.action": "操作", + "find_in_database.column.match_count": "命中列數", + "find_in_database.column.matched_columns": "符合欄位", + "find_in_database.column.table_name": "資料表名稱", + "find_in_database.detail.row_count": "{{count}} 列", + "find_in_database.detail.title": "{{table}} — 符合列詳細資料", + "find_in_database.match.contains": "包含", + "find_in_database.match.exact": "完全符合", + "find_in_database.message.connection_config_not_found": "找不到連線設定", + "find_in_database.message.get_tables_failed": "取得資料表清單失敗: {{detail}}", + "find_in_database.message.keyword_required": "請輸入搜尋關鍵字", + "find_in_database.message.no_matches": "找不到符合的資料", + "find_in_database.message.no_tables": "目前資料庫沒有資料表", + "find_in_database.message.search_failed": "搜尋出錯: {{detail}}", + "find_in_database.placeholder.keyword": "輸入要搜尋的字串...", + "find_in_database.progress.searching_table": "正在搜尋 {{table}}... ({{current}}/{{total}})", + "find_in_database.summary.found_tables": "找到 {{count}} 個資料表包含符合資料", + "find_in_database.summary.searching": "(搜尋進行中...)", + "find_in_database.title": "在資料庫中搜尋 — {{dbName}}", + "find_in_database.tooltip.collapse_details": "收合詳細資料", + "find_in_database.tooltip.view_details": "檢視詳細資料", + "import_preview.action.start": "開始匯入", + "import_preview.error.connection_config_not_found": "找不到連線設定", + "import_preview.error.import_failed": "匯入失敗", + "import_preview.error.import_failed_detail": "匯入失敗: {{detail}}", + "import_preview.error.preview_failed": "預覽失敗", + "import_preview.error.preview_failed_detail": "預覽失敗: {{detail}}", + "import_preview.preview.description": "以下顯示前 5 列預覽資料,確認無誤後開始匯入。", + "import_preview.preview.field_list": "欄位清單:", + "import_preview.preview.summary": "共 {{rows}} 列資料,{{columns}} 個欄位", + "import_preview.preview.table_title": "資料預覽(前 5 列):", + "import_preview.progress.error_count": "失敗 {{count}}", + "import_preview.progress.processed_rows": "已處理 {{current}} / {{total}} 列", + "import_preview.progress.success_count": "成功 {{count}}", + "import_preview.result.completed": "匯入完成", + "import_preview.result.error_logs": "錯誤記錄:", + "import_preview.result.failed_rows": "失敗 {{count}} 列", + "import_preview.result.success_rows": "成功匯入 {{count}} 列", + "import_preview.status.importing": "正在匯入資料...", + "import_preview.status.loading_preview": "正在載入預覽資料...", + "import_preview.title": "匯入資料預覽", + "jvm_ai_plan.actions.description": ":{{description}}", + "jvm_ai_plan.actions.field_separator": "、", + "jvm_ai_plan.actions.label": " ({{label}})", + "jvm_ai_plan.actions.none": "目前資源未宣告支援動作。若要產生計畫,請僅在能從快照內容明確推斷時給出 action,並保持 payload 為 JSON 物件。", + "jvm_ai_plan.actions.payload_fields": ";payload 欄位:{{fields}}", + "jvm_ai_plan.actions.required_suffix": "(required)", + "jvm_ai_plan.error.action_missing": "AI 計畫缺少可執行 action", + "jvm_ai_plan.error.payload_json_object_required": "目前 JVM 預覽要求 payload 仍然是 JSON 物件", + "jvm_ai_plan.error.reason_missing": "AI 計畫缺少變更原因", + "jvm_ai_plan.error.resource_locator_missing": "AI 計畫缺少可用的資源定位資訊", + "jvm_ai_plan.prompt.connection_name": "連線名稱:{{connectionName}}", + "jvm_ai_plan.prompt.connection_policy": "連線策略:{{policy}}", + "jvm_ai_plan.prompt.connection_policy.read_only": "唯讀連線,目前只能產生計畫和風險分析,不能假設已執行", + "jvm_ai_plan.prompt.connection_policy.writable": "可寫連線,但仍必須先預覽再由人工確認", + "jvm_ai_plan.prompt.environment": "執行環境:{{environmentLabel}}", + "jvm_ai_plan.prompt.environment_unknown": "unknown", + "jvm_ai_plan.prompt.example_reason": "修復快取髒值", + "jvm_ai_plan.prompt.example_title": "JSON 範例:", + "jvm_ai_plan.prompt.intro": "請分析下面這個 JVM 資源,並產生一個可用於 GoNavi「預覽變更」的結構化修改計畫。", + "jvm_ai_plan.prompt.output_requirements_title": "輸出要求:", + "jvm_ai_plan.prompt.provider_mode": "Provider 模式:{{providerMode}}", + "jvm_ai_plan.prompt.requirement.action": "4. action 優先從「目前資源支援動作」裡選擇;如果目前資源未宣告支援動作,才允許基於快照內容推斷。", + "jvm_ai_plan.prompt.requirement.fields": "2. 程式碼區塊裡的 JSON 欄位必須嚴格是:targetType、selector、action、payload、reason。", + "jvm_ai_plan.prompt.requirement.no_execute": "6. 不要聲稱已經執行修改,也不要輸出腳本或命令。", + "jvm_ai_plan.prompt.requirement.payload": "5. payload 只能使用 JSON 物件包裝,不要輸出腳本、命令或原始二進位。若需要純文字值,也請包裝成 {\"format\":\"text\",\"value\":\"...\"}。", + "jvm_ai_plan.prompt.requirement.resource_path": "3. selector.resourcePath 優先使用目前資源路徑 {{resourcePath}},不要憑空編造其他路徑。", + "jvm_ai_plan.prompt.requirement.single_json_block": "1. 可以先給一小段分析,但必須包含且只包含一個 ```json 程式碼區塊。", + "jvm_ai_plan.prompt.resource_path": "目前資源路徑:{{resourcePath}}", + "jvm_ai_plan.prompt.resource_path_missing": "(未提供資源路徑)", + "jvm_ai_plan.prompt.snapshot_title": "目前資源快照:", + "jvm_ai_plan.prompt.supported_actions_title": "目前資源支援動作:", + "jvm_ai_plan.prompt.target_host": "目標主機:{{host}}", + "jvm_ai_plan.snapshot.unavailable": "目前資源快照尚未成功載入。", + "jvm_audit.action.refresh": "重新整理", + "jvm_audit.card.records": "稽核記錄", + "jvm_audit.column.action": "動作", + "jvm_audit.column.mode": "模式", + "jvm_audit.column.reason": "原因", + "jvm_audit.column.resource": "資源", + "jvm_audit.column.result": "結果", + "jvm_audit.column.source": "來源", + "jvm_audit.column.time": "時間", + "jvm_audit.description.current_range": "目前範圍:最近 {{limit}} 筆", + "jvm_audit.empty.load_failed": "目前無法載入稽核記錄", + "jvm_audit.empty.no_records": "暫無稽核記錄", + "jvm_audit.error.backend_unavailable": "JVMListAuditRecords 後端方法不可用", + "jvm_audit.error.connection_missing": "連線不存在或已被刪除", + "jvm_audit.error.load_failed": "讀取 JVM 稽核記錄失敗{{separator}}{{detail}}", + "jvm_audit.eyebrow": "JVM 稽核", + "jvm_audit.option.last_records": "最近 {{limit}} 筆", + "jvm_audit.source.ai_plan": "AI 輔助", + "jvm_audit.source.manual": "手動", + "jvm_audit.title": "JVM 變更稽核", + "jvm_change_preview_modal.action.close": "關閉", + "jvm_change_preview_modal.action.confirm_execute": "確認執行", + "jvm_change_preview_modal.blocking.alert_message": "目前變更不可執行", + "jvm_change_preview_modal.blocking.label": "阻斷原因", + "jvm_change_preview_modal.field.format": "格式", + "jvm_change_preview_modal.field.resource_id": "資源 ID", + "jvm_change_preview_modal.field.version": "版本", + "jvm_change_preview_modal.permission.allowed": "允許執行", + "jvm_change_preview_modal.permission.forbidden": "禁止執行", + "jvm_change_preview_modal.permission.requires_confirmation": "需要確認", + "jvm_change_preview_modal.risk.high": "高", + "jvm_change_preview_modal.risk.label": "風險 {{level}}", + "jvm_change_preview_modal.risk.low": "低", + "jvm_change_preview_modal.risk.medium": "中", + "jvm_change_preview_modal.risk.unknown": "未知", + "jvm_change_preview_modal.section.after": "變更後", + "jvm_change_preview_modal.section.before": "變更前", + "jvm_change_preview_modal.section.summary": "變更摘要", + "jvm_change_preview_modal.status.generated": "預覽已產生", + "jvm_change_preview_modal.status.no_preview": "暫無預覽結果", + "jvm_change_preview_modal.title": "JVM 變更預覽", "jvm_diagnostic.ai_plan.default_reason": "AI 診斷計畫:{{intent}}", + "jvm_diagnostic.ai_plan.error.transport_mismatch": "AI 計畫的診斷 transport 為 {{planTransport}},與目前控制台 {{currentTransport}} 不一致,請重新產生計畫後再套用。", + "jvm_diagnostic.ai_plan.message.filled": "AI 診斷計畫已回填到控制台", + "jvm_diagnostic.capability_result.mutating_allowed": "高風險命令", + "jvm_diagnostic.capability_result.observe_allowed": "觀察命令", + "jvm_diagnostic.capability_result.observe_denied": "禁止觀察", + "jvm_diagnostic.capability_result.session_allowed": "可建立會話", + "jvm_diagnostic.capability_result.session_denied": "不可建立會話", + "jvm_diagnostic.capability_result.streaming_supported": "串流輸出", + "jvm_diagnostic.capability_result.streaming_unsupported": "不支援串流", + "jvm_diagnostic.capability_result.title": "能力檢查結果", + "jvm_diagnostic.capability_result.trace_allowed": "追蹤命令", + "jvm_diagnostic.capability.empty.description": "能力檢查只讀取通道權限和命令策略,不會建立會話或執行命令。", + "jvm_diagnostic.capability.empty.title": "尚未檢查能力", + "jvm_diagnostic.command_input.command_description": "輸入 Arthas/診斷命令,例如 thread -n 5、dashboard 或 jvm;下方範本可一鍵填入。", + "jvm_diagnostic.command_input.command_label": "診斷命令", + "jvm_diagnostic.command_input.description": "支援自動完成。按 Ctrl/Cmd + Enter 執行。", + "jvm_diagnostic.command_input.reason_help": "用於稽核記錄和 AI 上下文。它不會作為 Arthas 命令傳送到目標 JVM。", + "jvm_diagnostic.command_input.reason_label": "診斷原因(選填)", + "jvm_diagnostic.command_input.reason_placeholder": "例如:排查 CPU 飆高、確認執行緒阻塞,或定位慢方法", + "jvm_diagnostic.command_input.title": "命令輸入", + "jvm_diagnostic.command_templates.title": "命令範本", + "jvm_diagnostic.completion.argument.classloader.hash.documentation": "查看指定類別載入器詳情。", + "jvm_diagnostic.completion.argument.classloader.hash.label": "指定類別載入器 Hash", + "jvm_diagnostic.completion.argument.classloader.tree.documentation": "輸出類別載入器樹狀結構。", + "jvm_diagnostic.completion.argument.classloader.tree.label": "樹狀檢視 (-t)", + "jvm_diagnostic.completion.argument.classloader.url_stat.documentation": "查看類別載入器 URL 統計。", + "jvm_diagnostic.completion.argument.classloader.url_stat.label": "全部 URL 統計 (--url-stat)", + "jvm_diagnostic.completion.argument.command_template.label": "{{command}} 範本", + "jvm_diagnostic.completion.argument.dashboard.direct.documentation": "查看目前 JVM 執行總覽。", + "jvm_diagnostic.completion.argument.dashboard.direct.label": "dashboard", + "jvm_diagnostic.completion.argument.detail_mode_d.label": "詳細模式 (-d)", + "jvm_diagnostic.completion.argument.jad.template.documentation": "反編譯指定類別。", + "jvm_diagnostic.completion.argument.jad.template.label": "反編譯範本", + "jvm_diagnostic.completion.argument.jvm.direct.documentation": "查看 JVM 記憶體、執行緒、類別載入、GC 和執行參數資訊。", + "jvm_diagnostic.completion.argument.jvm.direct.label": "jvm", + "jvm_diagnostic.completion.argument.monitor.template.documentation": "按週期統計方法呼叫情況。", + "jvm_diagnostic.completion.argument.ognl.template.documentation": "執行 OGNL 表達式,高風險命令預設受策略限制。", + "jvm_diagnostic.completion.argument.redefine.template.documentation": "重新定義類別位元碼檔案路徑。", + "jvm_diagnostic.completion.argument.retransform.template.documentation": "重新轉換指定類別。", + "jvm_diagnostic.completion.argument.sc.class_pattern.documentation": "依類別名稱模式搜尋。", + "jvm_diagnostic.completion.argument.sc.class_pattern.label": "類別匹配範本", + "jvm_diagnostic.completion.argument.sc.detail.documentation": "輸出類別詳細資訊。", + "jvm_diagnostic.completion.argument.sm.detail.documentation": "輸出方法詳細簽名。", + "jvm_diagnostic.completion.argument.sm.method_signature.documentation": "查看類別的方法簽名。", + "jvm_diagnostic.completion.argument.sm.method_signature.label": "方法簽名範本", + "jvm_diagnostic.completion.argument.stack.template.documentation": "輸出方法呼叫堆疊。", + "jvm_diagnostic.completion.argument.stop.direct.documentation": "停止目前背景任務。", + "jvm_diagnostic.completion.argument.stop.direct.label": "stop", + "jvm_diagnostic.completion.argument.sysenv.variable.documentation": "讀取指定環境變數。", + "jvm_diagnostic.completion.argument.sysenv.variable.label": "查看環境變數", + "jvm_diagnostic.completion.argument.sysprop.property.documentation": "讀取指定系統屬性。", + "jvm_diagnostic.completion.argument.sysprop.property.label": "查看屬性", + "jvm_diagnostic.completion.argument.thread.blocking.documentation": "查找目前阻塞其他執行緒的執行緒。", + "jvm_diagnostic.completion.argument.thread.blocking.label": "阻塞執行緒 (-b)", + "jvm_diagnostic.completion.argument.thread.busy_top.documentation": "查看 CPU 最繁忙的前 N 個執行緒。", + "jvm_diagnostic.completion.argument.thread.busy_top.label": "繁忙執行緒 TOP N (-n)", + "jvm_diagnostic.completion.argument.thread.thread_id.documentation": "查看指定執行緒的詳細堆疊資訊。", + "jvm_diagnostic.completion.argument.thread.thread_id.label": "指定執行緒 ID", + "jvm_diagnostic.completion.argument.trace.condition.documentation": "追加 trace 條件表達式。", + "jvm_diagnostic.completion.argument.trace.condition.label": "條件過濾 '#cost > 100'", + "jvm_diagnostic.completion.argument.trace.template.documentation": "追蹤慢方法呼叫鏈路。", + "jvm_diagnostic.completion.argument.tt.list.documentation": "查看目前錄製列表。", + "jvm_diagnostic.completion.argument.tt.list.label": "查看記錄列表 (-l)", + "jvm_diagnostic.completion.argument.tt.record.documentation": "錄製指定方法呼叫。", + "jvm_diagnostic.completion.argument.tt.record.label": "tt 錄製範本", + "jvm_diagnostic.completion.argument.tt.replay.documentation": "查看指定記錄詳情。", + "jvm_diagnostic.completion.argument.tt.replay.label": "回放記錄 (-i)", + "jvm_diagnostic.completion.argument.vmtool.get_instances.documentation": "取得指定類別實例,高風險命令預設受策略限制。", + "jvm_diagnostic.completion.argument.vmtool.get_instances.label": "vmtool getInstances", + "jvm_diagnostic.completion.argument.watch.expand_depth.documentation": "設定物件展開層級。", + "jvm_diagnostic.completion.argument.watch.expand_depth.label": "展開層級 -x 2", + "jvm_diagnostic.completion.argument.watch.template.documentation": "觀察入參、回傳值或例外。", + "jvm_diagnostic.completion.category.control": "控制命令", + "jvm_diagnostic.completion.category.mutating": "高風險命令", + "jvm_diagnostic.completion.category.observe": "觀察類命令", + "jvm_diagnostic.completion.category.trace": "追蹤類命令", + "jvm_diagnostic.completion.command.classloader.documentation": "查看類別載入器資訊。", + "jvm_diagnostic.completion.command.dashboard.documentation": "查看 JVM 執行總覽。", + "jvm_diagnostic.completion.command.jad.documentation": "反編譯指定類別。", + "jvm_diagnostic.completion.command.jvm.documentation": "查看 JVM 記憶體、執行緒、類別載入、GC 和執行參數資訊。", + "jvm_diagnostic.completion.command.monitor.documentation": "週期性統計方法呼叫。", + "jvm_diagnostic.completion.command.ognl.documentation": "執行 OGNL 表達式,預設需要額外授權。", + "jvm_diagnostic.completion.command.redefine.documentation": "重新定義類別位元碼。", + "jvm_diagnostic.completion.command.retransform.documentation": "重新觸發類別轉換。", + "jvm_diagnostic.completion.command.sc.documentation": "搜尋匹配類別資訊。", + "jvm_diagnostic.completion.command.sm.documentation": "查看類別的方法簽名。", + "jvm_diagnostic.completion.command.stack.documentation": "輸出方法呼叫堆疊。", + "jvm_diagnostic.completion.command.stop.documentation": "停止目前背景任務。", + "jvm_diagnostic.completion.command.sysenv.documentation": "查看環境變數。", + "jvm_diagnostic.completion.command.sysprop.documentation": "查看系統屬性。", + "jvm_diagnostic.completion.command.thread.documentation": "查看熱點執行緒、執行緒堆疊和阻塞執行緒。", + "jvm_diagnostic.completion.command.trace.documentation": "追蹤方法呼叫耗時路徑。", + "jvm_diagnostic.completion.command.tt.documentation": "方法時光隧道,記錄和回放呼叫。", + "jvm_diagnostic.completion.command.vmtool.documentation": "直接操作 JVM 物件或執行 VMTool 動作。", + "jvm_diagnostic.completion.command.watch.documentation": "觀察入參、回傳值或例外。", + "jvm_diagnostic.completion.detail.class_search_template": "類別搜尋範本", + "jvm_diagnostic.completion.detail.classloader_template": "類別載入器範本", + "jvm_diagnostic.completion.detail.decompile_template": "反編譯範本", + "jvm_diagnostic.completion.detail.environment_variable_template": "環境變數範本", + "jvm_diagnostic.completion.detail.execute_directly": "直接執行", + "jvm_diagnostic.completion.detail.high_risk_template": "高風險範本", + "jvm_diagnostic.completion.detail.method_search_template": "方法搜尋範本", + "jvm_diagnostic.completion.detail.monitor_template": "監控範本", + "jvm_diagnostic.completion.detail.stack_template": "呼叫堆疊範本", + "jvm_diagnostic.completion.detail.system_property_template": "系統屬性範本", + "jvm_diagnostic.completion.detail.thread_option": "執行緒參數", + "jvm_diagnostic.completion.detail.time_tunnel_template": "時光隧道範本", + "jvm_diagnostic.completion.detail.trace_option": "追蹤參數", + "jvm_diagnostic.completion.detail.trace_template": "追蹤範本", + "jvm_diagnostic.completion.detail.watch_option": "觀察參數", + "jvm_diagnostic.completion.detail.watch_template": "觀察範本", + "jvm_diagnostic.completion.preset.category.mutating": "高風險命令", + "jvm_diagnostic.completion.preset.category.observe": "觀察類命令", + "jvm_diagnostic.completion.preset.category.trace": "追蹤類命令", + "jvm_diagnostic.completion.preset.dashboard.documentation": "查看 JVM 執行總覽。", + "jvm_diagnostic.completion.preset.ognl-sample.documentation": "高風險表達式命令,預設僅作示意。", + "jvm_diagnostic.completion.preset.thread-top.documentation": "查看最繁忙執行緒,快速定位阻塞或高 CPU 執行緒。", + "jvm_diagnostic.completion.preset.trace-slow-method.documentation": "追蹤慢方法呼叫路徑。", + "jvm_diagnostic.completion.preset.watch-return.documentation": "觀察入參與回傳值。", + "jvm_diagnostic.connection_missing.message": "連線不存在或已被刪除", + "jvm_diagnostic.error.cancel_failed": "取消診斷命令失敗", + "jvm_diagnostic.error.cancel_unavailable": "JVMCancelDiagnosticCommand 後端方法不可用", + "jvm_diagnostic.error.execute_command_required": "診斷命令不能為空", + "jvm_diagnostic.error.execute_failed": "診斷命令執行失敗", + "jvm_diagnostic.error.execute_session_required": "請先建立診斷會話,再執行命令", + "jvm_diagnostic.error.execute_unavailable": "JVMExecuteDiagnosticCommand 後端方法不可用", + "jvm_diagnostic.error.history_load_failed": "載入診斷歷史失敗", + "jvm_diagnostic.error.probe_failed": "檢查診斷能力失敗", + "jvm_diagnostic.error.probe_unavailable": "JVMProbeDiagnosticCapabilities 後端方法不可用", + "jvm_diagnostic.error.start_failed": "建立診斷會話失敗", + "jvm_diagnostic.error.start_unavailable": "JVMStartDiagnosticSession 後端方法不可用", + "jvm_diagnostic.history.current_session": "目前會話", + "jvm_diagnostic.history.description": "最近命令與執行狀態", + "jvm_diagnostic.history.no_records": "尚無診斷歷史", + "jvm_diagnostic.history.no_session": "尚未建立診斷會話", + "jvm_diagnostic.history.reason_missing": "未填寫診斷原因", + "jvm_diagnostic.history.recent_records": "最近記錄", + "jvm_diagnostic.history.title": "稽核歷史", + "jvm_diagnostic.message.cancel_sent": "已送出取消請求", + "jvm_diagnostic.no_session.action.probe": "先檢查能力", + "jvm_diagnostic.no_session.action.start": "新建診斷會話", + "jvm_diagnostic.no_session.alert.description": "這可避免在未綁定會話時誤以為命令已可執行,也能確保稽核記錄、輸出串流和取消命令都綁定到同一個會話。", + "jvm_diagnostic.no_session.alert.title": "命令輸入會在會話建立後顯示", + "jvm_diagnostic.no_session.description": "先建立會話,再顯示命令編輯器和範本", + "jvm_diagnostic.no_session.title": "開始一次診斷", + "jvm_diagnostic.output.description": "依後端事件流追加顯示", + "jvm_diagnostic.output.empty.description": "暫無即時輸出。命令執行後,這裡會依時間順序追加後端返回內容。", + "jvm_diagnostic.output.frontend_completed_fallback": "診斷命令呼叫已返回,但未收到後端終態事件,前端已兜底結束等待狀態。", + "jvm_diagnostic.output.local_pending": "已提交診斷命令,等待後端輸出:{{command}}", + "jvm_diagnostic.output.title": "即時輸出", + "jvm_diagnostic.presentation.category.mutating": "高風險命令", + "jvm_diagnostic.presentation.category.observe": "觀察類命令", + "jvm_diagnostic.presentation.category.trace": "追蹤類命令", + "jvm_diagnostic.presentation.chunk.empty_event": "空事件", "jvm_diagnostic.presentation.command_type.mutating": "高風險類", "jvm_diagnostic.presentation.command_type.observe": "觀察類", "jvm_diagnostic.presentation.command_type.trace": "追蹤類", + "jvm_diagnostic.presentation.event.chunk": "輸出片段", + "jvm_diagnostic.presentation.event.diagnostic": "診斷輸出", + "jvm_diagnostic.presentation.event.done": "執行結束", "jvm_diagnostic.presentation.fallback.unknown": "未知", "jvm_diagnostic.presentation.phase.canceled": "取消完成", + "jvm_diagnostic.presentation.phase.canceling": "取消中", + "jvm_diagnostic.presentation.phase.completed": "已完成", + "jvm_diagnostic.presentation.phase.diagnostic": "診斷事件", + "jvm_diagnostic.presentation.phase.failed": "失敗", + "jvm_diagnostic.presentation.phase.running": "執行中", "jvm_diagnostic.presentation.risk.high": "高風險", "jvm_diagnostic.presentation.risk.low": "低風險", "jvm_diagnostic.presentation.risk.medium": "中風險", @@ -7117,6 +5291,734 @@ "jvm_diagnostic.presentation.source.manual": "手動輸入", "jvm_diagnostic.presentation.transport.agent_bridge": "Agent Bridge", "jvm_diagnostic.presentation.transport.arthas_tunnel": "Arthas Tunnel", + "jvm_diagnostic.session_capability.action.clear_output": "清空輸出", + "jvm_diagnostic.session_capability.action.refresh_history": "重新整理歷史", + "jvm_diagnostic.session_capability.description": "目前通道、權限與快速維護", + "jvm_diagnostic.session_capability.note": "能力檢查不會執行命令;執行命令前必須先建立會話。稽核歷史會顯示最近命令記錄,未建立會話時也可能包含過去會話的記錄。", + "jvm_diagnostic.session_capability.session_id_hint": "建立會話後會在這裡顯示會話 ID。", + "jvm_diagnostic.session_capability.status.command_running": "命令執行中", + "jvm_diagnostic.session_capability.status.idle": "閒置", + "jvm_diagnostic.session_capability.status.no_session": "未建會話", + "jvm_diagnostic.session_capability.status.session_established": "會話已建立", + "jvm_diagnostic.session_capability.title": "會話與能力", + "jvm_diagnostic.session.default_reason": "從控制台啟動會話", + "jvm_diagnostic.session.default_title": "JVM 診斷控制台", + "jvm_diagnostic.workbench.action.cancel_command": "取消命令", + "jvm_diagnostic.workbench.action.execute_command": "執行命令", + "jvm_diagnostic.workbench.action.probe": "檢查能力", + "jvm_diagnostic.workbench.action.restart_session": "重建會話", + "jvm_diagnostic.workbench.action.start_session": "新建會話", + "jvm_diagnostic.workbench.eyebrow": "JVM 診斷", + "jvm_diagnostic.workbench.status.command_running": "命令執行中", + "jvm_diagnostic.workbench.status.no_session": "未建會話", + "jvm_diagnostic.workbench.status.session_established": "會話已建立", + "jvm_diagnostic.workbench.title": "JVM 診斷工作台", + "jvm_diagnostic.workflow.command.description": "會話建立後顯示命令編輯器、原因輸入與範本。", + "jvm_diagnostic.workflow.command.title": "執行命令", + "jvm_diagnostic.workflow.probe.description": "只讀取診斷通道、串流輸出與命令權限,不建立會話。", + "jvm_diagnostic.workflow.probe.title": "檢查能力", + "jvm_diagnostic.workflow.session.description": "建立診斷上下文,後續命令都會綁定到這個會話。", + "jvm_diagnostic.workflow.session.title": "新建會話", + "jvm_monitoring_charts.empty.classes.metric_unavailable": "目前監控來源未提供類別載入指標", + "jvm_monitoring_charts.empty.classes.no_samples": "暫無類別載入採樣資料", + "jvm_monitoring_charts.empty.gc.metric_unavailable": "目前監控來源未提供垃圾回收指標", + "jvm_monitoring_charts.empty.gc.no_samples": "暫無垃圾回收採樣資料", + "jvm_monitoring_charts.empty.heap.metric_unavailable": "目前監控來源未提供堆記憶體指標", + "jvm_monitoring_charts.empty.heap.no_samples": "暫無堆記憶體採樣資料", + "jvm_monitoring_charts.empty.threads.metric_unavailable": "目前監控來源未提供執行緒指標", + "jvm_monitoring_charts.empty.threads.no_samples": "暫無執行緒採樣資料", + "jvm_monitoring_charts.legend.daemon_thread_count": "守護執行緒數", + "jvm_monitoring_charts.legend.gc_count": "垃圾回收次數", + "jvm_monitoring_charts.legend.gc_time_ms": "垃圾回收耗時(ms)", + "jvm_monitoring_charts.legend.heap_committed": "堆記憶體已提交", + "jvm_monitoring_charts.legend.heap_used": "堆記憶體已使用", + "jvm_monitoring_charts.legend.loaded_classes": "已載入類別", + "jvm_monitoring_charts.legend.peak_thread_count": "執行緒峰值", + "jvm_monitoring_charts.legend.thread_count": "執行緒數", + "jvm_monitoring_charts.legend.unloaded_classes": "已卸載類別", + "jvm_monitoring_charts.title.classes": "類別載入", + "jvm_monitoring_charts.title.gc": "垃圾回收", + "jvm_monitoring_charts.title.heap": "堆記憶體", + "jvm_monitoring_charts.title.threads": "執行緒", + "jvm_monitoring_dashboard.action.refresh": "重新整理", + "jvm_monitoring_dashboard.action.start": "開始監控", + "jvm_monitoring_dashboard.action.stop": "停止監控", + "jvm_monitoring_dashboard.connection_missing.message": "連線不存在或已被刪除", + "jvm_monitoring_dashboard.degraded.message": "監控能力存在降級", + "jvm_monitoring_dashboard.empty.description": "點擊「開始監控」後,GoNavi 會在目前會話內持續保留該連線的取樣結果;切換分頁不會停止取樣。", + "jvm_monitoring_dashboard.empty.title": "目前尚未開始持續監控", + "jvm_monitoring_dashboard.error.history_load_failed": "讀取監控歷史失敗", + "jvm_monitoring_dashboard.error.history_unavailable": "JVMGetMonitoringHistory 後端方法不可用", + "jvm_monitoring_dashboard.error.start_failed": "開始監控失敗", + "jvm_monitoring_dashboard.error.start_unavailable": "JVMStartMonitoring 後端方法不可用", + "jvm_monitoring_dashboard.error.stop_failed": "停止監控失敗", + "jvm_monitoring_dashboard.error.stop_unavailable": "JVMStopMonitoring 後端方法不可用", + "jvm_monitoring_dashboard.status.sampling": "取樣中", + "jvm_monitoring_dashboard.status.stopped": "未執行", + "jvm_monitoring_dashboard.title": "JVM 持續監控", + "jvm_monitoring_detail_panel.empty.gc_events_unavailable": "目前監控來源未提供事件級垃圾回收資料", + "jvm_monitoring_detail_panel.empty.recent_gc_events": "最近視窗暫無垃圾回收事件", + "jvm_monitoring_detail_panel.empty.thread_states": "暫無執行緒狀態採樣", + "jvm_monitoring_detail_panel.field.process_cpu": "行程 CPU", + "jvm_monitoring_detail_panel.field.process_physical_memory": "行程實體記憶體", + "jvm_monitoring_detail_panel.field.process_virtual_memory": "行程虛擬記憶體", + "jvm_monitoring_detail_panel.field.system_cpu": "系統 CPU", + "jvm_monitoring_detail_panel.gc.after": "回收後", + "jvm_monitoring_detail_panel.gc.before": "回收前", + "jvm_monitoring_detail_panel.memory_missing.default": "目前監控來源未返回行程駐留實體記憶體指標;請確認 HTTP 端點或增強代理已採集並上報行程實體記憶體。", + "jvm_monitoring_detail_panel.memory_missing.jmx": "JMX 連線未暴露行程駐留實體記憶體屬性,目前只能讀取行程虛擬記憶體指標;如需行程實體記憶體,請切換到 HTTP 端點或增強代理採集。", + "jvm_monitoring_detail_panel.memory_missing.title": "行程實體記憶體缺失原因", + "jvm_monitoring_detail_panel.title.capabilities_and_degradation": "能力與降級", + "jvm_monitoring_detail_panel.title.recent_gc_details": "最近垃圾回收明細", + "jvm_monitoring_detail_panel.title.thread_state_distribution": "執行緒狀態分布", + "jvm_monitoring_detail_panel.title.troubleshooting_metrics": "排障指標", + "jvm_monitoring_presentation.availability.missing_metrics": "缺失指標:{{metrics}}", + "jvm_monitoring_presentation.availability.no_obvious_degradation": "目前監控工作階段未發現明顯降級。", + "jvm_monitoring_presentation.availability.provider_warnings": "監控來源告警:{{warnings}}", + "jvm_monitoring_presentation.metric.class_loading": "類別載入", + "jvm_monitoring_presentation.metric.cpu_process": "行程 CPU", + "jvm_monitoring_presentation.metric.cpu_system": "系統 CPU", + "jvm_monitoring_presentation.metric.gc_count": "垃圾回收次數", + "jvm_monitoring_presentation.metric.gc_events": "最近垃圾回收事件", + "jvm_monitoring_presentation.metric.gc_time": "垃圾回收耗時", + "jvm_monitoring_presentation.metric.heap_non_heap": "非堆積記憶體", + "jvm_monitoring_presentation.metric.heap_used": "堆積記憶體", + "jvm_monitoring_presentation.metric.memory_rss": "行程實體記憶體", + "jvm_monitoring_presentation.metric.memory_virtual": "行程虛擬記憶體", + "jvm_monitoring_presentation.metric.thread_count": "執行緒數", + "jvm_monitoring_presentation.metric.thread_states": "執行緒狀態", + "jvm_monitoring_presentation.thread_state.blocked": "封鎖", + "jvm_monitoring_presentation.thread_state.new": "新建", + "jvm_monitoring_presentation.thread_state.runnable": "可執行", + "jvm_monitoring_presentation.thread_state.terminated": "已終止", + "jvm_monitoring_presentation.thread_state.timed_waiting": "限時等待", + "jvm_monitoring_presentation.thread_state.waiting": "等待中", + "jvm_monitoring_status_cards.meta.gc_total_time": "累計 {{value}}", + "jvm_monitoring_status_cards.meta.heap_committed": "已提交 {{value}}", + "jvm_monitoring_status_cards.meta.thread_peak": "峰值 {{value}}", + "jvm_monitoring_status_cards.meta.waiting_samples": "等待採樣", + "jvm_monitoring_status_cards.status.sampling": "採樣中", + "jvm_monitoring_status_cards.status.stopped": "未執行", + "jvm_monitoring_status_cards.thread_state.runnable_count": "可執行 {{count}}", + "jvm_monitoring_status_cards.title.classes": "類別載入", + "jvm_monitoring_status_cards.title.gc_pressure": "垃圾回收壓力", + "jvm_monitoring_status_cards.title.heap": "堆記憶體", + "jvm_monitoring_status_cards.title.threads": "執行緒", + "jvm_overview.badge.read_only": "唯讀連線", + "jvm_overview.badge.writable": "可寫連線", + "jvm_overview.capability.can_browse": "可瀏覽", + "jvm_overview.capability.cannot_browse": "不可瀏覽", + "jvm_overview.capability.preview_supported": "支援預覽", + "jvm_overview.capability.preview_unsupported": "不支援預覽", + "jvm_overview.capability.read_only": "唯讀", + "jvm_overview.capability.writable": "可寫", + "jvm_overview.card.connection_summary": "連線摘要", + "jvm_overview.card.mode_capability": "模式能力", + "jvm_overview.connection_missing.message": "連線不存在或已被刪除", + "jvm_overview.empty.capabilities": "暫無模式能力資料", + "jvm_overview.error.capability_load_failed": "讀取 JVM 模式能力失敗", + "jvm_overview.eyebrow": "JVM 執行階段", + "jvm_overview.field.agent": "Agent", + "jvm_overview.field.allowed_modes": "允許模式", + "jvm_overview.field.current_mode": "目前模式", + "jvm_overview.field.endpoint": "Endpoint", + "jvm_overview.field.jmx_address": "JMX 位址", + "jvm_overview.field.resource_browse": "資源瀏覽", + "jvm_overview.title": "JVM 執行階段概覽", + "jvm_overview.value.enabled": "已啟用", + "jvm_overview.value.not_configured": "未設定", + "jvm_overview.value.resource_browse_lazy_load": "透過側邊欄展開模式節點後延遲載入", + "jvm_resource.action.ask_ai_plan": "讓 AI 產生計畫", + "jvm_resource.action.audit": "稽核記錄", + "jvm_resource.action.generate_ai_plan": "AI 產生計畫", + "jvm_resource.action.preview_change": "預覽變更", + "jvm_resource.badge.read_only": "唯讀連線", + "jvm_resource.badge.writable": "可寫入連線", + "jvm_resource.card.change_draft": "變更草稿", + "jvm_resource.card.snapshot": "資源快照", + "jvm_resource.draft_source.ai_plan": "AI 輔助草稿", + "jvm_resource.draft_source.manual": "手動編輯", + "jvm_resource.empty.no_resource_data": "暫無資源資料", + "jvm_resource.error.ai_plan_context_mismatch": "目前 JVM 分頁與 AI 計畫的來源上下文不一致,已拒絕自動套用。", + "jvm_resource.error.ai_plan_missing_context": "AI 計畫缺少來源上下文,請在目標 JVM 資源頁重新產生後再套用。", + "jvm_resource.error.ai_plan_to_draft_failed": "AI 計畫暫時無法轉換為 JVM 預覽草稿", + "jvm_resource.error.apply_failed": "執行 JVM 變更失敗", + "jvm_resource.error.apply_unavailable": "JVMApplyChange 後端方法不可用", + "jvm_resource.error.confirmation_missing": "確認權杖缺失,請重新預覽後再執行", + "jvm_resource.error.connection_missing": "連線不存在或已被刪除", + "jvm_resource.error.context_changed": "資源上下文已變更,請重新預覽後再執行", + "jvm_resource.error.draft_invalid": "變更草稿不合法", + "jvm_resource.error.get_value_unavailable": "JVMGetValue 後端方法不可用", + "jvm_resource.error.payload_object_required": "Payload 必須是 JSON 物件", + "jvm_resource.error.preview_failed": "預覽 JVM 變更失敗", + "jvm_resource.error.preview_required": "請先預覽變更,再確認執行", + "jvm_resource.error.preview_result_invalid": "預覽結果格式不正確", + "jvm_resource.error.preview_unavailable": "JVMPreviewChange 後端方法不可用", + "jvm_resource.error.read_failed": "讀取 JVM 資源失敗", + "jvm_resource.error.reason_required": "請填寫變更原因", + "jvm_resource.error.resource_id_empty": "資源 ID 為空,無法產生變更草稿", + "jvm_resource.error.resource_path_empty": "資源路徑為空", + "jvm_resource.field.action": "動作", + "jvm_resource.field.available_actions": "可用動作", + "jvm_resource.field.draft_source": "草稿來源", + "jvm_resource.field.format": "格式", + "jvm_resource.field.payload": "Payload(JSON)", + "jvm_resource.field.payload_fields": "Payload 欄位:", + "jvm_resource.field.reason": "變更原因", + "jvm_resource.field.resource_id": "資源 ID", + "jvm_resource.field.resource_path": "資源路徑", + "jvm_resource.field.resource_type": "資源類型", + "jvm_resource.field.resource_version": "資源版本", + "jvm_resource.field.target_resource": "目標資源", + "jvm_resource.field.version": "版本", + "jvm_resource.list_separator": "、", + "jvm_resource.marker.required_suffix": "(必填)", + "jvm_resource.message.ai_plan_draft_filled": "已從 AI 計畫填入草稿,目標資源為 {{resourceId}},請先執行「預覽變更」再確認寫入。", + "jvm_resource.message.apply_success": "JVM 變更已執行", + "jvm_resource.message.current_action": "目前動作:", + "jvm_resource.message.payload_hint": "預覽會使用目前草稿;確認執行會使用最近一次成功預覽的請求,修改草稿後請重新預覽。", + "jvm_resource.message.payload_template_applied": "已依目前動作填入建議範本。", + "jvm_resource.placeholder.action_default": "例如 put / clear / evict", + "jvm_resource.placeholder.action_jmx": "例如 set 或 invoke", + "jvm_resource.placeholder.reason": "填寫本次 JVM 資源變更原因", + "jvm_resource.presentation.action.clear.description": "清空目前 JVM 資源中的資料或狀態。", + "jvm_resource.presentation.action.clear.label": "清空資源", + "jvm_resource.presentation.action.delete.description": "刪除或取消註冊目前資源。", + "jvm_resource.presentation.action.delete.label": "刪除資源", + "jvm_resource.presentation.action.evict.description": "將目標快取項目從目前 JVM 執行階段逐出。", + "jvm_resource.presentation.action.evict.label": "逐出快取", + "jvm_resource.presentation.action.invoke.description": "呼叫目前資源公開的管理操作。", + "jvm_resource.presentation.action.invoke.label": "呼叫操作", + "jvm_resource.presentation.action.put.description": "將 payload 內容寫入目前 JVM 資源。", + "jvm_resource.presentation.action.put.label": "寫入資源", + "jvm_resource.presentation.action.refresh.description": "重新整理目前資源的執行階段狀態。", + "jvm_resource.presentation.action.refresh.label": "重新整理資源", + "jvm_resource.presentation.action.reload.description": "重新載入目前資源或其設定。", + "jvm_resource.presentation.action.reload.label": "重新載入", + "jvm_resource.presentation.action.remove.description": "移除目前資源中的指定項目。", + "jvm_resource.presentation.action.remove.label": "移除項目", + "jvm_resource.presentation.action.reset.description": "將目前資源還原為初始或預設狀態。", + "jvm_resource.presentation.action.reset.label": "重設狀態", + "jvm_resource.presentation.action.set.description": "更新目前資源公開的可寫屬性值。", + "jvm_resource.presentation.action.set.label": "設定屬性", + "jvm_resource.presentation.audit_result.applied": "已執行", + "jvm_resource.presentation.audit_result.blocked": "已阻擋", + "jvm_resource.presentation.audit_result.failed": "失敗", + "jvm_resource.presentation.audit_result.success": "成功", + "jvm_resource.presentation.audit_result.unknown": "未知", + "jvm_resource.presentation.audit_result.warning": "警告", + "jvm_resource.presentation.risk.high": "高", + "jvm_resource.presentation.risk.low": "低", + "jvm_resource.presentation.risk.medium": "中", + "jvm_resource.presentation.risk.unknown": "未知", + "jvm_resource.presentation.unnamed_action": "未命名動作", + "jvm_resource.section.metadata": "中繼資料", + "jvm_resource.section.resource_value": "資源值", + "jvm_resource.section.supported_actions": "資源支援動作", + "jvm_resource.title": "JVM 資源工作台", + "jvm.backend.capability.reason.read_only": "目前連線為唯讀", + "jvm.backend.connection_error.agent.base_url_invalid.help": "請填寫完整的 `http://` 或 `https://` 位址,例如 `http://127.0.0.1:19090/gonavi/agent/jvm`。", + "jvm.backend.connection_error.agent.base_url_invalid.summary": "Agent 連線失敗:Agent Base URL 格式不合法。", + "jvm.backend.connection_error.agent.base_url_required": "Agent 連線失敗:未填寫 Agent Base URL。", + "jvm.backend.connection_error.agent.connection_refused.help": "請確認 Java 服務已透過 `-javaagent` 啟動 GoNavi Agent,並檢查 Base URL、連接埠對映與防火牆。", + "jvm.backend.connection_error.agent.connection_refused.summary": "Agent 連線失敗:目標 Agent 管理連接埠未監聽,或目前位址無法連線。", + "jvm.backend.connection_error.agent.forbidden.help": "請確認目前用戶端來源、鑑權設定和 Agent 存取策略允許 GoNavi 存取。", + "jvm.backend.connection_error.agent.forbidden.summary": "Agent 連線失敗:目前請求被 Agent 拒絕。", + "jvm.backend.connection_error.agent.scheme_unsupported.help": "請將 Agent Base URL 改成以 `http://` 或 `https://` 開頭的位址。", + "jvm.backend.connection_error.agent.scheme_unsupported.summary": "Agent 連線失敗:目前只支援 HTTP 或 HTTPS 協定。", + "jvm.backend.connection_error.agent.timeout.help": "請確認目標位址可連線、Agent 已完成啟動,並視需要增加連線逾時時間。", + "jvm.backend.connection_error.agent.timeout.summary": "Agent 連線失敗:存取 Agent 管理連接埠逾時。", + "jvm.backend.connection_error.agent.unauthorized.help": "請檢查連線中的 Agent API Key 是否與目標服務啟動參數一致。", + "jvm.backend.connection_error.agent.unauthorized.summary": "Agent 連線失敗:Agent 已回應,但目前 API Key 無效或缺失。", + "jvm.backend.connection_error.endpoint.base_url_invalid.help": "請填寫完整的 `http://` 或 `https://` 位址,並指向實作 GoNavi JVM HTTP 合約的管理介面根路徑,例如 `http://127.0.0.1:19090/manage/jvm`。", + "jvm.backend.connection_error.endpoint.base_url_invalid.summary": "Endpoint 連線失敗:Endpoint Base URL 格式不合法。", + "jvm.backend.connection_error.endpoint.base_url_required": "Endpoint 連線失敗:未填寫 Endpoint Base URL。", + "jvm.backend.connection_error.endpoint.connection_refused.help": "請確認 Base URL 指向實作 GoNavi JVM HTTP 合約的管理介面,並檢查服務監聽、連接埠對映與防火牆。", + "jvm.backend.connection_error.endpoint.connection_refused.summary": "Endpoint 連線失敗:目標管理介面未監聽,或目前位址無法連線。", + "jvm.backend.connection_error.endpoint.forbidden.help": "請確認目前用戶端來源、鑑權設定和存取策略允許 GoNavi 存取該管理介面。", + "jvm.backend.connection_error.endpoint.forbidden.summary": "Endpoint 連線失敗:目前請求被目標管理介面拒絕。", + "jvm.backend.connection_error.endpoint.not_found.help": "請確認 Base URL 指向 JVM 管理介面根路徑,而不是一般業務介面、健康檢查位址或閘道首頁。", + "jvm.backend.connection_error.endpoint.not_found.summary": "Endpoint 連線失敗:目標位址已回應,但找不到 GoNavi JVM 管理介面。", + "jvm.backend.connection_error.endpoint.scheme_unsupported.help": "請將 Endpoint Base URL 改成以 `http://` 或 `https://` 開頭的位址。", + "jvm.backend.connection_error.endpoint.scheme_unsupported.summary": "Endpoint 連線失敗:目前只支援 HTTP 或 HTTPS 協定。", + "jvm.backend.connection_error.endpoint.timeout.help": "請確認 Base URL 可連線、目標服務已完成啟動,並視需要增加連線逾時時間。", + "jvm.backend.connection_error.endpoint.timeout.summary": "Endpoint 連線失敗:存取目標管理介面逾時。", + "jvm.backend.connection_error.endpoint.unauthorized.help": "請檢查連線中的 Endpoint API Key 是否與目標服務設定一致。", + "jvm.backend.connection_error.endpoint.unauthorized.summary": "Endpoint 連線失敗:目標管理介面已回應,但目前 API Key 無效或缺失。", + "jvm.backend.connection_error.generic": "JVM 連線失敗", + "jvm.backend.connection_error.jmx.auth.help": "請確認目標 JMX 是否關閉認證;如果必須認證,需要補充使用者名稱/密碼後再連線。", + "jvm.backend.connection_error.jmx.auth.summary": "JMX 連線失敗:{{target}} 需要認證,或目前憑證不可用。", + "jvm.backend.connection_error.jmx.connection_refused.help": "請確認目標 JVM 已開啟遠端 JMX,並檢查主機、防火牆、連接埠對映和 SSH/代理設定。", + "jvm.backend.connection_error.jmx.connection_refused.summary": "JMX 連線失敗:無法連線到 {{target}},對應連接埠沒有監聽或目前網路無法連線。", + "jvm.backend.connection_error.jmx.connection_reset.help": "請確認填寫的是 JVM 真正對外暴露的 JMX 連接埠,而不是業務連接埠、除錯連接埠或被代理轉發的連接埠。", + "jvm.backend.connection_error.jmx.connection_reset.summary": "JMX 連線失敗:{{target}} 上的服務主動中斷連線,目前連接埠不是相容的標準 JMX RMI 連接埠。", + "jvm.backend.connection_error.jmx.host_required": "JMX 連線失敗:未填寫主機位址。", + "jvm.backend.connection_error.jmx.java_missing.help": "請先安裝 JRE/JDK,或透過環境變數 `GONAVI_JMX_JAVA_BIN` 指向正確的 `java` 可執行檔。", + "jvm.backend.connection_error.jmx.java_missing.summary": "JMX 連線失敗:目前機器未找到 `java` runtime,GoNavi 無法啟動 JMX helper。", + "jvm.backend.connection_error.jmx.no_such_object.help": "這通常代表填到了 RMI 註冊連接埠、除錯連接埠或其他 Java 服務連接埠。請檢查 `jmxremote.port` 和 `jmxremote.rmi.port` 設定是否正確。", + "jvm.backend.connection_error.jmx.no_such_object.summary": "JMX 連線失敗:{{target}} 上雖然有 RMI 服務,但不是可用的 JMX RMIServer 連接埠。", + "jvm.backend.connection_error.jmx.non_jrmp.help": "請改填應用實際暴露的 JMX 連接埠,而不是業務 `server.port`。如果服務只開啟 `-Dcom.sun.management.jmxremote`,但沒有設定 `jmxremote.port`,也無法直接遠端連線。", + "jvm.backend.connection_error.jmx.non_jrmp.summary": "JMX 連線失敗:{{target}} 不是標準 JMX 遠端管理連接埠,目前更像一般業務連接埠或 HTTP 連接埠。", + "jvm.backend.connection_error.jmx.port_invalid": "JMX 連線失敗:連接埠無效,請填寫 1-65535 之間的有效連接埠。", + "jvm.backend.connection_error.jmx.timeout.help": "請確認連接埠可連線、網路未被攔截,並視需要增加連線逾時時間。", + "jvm.backend.connection_error.jmx.timeout.summary": "JMX 連線失敗:連線 {{target}} 逾時。", + "jvm.backend.connection_error.suggestion": "建議:{{detail}}", + "jvm.backend.connection_error.technical_detail": "技術細節:{{detail}}", + "jvm.backend.diagnostic.arthas.base_url_invalid": "Arthas Tunnel 位址格式不正確:{{detail}}", + "jvm.backend.diagnostic.arthas.base_url_required": "Arthas Tunnel 位址不能為空", + "jvm.backend.diagnostic.arthas.cancel_command_mismatch": "目前 Arthas Tunnel 會話的活動命令與待取消命令不一致", + "jvm.backend.diagnostic.arthas.command_already_running": "目前 Arthas Tunnel 會話已有命令在執行,請先等待完成或取消", + "jvm.backend.diagnostic.arthas.command_canceled": "Arthas Tunnel 命令已終止", + "jvm.backend.diagnostic.arthas.command_timeout": "Arthas Tunnel 命令執行逾時,{{timeout}} 內未完成", + "jvm.backend.diagnostic.arthas.connect_canceled": "建立 Arthas Tunnel WebSocket 連線已終止", + "jvm.backend.diagnostic.arthas.connect_failed": "建立 Arthas Tunnel WebSocket 連線失敗:{{detail}}", + "jvm.backend.diagnostic.arthas.connect_timeout": "建立 Arthas Tunnel WebSocket 連線逾時,{{timeout}} 內未收到回應", + "jvm.backend.diagnostic.arthas.connection_closed": "Arthas Tunnel 連線已關閉:{{detail}}", + "jvm.backend.diagnostic.arthas.connection_closed_code": "Arthas Tunnel 連線已關閉:code={{code}}", + "jvm.backend.diagnostic.arthas.connection_not_ready": "Arthas Tunnel 連線尚未建立完成,請稍後重試", + "jvm.backend.diagnostic.arthas.http_failed": "Arthas Tunnel 連線失敗:HTTP {{status}}", + "jvm.backend.diagnostic.arthas.no_running_command": "目前 Arthas Tunnel 會話沒有正在執行的命令", + "jvm.backend.diagnostic.arthas.read_canceled": "讀取 Arthas Tunnel 輸出已終止", + "jvm.backend.diagnostic.arthas.read_deadline_failed": "Arthas Tunnel 讀取逾時設定失敗:{{detail}}", + "jvm.backend.diagnostic.arthas.read_failed": "讀取 Arthas Tunnel 輸出失敗:{{detail}}", + "jvm.backend.diagnostic.arthas.read_timeout": "讀取 Arthas Tunnel 輸出逾時,{{timeout}} 內未收到回應", + "jvm.backend.diagnostic.arthas.request_encode_failed": "Arthas Tunnel 請求編碼失敗:{{detail}}", + "jvm.backend.diagnostic.arthas.scheme_unsupported": "Arthas Tunnel 僅支援 http/https/ws/wss 位址:{{scheme}}", + "jvm.backend.diagnostic.arthas.send_canceled": "向 Arthas Tunnel 傳送終端指令已終止", + "jvm.backend.diagnostic.arthas.send_failed": "向 Arthas Tunnel 傳送終端指令失敗:{{detail}}", + "jvm.backend.diagnostic.arthas.send_timeout": "向 Arthas Tunnel 傳送終端指令逾時,{{timeout}} 內未收到回應", + "jvm.backend.diagnostic.arthas.session_config_changed": "Arthas Tunnel 會話設定已變更,請重新建立診斷會話", + "jvm.backend.diagnostic.arthas.session_missing": "診斷會話不存在,請重新建立 Arthas Tunnel 會話", + "jvm.backend.diagnostic.arthas.target_id_required": "Arthas Tunnel 需要填寫目標實例標識(targetId / agentId)", + "jvm.backend.diagnostic.arthas.target_not_found": "找不到目標實例,請確認 targetId / agentId 是否填寫正確,且對應 tunnel client 已上線", + "jvm.backend.diagnostic.arthas.target_not_found_with_id": "找不到目標實例 {{target}},請確認 targetId / agentId 是否填寫正確,且對應 tunnel client 已上線", + "jvm.backend.diagnostic.arthas.terminal_command_encode_failed": "Arthas Tunnel 終端指令編碼失敗:{{detail}}", + "jvm.backend.diagnostic.arthas.write_deadline_failed": "Arthas Tunnel 寫入逾時設定失敗:{{detail}}", + "jvm.backend.diagnostic.error.audit_write_blocked": "診斷稽核記錄寫入失敗,已阻止命令執行: {{detail}}", + "jvm.backend.diagnostic.error.cancel_identifiers_required": "取消命令缺少 sessionId 或 commandId", + "jvm.backend.diagnostic.error.command_required": "診斷命令不能為空", + "jvm.backend.diagnostic.error.disabled": "目前連線未啟用 JVM 診斷增強模式", + "jvm.backend.diagnostic.error.execute_canceled": "診斷執行請求已終止:{{detail}}", + "jvm.backend.diagnostic.error.session_id_required": "診斷會話 ID 不能為空,請先建立會話", + "jvm.backend.diagnostic.error.transport_unsupported": "不支援的 JVM 診斷傳輸模式:{{transport}}", + "jvm.backend.diagnostic.message.arthas_command_canceled": "Arthas 命令已終止", + "jvm.backend.diagnostic.message.arthas_command_completed": "Arthas 命令執行完成", + "jvm.backend.diagnostic.message.cancel_requested": "已傳送取消請求,等待診斷橋接端結束命令", + "jvm.backend.diagnostic.message.command_completed": "診斷命令執行完成", + "jvm.backend.diagnostic.policy.multiline_not_supported": "診斷命令不支援換行或多命令輸入", + "jvm.backend.diagnostic.policy.mutating_not_allowed": "目前連線未開放高風險診斷命令:{{command}}", + "jvm.backend.diagnostic.policy.observe_not_allowed": "目前連線未開放觀察類診斷命令:{{command}}", + "jvm.backend.diagnostic.policy.read_only_observe_only": "目前連線為唯讀模式,僅允許觀察類診斷命令", + "jvm.backend.diagnostic.policy.trace_not_allowed": "目前連線未開放追蹤類診斷命令:{{command}}", + "jvm.backend.diagnostic.warning.audit_write_failed": "稽核記錄寫入失敗: {{detail}}", + "jvm.backend.error.audit_write_blocked": "稽核記錄寫入失敗,已阻止 JVM 變更: {{detail}}", + "jvm.backend.error.change_action_required": "JVM 變更操作不能為空", + "jvm.backend.error.change_blocked_by_guard": "目前變更已被 Guard 攔截", + "jvm.backend.error.change_blocked_read_only": "目前連線為唯讀,禁止寫入", + "jvm.backend.error.change_confirmation_token_failed": "產生 JVM 變更確認權杖失敗: {{detail}}", + "jvm.backend.error.change_reason_required": "JVM 變更原因不能為空", + "jvm.backend.error.change_resource_id_required": "JVM 資源 ID 不能為空", + "jvm.backend.error.confirmation_token_expired": "確認權杖已過期,請重新預覽並確認", + "jvm.backend.error.confirmation_token_invalid": "確認權杖無效,請重新預覽並確認", + "jvm.backend.error.confirmation_token_missing": "缺少確認權杖,請先完成預覽確認", + "jvm.backend.error.disallowed_mode": "目前連線不允許使用 {{mode}} 模式", + "jvm.backend.error.preview_confirmation_missing": "預覽確認權杖缺失,請重新預覽後再提交", + "jvm.backend.error.preview_context_hash_failed": "產生 JVM 預覽上下文失敗: {{detail}}", + "jvm.backend.error.preview_payload_hash_failed": "產生 JVM 預覽 Payload 摘要失敗: {{detail}}", + "jvm.backend.error.resource_path_invalid": "JVM 資源路徑無效: {{detail}}", + "jvm.backend.message.connect_success": "JVM 連線成功", + "jvm.backend.monitoring.error.session_not_found": "找不到 {{connectionId}} {{providerMode}} 的 JVM 監控會話", + "jvm.backend.monitoring.error.snapshot_unsupported": "{{provider}} 監控快照暫未支援", + "jvm.backend.monitoring.warning.sample_auto_stopped": "監控採樣連續失敗 {{count}} 次,已自動停止本次監控會話", + "jvm.backend.separator.message_warning": ";", + "jvm.backend.warning.failed_audit_write_failed": "失敗稽核寫入失敗: {{detail}}", + "jvm.backend.warning.terminal_audit_write_failed": "終態稽核寫入失敗: {{detail}}", + "log_panel.action.clear": "清空記錄", + "log_panel.action.close": "關閉面板", + "log_panel.affected_rows": "影響列數:{{count}}", + "log_panel.column.duration": "耗時", + "log_panel.column.sql_message": "SQL / 訊息", + "log_panel.column.status": "狀態", + "log_panel.column.time": "時間", + "log_panel.description": "記錄執行狀態、耗時與錯誤資訊,方便快速回溯。", + "log_panel.empty": "暫無 SQL 執行記錄", + "log_panel.short_title": "日誌", + "log_panel.title": "SQL 執行記錄", + "message_publish_modal.action.send": "傳送", + "message_publish_modal.error.build_command_failed": "建構傳送命令失敗", + "message_publish_modal.error.send_failed_detail": "傳送失敗:{{detail}}", + "message_publish_modal.error.unknown_error": "未知錯誤", + "message_publish_modal.field.body_mode.label": "訊息體類型", + "message_publish_modal.field.body.extra": "JSON 模式下需輸入合法 JSON;文字模式會按原樣傳送。", + "message_publish_modal.field.body.label": "訊息體", + "message_publish_modal.field.body.placeholder": "請輸入訊息體", + "message_publish_modal.field.body.required": "請輸入訊息體", + "message_publish_modal.field.delay_level.extra": "RocketMQ 使用固定延時級別,0 表示立即傳送。", + "message_publish_modal.field.delay_level.label": "Delay Level(可選)", + "message_publish_modal.field.exchange.extra": "留空會使用預設交換機;若填寫自訂交換機,請確認目標 Queue 已建立 binding。", + "message_publish_modal.field.exchange.label": "Exchange(可選)", + "message_publish_modal.field.exchange.placeholder": "例如:events.topic", + "message_publish_modal.field.headers.extra": "需為 JSON 物件,例如 {{example}}。", + "message_publish_modal.field.headers.label": "Headers(可選)", + "message_publish_modal.field.properties.extra": "需為 JSON 物件,例如 {{example}}。", + "message_publish_modal.field.properties.label": "Properties(可選)", + "message_publish_modal.field.qos.extra": "0 為 at most once,1 為 at least once,2 為 exactly once。", + "message_publish_modal.field.retain.label": "Retain 訊息", + "message_publish_modal.field.routing_key.extra": "留空時預設使用目前 Queue 名稱。", + "message_publish_modal.field.routing_key.label": "Routing Key(可選)", + "message_publish_modal.field.routing_key.placeholder": "例如:orders.queue", + "message_publish_modal.field.tag.extra": "留空表示不篩選或不寫入 Tag。", + "message_publish_modal.field.tag.label": "Tag(可選)", + "message_publish_modal.footer.success_prefix": "傳送成功後會返回", + "message_publish_modal.footer.success_suffix": ",用於確認本次測試訊息是否已提交。", + "message_publish_modal.option.no_delay": "不延時", + "message_publish_modal.option.text": "文字", + "message_publish_modal.title": "測試傳送訊息", + "message_publish_modal.title_with_connection": "測試傳送訊息 · {{connectionName}}", + "message_publish.error.destination_required": "請輸入目標 Topic / Queue", + "message_publish.error.invalid_json_detail": "{{field}}不是合法 JSON:{{detail}}", + "message_publish.error.json_object_required": "{{field}} 必須是 JSON 物件", + "message_publish.error.mqtt_wildcard_topic": "MQTT 傳送 Topic 不能包含 + 或 # 萬用字元", + "message_publish.error.required_field": "請輸入{{field}}", + "message_publish.error.unsupported_type": "目前資料來源暫不支援測試傳送訊息:{{type}}", + "message_publish.field.body": "訊息體", + "message_publish.field.message_key": "訊息 Key", + "message_publish.presentation.kafka.alert": "目前表單會自動組裝 Kafka publish JSON 命令,並直接呼叫後端執行測試傳送。", + "message_publish.presentation.kafka.destination_placeholder": "例如:orders.events", + "message_publish.presentation.kafka.key_placeholder": "可留空;JSON 模式請輸入一行合法 JSON", + "message_publish.presentation.kafka.success_hint": "Headers 會作為 Kafka Record Headers 一併傳送。", + "message_publish.presentation.key_label": "訊息 Key(可選)", + "message_publish.presentation.keys_label": "訊息 Keys(可選)", + "message_publish.presentation.mqtt.alert": "目前表單會自動組裝 MQTT publish JSON 命令,並直接透過 broker 執行測試傳送。", + "message_publish.presentation.mqtt.destination_placeholder": "例如:devices/device-001/telemetry", + "message_publish.presentation.mqtt.success_hint": "QoS 與 retain 可分別指定;未填寫時沿用目前連線中的預設參數。", + "message_publish.presentation.rabbitmq.alert": "目前表單會自動組裝 RabbitMQ publish JSON 命令,並透過 Management API 執行測試傳送。", + "message_publish.presentation.rabbitmq.destination_placeholder": "例如:orders.queue", + "message_publish.presentation.rabbitmq.destination_required": "請輸入 Queue", + "message_publish.presentation.rabbitmq.success_hint": "Exchange 留空時會使用預設交換機,並以 Queue 名稱作為 routing key。", + "message_publish.presentation.rocketmq.alert": "目前表單會自動組裝 RocketMQ publish JSON 命令,並透過 NameServer/Broker 執行測試傳送。", + "message_publish.presentation.rocketmq.destination_placeholder": "例如:orders.events", + "message_publish.presentation.rocketmq.key_placeholder": "可輸入多個 Key,使用逗號分隔", + "message_publish.presentation.rocketmq.success_hint": "Tag、Keys、Delay Level 與 Properties 會一併寫入 RocketMQ 訊息屬性。", + "message_publish.presentation.rocketmq.tag_placeholder": "例如:TagA", + "message_publish.presentation.topic_required": "請輸入 Topic", + "proxy.backend.error.host_empty": "代理主機不可為空", + "proxy.backend.error.http_connect_failed": "連線至 HTTP 代理失敗:{{detail}}", + "proxy.backend.error.http_connect_read_failed": "讀取 HTTP CONNECT 回應失敗:{{detail}}", + "proxy.backend.error.http_connect_status_failed": "HTTP 代理 CONNECT 失敗:{{status}}", + "proxy.backend.error.http_connect_write_failed": "傳送 HTTP CONNECT 請求失敗:{{detail}}", + "proxy.backend.error.listen_failed": "建立本機代理監聽失敗:{{detail}}", + "proxy.backend.error.port_invalid": "代理連接埠無效:{{port}}", + "proxy.backend.error.remote_addr_invalid": "遠端位址無效:{{address}}", + "proxy.backend.error.socks5_connect_failed": "SOCKS5 代理連線失敗:{{detail}}", + "proxy.backend.error.socks5_dialer_failed": "建立 SOCKS5 代理撥號器失敗:{{detail}}", + "proxy.backend.error.unsupported_type": "不支援的代理類型:{{type}}", + "query_editor.action.ai_explain_sql": "AI 解釋 SQL", + "query_editor.action.ai_explain_sql_menu": "解釋 SQL", + "query_editor.action.ai_generate_sql": "AI 產生 SQL", + "query_editor.action.ai_generate_sql_menu": "產生 SQL", + "query_editor.action.ai_optimize_sql": "AI 最佳化 SQL", + "query_editor.action.ai_optimize_sql_menu": "最佳化 SQL", + "query_editor.action.ai_schema_analysis": "結構描述分析", + "query_editor.action.export_sql_file": "匯出 SQL 檔案", + "query_editor.action.format": "格式化", + "query_editor.action.format_sql": "格式化 SQL", + "query_editor.action.hide_results_panel": "隱藏結果區", + "query_editor.action.hide_results_panel_with_shortcut": "隱藏結果區({{shortcut}})", + "query_editor.action.more": "更多", + "query_editor.action.rename_query": "重新命名查詢", + "query_editor.action.resize_editor": "拖曳以調整高度", + "query_editor.action.results": "結果", + "query_editor.action.run": "執行", + "query_editor.action.run_with_shortcut": "執行({{shortcut}})", + "query_editor.action.save": "儲存", + "query_editor.action.save_with_shortcut": "儲存({{shortcut}})", + "query_editor.action.show_object_info": "查看物件資訊", + "query_editor.action.show_results_panel": "顯示結果區", + "query_editor.action.show_results_panel_with_shortcut": "顯示結果區({{shortcut}})", + "query_editor.action.stop": "停止", + "query_editor.ai_prompt.context": "內容:{{type}} {{name}},目前選取的資料庫為 {{database}}。\n", + "query_editor.ai_prompt.default_database": "預設", + "query_editor.ai_prompt.default_source": "資料庫", + "query_editor.ai_prompt.diagnose": "我在執行以下 SQL 時遇到錯誤:\n```sql\n{{sql}}\n```\n\n資料庫傳回的錯誤如下:\n```text\n{{error}}\n```\n\n請分析錯誤原因,並提出修正建議。", + "query_editor.ai_prompt.explain": "請解釋以下 SQL 陳述式的執行邏輯:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.generate": "請根據目前的資料庫結構產生查詢陳述式。", + "query_editor.ai_prompt.optimize": "請分析以下 SQL 陳述式的效能問題,並提出最佳化建議:\n```sql\n{{sql}}\n```", + "query_editor.ai_prompt.schema": "請分析目前的資料庫結構,並提出效能與設計上的改善建議。", + "query_editor.completion.action.absolute_value": "絕對值", + "query_editor.completion.action.approximate_distinct": "近似去重", + "query_editor.completion.action.approximate_distinct_count": "近似去重計數", + "query_editor.completion.action.approximate_percentile": "近似百分位", + "query_editor.completion.action.approximate_quantile": "近似分位數", + "query_editor.completion.action.array_aggregation": "陣列聚合", + "query_editor.completion.action.array_length": "陣列長度", + "query_editor.completion.action.average": "平均值", + "query_editor.completion.action.bitmap_aggregation": "Bitmap 彙總", + "query_editor.completion.action.bitmap_construction": "建立 Bitmap", + "query_editor.completion.action.bitmap_count": "Bitmap 計數", + "query_editor.completion.action.boolean_and_aggregation": "布林與彙總", + "query_editor.completion.action.boolean_or_aggregation": "布林或彙總", + "query_editor.completion.action.character_length": "字元長度", + "query_editor.completion.action.concat_with_separator": "帶分隔符串接", + "query_editor.completion.action.concatenation": "串接", + "query_editor.completion.action.condition_mapping": "條件映射", + "query_editor.completion.action.conditional_check": "條件判斷", + "query_editor.completion.action.count": "計數", + "query_editor.completion.action.current_database": "目前資料庫", + "query_editor.completion.action.current_date": "目前日期", + "query_editor.completion.action.current_date_time": "目前日期與時間", + "query_editor.completion.action.current_time": "目前時間", + "query_editor.completion.action.current_timestamp": "目前時間戳", + "query_editor.completion.action.current_user": "目前使用者", + "query_editor.completion.action.database_current_time": "資料庫目前時間", + "query_editor.completion.action.date_addition": "日期加法", + "query_editor.completion.action.date_conversion": "轉日期", + "query_editor.completion.action.date_difference": "日期差", + "query_editor.completion.action.date_field_extraction": "日期欄位擷取", + "query_editor.completion.action.date_formatting": "日期格式化", + "query_editor.completion.action.date_subtraction": "日期減法", + "query_editor.completion.action.date_truncation": "日期截斷", + "query_editor.completion.action.date_value": "日期", + "query_editor.completion.action.datetime_conversion": "轉日期時間", + "query_editor.completion.action.datetime_value": "日期時間", + "query_editor.completion.action.decimal_truncation": "截斷小數", + "query_editor.completion.action.dense_rank": "連續排名", + "query_editor.completion.action.distinct_array_aggregation": "去重陣列聚合", + "query_editor.completion.action.e_power": "e 的次方", + "query_editor.completion.action.elapsed_time": "經過時間", + "query_editor.completion.action.epoch_seconds": "時間戳秒數", + "query_editor.completion.action.exact_distinct": "精確去重", + "query_editor.completion.action.first_non_null": "回傳第一個非 NULL", + "query_editor.completion.action.first_value": "第一個值", + "query_editor.completion.action.format_as_text": "格式化為文字", + "query_editor.completion.action.group_concatenation": "分組串接", + "query_editor.completion.action.guid_generation": "產生 GUID", + "query_editor.completion.action.hexadecimal": "十六進位", + "query_editor.completion.action.high_precision_current_time": "高精度目前時間", + "query_editor.completion.action.hll_aggregation": "HLL 彙總", + "query_editor.completion.action.hll_hash": "HLL 雜湊", + "query_editor.completion.action.instant_rate_of_change": "瞬時變化率", + "query_editor.completion.action.int64_conversion": "轉 Int64", + "query_editor.completion.action.interpolation": "插值", + "query_editor.completion.action.json_string_extraction": "JSON 字串擷取", + "query_editor.completion.action.json_unquote": "JSON 去引號", + "query_editor.completion.action.json_value_extraction": "JSON 擷取", + "query_editor.completion.action.json_value_set": "JSON 設定", + "query_editor.completion.action.jsonb_path_extraction": "JSONB 路徑擷取", + "query_editor.completion.action.julian_day": "儒略日", + "query_editor.completion.action.last_insert_id": "最後插入 ID", + "query_editor.completion.action.last_row": "最後一列", + "query_editor.completion.action.last_value": "最後一個值", + "query_editor.completion.action.least_squares": "最小二乘", + "query_editor.completion.action.left_padding": "左填充", + "query_editor.completion.action.left_space_trimming": "去左空格", + "query_editor.completion.action.left_substring": "從左截取", + "query_editor.completion.action.length": "長度", + "query_editor.completion.action.list_aggregation": "清單聚合", + "query_editor.completion.action.list_unnest": "展開清單", + "query_editor.completion.action.log_base_10": "以 10 為底對數", + "query_editor.completion.action.log_base_2": "以 2 為底對數", + "query_editor.completion.action.logarithm": "對數", + "query_editor.completion.action.lowercase": "轉小寫", + "query_editor.completion.action.maximum": "最大值", + "query_editor.completion.action.md5_hash": "MD5 雜湊", + "query_editor.completion.action.minimum": "最小值", + "query_editor.completion.action.modulo": "取模", + "query_editor.completion.action.month_addition": "增加月份", + "query_editor.completion.action.month_difference": "月份差", + "query_editor.completion.action.month_end_date": "月末日期", + "query_editor.completion.action.next_row": "後一列", + "query_editor.completion.action.null_branch": "NULL 分支", + "query_editor.completion.action.null_if_equal": "相等回傳 NULL", + "query_editor.completion.action.null_replacement": "NULL 取代", + "query_editor.completion.action.number_conversion": "轉數字", + "query_editor.completion.action.number_formatting": "數字格式化", + "query_editor.completion.action.position_lookup": "查找位置", + "query_editor.completion.action.power_operation": "冪運算", + "query_editor.completion.action.previous_row": "前一列", + "query_editor.completion.action.quantile": "分位數", + "query_editor.completion.action.random_number": "隨機數", + "query_editor.completion.action.rank": "排名", + "query_editor.completion.action.rate_of_change": "變化率", + "query_editor.completion.action.regex_match": "正規表示式匹配", + "query_editor.completion.action.regex_replace": "正規表示式替換", + "query_editor.completion.action.replacement": "替換", + "query_editor.completion.action.right_padding": "右填充", + "query_editor.completion.action.right_space_trimming": "去右空格", + "query_editor.completion.action.right_substring": "從右截取", + "query_editor.completion.action.round_down": "向下取整", + "query_editor.completion.action.round_up": "向上取整", + "query_editor.completion.action.rounding": "四捨五入", + "query_editor.completion.action.row_number": "列號", + "query_editor.completion.action.set_lookup": "集合查找", + "query_editor.completion.action.sha1_hash": "SHA1 雜湊", + "query_editor.completion.action.sha2_hash": "SHA2 雜湊", + "query_editor.completion.action.space_trimming": "去空格", + "query_editor.completion.action.spread": "最大最小差", + "query_editor.completion.action.sql_literal": "SQL 字面量", + "query_editor.completion.action.square_root": "平方根", + "query_editor.completion.action.string_aggregation": "字串聚合", + "query_editor.completion.action.string_conversion": "轉字串", + "query_editor.completion.action.string_repetition": "重複字串", + "query_editor.completion.action.string_reversal": "字串反轉", + "query_editor.completion.action.string_to_date": "字串轉日期", + "query_editor.completion.action.string_to_timestamp": "字串轉時間戳", + "query_editor.completion.action.struct_construction": "建立結構體", + "query_editor.completion.action.substring_extraction": "截取子串", + "query_editor.completion.action.sum": "求和", + "query_editor.completion.action.time_difference": "時間差", + "query_editor.completion.action.time_value": "時間", + "query_editor.completion.action.time_weighted_average": "時間加權平均", + "query_editor.completion.action.timestamp_difference": "時間戳差", + "query_editor.completion.action.truncate_date_or_number": "截斷日期或數字", + "query_editor.completion.action.try_conversion": "嘗試轉換", + "query_editor.completion.action.type_conversion": "型別轉換", + "query_editor.completion.action.unix_time_to_datetime": "Unix 時間戳轉時間", + "query_editor.completion.action.unix_timestamp": "Unix 時間戳", + "query_editor.completion.action.uppercase": "轉大寫", + "query_editor.completion.action.uuid_generation": "產生 UUID", + "query_editor.completion.action.value_formatting": "格式化", + "query_editor.completion.action.version": "版本", + "query_editor.completion.detail.aggregate": "彙總函式", + "query_editor.completion.detail.aggregate_count": "彙總 - 計數", + "query_editor.completion.detail.conditional": "條件函式", + "query_editor.completion.detail.conditional_if": "條件 - IF", + "query_editor.completion.detail.conversion": "型別轉換函式", + "query_editor.completion.detail.conversion_cast": "轉換 - 型別轉換", + "query_editor.completion.detail.crypto_md5": "雜湊 - MD5", + "query_editor.completion.detail.date_now": "日期 - 目前日期與時間", + "query_editor.completion.detail.date_time": "日期與時間函式", + "query_editor.completion.detail.info": "資訊函式", + "query_editor.completion.detail.info_database": "資訊 - 目前資料庫", + "query_editor.completion.detail.json": "JSON 函式", + "query_editor.completion.detail.json_extract": "JSON - 擷取值", + "query_editor.completion.detail.math": "數學函式", + "query_editor.completion.detail.math_abs": "數學 - 絕對值", + "query_editor.completion.detail.modifier_distinct": "修飾 - 去除重複", + "query_editor.completion.detail.sql_function": "SQL 函式", + "query_editor.completion.detail.string": "字串函式", + "query_editor.completion.detail.string_concat": "字串 - 串接", + "query_editor.completion.detail.utility": "工具函式", + "query_editor.completion.detail.window": "視窗函式", + "query_editor.completion.detail.window_row_number": "視窗 - 列號", + "query_editor.completion.documentation.comment": "備註:{{comment}}", + "query_editor.empty_state.description": "執行查詢後,結果會在下方以新版資料網格顯示。", + "query_editor.empty_state.title": "等待執行 SQL", + "query_editor.format.keyword_lower": "關鍵字小寫", + "query_editor.format.keyword_upper": "關鍵字大寫", + "query_editor.format.restore_last_format": "還原上次美化", + "query_editor.format.shortcut_settings": "快捷鍵設定...", + "query_editor.format.snippet_settings": "程式碼片段管理...", + "query_editor.hover.open_function_with_shortcut": "{{shortcut}} + 點擊開啟該函式", + "query_editor.hover.open_materialized_view_with_shortcut": "{{shortcut}} + 點擊開啟該實體化檢視", + "query_editor.hover.open_procedure_with_shortcut": "{{shortcut}} + 點擊開啟該預存程序", + "query_editor.hover.open_table_with_shortcut": "{{shortcut}} + 點擊開啟該資料表", + "query_editor.hover.open_trigger_with_shortcut": "{{shortcut}} + 點擊開啟該觸發器", + "query_editor.hover.open_view_with_shortcut": "{{shortcut}} + 點擊開啟該檢視", + "query_editor.hover.switch_database_with_shortcut": "{{shortcut}} + 點擊切換到該資料庫", + "query_editor.max_rows.option_1000": "最大列數:1000", + "query_editor.max_rows.option_20000": "最大列數:20000", + "query_editor.max_rows.option_500": "最大列數:500", + "query_editor.max_rows.option_5000": "最大列數:5000", + "query_editor.max_rows.option_unlimited": "最大列數:不限", + "query_editor.max_rows.tooltip": "最大傳回列數。SELECT 陳述式會自動加上 LIMIT,避免過大的結果集造成介面停滯。", + "query_editor.message.append_success": "已附加程式碼。", + "query_editor.message.cancel_failed": "取消查詢失敗:{{error}}", + "query_editor.message.cancel_no_running": "沒有正在執行的查詢可取消。", + "query_editor.message.cancel_success": "查詢已終止。", + "query_editor.message.connection_not_found": "找不到連線。", + "query_editor.message.execution_failed_with_error": "查詢執行失敗:{{error}}", + "query_editor.message.execution_multi_success": "已執行 {{statements}} 個陳述式,並產生 {{results}} 個結果集。", + "query_editor.message.execution_result_sets_success": "執行完成,並產生 {{results}} 個結果集。", + "query_editor.message.execution_success": "執行成功。", + "query_editor.message.export_sql_file_failed": "匯出 SQL 檔案失敗:{{error}}", + "query_editor.message.export_sql_file_success": "SQL 檔案已匯出。", + "query_editor.message.format_failed": "格式化失敗:SQL 語法可能無效。", + "query_editor.message.format_restore_success": "已還原到美化前 SQL", + "query_editor.message.insert_success": "程式碼已插入目前游標位置。", + "query_editor.message.no_executable_sql": "沒有可執行的 SQL。", + "query_editor.message.no_format_restore_snapshot": "沒有可還原的美化前 SQL", + "query_editor.message.no_selectable_sql": "沒有可選取的 SQL 陳述式。", + "query_editor.message.object_info_target_not_found": "目前游標未定位到可識別的資料表或欄位。", + "query_editor.message.page_query_empty": "翻頁未傳回結果集", + "query_editor.message.page_query_failed": "翻頁失敗:{{error}}", + "query_editor.message.read_only_index_metadata_unavailable": "無法載入唯一索引中繼資料,無法安全提交修改。", + "query_editor.message.read_only_no_safe_locator": "未偵測到主鍵或可用唯一索引,無法安全提交修改。", + "query_editor.message.read_only_oracle_rowid_injection_unavailable": "Oracle 查詢使用 * 時無法自動注入 ROWID 定位欄,已維持唯讀。", + "query_editor.message.read_only_system_metadata": "系統中繼資料查詢結果維持唯讀。", + "query_editor.message.read_only_table_locator_metadata_unavailable": "無法載入 {{table}} 的主鍵/唯一索引中繼資料,無法安全提交修改。", + "query_editor.message.read_only_warning_with_detail": "查詢結果維持唯讀:{{detail}}", + "query_editor.message.refresh_failed": "重新整理失敗:{{error}}", + "query_editor.message.renamed": "查詢已重新命名。", + "query_editor.message.save_first_before_rename": "請先儲存查詢後再重新命名。", + "query_editor.message.save_query_failed": "儲存查詢失敗:{{error}}", + "query_editor.message.save_sql_file_failed": "儲存 SQL 檔案失敗:{{error}}", + "query_editor.message.saved": "查詢已儲存。", + "query_editor.message.select_database_first": "請先選擇資料庫。", + "query_editor.message.sql_file_saved": "SQL 檔案已儲存。", + "query_editor.message.statement_failed_prefix": "第 {{index}} 個陳述式執行失敗:", + "query_editor.message.unsupported_source": "此資料來源不支援 SQL 查詢編輯器。請改用其專用頁面。", + "query_editor.object_info.column": "欄位", + "query_editor.object_info.database": "資料庫", + "query_editor.object_info.label.database": "資料庫", + "query_editor.object_info.label.schema": "Schema", + "query_editor.object_info.label.separator": ":", + "query_editor.object_info.label.table": "資料表", + "query_editor.object_info.label.type": "類型", + "query_editor.object_info.materialized_view": "物化檢視", + "query_editor.object_info.table": "資料表", + "query_editor.placeholder.connection": "選擇連線", + "query_editor.placeholder.database": "選擇資料庫", + "query_editor.result.affected_rows": "受影響列數:{{count}}", + "query_editor.result.ai_diagnose": "AI 診斷", + "query_editor.result.close": "關閉結果", + "query_editor.result.execution_failed": "執行失敗", + "query_editor.result.execution_success": "執行成功", + "query_editor.result.tab_title": "結果 {{index}}({{count}})", + "query_editor.result.tab_title_success": "結果 {{index}} ✓", + "query_editor.results_panel.action.hide": "隱藏", + "query_editor.results_panel.aria.hide": "隱藏結果區", + "query_editor.results_panel.menu.close_all": "關閉所有", + "query_editor.results_panel.menu.close_left": "關閉左側", + "query_editor.results_panel.menu.close_other": "關閉其他頁", + "query_editor.results_panel.menu.close_right": "關閉右側", + "query_editor.results_panel.message.title": "執行訊息", + "query_editor.results_panel.panel.title": "結果區", + "query_editor.results_panel.tab.message": "訊息 {{index}}", + "query_editor.results_panel.tab.result": "結果 {{index}}", + "query_editor.results_panel.tooltip.hide": "隱藏結果區", + "query_editor.results_panel.tooltip.hide_with_shortcut": "隱藏結果區({{shortcut}})", + "query_editor.save_modal.name_label": "查詢名稱", + "query_editor.save_modal.name_placeholder": "例如:查詢所有使用者", + "query_editor.save_modal.name_required": "請輸入查詢名稱。", + "query_editor.save_modal.rename_ok": "重新命名", + "query_editor.save_modal.rename_title": "重新命名查詢", + "query_editor.save_modal.title": "儲存查詢", + "query_editor.save_modal.unnamed": "未命名查詢", + "query_editor.slash_command.diff.description": "比較資料表差異並產生變更", + "query_editor.slash_command.diff.label": "資料表比較", + "query_editor.slash_command.diff.prompt": "請比較這兩個資料表結構,並產生從舊版本遷移到新版本的 ALTER 陳述式。", + "query_editor.slash_command.explain.description": "解釋選取 SQL 的邏輯", + "query_editor.slash_command.explain.label": "解釋 SQL", + "query_editor.slash_command.explain.prompt": "請解釋以下 SQL 陳述式的執行邏輯:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.index.description": "建議索引策略", + "query_editor.slash_command.index.label": "索引建議", + "query_editor.slash_command.index.prompt": "請根據目前的資料表結構與常見查詢情境,建議索引策略,必要時附上 SQL。", + "query_editor.slash_command.mock.description": "產生 INSERT 測試資料", + "query_editor.slash_command.mock.label": "測試資料", + "query_editor.slash_command.mock.prompt": "請為相關資料表產生 10 筆具有合理業務語意的 INSERT 測試資料。", + "query_editor.slash_command.optimize.description": "分析 SQL 效能瓶頸", + "query_editor.slash_command.optimize.label": "最佳化分析", + "query_editor.slash_command.optimize.prompt": "請分析以下 SQL 陳述式的效能問題,並提出最佳化建議:\n```sql\n{{sql}}\n```", + "query_editor.slash_command.query.description": "描述你想查詢的內容", + "query_editor.slash_command.query.label": "自然語言查詢", + "query_editor.slash_command.query.prompt": "請為這個需求撰寫 SQL 查詢:", + "query_editor.slash_command.schema.description": "檢查資料表結構品質", + "query_editor.slash_command.schema.label": "資料表設計檢查", + "query_editor.slash_command.schema.prompt": "請檢查相關資料表的設計,包括欄位型別、正規化、索引與改善建議。", + "query_editor.slash_command.sql.description": "描述需求並產生陳述式", + "query_editor.slash_command.sql.label": "產生 SQL", + "query_editor.slash_command.sql.prompt": "請根據以下需求產生 SQL:", "query_editor.sql_error.rule.column_missing.explanation": "SQL 引用了結果集中不存在、拼寫不一致或目前表沒有的欄位。", "query_editor.sql_error.rule.column_missing.label": "欄位不存在", "query_editor.sql_error.rule.column_missing.suggestion": "檢查欄位名、別名、大小寫、引用表別名,以及欄位是否屬於目前 FROM/JOIN 的物件。", @@ -7151,10 +6053,198 @@ "query_editor.sql_error.wrapper.raw_line": "原始錯誤:{{error}}", "query_editor.sql_error.wrapper.semantic_line": "中文語義:{{label}}。{{explanation}}", "query_editor.sql_error.wrapper.suggestion_line": "處理建議:{{suggestion}}", + "query_editor.transaction.action.commit": "提交", + "query_editor.transaction.action.commit_with_count": "提交 ({{count}})", + "query_editor.transaction.action.rollback": "回滾", + "query_editor.transaction.delay.immediate": "立即", + "query_editor.transaction.message.pending_managed_transaction": "目前 SQL 編輯器已有未提交交易,請先提交或回滾後再執行新的新增、更新或刪除語句。", + "query_editor.transaction.mode.auto": "自動", + "query_editor.transaction.mode.manual": "手動", + "query_editor.transaction.mode.tooltip": "參考 DBeaver:SQL 編輯器執行 INSERT/UPDATE/DELETE/MERGE/REPLACE 等 DML 時,會先進入 GoNavi 代管交易;手動提交需要自行提交/回滾,自動提交會在執行成功後自動 COMMIT。", + "query_editor.transaction.status.auto_commit_countdown": "{{seconds}}s 後自動提交", + "query_editor.transaction.status.auto_committing": "自動提交中", + "query.format": "格式化 SQL", + "query.new": "新增查詢", + "query.run": "執行", + "query.save": "儲存查詢", + "query.stop": "停止", + "redis_command.action.clear_console": "清空控制台", + "redis_command.action.execute": "執行(Cmd+Enter)", + "redis_command.completion.detail": "Redis 命令", + "redis_command.message.command_required": "請輸入要執行的命令", + "redis_command.output.empty_hint": "在此控制台執行命令,結果會依返回內容顯示。", + "redis_command.output.selection_tip": "提示:選取任意行後按 Ctrl + Enter,僅執行所選內容。", + "redis_command.output.title": "執行輸出", + "redis_command.state.connection_not_found": "找不到連線", + "redis_command.title.console": "Redis 控制台", + "redis_monitor.action.pause_refresh": "暫停重新整理", + "redis_monitor.action.refresh_now": "立即重新整理", + "redis_monitor.action.resume_refresh": "繼續重新整理", + "redis_monitor.chart.clients_keys": "連線資訊(用戶端與 Keys)", + "redis_monitor.chart.cpu_usage": "CPU 使用率", + "redis_monitor.chart.memory": "記憶體開銷", + "redis_monitor.chart.qps": "請求吞吐量(QPS)", + "redis_monitor.message.fetch_failed": "取得 Redis 資訊失敗:{{detail}}", + "redis_monitor.metric.blocked_clients": "阻塞:{{value}}", + "redis_monitor.metric.clients": "用戶端", + "redis_monitor.metric.days": "天數:{{value}}", + "redis_monitor.metric.memory_peak": "峰值:{{value}}", + "redis_monitor.metric.memory_used": "已用記憶體", + "redis_monitor.metric.ops": "吞吐量(OPS)", + "redis_monitor.metric.uptime": "執行時間", + "redis_monitor.series.clients": "用戶端", + "redis_monitor.series.rss_memory": "RSS 記憶體", + "redis_monitor.series.system": "系統", + "redis_monitor.series.total_keys": "Key 總數", + "redis_monitor.series.used_memory": "已用記憶體", + "redis_monitor.series.user": "使用者", + "redis_monitor.server_details.title": "伺服器詳細參數", + "redis_monitor.state.connection_not_found": "找不到連線", + "redis_monitor.title.instance": "Redis 執行個體監控", + "redis_viewer.action.add_field": "新增欄位", + "redis_viewer.action.add_list_head": "推入頭部", + "redis_viewer.action.add_list_tail": "推入尾部", + "redis_viewer.action.add_member": "新增成員", + "redis_viewer.action.add_stream_entry": "新增項目", + "redis_viewer.action.clear_group_selection": "清除選取", + "redis_viewer.action.clear_selection": "清除選取", + "redis_viewer.action.copy": "複製", + "redis_viewer.action.copy_key_name": "複製 Key 名稱", + "redis_viewer.action.copy_value": "複製值", + "redis_viewer.action.delete_key": "刪除 Key", + "redis_viewer.action.delete_selected": "刪除已選項目({{count}})", + "redis_viewer.action.edit": "編輯", + "redis_viewer.action.load_more": "載入更多", + "redis_viewer.action.new_key": "新增", + "redis_viewer.action.refresh": "重新整理", + "redis_viewer.action.rename_key": "重新命名 Key", + "redis_viewer.action.select_all_loaded": "全選已載入", + "redis_viewer.action.select_group": "選取", + "redis_viewer.action.set_ttl": "設定 TTL", + "redis_viewer.aria.collapse_group": "收合群組", + "redis_viewer.aria.expand_group": "展開群組", + "redis_viewer.confirm.delete_field": "要刪除此欄位嗎?", + "redis_viewer.confirm.delete_key": "要刪除 Key \"{{key}}\" 嗎?", + "redis_viewer.confirm.delete_member": "要刪除此成員嗎?", + "redis_viewer.confirm.delete_selected": "要刪除選取的 {{count}} 個 Key 嗎?", + "redis_viewer.confirm.delete_stream_entry": "要刪除此 Stream 項目嗎?", + "redis_viewer.field.field_name": "欄位名稱", + "redis_viewer.field.fields_json": "欄位 JSON:", + "redis_viewer.field.key": "Key", + "redis_viewer.field.member": "成員:", + "redis_viewer.field.new_key_name": "新 Key 名稱", + "redis_viewer.field.new_score": "新分數:", + "redis_viewer.field.score": "分數:", + "redis_viewer.field.stream_id": "ID(選填,預設 *):", + "redis_viewer.field.ttl_seconds": "TTL(秒)", + "redis_viewer.field.value": "值", + "redis_viewer.help.ttl_forever": "-1 表示永不過期", + "redis_viewer.hint.binary_readonly": "二進位資料無法編輯", + "redis_viewer.hint.switch_auto_to_edit": "切換到 Auto 模式後即可編輯", + "redis_viewer.label.encoding": "編碼:{{encoding}}", + "redis_viewer.label.keys_count": "{{count}} 個 Key", + "redis_viewer.label.length": "長度:{{count}}", + "redis_viewer.label.node_count": "{{count}} 個節點", + "redis_viewer.label.original_key": "原 Key:{{key}}", + "redis_viewer.message.add_failed": "新增失敗:{{detail}}", + "redis_viewer.message.add_success": "已新增", + "redis_viewer.message.add_success_with_id": "已新增 {{id}}", + "redis_viewer.message.copied": "已複製", + "redis_viewer.message.copy_failed": "複製失敗", + "redis_viewer.message.create_failed": "建立失敗:{{detail}}", + "redis_viewer.message.create_success": "已建立", + "redis_viewer.message.delete_failed": "刪除失敗:{{detail}}", + "redis_viewer.message.delete_success": "已刪除", + "redis_viewer.message.deleted_keys": "已刪除 {{count}} 個 Key", + "redis_viewer.message.fields_json_invalid": "欄位 JSON 無效", + "redis_viewer.message.fields_must_be_json_object": "欄位必須是 JSON 物件", + "redis_viewer.message.fields_required": "請至少提供一個欄位", + "redis_viewer.message.key_check_failed": "檢查目標 Key 失敗:{{detail}}", + "redis_viewer.message.key_missing_removed": "Key 已不存在或已過期,已從清單移除", + "redis_viewer.message.key_name_copied": "Key 名稱已複製", + "redis_viewer.message.load_keys_failed": "載入 Key 失敗:{{detail}}", + "redis_viewer.message.new_key_name_required": "請輸入新的 Key 名稱", + "redis_viewer.message.rename_failed": "重新命名失敗:{{detail}}", + "redis_viewer.message.rename_same_key": "新的 Key 名稱必須與原名稱不同", + "redis_viewer.message.rename_success": "Key 已重新命名", + "redis_viewer.message.save_failed": "儲存失敗:{{detail}}", + "redis_viewer.message.save_success": "已儲存", + "redis_viewer.message.set_failed": "設定失敗:{{detail}}", + "redis_viewer.message.stream_entry_not_deleted": "未刪除任何 Stream 項目,可能已不存在", + "redis_viewer.message.target_key_exists": "目標 Key 已存在:{{key}}", + "redis_viewer.message.ttl_set_success": "TTL 已更新", + "redis_viewer.message.update_failed": "更新失敗:{{detail}}", + "redis_viewer.message.update_success": "已更新", + "redis_viewer.message.value_load_failed": "取得值失敗:{{detail}}", + "redis_viewer.modal.add_element": "新增元素", + "redis_viewer.modal.add_element_head": "向頭部新增元素", + "redis_viewer.modal.add_field": "新增欄位", + "redis_viewer.modal.add_member": "新增成員", + "redis_viewer.modal.add_stream_entry": "新增 Stream 項目", + "redis_viewer.modal.edit_field": "編輯欄位:{{field}}", + "redis_viewer.modal.edit_index": "編輯索引 {{index}}", + "redis_viewer.modal.edit_value": "編輯值", + "redis_viewer.modal.new_key": "新增 Key", + "redis_viewer.modal.rename_key": "重新命名 Key", + "redis_viewer.modal.set_ttl": "設定 TTL", + "redis_viewer.modal.update_score": "更新分數", + "redis_viewer.notice.large_keyspace_mode": "大型 Keyspace 效能模式已啟用。節點渲染已簡化,最多保留 {{count}} 個展開群組。", + "redis_viewer.placeholder.key_name": "Key 名稱", + "redis_viewer.placeholder.member_value": "輸入成員值", + "redis_viewer.placeholder.new_element_value": "輸入新元素值", + "redis_viewer.placeholder.new_key_name": "new:key:name", + "redis_viewer.placeholder.new_member_value": "輸入新成員值", + "redis_viewer.placeholder.search_exact": "輸入完整 Key 或命名空間進行精確搜尋", + "redis_viewer.placeholder.search_fuzzy": "搜尋 Key(模糊比對)", + "redis_viewer.placeholder.stream_id": "例如:* 或 1723110000000-0", + "redis_viewer.placeholder.value": "值", + "redis_viewer.search.exact": "精確", + "redis_viewer.search.fuzzy": "模糊", + "redis_viewer.state.connection_not_found": "找不到連線", + "redis_viewer.state.empty_selection": "選取一個 Key 以查看詳細資料", + "redis_viewer.table.action": "操作", + "redis_viewer.table.field": "欄位", + "redis_viewer.table.fields": "欄位", + "redis_viewer.table.index": "索引", + "redis_viewer.table.member": "成員", + "redis_viewer.table.score": "分數", + "redis_viewer.table.value": "值", + "redis_viewer.title.active_key": "目前 Key", + "redis_viewer.title.key_explorer": "Key 瀏覽器", + "redis_viewer.title.namespace_key": "命名空間 / Key", + "redis_viewer.title.type_ttl": "類型 / TTL", + "redis_viewer.tooltip.copy_fields_json": "複製欄位 JSON", + "redis_viewer.tooltip.copy_id": "複製 ID", + "redis_viewer.tooltip.copy_key_name": "複製 Key 名稱", + "redis_viewer.tooltip.copy_value": "複製值", + "redis_viewer.tooltip.resize_panels": "拖曳以調整大小", + "redis_viewer.topology.cluster": "Cluster", + "redis_viewer.topology.sentinel": "Sentinel", + "redis_viewer.topology.single": "單機", + "redis_viewer.ttl.days_hours": "{{days}} 天 {{hours}} 小時", + "redis_viewer.ttl.expired": "已過期", + "redis_viewer.ttl.forever": "永久", + "redis_viewer.ttl.hours_minutes": "{{hours}} 小時 {{minutes}} 分鐘", + "redis_viewer.ttl.minutes_seconds": "{{minutes}} 分鐘 {{seconds}} 秒", + "redis_viewer.ttl.seconds": "{{seconds}} 秒", + "redis_viewer.validation.key_required": "請輸入 Key", + "redis_viewer.validation.new_key_name_required": "請輸入新的 Key 名稱", + "redis_viewer.validation.value_required": "請輸入值", + "redis_viewer.view.auto": "Auto", + "redis_viewer.view.hex": "Hex", + "redis_viewer.view.text": "原始文字", + "redis_viewer.view.title": "檢視模式", + "redis.backend.error.address_required": "Redis 連線地址不能為空", + "redis.backend.error.argument_invalid_type": "{{name}} 類型無效", + "redis.backend.error.argument_required": "{{name}} 不能為空", "redis.backend.error.cluster_connect_failed": "Redis 叢集連線失敗:{{detail}}", + "redis.backend.error.command_required": "命令不能為空", "redis.backend.error.connect_attempt_failed": "第 {{attempt}} 次連線失敗:{{detail}}", "redis.backend.error.connect_failed": "Redis 連線失敗:{{detail}}", "redis.backend.error.connect_tls_setup_failed": "第 {{attempt}} 次 TLS 設定失敗:{{detail}}", + "redis.backend.error.invalid_node_address": "無效 Redis 節點地址:{{address}}", + "redis.backend.error.invalid_port": "無效 Redis 連接埠:{{address}}", + "redis.backend.error.node_address_required": "Redis 節點地址不能為空", "redis.backend.error.select_db_index_invalid": "無效資料庫索引:{{value}}", "redis.backend.error.select_db_index_out_of_range": "資料庫索引必須在 {{min}}-{{max}} 之間", "redis.backend.error.select_db_index_required": "SELECT 命令需要提供資料庫索引", @@ -7165,13 +6255,144 @@ "redis.backend.label.topology_cluster": "叢集", "redis.backend.label.topology_multi_node": "多節點", "redis.backend.label.topology_sentinel": "Sentinel", + "redis.backend.message.add_success": "新增成功", + "redis.backend.message.connect_success": "連線成功", + "redis.backend.message.delete_success": "刪除成功", + "redis.backend.message.flush_success": "清空成功", + "redis.backend.message.rename_success": "重新命名成功", + "redis.backend.message.select_db_success": "切換成功", + "redis.backend.message.set_success": "設定成功", + "redis.db_alias.menu.set": "設定別名", + "redis.db_alias.modal.placeholder": "例如:快取、工作階段(留空則清除)", + "redis.db_alias.modal.title": "{{db}} 的別名", + "saved_query.default_name": "查詢-{{index}}", "saved_query.error.missing_context": "儲存查詢缺少 SQL、連線或資料庫上下文", + "security_update.action.open_ai_settings": "AI 設定", + "security_update.action.open_connection": "開啟連線", + "security_update.action.open_proxy_settings": "代理設定", + "security_update.action.retry_update": "重新檢查", + "security_update.action.view_details": "檢視詳細資訊", + "security_update.backend.issue.ai_provider.migration_required": "AI 供應商設定仍儲存在目前應用程式設定中,完成安全更新後會移至新的安全儲存。", + "security_update.backend.issue.ai_provider.missing_or_resave": "AI 供應商設定已不存在,或仍需重新儲存後才能完成安全更新。", + "security_update.backend.issue.ai_provider.secret_missing": "AI 供應商設定需要補充後才能完成安全更新。", + "security_update.backend.issue.connection.incomplete": "連線設定仍需補充後才能完成安全更新。", + "security_update.backend.issue.connection.missing_or_resave": "連線設定已不存在,或仍需重新儲存後才能完成安全更新。", + "security_update.backend.issue.connection.password_missing": "連線密碼已遺失,請重新儲存後再繼續。", + "security_update.backend.issue.global_proxy.missing_or_resave": "全域代理設定已不存在,或仍需重新儲存後才能完成安全更新。", + "security_update.backend.issue.global_proxy.password_incomplete": "全域代理密碼仍需補充後才能完成安全更新。", + "security_update.backend.issue.global_proxy.password_missing": "全域代理密碼已遺失,請重新儲存後再繼續。", + "security_update.backend.issue.global_proxy.title": "全域代理", + "security_update.backend.issue.system.message": "目前環境無法完成本次安全更新,請稍後重試。", + "security_update.backend.issue.system.title": "安全更新未完成", + "security_update.banner.action.restart_update": "重新開始更新", + "security_update.banner.action.retry_check": "重新檢查", + "security_update.banner.action.start_now": "立即更新", + "security_update.banner.action.view_details": "檢視詳細資訊", + "security_update.banner.title": "已儲存設定可進行安全更新", + "security_update.bootstrap.legacy.connection.message": "此連線仍保存在目前應用程式的本機設定中,完成安全更新後會遷入新的安全儲存。", + "security_update.bootstrap.legacy.global_proxy.message": "全域代理仍保存在目前應用程式的本機設定中,完成安全更新後會遷入新的安全儲存。", + "security_update.bootstrap.legacy.global_proxy.title": "全域代理", + "security_update.error.capability_unavailable": "安全更新能力無法使用", + "security_update.intro.action.details": "檢視詳細資訊", + "security_update.intro.action.later": "稍後提醒我", + "security_update.intro.action.start_now": "立即更新", + "security_update.intro.description": "為了讓已儲存的連線、代理與相關服務設定使用新的安全儲存方式,本次更新需要進行一次本機設定更新。更新前會自動建立本機備份;如果本次未完成,系統會保留目前可用設定,你也可以稍後繼續。", + "security_update.intro.subtitle": "使用新的安全儲存方式前,需要先完成一次本機設定更新。", + "security_update.intro.title": "已儲存設定安全更新", + "security_update.item_status.failed": "失敗", + "security_update.item_status.needs_attention": "待處理", + "security_update.item_status.pending": "待更新", + "security_update.item_status.skipped": "已略過", + "security_update.item_status.updated": "已更新", + "security_update.progress.default_detail": "更新過程中會保留目前可用設定,請稍候。", + "security_update.repair.warning.connection_not_found": "找不到對應連線,請先重新檢查最新狀態", + "security_update.settings.action.close": "關閉", + "security_update.settings.action.restart_update": "重新開始更新", + "security_update.settings.action.retry_check": "重新檢查", + "security_update.settings.action.start": "開始更新", + "security_update.settings.backup_path": "備份位置:", + "security_update.settings.current_status": "目前狀態:{{status}}", + "security_update.settings.empty_pending": "目前沒有待處理項目", + "security_update.settings.item_default_message": "目前項目需要進一步處理後才能完成安全更新。", + "security_update.settings.item_severity": "層級:{{severity}}", + "security_update.settings.item_status": "狀態:{{status}}", + "security_update.settings.last_error": "最近錯誤:", + "security_update.settings.pending_list": "待處理清單", + "security_update.settings.recent_result": "最近一次結果", + "security_update.settings.scope_title": "影響範圍", + "security_update.settings.subtitle": "管理已儲存設定的安全更新狀態與待處理項目。", + "security_update.settings.summary.failed": "失敗", + "security_update.settings.summary.pending": "待處理", + "security_update.settings.summary.skipped": "已略過", + "security_update.settings.summary.total": "總計", + "security_update.settings.summary.updated": "已更新", + "security_update.settings.title": "安全更新", + "security_update.severity.high": "高風險", + "security_update.severity.low": "低風險", + "security_update.severity.medium": "中風險", + "security_update.status.completed.description": "已儲存設定已完成安全更新。", + "security_update.status.completed.label": "已完成", + "security_update.status.in_progress.description": "正在檢查並更新已儲存設定的安全儲存。", + "security_update.status.in_progress.label": "更新中", + "security_update.status.needs_attention.description": "更新尚未完成,有少量設定需要你處理。", + "security_update.status.needs_attention.label": "待處理", + "security_update.status.not_detected.description": "目前沒有需要處理的安全更新。", + "security_update.status.not_detected.label": "未偵測到", + "security_update.status.pending.description": "偵測到可進行的安全更新,你可以現在開始或稍後繼續。", + "security_update.status.pending.label": "待更新", + "security_update.status.postponed.description": "本次安全更新已延後,目前可用設定會繼續保留。", + "security_update.status.postponed.label": "待更新", + "security_update.status.rolled_back.description": "本次更新未完成,系統已保留目前可用設定。", + "security_update.status.rolled_back.label": "已復原", + "settings.language.description": "選擇 GoNavi 的介面語言。", + "settings.language.english": "English", + "settings.language.follow_system": "跟隨系統", + "settings.language.german": "Deutsch", + "settings.language.japanese": "日本語", + "settings.language.restart_hint": "部分編輯器和系統級選單可能需要重新開啟視窗後才會完全生效。", + "settings.language.russian": "Русский", + "settings.language.simplified_chinese": "简体中文", + "settings.language.title": "語言", + "settings.language.traditional_chinese": "繁體中文", + "settings.title": "設定", + "sidebar.action.backup_database_count": "備份資料庫({{count}})", + "sidebar.action.backup_schema_data": "備份(結構+資料)", + "sidebar.action.batch_databases": "批次處理資料庫", + "sidebar.action.batch_tables": "批次處理資料表", + "sidebar.action.cancel": "取消", + "sidebar.action.clear_selection": "取消全選", + "sidebar.action.clear_tables": "清除資料表", + "sidebar.action.close": "關閉", + "sidebar.action.continue": "繼續", + "sidebar.action.delete": "刪除", + "sidebar.action.export_data_only": "僅資料(INSERT)", + "sidebar.action.export_database_schema_count": "匯出資料庫結構({{count}})", + "sidebar.action.export_schema": "匯出結構", + "sidebar.action.invert_selection": "反向選取", "sidebar.action.locate_current_tab": "定位目前分頁", + "sidebar.action.locate_current_table": "定位目前開啟的表", + "sidebar.action.new_group": "新增群組", + "sidebar.action.pin_table": "置頂資料表", + "sidebar.action.select_all": "全選", + "sidebar.action.unpin_table": "取消置頂", + "sidebar.active_connection.actions": "連線操作", + "sidebar.active_connection.current_host_database": "目前 Host 與資料庫", + "sidebar.active_connection.no_database_selected": "未選擇資料庫", + "sidebar.active_connection.no_host_selected": "未選擇 Host", "sidebar.ai_prompt.explain.detail": "請重點說明欄位含義、主鍵/索引、潛在關聯、典型查詢場景與風險點。", "sidebar.ai_prompt.explain.intro": "請解釋資料表 {{table}} 的結構和業務含義。", "sidebar.ai_prompt.query.detail": "需包含:資料預覽查詢、依關鍵欄位篩選查詢,以及一個彙總或統計查詢。", "sidebar.ai_prompt.query.intro": "請基於資料表 {{table}} 產生 3 條常用查詢 SQL。", "sidebar.aria.switch_connection": "切換到連線 {{name}}", + "sidebar.badge.recommended": "推薦", + "sidebar.batch_databases": "資料庫", + "sidebar.batch_tables": "資料表", + "sidebar.batch.filtered_count": "已篩選 {{filtered}} / {{total}} 個物件", + "sidebar.batch.group.tables": "資料表", + "sidebar.batch.group.views": "檢視", + "sidebar.batch.no_matching_objects": "沒有符合的物件", + "sidebar.batch.selected_databases": "已選擇 {{selected}} / {{total}} 個資料庫", + "sidebar.batch.selected_objects": "已選擇 {{selected}} / {{total}} 個物件", "sidebar.command_search.action.ask_ai.title": "讓 AI 回答", "sidebar.command_search.action.new_connection.meta": "建立資料庫、執行階段或其他資料來源連線", "sidebar.command_search.action.new_connection.title": "新增資料來源", @@ -7187,49 +6408,480 @@ "sidebar.command_search.footer.navigate": "導覽", "sidebar.command_search.footer.object_only": "只搜尋表物件", "sidebar.command_search.footer.select": "選擇", + "sidebar.command_search.label": "搜尋表、連線、動作", + "sidebar.command_search.no_filter_content": "沒有篩選內容", + "sidebar.command_search.no_synced_filter": "沒有已同步的側欄篩選", + "sidebar.command_search.object_kind.all": "全部", + "sidebar.command_search.object_kind.events": "事件", + "sidebar.command_search.object_kind.filter_aria": "物件篩選", + "sidebar.command_search.object_kind.routines": "函式", + "sidebar.command_search.object_kind.tables": "表格", + "sidebar.command_search.object_kind.views": "檢視", + "sidebar.command_search.placeholder": "搜尋表、連線、動作... 或問 AI", "sidebar.command_search.recent_sql_fallback": "SQL 記錄", + "sidebar.command_search.reset_filter": "重設側欄篩選", + "sidebar.command_search.scope.compact_smart": "智", + "sidebar.command_search.scope.database": "資料庫", + "sidebar.command_search.scope.description": "「智慧」會自動匹配最可能的命中項;手動模式支援按維度組合篩選。", + "sidebar.command_search.scope.host": "Host", + "sidebar.command_search.scope.manual_help": "智慧與其他項互斥。若你明確知道要搜的是物件、資料庫、Host 或標籤,建議切到手動範圍以減少雜訊結果。", + "sidebar.command_search.scope.manual_title": "手動範圍", + "sidebar.command_search.scope.multi_select": "支援多選組合", + "sidebar.command_search.scope.object": "表物件", + "sidebar.command_search.scope.recommended": "推薦", + "sidebar.command_search.scope.smart": "智慧", + "sidebar.command_search.scope.smart_help": "適合日常檢索,自動涵蓋名稱、資料庫、Host 和標籤等高頻維度。", + "sidebar.command_search.scope.summary_smart": "智慧", + "sidebar.command_search.scope.tag": "標籤", + "sidebar.command_search.scope.title": "搜尋範圍", + "sidebar.command_search.scope.tooltip": "搜尋範圍:{{scope}}", "sidebar.command_search.section.actions": "動作", "sidebar.command_search.section.ai": "AI · 提問", "sidebar.command_search.section.goto": "跳轉", "sidebar.command_search.section.recent": "近期查詢", + "sidebar.command_search.sync_to_filter_aria": "同步到左側篩選", + "sidebar.command_search.sync_to_filter_tooltip": "同步輸入內容到左側篩選", + "sidebar.copy_object_name.copied": "{{label}}已複製到剪貼簿", + "sidebar.copy_object_name.empty": "{{label}}為空,無法複製", + "sidebar.copy_object_name.failed": "複製{{label}}失敗:{{error}}", + "sidebar.copy_object_name.label.event": "事件名稱", + "sidebar.copy_object_name.label.materialized_view": "物化檢視名稱", + "sidebar.copy_object_name.label.table": "資料表名稱", + "sidebar.copy_object_name.label.view": "檢視名稱", + "sidebar.error.unknown": "未知錯誤", + "sidebar.external_sql_modal.action.create": "新增", + "sidebar.external_sql_modal.action.rename": "重新命名", + "sidebar.external_sql_modal.field.directory_name": "目錄名稱", + "sidebar.external_sql_modal.field.sql_file_name": "SQL 檔案名稱", + "sidebar.external_sql_modal.help.directory": "目錄只會顯示在外部 SQL 目錄樹中,非 SQL 檔案仍不會顯示", + "sidebar.external_sql_modal.help.sql_file": "未輸入 .sql 後綴時會自動補齊", + "sidebar.external_sql_modal.placeholder.directory_name": "例如:reports", + "sidebar.external_sql_modal.placeholder.sql_file_name": "例如:report.sql", + "sidebar.external_sql_modal.title.create_directory": "新增目錄", + "sidebar.external_sql_modal.title.create_file": "新增 SQL 檔案", + "sidebar.external_sql_modal.title.rename_directory": "重新命名目錄", + "sidebar.external_sql_modal.title.rename_file": "重新命名 SQL 檔案", + "sidebar.external_sql_modal.validation.directory_name_no_separator": "目錄名稱不能包含路徑分隔符", + "sidebar.external_sql_modal.validation.directory_name_required": "請輸入目錄名稱", + "sidebar.external_sql_modal.validation.sql_file_name_no_separator": "檔案名稱不能包含路徑分隔符", + "sidebar.external_sql_modal.validation.sql_file_name_required": "請輸入 SQL 檔案名稱", + "sidebar.external_sql.directory_fallback": "SQL 目錄", + "sidebar.external_sql.root": "外部 SQL 檔案", + "sidebar.field.database_name": "資料庫名稱", + "sidebar.field.new_database_name": "新資料庫名稱", + "sidebar.field.new_table_name": "新資料表名稱", + "sidebar.field.new_view_name": "新檢視名稱", + "sidebar.field.schema_name": "模式名稱", + "sidebar.field.select_connection": "選擇連線", + "sidebar.field.select_connections": "選擇連線", + "sidebar.field.select_database": "選擇資料庫", + "sidebar.field.tag_name": "分組名稱", + "sidebar.filter.all_objects": "全部物件", + "sidebar.filter.scope_all": "勾選作用於:全部物件", + "sidebar.filter.scope_filtered": "勾選作用於:目前篩選結果", + "sidebar.filter.tables_only": "僅資料表", + "sidebar.filter.views_only": "僅檢視", + "sidebar.jvm.action.diagnostic": "診斷增強", + "sidebar.jvm.action.monitoring": "持續監控", + "sidebar.jvm.tab.audit": "JVM 稽核", + "sidebar.jvm.tab.diagnostic": "JVM 診斷", + "sidebar.jvm.tab.monitoring": "JVM 監控", + "sidebar.jvm.tab.overview": "JVM 概覽", + "sidebar.jvm.tab.resource": "JVM 資源", + "sidebar.locate.object.materialized_view": "物化檢視", + "sidebar.locate.object.routine": "函式/預存程序", + "sidebar.locate.object.table": "資料表", + "sidebar.locate.object.trigger": "觸發器", + "sidebar.locate.object.view": "檢視", + "sidebar.menu.add_sql_directory": "新增 SQL 目錄", + "sidebar.menu.backup_all_tables_sql": "備份全部資料表(結構和資料 SQL)", "sidebar.menu.backup_current_schema_sql": "備份目前模式全部資料表(結構和資料 SQL)", + "sidebar.menu.backup_table_sql": "備份資料表(SQL)", "sidebar.menu.bind_to_connection": "綁定到連線", + "sidebar.menu.browse_keys": "瀏覽鍵", + "sidebar.menu.browse_materialized_view_data": "瀏覽物化檢視資料", + "sidebar.menu.browse_view_data": "瀏覽檢視資料", + "sidebar.menu.clear_table": "清除資料表", + "sidebar.menu.close_database": "關閉資料庫", "sidebar.menu.copy_object_name": "複製名稱", "sidebar.menu.copy_table_name": "複製資料表名稱", + "sidebar.menu.copy_table_structure": "複製資料表結構", + "sidebar.menu.create_database": "建立資料庫", "sidebar.menu.create_event": "新增事件", + "sidebar.menu.create_function": "建立函式", + "sidebar.menu.create_procedure": "建立預存程序", + "sidebar.menu.create_table": "建立資料表", + "sidebar.menu.create_view": "建立檢視", + "sidebar.menu.danger_operations": "危險操作", + "sidebar.menu.delete_connection": "刪除連線", + "sidebar.menu.delete_database": "刪除資料庫", + "sidebar.menu.delete_local_directory": "刪除本機目錄", + "sidebar.menu.delete_query": "刪除查詢", + "sidebar.menu.delete_routine": "刪除{{type}}", "sidebar.menu.delete_schema": "刪除模式", + "sidebar.menu.delete_sql_directory": "刪除目錄", + "sidebar.menu.delete_sql_file": "刪除 SQL 檔案", + "sidebar.menu.delete_table": "刪除資料表", + "sidebar.menu.delete_tag": "刪除分組", + "sidebar.menu.delete_view": "刪除檢視", + "sidebar.menu.design_table": "設計資料表", + "sidebar.menu.disconnect": "斷開連線", + "sidebar.menu.duplicate_connection": "複製連線", + "sidebar.menu.edit_connection": "編輯連線", + "sidebar.menu.edit_definition": "編輯定義", "sidebar.menu.edit_schema": "編輯模式", + "sidebar.menu.edit_tag": "編輯分組", + "sidebar.menu.edit_view": "編輯檢視", + "sidebar.menu.export_all_table_schema_sql": "匯出全部資料表結構(SQL)", + "sidebar.menu.export_csv": "匯出 CSV", "sidebar.menu.export_current_schema_sql": "匯出目前模式資料表結構(SQL)", + "sidebar.menu.export_html": "匯出 HTML", + "sidebar.menu.export_json": "匯出 JSON", + "sidebar.menu.export_markdown": "匯出 Markdown", + "sidebar.menu.export_table_data": "匯出資料表資料", + "sidebar.menu.export_xlsx": "匯出 XLSX", + "sidebar.menu.materialized_view_definition": "物化檢視定義", + "sidebar.menu.move_out_of_tag": "移出分組", + "sidebar.menu.move_to_tag": "移至分組", + "sidebar.menu.new_command_window": "新增命令視窗", + "sidebar.menu.new_query": "新增查詢", + "sidebar.menu.new_sql_directory": "新增目錄", + "sidebar.menu.new_sql_directory_in_directory": "在此目錄新增目錄", + "sidebar.menu.new_sql_file": "新增 SQL 檔案", + "sidebar.menu.new_sql_file_in_directory": "在此目錄新增 SQL 檔案", "sidebar.menu.new_table": "新增資料表", + "sidebar.menu.open_query": "開啟查詢", + "sidebar.menu.open_sql_file": "開啟 SQL 檔案", + "sidebar.menu.redis_monitor": "Redis 監控", + "sidebar.menu.refresh": "重新整理", + "sidebar.menu.refresh_directory": "重新整理目錄", + "sidebar.menu.remove_directory": "移除目錄", + "sidebar.menu.rename_database": "重新命名資料庫", + "sidebar.menu.rename_query": "重新命名查詢", + "sidebar.menu.rename_sql_directory": "重新命名目錄", + "sidebar.menu.rename_sql_file": "重新命名 SQL 檔案", + "sidebar.menu.rename_table": "重新命名資料表", + "sidebar.menu.rename_view": "重新命名檢視", + "sidebar.menu.sort_by_frequency": "依使用頻率排序", + "sidebar.menu.sort_by_name": "依名稱排序", "sidebar.menu.table_structure": "資料表結構", + "sidebar.menu.truncate_table": "截斷資料表", + "sidebar.menu.view_definition": "檢視定義", + "sidebar.menu.view_object_definition": "查看定義", + "sidebar.menu.view_routine_definition": "檢視例程定義", + "sidebar.message.add_sql_directory_database_required": "請先選擇資料庫,再新增 SQL 目錄。", "sidebar.message.ai_table_context_missing": "目前資料表缺少連線上下文,無法傳送給 AI。", + "sidebar.message.backing_up_database": "正在備份 {{database}}...", + "sidebar.message.backing_up_selected_objects": "正在備份 {{count}} 個已選物件...", + "sidebar.message.backing_up_selected_tables": "正在備份 {{count}} 個已選資料表...", + "sidebar.message.clear_failed": "清除失敗:{{error}}", + "sidebar.message.clear_success": "清除成功。", + "sidebar.message.clearing_selected_tables": "正在清除 {{count}} 個已選資料表...", + "sidebar.message.connection_config_not_found": "找不到連線設定。", + "sidebar.message.connection_deleted": "連線已刪除。", + "sidebar.message.connection_failed": "連線失敗:{{error}}", "sidebar.message.connection_release_failed": "釋放連線失敗", "sidebar.message.connection_release_failed_from_sidebar": "連線已從側邊欄斷開,但後端連線釋放失敗", + "sidebar.message.create_failed": "建立失敗:{{error}}", + "sidebar.message.create_sql_directory_failed": "新增目錄失敗:{{error}}", + "sidebar.message.create_sql_file_failed": "新增 SQL 檔案失敗:{{error}}", + "sidebar.message.database_closed": "資料庫已關閉。", + "sidebar.message.database_created": "資料庫已建立。", + "sidebar.message.database_deleted": "資料庫已刪除。", + "sidebar.message.database_export_failed": "匯出 {{database}} 失敗:{{error}}", + "sidebar.message.database_export_success": "已匯出 {{database}}。", + "sidebar.message.database_name_required": "請輸入資料庫名稱。", + "sidebar.message.database_name_unchanged": "資料庫名稱未變更。", + "sidebar.message.database_renamed": "資料庫已重新命名。", + "sidebar.message.delete_connection_backend_unavailable": "刪除連線後端不可用。", + "sidebar.message.delete_connection_failed": "刪除連線失敗。", + "sidebar.message.delete_failed": "刪除失敗:{{error}}", + "sidebar.message.delete_sql_directory_failed": "刪除 SQL 目錄失敗:{{error}}", + "sidebar.message.delete_sql_file_failed": "刪除 SQL 檔案失敗:{{error}}", + "sidebar.message.disconnected": "已中斷。", + "sidebar.message.duplicate_backend_unavailable": "目前版本不支援複製連線。", + "sidebar.message.duplicate_empty_result": "未傳回複製後的連線。", + "sidebar.message.duplicate_failed": "複製連線失敗。", + "sidebar.message.duplicated_connection": "已複製連線 {{name}}。", + "sidebar.message.export_failed": "匯出失敗:{{error}}", + "sidebar.message.export_success": "匯出成功。", + "sidebar.message.export_success_skipped_views": "匯出成功。已略過 {{count}} 個檢視的資料匯出。", + "sidebar.message.export_tables_same_database_required": "請選擇同一資料庫中的資料表。", + "sidebar.message.exporting_database_backup": "正在備份 {{database}}(結構+資料)...", + "sidebar.message.exporting_database_schema": "正在匯出 {{database}} 的結構...", + "sidebar.message.exporting_schema_backup": "正在備份模式 {{schema}}(結構+資料)...", + "sidebar.message.exporting_schema_structure": "正在匯出模式 {{schema}} 的結構...", + "sidebar.message.exporting_selected_object_data": "正在匯出 {{count}} 個已選物件的資料({{format}})...", + "sidebar.message.exporting_selected_object_schema": "正在匯出 {{count}} 個已選物件的結構...", + "sidebar.message.exporting_selected_table_schema": "正在匯出 {{count}} 個已選資料表的結構...", + "sidebar.message.exporting_table_format": "正在將 {{table}} 匯出為 {{format}}...", + "sidebar.message.external_sql_directory_added": "外部 SQL 目錄已新增。", + "sidebar.message.external_sql_directory_context_missing": "SQL 目錄內容缺失。", + "sidebar.message.external_sql_directory_delete_target_missing": "找不到可刪除的 SQL 目錄。", + "sidebar.message.external_sql_directory_not_found": "找不到 SQL 目錄。", + "sidebar.message.external_sql_directory_parent_missing": "找不到可新增目錄的位置。", + "sidebar.message.external_sql_directory_read_failed": "讀取 SQL 目錄 {{name}} 失敗:{{error}}", + "sidebar.message.external_sql_directory_refreshed": "外部 SQL 目錄已重新整理。", + "sidebar.message.external_sql_directory_removed": "外部 SQL 目錄已移除。", + "sidebar.message.external_sql_directory_rename_sync_failed": "目錄已重新命名,但無法同步外部 SQL 目錄清單,請重新新增目錄。", + "sidebar.message.external_sql_directory_rename_target_missing": "找不到可重新命名的目錄。", + "sidebar.message.external_sql_file_delete_target_missing": "找不到可刪除的 SQL 檔案。", + "sidebar.message.external_sql_file_parent_missing": "找不到可新增 SQL 檔案的目錄。", + "sidebar.message.external_sql_file_rename_target_missing": "找不到可重新命名的 SQL 檔案。", + "sidebar.message.jvm_provider_probe_exception": "JVM 提供者探測失敗:{{error}}", + "sidebar.message.jvm_provider_probe_exception_with_diagnostic": "JVM Provider 探測異常:{{error}};已保留診斷增強入口", + "sidebar.message.jvm_provider_probe_failed": "探測 JVM 提供者失敗:{{error}}", + "sidebar.message.jvm_provider_probe_failed_with_diagnostic": "JVM Provider 探測失敗:{{error}};已保留診斷增強入口", + "sidebar.message.jvm_resources_backend_unavailable": "JVM 資源後端不可用。", + "sidebar.message.load_database_list_failed": "載入資料庫失敗:{{error}}", + "sidebar.message.load_jvm_resources_failed": "載入 JVM 資源失敗:{{error}}", + "sidebar.message.load_table_list_failed": "載入資料表失敗:{{error}}", + "sidebar.message.load_tables_failed": "載入物件失敗:{{error}}", + "sidebar.message.locate_connection_not_found_for_object": "找不到目前物件對應的連線", + "sidebar.message.locate_connection_not_in_tree": "未在左側樹找到目前連線", "sidebar.message.locate_current_tab_unavailable": "目前分頁沒有可定位的內容", + "sidebar.message.locate_current_table_unavailable": "目前分頁沒有可定位的表", + "sidebar.message.locate_database_loading": "資料庫節點仍在載入中:{{database}},請稍後再試", + "sidebar.message.locate_database_not_found": "未在左側樹找到資料庫:{{database}}", + "sidebar.message.locate_external_sql_file_not_found": "未在外部 SQL 目錄中找到 SQL 檔案:{{path}}", + "sidebar.message.locate_object_loading": "{{object}} 所在的資料庫物件仍在載入中:{{database}},請稍後再試", + "sidebar.message.locate_object_not_found": "未在左側樹中找到 {{object}}:{{name}},請重新整理資料庫節點後再試", "sidebar.message.message_publish_success": "測試訊息已傳送到 {{destination}}", "sidebar.message.message_publish_success_with_count": "測試訊息已傳送到 {{destination}}(已提交 {{count}} 筆)", "sidebar.message.message_publish_target_fallback": "目標", "sidebar.message.message_publish_unsupported": "目前物件不支援測試傳送訊息", + "sidebar.message.no_visible_databases": "未傳回可見資料庫或結構。請檢查帳號權限,或從右鍵選單重新整理。", + "sidebar.message.operation_create_failed": "建立失敗:{{error}}", + "sidebar.message.operation_drop_failed": "刪除失敗:{{error}}", + "sidebar.message.operation_rename_failed": "重新命名失敗:{{error}}", + "sidebar.message.read_file_failed": "讀取檔案失敗:{{error}}", + "sidebar.message.read_sql_file_failed": "讀取 SQL 檔案失敗:{{error}}", + "sidebar.message.rename_failed": "重新命名失敗:{{error}}", + "sidebar.message.rename_sql_directory_failed": "重新命名目錄失敗:{{error}}", + "sidebar.message.rename_sql_file_failed": "重新命名 SQL 檔案失敗:{{error}}", + "sidebar.message.routine_deleted": "{{type}} 已刪除。", "sidebar.message.saved_query_delete_failed": "刪除查詢失敗:{{error}}", + "sidebar.message.saved_query_deleted": "已儲存查詢已刪除。", + "sidebar.message.saved_query_name_unchanged": "新舊查詢名稱相同,無需修改。", "sidebar.message.saved_query_rebind_failed": "綁定查詢失敗:{{error}}", "sidebar.message.saved_query_rebind_success": "查詢已綁定到 {{name}}", "sidebar.message.saved_query_rename_failed": "重新命名查詢失敗:{{error}}", + "sidebar.message.saved_query_renamed": "查詢已重新命名。", + "sidebar.message.schema_create_unsupported": "目前資料庫不支援建立 schema。", + "sidebar.message.schema_created": "schema 已建立。", "sidebar.message.schema_deleted": "模式已刪除。", "sidebar.message.schema_edit_unsupported": "目前節點不支援透過此入口編輯模式。", + "sidebar.message.schema_export_target_missing": "找不到目標模式,無法匯出。", "sidebar.message.schema_name_unchanged": "模式名稱未變更。", "sidebar.message.schema_renamed": "模式已重新命名。", "sidebar.message.schema_target_delete_missing": "找不到目標模式,無法刪除。", "sidebar.message.schema_target_edit_missing": "找不到目標模式,無法編輯。", + "sidebar.message.schema_target_missing": "請選擇要建立 schema 的資料庫。", + "sidebar.message.select_connection_or_database_first": "請先選擇連線或資料庫。", + "sidebar.message.select_database_required": "請至少選擇一個資料庫。", + "sidebar.message.select_host_before_large_sql_file": "請先選擇 Host,再執行大型 SQL 檔案。", + "sidebar.message.select_object_required": "請至少選擇一個物件。", + "sidebar.message.select_sql_directory_failed": "選擇 SQL 目錄失敗:{{error}}", + "sidebar.message.sidebar_filter_reset": "已重設側欄篩選。", + "sidebar.message.sidebar_filter_sync_disabled": "已關閉左側篩選同步。", + "sidebar.message.sidebar_filter_sync_enabled": "已開啟左側篩選同步。", + "sidebar.message.sphinx_unsupported_objects": "此 Sphinx 執行個體不支援這些物件能力:{{objects}}。已啟用相容模式。", + "sidebar.message.sql_directory_created": "目錄已新增。", + "sidebar.message.sql_directory_deleted": "SQL 目錄已刪除。", + "sidebar.message.sql_directory_name_required": "目錄名稱不能空白。", + "sidebar.message.sql_directory_path_invalid": "SQL 目錄路徑無效。", + "sidebar.message.sql_directory_renamed": "目錄已重新命名。", + "sidebar.message.sql_file_context_incomplete": "SQL 檔案內容不完整。", + "sidebar.message.sql_file_created": "SQL 檔案已新增。", + "sidebar.message.sql_file_deleted": "SQL 檔案已刪除。", + "sidebar.message.sql_file_name_required": "SQL 檔案名稱不能空白。", + "sidebar.message.sql_file_path_incomplete": "SQL 檔案路徑不完整,無法開啟。", + "sidebar.message.sql_file_renamed": "SQL 檔案已重新命名。", + "sidebar.message.table_data_action_failed": "{{action}} 失敗:{{error}}", + "sidebar.message.table_data_action_loading": "{{action}} {{table}}...", + "sidebar.message.table_data_action_success": "{{action}} 已完成。", + "sidebar.message.table_deleted": "資料表已刪除。", + "sidebar.message.table_name_required": "請輸入資料表名稱。", + "sidebar.message.table_name_unchanged": "資料表名稱未變更。", + "sidebar.message.table_pinned": "已置頂資料表", + "sidebar.message.table_renamed": "資料表已重新命名。", + "sidebar.message.table_structure_copied": "資料表結構已複製。", + "sidebar.message.table_unpinned": "已取消置頂", + "sidebar.message.view_deleted": "檢視已刪除。", + "sidebar.message.view_name_required": "請輸入檢視名稱。", + "sidebar.message.view_name_unchanged": "檢視名稱未變更。", + "sidebar.message.view_renamed": "檢視已重新命名。", + "sidebar.message.visual_new_table_unsupported": "目前資料來源暫不支援視覺化新增資料表。", + "sidebar.modal.batch_databases.description": "依資料庫批次匯出結構,或產生包含結構與資料的備份。", + "sidebar.modal.batch_databases.selection_hint": "連線選定後會載入目前連線下可批次匯出的資料庫清單。", + "sidebar.modal.batch_databases.title": "批次操作資料庫", + "sidebar.modal.batch_tables.description": "依物件批次匯出結構、資料或完整備份。", + "sidebar.modal.batch_tables.selection_hint": "請先選擇連線與資料庫,再決定匯出範圍與目標物件。", + "sidebar.modal.batch_tables.title": "批次操作資料表", + "sidebar.modal.confirm_clear_selected_tables.content": "清除 {{connection}} / {{database}} 下已選物件的資料?此操作無法復原。", + "sidebar.modal.confirm_clear_selected_tables.title": "確認清除已選資料表", + "sidebar.modal.confirm_delete_connection.content": "刪除連線 {{name}}?", + "sidebar.modal.confirm_delete_database.content": "刪除 {{name}}?此操作無法復原。", + "sidebar.modal.confirm_delete_database.title": "刪除資料庫", + "sidebar.modal.confirm_delete_routine.content": "刪除 {{type}} {{name}}?此操作無法復原。", + "sidebar.modal.confirm_delete_routine.title": "刪除 {{type}}", + "sidebar.modal.confirm_delete_saved_query.content": "確定要刪除已儲存的查詢「{{name}}」嗎?此操作無法復原。", "sidebar.modal.confirm_delete_schema.content": "刪除模式 {{name}}?該模式及其中所有物件都會被刪除,此操作無法復原。", "sidebar.modal.confirm_delete_schema.title": "刪除模式", + "sidebar.modal.confirm_delete_sql_directory.content": "刪除 \"{{name}}\"?此操作會刪除本機磁碟目錄,且僅支援刪除空目錄。", + "sidebar.modal.confirm_delete_sql_directory.title": "刪除 SQL 目錄", + "sidebar.modal.confirm_delete_sql_file.content": "刪除 \"{{name}}\"?此操作會刪除本機磁碟檔案,無法復原。", + "sidebar.modal.confirm_delete_sql_file.title": "刪除 SQL 檔案", + "sidebar.modal.confirm_delete_table.content": "刪除 {{name}}?此操作無法復原。", + "sidebar.modal.confirm_delete_table.title": "刪除資料表", + "sidebar.modal.confirm_delete_tag.content": "確定要刪除分組 \"{{name}}\" 嗎?這不會刪除其中的連線。", + "sidebar.modal.confirm_delete_view.content": "刪除 {{name}}?此操作無法復原。", + "sidebar.modal.confirm_delete_view.title": "刪除檢視", + "sidebar.modal.confirm_delete.title": "確認刪除", + "sidebar.modal.confirm_table_data_action.content": "{{action}} {{table}}?此操作無法復原。", + "sidebar.modal.confirm_table_data_action.title": "確認 {{action}}", + "sidebar.modal.create_database.title": "建立資料庫", + "sidebar.modal.rename_database.title": "重新命名資料庫:{{name}}", "sidebar.modal.rename_schema.title": "編輯模式:{{name}}", + "sidebar.modal.rename_table.title": "重新命名資料表:{{name}}", + "sidebar.modal.rename_view.title": "重新命名檢視:{{name}}", + "sidebar.modal.tag.create_description": "建立分組以整理連線。", + "sidebar.modal.tag.create_title": "建立分組", + "sidebar.modal.tag.edit_description": "更新分組名稱和包含的連線。", + "sidebar.modal.tag.edit_title": "編輯分組", + "sidebar.object_group.events": "事件", + "sidebar.object_group.materialized_views": "物化檢視", + "sidebar.object_group.routines": "函式和預存程序", + "sidebar.object_group.tables": "資料表", + "sidebar.object_group.triggers": "觸發器", + "sidebar.object_group.views": "檢視", + "sidebar.object.function": "函式", + "sidebar.object.procedure": "預存程序", + "sidebar.object.view": "檢視", + "sidebar.placeholder.filter_table_view": "篩選資料表或檢視", + "sidebar.placeholder.select_connection": "請選擇連線", + "sidebar.placeholder.select_connection_first": "請先選擇連線", + "sidebar.placeholder.tag_name": "分組名稱", + "sidebar.punctuation.list_separator": "、", + "sidebar.rail.object_actions": "物件區快捷操作", + "sidebar.rail.system_actions": "系統操作", + "sidebar.search.manual_scope": "手動範圍", + "sidebar.search.multi_select_supported": "支援多選", + "sidebar.search.placeholder": "搜尋...", + "sidebar.search.scope_description": "選擇側邊欄搜尋的比對範圍。", + "sidebar.search.scope_hint": "智慧模式會依內容搜尋名稱、主機、資料庫和物件。", + "sidebar.search.scope_title": "搜尋範圍", + "sidebar.search.scope_tooltip": "目前搜尋範圍:{{scope}}", + "sidebar.search.scope.database": "資料庫", + "sidebar.search.scope.host": "主機", + "sidebar.search.scope.object": "物件", + "sidebar.search.scope.smart": "智慧", + "sidebar.search.scope.smart_description": "依目前選取的節點自動縮小搜尋範圍。", + "sidebar.search.scope.smart_short": "智慧", + "sidebar.search.scope.tag": "標籤", + "sidebar.sql_directory.default_name": "SQL 目錄", + "sidebar.sql_file_exec.cancel": "取消執行", + "sidebar.sql_file_exec.executed_label": "已執行:", + "sidebar.sql_file_exec.file_size": "檔案大小:", + "sidebar.sql_file_exec.rows_separator": " 列 | 失敗:", + "sidebar.sql_file_exec.rows_suffix": " 列", + "sidebar.sql_file_exec.status_label": "狀態:", + "sidebar.sql_file_exec.status.cancelled": "已終止", + "sidebar.sql_file_exec.status.done": "完成", + "sidebar.sql_file_exec.status.error": "錯誤", + "sidebar.sql_file_exec.status.running": "執行中", + "sidebar.sql_file_exec.title": "執行外部 SQL 檔案", + "sidebar.sql_file.default_name": "SQL 檔案", + "sidebar.sql_template.duckdb_macro_hint": "使用 SQL Macro 實作類似函式的行為", + "sidebar.sql_template.duckdb_procedure_unsupported": "DuckDB 尚不支援預存程序", + "sidebar.sql_template.edit_routine": "編輯 {{type}} {{name}}", + "sidebar.sql_template.edit_view": "編輯檢視 {{name}}", + "sidebar.sql_template.modify_then_execute": "修改並執行", + "sidebar.status.pinned": "已置頂", + "sidebar.tab.create_function": "建立函式", + "sidebar.tab.create_procedure": "建立預存程序", + "sidebar.tab.create_view": "建立檢視", + "sidebar.tab.design_table": "設計資料表({{table}})", + "sidebar.tab.edit_event": "編輯事件:{{name}}", + "sidebar.tab.edit_routine": "編輯 {{type}}:{{name}}", + "sidebar.tab.edit_view": "編輯檢視:{{name}}", + "sidebar.tab.event": "事件:{{name}}", + "sidebar.tab.materialized_view_definition": "物化檢視:{{name}}", "sidebar.tab.new_event": "新增事件", + "sidebar.tab.new_query": "新增查詢", + "sidebar.tab.new_query_database": "新增查詢({{database}})", + "sidebar.tab.new_table": "新增資料表 - {{database}}", "sidebar.tab.recent_query": "最近查詢", + "sidebar.tab.redis_command": "命令 - {{database}}", + "sidebar.tab.redis_monitor": "監控 - {{database}}", + "sidebar.tab.routine_definition": "{{type}}:{{name}}", + "sidebar.tab.table_overview": "資料表概覽 - {{database}}{{schema}}", + "sidebar.tab.table_structure": "資料表結構({{table}})", + "sidebar.tab.trigger": "觸發器:{{name}}", + "sidebar.tab.view_definition": "檢視:{{name}}", + "sidebar.table_action.clear.label": "清除資料表", + "sidebar.table_action.clear.progress": "正在清除", + "sidebar.table_action.truncate.label": "截斷資料表", + "sidebar.table_action.truncate.progress": "正在截斷", + "sidebar.table_folder.columns": "欄位", + "sidebar.table_folder.foreign_keys": "外鍵", + "sidebar.table_folder.indexes": "索引", + "sidebar.table_folder.triggers": "觸發器", + "sidebar.tree.all_saved_queries": "全部已儲存查詢", + "sidebar.tree.default_database": "預設資料庫", + "sidebar.tree.default_schema": "預設結構", + "sidebar.tree.saved_queries": "已儲存查詢", + "sidebar.tree.unknown_connection": "未知連線", + "sidebar.tree.unmatched_saved_queries": "未匹配", + "sidebar.tree.untitled_query": "未命名查詢", + "sidebar.v2_database_menu.backup_all_tables_sql": "備份全部資料表 · 結構 + 資料 SQL", + "sidebar.v2_database_menu.export_all_table_schema_sql": "匯出全部資料表結構 · SQL", + "sidebar.v2_database_menu.export_backup_section": "匯出與備份", + "sidebar.v2_database_menu.meta": "{{dialect}} · 資料庫操作", + "sidebar.v2_database_menu.new_external_catalog": "新建外部 Catalog", + "sidebar.v2_database_menu.new_materialized_view": "新建物化檢視", + "sidebar.v2_database_menu.new_schema": "新建模式", + "sidebar.v2_database_menu.refresh_object_tree": "重新整理物件樹", "sidebar.v2_schema_menu.backup_current_schema_sql": "備份目前模式的全部資料表 · 結構 + 資料", "sidebar.v2_schema_menu.delete_schema_cascade": "刪除模式 · DROP CASCADE", "sidebar.v2_schema_menu.edit_schema": "編輯模式", "sidebar.v2_schema_menu.export_current_schema_sql": "匯出目前模式的資料表結構 · SQL", "sidebar.v2_schema_menu.meta": "{{database}} · 模式操作", + "sidebar.v2_table_group_menu.current_database": "目前資料庫", + "sidebar.v2_table_group_menu.meta": "{{database}} · {{count}} 張資料表 · 目前依{{sort}}排序", + "sidebar.v2_table_group_menu.sort_frequency": "使用頻率", + "sidebar.v2_table_group_menu.sort_name": "名稱", + "sidebar.v2_table_group_menu.title": "資料表", + "sidebar.v2_table_menu.ai_explain_table": "用 AI 解釋這張資料表", + "sidebar.v2_table_menu.ai_generate_query": "用 AI 產生查詢", + "sidebar.v2_table_menu.backup_sql_dump": "備份 · {{keyword}}", + "sidebar.v2_table_menu.copy_section": "複製", + "sidebar.v2_table_menu.copy_table_as_insert": "複製整個資料表為 {{keyword}}", + "sidebar.v2_table_menu.copy_table_name": "複製資料表名稱", + "sidebar.v2_table_menu.design_table_detail": "欄位 / 索引 / 外鍵", + "sidebar.v2_table_menu.item_with_suffix": "{{label}} · {{suffix}}", + "sidebar.v2_table_menu.maintenance_section": "維護", + "sidebar.v2_table_menu.meta.idle": "點擊重新整理以載入統計資訊", + "sidebar.v2_table_menu.meta.loading": "正在載入統計資訊...", + "sidebar.v2_table_menu.meta.rows": "{{count}} 筆", + "sidebar.v2_table_menu.meta.rows_empty": "— 筆", + "sidebar.v2_table_menu.meta.summary": "{{rows}} · {{data}} 資料 · {{indexes}} 索引", + "sidebar.v2_table_menu.meta.unavailable": "統計資訊無法使用", + "sidebar.v2_table_menu.metadata_section": "中繼資料", + "sidebar.v2_table_menu.new_rollup": "新增 {{keyword}}", + "sidebar.v2_table_menu.open_data": "查看資料", + "sidebar.v2_table_menu.open_export_workbench": "開啟匯出工作台…", + "sidebar.v2_table_menu.open_in_new_tab": "在新分頁開啟", + "sidebar.v2_table_menu.refresh_stats": "重新整理統計資訊", + "sidebar.v2_table_menu.rename_compact": "重新命名…", + "sidebar.v2_table_menu.truncate_table": "截斷資料表", + "sidebar.v2_table_menu.view_in_er": "在 ER 圖中檢視", + "sidebar.validation.name_required": "請輸入名稱。", + "sidebar.validation.new_database_name_required": "請輸入新資料庫名稱。", + "sidebar.validation.new_table_name_required": "請輸入新資料表名稱。", + "sidebar.validation.new_view_name_required": "請輸入新檢視名稱。", + "sidebar.validation.schema_name_required": "請輸入模式名稱。", + "sidebar.validation.tag_name_required": "請輸入分組名稱。", "snippet_settings.action.close": "關閉", "snippet_settings.action.delete": "刪除", "snippet_settings.action.new": "新增片段", @@ -7307,6 +6959,66 @@ "store.fallback.connection_name": "連線-{{index}}", "store.fallback.connection_tag_name": "標籤-{{index}}", "store.fallback.sql_snippet_name": "片段-{{index}}", + "tab_manager.close_aria": "關閉 {{title}}", + "tab_manager.empty.action.open_ai": "開啟 AI", + "tab_manager.empty.aria.start_workbench": "GoNavi 起始工作台", + "tab_manager.empty.eyebrow.connections": "{{count}} 個連線", + "tab_manager.empty.eyebrow.workbench": "工作台", + "tab_manager.empty.hero.description": "選擇資料來源、開啟查詢編輯器,或在 AI 面板中帶著上下文繼續。", + "tab_manager.empty.hero.title": "連線、查詢與分析都從同一個工作台開始。", + "tab_manager.empty.quick.ai_assist.description": "解釋 SQL、產生查詢並檢閱結果", + "tab_manager.empty.quick.ai_assist.title": "進入 AI 輔助", + "tab_manager.empty.quick.aria": "快速工作流程", + "tab_manager.empty.quick.configure_source.description": "在一處設定 URI、SSH、代理與驅動", + "tab_manager.empty.quick.configure_source.title": "設定資料來源", + "tab_manager.empty.quick.heading": "快速工作流程", + "tab_manager.empty.quick.sql_workspace.description": "使用目前上下文開啟查詢編輯器", + "tab_manager.empty.quick.sql_workspace.title": "啟動 SQL 工作區", + "tab_manager.hover.fallback.database_not_specified": "未指定", + "tab_manager.hover.fallback.host_not_configured": "未設定", + "tab_manager.hover.fallback.unbound_connection": "未綁定連線", + "tab_manager.hover.kind.design": "表設計", + "tab_manager.hover.kind.event": "事件", + "tab_manager.hover.kind.fallback": "分頁", + "tab_manager.hover.kind.jvm_audit": "JVM 稽核", + "tab_manager.hover.kind.jvm_diagnostic": "JVM 診斷", + "tab_manager.hover.kind.jvm_monitoring": "JVM 監控", + "tab_manager.hover.kind.jvm_overview": "JVM 概覽", + "tab_manager.hover.kind.jvm_resource": "JVM 資源", + "tab_manager.hover.kind.materialized_view": "物化視圖", + "tab_manager.hover.kind.query": "SQL 查詢", + "tab_manager.hover.kind.redis_command": "Redis 命令", + "tab_manager.hover.kind.redis_keys": "Redis Key", + "tab_manager.hover.kind.redis_monitor": "Redis 監控", + "tab_manager.hover.kind.routine": "函數 / 程序", + "tab_manager.hover.kind.sql_analysis": "SQL 分析工作台", + "tab_manager.hover.kind.table": "表資料", + "tab_manager.hover.kind.table_export": "匯出工作台", + "tab_manager.hover.kind.table_overview": "表概覽", + "tab_manager.hover.kind.trigger": "觸發器", + "tab_manager.hover.kind.view": "視圖", + "tab_manager.hover.label.connection": "連線", + "tab_manager.hover.label.database": "資料庫", + "tab_manager.hover.label.object": "物件", + "tab_manager.hover.label.type": "類型", + "tab_manager.kind_badge.design": "設計", + "tab_manager.kind_badge.event": "事件", + "tab_manager.kind_badge.fallback": "標籤", + "tab_manager.kind_badge.jvm": "JVM", + "tab_manager.kind_badge.materialized_view": "物化視圖", + "tab_manager.kind_badge.query": "SQL", + "tab_manager.kind_badge.redis": "Redis", + "tab_manager.kind_badge.routine": "函式", + "tab_manager.kind_badge.sql_analysis": "分析", + "tab_manager.kind_badge.table": "表", + "tab_manager.kind_badge.table_export": "匯出", + "tab_manager.kind_badge.table_overview": "庫", + "tab_manager.kind_badge.trigger": "觸發器", + "tab_manager.kind_badge.view": "視圖", + "tab_manager.menu.close_all": "關閉所有分頁", + "tab_manager.menu.close_left": "關閉左側分頁", + "tab_manager.menu.close_other": "關閉其他分頁", + "tab_manager.menu.close_right": "關閉右側分頁", "tab_manager.menu.tab_display_settings": "標籤設定", "tab_manager.sql_file_close.close_tabs": "關閉分頁", "tab_manager.sql_file_close.continue_close": "繼續關閉", @@ -7324,24 +7036,305 @@ "tab_manager.sql_file_close.save_failed": "儲存 {{title}} 失敗:{{detail}}", "tab_manager.sql_file_close.saved": "SQL 檔案已儲存", "tab_manager.sql_file_close.unknown_error": "未知錯誤", + "table_designer.action.add": "新增", + "table_designer.action.add_after_selected": "在選取欄位後新增", + "table_designer.action.add_column": "新增欄位", + "table_designer.action.apply": "套用", + "table_designer.action.cancel": "取消", + "table_designer.action.copy_selected_to_new_table": "複製選取欄位到新表", + "table_designer.action.create": "建立", + "table_designer.action.create_table": "建立新表", + "table_designer.action.delete": "刪除", + "table_designer.action.edit": "修改", + "table_designer.action.execute": "執行", + "table_designer.action.refresh": "重新整理", + "table_designer.action.refresh_anyway": "仍要重新整理", + "table_designer.action.save": "儲存", + "table_designer.action.table_comment": "表註解", + "table_designer.action.view_statement": "檢視語句", + "table_designer.column.actions": "操作", + "table_designer.column.auto_increment": "自增", + "table_designer.column.comment": "註解", + "table_designer.column.default": "預設", + "table_designer.column.name": "名稱", + "table_designer.column.not_null": "不是 NULL", + "table_designer.column.primary_key": "主鍵", + "table_designer.column.type": "類型", + "table_designer.empty.triggers": "此表尚無觸發器", + "table_designer.fallback.empty": "(空)", + "table_designer.fallback.unknown_error": "未知錯誤", + "table_designer.fallback.unnamed_foreign_key": "(未命名外鍵)", + "table_designer.fallback.unnamed_index": "(未命名索引)", + "table_designer.foreign_key.column.constraint_name": "約束名稱", + "table_designer.foreign_key.column.fields": "欄位", + "table_designer.foreign_key.column.ref_fields": "參照欄位", + "table_designer.foreign_key.column.ref_table": "參照表", + "table_designer.index.column.fields": "欄位", + "table_designer.index.column.name": "索引名稱", + "table_designer.index.column.type": "索引類型", + "table_designer.index.column.uniqueness": "唯一性", + "table_designer.index.kind.fulltext": "全文索引", + "table_designer.index.kind.normal": "一般索引", + "table_designer.index.kind.normal_nonclustered": "一般索引(非叢集)", + "table_designer.index.kind.primary_clustered": "主鍵索引(叢集)", + "table_designer.index.kind.spatial": "空間索引", + "table_designer.index.kind.unique": "唯一索引", + "table_designer.index.uniqueness.normal": "一般", + "table_designer.index.uniqueness.unique": "唯一", + "table_designer.label.create_statement": "{{name}} 建立語句", + "table_designer.label.create_statement_plain": "建立語句", + "table_designer.message.add_at_least_one_column": "請至少新增一個欄位", + "table_designer.message.columns_copied_to_new_table": "已將 {{count}} 個欄位複製到新表 {{table}}", + "table_designer.message.connection_not_found": "找不到連線", + "table_designer.message.delete_failed": "刪除失敗:{{detail}}", + "table_designer.message.drop_old_trigger_failed": "刪除舊觸發器失敗:{{detail}}", "table_designer.message.duckdb_primary_key_change_unsupported": "DuckDB 目前僅支援為沒有主鍵的資料表新增主鍵;既有主鍵的修改或刪除需要透過重建資料表完成。", + "table_designer.message.execution_failed": "執行失敗:{{detail}}", + "table_designer.message.execution_failed_plain": "執行失敗", + "table_designer.message.execution_failed_prefix": "執行失敗:", + "table_designer.message.foreign_key_column_count_mismatch": "本表欄位數量必須與參照欄位數量一致", + "table_designer.message.foreign_key_created": "外鍵新增成功", + "table_designer.message.foreign_key_delete_unsupported": "目前資料庫暫不支援刪除此外鍵", + "table_designer.message.foreign_key_deleted": "外鍵刪除成功", + "table_designer.message.foreign_key_maintenance_unsupported": "目前資料庫暫不支援在此維護外鍵", + "table_designer.message.foreign_key_name_exists": "外鍵約束名稱已存在:{{name}}", + "table_designer.message.foreign_key_name_required": "請輸入外鍵約束名稱", + "table_designer.message.foreign_key_updated": "外鍵修改成功", + "table_designer.message.index_create_sql_placeholder": "索引建立 SQL 暫不可用", + "table_designer.message.index_create_sql_unavailable": "無法取得索引建立 SQL", + "table_designer.message.index_created": "索引新增成功", + "table_designer.message.index_delete_named_unsupported": "目前資料庫暫不支援刪除索引 \"{{name}}\"", + "table_designer.message.index_delete_unsupported": "目前資料庫暫不支援刪除此索引", + "table_designer.message.index_deleted": "索引刪除成功", + "table_designer.message.index_kind_unsupported": "目前資料庫不支援此索引類型", + "table_designer.message.index_maintenance_unsupported": "目前資料庫暫不支援在此維護索引", + "table_designer.message.index_name_exists": "索引名稱已存在:{{name}}", + "table_designer.message.index_name_required": "請輸入索引名稱", + "table_designer.message.index_restore_failed": "{{detail}};恢復原索引失敗:{{restoreDetail}}", + "table_designer.message.index_restore_unavailable": "{{detail}};且無法自動恢復原索引,請盡快檢查", + "table_designer.message.index_restored_after_failure": "{{detail}};已自動恢復原索引", + "table_designer.message.index_updated": "索引修改成功", + "table_designer.message.indexes_deleted": "{{count}} 個索引刪除成功", + "table_designer.message.load_columns_failed": "載入欄位失敗:{{detail}}", + "table_designer.message.no_changes_detected": "未偵測到變更", + "table_designer.message.no_copyable_columns": "未選取可複製欄位", + "table_designer.message.no_index_changes": "未偵測到索引變更", + "table_designer.message.only_normal_unique_index_supported": "目前資料庫僅支援一般索引與唯一索引維護", + "table_designer.message.ref_columns_required": "請至少填寫一個參照欄位", + "table_designer.message.ref_table_required": "請輸入參照表", + "table_designer.message.relational_index_unsupported": "目前資料來源不支援關聯式索引維護", + "table_designer.message.schema_saved_alter": "表結構修改成功!", + "table_designer.message.schema_saved_create": "表建立成功!", + "table_designer.message.select_at_least_one_column": "請至少選取一個欄位", + "table_designer.message.select_column_before_insert": "請先選取一個欄位,再執行插入。", + "table_designer.message.select_columns_to_copy": "請先勾選要複製的欄位", + "table_designer.message.select_index_to_delete": "請先選取要刪除的索引", + "table_designer.message.select_local_columns": "請至少選取一個本表欄位", + "table_designer.message.select_one_foreign_key": "請先選取一個外鍵", + "table_designer.message.select_one_index": "請先選取一個索引", + "table_designer.message.statement_execution_failed_prefix": "第 {{current}}/{{total}} 條語句執行失敗:", + "table_designer.message.switch_index_kind": "請將「索引類別」切換為 {{kind}} 索引", + "table_designer.message.table_comment_unsupported": "目前資料庫暫不支援在此修改表註解", + "table_designer.message.table_comment_updated": "表註解更新成功", + "table_designer.message.table_name_required": "請輸入表名", + "table_designer.message.target_table_required": "請輸入目標表名", + "table_designer.message.trigger_created": "觸發器建立成功", + "table_designer.message.trigger_deleted": "觸發器刪除成功", + "table_designer.message.trigger_updated": "觸發器修改成功", + "table_designer.modal.column_comment_title": "欄位註解", + "table_designer.modal.column_comment_title_named": "欄位註解 - {{name}}", + "table_designer.modal.confirm_sql_title": "確認 SQL 變更", + "table_designer.modal.copy_columns_title": "複製選取欄位到新表", + "table_designer.modal.delete_foreign_key_content": "確定要刪除外鍵約束 \"{{name}}\" 嗎?", + "table_designer.modal.delete_foreign_key_title": "確認刪除外鍵", + "table_designer.modal.delete_index_many": "確定要刪除以下 {{count}} 個索引嗎?\n{{names}}", + "table_designer.modal.delete_index_one": "確定要刪除索引 {{names}} 嗎?", + "table_designer.modal.delete_index_title": "確認刪除索引", + "table_designer.modal.delete_trigger_content": "確定要刪除觸發器 \"{{name}}\" 嗎?此操作無法復原。", + "table_designer.modal.delete_trigger_title": "確認刪除觸發器", + "table_designer.modal.foreign_key_create_title": "新增外鍵", + "table_designer.modal.foreign_key_edit_title": "修改外鍵", + "table_designer.modal.index_create_title": "新增索引", + "table_designer.modal.index_edit_title": "修改索引", + "table_designer.modal.table_comment_title": "修改表註解", + "table_designer.modal.trigger_create_title": "新增觸發器", + "table_designer.modal.trigger_detail_title": "觸發器詳情", + "table_designer.modal.trigger_detail_title_named": "觸發器:{{name}}", + "table_designer.modal.trigger_edit_title": "修改觸發器", + "table_designer.modal.unsaved_changes_content": "重新整理後會遺失目前尚未儲存的欄位調整,是否仍要重新整理並覆蓋目前草稿?", + "table_designer.modal.unsaved_changes_title": "存在未儲存的欄位變更", + "table_designer.notice.foreign_key_readonly": "目前資料庫暫不支援外鍵編輯,僅支援檢視", + "table_designer.notice.foreign_key_replace_hint": "修改外鍵會執行「先刪除舊外鍵,再建立新外鍵」。", + "table_designer.notice.index_readonly": "目前資料庫暫不支援索引編輯,僅支援檢視", + "table_designer.notice.index_restore_hint": "修改索引時若新索引建立失敗,系統會嘗試自動恢復原索引。", + "table_designer.notice.sql_irreversible": "請仔細檢查 SQL,執行後無法復原。", + "table_designer.notice.sql_statement_irreversible": "請仔細檢查 SQL 語句,執行後無法復原。", + "table_designer.notice.trigger_replace_hint": "修改觸發器時會先刪除原觸發器,再建立新觸發器。", + "table_designer.option.default": "預設", + "table_designer.option.recommended_suffix": "(建議)", + "table_designer.placeholder.column_comment": "請輸入欄位註解", + "table_designer.placeholder.foreign_key_name": "外鍵約束名稱(例如 fk_order_user)", + "table_designer.placeholder.index_columns": "請選擇索引欄位(依選取順序生效)", + "table_designer.placeholder.index_name": "索引名稱(例如 idx_user_name)", + "table_designer.placeholder.local_columns": "請選擇本表欄位(順序需與參照欄位一致)", + "table_designer.placeholder.primary_index_name": "主鍵索引固定名稱:PRIMARY", + "table_designer.placeholder.ref_columns": "請輸入參照欄位(支援多個)", + "table_designer.placeholder.ref_table": "參照表(支援 db.table)", + "table_designer.placeholder.table_comment": "請輸入表註解", + "table_designer.placeholder.table_name": "請輸入表名", + "table_designer.placeholder.target_table_name": "請輸入目標表名", "table_designer.schema_sql.doris.primary_key_hint": "-- Doris 修改主鍵/Key 模型需要依表模型手工遷移,已避免產生 MySQL 專屬的 DROP/ADD PRIMARY KEY。", + "table_designer.schema_sql.duckdb.comment_hint": "-- DuckDB 不支援透過 COMMENT ON COLUMN 持久化欄位註解,欄位 {{column}} 的註解僅保留在設計器預覽中。", "table_designer.schema_sql.duckdb.primary_key_hint": "-- DuckDB 目前僅支援為無主鍵表新增 PRIMARY KEY;既有主鍵的修改或刪除需要透過重建表完成。", + "table_designer.schema_sql.limited_column_hint": "-- {{dialect}} 的欄位約束、預設值與註解語法不同於 MySQL,已避免產生 MySQL 專屬子句,請依目標庫能力補充。", + "table_designer.schema_sql.sqlite.modify_column_hint": "-- SQLite 不支援直接修改欄位屬性,請透過建立新表、遷移資料、替換舊表的方式處理欄位 {{column}}。", + "table_designer.schema_sql.sqlserver.drop_primary_key_hint": "-- SQL Server 刪除舊主鍵需要原約束名稱;請先在索引頁確認後刪除。", + "table_designer.schema_sql.tdengine.timestamp_hint": "-- TDengine 普通表通常需要 TIMESTAMP 時間欄位,執行前請確認表模型。", + "table_designer.selection.columns_selected": "已選取欄位:{{count}}", + "table_designer.selection.foreign_key_selected": "已選取:{{name}}", + "table_designer.selection.indexes_selected": "已選取:{{count}} 個索引", + "table_designer.selection.trigger_prompt": "請點選觸發器", + "table_designer.selection.trigger_selected": "已選取:{{name}}", + "table_designer.sql_preview.change.add": "新增變更", + "table_designer.sql_preview.change.comment": "註解變更", + "table_designer.sql_preview.change.constraint": "約束變更", + "table_designer.sql_preview.change.create": "新建表結構", "table_designer.sql_preview.change.create_index": "新增索引", + "table_designer.sql_preview.change.drop": "刪除變更", + "table_designer.sql_preview.change.modify": "欄位屬性變更", + "table_designer.sql_preview.change.rename": "重新命名變更", + "table_designer.starrocks.bucket_mode.auto": "自動分桶數", + "table_designer.starrocks.bucket_mode.number": "固定分桶數", + "table_designer.starrocks.distribution.hash": "雜湊分佈", + "table_designer.starrocks.distribution.none": "不設定分佈", + "table_designer.starrocks.distribution.random": "隨機分佈", + "table_designer.starrocks.key_model.aggregate": "聚合鍵", + "table_designer.starrocks.key_model.duplicate": "明細鍵", + "table_designer.starrocks.key_model.unique": "唯一鍵", + "table_designer.starrocks.placeholder.bucket_count": "分桶數", + "table_designer.starrocks.placeholder.distribution_columns": "分佈欄位,例如 user_id", + "table_designer.starrocks.placeholder.key_columns": "鍵欄位,例如 id, date", + "table_designer.starrocks.placeholder.partition_clause": "分割區子句,例如 PARTITION BY RANGE(date_col)(...)", + "table_designer.starrocks.table_kind.external": "外部表", + "table_designer.starrocks.table_kind.olap": "OLAP 表", + "table_designer.status.read_only": "唯讀", + "table_designer.summary.columns": "{{count}} 個欄位", + "table_designer.summary.indexes": "索引數:{{count}},索引欄位:{{fields}}", + "table_designer.tab.columns": "欄位", "table_designer.tab.edit_trigger_title": "修改觸發器:{{name}}", + "table_designer.tab.foreign_keys": "外鍵", + "table_designer.tab.indexes": "索引", + "table_designer.tab.triggers": "觸發器", + "table_designer.table_comment.current": "目前註解:{{comment}}", + "table_designer.title.default_database": "預設庫", + "table_designer.title.schema_designer": "結構設計器", + "table_designer.title.untitled_table": "未命名表", + "table_designer.tooltip.edit_comment_popup": "在彈窗中編輯註解", + "table_designer.trigger.column.event": "事件", + "table_designer.trigger.column.name": "名稱", + "table_designer.trigger.column.timing": "時機", + "table_designer.trigger.definition_unavailable": "無法取得完整的觸發器定義", + "table_designer.trigger.field.event": "事件", + "table_designer.trigger.field.timing": "時機", + "table_designer.trigger.template.body_comment": "觸發器邏輯", + "table_designer.trigger.template.enter_create": "請輸入 CREATE TRIGGER 語句", + "table_overview.action.show_more": "顯示更多資料表(剩餘 {{count}})", + "table_overview.empty.no_matches": "無符合結果", + "table_overview.empty.no_tables": "暫無資料表", + "table_overview.menu.backup_table_sql": "備份資料表 (SQL)", + "table_overview.menu.clear_table": "清空資料表", + "table_overview.menu.copy_structure": "複製資料表結構", "table_overview.menu.copy_table_name": "複製資料表名稱", + "table_overview.menu.danger_operations": "危險操作", + "table_overview.menu.delete_table": "刪除資料表", + "table_overview.menu.design_table": "設計資料表", + "table_overview.menu.export_csv": "匯出 CSV", + "table_overview.menu.export_html": "匯出 HTML", + "table_overview.menu.export_json": "匯出 JSON", + "table_overview.menu.export_markdown": "匯出 Markdown", + "table_overview.menu.export_table_data": "匯出資料表資料", + "table_overview.menu.export_xlsx": "匯出 XLSX", + "table_overview.menu.new_query": "新增查詢", + "table_overview.menu.rename_table": "重新命名資料表", "table_overview.menu.table_structure": "資料表結構", + "table_overview.menu.truncate_table": "截斷資料表", + "table_overview.message.copy_structure_failed": "複製資料表結構失敗: {{detail}}", + "table_overview.message.copy_structure_success": "資料表結構已複製到剪貼簿", "table_overview.message.copy_table_name_empty": "資料表名稱為空,無法複製", "table_overview.message.copy_table_name_failed": "複製資料表名稱失敗: {{detail}}", "table_overview.message.copy_table_name_success": "資料表名稱已複製到剪貼簿", + "table_overview.message.delete_table_failed": "刪除資料表失敗: {{detail}}", + "table_overview.message.delete_table_success": "資料表已刪除", + "table_overview.message.export_failed": "匯出失敗: {{detail}}", + "table_overview.message.export_success": "匯出成功", + "table_overview.message.exporting_table_format": "正在匯出 {{table}} 為 {{format}}...", + "table_overview.message.load_tables_failed": "取得資料表資訊失敗: {{detail}}", + "table_overview.message.pinned": "已置頂資料表", + "table_overview.message.rename_table_failed": "重新命名資料表失敗: {{detail}}", + "table_overview.message.rename_table_success": "資料表已重新命名", + "table_overview.message.table_data_action_failed": "{{action}}失敗: {{detail}}", + "table_overview.message.table_data_action_loading": "正在對 {{table}} 執行{{action}}...", + "table_overview.message.table_data_action_success": "{{action}}成功", + "table_overview.message.unknown_error": "未知錯誤", + "table_overview.message.unpinned": "已取消置頂", + "table_overview.metric.data_size": "資料大小", + "table_overview.metric.engine": "引擎", + "table_overview.metric.index_size": "索引大小", + "table_overview.metric.relative_size": "相對大小", + "table_overview.modal.delete_table.content": "刪除資料表 \"{{table}}\"?此操作無法復原。", + "table_overview.modal.delete_table.title": "刪除資料表", + "table_overview.modal.rename_table.placeholder": "輸入新的資料表名稱", + "table_overview.modal.rename_table.title": "重新命名資料表", + "table_overview.modal.table_data_action.content": "{{action}}會永久刪除資料表 \"{{table}}\" 中的所有資料,此操作無法復原。是否繼續?", + "table_overview.modal.table_data_action.title": "確認{{action}}", + "table_overview.placeholder.search": "搜尋資料表名稱或註解...", + "table_overview.row.engine_table": "{{engine}} 資料表", + "table_overview.row.open_hint": "按兩下開啟資料,按右鍵查看更多操作", + "table_overview.section.all": "全部", + "table_overview.section.pinned": "置頂", + "table_overview.sort.name": "名稱", + "table_overview.sort.rows": "列數", + "table_overview.sort.size": "大小", + "table_overview.status.hidden_count_hint": "還有 {{count}} 張未渲染,可繼續載入或縮小搜尋範圍", + "table_overview.status.loading_tables": "載入資料表資訊...", + "table_overview.status.matching_rendered": "符合 {{matched}} 張資料表,目前渲染 {{rendered}} 張", + "table_overview.status.updating_filter": "正在更新篩選結果...", "table_overview.tab.design_table_title": "設計資料表({{table}})", "table_overview.tab.table_structure_title": "資料表結構({{table}})", + "table_overview.table_data_action.clear.label": "清空資料表", + "table_overview.table_data_action.truncate.label": "截斷資料表", + "table_overview.toolbar.summary": "{{count}} 張資料表 · {{rows}} 列 · {{size}}", + "table_overview.tooltip.card_view": "卡片檢視", + "table_overview.tooltip.list_view": "列表檢視", + "table_overview.tooltip.refresh": "重新整理", + "table_overview.tooltip.sort": "排序", + "table_overview.validation.table_name_required": "資料表名稱不可為空", + "table_overview.validation.table_name_unchanged": "新資料表名稱與目前名稱相同", "trigger_viewer.action.edit_object": "物件修改", "trigger_viewer.edit_sql.compatibility_hint": "請確認語法相容目前資料庫後再執行", "trigger_viewer.edit_sql.empty_definition": "目前觸發器定義為空,請補全 CREATE TRIGGER 語句後再執行", "trigger_viewer.edit_sql.fragment_definition": "目前資料來源僅返回觸發器定義片段,請補全 CREATE TRIGGER 語句後再執行", "trigger_viewer.edit_sql.header": "修改觸發器: {{name}}", "trigger_viewer.edit_sql.replace_hint": "表設計修改會先刪除原觸發器,再建立新觸發器,請確認後執行", + "trigger_viewer.editor.definition_not_found": "找不到觸發器定義", + "trigger_viewer.editor.sphinx.compat_queries_hint": "已執行多組相容查詢,可能是版本能力限制或物件類型不支援。", + "trigger_viewer.editor.sphinx.empty_result": "目前 Sphinx 實例{{version}}未返回觸發器定義。", + "trigger_viewer.editor.sphinx.failed_message_label": "返回失敗訊息", + "trigger_viewer.editor.sphinx.failed_message_unknown": "返回失敗訊息:未知錯誤", + "trigger_viewer.editor.sphinx.unsupported_query": "目前 Sphinx 實例{{version}}不支援查詢觸發器定義。", + "trigger_viewer.editor.sphinx.version_suffix": "(版本: {{version}})", + "trigger_viewer.editor.unsupported.duckdb": "DuckDB 不支援觸發器", + "trigger_viewer.editor.unsupported.generic": "暫不支援此資料庫類型的觸發器定義查看", + "trigger_viewer.editor.unsupported.mongodb": "MongoDB 不支援觸發器", + "trigger_viewer.editor.unsupported.tdengine": "TDengine 不支援觸發器", + "trigger_viewer.error.connection_not_found": "找不到資料庫連線", + "trigger_viewer.error.load_failed": "載入失敗", + "trigger_viewer.error.query_failed": "查詢觸發器定義失敗", + "trigger_viewer.error.query_failed_detail": "查詢觸發器定義失敗:{{detail}}", + "trigger_viewer.error.trigger_name_empty": "觸發器名稱為空", + "trigger_viewer.field.database": "資料庫", + "trigger_viewer.field.trigger": "觸發器", + "trigger_viewer.loading.definition": "載入觸發器定義...", "trigger_viewer.tab.edit_trigger_title": "修改觸發器: {{name}}", "trigger_viewer.warning.refresh_latest_failed": "重新整理最新定義失敗", "data_export.dialog.action.start": "開始匯出", @@ -7455,5 +7448,133 @@ "data_export.workbench.target.batch_tables": "{{database}} · {{count}} 個物件", "data_export.workbench.target.current_database": "目前資料庫", "data_export.workbench.task.export_target": "匯出 {{name}}", - "data_export.workbench.title": "匯出工作台" + "data_export.workbench.title": "匯出工作台", + "data_grid.export.scope.all_results_cached": "全部結果(目前快取 {{count}} 筆)", + "data_grid.export.scope.all_results_cached_description": "當前查詢缺少可重放 SQL 時,將匯出目前快取中的全部結果。", + "data_grid.export.scope.all_results_requery": "全部結果(重新查詢)", + "data_grid.export.scope.all_results_requery_description": "後端會重新執行 SQL,避免只匯出目前頁或目前快取。", + "data_grid.export.scope.current_page": "目前頁({{count}} 筆)", + "data_grid.export.scope.current_page_description": "直接依目前頁快取匯出。", + "data_grid.export.scope.current_page_requery_description": "後端會依目前分頁條件重新查詢後匯出目前頁面。", + "data_grid.export.scope.current_page_unavailable_description": "目前頁面依賴前端暫時狀態,建議直接使用快捷匯出。", + "data_grid.export.scope.filtered_results_all": "篩選結果(全部)", + "data_grid.export.scope.filtered_results_all_requery_description": "會依目前篩選條件重新查詢資料庫並匯出全部篩選結果。", + "data_grid.export.scope.filtered_results_all_unavailable_description": "目前資料來源或目前狀態暫不支援在工作台重放篩選匯出。", + "data_grid.export.scope.selected_rows": "已選列", + "data_grid.export.scope.selected_rows_count": "已選列({{count}} 筆)", + "data_grid.export.scope.selected_rows_description": "僅匯出目前結果集中已勾選的資料列。", + "sidebar.message.table_export_target_missing": "未識別到資料表名稱,無法匯出。", + "sidebar.tab.batch_export_databases": "批次匯出資料庫", + "sidebar.tab.batch_export_objects": "批次匯出物件", + "sidebar.tab.batch_export_objects_database": "批次匯出 {{database}} 物件", + "data_export.message.already_running": "目前已有匯出任務正在執行,請等待完成後再發起新的匯出", + "data_export.message.export_failed": "匯出失敗: {{error}}", + "data_export.message.export_success": "匯出成功", + "data_export.progress.stage.waiting_file_selection": "等待選擇匯出檔案", + "sql_analysis.workbench.validation.sql_required": "請輸入要診斷的 SQL", + "sql_analysis.workbench.alert.connection_missing_title": "目前工作台對應的連線已不可用", + "sql_analysis.workbench.alert.connection_missing_description": "請重新選擇有效連線後再開啟 SQL 分析工作台。", + "sql_analysis.workbench.title": "SQL 分析工作台", + "sql_analysis.workbench.view.slow_query": "慢 SQL", + "sql_analysis.workbench.view.diagnose": "SQL 診斷", + "sql_analysis.workbench.editor.placeholder": "輸入要診斷的 SQL,或從慢 SQL 清單點選條目帶入", + "sql_analysis.workbench.editor.hint": "支援從慢 SQL 清單點選條目直接帶入", + "sql_analysis.workbench.action.run": "執行診斷", + "sql_analysis.explain.error.query_required": "查詢語句為空", + "sql_analysis.explain.error.run_failed": "診斷失敗", + "sql_analysis.explain.loading": "正在執行 EXPLAIN 並解析計畫...", + "sql_analysis.explain.error.title": "診斷失敗:", + "sql_analysis.explain.empty": "輸入 SQL 後執行診斷", + "sql_analysis.explain.view.plan": "執行計畫", + "sql_analysis.explain.view.raw": "原文", + "sql_analysis.explain.meta.node_count": "{{count}} 個節點", + "sql_analysis.explain.raw.empty": "(無原文)", + "sql_analysis.explain_graph.label.table": "表:", + "sql_analysis.explain_graph.label.index": "索引:", + "sql_analysis.explain_graph.metric.est_rows": "估算", + "sql_analysis.explain_graph.metric.actual_rows": "實際", + "sql_analysis.explain_graph.metric.cost": "成本", + "sql_analysis.explain_graph.flag.full_scan": "全表掃描", + "sql_analysis.explain_graph.flag.filesort": "額外排序", + "sql_analysis.explain_graph.flag.temp_table": "暫存表", + "sql_analysis.sidebar.stats.title": "執行統計", + "sql_analysis.sidebar.stats.total_cost": "總成本", + "sql_analysis.sidebar.stats.total_duration": "總耗時", + "sql_analysis.sidebar.stats.rows_read": "掃描行數", + "sql_analysis.sidebar.stats.buffer_hit": "快取命中", + "sql_analysis.sidebar.stats.max_est_rows": "單節點最大估算行數", + "sql_analysis.sidebar.warning.full_scan": "存在全表掃描", + "sql_analysis.sidebar.warning.filesort": "存在額外排序", + "sql_analysis.sidebar.warning.temp_table": "使用暫存表", + "sql_analysis.sidebar.node.title": "節點詳情", + "sql_analysis.sidebar.node.op_type": "操作類型", + "sql_analysis.sidebar.node.op_detail": "操作詳情", + "sql_analysis.sidebar.node.table": "表", + "sql_analysis.sidebar.node.index": "索引", + "sql_analysis.sidebar.node.est_rows": "估算行數", + "sql_analysis.sidebar.node.actual_rows": "實際行數", + "sql_analysis.sidebar.node.loops": "循環次數", + "sql_analysis.sidebar.node.cost": "成本", + "sql_analysis.sidebar.node.duration": "耗時", + "sql_analysis.sidebar.node.buffer_hit": "快取命中", + "sql_analysis.sidebar.node.flags": "標誌", + "sql_analysis.sidebar.node.extra": "Extra 欄位({{count}})", + "sql_analysis.sidebar.suggestions.title": "索引建議({{count}})", + "sql_analysis.sidebar.suggestions.empty": "未發現明顯效能問題", + "sql_analysis.sidebar.suggestions.rows": "{{count}} 行", + "sql_analysis.sidebar.suggestions.table": "表:{{table}}", + "sql_analysis.slow_query.error.load_failed": "載入失敗", + "sql_analysis.slow_query.message.cleared": "已清空慢查詢歷史", + "sql_analysis.slow_query.error.clear_failed": "清空失敗", + "sql_analysis.slow_query.sort.duration": "按耗時", + "sql_analysis.slow_query.sort.rows_read": "按掃描行數", + "sql_analysis.slow_query.sort.recent": "按時間", + "sql_analysis.slow_query.tooltip.clear_current": "清空目前連線的歷史", + "sql_analysis.slow_query.loading": "正在載入慢查詢歷史...", + "sql_analysis.slow_query.error.title": "載入失敗:", + "sql_analysis.slow_query.empty": "暫無慢查詢記錄(門檻 {{threshold}}ms)", + "sql_analysis.slow_query.title": "慢 SQL 歷史", + "sql_analysis.slow_query.current_connection": "(目前連線)", + "sql_analysis.slow_query.metric.rows_read": "掃描", + "sql_analysis.slow_query.metric.rows_returned": "返回", + "sql_analysis.slow_query.preview.empty": "(無 SQL 預覽)", + "sql_analysis.slow_query.relative.just_now": "剛剛", + "sql_analysis.slow_query.relative.minutes_ago": "{{count}} 分鐘前", + "sql_analysis.slow_query.relative.hours_ago": "{{count}} 小時前", + "sql_analysis.slow_query.relative.days_ago": "{{count}} 天前", + "sql_analysis.slow_query.rail.tooltip.no_connection": "請先開啟一個資料庫連線標籤頁", + "sql_analysis.slow_query.rail.tooltip.open": "開啟目前連線的 SQL 分析工作台", + "sql_analysis.slow_query.rail.aria_label": "慢 SQL 工作台", + "sql_analysis.backend.error.query_required": "查詢語句不能為空", + "sql_analysis.backend.error.select_only": "診斷僅支援 SELECT / WITH 查詢;寫入操作請改用 EXPLAIN PLAN 模式(PR2 支援)", + "sql_analysis.backend.error.unsupported_db_type": "目前資料來源({{dbType}})暫不支援 SQL 診斷;一期支援 MySQL/PostgreSQL/SQLite/ClickHouse/Oracle/SQLServer/OceanBase", + "sql_analysis.backend.message.completed": "診斷完成", + "query_history.backend.error.connection_fingerprint_invalid": "無法解析連線指紋", + "query_history.backend.message.loaded": "載入完成", + "query_history.backend.message.cleared": "已清空慢查詢歷史", + "connection.backend.error.readonly_action_blocked": "目前連線已啟用正式保護,禁止執行{{action}}", + "connection.backend.action.create_database": "建立資料庫", + "connection.backend.action.create_schema": "建立結構描述", + "connection.backend.action.rename_schema": "重新命名結構描述", + "connection.backend.action.drop_schema": "刪除結構描述", + "connection.backend.action.rename_database": "重新命名資料庫", + "connection.backend.action.drop_database": "刪除資料庫", + "connection.backend.action.rename_table": "重新命名資料表", + "connection.backend.action.drop_table": "刪除資料表", + "connection.backend.action.drop_view": "刪除檢視", + "connection.backend.action.drop_function_or_procedure": "刪除函式或預存程序", + "connection.backend.action.rename_view": "重新命名檢視", + "connection.backend.action.import_data": "匯入資料", + "connection.backend.action.apply_result_changes": "提交結果修改", + "connection.backend.action.preview_result_changes": "預覽結果修改", + "connection.backend.action.clear_table": "清空資料表資料", + "connection.backend.action.truncate_table": "截斷資料表", + "connection.backend.action.data_sync_write": "寫入資料同步結果", + "connection_modal.field.readOnly.label": "正式連線保護", + "connection_modal.field.readOnly.help": "啟用後目前連線僅允許查詢,禁止匯入、結構變更、資料寫入與作為同步目標。", + "connection_modal.field.readOnly.checkbox": "標記為正式連線,只允許查詢", + "query_editor.message.connection_readonly_blocked": "目前連線已啟用正式保護,僅允許執行查詢操作。", + "query_editor.results_panel.message.action.copy": "複製", + "query_editor.results_panel.message.copy_unsupported": "目前環境不支援複製到剪貼簿", + "query_editor.results_panel.message.copy_failed": "複製訊息失敗:{{detail}}" }