NEW · v1.0
LocKit icon

LocKit

Localize your game in three steps. Scan and check, export one spreadsheet for your translator, import it back. LocKit finds the texts the engine would never translate, fixes them for you and checks every translation before it goes into the game.

v1.0.0 UE 5.8 Windows · Mac · Linux Editor only: nothing ships in your game
Getting started
Step by step
More
// 01 / Overview

What LocKit does

Unreal Engine can translate your game, but the built in Localization Dashboard expects you to know about gather settings, manifests, archives and compiling. LocKit puts all of that behind three buttons in one panel:

1

Scan and check

Finds every text, hardcoded ones too, and checks fonts, translations and packaging. Most problems have a Fix automatically button.

2

Export for translators

One Excel file with every text, context and notes for the translator.

3

Import translations

Reads the file back, checks every line and compiles the translations into the game.

Every picture on this page comes from a real run of LocKit on a fresh Blank project with a small main menu: one Widget Blueprint with a title, four buttons and a coin counter. Nothing was drawn by hand.

// 02 / Setup

Install

You need: Unreal Engine 5.8 on Windows, Mac or Linux. LocKit works in Blueprint projects. The zip from adrenalinegames.pl contains the ready Windows build, so on Windows you do not need Visual Studio. On Mac or Linux the editor builds LocKit from the included source the first time you open the project (this needs Xcode on Mac or the Unreal Linux toolchain).
A

Bought on Fab

Open the Epic Games Launcher, go to your Fab library, find LocKit and install it to your Unreal Engine 5.8.

B

Bought on adrenalinegames.pl

  1. Download the zip from the link in your e-mail and extract it (right click, Extract All).
  2. Close Unreal Editor.
  3. Open your project folder (the one with the .uproject file). If there is no Plugins folder, create one.
  4. Copy the LocKit folder into Plugins, so you get YourProject/Plugins/LocKit/LocKit.uplugin.
  5. Open your project.
C

Make sure it is enabled

Open Edit › Plugins, search for LocKit and tick Enabled. If the editor asks for a restart, restart it.

// 03 / Find it

Open LocKit

Open the Tools menu at the top of the editor and click LocKit. You can also click the LocKit button LocKit button on the Level Editor toolbar.

The list of tools in the Tools menu, with LocKit

The list of tools in the Tools menu. LocKit sits between Localization Dashboard and Merge Actors.

The panel opens as a normal editor tab: dock it wherever you like.

// 04 / Five minutes

Quick start

  1. Open Tools › LocKit.
  2. Pick the language your texts are written in and the languages to translate into.
  3. Press 1 Scan and check. Look through the list, then press Fix automatically.
  4. Press 2 Export for translators and send the .xlsx file to your translator.
  5. When the file comes back, press 3 Import translations. The translations are compiled into the game.

Use Preview game in to see your UI in another language right in the editor. The sections below go through every step with pictures.

// 05 / Before step 1

Choose your languages

This is the panel the first time it opens in a new project. Nothing is scanned yet.

LocKit panel before the first scan

"Not scanned yet. Choose the languages above and press 1."

In our demo we write in English and translate into Polish, German and Japanese:

Polish, German and Japanese chosen

Three languages picked. LocKit remembers them in the project settings, so the whole team shares them.

// 06 / Step 1

1 Scan and check

Press 1 Scan and check. LocKit collects every text of your project and checks it. Here is the result for our demo menu:

Result of the first scan

First scan of the demo: 4 errors, 3 warnings, 4 of them can be fixed automatically.

How to read the list

What it found in the demo

FindingWhat it means
Packaged game will not contain some languages"Not in 'Localizations to Package': pl, de, ja. They work in the editor and silently disappear in the packaged build."
Packaged game lacks culture data for your languages"'Internationalization Support' is 'English'. Players could not switch to the missing languages and numbers and dates would be formatted wrong. LocKit will set it to 'All'."
Text is never translated (culture invariant)The Options button had Localize switched off. "The engine's gather skips this text, so every language shows the original. LocKit gives it a localization key."
Blueprint text is never translatedThe text Coins: {Coins} typed into a Format Text node in the widget's Event Graph. "This Text pin is not localizable (the 'localize' flag is off). LocKit gives it a localization key."
Polish (pl): 4 of 4 texts are not translated (same for German and Japanese)"Players will see the original text. Export the spreadsheet, send it to your translator and import it back."
Why this matters: the Options button and the coin counter would have stayed in English in every language, and the packaged game would not have contained Polish, German or Japanese at all. In the editor everything looks fine, which is why these problems usually show up only after release.

The progress bars under the buttons show how much of each language is translated.

Ignore

Ignore hides a finding in future scans, for example your studio name that must never be translated. Ignored findings are saved in the project settings, so your team does not see them either. Tick Fixed and ignored to see them again and click Unignore.

// 07 / One click

Fix automatically

Press Fix automatically (4). LocKit asks once, copies every file it is about to change to Saved/LocKit/Backups, applies all fixes, saves the changed assets and scans again. You can also fix one finding at a time with the blue button in its row.

In the demo: "Applied 4 fixes." The second scan:

After Fix automatically

No errors left. The texts went from 4 to 6: "Options" and "Coins: {Coins}" are now part of the translation. What is left is the actual translation work.

What each automatic fix does:

ButtonWhat LocKit does
Make translatableGives the text a localization key and saves the asset. For a text on a Blueprint node it also compiles and saves the Blueprint.
Give a new keyFor two different texts that share one key (often after duplicating a widget): gives one of them a new key, so both can be translated.
Exclude from translationFor placeholder texts such as "Text Block" that would otherwise be sent to your translator.
Add to packagingAdds your languages to Project Settings › Packaging › Localizations to Package.
Ship culture dataSets Project Settings › Packaging › Internationalization Support so the packaged game has the data your languages need.
Set up localizationCreates or configures the localization target, so your texts are collected.
Load in gameRegisters the translations so the game loads them.
CompileCompiles the translations, so the game can use them.

Findings without a blue button need a human decision: double click them to open the place, change it by hand, then scan again.

// 08 / Step 2

2 Export for translators

Press 2 Export for translators and choose where to save. The suggested name is YourProject_Translations.xlsx; .csv is also possible. LocKit confirms: "Exported 6 texts. Send the file to your translator, then use step 3." and offers to open the folder.

This is the file from our demo, as it was exported:

The exported spreadsheet

One row per text. Yellow cells still need a translation. Column E (Context) and the Namespace and Key columns are not shown in this picture.

The second tab, Read me, explains all of this to the translator, in these words:

1. Work in the 'Translations' tab. Type your translation into the column of your language (yellow cells still need a translation). 2. Do not edit the grey columns: Source, Context, Notes, Status, Namespace and Key. The game finds each text by Namespace and Key. 3. Keep placeholders in curly braces exactly as written, for example {0} or {PlayerName}. The game replaces them with values. 4. Keep rich text tags such as <Bold>word</> around the matching words. 5. Short labels like E, LMB or F1 are usually keys on the keyboard or gamepad: keep them as they are. 6. Status NEW means not translated yet. CHANGED means the original text changed: the Notes column shows the old text and the old translation. MACHINE means a translation in this row was made by machine translation (Notes says which languages). Check it, correct it if needed, then delete the word MACHINE from the Status cell. 7. Use Alt+Enter for a line break inside a cell. Save as .xlsx when you are done and send the file back. 8. Translations that are much longer than the original may not fit on screen. Prefer short wording for buttons and menus.
// 09 / Meanwhile

What the translator does

The translator opens the file in Excel, LibreOffice or Google Sheets, types the translations and sends the .xlsx back. Translators may reorder or delete columns: LocKit finds the columns by their header.

For the demo we filled the file ourselves. Polish is complete, Japanese is half done, and in German we made a typical mistake on purpose: the placeholder {Coins} was translated to {Münzen}.

The spreadsheet after translation

The file as it came back. Note row 2 in German: "Münzen: {Münzen}".

// 10 / Step 3

3 Import translations

Press 3 Import translations and pick the file. LocKit checks every line before anything goes into the game, then compiles the translations. The summary for our demo:

Imported 14 translations for pl, de, ja. 0 reused for identical texts, 0 unchanged. 1 rejected because of broken placeholders, 0 skipped because the original changed after export, 0 rows no longer exist in the project. Translations compiled: yes.
Panel after the import

Polish 100%, German 83% (5 of 6), Japanese 50% (3 of 6). The broken German line was not imported, and the list says why.

The German coin counter was refused for two reasons, both shown in the list: "Translation is missing {Coins}, so the value would not show in game." and "Translation uses {Münzen}, which the source does not have. Placeholders must not be translated." Without this check the German game would show the words "Münzen: {Münzen}" instead of the number of coins.

Other things the import takes care of:

Fix the broken line in the spreadsheet (or ask your translator to), then import the file again.

// 11 / Check your UI

See your game in another language

Pick a language in Preview game in (top right of the panel) and the game texts in the editor switch to it, for example in the UMG designer. Off (your texts as written) switches back. The preview turns off by itself when you close the panel.

Our demo menu after the import, drawn by the editor in each language:

Menu in English
English (as written)
Menu in Polish
Polish: complete
Menu in German
German: coin line refused, still English
Menu in Japanese
Japanese: half translated

Untranslated texts fall back to the original, which is exactly what players would see. The preview is the quickest way to spot a button text that is too long for its button.

// 12 / Day to day

When your texts change

Keep working as usual. When you add or change texts, run 1 Scan and check again, then export. The new file contains everything, and the translator sees:

Unreal drops a translation as soon as its original text changes. LocKit keeps every translation your project ever had (in Saved/LocKit/History) and shows the previous one to the translator, however many scans ran in between.

// 13 / Optional

Machine translation (DeepL)

No translator yet? Machine translate (DeepL) fills every untranslated text with DeepL, using your own DeepL API account. This is optional: everything else in LocKit works without it.

  1. Create a DeepL API account on deepl.com and copy your API key. Free keys end with :fx; LocKit picks the right DeepL server from the key.
  2. Open Project Settings › Plugins › LocKit (personal) and paste the key into DeepL API Key. If you press the DeepL button without a key, LocKit offers to open this page for you.
  3. Press Machine translate (DeepL). Before anything is sent, LocKit tells you how many texts and characters will go to DeepL and asks you to confirm.
Personal LocKit settings with the DeepL API Key field

Project Settings › Plugins › LocKit (personal). The key is stored on your computer only, never in the project's shared config, so it does not end up in version control.

// 14 / Reference

Everything the scan checks

The demo only needed a few of these. A real project usually hits more.

Texts that are never translated

Problems that lose translations

Translations

Fonts

Project and packaging setup

Save report writes the current list to an .xlsx or .csv file, for example to share it with your team.

// 15 / Options

Settings

The gear button at the top right of the panel opens Project Settings › Plugins › LocKit. These settings are saved with the project, so your whole team uses the same ones. The defaults are right for most projects.

LocKit project settings

The settings of the demo project (with Polish, German and Japanese chosen).

SettingWhat it does
Target NameName of the localization target LocKit manages. "Game" is what the engine expects for game text. Leave it.
Native CultureThe language your texts are written in, for example "en". Same as "Your texts are written in" in the panel.
Target CulturesThe languages you want to ship. Same as "Translate into" in the panel.
Include FoldersContent folders to scan. Default is your whole project content (/Game).
Exclude FoldersContent folders to skip, for example a marketplace pack you do not want to translate.
Scan LevelsAlso scan levels. Off by default because it is slower on big projects. Turn it on if you place texts in maps, for example Text Render actors.
Scan Source CodeLeave it on. It only matters if your project has code.
Include Project PluginsAlso check plugins inside your project's Plugins folder.
Check FontsCheck that your fonts contain every character of every language.
Long Translation RatioReport translations longer than the original by this factor (default 1.6), since they may not fit the UI.
Gather on ScanCollect all texts on every scan, so the translation checks see your latest texts.
Reuse Identical TranslationsWhen a text is translated once, use that translation for identical untranslated texts on import.
Reject Broken PlaceholdersSkip imported translations whose {placeholders} do not match the original, instead of shipping broken text.
Backup Before FixCopy every file to Saved/LocKit/Backups before LocKit changes it.
Advanced › Ignored FindingsThe findings your team decided to ignore.

Personal settings (only on your computer) are in LocKit (personal): the DeepL API key.

// 16 / Peace of mind

Backups and safety

Tip: if you use version control, commit before your first Fix automatically. Then every change LocKit made is easy to see.
// 17 / Help

Questions and limits

Do I need to know the Localization Dashboard?

No. LocKit creates and configures everything the Dashboard would. If you already set up a target there by hand, LocKit keeps your gather settings and only adds your languages.

My translator sent an .xls file.

Old .xls files are not supported. Open the file and save it as .xlsx (Excel Workbook). .csv files in UTF-8 work too, separated by commas, semicolons or tabs.

A text must never be translated (studio name, game title).

Select the finding and press Ignore. Your team will not see it either.

LocKit reports "Hardcoded string converted to Text" but has no fix button.

That is a String typed into a Blueprint graph and turned into Text with "To Text (String)". LocKit reports it but does not rewrite the graph. Double click the finding to open the node, then replace the String and the conversion with a Text value (a Text literal or a Text variable).

A text in a Blueprint is translated in the spreadsheet but not in the game.

The engine collects Blueprint graph texts from compiled Blueprints, so texts on nodes that never run (not connected to anything) are not translated. Connect the node or remove it.

Texts placed in my levels are missing.

Levels are not scanned by default. Turn on Scan Levels in the settings.

The summary says "Gather did not run, translation numbers may be old."

The text gather did not run during this scan, so the translation progress comes from the previous one. Check that Gather on Scan is on and scan again. If gathering fails, the Output Log (Window › Output Log) says why.

Players see empty boxes instead of letters.

Your font does not contain those characters. LocKit's font check lists the font and the missing characters per language. Add a font that has them, for example as a sub font for that language in your composite font, then scan again.

Which engine versions and systems are supported?

Unreal Engine 5.8 on Windows, Mac and Linux. LocKit was tested on Windows.

Does LocKit add anything to my game?

No. It is an editor plugin. Your game only contains the translations, exactly as if you had made them with the Localization Dashboard.

// 18 / Contact

Support

E-mail

Write to support@adrenalinegames.pl. Please add your engine version and, if you can, a screenshot of the LocKit panel.

Discord

Ask on our Discord server.