Lowmoor Japanese Localisation Kit
A translation kit that lets you play the Steam idle RPG Lowmoor: An Adventurer's Chronicle (by Bogurodzic) in Japanese. Built for game version 1.6.3. About 91% of the on-screen text is translated, and you can pick from seven Japanese typefaces. It ships a 9,458-entry translation memory and 1,015 hand-written overrides, and every line is yours to rewrite. Free.
Updated for game 1.6.3 (2026-08-26)
From 1.6.3 the game's code is minified: every variable and function name is squeezed to one or two characters and the whole file is a single line. Substituting translated strings still works, but the pass that reorders phrases into Japanese word order relied on those names, so it has been rebuilt.
A scanner bug that mistook regular-expression literals for strings is also fixed; it had been shifting every position after it, so fragments of code were being translated as if they were text. That fix alone raised the number of strings the translations land on from 8,014 to 9,552. The measured Japanese coverage reads 91% rather than 93% because the game gained text, not because translations were lost.
A new check mechanically confirms that nothing outside the translated text was altered: localStorage keys, element lookups, event types, Web Audio and canvas enum values and the save schema number all match the English original exactly.
Previous versions (3)
- For game 1.6.32026-08-26 ・ .zip 2.2MBIdentical to the current download. Supports 1.6.3, where the game code became minified.
- For game 1.6.1b2026-08-24 ・ .zip 2.0MBFor game 1.6.1. Fixes the bug that silenced all game audio.
- For game 1.6.12026-08-23 ・ .zip 2.0MBHas a bug that silences all game audio. Use 1.6.1b instead.
Use the current version above unless you have a reason not to. These are kept in case you are still on an older build of the game. Nothing before 1.6.1 was archived.
- The kit contains no game files at all. It reads your own legitimate copy and builds the Japanese version locally. Lowmoor is free-to-play on Steam and itch.io — get the game first.
- Node.js 18 or later is required; it is used to unpack and repack the asar archive.
- Odd translations and screens still in English can be reported in the Japanese thread in the game's Steam discussions, opened with the author's permission — the link is under “Where to report bugs” below.
- Built for game version 1.6.3, shipped 26 August 2026. The backlog created when the game doubled in 1.6.0 has been worked off in 1.6.1 (Japanese on screen went from 86% to 93%). See “What 1.6.1 fixed” below.
- If you are on an older kit, please replace it. The apply script could destroy your English original if it was run after a game update. That is fixed in 1.6.1.
- A Steam update reverts the game to English; run the apply script again. The kit also carries the procedure for re-translating only what the update added.
- A chronicle begun on the Japanese build must be continued on the Japanese build. Saves store folk, trade and equipment-slot names as literal values, so switching back to English breaks those references. Please read “Save data” below before you start.
What it looks like



What 1.6.3 fixed
Steam shipped 1.6.3 on 26 August 2026. The game's code is now minified: index.html went from 43,311 lines to a single-line file of 2,895, and every variable and function name is squeezed to one or two characters.
Positions had drifted, so fragments of code were being translated
Minification multiplied the number of regular-expression literals, and the scanner read the quote marks inside them as the start of a string, shifting every position after that point. Translations were then applied at the wrong offsets, replacing fragments of code with Japanese and breaking the syntax. The scanner now distinguishes division from a regex by the preceding token, and the two duplicate copies of it have been merged into one. That fix alone raised the number of strings the translations land on from 8,014 to 9,552.
Reordering now keys on position, not on names
The pass that rewrites phrases into Japanese word order keyed on function and constant names, so minification wiped it out. It now rebuilds its anchors from things that cannot be squeezed — the contents of the vocabulary tables and object keys.
A machine check that nothing outside the text was touched
A new check compares the English original against the Japanese build. Four localStorage keys, 59 element lookups, 54 classList operations, 20 event types, ten Web Audio and canvas enum values, 13 style assignments and the save schema number (v17) all match the English build exactly, with nothing missing. Runtime checks pass too: no uncaught exceptions, all 23 gauges render correctly, audio matches the English build, and save codes round-trip.
This round added 328 new translations totalling 9,013 characters. Japanese coverage measures 91%, and the 17 English strings left on screen — the gp currency unit, desk design names and licence text — are all cases where English is correct.
What 1.6.1 fixed
Steam shipped 1.6.1 on 22 August 2026. It is a small systems update — only 102 strings and 5,774 characters needed new translation. That freed the round up for sweeping out the English that was still showing and fixing mistranslations. Japanese on screen went from 86% to 93%.
A defect in the apply script — please read if you are on an older kit
The old apply script did nothing if a backup already existed. When Steam updated the game and app.asar was replaced with a newer English build, running the kit then left the stale backup in place and overwrote — and destroyed — the new English original.
It actually happened here: the 1.6.0 original was already gone, and it only came to light when the 1.6.1 translation was started. Steam's “Verify integrity of game files” had to fetch it again. Now the backup is only retaken when the installed build is English and its version differs from the backup's, and the previous backup is kept as app.asar.en.<version>.bak.
Only the English original is at risk — save data is untouched. Even so, without the original you cannot translate the diff when the next update lands, so please replace an older kit.
The battle log was rewritten from scratch
English puts the verb before the object; Japanese puts it after. Translating fragment by fragment cannot fix word order, so all nine branches were written out afresh in Japanese order.
| Build | Battle log output |
|---|---|
| Before | あなたが切り開く追い詰められたゼラチナス・キューブのために9、それはあなたに5. It stands at 33 of 42. |
| After | はぐれのレヴナントに斬りつけ、7。返す一撃を受けて 3。残り 104 / 111。 |
Mistranslations fixed
Seventy-three terms were corrected — only where the original uses a word in its in-game sense and the translation had taken the wrong one. Renderings that were right in context (the “yard” in “lace by the yard”, for instance) were left alone.
| Term | Was | Now |
|---|---|---|
Roll | 振る | 名誉録 |
rank cap | 階級帽 | 階級上限 |
hand | 手 | 雇い人 |
stand | 舞台装置・立札 | 段 |
the yard | ヤード | 需品係の庭 |
log | 丸太 | 記録 |
mimic | 模倣者・擬態生物 | ミミック |
chest | 胸板 | 櫃 |
Barracks | バラックス | 兵舎 |
sending | 送電 | 送り |
Also corrected: Fires and Upon in the stat and spell tables, the school abbreviations Road, Stroke and Fury, and dmg / Def in the equipment summary line. The four equipment slot names are keys that go into saves verbatim, so the stored values were left untouched and only the on-screen labels were changed — existing saves still load.
A hole in the sweep tool
The tool that hunts for leftover English treated a line as done if it contained even one Japanese character, so half-translated lines with English still in them were skipped entirely. Judging by whether a run of English actually remains surfaced the descriptions for two abilities that had never been translated at all.
Rebuilding for game version 1.6.0
Steam shipped 1.6.0 on 21 August 2026. Diffing it against the previous build (1.5.2) shows the game roughly doubled in size.
| Item | 1.5.2 | 1.6.0 |
|---|---|---|
| The game (index.html) | 2.03MB / 26,469 lines | 3.97MB / 43,311 lines |
| Top-level declarations | 1,207 | 2,000 (+813, 20 removed) |
| Save schema | v13 | v17 |
| Feats | 11 | 13 |
| Guildhouse works | 8 | 13 |
| Roll of Honour rows | 14 | 20 |
| Monsters | 179 | 179 (20 swapped out) |
The author's own patch note opens: “The fight is on the die: attack rolls, damage dice, beasts with stat blocks. Kit is four named slots.” Every trade gained a signature move, three pets arrived (a chest, a bone hound and a leech), and talent trees, equipment forging and per-chronicle preparations were added, along with three new menus — Armoury, Pets and the Memorial Wall.
The last line of the in-game notes reads: “An update too large for this window: the full patch notes are the v1.6.0 post on Steam.” The author is saying it does not fit in the window.
Steam's “1.6.0” is a 2.x build in the author's own numbering
The source comments carry internal version numbers marking when each piece landed. This build references 37 distinct ones, the newest being v2.13.0. In other words the “1.6.0” on Steam bundles a long run of the author's own internal releases into a single public number.
Between v2.12.0 and v2.13.0 alone, the default for who spends the talent tree's points flipped from automatic to manual. Development is visibly still in motion, and this kit is chasing a moving target.
How the translation caught up
The first pass for 1.6.0 added 2,012 strings and 54,661 characters, but the text had grown faster than the translation did and Japanese on screen fell from 92% to 86%. The 1.6.1 round went into sweeping out the remaining English and fixing mistranslations, bringing it to 93% on a translation memory of 8,856 entries and 1,005 hand-written overrides.
Just 17 English strings remain on screen, and every one of them should stay English: currency units like “30k gp”, the desk theme names Windows 98 / Mac OS 8 / GNOME 1, and a licence URL.
The sweep turned up something worth noting: not one of the 291 remaining strings was a translation problem. Every one was a hole in the extractor. The biggest was that the insides of template literals were never extracted at all — a “don't touch strings containing expressions” safety rule meant button labels appearing in 1,032 places on screen had never once been picked up.
Elsewhere, a filter meant to skip SVG paths looked only at the first character, so achievement names beginning “A ” were discarded wholesale (176 of them); and a lexicon substitution silently dropped 20 of the source's keys, leaving raw key names in the tooltips. That last one passed quietly, which was the real problem, so the build now refuses to continue if a substitution loses a key.
The save schema moved from v13 to v17. That is a change in the game itself, unrelated to the localisation. On top of that, a chronicle created on the Japanese build holds Japanese internal values, so returning to English breaks those references. Export Save before moving between builds.
The update procedure ships with the kit
A Steam update overwrites the Japanese app.asar with the English one. The kit now carries 更新の手順.md — the procedure for re-translating only what is new — together with the script that does it (update.mjs). Existing translations are reused, so it usually takes minutes.
Five defects were found and fixed along the way. Two are worth repeating: a stale filter file meant every tooltip added in 1.6.0 was skipped entirely — caught only when the Japanese ratio fell to 68% — and the object-key rewriter's target set grew from 27 to 237, which crashed the game at startup. Both are recorded in the bundled CHANGELOG-1.6.1.md in case a comparable update recurs.
Seven typefaces to choose from
The Options window gained a “Typeface” row under Legibility, switching the Japanese face for the whole screen on the spot. If 11px MS PGothic is too small to read comfortably, or you would rather read a serif, this is where you change it.

How the seven look
The same corner of the same screen — the adventurer's papers and abilities — with nothing changed but the face. Click any of them to open it full size.

Bundled with Windows, 11px. The face Japanese Windows actually used in the era this UI imitates.

Bundled with Windows, 11px. A serif at the same size — it reads like a paperback.

Bundled with Windows, 12px. A universal-design serif: heavier strokes, easier to read.

Bundled with Windows, 12px. A textbook face — stroke ends are explicit, and it is the easiest of the seven to follow.

Bundled with the kit, 12px. Old letterpress character — the closest match to the game's 1981-module conceit.

Bundled with the kit, 12px. A pen-written hand — it makes the chronicle feel written down by a person.

Bundled with the kit, 16px. A bitmap face. It does not fit in a narrow window — see below.
The size switches with the face
Each face has its own proper size, so choosing a typeface changes the body size with it: 11px for the MS faces, 12px for BIZ UDPMincho, UD Digi Kyokasho, Zen Old Mincho and Klee One, and 16px for DotGothic16.
DotGothic16 stays at 16px for a reason: that is the size it is drawn at, and dropping it to 12px smears the dots until it looks like plain gothic — measured and confirmed. Keeping the size means the layout does not fit in a narrow window; at 1920 wide it does.

Nothing is fetched from the network
The bottom three faces — Zen Old Mincho, Klee One and DotGothic16 — are not on Windows, so the kit carries them. But they are not fetched from a font host: each is subset to the characters actually used and embedded straight into index.html.
The reason is the game's own promise — no account, no telemetry, no network connection. Changing the typeface opens no connection at all, and you never have to install a font yourself.
All three are SIL Open Font License 1.1 with no reserved font name; the full licence texts ship in the kit's fonts folder. The raw TTFs come to 16MB between them, cut down to 1.6MB by keeping only the 2,037 characters that actually appear plus kana, ASCII and the common kanji.
Your choice is remembered on that machine only and never enters the save — a typeface is a preference of the machine, not a fact about the adventurer.
What gets translated
| Area | State |
|---|---|
| Enrolment screen (12 folk, 12 trades, origins) | Translated |
| Adventurer's Papers (name, folk, trade, origin, rank) | Translated |
| Title bar | Translated |
| Combat log (kills, loot, sales, feats) | Translated, reordered |
| All 179 monster names | Hand-translated |
| Bestiary lore | Translated |
| Achievements, trophy case, Roll of Honour, statistics | Translated |
| Skill tree, Guild Shop, Guildhouse, Options | Translated |
| Arc-complete text, events, rumours, noticeboard | Translated |
| Adventurer and hireling names, the title | English by choice |
| A small part of the log | Left in English |
| Muster Board dialogue | Left in English |
Japanese accounts for 93% of the characters on screen; the remaining 1,258 Latin characters are adventurer and hireling names (left in English on purpose, being proper nouns) plus 980 strings where JavaScript expressions and prose share one literal and translating would break the code. The patcher validates every translation before writing it back and leaves anything that fails in English rather than shipping broken Japanese.
How to install
- Install Node.js 18 or later (the LTS build from nodejs.org is fine)
- Unzip the download anywhere you like
- Quit Lowmoor
- Right-click 適用する.ps1 and choose “Run with PowerShell”
The script locates Lowmoor in your Steam libraries, then unpacks app.asar, applies the translation, repacks and swaps it in. Your original app.asar is kept alongside as app.asar.en.bak, so 元に戻す.ps1 restores English at any time — as does Steam's “Verify integrity of game files”.
If PowerShell refuses with “running scripts is disabled on this system”, run Set-ExecutionPolicy -Scope Process -Bypass first. It applies only to that window and changes nothing system-wide.
Save data
The save file itself is untouched and neither its format nor its schema number (v13) has changed, so reading and writing work fine. But saves store folk, trade, equipment-slot and beast names as literal values. A chronicle created on the Japanese build therefore holds Japanese internal values, and going back to the English build breaks those equipment and folk references.
- Keep a Japanese-build chronicle on the Japanese build
- If a Steam update reverts the game to English, re-run the apply script before you resume that chronicle
- For the same reason, avoid opening an English-build chronicle on the Japanese build — starting fresh is safest
- Export Save before switching builds; the code can be taken on either build
Solving this properly needs a layer that converts internal values between English and Japanese on export and import. It can be built from a reverse lookup of overrides.json, and it is the most valuable next piece of work. Contributions very welcome.
Verification
Results from driving Chrome over CDP and playing through while capturing every exception and console.error. The script is bundled with the kit, so you can run the same checks yourself after editing the translation.
| Check | Result |
|---|---|
| Uncaught exceptions | 0 |
| console.error / warning | 0 |
| Six hours fast-forwarded (real engine) | Floor 8, rank 13, 2,588 kills |
| Replacement characters (U+FFFD) | 0 |
| Template expressions visible on screen | 0 |
| Injected HTML entities | 0 |
| Save-code round trip | OK (v17, decoded) |
| Opening and closing every window | All OK |
| 23 gauges rendered (fill clip shapes) | 0 invalid, 0 zero-width |
| Japanese on screen | 93% |
| English left on screen | 18 (all intentional) |
| Lint (no Japanese in browser-API arguments) | clean |
| Syntax check | OK |
The patched app.asar was diffed file-by-file against the original: everything except game/index.html is byte-identical. One thing remains unverified — launching through the Electron executable, which behaved identically on the unmodified original and so looks like an automation-environment issue. The game logic all passes in the browser, so there is little room for breakage, but please confirm on your own machine.
The first build crashed every time
A real bug this verification caught. Equipment-slot names like Shield and Helm appear both as display string literals and as unquoted object keys in the data tables. Translating only the former made the lookup undefined, and the game died the moment a piece of gear dropped — a textbook localisation failure.
Two guards now handle it: rewriting object keys wherever a translated word is used as an identifier key (27 sites fixed automatically), and refusing to translate any string that matches a name read via dot notation (150 strings protected). Anyone adding short single-word translations should know this failure exists.
The kit in figures
| Item | Value |
|---|---|
| Translation memory entries | 9,458 |
| Source characters translated | 697,267 |
| Glossary terms | 107 |
| Hand-written overrides | 1,015 |
| Hand-translated monster names | 199 |
| Left untranslated (by design) | 980 |
| Japanese on screen (measured) | 91% |
| Added for 1.6.3 | 328件 / 9,013字 |
| Game version supported | 1.6.3 |
Why a single file does it
Lowmoor's entire game is a single index.html — roughly 2MB and 26,468 lines holding the CSS, the JavaScript and the art together. There are no external image files: the art is 212 inline hand-drawn SVGs plus 14 embedded PNGs. That structure is why swapping one file is enough.
There is, however, no i18n layer: every string is written inline in the JavaScript. So the kit scans all string literals and writes a translation back at each position when the dictionary has one. That is why editing tm.json is enough to change the translation, and why a game update only leaves the changed lines in English — everything unchanged still matches.
On the display side the kit adds MS PGothic, Yu Gothic UI and Meiryo to the font stack — MS PGothic first, because it is what Japanese Windows actually used in the Windows 98 era the UI imitates. Japanese cannot wrap on inter-word spaces, so overflow-wrap rules were added to the log, tooltips and tables.
Being honest about quality
This is a first pass by a local LLM (PLaMo) against a 559-term glossary, plus 1,015 hand-written overrides — 199 monster names among them — and a set of rules that reorder phrases into Japanese word order. It is readable; it is not finished.
The game's English imitates a 1981 tabletop RPG module, and that voice is the work itself: not “+3% crit chance” but “+3% clean strokes”, not “+8% movement speed” but “Walking legs run 8% shorter”. Machine translation does not reproduce that. Which is exactly why contributions are welcome.
The translation engine is now a local LLM
The first-pass translation moved from DeepL to PLaMo running locally, and all 5,955 strings / 487,081 characters were re-translated from scratch — 37 minutes on an RTX 5070. The DeepL output is kept as a backup.
Three reasons for the switch.
- No character ceiling — the DeepL free tier is 500,000 characters a month, and it was nearly spent
- The glossary binds harder: DeepL treats its glossary as a suggestion, whereas this pipeline masks each term, translates around it and substitutes the fixed reading back — the model never gets to re-pick a word
- Nothing leaves the machine
The glossary grew to 559 terms, with 17 core words — chronicle, prestige, bestiary and the like — promoted to hard-fixed readings. 5,894 strings (99.0%) came back translated; the remaining 61 are JWTs, CSS selectors and template fragments carrying expressions — things that must not be translated, correctly refused by the gates.
Where to report bugs and untranslated text
With Bogurodzic's kind permission, there is now a Japanese thread in the game's Steam discussions. Odd translations, text still left in English, or an apply script that will not run — that thread is the fastest place to raise them.
Open the thread in Steam Discussions
The thread is titled 【日本語化】Lowmoor 日本語化キット公開しました(ver1.6.0対応). Anyone with a Steam account can post.
What helps most: translations that do not read right, screens still in English, layout breaking after a typeface change, errors from the apply script, and plain suggestions for better wording. All welcome.
The contact form on this site works too, but the thread is public, so a report there also helps whoever hits the same problem next.
Contributing — please use AI
Anyone may add or fix translations. No permission, no reporting. tm.json is plain JSON keyed by the source string: edit it, run build-ja.mjs, done. And if something bothers you but not enough to open a file, posting it in the thread above is plenty.
Beyond that, AI use is actively encouraged. This kit was built with a local LLM (PLaMo) and Claude; translating 613,000 characters by hand is not realistic and it would not exist otherwise. Reproducing an archaic voice is work AI handles well when given a style sample — AI drafts, a human decides the voice. The bundled 翻訳に参加する.md carries ready-to-use prompts and the pitfalls to watch.
Before writing anything back, the patcher checks tag counts, placeholders, injected HTML entities and whether the text is actually Japanese, leaving failures in English — and it finishes with a JavaScript syntax check. A broken translation cannot reach the screen, so experiment freely.
The most welcome contribution is the 980 strings (about 61,000 characters) still in English, all listed in out-fragment-unsafe.json. Japanese word order means the embedded expressions must be moved, which is editing rather than translation; the bundled docs walk through it, including the one validation line to relax.
Terms of use
What you may do
- Modify — rewrite the translations, fix the scripts, restructure it. Freely.
- Redistribute — as-is or modified.
- Fork — publish a better Japanese version. Please do.
- Port to other languages — take the whole pipeline for Chinese, Korean, German, anything.
- Commercial or not, no distinction. No reporting, no permission needed.
The game itself (index.html, app.asar, the executable) belongs to its author, Bogurodzic. This kit claims no rights over it and bundles none of it. Please do not distribute patched game files — shipping translation data alone is precisely why the kit is shaped this way. Keep it that way.
What is forbidden
- Never use it to carry malware. Bundling viruses, spyware, miners or credential stealers under the name of a localisation patch. Localisation patches have been abused this way again and again. If you redistribute a modified kit, ship it as readable source — never as an opaque executable.
- Never harm the author. No pirated builds, no achievement spoofing, no distributing under the author's name, no implying the author endorsed it. Lowmoor is free — there is nothing to take.
- Never use it to deceive. No fake warnings, fake payment prompts or phishing lures injected into the game. A translation layer is, mechanically, a text-replacement layer — it converts directly into a scam. Which is why this is stated explicitly. Do not.
- No abuse, discrimination or unlawful content in the translations.
- Never target saves or accounts. No tampering with or stealing saves, no forged submissions to the Muster Board, no attacks on its backend. The Muster counts only minutes spent with the game open — there is no number to forge. Respect that design.
If you come across a distribution that abuses this kit, please tell us through the contact form or the Steam thread.
What's included
| File | Description |
|---|---|
| 適用する.ps1 | One-click apply for the Steam build: finds the game, extracts, patches and repacks. |
| 元に戻す.ps1 | Restore the English build from the app.asar.en.bak backup. |
| tools/tm.json | The 9,458-entry translation memory. Plain JSON keyed by the source string — edit it and the translation changes. |
| tools/overrides.json | 1,015 hand-written overrides that take priority over tm.json — UI words, proper nouns, rarity tiers, armour slots. |
| tools/monsters-ja.json | All 199 monster names, hand-translated to conventional Japanese tabletop-RPG usage. |
| tools/glossary.tsv | 107-term glossary that pins the game's own vocabulary. |
| tools/patch.mjs | Writes translations back, reorders phrases into Japanese word order, validates, lints and syntax-checks; anything that fails stays English. |
| tools/gaps.mjs | Lists what is still in English — how you find the next thing to translate. |
| tools/repair-tm.mjs | Repairs tags the machine translation dropped or added, matching the source structure. |
| tools/build-ja.mjs | One-command build. This is the only script most people need. |
| tools/translate.mjs | DeepL API caller, needed only when adding new translations. |
| tools/out-fragment-unsafe.json | The 980 strings left in English — the next unit of work. |
| tools/fontpatch.mjs | Adds the typeface switcher to Options and embeds the bundled woff2 fonts into index.html. |
| fonts/ | The three bundled faces as character-subset woff2, each with its OFL licence, plus the subsetting script. |
| 更新の手順.md / tools/update.mjs | The procedure and script for re-translating only what a game update added; existing translations are reused. |
| 記録/CHANGELOG-1.6.3.md | What changed across 1.5.2 → 1.6.0 → 1.6.1 → 1.6.3: the diff against the old builds, the defects each update surfaced, and how the kit copes with minified code. |
| 翻訳に参加する.md | How to improve the translation: AI workflow, prompt examples, style guide. |
| 利用条件.md | What you may do, and what is forbidden. |
Disclaimer
- The kit is provided as-is, without warranty.
- It rewrites game files, so it may not work in every environment.
- It backs up app.asar before patching, but take your own copy if you prefer. Steam's “Verify integrity of game files” restores everything either way.
- The authors accept no liability for any damage arising from its use.