EnginesGuidesFAQPatreonDiscordDownload
Sign in
RuneTranslate · translate Japanese games end-to-end
EnginesGuidesCompareImage textSave editorCheat ModeFAQDownloadChangelogPatreonDiscordYouTubePrivacyTermsContact
All posts
troubleshooting · workflow · export · exclusions

Translated game won't start? Find the bad line

Aug 29, 2026·11 min read

Your translated game opens and closes, or hangs on a loading screen forever. One of the lines you translated was never text: an id, a path, a flag the game compares against. Prove it is the translation first, then find the line by halving — about thirteen exports takes five thousand lines down to one.

The window opens. The window closes. This game was fine yesterday, then you spent an evening translating it, and now it is dead.

Somewhere in those lines is one that was never text: a scene name, a file path, a flag the game compares against. The engine hit it and gave up before drawing anything.

You are not going to read five thousand lines to find it. You are going to ask one yes/no question about thirteen times.

The short answer. Prove it is the translation at all, then halve: translate half the suspects, export, launch. Whichever half fails holds your line. Repeat on that half until one line is left.

Before you hunt: is it the translation at all?

  1. Run the original game. Not your export, the untouched copy. If that fails too, the problem is your machine, the folder, or the game.
  2. Translate one short, harmless line, export it, run it. A menu word you can see on screen will do.
  3. Only then start looking for a line.

Step 2 says one line, not nothing, on purpose. Several adapters short-circuit when there is nothing to write, so an empty export tests a file copy rather than the delivery, and it can pass while the real thing fails.

If the one-line build also fails, no individual line is at fault and halving will find nothing. Re-export to a brand-new empty folder, check you are launching the exported copy and not the original, and read the export's warnings. If it still fails, report it as a delivery problem.

Triage costs two launches and one export: minutes on a small RPG Maker project, longer on a big Unity game. It saves you an evening spent looking for a line that is not there.

Two lookalikes. Boxes, question marks or garbled Latin while the game runs is a font or encoding problem. A crash right after installing a plugin or overlay is the tool, not your lines.

Find the line by halving

Most projects hold many files, and the file list is the easiest thing to cut in half.

  1. Reset all translations from the toolbar.
  2. Open Select files to translate, which explains itself: “Choose which files to translate. Unchecked files are left untouched.” Untick half the files, translate the rest.
  3. Export to a fresh, empty folder and run the game.
  4. If it starts, your line is in the half you left alone; if not, it is in the half you just translated. Either way your list is half the size, and you forget the other half.
  5. Reset all translations again, halve the surviving list, export, run.
  6. Repeat until one file is left, then halve inside that file until one line is left.

Halving by file is coarser than halving by line, so the round count tracks your file count: forty files is about six rounds to reach the file, then you start again inside it.

Single-file projects — an NScripter script, a one-scenario Kirikiri or Wolf game — have no file list to cut. Drag a box down the rows instead: the checkboxes and the bulk bar appear on their own, and Re-translate selected takes it from there. For a bigger sweep, narrow the rows with the filter and search box first, then Select all visible. Careful with that one: it takes exactly what the filter is showing, so a filter you forgot to clear quietly contaminates every later round. Write down the filter you used.

One broken batch of a hundred lines, played out:

RoundUnder suspicionTranslateResult
1100first 50runs → it is in the other 50
250first 25breaks → it is in these 25
325first 13runs → it is in the other 12
412first 6breaks → it is in these 6
56first 3breaks → it is in these 3
63first 2runs → one line left

Seven exports is the worst case from a hundred lines, and about thirteen the worst from five thousand.

What a round costs

One export, one launch, and however long the game takes to reach its first line of dialogue. Two or three minutes on a small RPG Maker project. On a large Unity game, where the export copies the whole thing and the title screen takes its time, closer to ten.

So thirteen rounds is most of an evening. It is still the cheap option, because the alternative is reading five thousand lines and guessing right.

Two things go wrong by hand. Export to a fresh, empty folder every round, because some engines mount patches additively, so round 3 landing on rounds 1 and 2 tests all three at once. Reset means reset: use Reset all translations, never a manual edit, because it restores the text captured when the project was created even if you have overwritten the source folder since.

If it still fails after you revert the line

Then there was more than one, which is the normal outcome of a first translate-everything run on a parse-sensitive engine. Keep your line reverted and run the loop again over whatever is still translated. A second offender is very often the same kind of string as the first, in the same file.

Next time, translate in batches

Batching does not save exports — these are exports you were going to make anyway — but it makes each failure arrive pre-narrowed. It broke in the last batch, so halving starts from a hundred lines instead of five thousand. Start at 100, and widen to 500 or a whole file once several batches run clean.

Which engines break if you translate the wrong line?

People talk about engines being strict or relaxed. What actually decides it is where your translation lands.

Some engines read it as data: a separate file and a runtime hook on Ren'Py, escaped JSON on RPG Maker, a .locres value whose key hashes are kept intact on Unreal. The game's structure never sees your text, so a wrong line costs you a wrong line. Others splice it into a file the game parses as script, markup or a byte stream, and your sentence becomes part of that file's structure. Now a colon, a bracket, one extra byte or a string that was also a lookup key is enough to stop the game.

That is the whole rule. Find your engine, read its row, then skip on.

EngineWhat a wrong line does
RPG Maker MV/MZNothing structural: escaped JSON and CSV, and only a fixed set of event commands is offered. The one real risk is a plugin matching a speaker name exactly, and the exporter rewrites that plugin's key too.
Ren'PyVery little. The source is never rewritten, so a string that doubles as a logic key is safe.
Unreal EngineNo line-level failure mode we have seen: .locres strings are display text by construction. The risk here is missing text, not a dead build.
UnitySevere and silent: scene names, variable keys and callbacks are stored identically to dialogue. Expect infinite loading, a dead button, or a black screen.
GodotSevere. Node paths, StringNames and res:// references are the address the engine looks up; write-back refuses them.
Wolf RPGThe most fragile format here. One byte of drift desyncs the whole stream and the process aborts before a window exists.
Kirikiri / KAGSevere: brackets are syntax and storage names are filenames. A translated tag name, a converted bracket or a translated graphic filename each stop the game dead.
Electron VNSevere. A template placeholder written into the live JavaScript inside app.asar is a syntax error rather than a bad translation.
TyranoBuilder / TyranoScriptSame family as Kirikiri: KAG tags are markup, so a translated tag is syntax. Inline speaker references are never rewritten.
NScripterSevere, uniquely: ?, % and $ are variable sigils, so a stray one is a syntax error.
YU-RISSevere, because much of what the format calls a string is an operand. Separating them took one game from 40,678 live rows to 8,914, with no dialogue lost.

Other engines have their own pages, each with a guide, under engines.

Three lines that killed a game

Every exclusion rule in RuneTranslate was bought by a game that stopped running. These three are fixed. In each one the broken line looked completely reasonable, and the export finished green.

Godot: the game invents a character. A line read Warning: the door is locked. Perfect English. Dialogic escapes every colon in stored text, because an unescaped colon is how it splits off a speaker name. Written back raw, the sentence re-parsed as a character called Warning saying the door is locked, and the addon duly created him.

Kirikiri: the game hunts for a file called End. A button's tag carried a graphic filename and a target label, and the masker could not span a tag holding brackets of its own, so both were exposed and translated. The scanner is bracket-aware now: it closes at the matching bracket, so a nested expression stays inside the tag while an ordinary one ends at its first ].

RPG Maker: a portrait quietly vanishes. A standing-portrait plugin picks a character's art by comparing the speaker name, letter for letter, against a table in its own config. Translating the name is correct; leaving that config alone is correct too, since it is full of asset keys. Together they broke the equality, and the character's portraits disappeared with nothing logged.

All three exports reported success. A clean export is not evidence of a working game, on any engine. The only evidence is launching it.

When it isn't your lines at all

Halving cannot find these, because no half runs: the problem is where the export landed. Wolf RPG games read their .wolf archive before any loose file beside it, so one booted its title screen while the translated data sat on disk unread. Unity's Addressables refuses a bundle whose bytes no longer match its checksum, and gives you a black screen with nothing in any log. Packed RPG Maker games ignore data files sitting beside the executable. All three are handled now, which is why a delivery failure is worth reporting rather than hunting.

Is there a marker that tells you which lines are dialogue?

No. And be suspicious of anyone who says otherwise.

A user once told us he had found one Godot game wrapping every dialogue string in ||, translated only those, and the game ran. Genuinely useful for that game. It is one developer's habit, not a Godot convention, and the next game will do something else.

The counter-example comes from YU-RIS. In one game the backtick channel held the whole interface string table, 687 of its 692 rows display text — and the backtick still means nothing there. All three quote styles compile to the same thing, so a rule built on the delimiter reddens real prose. Where the value lived told you everything; how it was quoted told you nothing.

Rely on position and shape instead, and let the game teach you both. Start it, read the first line of dialogue on screen, then find that exact line in the editor: its file, its group and its neighbours are what dialogue looks like in this game. Anything sitting somewhere else is a candidate for not being dialogue.

What the app flags, and what it can't

RuneTranslate marks rows it believes are code, asset paths or ids as excluded. They stay visible rather than hidden, tinted orange behind a show excluded toggle, so you can see what it decided and force any row with translate anyway. You can add your own patterns too.

Select excluded rows and start a run, and it stops to ask:

12 of the 340 lines you picked are excluded — flagged by your filters, or by RuneTranslate as code, asset paths or IDs. Translating those can break the game.

Skipping keeps them excluded. Translating them opts them in for future runs too.

Clicking through is fine. Just remember that you did, because it is the first place to look when the export stops running.

One honest limit: an exclusion is a guess about a string, so it cannot know that one sentence in your game doubles as a lookup key in some plugin that game ships. A game whose source is already English gets less protection still, because the strongest filters ask whether a string holds source-language text at all.

Frequently asked questions

Why won't my game start after I translated it?

Almost always because one line you translated was an identifier, a path, a scene name or a flag the game compares by exact string. Changing it breaks the parse, or the lookup.

How do I find which translated line broke the game?

Halve. Reset all translations, translate half, export to an empty folder, run. Whichever half fails holds the line; halve it and repeat. Six or seven rounds from a hundred lines, about thirteen from five thousand.

My translated game closes immediately — what does that mean?

A fatal error during startup. On Kirikiri, Electron visual novels and NScripter, usually a syntax error: a bracket, quote or placeholder translated or dropped. On Wolf RPG and YU-RIS, a desynced stream.

Why does my translated game open to a black screen?

Usually a load that failed inside code which swallowed the exception; on Unity, a bundle whose checksum no longer matches its catalog entry. Try a build with one harmless line translated: if that is black too, the delivery is at fault rather than any line.

My translated game is stuck on the loading screen — is that the translation?

Very likely, on Unity. An infinite load is the classic symptom of a translated scene name or variable key: the game waits for a name that no longer matches, and nothing throws.

What kind of lines should never be translated?

Anything the game resolves by exact string: paths, scene and node names, variable and event names, language codes, anything shaped like snake_case or res://. If you cannot picture a player reading it on screen, leave it.

The game runs but the text is boxes or question marks — is that the same problem?

No. Uniform boxes mean the font has no glyph for those characters; a literal question mark means they were dropped when the file was written. Both are font or encoding problems, with a different fix.

Where to go next

Starting a translation rather than repairing one? How to make a translation patch covers the whole job.

When you find your line: leave it in the source language, translate everything around it, export to a fresh empty folder, and run it. One untranslated identifier costs the player nothing.

Related reading
01

How to make a translation patch

patchsharingtutorialworkflowAug 18, 2026 · 9 min
Read →
02

XUnity.AutoTranslator isn't translating

unityxunity-autotranslatortroubleshootingAug 18, 2026 · 9 min
Read →
03

Why translated text shows as boxes

unitytextmeshprofontstroubleshootingAug 18, 2026 · 9 min
Read →

Ready to try RuneTranslate?

Free tier unlocks every engine + every translation provider. Supporter ($3/mo) unlocks full speed.

Download for Windows