Repository navigation
Output Modes
RenLocalizer can generate your game translations in two distinct formats. Depending on your game's complexity and script structure, choosing the right output mode ensures maximum performance and zero crashes.
| Feature | β‘ Native TLID Mode (Default β Recommended) | β¨ Standard Mode (Runtime Hook) |
|---|---|---|
| Best For | π 95% of visual novels, maximum performance | Complex dynamic UI screens, interactive sandboxes |
| How it Works | Pure native Ren'Py translate <lang> & strings: blocks |
Injects zzz_renlocalizer_runtime.rpy + strings.json
|
| Execution Speed | π Pure C-level speed (zero overhead) | Fast O(1) in-memory lookup with MRU caching |
| Runtime Scripts | β None (no Python hook runs during gameplay) | Yes (~1,365 lines runtime hook v4.2.0) |
| Dynamic Interpolation | Handled natively by Ren'Py | Pre- & post-interpolation matching |
| Compatibility | Ren'Py 6.99 to 8.x+ | Ren'Py 7.x to 8.x+ (Python 2 & 3 safe) |
In Native TLID Mode, RenLocalizer writes dialogue lines directly into official Ren'Py translation blocks matching the original statement hashes:
# tl/turkish/script.rpy
translate turkish start_52f47bbf:
# e "Hello, world!"
e "Merhaba, dΓΌnya!"UI elements, choice menus, and screen texts are automatically extracted and generated as standard translate strings: blocks:
# tl/turkish/common.rpy
translate turkish strings:
old "Start Game"
new "Oyuna BaΕla"- Zero Performance Impact: No custom Python scripts run during gameplay; uses Ren'Py's optimized internal lookup.
- Save File Compatibility: Completely safe for existing save states and rollbacks.
- Clean Structure: 100% compliant with standard Ren'Py SDK distribution standards.
In Standard Mode, RenLocalizer bundles translations into a high-performance strings.json dictionary and injects a smart runtime interceptor (zzz_renlocalizer_runtime.rpy):
ββββββββββββββββ βββββββββββββββββββββββββββββββ ββββββββββββββββββββ
β Game Screen β ββββΊ β Runtime Hook (v4.2.0) β ββββΊ β Translated Text β
β displays β β - Exact O(1) lookup β β seamlessly β
β text β β - Case-insensitive fallback β β rendered β
ββββββββββββββββ βββββββββββββββββββββββββββββββ ββββββββββββββββββββ
- When playing sandbox games or complex RPGs with heavily scripted, dynamic Python UI strings (e.g. inventory counters, quest markers, dynamic stats).
- When some screen buttons or system overlays remain untranslated under Native TLID mode.
- Features automatic Screen Harvesting (scans active Ren'Py screens during gameplay) and automatic RTL text shaping for Arabic, Persian, and Hebrew.
Modern Ren'Py engines crash if the same old "..." string is defined more than once within translate strings: blocks.
How RenLocalizer guarantees zero crashes:
- RenLocalizer automatically tracks all existing
tl/files and pre-existing string entries. - Identical UI strings across multiple
.rpyfiles are merged into a single unique translation repository. - Duplicate placeholder keys are automatically skipped, completely eliminating the infamous:
"The string '...' has been translated more than once in the same language." error.
You can switch output modes at any time on the main dashboard:
- Under Output Settings, toggle between Native TLID and Standard.
- Click Start Translation (βΆ).
- Your translation memory preserves previously translated lines, instantly regenerating the files in your chosen format!
default quests = {
"main_1": {"name": "Main Story", "objective": "Visit the coffeeshop"}
}Ren'Py's native translate strings: system cannot match Python f-string interpolated text. If you notice untranslated screen text or menu labels, switch to Standard mode β its runtime hook handles these edge cases better.
π Switch anytime: Settings β Output Mode β Standard β re-translate.
- π Home β Welcome & Overview
- π₯ Installation β Download & Setup
- β‘ Quick-Start β First Translation in 3 Steps
- βοΈ Settings-and-Engines β Engines, Profiles & AI Tuning
- π¦ Output-Modes β Native TLID vs Standard Hook
- π οΈ Toolbox β RPA, RPYC & Glossary Utilities
- β FAQ β Common Questions & Fixes