π RenLocalizer v2.8.1 β What's New? (FIX)
π§ Smarter Text Extraction β The Engine Overhaul
This release is about what happens under the hood. For a long time, RenLocalizer relied on regex as the primary way to decide whether a string was translatable text or technical markup. It worked for most cases, but tag-heavy strings like {color=#5175ea}*giggle*{/w} often got silently dropped β regex would see the markup and reject the whole line before checking what was actually inside.
v2.8.1 introduces a structure-first extraction layer: the parser now tokenizes Ren'Py markup structurally, separating visible text from tags first, then making extraction decisions based on what the player actually sees. Regex stays as a fallback β but it's no longer the gatekeeper. This change applies across all extraction paths: the main parser, RPYC reader, deep scan, and the pyparse grammar layer.
βοΈ Extraction Safety Modes
A new extraction safety selector gives you control over how aggressively RenLocalizer looks for text:
- Strict β conservative, lowest false positive risk
- Balanced β the new default, best coverage/safety tradeoff
- Aggressive β maximum coverage, higher chance of picking up technical strings
π Runtime Translation Improvements
Several improvements to how translations are matched at runtime:
- Unicode normalization fallback β translations now survive curly quotes, long dashes, ellipsis, and similar punctuation variants that look identical but aren't
- Visible-form alias synthesis β
strings.jsonnow generates safe aliases for common punctuation variants so runtime exact-match coverage improves automatically - Fragment aliases β long multi-sentence strings now also generate guarded fragment aliases, helping screen-driven text that only renders a portion of a larger string
β Real-World Verified
The new extraction pipeline was validated on several large real-world Ren'Py projects and performed well across the board β though as always, games with non-standard structures may still have some strings that slip through.