Command line & CI
The TADragoman commandlet runs the same checks as the panel without opening the editor UI. Use it in build scripts and CI to keep a localization report up to date and to fail the build when findings reach a given severity. It can also repair the gather setup, gather, import translator files, accept changed texts, machine translate, run the review pass, build the pseudo language, compile and export translator packages.
UnrealEditor-Cmd.exe Project.uproject -run=TADragoman [-Target=Game] [-Paths=/Game/UI+/Game/Data] [-NoAssets] [-Cultures=de,fr] [-IgnoreMissing] [-FailOn=Error|Warning|Info|Never] [-Report=Saved/Dragoman/Reports] [-Formats=html,json] [-NoReport] [-ReadOnly] [-RepairGather] [-Gather] [-Import=File.po|.csv|.xlsx|.xlf|.xliff [-Culture=de] [-DryRun]] [-AcceptStale=de] [-Machine=de] [-Review=de] [-Pseudo] [-Compile] [-Export=csv|po|xlsx|xliff|xliff2 [-Todo]]Example:
UnrealEditor-Cmd.exe "C:\Path\MyGame.uproject" -run=TADragoman -Cultures=de+fr -FailOn=Error -unattended -nop4 -nosplash -NullRHI-unattended, -nop4, -nosplash and -NullRHI are standard Unreal command line options for headless runs. They are not specific to Dragoman.
Parameters
Section titled “Parameters”Checks
Section titled “Checks”| Parameter | Default | Meaning |
|---|---|---|
-Target=<name> |
Target Name from the settings (Game) |
The localization target, for this run only. The settings are not changed. |
-Paths=/Game/A+/Game/B |
Asset Folders from the settings | Content folders for the asset checks. Separate folders with +, , or ;. Folders outside Asset Folders or inside Ignored Asset Folders are still skipped. |
-NoAssets |
Off | Skips the asset checks. Only the setup and translation checks run. |
-Cultures=de,fr |
All languages | Only findings of these languages are logged and can fail the run. Findings that are not about one language (setup, assets) always count. Also limits -Export. |
-IgnoreMissing |
Off | Missing translations don’t fail the run. Use it while translations are still coming in. |
-FailOn=<severity> |
Error |
Lowest severity that fails the run: Error, Warning, Info or Never (None also works). Case-insensitive. |
-ReadOnly |
Off | The scan doesn’t update the translation memory file. |
Reports
Section titled “Reports”| Parameter | Default | Meaning |
|---|---|---|
-Report=<folder> |
Reports in the Output Directory (Saved/Dragoman/Reports) |
Folder for the report. Relative paths start at the project folder. |
-Formats=html,json |
Both | Comma-separated list of html and json. |
-NoReport |
Off | Writes no report. The findings are still logged and still decide the exit code. |
Writing steps
Section titled “Writing steps”| Parameter | Meaning |
|---|---|
-RepairGather |
Fixes every fixable gather setup problem and lists the rest. |
-Gather |
Runs Unreal’s Gather Text for the target and prints its errors with hints. The current translations are saved to the memory first. A failed gather ends the run with exit code 2. |
-Import=<file> |
Imports a translated CSV, PO, Excel (.xlsx) or XLIFF (.xlf, .xliff) file, like Import translations in the panel without the review dialog. Rows with errors are skipped. See Translators. |
-Culture=<code> |
The language of the -Import file when the file itself doesn’t say. |
-DryRun |
With -Import: logs what the import would change and writes nothing. |
-AcceptStale=de,fr |
Keeps the current translations of every changed source text in these languages. |
-Machine=de,fr |
Machine translates the missing texts of these languages, and runs the review pass when the Review Pass setting asks for it. |
-Review=de,fr |
Runs the review pass on the machine translations already there, and prints the review queue. |
-Pseudo |
Builds and compiles the pseudo language. |
-Compile |
Compiles the .locres files of every language. With -Import, the imported language is also compiled right after the import. |
-Export=<format> |
Writes a translator package after the scan, one file per language (or per -Cultures language): csv, po, xlsx, xliff (XLIFF 1.2) or xliff2 (XLIFF 2.0). |
-Todo |
With -Export: only missing, changed and machine texts. |
The target, checks, rule levels, fonts and folders come from Project Settings > Plugins > ta Dragoman. See Settings.
What the commandlet does
Section titled “What the commandlet does”- Reads
-FailOnand-Target, and waits for the Asset Registry to find all assets. - Runs the writing steps, in this order: repair, gather, import, accept stale, machine translation, review, pseudo-localization, compile. They run first so the scan and the report show their result.
- Scans the target and the assets, like Scan in the panel. To keep memory use down in large projects, it collects garbage after every 200 assets.
- Logs one line per finding and one line per language.
- With
-Export: writes the translator package. - Writes the report, unless
-NoReportis given. - Logs a summary line and exits with an exit code.
-Gather runs the gather in its own process, like Gather in the panel. You can also gather with Unreal’s own commandlet before the check:
UnrealEditor-Cmd.exe Project.uproject -run=GatherText -config=Config/Localization/Game_Gather.iniConsole output
Section titled “Console output”All lines are logged in the LogTADragoman category:
LogTADragoman: Display: [Error] Placeholder | de | UI,Score_Label | Missing {Score}.LogTADragoman: Display: [Warning] Missing | fr | UI,Btn_Options | No translation.LogTADragoman: Display: [Warning] HardcodedText | - | /Game/UI/WBP_Pause.WBP_Pause | This text is not localizable (culture invariant), so it is never translated.LogTADragoman: Display: English (en): 412 texts, 412 translated, 0 missing, 0 changed, 0 machine, 0 error(s), 0 warning(s).LogTADragoman: Display: German (de): 412 texts, 398 translated, 6 missing, 4 changed, 4 machine, 1 error(s), 10 warning(s).LogTADragoman: Display: French (fr): 412 texts, 380 translated, 32 missing, 0 changed, 0 machine, 0 error(s), 32 warning(s).LogTADragoman: Display: Report written: C:/Path/MyGame/Saved/Dragoman/Reports/Dragoman_Game_20261012_100512.htmlLogTADragoman: Display: Report written: C:/Path/MyGame/Saved/Dragoman/Reports/Dragoman_Game_20261012_100512.jsonLogTADragoman: Display: ta Dragoman: target Game, 412 text(s), 86 asset(s) checked. 1 error(s), 43 warning(s), 4 info. 1 finding(s) at or above -FailOn=Error.- Each finding line has the format
[<Severity>] <Rule id> | <Language or -> | <Namespace,Key or asset path> | <Message>. See Checks for the rule ids. - Each language line counts its texts by status and its errors and warnings.
- The summary gives the target, the number of texts and checked assets, the findings per severity and how many findings are at or above
-FailOn.
The writing steps log their result:
LogTADragoman: Display: [Repair] Removed the missing additional manifest dependencies.LogTADragoman: Display: [Repair] Gathers from the Source folder.LogTADragoman: Display: Gather setup: 2 problem(s) fixed.LogTADragoman: Warning: [Setup] Assets in Content/Localization: 1 asset is in Content/Localization. Unreal never gathers that folder (it holds compiled translations), so their text is never translated.LogTADragoman: Display: [Gather] Text conflict from NSLOCTEXT macro for namespace 'UI' and key 'Title'. ...LogTADragoman: Display: Gather done in 14.2 s (log: C:/Path/MyGame/Saved/Dragoman/Logs/Gather_Game_2026-10-12_100512.log).LogTADragoman: Display: [Import dry run] line 14 changed UI,Btn_Start: Spiel startenLogTADragoman: Display: Import (dry run) Translations/Game_de.csv: 3 new, 1 changed, 405 same, 2 skipped.LogTADragoman: Display: Accepted 4 changed text(s) for de.LogTADragoman: Display: Machine translation fr: 31 written, 1 rejected, 31 reviewed.LogTADragoman: Display: Review pass de: 10 machine translation(s) reviewed.LogTADragoman: Display: [Queue] high 68 DragomanDemo,Quit Zurück zum Desktop | The review pass failed it: Too literalLogTADragoman: Display: Pseudo-localization en-XA written and compiled.LogTADragoman: Display: Compiled the target's .locres files.LogTADragoman: Display: Translator package written: C:/Path/MyGame/Saved/Dragoman/Packages/Game_2026-10-12_100514The gather prints its warnings and errors with [Gather], and the hints for known errors with [Gather hint]. The review queue lists one [Queue] line per machine translation: the level, the risk, the text, the translation and the main reason.
Exit codes
Section titled “Exit codes”| Code | Meaning |
|---|---|
0 |
Passed: no finding at or above -FailOn. With -FailOn=Never the run always passes unless there is an error below. |
1 |
At least one finding at or above -FailOn. |
2 |
The run itself failed: an unknown -FailOn or -Export value, a gather that failed or could not start, a failed import, machine translation that is not set up or failed (or a -Machine language that is not a translated language of the target), a review pass that failed, a failed pseudo build, compile or export, or a report that could not be written. |
Parameters the commandlet doesn’t know are ignored.
With the default -FailOn=Error, the run fails on broken placeholders, patterns and tags, missing glyphs, broken string table references, a missing target and a missing engine manifest. Missing and changed translations are warnings, so they only fail the run with -FailOn=Warning; add -IgnoreMissing to let missing ones pass while translators are still at work.
Reports
Section titled “Reports”The report is written to Saved/Dragoman/Reports (or the -Report folder) as Dragoman_<Target>_<date>_<time>.html and .json, with the scan time in UTC, for example Dragoman_Game_20261012_100512.html. Each run writes new files, so older reports are kept.
The HTML report is a single page you can open in any browser or archive as a build artifact. It follows the browser’s light or dark mode and has:
- a header with the project, the target and the scan time,
- a card per language with its coverage, its missing, changed and machine texts and the words still to translate, and cards counting errors, warnings and info,
- Findings: every finding except missing translations, with severity, check, language, text or asset and message, and a filter box,
- Texts: every text with its translation in each language, changed and machine translations tagged, and a filter box.
The JSON report has the whole scan (languages, texts with their translations and statuses, and findings) for your own tools and dashboards.
The panel writes the same report with Report > HTML report and Report > JSON. See Editor panel.
CI example
Section titled “CI example”This Windows batch step gathers the text, checks it, writes the report, keeps the exit code and passes it on to the build system. It expects to be placed next to MyGame.uproject; adjust the engine path and project name for your setup.
@echo offset UE_CMD="C:\Program Files\Epic Games\UE_5.8\Engine\Binaries\Win64\UnrealEditor-Cmd.exe"set PROJECT="%~dp0MyGame.uproject"
%UE_CMD% %PROJECT% -run=TADragoman -Gather -Report=Docs/LocReport -IgnoreMissing -FailOn=Error -unattended -nop4 -nosplash -NullRHIset RESULT=%ERRORLEVEL%
if %RESULT%==0 echo Dragoman: passedif %RESULT%==1 echo Dragoman: findings at or above -FailOn, see Docs\LocReportif %RESULT%==2 echo Dragoman: setup or step error, check the log
exit /b %RESULT%Archive the Docs/LocReport folder as a build artifact.
A common setup:
- On every change: gather and check with
-IgnoreMissing -FailOn=Error, so broken translations and broken string table references fail the build but texts waiting for translators don’t. - Before a release: check with
-FailOn=Warning, so every language must be complete and current. - When translators deliver:
-Import=<file> -DryRunto see what would change, then the same without-DryRunand with-Compile. Commit the changed archives,.locresfiles and the data folder. - On a new build machine or engine install:
-RepairGatheronce, so a missing engine manifest or a missing config doesn’t make the gather fail.
Running from PowerShell
Section titled “Running from PowerShell”Windows PowerShell 5.1 changes some arguments that start with - before Unreal sees them:
- An argument with a comma, such as
-Cultures=de,fror-Formats=html,json, makes PowerShell stop with the parse error “Missing argument in parameter list”. - An argument with a dot, such as
-Import=Translations/Game_de.csv, is split in two at the dot.
Put such arguments in quotes or in a variable, or separate lists with +:
$UE = "C:\Program Files\Epic Games\UE_5.8\Engine\Binaries\Win64\UnrealEditor-Cmd.exe"$Project = "C:\Path\MyGame.uproject"$Import = "-Import=Translations/Game_de.csv"
& $UE $Project -run=TADragoman $Import -DryRun -Cultures=de+fr -unattended -nop4 -nosplash -NullRHIexit $LASTEXITCODE