Unity
Serialized .assets, UnityFS bundles incl. Addressables, I2 Localization, TextAsset, MonoBehaviour / TextMeshPro text via type trees or Managed/*.dll.
Rewritten .assets, LZ4-repacked bundles
Desktop app · Tauri 2 + Rust
NinjaTrans detects a game's engine, extracts its translatable text, lets you translate it in a fast table editor with AI assist, and injects the translations straight back into the game files.
Point it at a game folder — or a whole library like steamapps/common — and every game inside is detected.
Serialized .assets, UnityFS bundles incl. Addressables, I2 Localization, TextAsset, MonoBehaviour / TextMeshPro text via type trees or Managed/*.dll.
Rewritten .assets, LZ4-repacked bundles
.locres (all versions) in .pak v1–11 — zlib, gzip, zstd, lz4, AES — or loose.
Patch pak zzz_ninjatrans_P.pak
.pck v1–v3 (standalone, embedded in exe, AES), .translation, CSV/PO, .tscn/.tres, binary .scn/.res.
Rebuilt .pck / exe
data.win / game.ios / game.unx STRG chunk, loose JSON/CSV.
Rebuilt data file, pointers remapped
Content/**/*.xnb (LZX/LZ4), string dictionaries and lists.
Uncompressed .xnb
Pick a game or a Steam library. One click extracts and indexes every string into a workspace.
Edit in the table, machine-translate the current view with AI, or export JSON for translators and import it back.
Tick off finished rows. Filter by not-done, new or changed. Mark a whole view done at once.
Patch the game in place (originals kept as *.ntbak) or build a drop-in folder anyone can merge into their game.
Every edit is journaled the instant you make it. A crash loses nothing; reopening a workspace loads the snapshot and search index without touching the game again.
Game folders are fingerprinted. When a patch lands, re-extract carries your work over: unchanged lines keep their translation, changed ones become drafts, new ones are flagged.
DeepSeek out of the box, or any OpenAI-compatible endpoint. Parallel batches, results saved as they stream in, resumable, and done rows are never touched.
Check fonts lists which game fonts lack the characters your translation uses. Set a replacement .ttf/.otf and inject swaps it in — icon fonts stay intact.
Plug in your key-finder tools; every key they print is verified against the game's own encrypted data. The key never leaves your machine or enters a package.
Package writes only the modified files, at their paths in the game, in the game's own formats. Players merge the folder — no NinjaTrans required.
Windows 10/11 (x64). Needs the WebView2 runtime, which Windows 10/11 already ship; the installer adds it when missing.
macOS and Linux: build from source. Requires Rust (pinned by rust-toolchain.toml) and Node.
# development
npm install
npm run dev
# macOS app bundle → target/release/bundle/macos/NinjaTrans.app
npx tauri build --bundles app