How to translate a Unity game to English
Translate Unity games with RuneTranslate — reading TextAssets, MonoBehaviour fields (Mono and IL2CPP), and StreamingAssets, why it’s externalized-text-only, and how the identifier guard keeps you from breaking the game.
Unity is the engine behind a growing share of Japanese indie games and visual novels — and the trickiest of the common engines to translate, because Unity has no single text format. Dialogue can live in TextAsset blobs, in MonoBehaviour string fields, in loose StreamingAssets scripts, or compiled straight into a C# DLL. This guide walks through translating a Unity game with RuneTranslate and, just as importantly, explains the one rule that makes Unity different: externalized text only.
The big caveat first: externalized text only
RuneTranslate translates Unity text that lives in data— asset files the engine loads at runtime, including the string fields on MonoBehaviour components (dialogue, names, labels). It reads those fields on both Mono and IL2CPPbuilds: the type layout comes from the game's own DLLs on Mono, or is reconstructed from the IL2CPP metadata when there's no Managed/ folder. What it can't reach is text hard-coded into compiled C# code itself (Assembly-CSharp.dll). In practice, games that keep their script in assets and components translate well — and opening the project, the first step, tells you what you have.
What you need
- RuneTranslate for Windows— free, every engine and provider unlocked.
- A Unity game folder — the directory with the game
.exeand a<GameName>_Data/folder (containingglobalgamemanagers,resources.assets,data.unity3d, andlevel*files). - A target language — English, Spanish, French, German, Portuguese, Russian, Chinese, Italian, Turkish, Vietnamese, and 20+ more.
- One translation provider. Free Google Translate works out of the box; DeepL has a free tier; OpenAI, Anthropic, a local model, and any OpenAI-compatible API are bring-your-own-key.
Step 1: Open the game folder
Launch RuneTranslate, click New project, and point it at the Unity game directory. Engine detection looks for the _Data/ folder and identifies the project as Unity. A bundled UnityPy Python sidecar (shipped inside the installer) opens the asset files and lists the readable strings into a per-project workspace under %APPDATA%/RuneTranslate/unity-workspace/<projectId>/. Your original game folder is never modified. Unity is a best-effortengine — verify the exported build runs before redistributing.
Step 2: How strings get extracted
RuneTranslate reads text from every place Unity externalizes it:
- TextAssets— JSON / CSV / script blobs embedded in
.assetsand AssetBundles, sliced by a format-aware extractor. - MonoBehaviour string fields— display text on components (dialogue, names, labels), on both Mono and IL2CPP builds (type info comes from the game's DLLs, or is reconstructed from the IL2CPP metadata).
- StreamingAssets— loose script files walked directly on disk (
.json,.txt,.csv,.tsv,.xml,.yaml,.ks, and more). - Encrypted Addressable bundles— games that AES-encrypt their Addressable asset bundles are decrypted automatically (the key is derived from the bundle's own filename), so their text extracts like any other bundle.
Unity is also where over-translation does the most damage, so RuneTranslate ships a guard for it. Many MonoBehaviour strings aren't display text at all — they're control identifiers and flow operands: scene names a LoadScene call resolves by string, message routing keys, animator / sound clip names, Live2D part names, and the comparison values inside Fungus If / SetVariable logic (e.g. a flag like 村落出口). Translate those and the game silently breaks — the classic symptom is an infinite "loading" screen with no error. RuneTranslate auto-classifies these as excluded (shown in red, opt-in only), so the editor surfaces genuine dialogue and labels and leaves the machinery alone. Fungus {$var} substitutions and {color=...} / TMP <...> markup are masked behind placeholders so they survive translation intact.
Step 3: Translate and review
Pick a provider and run. DeepL or an LLM read best for dialogue; free Google Translate covers menus and item names. Glossary your cast and recurring terms first — see Glossary 101. Every line lands in the editor next to its source; edit inline (saves on blur or Ctrl+Enter), and run the optional AI refinerfor a second-pass proofread. The free tier runs at a modest throttle (roughly 2× slower on AI providers, less on the scrapers) — same engines, same output quality; paid just runs at full speed.
Step 4: Export a playable build
Click Export. RuneTranslate copies the game, then patches the translated strings back into the asset files in place. The same exclusion guard runs at write-back, so an older project can't accidentally push a translated scene name or flow operand on re-export. The output is a full, runnable copy of the game in the location you choose — launch the .exe and it plays in your target language.
Translating into a non-Latin language (Chinese, Japanese, Korean, Thai, Arabic) whose glyphs the game's built-in font can't render? RuneTranslate injects a fallback font into the TextMeshPro font stack on export, so the translated text shows up instead of missing-glyph boxes.
Known limitations
- Externalized text only: strings hard-coded into the compiled C# code (
Assembly-CSharp.dllon Mono, or the IL2CPP binary) are not translated. MonoBehaviour datafields are — on both Mono and IL2CPP builds. - IL2CPP MonoBehaviour reading needs a parseable
global-metadata.dat; heavily obfuscated metadata may not reconstruct (best-effort). - Best-effort: confirm the exported game launches and reads correctly before sharing it.
- Image text (logos, hand-drawn UI, CG captions) is not translated — outside machine-translation scope.
Why this is easier than the old way
Manual Unity translation meant unpacking assets with UABE or AssetStudio, hunting for which TextAssets and MonoBehaviour fields held real text, hand-avoiding the identifier strings that crash the game, then re-importing without corrupting the asset table. RuneTranslate folds extract, classify (so you don't translate machinery), translate, and patch-in-place into a few clicks — with the editor open so you control the wording.
See the Unity engine page for the full feature list, read the TyranoBuilder guide for an HTML-based engine, or download RuneTranslate and try it on a real game.
Ready to try RuneTranslate?
Free tier unlocks every engine + every translation provider. Supporter ($3/mo) unlocks full speed.
Download for Windows