Apps SDK — Godot
Translate your Godot 4 game's UI into 90 languages with one line of GDScript. The add-on caches translations on disk for instant offline startup and never crashes your game — every failure falls back to the original text.
Install
- Download the add-on: transable-godot-0.1.0-preview.2.zip
- Unzip it into your project folder so you get
addons/transable/. - Enable it in Project → Project Settings → Plugins — tick Transable. That registers the
Transableautoload singleton, callable from anywhere. - Create an app project in the dashboard and copy your API key.
Godot with C#/Mono? You can use the tested Transable.Sdk .NET core from C# directly instead of this GDScript add-on — see the .NET docs.
One-line start
Initialize once (e.g. in an autoload of your own, or your main scene's _ready):
func _ready() -> void:
Transable.init("tk_live_yourKeyHere", { "default_language": "de" })
# "default_language" is optional — omit it to detect the OS language.
Then translate text anywhere. The call is synchronous and never blocks: it returns the cached translation if present, otherwise the fallback while it fetches in the background (the next call returns the translation, and the translations_updated signal fires).
$Title.text = Transable.t("menu.play", "Play")
$Quit.text = Transable.t("menu.quit", "Quit")
Auto-translating labels
Drop-in node: change a Label's type to TransableLabel (it extends Label). It translates its own authored text and re-applies when translations arrive — no code needed. It only ever touches its own string, never user input from LineEdit/TextEdit.
Switching language
Transable.set_language("fr")
var lang := Transable.current_language() # note: a method, not a property
Transable.language_changed.connect(func(code): print("now in ", code))
The choice is persisted and restored on the next launch. Batch API for lists/menus you build in code:
var labels := await Transable.translate_batch(["New game", "Continue", "Options"], "de")
Safe mode & offline cache
Safe mode is on by default and runs before anything leaves the machine: emails, URLs, file paths, GUIDs, version numbers, pure numbers, log lines, and code-like identifiers (PascalCaseNames) are never sent — while single words like "Save" or "Play" translate normally. User input is never read or sent.
Every translation is cached on disk under user://transable/, per language, content-addressed (change one string, only that string is retranslated). The second launch is translated instantly — even fully offline.
It never crashes your game
One rule: no method here ever throws or blocks. Missing key, no network, HTTP 4xx/5xx, quota exhausted — the UI stays in the source language and translation retries quietly. Rate limits (429) honor Retry-After; an invalid key disables translation for the session with a single optional log line.
Questions or something broke? Contact us — include your Godot version and the add-on version. Other engines: Unreal Engine, or any language via the REST API.