/* ===== FigureForge UI dictionary ===== */
GAL_I18N.register({
en:{
"sub":"Upload your paper → retrieve the best-matching references from {n} top-conference figures → draft your Figure 1",
"pill":"Runs locally in your browser · the PDF is sent only to the Step 1 model when you click parse",
"boot":"Loading the search index and local CLIP model (first run downloads tens of MB)…",
"s1":"Enter your paper",
"s1.note":"Fill the five boxes below, top to bottom",
"box.intent":"Figure intent",
"box.source":"Paper content source",
"box.paper":"Paper text or abstract",
"box.paper.tip":"paste text, or upload a PDF",
"box.search":"Search references",
"target.which":"Which figure to generate",
"target.overview":"Figure 1 overview / Teaser (default)",
"target.architecture":"Method architecture",
"target.pipeline":"Pipeline / process",
"target.results":"Results",
"target.custom":"Custom (manual description)",
"target.desc":"Describe the figure you want",
"target.descPh":"e.g. draw the Section 3.2 decoder with cross-attention and KV cache",
"src":"Source",
"src.free":"Free input (no extraction)",
"src.basic":"Basic PDF extraction (title + abstract + keywords)",
"src.intent":"Intent-based PDF extraction (recommended)",
"src.custom":"Custom sections / pages / keywords",
"src.query":"Extract range",
"src.queryPh":"e.g. 3.2 Decoder; pages 5–6; cross-attention",
"hint.label":"Parse notes",
"modehint.idle":"Upload a PDF first. The parser reads the paper, summarizes the sections matching your figure intent, and produces an editable drafting prompt.",
"meta.nopdf":"No PDF uploaded yet.",
"api.sum":"Paper parser model & API",
"api.badge":"key stays in this browser",
"provider":"Provider",
"keyPh":"Paste your API key; stored only in this browser",
"refresh":"Refresh model list",
"parsemodel":"Parser model",
"parseid":"Parser model ID",
"parseidPh":"e.g. gpt-4.1 or gemini-2.5-pro",
"hint.pdf":"The PDF goes to the model picked here through three channels in turn (document part → locally extracted text → locally rendered page images), so every provider can parse it; picking and summarising the sections is always done by that model.",
"relay.label":"Use a relay / custom base URL",
"relay.base":"Base URL",
"relay.preset":"Relay service",
"relay.manual":"Custom address",
"relay.infistarCN":"Infistar — Mainland China",
"relay.infistarGlobal":"Infistar — International",
"relay.ph":"e.g. https://your-relay.com/v1",
"customid":"Generation model ID",
"customidPh":"e.g. claude-opus-5-5 or gpt-5",
"paperPh":"Paste the paper title + abstract (or method overview). Example:\nWe propose a diffusion-based video editing framework that ...",
"upload":"Upload paper PDF",
"upload.small":"Extract by figure intent",
"ex.label":"No paper? Try an example:",
"ex.robot":"Robot", "ex.video":"Video", "ex.llm":"LLM",
"lab.pattern":"Pattern", "lab.venue":"Venue", "lab.year":"Year", "lab.tier":"Tier",
"opt.all":"All",
"searchBtn":"Search references",
"hint.search":"CLIP semantics + BM25 keywords; with no input every figure is listed — just keep scrolling.",
"s2":"Pick reference figures",
"s2.note":"tick the same-type references to fuse — 4 or more for a two-stage run, up to 10",
"s3":"Generate your Figure 1 draft",
"s3.note":"choose the workflow, then confirm the model",
"s4":"Edit and export",
"s4.note":"download SVG now; PPTX / VSDX use the relay renderer",
"box.refs":"Selected references",
"box.pass":"Workflow",
"box.model":"Generation model",
"box.demo":"What good looks like",
"settings.badge":"reuses the Step 1 provider & key",
"guide.note":"learn the layout and palette, not the content",
"grid.idle":"No results yet — fill in the boxes above and hit “Search references”.",
"grid.total":"{n} figures",
"grid.loading":"Loading more figures…",
"grid.end":"All {n} figures shown",
"clear":"Clear selection",
"picknote":"Two-stage mode: tick at least 4 same-type figures (closer to 10 gives the layout more to work from). Direct mode: 2-4 figures are enough.",
"refs.initial":"No references selected yet; tick figures above.",
"pass.direct":"Direct", "pass.direct.sub":"2-4 picks — one step",
"pass.two":"Two-stage", "pass.two.sub":"4+ picks — distil, then generate",
"stp1":"Analyze references", "stp2":"Generate figure",
"provider.infistar":"Infistar (recommended)",
"infistar.signup":"Sign up via our referral link to get ¥5 in trial credit and enjoy GPT, Gemini, and Claude →",
"mode.svg":"Editable SVG draft",
"mode.image":"AI bitmap draft (image model required)",
"modelLabel":"Model",
"hint.model":"The API key and provider are configured in Step 1. SVG uses a chat / vision model; bitmap uses an image model.",
"analyzemodel":"Vision model for analysis",
"genBtn":"Generate draft",
"guide.t":"Using references well",
"g1":"Learn the layout, not the content. See how the canvas splits into panels (problem / method / results) and where the visual focus sits; fill panels with your own modules.",
"g2":"Learn the palette. One main color plus one accent; distinguish method modules with shades of the same hue. Top-conference figures use ample whitespace and restrained saturation.",
"g3":"Two-stage analysis makes multiple picks reliable. Tick at least 4 framework-tagged figures; the vision model distils their common grammar and picks 4-6 representatives before generating.",
"g4":"Learn the expression. One idea per panel, arrows for data flow, short phrase labels; Figure 1 only needs to show “input → our method → output / results”.",
"g5":"Convert to an editable format, then refine. After the draft is generated, convert it to the format each tool edits: .vsdx for Visio, .pptx for PowerPoint, .svg for Figma / draw.io — fix text and alignment there, then export the submission format.",
"tut1":"Tick at least 4 same-type references (keep scrolling to browse all)",
"tut2":"② Same prompt: FigureForge vs a generic text-to-image model",
"tut3":"③ Export with every detail editable",
"tut3.editable":"Editable elements in PowerPoint",
"tut3.result":"Exported figure",
"lb.dialog":"Reference image", "lb.close":"Close", "lb.prev":"Previous", "lb.next":"Next",
"lb.image":"View image ↗", "lb.paper":"Open paper ↗",
"toggle.title":"Switch to English",
/* ---- module dynamic ---- */
"tg.overview":"Figure 1 overview / Teaser", "tg.architecture":"Method architecture",
"tg.pipeline":"Pipeline / process", "tg.results":"Results", "tg.custom":"Custom",
"timeout":"{l} timed out ({s} s). Check the network or refresh and retry.",
"cache.hit":"Browser cache hit", "cache.will":"Local index and model will be cached",
"boot.cache":"Reading cache…", "boot.manifest":"Loading manifest and search index…",
"boot.clip1":"Loading local CLIP (① tokenizer)…", "boot.clip2":"Loading local CLIP (② model, ~63 MB)…",
"boot.fail":"Initialization failed: {m}. Refresh the page; if it repeats, check the network.",
"grid.empty":"No figures match; try widening the filters.",
"card.ariaSel":"Deselect reference: {t}", "card.aria":"Select reference: {t}",
"pick.sel":"✓ Selected", "pick.add":"+ Pick",
"act.preview":"Preview", "act.paper":"Paper ↗",
"countHint":"{n}/{m} selected",
"err.maxrefs":"At most {m} references (two-stage: 4 or more same type; direct: 2-4).",
"refs.strip2":"No references yet; tick above (two-stage 4+ / direct 2-4).",
"ps.loading":"Parsing · please wait", "ps.success":"Parsing complete", "ps.error":"Parsing incomplete",
"ps.sending":"Sending the PDF; the model extracts and summarizes the relevant sections…",
"ps.meta1":"Parser model: {m} · uses the Step 1 API configuration",
"ps.done":"Relevant sections extracted and combined into a drafting prompt. You can keep editing below.",
"ps.meta2":"{f} · parsed by {m}; {n} relevant passages returned.",
"ps.fail":"Model parsing failed; switch to a model that supports PDF / document input, or use free input.",
"ps.meta3":"No local fallback text is generated, to avoid mistaking low-quality extraction for a model result.",
"ps.nocfg":"Configure the provider, API key and parser model in Step 1 first.",
"ps.nodata":"Could not read the PDF data.",
"ps.extracting":"This provider refused the document part — extracting the PDF text locally and retrying…",
"ps.meta1b":"Parser model: {m} · PDF text transport (extracted locally)",
"ps.texthdr":"Paper file: {f} ({p} pages; the locally extracted body text follows).",
"ps.meta2t":"{f} · parsed by {m} (PDF text mode, {c} characters extracted locally); {n} relevant passages returned.",
"ps.scanned":"No text could be extracted from this PDF (probably a scan), and the provider refused the document part: {m}",
"ps.nofallback":"Document part refused ({a}); local text extraction also failed ({b}).",
"ps.errline":"Reason: {m}",
"ps.rendering":"Rendering the PDF pages locally and retrying (vision model)…",
"ps.meta1c":"Parser model: {m} · PDF page-image transport (rendered locally)",
"ps.imgthdr":"Paper file: {f} ({p} of {t} pages, rendered locally as page images).",
"ps.meta2i":"{f} · parsed by {m} (page-image mode, {p} pages rendered locally); {n} relevant passages returned.",
"ps.modeDoc":"document part", "ps.modeText":"extracted text", "ps.modeImg":"page images",
"ps.allfailed":"{m} could not parse this PDF on any channel — {e}. Try a vision-capable model, or paste the section text by hand.",
"err.pdfparse":"PDF model parsing failed: {m}",
"cm.free":"Free input: no parser is called.",
"cm.basic":"The parser extracts the title, abstract and keywords — suited to overview figures.",
"cm.intent":"The parser summarizes the sections matching your figure intent and merges them with the abstract.",
"cm.custom":"The parser locates and summarizes the sections, pages or keywords you give.",
"up.reading":"Reading and parsing…",
"up.size":"PDF exceeds 25 MB; compress it or paste the text of the sections to parse",
"up.meta":"Read {f} ({s} KB); waiting for the parser.",
"up.fail":"Failed to read the PDF: {m}",
"ref.fail":"Failed to read reference image: {f}",
"og.custom":"Custom: enter the model ID below",
"og.chat":"Recommended chat models", "og.vision":"Vision-capable (reads references directly)",
"og.image":"Recommended image models",
"og.yours":"Enabled on your account (live pull, {d})",
"og.nolive":"This provider blocks browser queries · using the hosted list",
"og.hosted":"(the hosted list ships with the repo; new models appear on load)",
"og.parser":"Chat / vision parser models", "og.live":"Enabled on your account (live)",
"og.amodel":"Vision models (read images and summarize)",
"og.fillid":"Enter the parser model ID below",
"err.overdue":"The provider account balance is insufficient or overdue; top it up in the console and retry.",
"err.401":"The API key is invalid or expired; recopy it from the provider console.",
"err.404":"Model not found; confirm it is enabled with the provider, or reselect from the list.",
"err.notopen":"This model is not activated for your account (HTTP 404: {t}). Volcengine Ark requires you to activate (“开通”) each model in the console before it can be called — open the Ark console and enable it, or click “Refresh model list” and pick a model from the “Enabled on your account” group. Ark's model-list API cannot be queried from a browser, so the shipped list is the hosted one.",
"warn.notenabled":"“{m}” is not in the list your key just returned — it may not be enabled for this account. Click “Refresh model list” and pick from the “Enabled on your account” group.",
"err.notenabled":"This model is not activated for your account (HTTP 404: {t}). Enable it in the provider's console, or click “Refresh model list” and pick a model from the “Enabled on your account” group.",
"err.429":"Too many requests or insufficient quota; retry later or check the balance.",
"err.403":"The provider rejected the request (HTTP 403): {t}",
"err.forbidden":"The provider refuses this model for your account (HTTP 403): {t} — the usual causes are an account that has not completed identity / real-name verification (SiliconFlow requires it for many models) or a model that was disabled or is not enabled for you. Click “Refresh model list” and pick one from the “Enabled on your account” group, or switch provider.",
"err.ctx":" · provider: {p} · endpoint: {b}",
"err.400":"The provider rejected the request: {t}",
"err.http":"Provider error (HTTP {s}): {t}",
"diag.notenabled":"Your account has not enabled model “{m}”. Pick one from the “Enabled on your account” group, or enable it in the console.",
"diag.403":"The server rejected the key (HTTP 403); check key permissions and account status.",
"diag.notenabledArk":"Your account has not enabled model “{m}” (Ark requires enabling each model in the console). Enable it, or pick a model you already have — e.g. switch to bitmap mode and select Seedream 5 pro.",
"diag.unreachable":"Cannot reach the model server and the browser cannot read the error detail (common causes: wrong/expired key, overdue account, network/proxy block). Recopy the key and confirm the balance.",
"diag.generic":"Cannot reach the model server. For Ark, confirm the model is enabled in the console; a wrong key, overdue account or network block also causes this.",
"gen.content":"Enter paper content first (paste the abstract or upload a PDF).",
"gen.refs":"Tick references in Step 2 first.",
"gen.keyfmt":"The API key format is incorrect (letters, digits and - _ . = only); recopy it.",
"gen.custom":"In custom mode, fill in “Describe the figure you want”.",
"gen.base":"Fill in the custom base URL and model ID.",
"gen.nomodel":"Choose a model (if the list is empty, paste the key and click refresh).",
"gen.needimage":"Bitmap mode requires an image model; pick one from the list.",
"gen.twofew":"Two-stage mode needs at least 4 same-type references ({n} now).",
"gen.analyzing":"① Analyzing {n} references…", "gen.generating":"② Generating figure…",
"gen.working":"Working…",
"gen.claudeImage":"Claude is a chat model and cannot generate images; switch to SVG mode or choose an image provider.",
"err.analyze1":"The analysis model returned no usable result; retry or switch the vision model.",
"err.analyze2":"Failed to parse the analysis result; retry.",
"err.analyze3":"The analysis output was truncated by the model (max tokens). Retry, or use fewer reference figures.",
"analyze.needmodel":"Choose a vision model for analysis (for bitmap two-stage, pick it under “analysis model”).",
"analyze.timeout":"Analysis timed out after 15 minutes; retry later or use a faster vision model.",
"analyze.blocked":"The analysis request was blocked by the network or browser; retry, or tick the relay and enter a relay URL.",
"analyze.done":"✓ Step 1 complete: common layout distilled from {n} figures",
"rep.fig":"Representative",
"rep.selected":"Auto-selected representatives:",
"svg.timeout":"Generation timed out after 15 minutes; the model may be busy, retry later or use a faster model.",
"svg.blocked":"The request was blocked by the network or browser; retry, or tick the relay and enter a relay URL.",
"svg.none":"The model returned no usable SVG; retry once or switch to a stronger model.",
"svg.claudeNone":"Claude returned no usable SVG; retry once.",
"svg.claudeConn":"Cannot reach Claude (the official API blocks browser CORS; tick the relay and enter an OpenAI-compatible relay URL).",
"svg.download":"Download SVG",
"svg.hint1":"Open and refine the SVG in Figma / draw.io / Illustrator; {n} representative figure(s) were sent as image input.",
"lb.similar":"Similar in the gallery",
"svg.hint2":"Open and refine the SVG in Figma / draw.io / Illustrator; references were injected as text.",
"export.title":"Choose a font and export format",
"export.intro":"Keep the generated figure editable. Choose a common paper font, then export it in the format you need.",
"export.svg":"Vector and text",
"export.drawio":"Diagram import",
"export.pptx":"PowerPoint",
"export.vsdx":"Visio",
"export.draftConsent":"Allow download as an unverified draft",
"export.sourcePreview":"Step 3 original",
"export.rebuildPreview":"Step 4 export preview (browser rendering)",
"export.reviewRequired":"Needs review: source fidelity checks have not passed, or fonts were changed. Inspect the comparison; explicitly enable draft download to export.",
"export.font":"Font",
"export.fontOriginal":"Keep generated fonts",
"export.waiting":"Generate a figure in Step 3 first; the editable export buttons will unlock here.",
"export.reconFailed":"The Step 3 bitmap is ready, but editable reconstruction failed. Click “Rebuild into editable content” to retry. The bitmap can still be downloaded.",
"export.reconNoBitmap":"Editable reconstruction failed, and this page no longer has the Step 3 bitmap. Generate the figure again in Step 3, then retry.",
"export.ready":"Choose a format, then click \"Confirm and export\".",
"export.reconSucceeded":"Reconstruction succeeded. Choose a format to export the editable figure.",
"export.qualitySucceeded":"Automated comparison passed. Please check layout in PowerPoint.",
"export.confirm":"Confirm and export",
"export.selection":"Selected {format}. Click \"Confirm and export\" to continue.",
"export.downloaded":"{format} download started.",
"export.apiNeeded":"{format} export service is not connected yet.",
"export.working":"Building the editable file\u2026",
"export.failed":"{format} 导出失败。请检查浏览器控制台并重试。",
"ref.note":"Reference figure {i}: {t} ({v} {y}, {p}) — learn only its layout structure, panel division and colour style; replace all content with my paper.",
"svg.trunc":"⚠ The output was too long and truncated; closure was auto-completed — check the end or simplify the request and retry.",
"audit.clean":" ✓ Layout check: no overflowing or overlapping labels found.",
"audit.fixed":" ✓ Layout check: {a} defect(s) found; {r} repair pass(es) brought it down to {b}.",
"audit.left":" ⚠ Layout check: {n} label defect(s) remain — open the SVG and nudge them, or retry with a stronger model.",
"audit.repairing":"Fixing layout (pass {r}) — {n} defect(s) left…",
"img.timeout":"Generation timed out after 20 minutes; the model may be busy; you can also try a faster model such as SiliconFlow FLUX schnell.",
"img.notfound":'Image model “{m}” cannot be called: it may not be enabled on your account, or the ID changed. Click “Refresh model list” and pick from “Enabled on your account”; if the list is unreadable, confirm Seedream access in the console.',
"img.abnormal":"The image API returned an unexpected format: {t}",
"img.download":"Download image",
"img.ratio":"Canvas ratio",
"img.resolution":"Resolution",
"img.unsupported":"{model} has no verified {ratio} output at {resolution}. Select another model, ratio, or resolution.",
"img.auditVerified":"Verified by real generation on Oct 16: {model} produced {ratio} at {resolution}. API availability may change.",
"img.auditRejected":"Real generation test on Oct 16: Infistar rejected {model} at {ratio}, {resolution} (HTTP 422). Choose another combination.",
"img.auditUnavailable":"Real generation test on Oct 16: no channel was available for {model} at {ratio}, {resolution} (HTTP 503). Try later or choose another model.",
"img.auditLimited":"Real generation test on Oct 16: {model} at {ratio}, {resolution} hit an account limit (HTTP 429); this combination remains unverified.",
"img.auditWrongSize":"Real generation test on Oct 16: {model} ignored the requested {ratio}, {resolution} size. This combination is not verified.",
"img.auditInconclusive":"Real generation test on Oct 16: {model} did not return an image for {ratio}, {resolution}. Try again or choose another combination.",
"img.auditUntested":"{model} at {ratio}, {resolution} has not been verified by real generation on this account. The returned bitmap will be checked.",
"err.infistar422":"Infistar rejected this image request (HTTP 422): {t}. Choose another model, ratio, or resolution.",
"err.infistar503":"Infistar has no available channel for this model on the current account (HTTP 503). Try later or choose another model.",
"img.ratioMismatch":"The model returned {width}×{height}, which does not match the selected {ratio} ratio. Choose another model or ratio; editable export is paused.",
"img.resolutionMismatch":"The model returned {width}×{height}, below the selected {resolution} resolution. Choose another model or resolution; editable export is paused.",
"img.hint":"Bitmap is an AI draft; check and fix text and numbers in PPT / Figma.",
"img.hintRef":"Bitmap is an AI draft; {n} representative figure(s) were sent as multi-image reference; check text and numbers in PPT / Figma.",
"search.working":"Searching…",
"manifest.hint":"Model list updated {d} · entering a key pulls the models enabled on your account.",
"cors.note":"⚠ This provider's official API does not allow direct browser CORS (verified). Options: ① tick the relay above and enter an OpenAI-compatible relay URL; ② switch to a CORS-enabled provider (Volcengine Ark / SiliconFlow / Zhipu / Kimi / Qwen / DeepSeek).",
"base.hint":"Endpoint: {b}",
"pass.warn1":"Two-stage mode needs at least 4 same-type references.",
"modelLabel.svg":"Model (chat / vision)", "modelLabel.image":"Model (image)",
"recon.reading":"Calling the vision API to rebuild each element; this can take a few minutes...",
"recon.labelling":"Naming {n} areas from your paper...",
"recon.done":"Reconstruction succeeded. Rebuilt {n} editable elements.",
"recon.review":"Rebuilt {n} editable elements. Please inspect text and details before export.",
"recon.audit":"Rebuilt {n} elements; {d} need a look (overlapping or outside the canvas).",
"recon.nobitmap":"No bitmap to rebuild yet - generate a figure in bitmap mode first.",
"recon.noboxes":"Found no empty label areas in this image. Regenerate the base image so it leaves blank label space.",
"recon.notext":"The model returned no usable labels. Check the paper content, or try another analysis model.",
"recon.badjson":"The model did not return usable JSON for the labels. Try again or switch the analysis model.",
"recon.failed":"Rebuild failed. The bitmap itself is still downloadable.",
"recon.failedDetail":"Rebuild failed: {msg}",
"recon.tile":"Rebuilt {i} of {n} image regions…",
"recon.vision":"Reading the bitmap with the Step-1 vision model…",
"recon.visionDone":"Editable scene rebuilt: {n} elements extracted.",
"recon.btn":"Rebuild into editable content",
"export.reconRequired":"The Step 3 bitmap is ready. Click “Rebuild into editable content” above; editable export will unlock after reconstruction succeeds.",
"export.needRecon":"Exported as a picture for now. Use the rebuild button above to turn it into editable text.",
"export.building":"Building {format}...",
"export.failed":"{format} export failed. Check the browser console and retry.",
"export.failedDetail":"{format} export failed: {msg}",
"export.getFile":"Download {format}",
"export.fileReady":"{size} ready — click if it did not start",
"export.stage.scene":"reading the figure",
"export.stage.build":"building the format",
"export.stage.pack":"packing the file",
"export.finished":"{format} is ready - download it below.",},
zh:{
"sub":"上传你的论文内容 → 从 {n} 张顶会主图中检索最贴合的参考 → 生成你的主图初稿",
"pill":"浏览器本地运行 · PDF 仅在你点击模型解析时发送给步骤一配置的模型",
"boot":"正在加载检索索引与本地 CLIP 模型(首次约需下载数十 MB)…",
"s1":"输入论文内容",
"s1.note":"按下面五个小框从上往下填即可",
"box.intent":"绘图意图",
"box.source":"论文内容来源",
"box.paper":"论文正文或摘要",
"box.paper.tip":"粘贴文本,或上传 PDF 自动提取",
"box.search":"检索参考图",
"target.which":"你想生成哪张图",
"target.overview":"Figure 1 总览 / Teaser(默认)",
"target.architecture":"方法架构图",
"target.pipeline":"Pipeline 流程图",
"target.results":"结果展示图",
"target.custom":"自定义(手动描述)",
"target.desc":"具体描述你要的图",
"target.descPh":"例如:画出第 3.2 节解码器结构,包含 cross-attention 与 KV cache",
"src":"来源",
"src.free":"自由输入(不自动提取)",
"src.basic":"PDF 模型基础提取(标题 + 摘要 + 关键词)",
"src.intent":"PDF 按绘图意图提取(推荐)",
"src.custom":"PDF 模型自定义章节 / 页码 / 关键词",
"src.query":"提取范围",
"src.queryPh":"例如:3.2 Decoder;第 5–6 页;cross-attention",
"hint.label":"解析说明",
"modehint.idle":"先上传 PDF。解析模型将阅读论文,按绘图意图总结相关章节,生成可编辑的绘图提示词。",
"meta.nopdf":"尚未上传 PDF。",
"api.sum":"论文解析模型与接口",
"api.badge":"Key 仅存本机",
"provider":"服务商",
"keyPh":"粘贴你的 API Key,仅保存在本机浏览器",
"refresh":"刷新模型列表",
"parsemodel":"解析模型",
"parseid":"解析模型 ID",
"parseidPh":"例如 gpt-4.1 或 gemini-2.5-pro",
"hint.pdf":"PDF 依次走三条通道:文档直传 → 本地提取正文 → 本地渲染页面图像(视觉模型),所以 10 家服务商都能解析;定位章节与归纳始终由你选的模型完成。",
"relay.label":"使用中转 / 自定义接入地址",
"relay.base":"接入地址",
"relay.preset":"中转服务",
"relay.manual":"自定义地址",
"relay.infistarCN":"Infistar 无限星河(国内线路)",
"relay.infistarGlobal":"Infistar 无限星河(国际线路)",
"relay.ph":"例如 https://your-relay.com/v1",
"customid":"出图模型 ID",
"customidPh":"例如 claude-opus-5-5 或 gpt-5",
"paperPh":"粘贴论文标题 + 摘要(或方法概述)。例如:\nWe propose a diffusion-based video editing framework that ... 我们的方法包含三个模块 ...",
"upload":"上传论文 PDF",
"upload.small":"按绘图意图提取内容",
"ex.label":"没有论文?试试示例:",
"ex.robot":"机器人操作", "ex.video":"视频生成", "ex.llm":"LLM 推理",
"lab.pattern":"Pattern 模式", "lab.venue":"Venue 会议", "lab.year":"Year 年份", "lab.tier":"Tier 等级",
"opt.all":"全部",
"searchBtn":"检索参考图",
"hint.search":"CLIP 语义 + BM25 关键词混合检索;不填内容也会列出全部图,可一直下滑浏览。",
"s2":"挑选参考用例",
"s2.note":"勾选要融合的同类型参考图——两阶段至少 4 张,最多 10 张",
"s3":"生成你的主图初稿",
"s3.note":"先定生成方式,再确认出图模型",
"s4":"编辑并导出",
"s4.note":"SVG 可立即下载,PPTX / VSDX 通过中转渲染",
"box.refs":"已选参考图",
"box.pass":"生成方式",
"box.model":"出图模型",
"box.demo":"效果对比",
"settings.badge":"复用步骤一的服务商与 Key",
"guide.note":"学版式与配色,不抄内容",
"grid.idle":"还没有结果:填好上面的小框,点「检索参考图」开始挑选。",
"grid.total":"共 {n} 张",
"grid.loading":"正在加载更多参考图…",
"grid.end":"已显示全部 {n} 张参考图",
"clear":"清空选择",
"picknote":"两阶段模式:至少选 4 张同类型图(越接近 10 张,版式参考越充分)。直接生成模式:选 2-4 张即可。",
"refs.initial":"尚未选择参考图,请在上方勾选参考图。",
"pass.direct":"直接生成", "pass.direct.sub":"选 2-4 张 — 一步出图",
"pass.two":"两阶段归纳", "pass.two.sub":"4 张起 — 先归纳再生成",
"stp1":"分析参考图", "stp2":"生成主图",
"provider.infistar":"Infistar 无限星河(推荐)",
"infistar.signup":"通过专属推广链接注册,领取 5 元体验额度,畅享 GPT、Gemini、Claude →",
"mode.svg":"SVG 可编辑初稿",
"mode.image":"AI 位图初稿(需要图像模型)",
"modelLabel":"模型",
"hint.model":"API Key 与服务商在步骤一配置。SVG 用对话 / 视觉模型,位图用图像模型。",
"analyzemodel":"归纳视觉模型",
"genBtn":"生成初稿",
"guide.t":"怎么用好参考图",
"g1":"学布局,不抄内容:看参考图把画布切成几个面板(问题 / 方法 / 结果)、视觉重心放在哪,面板里换成你自己的模块。",
"g2":"学配色:主色 1 个 + 强调色 1 个,方法模块用同色系深浅区分;顶会主图普遍留白充足、饱和度克制。",
"g3":"两阶段归纳,多选更稳:想画 framework 就至少勾选 4 张带 framework 标签的图,视觉模型先归纳该类版式共性、自动挑出 4-6 张代表图再生成——既满足多选,又避免多张版式互相打架。",
"g4":"学表达:每个面板一个信息点,箭头表示数据流,标签用短语而非句子;Figure 1 讲清楚“输入→我们的方法→输出/效果”即可。",
"g5":"转成可编辑格式再精修:初稿生成后按软件转成对应可编辑格式——Visio 用 .vsdx、PPT 用 .pptx、Figma / draw.io 用 .svg,在对应软件里改文字与对齐,再导出投稿所需格式。",
"tut1":"至少勾选 4 张同类型参考图(一直下滑可浏览全部)",
"tut2":"② 同一个 prompt,FigureForge vs 通用文生图",
"tut3":"③ 导出可编辑所有细节",
"tut3.editable":"PowerPoint 中可逐项编辑",
"tut3.result":"导出后的完整主图",
"lb.dialog":"参考图大图", "lb.close":"关闭", "lb.prev":"上一张", "lb.next":"下一张",
"lb.image":"查看原图 ↗", "lb.paper":"打开原文 ↗",
"toggle.title":"切换为中文",
"tg.overview":"Figure 1 总览 / Teaser", "tg.architecture":"方法架构图",
"tg.pipeline":"Pipeline 流程图", "tg.results":"结果展示图", "tg.custom":"自定义",
"timeout":"{l}超时({s} 秒)。请检查网络或刷新重试。",
"cache.hit":"已命中浏览器缓存", "cache.will":"将继续缓存本地索引与模型",
"boot.cache":"正在读取缓存…", "boot.manifest":"正在加载模型清单与检索索引…",
"boot.clip1":"正在加载本地 CLIP(① tokenizer)…", "boot.clip2":"正在加载本地 CLIP(② 模型本体约 63 MB)…",
"boot.fail":"初始化失败:{m}。刷新页面重试;若反复失败请检查网络。",
"grid.empty":"没有符合条件的图片,试试放宽筛选。",
"card.ariaSel":"取消选择参考图:{t}", "card.aria":"选择参考图:{t}",
"pick.sel":"✓ 已选", "pick.add":"+ 选为参考",
"act.preview":"查看大图", "act.paper":"原文 ↗",
"countHint":"已选 {n}/{m}",
"err.maxrefs":"最多选 {m} 张参考图(两阶段至少 4 张同类型,直接生成 2-4 张)",
"refs.strip2":"尚未选择参考图,请在上方勾选(两阶段 4 张起 / 直接 2-4 张)。",
"ps.loading":"正在解析 · 请稍候", "ps.success":"解析完成", "ps.error":"解析未完成",
"ps.sending":"正在发送 PDF,模型将按绘图意图提取相关章节并总结…",
"ps.meta1":"解析模型:{m} · 使用步骤一的 API 配置",
"ps.done":"已提取相关章节并组合绘图提示词。你可以在下方继续编辑。",
"ps.meta2":"{f} · 已由 {m} 完成模型解析,共返回 {n} 个相关段落。",
"ps.fail":"模型解析失败;请更换支持 PDF / 文档输入的模型,或改用自由输入。",
"ps.meta3":"未生成本地兜底文本,避免把低质量抽取误当成模型结果。",
"ps.nocfg":"请先在步骤一配置服务商、API Key 和论文解析模型。",
"ps.nodata":"PDF 数据读取失败。",
"ps.extracting":"该服务商不接受文档直传,正在本地提取 PDF 文本后重试…",
"ps.meta1b":"解析模型:{m} · PDF 文本传输模式(本地提取)",
"ps.texthdr":"论文文件:{f}(共 {p} 页,以下为本地提取的正文文本)。",
"ps.meta2t":"{f} · 已由 {m} 完成解析(PDF 文本模式,本地提取 {c} 字),共返回 {n} 个相关段落。",
"ps.scanned":"这份 PDF 提取不到文字(可能是扫描版),且服务商不接受文档直传:{m}",
"ps.nofallback":"文档直传被拒绝({a});本地文本提取也失败了({b})。",
"ps.errline":"失败原因:{m}",
"ps.rendering":"正在本地把 PDF 渲染成页面图片后重试(视觉模型)…",
"ps.meta1c":"解析模型:{m} · PDF 页面图像模式(本地渲染)",
"ps.imgthdr":"论文文件:{f}(共 {t} 页,以下为本地渲染的前 {p} 页图像)。",
"ps.meta2i":"{f} · 已由 {m} 完成解析(页面图像模式,本地渲染 {p} 页),共返回 {n} 个相关段落。",
"ps.modeDoc":"文档直传", "ps.modeText":"本地文本", "ps.modeImg":"页面图像",
"ps.allfailed":"{m} 三条通道都没能解析这份 PDF——{e}。可换用支持视觉的模型,或直接粘贴正文章节文本。",
"err.pdfparse":"PDF 模型解析失败:{m}",
"cm.free":"自由输入:不调用解析模型。",
"cm.basic":"解析模型提取标题、摘要与关键词,适合总览图。",
"cm.intent":"解析模型按绘图意图摘要相关章节,再与摘要合并为提示词。",
"cm.custom":"解析模型按你给的章节 / 页码 / 关键词定位并总结。",
"up.reading":"读取与解析中…",
"up.size":"PDF 超过 25 MB,请压缩文件或粘贴需要解析的章节文本",
"up.meta":"已读取 {f}({s} KB);等待解析模型处理。",
"up.fail":"PDF 读取失败:{m}",
"ref.fail":"读取参考图失败:{f}",
"og.custom":"自定义:请在下方填写模型 ID",
"og.chat":"推荐对话模型", "og.vision":"支持视觉理解(可直接读参考图)",
"og.image":"推荐图像模型",
"og.yours":"你的账号已开通(实时拉取 {d})",
"og.nolive":"该服务商未开放浏览器查询 · 已用托管清单",
"og.hosted":"(托管清单随仓库更新,新模型打开即见)",
"og.parser":"对话 / 视觉解析模型", "og.live":"账号已开通(实时拉取)",
"og.amodel":"视觉理解模型(可看图归纳)",
"og.fillid":"请在下方填写解析模型 ID",
"err.overdue":"该服务商账号余额不足或已欠费(无法出图),请前往控制台充值后再试。",
"err.401":"API Key 无效或已过期,请检查 Key 是否正确、是否有该模型权限。",
"err.404":"未找到该模型,请确认服务商处已开通此模型,或在列表中重选。",
"err.notopen":"该模型在你的账号上未开通(HTTP 404:{t})。火山方舟需要先在控制台「开通」对应模型才能真正调用;请到方舟控制台开通它,或点「刷新模型列表」从「你的账号已开通」分组里重选(方舟的模型列表接口不支持浏览器查询,页面显示的是随仓库更新的托管清单)。",
"warn.notenabled":"「{m}」不在你 Key 实时拉取到的可用列表里,可能未开通或已下线。建议点「刷新模型列表」,从「你的账号已开通」分组里重选。",
"err.notenabled":"该模型对你的账号未开通(HTTP 404:{t})。请到服务商控制台开通该模型,或点「刷新模型列表」从「你的账号已开通」分组里重选。",
"err.429":"请求过于频繁或额度不足,请稍后重试或检查账户余额。",
"err.403":"服务商拒绝了请求(HTTP 403):{t}",
"err.forbidden":"服务商不允许你的账号使用该模型(HTTP 403):{t} —— 最常见的原因是账号未完成实名认证(硅基流动多数模型需要实名),或该模型已下线 / 未对你的账号开通。请点「刷新模型列表」,从「你的账号已开通」分组里重选一个模型,或换一家服务商。",
"err.ctx":" · 服务商:{p} · 接口:{b}",
"err.400":"请求被服务商拒绝:{t}",
"err.http":"服务商返回错误(HTTP {s}):{t}",
"diag.notenabled":"你的账号未开通模型「{m}」。请在下拉框“你的账号已开通”分组里选择,或到服务商控制台开通该模型。",
"diag.403":"服务器拒绝了该 Key(HTTP 403),请确认 Key 权限与账号状态。",
"diag.notenabledArk":"你的账号未开通模型「{m}」(方舟需在控制台“开通”该模型后才能调用)。请到控制台开通,或改选你已开通的模型——例如你已开通 Seedream 5 pro,可切到“AI 位图初稿”模式并选择它直接出图。",
"diag.unreachable":"无法连接模型服务器,且浏览器读不到错误详情(常见原因:Key 错误或过期、账号欠费、网络/代理拦截)。请重新复制 Key、确认账号有余额后再试。",
"diag.generic":"无法连接模型服务器。若你用的是方舟,请确认已在控制台开通该模型;Key 错误、账号欠费或网络拦截也会出现此提示。",
"gen.content":"请先输入论文内容(粘贴摘要或上传 PDF)。",
"gen.refs":"请先在第 2 步勾选参考图。",
"gen.keyfmt":"API Key 格式不正确(应只含字母、数字与 - _ . =),请重新粘贴。",
"gen.custom":"自定义模式请填写“具体描述你要的图”。",
"gen.base":"请填写自定义 Base URL 与模型 ID。",
"gen.nomodel":"请选择模型(若列表为空请粘贴 Key 后点刷新)。",
"gen.needimage":"位图模式需要图像模型,请在列表中选择图像模型。",
"gen.twofew":"两阶段模式至少需要 4 张同类型参考图(当前 {n} 张)。",
"gen.analyzing":"① 正在分析 {n} 张参考图…", "gen.generating":"② 正在生成主图…",
"gen.working":"生成中…",
"gen.claudeImage":"Claude 为对话模型,不提供图像生成;请切回 SVG 模式或选择图像模型服务商。",
"err.analyze1":"归纳模型未返回有效结果,可重试或更换视觉理解模型。",
"err.analyze2":"归纳结果解析失败,可重试。",
"err.analyze3":"归纳输出被模型截断(达到 max tokens)。请重试,或减少参考图数量。",
"analyze.needmodel":"请选择归纳用的视觉理解模型(位图两阶段需在下方“归纳模型”中选择)。",
"analyze.timeout":"归纳超时(已等待 15 分钟),请稍后重试或换用更快的视觉模型。",
"analyze.blocked":"归纳请求被网络或浏览器拦截,可重试,或勾选“使用中转”填入中转地址。",
"analyze.done":"✓ 第一步完成:已从 {n} 张图提炼共性版式",
"rep.fig":"代表图",
"rep.selected":"自动选定代表图:",
"svg.timeout":"生成超时(已等待 15 分钟),模型可能繁忙,请稍后重试或换更快的模型。",
"svg.blocked":"请求被网络或浏览器拦截,可重试,或勾选“使用中转”填入中转地址。",
"svg.none":"模型没有返回可用的 SVG,可重试一次或换用更强的模型。",
"svg.claudeNone":"Claude 没有返回可用的 SVG,可重试一次。",
"svg.claudeConn":"无法连接 Claude 接口(官方不支持浏览器跨域,请勾选中转并填入 OpenAI 兼容中转地址)。",
"svg.download":"下载 SVG",
"svg.hint1":"SVG 可用 Figma / draw.io / Illustrator 打开精修;{n} 张代表图已作为图像输入。",
"lb.similar":"相似图",
"svg.hint2":"SVG 可用 Figma / draw.io / Illustrator 打开精修;参考图以文字方式注入。",
"export.title":"选择字体与导出格式",
"export.intro":"保留生成图的可编辑性。 选择论文常用字体,再导出所需格式。",
"export.svg":"矢量与文字",
"export.drawio":"流程图导入",
"export.pptx":"PowerPoint",
"export.vsdx":"Visio",
"export.draftConsent":"允许下载未通过验证的草稿",
"export.sourcePreview":"步骤三原图",
"export.rebuildPreview":"步骤四导出预览(浏览器渲染)",
"export.reviewRequired":"需复核:原图一致性检查未通过,或字体已更改。请对照检查,勾选草稿下载后才可导出。",
"export.font":"字体",
"export.fontOriginal":"保留生成字体",
"export.waiting":"请先在第 3 步生成主图,生成后这里会解锁可编辑导出。",
"export.reconFailed":"第 3 步位图已生成,但第 4 步可编辑重建失败。请点击“重建为可编辑内容”重试;当前仍可下载位图。",
"export.reconNoBitmap":"可编辑重建失败,当前页面没有找到第 3 步位图。请回到第 3 步重新生成后再重试。",
"export.ready":"请选择格式,然后点击“确认设置并导出”。",
"export.reconSucceeded":"重建成功。请选择格式导出可编辑图片。",
"export.qualitySucceeded":"自动对比检查通过,请在 PowerPoint 中复核排版。",
"export.confirm":"确认设置并导出",
"export.selection":"已选择 {format},点击“确认设置并导出”开始。",
"export.downloaded":"{format} 文件已开始下载。",
"export.apiNeeded":"{format} 导出服务尚未接入。",
"export.working":"正在生成可编辑文件…",
"export.failed":"{format} 导出失败。请检查浏览器控制台并重试。",
"ref.note":"参考图 {i}:{t}({v} {y},{p})——只学习它的版面结构、面板划分与配色风格,内容全部替换为我的论文。",
"svg.trunc":"⚠ 本次输出过长被截断、已自动补全闭合,请检查末尾或精简需求后重试。",
"audit.clean":" ✓ 版式检查:未发现文字越界或重叠。",
"audit.fixed":" ✓ 版式检查:发现 {a} 处问题,经 {r} 轮修复后降至 {b} 处。",
"audit.left":" ⚠ 版式检查:仍有 {n} 处文字问题——可在 SVG 里微调,或换更强的模型重试。",
"audit.repairing":"正在修复版式(第 {r} 轮)——剩余 {n} 处…",
"img.timeout":"生成超时(已等待 20 分钟),模型可能繁忙,请稍后重试;也可换更快的模型(如硅基流动 FLUX schnell)。",
"img.notfound":"图像模型「{m}」无法调用:当前账号可能未开通该模型,或模型 ID 已更新。请点击“刷新模型列表”,从“你的账号已开通”中选择;如果列表无法读取,请到服务商控制台确认 Seedream 权限。",
"img.abnormal":"图像接口返回格式异常:{t}",
"img.download":"下载图片",
"img.ratio":"画布比例",
"img.resolution":"分辨率",
"img.unsupported":"{model} 暂无经过验证的 {ratio}、{resolution} 输出尺寸。请选择其他模型、比例或分辨率。",
"img.auditVerified":"10 月 16 日真实生成已验证:{model} 可输出 {ratio}、{resolution};接口通道可能变化。",
"img.auditRejected":"10 月 16 日真实生成测试:无限星河拒绝 {model} 的 {ratio}、{resolution} 请求(HTTP 422)。请选择其他组合。",
"img.auditUnavailable":"10 月 16 日真实生成测试:{model} 的 {ratio}、{resolution} 暂无可用通道(HTTP 503)。请稍后重试或换模型。",
"img.auditLimited":"10 月 16 日真实生成测试:{model} 的 {ratio}、{resolution} 遇到账户限流(HTTP 429),该组合尚未验证。",
"img.auditWrongSize":"10 月 16 日真实生成测试:{model} 忽略了 {ratio}、{resolution} 尺寸要求,该组合未通过验证。",
"img.auditInconclusive":"10 月 16 日真实生成测试:{model} 的 {ratio}、{resolution} 没有返回图片。请重试或换组合。",
"img.auditUntested":"此账号尚未真实验证 {model} 的 {ratio}、{resolution};生成后会核对实际位图尺寸。",
"err.infistar422":"无限星河拒绝了本次图像请求(HTTP 422):{t}。请选择其他模型、比例或分辨率。",
"err.infistar503":"当前账号在无限星河没有该模型的可用通道(HTTP 503)。请稍后重试或更换模型。",
"img.ratioMismatch":"模型返回的实际尺寸为 {width}×{height},与所选 {ratio} 比例不符。请更换模型或比例;可编辑导出已暂停。",
"img.resolutionMismatch":"模型返回的实际尺寸为 {width}×{height},低于所选 {resolution} 分辨率。请更换模型或分辨率;可编辑导出已暂停。",
"img.hint":"位图为 AI 初稿;文字与数字请在 PPT / Figma 中核对修正。",
"img.hintRef":"位图为 AI 初稿,{n} 张代表图已作为多图参考输入;文字与数字请在 PPT / Figma 中核对。",
"search.working":"检索中…",
"manifest.hint":"模型清单更新于 {d} · 填 Key 后自动拉取账号可用模型。",
"cors.note":"⚠ 该服务商官方接口未开放浏览器跨域直连(实测)。两种用法:① 勾选上方中转并填入 OpenAI 兼容中转地址;② 也可直接改用支持 CORS 的服务商(火山方舟 / 硅基流动 / 智谱 / Kimi / Qwen / DeepSeek)。",
"base.hint":"接口地址:{b}",
"pass.warn1":"两阶段模式至少需要 4 张同类型参考图。",
"modelLabel.svg":"模型(对话 / 视觉模型)", "modelLabel.image":"模型(图像模型)",
"recon.reading":"正在调用视觉 API 逐元素重建,可等待几分钟…",
"recon.labelling":"正在根据论文内容为 {n} 个区域命名…",
"recon.done":"重建成功,已生成 {n} 个可编辑元素。",
"recon.review":"已重建 {n} 个可编辑元素,导出前请检查文字和细节。",
"recon.audit":"已重建 {n} 个元素,其中 {d} 个需要检查(重叠或超出画布)。",
"recon.nobitmap":"还没有位图可重建——请先用位图模式生成一张图。",
"recon.noboxes":"这张图里没找到空的标签框。请让底图留出空白标签区域后重新生成。",
"recon.notext":"模型没有返回可用的标签。请检查论文内容,或换一个分析模型。",
"recon.badjson":"模型没有返回可用的 JSON 标签。请重试或换一个分析模型。",
"recon.failed":"第 3 步位图已生成,但第 4 步可编辑重建失败。请点击“重建为可编辑内容”重试;当前仍可下载位图。",
"recon.failedDetail":"重建失败:{msg}",
"recon.tile":"已重建 {i}/{n} 个图像分区…",
"recon.vision":"正在用步骤一的视觉模型拆解位图…",
"recon.visionDone":"已重建可编辑场景:拆解出 {n} 个元素。",
"recon.btn":"重建为可编辑内容",
"export.reconRequired":"第 3 步位图已生成。请点击上方“重建为可编辑内容”,重建成功后解锁可编辑导出。",
"export.needRecon":"当前导出为图片。点上方按钮可转为可编辑文字。",
"export.building":"正在生成 {format}…",
"export.failed":"{format} 导出失败。请检查浏览器控制台并重试。",
"export.failedDetail":"{format} 导出失败:{msg}",
"export.getFile":"下载 {format}",
"export.fileReady":"{size} 已生成——若未自动下载请点这里",
"export.stage.scene":"正在解析图形",
"export.stage.build":"正在生成格式",
"export.stage.pack":"正在打包文件",
"export.finished":"{format} 已生成——请在下方下载。",}
});