aiex-cli 0.1.1-beta.9 → 0.1.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.mjs +43 -7
- package/dist/{generate-drizzle-schema-BdkbSP5F.mjs → generate-drizzle-schema-ChzQkol3.mjs} +25 -36
- package/dist/index.d.mts +9 -0
- package/dist/index.mjs +1 -1
- package/dist/web/assets/{JsonSchemaEditor-p-bkrvS3.js → JsonSchemaEditor-Bm1VDH2D.js} +1 -1
- package/dist/web/assets/{index-UGHdtCGb.js → index-L7fuxNzg.js} +3 -3
- package/dist/web/assets/{schemaNaming-COq_SZOU.js → schemaNaming-q3Q55JwP.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +2 -3
- package/dist/zh-CN-CJiDMnGe.mjs +0 -430
- /package/dist/{completions-DPALvX54.mjs → completions-C2plwRHt.mjs} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ft as e}from"./vue-i18n-Du42D0vb.js";var t={$schema:`http://json-schema.org/draft-07/schema#`,$id:`https://raw.githubusercontent.com/OSpoon/aiex-cli/main/app/cli/schemas/table-schema.json`,title:`aiex Table Schema`,description:`Defines an AIEX Drizzle-backed schema dialect file for schema-to-SQLite migration.`,type:`object`,required:[`title`,`type`,`table`,`properties`],additionalProperties:!1,properties:{$schema:{type:`string`,description:`Pointer to this schema file for IDE validation.`,format:`uri`,default:`https://raw.githubusercontent.com/OSpoon/aiex-cli/main/app/cli/schemas/table-schema.json`},title:{type:`string`,minLength:1,description:`Human-readable table title (e.g. 'User', 'OrderItem').`},description:{type:`string`,description:`Optional table description.`},type:{type:`string`,const:`object`,description:`Must be 'object' — each file defines one table.`},table:{$ref:`#/$defs/tableConfig`,description:`Table-level configuration.`},properties:{$ref:`#/$defs/properties`,description:`Column definitions keyed by property name (camelCase).`},required:{type:`array`,items:{type:`string`},description:`List of property names that are NOT NULL.`,default:[]},examples:{type:`array`,description:`Few-shot examples used by AI extraction prompts.`,items:{$ref:`#/$defs/examplePair`},default:[]}},$defs:{tableConfig:{type:`object`,required:[`name`],additionalProperties:!1,properties:{name:{type:`string`,minLength:1,pattern:`^[a-z][a-z0-9_]*$`,description:`SQLite table name in snake_case (lowercase letters, digits, underscores).`,examples:[`users`,`order_items`,`blog_posts`]},timestamps:{type:`boolean`,default:!1,description:`Automatically add created_at and updated_at TIMESTAMP columns.`},softDelete:{type:`boolean`,default:!1,description:`Automatically add deleted_at nullable TIMESTAMP column.`}}},properties:{type:`object`,minProperties:1,propertyNames:{type:`string`,pattern:`^[A-Za-z][A-Za-z0-9_]*$`},additionalProperties:{$ref:`#/$defs/property`},description:`Column definitions. Keys must start with a letter and contain only letters, digits, or underscores.`},property:{type:`object`,required:[`type`],additionalProperties:!1,properties:{description:{type:`string`,description:`Description of the column.`},type:{$ref:`#/$defs/columnType`,description:`Column data type.`},format:{$ref:`#/$defs/formatType`,description:`Semantic format hint that influences the SQLite column type.`},primary:{type:`boolean`,default:!1,description:`Mark this column as PRIMARY KEY. Only one per table.`},autoIncrement:{type:`boolean`,default:!1,description:`AUTO_INCREMENT for integer primary keys.`},unique:{type:`boolean`,default:!1,description:`Add UNIQUE constraint.`},default:{description:`Default value for the column. Type should match the column type.`},pattern:{type:`string`,description:`Regular expression guidance for extraction and validation. Not emitted as a SQLite constraint because SQLite has no portable built-in REGEXP support.`},enum:{type:`array`,items:{oneOf:[{type:`string`},{type:`number`}]},description:`Enumeration of allowed values for this field. Emitted as a SQLite CHECK constraint.`},examples:{type:`array`,description:`Example values for this field (injected into AI prompt).`,items:{}},xPrompt:{type:`string`,description:`Custom extraction instruction for this field, overrides the default AI prompt (prefixed with 'x-' to stay valid JSON Schema).`},minLength:{type:`integer`,minimum:0,description:`Minimum string length. Emitted as a SQLite CHECK constraint.`},maxLength:{type:`integer`,minimum:1,description:`Maximum string length. Emitted as a SQLite CHECK constraint.`},minimum:{type:`number`,description:`Minimum numeric value. Emitted as a SQLite CHECK constraint.`},maximum:{type:`number`,description:`Maximum numeric value. Emitted as a SQLite CHECK constraint.`},drizzle:{$ref:`#/$defs/drizzleConfig`,description:`Drizzle ORM specific overrides.`},nested:{$ref:`#/$defs/nestedConfig`,description:`Create a separate related table instead of embedding as JSON.`},foreignKey:{$ref:`#/$defs/foreignKeyRef`,description:`Foreign key reference to another table.`},properties:{$ref:`#/$defs/properties`,description:`Sub-properties when type is 'object'. Ignored unless nested.enabled or drizzle.mode='json'.`},items:{$ref:`#/$defs/property`,description:`Item schema when type is 'array'. Ignored unless items.nested.enabled.`},required:{type:`array`,items:{type:`string`},description:`Required sub-properties for nested objects.`}}},columnType:{type:`string`,enum:[`string`,`integer`,`number`,`boolean`,`object`,`array`,`null`],description:`Data type. Maps to SQLite as: string→TEXT, integer→INTEGER, number→REAL, boolean→INTEGER(boolean), object→TEXT(json), array→TEXT(json), null→TEXT.`},formatType:{type:`string`,enum:[`date-time`,`email`,`uri`,`json`],description:`Format hints: 'date-time' → INTEGER(timestamp), 'json' → TEXT(json), 'email'/'uri' → TEXT (no special mapping).`},drizzleConfig:{type:`object`,additionalProperties:!1,properties:{mode:{type:`string`,enum:[`json`,`timestamp`,`timestamp_ms`,`boolean`,`bigint`],description:`Override Drizzle column mode. 'json' stores as TEXT(json), 'timestamp'/'timestamp_ms' as INTEGER, 'boolean' as INTEGER(boolean), 'bigint' as INTEGER(bigint).`}}},examplePair:{type:`object`,required:[`text`,`output`],additionalProperties:!1,properties:{text:{type:`string`,minLength:1,description:`Source text example.`},output:{type:`object`,description:`Expected extracted output for the source text example.`}}},nestedConfig:{type:`object`,required:[`enabled`,`relation`],additionalProperties:!1,properties:{enabled:{type:`boolean`,const:!0,description:`Must be true to activate nested table creation.`},relation:{type:`string`,enum:[`has-one`,`has-many`],description:`'has-one' → one() relation, 'has-many' → many() relation. Only one level of nesting is supported.`}}},foreignKeyRef:{type:`object`,required:[`table`,`column`],additionalProperties:!1,properties:{table:{type:`string`,minLength:1,description:`Target table name (snake_case).`},column:{type:`string`,minLength:1,description:`Target column name in the referenced table.`}}}}},n=Object.prototype.hasOwnProperty;function r(e,t,n){for(n of e.keys())if(i(n,t))return n}function i(e,t){var a,o,s;if(e===t)return!0;if(e&&t&&(a=e.constructor)===t.constructor){if(a===Date)return e.getTime()===t.getTime();if(a===RegExp)return e.toString()===t.toString();if(a===Array){if((o=e.length)===t.length)for(;o--&&i(e[o],t[o]););return o===-1}if(a===Set){if(e.size!==t.size)return!1;for(o of e)if(s=o,s&&typeof s==`object`&&(s=r(t,s),!s)||!t.has(s))return!1;return!0}if(a===Map){if(e.size!==t.size)return!1;for(o of e)if(s=o[0],s&&typeof s==`object`&&(s=r(t,s),!s)||!i(o[1],t.get(s)))return!1;return!0}if(a===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(a===DataView){if((o=e.byteLength)===t.byteLength)for(;o--&&e.getInt8(o)===t.getInt8(o););return o===-1}if(ArrayBuffer.isView(e)){if((o=e.byteLength)===t.byteLength)for(;o--&&e[o]===t[o];);return o===-1}if(!a||typeof e==`object`){for(a in o=0,e)if(n.call(e,a)&&++o&&!n.call(t,a)||!(a in t)||!i(e[a],t[a]))return!1;return Object.keys(t).length===o}}return e!==e&&t!==t}function a(t){let n=e(t);try{return structuredClone(n)}catch{return JSON.parse(JSON.stringify(n))}}function o(e,t){return i(e,t)}
|
|
1
|
+
import{ft as e}from"./vue-i18n-Du42D0vb.js";var t={$schema:`http://json-schema.org/draft-07/schema#`,$id:`https://raw.githubusercontent.com/OSpoon/aiex-cli/main/app/cli/schemas/table-schema.json`,title:`aiex Table Schema`,description:`Defines an AIEX Drizzle-backed schema dialect file for schema-to-SQLite migration.`,type:`object`,required:[`title`,`type`,`table`,`properties`],additionalProperties:!1,properties:{$schema:{type:`string`,description:`Pointer to this schema file for IDE validation.`,format:`uri`,default:`https://raw.githubusercontent.com/OSpoon/aiex-cli/main/app/cli/schemas/table-schema.json`},title:{type:`string`,minLength:1,description:`Human-readable table title (e.g. 'User', 'OrderItem').`},description:{type:`string`,description:`Optional table description.`},type:{type:`string`,const:`object`,description:`Must be 'object' — each file defines one table.`},table:{$ref:`#/$defs/tableConfig`,description:`Table-level configuration.`},properties:{$ref:`#/$defs/properties`,description:`Column definitions keyed by property name (camelCase).`},required:{type:`array`,items:{type:`string`},description:`List of property names that are NOT NULL.`,default:[]},examples:{type:`array`,description:`Few-shot examples used by AI extraction prompts.`,items:{$ref:`#/$defs/examplePair`},default:[]}},$defs:{tableConfig:{type:`object`,required:[`name`],additionalProperties:!1,properties:{name:{type:`string`,minLength:1,pattern:`^[a-z][a-z0-9_]*$`,description:`SQLite table name in snake_case (lowercase letters, digits, underscores).`,examples:[`users`,`order_items`,`blog_posts`]},timestamps:{type:`boolean`,default:!1,description:`Automatically add created_at and updated_at TIMESTAMP columns.`},softDelete:{type:`boolean`,default:!1,description:`Automatically add deleted_at nullable TIMESTAMP column.`}}},properties:{type:`object`,minProperties:1,propertyNames:{type:`string`,pattern:`^[A-Za-z][A-Za-z0-9_]*$`},additionalProperties:{$ref:`#/$defs/property`},description:`Column definitions. Keys must start with a letter and contain only letters, digits, or underscores.`},property:{type:`object`,required:[`type`],additionalProperties:!1,properties:{description:{type:`string`,description:`Description of the column.`},type:{$ref:`#/$defs/columnType`,description:`Column data type.`},format:{$ref:`#/$defs/formatType`,description:`Semantic format hint that influences the SQLite column type.`},primary:{type:`boolean`,default:!1,description:`Mark this column as PRIMARY KEY. Only one per table.`},autoIncrement:{type:`boolean`,default:!1,description:`AUTO_INCREMENT for integer primary keys.`},unique:{type:`boolean`,default:!1,description:`Add UNIQUE constraint.`},default:{description:`Default value for the column. Type should match the column type.`},pattern:{type:`string`,description:`Regular expression guidance for extraction and validation. Not emitted as a SQLite constraint because SQLite has no portable built-in REGEXP support.`},enum:{type:`array`,items:{oneOf:[{type:`string`},{type:`number`}]},description:`Enumeration of allowed values for this field. Emitted as a SQLite CHECK constraint.`},examples:{type:`array`,description:`Example values for this field (injected into AI prompt).`,items:{}},xPrompt:{type:`string`,description:`Custom extraction instruction for this field, overrides the default AI prompt (prefixed with 'x-' to stay valid JSON Schema).`},minLength:{type:`integer`,minimum:0,description:`Minimum string length. Emitted as a SQLite CHECK constraint.`},maxLength:{type:`integer`,minimum:1,description:`Maximum string length. Emitted as a SQLite CHECK constraint.`},minimum:{type:`number`,description:`Minimum numeric value. Emitted as a SQLite CHECK constraint.`},maximum:{type:`number`,description:`Maximum numeric value. Emitted as a SQLite CHECK constraint.`},drizzle:{$ref:`#/$defs/drizzleConfig`,description:`Drizzle ORM specific overrides.`},nested:{$ref:`#/$defs/nestedConfig`,description:`Create a separate related table instead of embedding as JSON.`},foreignKey:{$ref:`#/$defs/foreignKeyRef`,description:`Foreign key reference to another table.`},properties:{$ref:`#/$defs/properties`,description:`Sub-properties when type is 'object'. Ignored unless nested.enabled or drizzle.mode='json'.`},items:{$ref:`#/$defs/property`,description:`Item schema when type is 'array'. Ignored unless items.nested.enabled.`},required:{type:`array`,items:{type:`string`},description:`Required sub-properties for nested objects.`}}},columnType:{type:`string`,enum:[`string`,`integer`,`number`,`boolean`,`object`,`array`,`null`],description:`Data type. Maps to SQLite as: string→TEXT, integer→INTEGER, number→REAL, boolean→INTEGER(boolean), object→TEXT(json), array→TEXT(json), null→TEXT.`},formatType:{type:`string`,enum:[`date-time`,`email`,`uri`,`json`],description:`Format hints: 'date-time' → INTEGER(timestamp), 'json' → TEXT(json), 'email'/'uri' → TEXT (no special mapping).`},drizzleConfig:{type:`object`,additionalProperties:!1,properties:{mode:{type:`string`,enum:[`json`,`timestamp`,`timestamp_ms`,`boolean`,`bigint`],description:`Override Drizzle column mode. 'json' stores as TEXT(json), 'timestamp'/'timestamp_ms' as INTEGER, 'boolean' as INTEGER(boolean), 'bigint' as INTEGER(bigint).`}}},examplePair:{type:`object`,required:[`text`,`output`],additionalProperties:!1,properties:{text:{type:`string`,minLength:1,description:`Source text example.`},output:{type:`object`,description:`Expected extracted output for the source text example.`}}},nestedConfig:{type:`object`,required:[`enabled`,`relation`],additionalProperties:!1,properties:{enabled:{type:`boolean`,const:!0,description:`Must be true to activate nested table creation.`},relation:{type:`string`,enum:[`has-one`,`has-many`],description:`'has-one' → one() relation, 'has-many' → many() relation. Only one level of nesting is supported.`}}},foreignKeyRef:{type:`object`,required:[`table`,`column`],additionalProperties:!1,properties:{table:{type:`string`,minLength:1,description:`Target table name (snake_case).`},column:{type:`string`,minLength:1,description:`Target column name in the referenced table.`}}}}},n=Object.prototype.hasOwnProperty;function r(e,t,n){for(n of e.keys())if(i(n,t))return n}function i(e,t){var a,o,s;if(e===t)return!0;if(e&&t&&(a=e.constructor)===t.constructor){if(a===Date)return e.getTime()===t.getTime();if(a===RegExp)return e.toString()===t.toString();if(a===Array){if((o=e.length)===t.length)for(;o--&&i(e[o],t[o]););return o===-1}if(a===Set){if(e.size!==t.size)return!1;for(o of e)if(s=o,s&&typeof s==`object`&&(s=r(t,s),!s)||!t.has(s))return!1;return!0}if(a===Map){if(e.size!==t.size)return!1;for(o of e)if(s=o[0],s&&typeof s==`object`&&(s=r(t,s),!s)||!i(o[1],t.get(s)))return!1;return!0}if(a===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(a===DataView){if((o=e.byteLength)===t.byteLength)for(;o--&&e.getInt8(o)===t.getInt8(o););return o===-1}if(ArrayBuffer.isView(e)){if((o=e.byteLength)===t.byteLength)for(;o--&&e[o]===t[o];);return o===-1}if(!a||typeof e==`object`){for(a in o=0,e)if(n.call(e,a)&&++o&&!n.call(t,a)||!(a in t)||!i(e[a],t[a]))return!1;return Object.keys(t).length===o}}return e!==e&&t!==t}function a(t){let n=e(t);try{return structuredClone(n)}catch{return JSON.parse(JSON.stringify(n))}}function o(e,t){return i(e,t)}var s=/([a-z0-9])([A-Z])/g,c=/[^a-z0-9]+/gi,l=/^_+|_+$/g,u=/_+/g,d=/^[^a-z]+/;function f(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function p(e){return e.trim().replace(s,`$1_$2`).replace(c,`_`).replace(l,``).replace(u,`_`).toLowerCase().replace(d,``)}function m(e){if(!f(e))return e;let t=a(e),n=t.title?.trim()??``;return t.title=n,t.table={...t.table,name:p(n)},t}export{t as a,o as i,m as n,a as r,p as t};
|
package/dist/web/index.html
CHANGED
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
if (dark) document.documentElement.classList.add("jscb-dark")
|
|
17
17
|
})()
|
|
18
18
|
</script>
|
|
19
|
-
<script type="module" crossorigin src="/assets/index-
|
|
19
|
+
<script type="module" crossorigin src="/assets/index-L7fuxNzg.js"></script>
|
|
20
20
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-DWTEM3RW.js">
|
|
21
21
|
<link rel="modulepreload" crossorigin href="/assets/chunk-DtRyYLXJ.js">
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assets/vue-i18n-Du42D0vb.js">
|
|
23
|
-
<link rel="modulepreload" crossorigin href="/assets/schemaNaming-
|
|
23
|
+
<link rel="modulepreload" crossorigin href="/assets/schemaNaming-q3Q55JwP.js">
|
|
24
24
|
<link rel="modulepreload" crossorigin href="/assets/api-client-CpqFbcyH.js">
|
|
25
25
|
<link rel="modulepreload" crossorigin href="/assets/dialog-CnZ7jH1l.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="/assets/dist-CElVIpns.js">
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aiex-cli",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.2-beta.1",
|
|
5
5
|
"description": "JSON Schema → SQLite with AI-powered data extraction",
|
|
6
6
|
"author": "OSpoon <zxin088@gmail.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -66,8 +66,6 @@
|
|
|
66
66
|
"execa": "^9.6.1",
|
|
67
67
|
"file-type": "^22.0.1",
|
|
68
68
|
"hono": "^4.0.0",
|
|
69
|
-
"i18next": "^26.2.0",
|
|
70
|
-
"i18next-fs-backend": "^2.6.6",
|
|
71
69
|
"jsonfile": "^6.2.1",
|
|
72
70
|
"jsonrepair": "^3.14.0",
|
|
73
71
|
"kysely": "^0.29.2",
|
|
@@ -110,6 +108,7 @@
|
|
|
110
108
|
"start": "tsx src/index.ts",
|
|
111
109
|
"test": "vitest",
|
|
112
110
|
"coverage": "vitest --coverage",
|
|
111
|
+
"smoke:cli": "node scripts/cli-smoke.mjs",
|
|
113
112
|
"smoke:package": "node scripts/package-smoke.mjs",
|
|
114
113
|
"typecheck": "tsc",
|
|
115
114
|
"lint": "eslint ."
|
package/dist/zh-CN-CJiDMnGe.mjs
DELETED
|
@@ -1,430 +0,0 @@
|
|
|
1
|
-
//#region src/locales/zh-CN.ts
|
|
2
|
-
const zhCN = {
|
|
3
|
-
common: {
|
|
4
|
-
done: "完成!",
|
|
5
|
-
failed: "失败!",
|
|
6
|
-
cancelled: "已取消",
|
|
7
|
-
save: "保存",
|
|
8
|
-
cancel: "取消",
|
|
9
|
-
delete: "删除",
|
|
10
|
-
close: "关闭",
|
|
11
|
-
loading: "加载中...",
|
|
12
|
-
unknownError: "未知错误"
|
|
13
|
-
},
|
|
14
|
-
cli: { description: "JSON Schema → SQLite,支持 AI 数据抽取" },
|
|
15
|
-
command: {
|
|
16
|
-
web: {
|
|
17
|
-
description: "启动可视化 JSON Schema 编辑器",
|
|
18
|
-
args: { port: "监听端口" },
|
|
19
|
-
starting: "正在启动 Web 服务器...",
|
|
20
|
-
serverRunning: "服务器运行在 {{url}}",
|
|
21
|
-
schemaDir: "Schema 目录: {{path}}",
|
|
22
|
-
pressCtrlC: "按 Ctrl+C 停止",
|
|
23
|
-
browserOpenFailed: "无法自动打开浏览器,请手动访问 {{url}}"
|
|
24
|
-
},
|
|
25
|
-
schema: {
|
|
26
|
-
description: "同步 JSON Schema 到 SQLite 数据库",
|
|
27
|
-
args: {
|
|
28
|
-
generate: "仅生成 Drizzle 代码,跳过迁移",
|
|
29
|
-
name: "迁移名称",
|
|
30
|
-
force: "允许高风险 schema 迁移"
|
|
31
|
-
},
|
|
32
|
-
noSchemas: "在 {{path}} 未找到 schema 文件",
|
|
33
|
-
runWebHint: "运行 {{cmd}} 在 Web UI 中创建和配置 schemas",
|
|
34
|
-
generating: "正在生成 Drizzle schema...",
|
|
35
|
-
generated: "已从 {{count}} 个 schema 文件生成 {{path}}",
|
|
36
|
-
generatedOk: "Schema 已生成",
|
|
37
|
-
generatedFail: "生成失败",
|
|
38
|
-
runningMigrations: "正在运行迁移...",
|
|
39
|
-
migrationFailed: "生成迁移失败",
|
|
40
|
-
noChanges: "未检测到变更",
|
|
41
|
-
migrationFilesGenerated: "迁移文件已生成",
|
|
42
|
-
databaseMigrated: "数据库已迁移",
|
|
43
|
-
migrationsApplied: "迁移已应用",
|
|
44
|
-
migrationFail: "迁移失败",
|
|
45
|
-
runWithoutGenerate: "完成!不加 --generate 运行以应用迁移",
|
|
46
|
-
riskSummary: "迁移风险: {{level}}({{count}} 项)",
|
|
47
|
-
highRiskBlocked: "已阻止高风险 schema 迁移。请检查 .aiex/drizzle/schema-map.json,确认后使用 {{flag}} 继续。"
|
|
48
|
-
},
|
|
49
|
-
extract: {
|
|
50
|
-
description: "从文本、图片或 PDF 中抽取结构化数据",
|
|
51
|
-
args: {
|
|
52
|
-
schema: "Schema 名称(不含 .json 扩展名)",
|
|
53
|
-
file: "要抽取的文件路径。支持: {{types}}。",
|
|
54
|
-
model: "用于抽取的 AI 模型(覆盖自动选择)",
|
|
55
|
-
dir: "包含待批量抽取文件的目录",
|
|
56
|
-
glob: "批量模式下的文件过滤 glob 模式(如 \"*.pdf\")",
|
|
57
|
-
noInsert: "仅保存 JSON,不插入 SQLite",
|
|
58
|
-
force: "即使文件已被成功处理也强制重新抽取"
|
|
59
|
-
},
|
|
60
|
-
interactive: {
|
|
61
|
-
selectSchema: "选择要抽取数据的 schema:",
|
|
62
|
-
chooseSource: "选择输入源:",
|
|
63
|
-
singleFile: "单个文件",
|
|
64
|
-
singleFileHint: "从文件抽取(txt、pdf、图片)",
|
|
65
|
-
batchDir: "批量目录",
|
|
66
|
-
batchDirHint: "抽取目录中所有支持的文件",
|
|
67
|
-
enterFilePath: "输入文件路径:",
|
|
68
|
-
enterDirPath: "输入目录路径:",
|
|
69
|
-
filePathRequired: "请输入文件路径",
|
|
70
|
-
dirPathRequired: "请输入目录路径",
|
|
71
|
-
askForce: "是否强制重新抽取已成功处理过的文件?"
|
|
72
|
-
},
|
|
73
|
-
errors: {
|
|
74
|
-
noAIConfig: "未找到 AI 配置,请运行 \"{{cmd}}\" 先配置 AI 设置",
|
|
75
|
-
noApiKey: "API Key 未配置,请在 Web 界面中配置 AI 设置",
|
|
76
|
-
noModels: "未配置模型,请在 AI 设置中添加至少一个模型",
|
|
77
|
-
modelNotFound: "未找到模型 \"{{model}}\"。可用模型: {{available}}",
|
|
78
|
-
conflictFileDir: "不能同时使用 -f/--file 和 -d/--dir",
|
|
79
|
-
schemaRequiredBatch: "批量模式需要指定 schema 名称(-s)",
|
|
80
|
-
schemaRequiredSingle: "请提供 schema 名称(-s)进行抽取",
|
|
81
|
-
fileRequiredSingle: "请提供文件路径(-f)进行抽取",
|
|
82
|
-
noSchemas: "在 {{path}} 未找到 schema 文件。运行 {{cmd}} 创建和配置 schemas"
|
|
83
|
-
},
|
|
84
|
-
batch: {
|
|
85
|
-
scanning: "正在扫描 {{dir}} 中支持的文件...",
|
|
86
|
-
found: "找到 {{count}} 个待处理的文件",
|
|
87
|
-
processing: "[{{current}}/{{total}}] 正在处理: {{file}}",
|
|
88
|
-
complete: "批量处理完成:{{success}} 个成功,{{fail}} 个失败,共 {{total}} 个",
|
|
89
|
-
failSummary: "处理完成但有失败({{count}} 个失败)",
|
|
90
|
-
errors: {
|
|
91
|
-
cannotReadDir: "无法读取目录: {{dir}}",
|
|
92
|
-
noSupportedFiles: "在 {{dir}} 未找到支持的文件"
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
file: {
|
|
96
|
-
hashWarning: "计算文件哈希失败 {{file}}: {{error}}",
|
|
97
|
-
alreadyProcessed: "文件 {{file}}(哈希: {{hash}})已成功处理,跳过。",
|
|
98
|
-
ocrText: "已通过本地 OCR 提取图片文本(置信度: {{confidence}}%)",
|
|
99
|
-
pdfFallback: "已回退到 unpdf — {{count}} 页已提取",
|
|
100
|
-
pdfConverted: "已通过 {{name}} 转换 PDF,{{count}} 页",
|
|
101
|
-
markdownSaved: "Markdown 已保存: {{path}}",
|
|
102
|
-
errorProcessing: "处理 {{name}} 时出错: {{error}}",
|
|
103
|
-
extractedFrom: "正在从 {{file}} 中抽取...",
|
|
104
|
-
extracting: "正在抽取数据...",
|
|
105
|
-
extractFail: "抽取失败",
|
|
106
|
-
extractComplete: "抽取完成",
|
|
107
|
-
extractRetry: "API 返回 {{code}},{{delay}} 秒后重试({{attempt}}/{{max}})",
|
|
108
|
-
resultSaved: "结果已保存: {{path}}",
|
|
109
|
-
tokenUsage: "Token 使用量: prompt={{prompt}}, completion={{completion}}, total={{total}}",
|
|
110
|
-
insertingDb: "正在插入数据库...",
|
|
111
|
-
dbNotReady: "数据库未就绪",
|
|
112
|
-
insertedTables: "已插入 {{count}} 个表",
|
|
113
|
-
dbInsertFail: "数据库插入失败",
|
|
114
|
-
processSuccess: "已处理: {{file}}",
|
|
115
|
-
notionSynced: "已同步到 Notion: {{count}} 页",
|
|
116
|
-
notionSyncFail: "Notion 同步失败: {{error}}",
|
|
117
|
-
webhookSynced: "已成功推送 Webhook 负载",
|
|
118
|
-
webhookSyncFail: "Webhook 推送失败: {{error}}",
|
|
119
|
-
extractionFailed: "失败: {{error}}"
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
watch: {
|
|
123
|
-
description: "监听目录中的新文件并自动抽取数据",
|
|
124
|
-
args: {
|
|
125
|
-
schema: "用于抽取的 schema 名称(不含 .json 扩展名)",
|
|
126
|
-
dir: "要监听的目录路径",
|
|
127
|
-
model: "用于抽取的 AI 模型(覆盖默认/自动选择的模型)",
|
|
128
|
-
noInsert: "仅保存 JSON,不插入 SQLite"
|
|
129
|
-
},
|
|
130
|
-
interactive: {
|
|
131
|
-
selectSchema: "选择用于监听抽取的 schema:",
|
|
132
|
-
enterDirPath: "输入要监听的目录路径:",
|
|
133
|
-
dirPathRequired: "请输入目录路径",
|
|
134
|
-
selectModel: "选择 AI 模型:",
|
|
135
|
-
autoModel: "自动选择模型",
|
|
136
|
-
askNoInsert: "是否仅保存 JSON,不插入 SQLite?"
|
|
137
|
-
},
|
|
138
|
-
errors: {
|
|
139
|
-
schemaRequired: "需要指定 schema 名称(-s)",
|
|
140
|
-
dirRequired: "需要指定监听目录路径(-d)",
|
|
141
|
-
schemaNotFound: "未找到 schema 文件 \"{{name}}\"",
|
|
142
|
-
dirNotExist: "监听目录不存在: {{dir}} — {{error}}",
|
|
143
|
-
notADirectory: "监听路径不是目录: {{dir}}"
|
|
144
|
-
},
|
|
145
|
-
starting: {
|
|
146
|
-
watchFolder: "开始监听文件夹: {{dir}}",
|
|
147
|
-
schema: "Schema: {{name}}",
|
|
148
|
-
modelOverride: "模型覆盖: {{name}}"
|
|
149
|
-
},
|
|
150
|
-
events: {
|
|
151
|
-
stopped: "正在停止监听守护进程...",
|
|
152
|
-
stoppedOk: "守护进程已停止。",
|
|
153
|
-
pressCtrlC: "按 Ctrl+C 停止",
|
|
154
|
-
skippedUnsupported: "[监听器] 跳过不支持的文件类型: {{file}}",
|
|
155
|
-
fileDetected: "[监听器] 检测到新文件: {{file}}。正在处理...",
|
|
156
|
-
alreadyProcessed: "[监听器] 文件 {{file}}(哈希: {{hash}})已被成功处理,跳过。",
|
|
157
|
-
processedSuccess: "[监听器] 文件处理成功: {{file}}",
|
|
158
|
-
processingFailed: "[监听器] 文件处理失败: {{file}}",
|
|
159
|
-
extractionFailed: "抽取失败,请查看抽取审计历史。",
|
|
160
|
-
errorProcessing: "[监听器] 处理文件 {{file}} 时出错: {{error}}",
|
|
161
|
-
watcherError: "[监听器] 监听器错误: {{error}}"
|
|
162
|
-
},
|
|
163
|
-
notification: {
|
|
164
|
-
success: "成功处理并插入数据。",
|
|
165
|
-
successTitle: "AIEX 监听: {{file}}",
|
|
166
|
-
failTitle: "AIEX 监听失败: {{file}}"
|
|
167
|
-
}
|
|
168
|
-
},
|
|
169
|
-
doctor: {
|
|
170
|
-
description: "打印环境和配置诊断信息",
|
|
171
|
-
args: { json: "以 JSON 格式输出诊断信息" },
|
|
172
|
-
headers: ["key", "value"],
|
|
173
|
-
diagnosticsFailed: "诊断失败: {{error}}",
|
|
174
|
-
notTested: "未测试",
|
|
175
|
-
none: "无"
|
|
176
|
-
},
|
|
177
|
-
completion: {
|
|
178
|
-
description: "生成 shell 补全脚本(bash|zsh|fish)\n\n用法:\n aiex completion bash # source <(aiex completion bash)\n aiex completion zsh # source <(aiex completion zsh)\n aiex completion fish # aiex completion fish | source",
|
|
179
|
-
args: { shell: "Shell 类型: bash, zsh, fish" },
|
|
180
|
-
error: "错误: {{error}}"
|
|
181
|
-
}
|
|
182
|
-
},
|
|
183
|
-
errors: {
|
|
184
|
-
file: {
|
|
185
|
-
empty: "上传的文件为空",
|
|
186
|
-
sizeExceeded: "文件大小({{size}}MB)超过 {{limit}} 限制: {{file}}",
|
|
187
|
-
unsupportedType: "不支持的文件类型 \"{{type}}\"。支持: {{supported}}。",
|
|
188
|
-
missingUpload: "上传的文件不再可用。请使用原始文件重新抽取。",
|
|
189
|
-
notADirectory: "不是目录: {{dir}}"
|
|
190
|
-
},
|
|
191
|
-
ai: {
|
|
192
|
-
apiKeyMissing: "API Key 未配置。请在 Web UI 中配置 AI 设置。",
|
|
193
|
-
extractionNotObject: "抽取结果不是对象,无法写入 Notion。",
|
|
194
|
-
noModels: "未配置 AI 模型。请在 AI 设置中添加至少一个模型。",
|
|
195
|
-
noVisionModel: "图片输入需要支持视觉能力的模型{{hint}}。",
|
|
196
|
-
noVisionModelContext: "没有找到上下文窗口足够(≥{{tokens}} tokens)的视觉模型{{hint}}。",
|
|
197
|
-
addSuitableModel: "请在 AI 设置中添加合适的视觉模型。"
|
|
198
|
-
},
|
|
199
|
-
ocr: {
|
|
200
|
-
platformUnsupported: "本地 OCR 仅在 macOS 或 Windows 上可用。当前平台: {{platform}}。",
|
|
201
|
-
disabled: "AI 设置中禁用了图片 OCR 回退。",
|
|
202
|
-
unavailable: "本地 OCR 不可用。请安装可选依赖 @napi-rs/system-ocr 并批准其原生构建脚本。{{error}}",
|
|
203
|
-
noText: "本地 OCR 未识别出图片中的任何文字。",
|
|
204
|
-
lowConfidence: "本地 OCR 置信度 {{confidence}}% 低于配置的最低值 {{min}}%。"
|
|
205
|
-
},
|
|
206
|
-
schema: {
|
|
207
|
-
validationFailed: "Schema 校验失败: {{name}}\n{{issues}}",
|
|
208
|
-
cannotRead: "无法读取 schema 文件: {{name}}",
|
|
209
|
-
invalidJson: "Schema 文件 JSON 格式无效: {{name}}",
|
|
210
|
-
noFiles: "未找到 schema 文件",
|
|
211
|
-
migrationFailed: "迁移失败",
|
|
212
|
-
migrationHelperInvalidOutput: "迁移辅助程序未返回有效输出",
|
|
213
|
-
migrationHelperFailed: "迁移辅助程序失败",
|
|
214
|
-
highRiskMigrationBlocked: "已阻止高风险 schema 迁移"
|
|
215
|
-
},
|
|
216
|
-
db: {
|
|
217
|
-
notFound: "在 {{path}} 未找到数据库。请先运行 {{cmd}} 创建数据库。",
|
|
218
|
-
tableNotFound: "在数据库中未找到表 \"{{name}}\"。请先运行 {{cmd}} 创建表。",
|
|
219
|
-
cannotVerify: "无法验证数据库: {{error}}"
|
|
220
|
-
},
|
|
221
|
-
notion: {
|
|
222
|
-
tokenRequired: "需要 Notion 集成令牌。",
|
|
223
|
-
idRequired: "需要 Notion 数据库或数据源 URL/ID。",
|
|
224
|
-
notEnabled: "Notion 导出未启用。请先配置 Notion 设置。",
|
|
225
|
-
noSchemaConfig: "Schema \"{{name}}\" 未配置 Notion 数据库。",
|
|
226
|
-
noDatabaseId: "Schema \"{{name}}\" 需要配置 Notion 数据库 ID。",
|
|
227
|
-
noDataSource: "未找到此 Notion 数据库的数据源。请从 Notion 复制数据源链接,或将源数据库分享给集成。",
|
|
228
|
-
noProperties: "Notion 数据源未返回属性。请确保已分享给集成且不是链接数据源。",
|
|
229
|
-
noFieldsMatched: "没有抽取的字段匹配 Notion 数据库属性。",
|
|
230
|
-
unknown: "Notion 连接失败"
|
|
231
|
-
},
|
|
232
|
-
pdf: {
|
|
233
|
-
externalNotConfigured: "已选择外部 PDF 转换器但未配置外部命令。",
|
|
234
|
-
converterRequiresConfig: "PDF 转换器 \"{{name}}\" 需要配置。",
|
|
235
|
-
mineruApiTokenRequired: "未配置 Mineru API Token,请先在 AI 设置中配置。"
|
|
236
|
-
},
|
|
237
|
-
extractionAudit: {
|
|
238
|
-
recordNotFound: "未找到抽取审计记录: {{id}}",
|
|
239
|
-
interrupted: "抽取未完成,可能已被中断。"
|
|
240
|
-
}
|
|
241
|
-
},
|
|
242
|
-
server: {
|
|
243
|
-
invalidTableName: "无效的表名",
|
|
244
|
-
invalidFileName: "无效的抽取文件名",
|
|
245
|
-
schemaNotFound: "未找到 Schema",
|
|
246
|
-
saveSchemaFailed: "保存 Schema 失败",
|
|
247
|
-
promptSnapshotNotAvailable: "未找到提示词快照。请先保存 schema。",
|
|
248
|
-
deleteSchemaFailed: "删除 Schema 失败",
|
|
249
|
-
extractionNotFound: "未找到抽取结果",
|
|
250
|
-
cannotInferSchema: "无法从抽取文件名推断 schema 名称",
|
|
251
|
-
schemaRequired: "需要提供 Schema",
|
|
252
|
-
provideTextOrFile: "请提供文本或上传文件进行抽取",
|
|
253
|
-
conflictTextAndFile: "文本和文件输入不能同时使用",
|
|
254
|
-
aiConfigNotFound: "未找到 AI 配置。请先配置 AI 设置。",
|
|
255
|
-
apiKeyNotConfigured: "API Key 未配置。请先配置 AI 设置。",
|
|
256
|
-
noModelsConfigured: "未配置模型。请在 AI 设置中添加至少一个模型。",
|
|
257
|
-
modelNotFound: "在 AI 设置中未找到模型 \"{{name}}\"",
|
|
258
|
-
extractionRecordNotFound: "未找到抽取记录",
|
|
259
|
-
dbNotFound: "未找到数据库。请先运行 aiex schema。",
|
|
260
|
-
tableNotFound: "在数据库中未找到表 \"{{name}}\"",
|
|
261
|
-
promptSchemaPlaceholder: "系统提示词必须包含 {schema} 占位符",
|
|
262
|
-
promptTextPlaceholder: "用户提示词必须包含 {text} 占位符",
|
|
263
|
-
atLeastOneModel: "至少需要配置一个模型",
|
|
264
|
-
notionTokenRequired: "启用 Notion 导出时需要提供 Notion 令牌",
|
|
265
|
-
notionDbIdRequired: "Schema \"{{name}}\" 需要 Notion 数据库 ID",
|
|
266
|
-
migrationFailed: "迁移失败"
|
|
267
|
-
},
|
|
268
|
-
webUi: {
|
|
269
|
-
title: "AIEX Schema 编辑器",
|
|
270
|
-
subtitle: "可视化 JSON Schema 编辑器,用于 SQLite 数据库生成",
|
|
271
|
-
editor: "编辑器",
|
|
272
|
-
data: "数据",
|
|
273
|
-
savedSchemas: "已保存的 Schema",
|
|
274
|
-
newSchema: "新建",
|
|
275
|
-
loadExample: "加载示例",
|
|
276
|
-
tables: "表",
|
|
277
|
-
hasData: "有数据",
|
|
278
|
-
empty: "空",
|
|
279
|
-
previewPrompt: "预览提示词",
|
|
280
|
-
toggleDarkMode: "切换暗色模式",
|
|
281
|
-
aiSettings: "AI 设置",
|
|
282
|
-
loading: "加载中...",
|
|
283
|
-
promptPreview: "提示词预览 - {{name}}",
|
|
284
|
-
systemPrompt: "系统提示词",
|
|
285
|
-
userPromptTemplate: "用户提示词模板",
|
|
286
|
-
noPromptSnapshot: "暂无提示词快照。请先保存 schema。",
|
|
287
|
-
extractionJson: "抽取 JSON",
|
|
288
|
-
selectTable: "从侧边栏选择一个表",
|
|
289
|
-
rowsPerPage: "每页行数:",
|
|
290
|
-
search: "搜索...",
|
|
291
|
-
confirmUnsaved: "有未保存的更改。加载新的 schema 将丢弃这些更改。是否继续?",
|
|
292
|
-
confirmNewSchema: "有未保存的更改。创建新的 schema 将丢弃这些更改。是否继续?",
|
|
293
|
-
confirmLoadExample: "有未保存的更改。加载示例将丢弃这些更改。是否继续?",
|
|
294
|
-
pleaseEnterTableName: "请输入表名",
|
|
295
|
-
extractionSaved: "抽取 JSON",
|
|
296
|
-
aiSettingsTitle: "AI 设置",
|
|
297
|
-
provider: "提供商",
|
|
298
|
-
baseUrl: "基础 URL",
|
|
299
|
-
apiKey: "API 密钥",
|
|
300
|
-
timeout: "超时(秒)",
|
|
301
|
-
models: "模型",
|
|
302
|
-
addModel: "添加模型",
|
|
303
|
-
modelName: "模型名称(如 gpt-4o)",
|
|
304
|
-
structuredOutput: "结构化输出",
|
|
305
|
-
textOnlyOutput: "仅文本输出",
|
|
306
|
-
visionSupported: "支持视觉",
|
|
307
|
-
visionUnsupported: "不支持视觉",
|
|
308
|
-
subscribe: "注册表",
|
|
309
|
-
imageInput: "图片输入",
|
|
310
|
-
imageInputSummary: {
|
|
311
|
-
visionModel: "图片文件将使用您配置的视觉模型。",
|
|
312
|
-
ocrFallback: "未配置视觉模型,且本地 OCR 不可用。",
|
|
313
|
-
ocrLocal: "未配置视觉模型。图片文本将在 macOS 或 Windows 上使用本地 OCR。",
|
|
314
|
-
ocrAuto: "未配置视觉模型。在 macOS 或 Windows 上,将自动尝试本地 OCR 处理文本密集型图片。"
|
|
315
|
-
},
|
|
316
|
-
visionModelConfigured: "已配置视觉模型",
|
|
317
|
-
noVisionModel: "无视觉模型",
|
|
318
|
-
advancedImageSettings: "高级图片设置",
|
|
319
|
-
hideAdvancedImageSettings: "隐藏高级图片设置",
|
|
320
|
-
ocrFallback: "本地 OCR 回退",
|
|
321
|
-
ocrLanguages: "语言",
|
|
322
|
-
ocrMinConfidence: "最低置信度",
|
|
323
|
-
ocrHint: "图片抽取总是优先使用视觉模型。仅当没有可用视觉模型时才使用 OCR 回退。",
|
|
324
|
-
pdfConversion: "PDF 转换",
|
|
325
|
-
converter: "转换器",
|
|
326
|
-
command: "命令",
|
|
327
|
-
arguments: "参数",
|
|
328
|
-
outputFile: "输出文件(可选)",
|
|
329
|
-
fallbackToBuiltin: "回退到内置转换器",
|
|
330
|
-
keepConvertedFiles: "在磁盘上保留转换后的文件",
|
|
331
|
-
placeholders: "占位符:",
|
|
332
|
-
externalHint: "占位符: {input}, {outputDir}, {basename}。如果输出文件为空,将自动选择第一个生成的 .md 文件。",
|
|
333
|
-
langfuseTracing: "Langfuse 追踪",
|
|
334
|
-
enabled: "启用",
|
|
335
|
-
secretKey: "密钥",
|
|
336
|
-
publicKey: "公钥",
|
|
337
|
-
host: "主机(可选)",
|
|
338
|
-
notionExport: "Notion 导出",
|
|
339
|
-
integrationToken: "集成令牌",
|
|
340
|
-
schemaBinding: "Schema 绑定",
|
|
341
|
-
selectSchema: "选择一个 schema",
|
|
342
|
-
databaseUrl: "数据库/数据源 URL 或 ID",
|
|
343
|
-
connectAndMap: "连接并映射",
|
|
344
|
-
advancedMapping: "高级映射",
|
|
345
|
-
titleProperty: "标题属性(可选)",
|
|
346
|
-
fieldMapJson: "字段映射 JSON",
|
|
347
|
-
notionMappingHint: "选择 schema 会自动填充左侧的键。嵌套对象使用点路径,如 {{path}}。对象数组将被跳过,如有需要后续可单独建模为 Notion 数据源。",
|
|
348
|
-
promptTemplates: "提示词模板",
|
|
349
|
-
promptPlaceholderHint: "占位符: {{schema}} JSON Schema 结构描述, {{text}} 待提取的文本",
|
|
350
|
-
connectedProperties: "已连接 · {{count}} 个属性已加载",
|
|
351
|
-
fieldsMapped: "已连接 · {{mapped}}/{{total}} 个字段已映射",
|
|
352
|
-
fieldMapObject: "字段映射必须是 JSON 对象",
|
|
353
|
-
fieldMapString: "字段映射 \"{{key}}\" 的值必须是字符串",
|
|
354
|
-
fieldMapValidJson: "字段映射必须是有效的 JSON",
|
|
355
|
-
notionConnected: "已连接到 Notion({{count}} 个属性)",
|
|
356
|
-
notionSyncSuccess: "已同步到 Notion({{count}} 页)",
|
|
357
|
-
notionSyncFailed: "Notion 同步失败",
|
|
358
|
-
toastSaved: "已保存",
|
|
359
|
-
toastLoadFailed: "加载 {{name}} 失败",
|
|
360
|
-
toastSaveFailed: "保存 {{fileName}} 失败",
|
|
361
|
-
toastDeleteFailed: "删除 {{name}} 失败",
|
|
362
|
-
toastLoadExtractions: "加载抽取记录失败",
|
|
363
|
-
toastLoadTables: "加载表列表失败",
|
|
364
|
-
toastLoadFailedGeneric: "加载表数据失败",
|
|
365
|
-
toastMigrationApplied: "迁移已应用({{changes}} 处更改,{{tables}} 个表)",
|
|
366
|
-
toastNoChanges: "未检测到变更",
|
|
367
|
-
toastMigrationFailed: "迁移失败",
|
|
368
|
-
toastSchemaListFailed: "加载 schema 列表失败",
|
|
369
|
-
toastPromptPreviewFailed: "加载提示词快照失败",
|
|
370
|
-
toastInspectNotionFailed: "Notion 连接失败",
|
|
371
|
-
toastLoadFullDataFailed: "加载完整表数据失败",
|
|
372
|
-
toastSelectSchema: "请先选择一个 schema",
|
|
373
|
-
toastEnterToken: "请输入 Notion 集成令牌",
|
|
374
|
-
toastEnterDatabaseId: "请输入 Notion 数据库或数据源 URL/ID",
|
|
375
|
-
synced: "已同步",
|
|
376
|
-
failed: "失败",
|
|
377
|
-
pending: "待处理",
|
|
378
|
-
retry: "重试",
|
|
379
|
-
sync: "同步",
|
|
380
|
-
viewJson: "查看 JSON",
|
|
381
|
-
viewExtractionJson: "查看抽取 JSON",
|
|
382
|
-
download: "下载",
|
|
383
|
-
exportExcel: "Excel",
|
|
384
|
-
exportCsv: "CSV",
|
|
385
|
-
exportJson: "JSON",
|
|
386
|
-
selectExtraction: "从侧边栏选择一条抽取记录",
|
|
387
|
-
notionStatusSynced: "已同步到 Notion",
|
|
388
|
-
notionStatusFailed: "Notion 同步失败",
|
|
389
|
-
notionStatusNotSynced: "未同步到 Notion",
|
|
390
|
-
syncNotion: "同步 Notion",
|
|
391
|
-
retryNotion: "重试 Notion"
|
|
392
|
-
},
|
|
393
|
-
config: { ocrDefaultLanguages: "en-US, zh-Hans" },
|
|
394
|
-
pdf: {
|
|
395
|
-
converterOptions: {
|
|
396
|
-
unpdf: "内置文本抽取(unpdf)",
|
|
397
|
-
liteparse: "内置版面解析(liteparse)",
|
|
398
|
-
mineru: "MinerU(mineru)",
|
|
399
|
-
mineru_api: "MinerU API(mineru_api)",
|
|
400
|
-
external: "自定义外部命令"
|
|
401
|
-
},
|
|
402
|
-
ocrFallbackOptions: { localAuto: "视觉模型或本地 OCR" }
|
|
403
|
-
},
|
|
404
|
-
fields: {
|
|
405
|
-
config: "字段配置",
|
|
406
|
-
fewShotExamples: "少样本示例",
|
|
407
|
-
addExample: "添加示例",
|
|
408
|
-
inputTextExample: "输入文本示例",
|
|
409
|
-
expectedJsonOutput: "期望的 JSON 输出",
|
|
410
|
-
validJson: "有效 JSON",
|
|
411
|
-
invalidJson: "无效 JSON",
|
|
412
|
-
genTemplate: "生成模板",
|
|
413
|
-
noExamples: "未定义少样本示例",
|
|
414
|
-
deleteExample: "删除示例",
|
|
415
|
-
inputPlaceholder: "在此粘贴非结构化文本示例...",
|
|
416
|
-
outputPlaceholder: "{ ... }",
|
|
417
|
-
mustStartLowercase: "必须以小写字母开头",
|
|
418
|
-
onlyLowercaseAllow: "只允许小写字母、数字和下划线",
|
|
419
|
-
lessThan: "-"
|
|
420
|
-
},
|
|
421
|
-
extraction: { status: {
|
|
422
|
-
succeeded: "成功",
|
|
423
|
-
failed: "失败",
|
|
424
|
-
stale: "过期",
|
|
425
|
-
running: "运行中"
|
|
426
|
-
} }
|
|
427
|
-
};
|
|
428
|
-
|
|
429
|
-
//#endregion
|
|
430
|
-
export { zhCN };
|
|
File without changes
|