Workflow
Workflow
High-level flow
- Obtain the source localization files from a game you are allowed to inspect for modding or personal translation use.
- Inspect or export the localization with your chosen tools.
- Copy the extracted source files into
source/. - Initialize the workspace from the source
.locres. - Keep the extracted
Game.jsoninsource/for future patch comparisons. - Translate the
targettext while preserving keys and placeholders. - Rebuild a translated
.locres. - Generate
.locmeta. - Package the result into
.pak. - Convert or package to
.utocand.ucasif the target game uses IO Store. - Test in-game.
- Repeat for playtest fixes and terminology cleanup.
Suggested working files
working/<target>.<culture>.jsonworking/<target>.<culture>.csvworking/<target>.en.csv
Example:
working/Game.bg.jsonworking/Game.bg.csvworking/Game.en.csv
Common extracted source example:
Output/.../en/Game.locresOutput/.../en/Game.json
Common local working convention inside UELocKit:
source/Game.en.locressource/Game.en.json
Preferred editing file:
- edit
working/<target>.<culture>.json
Compatibility file:
working/<target>.<culture>.csvexists for import/export compatibility, not because it is the preferred editing format
Choosing the output culture
The user chooses the culture through two values:
CultureTagUsed in working file names and usually in the localization folder nameCultureCodeUsed when generating.locmeta
Examples:
bgandbg-BGplandpl-PLthandth-TH
In the current toolkit, the easiest place to set them is:
config/UELocKit.config.psd1
Important:
LocalizationTargetNameis usually the localization file base name, not the title of the game- for many games it stays
Game - changing it incorrectly will make the scripts look for the wrong files
Editing rules
- Do not change localization keys unless you know exactly why.
- Do not change source text unless you are intentionally repairing your own working copy.
- Preserve placeholders such as
[InventoryActionPrimary]. - Preserve meaningful line breaks.
- Prefer JSON for multiline text and heavy narrative entries.
Conversion commands
JSON to CSV:
python .\tools\translation_io.py json-to-csv `
--input .\working\Game.bg.json `
--output .\working\Game.bg.csv
CSV to JSON:
python .\tools\translation_io.py csv-to-json `
--input .\working\Game.bg.csv `
--output .\working\Game.bg.json
Workspace initialization
If the user starts only with a source .locres, UELocKit can generate the initial working files.
Example:
python .\tools\init_workspace.py `
--workspace-root . `
--source-locres .\source\Game.en.locres `
--localization-target Game `
--culture-tag bg
This generates:
working/Game.en.csvworking/Game.bg.csvworking/Game.bg.json
That is the missing bootstrap step before normal translation work starts.
Continuing from an existing translation
If the user already has a translation, the goal is different:
- do not start from an empty
target - instead, convert or refresh the existing translation into the row-based working format
- continue editing there
This is the correct path for:
- an existing translated
Game.json - an existing translated
.locres - a game-specific helper that imports another translation format into the standard working JSON
In other words:
init_workspaceis for a new translation- a refresh or import step is for an existing translation
Patch update checks
When the game updates, extract the new source Game.json again and copy it into source/.
Then compare it against your current working translation file:
python .\tools\check_source_update.py `
--working .\working\Game.bg.json `
--source-json .\source\Game.en.json
That gives you a quick report for:
- added keys
- removed keys
- changed source values
This is the safest way to tell whether a new patch actually changed the localizable strings before you rebuild or continue translating.
Build commands
Build .locres:
& .\build-locres.ps1 `
-ConfigPath .\config\UELocKit.config.psd1 `
-TranslationFormat json
Build standalone package:
& .\tools\build-standalone-locmod.ps1 `
-ConfigPath .\config\UELocKit.config.psd1 `
-TranslationFormat json
Build without automatic deployment:
& .\tools\build-standalone-locmod.ps1 `
-ConfigPath .\config\UELocKit.config.psd1 `
-TranslationFormat json `
-DeployToGame $false