Download Latest Version UnityGameTranslator-BepInEx6-IL2CPP-v0.9.60.zip (3.3 MB)
Email in envelope

Get an email when there's a new version of UnityGameTranslator

Home / v0.9.56
Name Modified Size InfoDownloads / Week
Parent folder
UnityGameTranslator-BepInEx5-v0.9.56.zip 2026-03-26 3.3 MB
UnityGameTranslator-BepInEx6-IL2CPP-v0.9.56.zip 2026-03-26 3.3 MB
UnityGameTranslator-BepInEx6-Mono-v0.9.56.zip 2026-03-26 3.3 MB
UnityGameTranslator-MelonLoader-IL2CPP-v0.9.56.zip 2026-03-26 3.3 MB
UnityGameTranslator-MelonLoader-Mono-v0.9.56.zip 2026-03-26 3.3 MB
README.md 2026-03-26 4.7 kB
v0.9.56 source code.tar.gz 2026-03-26 296.4 kB
v0.9.56 source code.zip 2026-03-26 340.4 kB
Totals: 8 Items   17.0 MB 2

v0.9.56 — Major Update

🔤 Universal Font Replacement

  • TTF/OTF Rasterizer: Built-in pipeline to rasterize any .ttf/.otf font into SDF bitmap atlas. Supports TrueType (quadratic), OpenType CFF (cubic), compound glyphs, and variable fonts. No external tools needed.
  • UI.Text font replacement on IL2CPP: Working via fontNames trick — clones the game font, redirects to system/custom fonts. Includes DontDestroyOnLoad for persistence across scenes.
  • TMProOld fallback fonts: Custom fonts (Devanagari, etc.) work as TMProOld fallbacks with all required fields properly initialized (fixes NullRef in GenerateTextMesh).
  • Font scale system: Per-font size scaling with bestFit maxSize support. Conditional scale — only applied when clone font is active.
  • Key==value font replacement: Texts validated as identical in source/target (e.g., "Options" EN→FR) correctly receive the replacement font. Scanner triggers font replacement for prefab-defined text.

🎮 Scene-Aware Font Management

  • DontDestroyOnLoad on clone fonts — persist across scene changes.
  • willRenderCanvases hook — re-warm clone atlases and refresh text after scene transitions.
  • Scene unload hooks — cleanup stale references, typewriting state, and dead component refs.
  • OnEnable hook — Harmony postfix on Graphic.OnEnable re-binds clone font when components activate.

⌨️ Typewriting Detection

  • Debounce system: Per-component tracking detects text growing char by char. 500ms stabilization before queuing for AI.
  • Dialogue replacement: When text changes completely on same component (click-to-next), previous text is finalized and queued before deferring the new one.
  • Cache hit bypass: Cache hits during typewriting touch the timestamp to keep the stabilizer alive.

🤖 AI Translation Quality

  • Markup tag extraction: <color>, <size>, <b>, etc. are extracted as [!t*N] placeholders before AI, restored after. Prevents AI from corrupting game formatting.
  • Line break preservation: \n[!nl] placeholder before AI, restored after.
  • Whitespace preservation: Leading/trailing whitespace trimmed before AI, restored after.
  • Placeholder format: Migrated from [vN] to [!v*N] to avoid collision with game text. Auto-migration of existing files.
  • Conditional prompt rules: [!v*N], [!t*N], [!nl] rules only mentioned when present — prevents AI hallucinating non-existent placeholders.
  • Tag validation: Warning logged when AI drops tag placeholders (informational, no rejection).

🔄 Cache & Sync

  • Thread-safe reverse cache: HashSetConcurrentDictionary fixes intermittent missed translations from concurrent access.
  • Read-back detection: When games read translated text and append untranslated content, reconstructs source text for proper cache lookup. Verified against cache to prevent false positives.
  • Worker cache-hit notification: Components re-queued with the same text now all receive translations (fixes first-dialogue display).
  • Upload auto-select: Games with Steam ID are auto-selected without manual search. Server creates game on first upload.
  • CJK game name support: Proper URL slugs for Chinese/Japanese/Korean game names (server-side).
  • Fonts metadata: _fonts settings included in upload payload.

🔍 Scanner & Detection

  • Unified scanner architecture: Refactored with generic text type detection (NGUI, SuperTextMesh, custom frameworks).
  • Relaxed visibility check: Inactive panels/tabs with stable text are translated upfront. Only inactive + typewriting components (accumulators) are deferred.
  • Generic text type patching: Auto-detects and patches set_text/get_text on unknown text component types.

🛡️ Stability

  • Atlas corruption fix: ASCII-only PreWarm (95 chars) prevents corruption with large caches. Additional chars added incrementally.
  • Per-frame atlas protection: Prevents character purging when multiple cloned fonts share the native rasterizer.
  • Shutdown cleanup: Proper thread termination prevents game hang on exit (IL2CPP).
  • Conditional SetFont: Only apply clone font when text has a cached translation — untranslated CJK text keeps original game font.
  • Conditional ApplyFontScale: Only scale when component has clone font — prevents size cumulation.

🧹 Cleanup

  • Debug mode: "debug": true in config.json enables verbose logging. All diagnostic logs (TW-STAB, TW-FINAL, REVERSE-MISS, etc.) are debug-only.
  • Silenced noisy logs: UniverseLib TypeLoadException warnings and SSE connection errors moved to debug.
  • Removed ~660 lines of dead code.
Source: README.md, updated 2026-03-26