A downloadable tool for Windows

Buy Now$14.99 USD or more

Three hundred buttons, labels and tooltips were typed straight into the widgets. Now the game is being localized and the plan says String Tables. Unreal links one text at a time to a table entry (the flag beside a text field in the Details panel), and every translation you already paid for is orphaned the moment you do it by hand.

Why by hand loses the translations. A culture archive keeps a translation only while its namespace and key still match. A text moved into a String Table takes the table's namespace and a new key, so the next gather files it as a new, untranslated text and deletes the old entry once nothing gathers it (UE 5.8, GenerateGatherArchiveCommandlet.cpp, read from the engine source).

What it does

Finds the inline text. Widget Blueprint widgets (text, tooltips, hint text), Blueprint class defaults and component templates, Blueprint graph pin defaults (Print Text, Format Text, Make Literal Text, any function input), Data Table rows and Data Assets, including nested structs, arrays and Map values. It opens only the packages the asset registry flags as carrying localizable text.

Proposes one entry per distinct text, keys named by a rule you choose (WBP_MainMenu.PlayLabel.Text, a slug of the text, or the key it already has), and writes the Extraction Sheet before anything changes. Identical texts share one entry, except when your archives already translate them differently: "Close" on a door and "Close" in a menu stay two entries when the German already says "Tür schließen" for one and "Schließen" for the other.

Applies it, and proves it. -Apply creates the entries, re-links every text, checks each one still reads exactly as before, recompiles each touched Blueprint once and saves. Format Text nodes keep their argument pins.

Carries every translation to the table's namespace and the new key in each culture archive, so the next gather keeps it.

Refuses what would hurt. A table placed under Content/Localization/, which the Localization Dashboard's asset gather excludes, is refused before anything is written. Culture-invariant, already-linked, generated and inherited texts are kept out and named, each with its reason.

Undo and CI. Every file is backed up first; -Undo=<run id> restores the run and refuses to overwrite a later change unless you add -Force. -Verify exits 2 while inline text remains, and refuses a -Paths folder with no assets, so a typo cannot pass the check.

On our test project

Three Widget Blueprints, an Actor Blueprint (defaults, a component, Print Text, Format Text and Make Literal Text pins), a Data Table and a Data Asset, gathered and translated into French and German with Epic's own GatherText: 30 inline texts in 6 assets became 28 table entries (2 duplicates folded, 6 texts kept out by name). -Apply linked 30 of 30, all reading the same, recompiled 4 of 4 Blueprints clean and carried 47 translations. After the gather ran again, 47 of 47 were still there, under the new keys.

Use

UnrealEditor-Cmd.exe MyGame.uproject -run=StringTableExtractor -Paths=/Game/UI -Table=/Game/Text/ST_UI
UnrealEditor-Cmd.exe MyGame.uproject -run=StringTableExtractor -Paths=/Game/UI -Table=/Game/Text/ST_UI -Apply
UnrealEditor-Cmd.exe MyGame.uproject -run=StringTableExtractor -Undo=20261024-101500
UnrealEditor-Cmd.exe MyGame.uproject -run=StringTableExtractor -Paths=/Game/UI -Verify

Output per run: the Extraction Sheet (HTML), JSON, and the entries as Key,SourceString CSV in the format the String Table editor imports. Exit codes: 0 clean or all linked, 2 inline text remains, 4 bad arguments or a refused table placement, 5 finished but not clean (named in the sheet), 6 a file could not be written, 7 -Undo refused.

What it covers

Not covered by this version: level actors (maps are counted and skipped), Set elements, Map keys and Composite Data Table rows (each named in the sheet, never rewritten). An editor plugin: nothing ships in your game. Verified on Unreal Engine 5.8, Windows; ships as source. Documentation: the full guide.

Tested on the shipped build: 11 automation tests in the editor, 29 documented behaviours exercised, a break-it pass of 18 cases (bad arguments, a mistyped folder, a table in the gather's exclusion, a read-only asset, a second apply, an undo over a later change), and a fresh install into a project that did not exist.

From the same studio: UMG Style Migrator and UMG Binding Surgeon, for the same widgets.

AI disclosure: code and store images were made with AI assistance.

Purchase

Buy Now$14.99 USD or more

In order to download this tool you must purchase it at or above the minimum price of $14.99 USD. You will get access to the following files:

string-table-extractor-windows.zip 53 kB
Version 1.0.0

Development log

Leave a comment

Log in with itch.io to leave a comment.