Skip to content

🚀 RenLocalizer v2.8.18

Latest

Choose a tag to compare

@Lord0fTurk Lord0fTurk released this 26 Sep 18:43

Hey everyone!

Version 2.8.18 is out! This update focuses heavily on unlocking custom/obfuscated game archives, fixing native translation misses across indented story branches, introducing a self-healing translation cache to purge corrupted entries, and shielding nested variables from glossary collisions.

Here is the breakdown of what’s new in plain English:


📦 Custom & Obfuscated RPA Archive Extraction

Some modded or custom visual novels protect their assets by modifying Ren'Py's archive headers or scrambling file indexes so standard extraction tools fail.

  • Non-Standard Header Support: The engine no longer rejects archives with customized magic headers. It dynamically inspects archive structures instead of hard-failing on non-standard RPA-3.0 formats.
  • SHA-256 Keystream XOR Deobfuscation: Games that encrypt their archive indexes using XOR keystreams are now automatically detected and unlocked through a 4-tier recovery fallback.
  • Script-First Priority: Script files (scripts.rpa) are now extracted before massive asset archives (images.rpa, videos.rpa), letting you get straight to translating dialogue and game code without waiting for gigabytes of media to unpack.

🎯 Accurate Label Scoping & Native TLID Generation

  • Indented Scene Scoping: In Ren'Py, labels represent linear story progression rather than isolated code blocks. Previously, when a script exited an indented block, the parser could prematurely lose track of the active label. The parser now keeps the active scene context alive until a new label is explicitly defined.
  • Innermost Label Resolution: Native translation hashing now selects the most immediate and specific scene label prefix (e.g. scene1_<hash> instead of a generic parent start_<hash>). This resolves issues where translated lines were skipped in-game because Ren'Py expected scene-specific hashes.
  • Local Sub-Labels Supported: Added full support for Ren'Py sub-labels starting with a dot (label .local_name:), correctly resolving their parent namespace (parent.local_name).
  • Zero Duplicate String Crashes: Globally tracks exported translation strings to prevent identical old "..." entries across multiple .rpy files, eliminating engine startup crashes.

🛡️ Self-Healing Cache & Interruption Resilience

  • Auto-Purging Corrupted Cache Entries: Previous imperfect LLM runs could sometimes leak internal XML or placeholder tokens into the translation cache, causing repeated translation corruption cycles. On launch, the cache manager now inspects existing entries and automatically drops any contaminated data.
  • Guarded Cache Storage: New translations containing unclosed or leaked tags are strictly blocked from entering the cache on disk.
  • Frequent Checkpoints (Every 100 Items): Cache checkpoint frequency has been tightened from 500 to 100 items, and safety saves are wired directly into application shutdown handlers so no translated progress is lost if an operation is stopped midway.

🧩 Nested Placeholder & Glossary Shielding

  • Anti-Nesting Span Protection: Fixed an issue where glossary words appearing inside existing Ren'Py variables (like [name]) were accidentally double-wrapped into invalid nested tags (e.g. <ph>[<ph>name</ph>]</ph>). The syntax guard now skips terms located inside already-protected variables.
  • Innermost-First XML Restoration: Overhauled XML unpickling with a recursive innermost-first regex parser, ensuring multi-layer tags returned by AI models unwrap cleanly without leaving orphaned closing tags behind.

🧪 Automated Tests & Compatibility Realities

All test suites and integration verifications are passing cleanly across our automated CI pipelines.

⚠️ A Reality Check on Compatibility:
Automated tests are strictly theoretical validations run in sterile environments. Major architectural rewrites and new features should always be considered somewhat experimental in real-world conditions—we never claim any build is 100% bug-free. Diverse system setups and non-standard game scripts will always surface edge cases synthetic tests cannot predict.

If you run into a translation glitch or unexpected behavior, please report it via GitHub Issues or right here in the F95zone thread with your log output so we can look into it!


Detailed line-by-line technical commits and source diffs are documented in the CHANGELOG.md.