/* ===== 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} 已生成——请在下方下载。",} });