Translation Guide¶
Scrinium no longer calls any translation API itself. Translation is an agent-side workflow; the framework keeps only the storage and reading conventions, so translated papers stay browsable and resumable.
Storage Conventions¶
- Translations live next to the original as
data/papers/<Author-Year-Title>/paper_{lang}.md(for examplepaper_zh.md) - The agent records translation state in
meta.json["translations"] - Reading prefers the translation when
--langis given and falls back to the original otherwise:
scrinium show "<paper-id>" --layer 4 --lang zh
Language codes are validated (lowercase letters only) before any file lookup, so --lang cannot escape the paper directory.
Agent Translation Workflow¶
The translate skill orchestrates the work with subagents:
- Read the original with
scrinium show "<paper-id>" --layer 4 - Split the Markdown into chunks along section boundaries, keeping LaTeX formulas, code blocks, and image links intact
- Dispatch parallel subagents to translate the chunks (a shared glossary from workspace notes keeps terminology consistent across chunks and papers)
- Append the translated chunks to
paper_{lang}.mdin original order — the partially written file is the resume point, so an interrupted run simply continues from the current file length - Update
meta.json["translations"] - Spot-check the result with
scrinium show "<paper-id>" --layer 4 --lang zh
Batch translation is the same workflow fanned out: one subagent per paper.
Portable Copies¶
Because translations are plain files inside the paper directory, a portable bundle is just a copy: duplicate paper_{lang}.md together with the paper's images/ directory wherever you need it (for example under workspace/). Image links are relative, so the copy keeps rendering as long as images/ travels with it.