Desktop app · Tauri 2 + Rust

Translate any game.
Ship it back in its own format.

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.

  • Unity
  • Unreal 4/5
  • Godot 3/4
  • GameMaker 2
  • XNA / MonoGame

Engines

Point it at a game folder — or a whole library like steamapps/common — and every game inside is detected.

Unity

Serialized .assets, UnityFS bundles incl. Addressables, I2 Localization, TextAsset, MonoBehaviour / TextMeshPro text via type trees or Managed/*.dll.

Rewritten .assets, LZ4-repacked bundles

Unreal 4/5

.locres (all versions) in .pak v1–11 — zlib, gzip, zstd, lz4, AES — or loose.

Patch pak zzz_ninjatrans_P.pak

Godot 3/4

.pck v1–v3 (standalone, embedded in exe, AES), .translation, CSV/PO, .tscn/.tres, binary .scn/.res.

Rebuilt .pck / exe

GameMaker 2

data.win / game.ios / game.unx STRG chunk, loose JSON/CSV.

Rebuilt data file, pointers remapped

XNA / MonoGame

Content/**/*.xnb (LZX/LZ4), string dictionaries and lists.

Uncompressed .xnb

Workflow

  1. 1

    Open & extract

    Pick a game or a Steam library. One click extracts and indexes every string into a workspace.

  2. 2

    Translate

    Edit in the table, machine-translate the current view with AI, or export JSON for translators and import it back.

  3. 3

    Review

    Tick off finished rows. Filter by not-done, new or changed. Mark a whole view done at once.

  4. 4

    Inject or package

    Patch the game in place (originals kept as *.ntbak) or build a drop-in folder anyone can merge into their game.

Built for real translation projects

Nothing to save

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.

Survives game updates

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.

AI translate

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.

Font replacement

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.

Encrypted games

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.

Shareable packages

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.

Get NinjaTrans

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