Localization Checker: Quick Start
On this page
- Requirements
- How it works
- Try it on the Demo
- 1. Open the Demo
- 2. Open the window
- 3. Add the table
- 4. Choose what to check, then scan
- 5. Read the overview
- 6. Find the problem in the scene
- 7. Share the results
- 8. Patrol the Demo in Play mode
- On your own project
- Tell the checker where your words are
- Variable samples
- Reading “source → translation”
- The patrol in Play mode
- Set it up
- The patrol bar
- Read the pages
- Superseded by the patrol
- Phones in the Device Simulator
- When it did not work
- Support
Localization Checker helps you find UI problems caused by translations: overflow, overlapping text, missing font characters, damaged placeholders or rich text tags, and untranslated strings. It checks uGUI text components (TextMeshPro and legacy UI Text) at your chosen languages and resolutions. In Play mode, its optional patrol checks the screens your game displays.
Allow about fifteen minutes for the included Demo. This guide then explains how to connect your own project and use the patrol. For details, see manual part 1 (Manual-Checks.md) for checks and results, and part 2 (Manual-Safety.md) for project safety and limitations.
Requirements
- Unity 2022.3 LTS or later, including Unity 6, or Tuanjie Engine 2022.3.
- TextMeshPro, legacy UI Text, or both. For TextMeshPro, import TMP Essential Resources through Window > TextMeshPro > Import TMP Essential Resources.
- UI Toolkit (
UIDocument) support requires Unity 6. - Optional integrations: Unity Localization 1.5.2 or later, below 2.0, and I2 Localization. The checker reads both automatically. CSV, Excel, JSON, XLIFF and PO translation tables work with or without these integrations.
The checker runs only in the Unity Editor and adds nothing to player builds. Scans measure UI copies in a hidden preview scene without editing or saving the original scenes, prefabs or assets. Scene preview temporarily changes the selected component for display, then restores it. Unity loading callbacks and unused-asset unloading have their own limitations; see manual part 2.
How it works
Edit mode: scan
① Add translation sources: CSV / Excel / JSON / XLIFF / PO
Unity Localization and I2 sources are detected automatically
② Choose languages to check and their Source language
③ Choose a scope: open scenes, selected objects, one prefab, or a prefab folder
④ Click ▶ Scan
Copy the UI, apply translations, and measure each language and resolution
├─ Overview: click an issue count to filter the results
└─ Issues: select a row to investigate
├─ preview it in the Scene view or compare languages side by side
├─ export HTML / CSV reports
└─ fix the cause and scan again to compare results
Play mode: patrol (optional)
⑤ Navigate to a screen, focus Localization Checker, and press F8
The patrol switches the game's language, reads the screen, and captures it
An optional game-provided pseudo-language runs last
└─ Leave Play mode and review completed pages alongside scan results
Matching patrol observations can supersede eligible scan issues
Try it on the Demo
1. Open the Demo
Open Assets/Fastzhuzhu/LocalizationChecker/Demo/Scenes/MainMenu.unity. Drag QuestPanel.unity, Settings.unity and Inventory.unity into the Hierarchy to load all four scenes. MainMenu and QuestPanel use TextMeshPro; Settings uses legacy UI Text; Inventory uses UI Toolkit and is checked only on Unity 6.
The text components contain keys such as menu.start. Demo/Data/DemoStrings.csv provides their values in sixteen languages. English is the source language. The German (de) and Japanese (ja) translations contain deliberate examples of every issue category.
2. Open the window
Choose Window > ★ Localization Checker > Open Localization Checker.
Top band: logo · Localization Checker · version · author's signature
Toolbar: ▶ Scan · setup status · ⚙ Settings · window language · ⋮ menu
Tabs: Overview · Issues · Code & data
Overview: Before you scan setup list, followed by results
Footer: summary and messages
The window starts in English; click the window language control to switch to Chinese. In Overview, the Before you scan list contains Translation sources, Languages to check, Source language, Scope, Scan, and Patrols (optional). The blue row indicates the next setup action. Open ⚙ Settings for Key bindings, Measuring, Ignore list and Patrols.
3. Add the table
Expand Translation sources. Candidate files appear under The project holds N file(s) that look like translation tables (not added yet). Double-click DemoStrings.csv, or select it and click Add selected. The checker maps its header to the key column and sixteen language columns. Enable Text boxes hold this table’s keys.
The status should show Keys read: 40 · en, zh-Hans, …. If it shows Not read, read the reason beside it. To add a file that is not suggested, click Add a file, then Choose….
4. Choose what to check, then scan
- Languages to check: select
deandja. Use these selects all fifteen target languages and takes longer to scan. - Source language: choose
en. - Scope: choose Open scenes.
- Resolutions, in the Scan row: keep
1920x1080. Add a preset… offers phone, Steam Deck and other sizes.
Click ▶ Scan and follow the progress bar. Cancel stops the scan. If a required setting is missing, the checker opens the relevant setup row instead of starting.
Open scenes reads the current loaded scene objects, including unsaved edits, provided each scene has been saved at least once. Prefab scopes read saved assets and exclude unsaved Prefab Mode edits.
5. Read the overview
The footer counts Critical, Warning and Info issues. Critical issues deserve prompt review because they may affect players; the severity alone does not prove a player-visible defect.
The results matrix has one row per language and five columns: Overflow, Missing glyphs, Placeholders, Rich text tags and Translation. A cell’s color reflects its highest severity. A dash means that check did not run; hover over it for the reason. Click a count to list the matching issues.
Examples in the Demo include:
- de: “Spiel beenden” overflows the Quit button; the subtitle is ellipsized;
quest.greetingchanges{playerName};quest.rewardleaves a color tag open; andsettings.resetcontains the garbled valuezurücksetzen. - ja: Lato lacks Japanese characters, so Japanese text reports missing glyphs.
settings.fullscreenstill containsTODO. - (no language): “BETA” and the version number are hard-coded.
Below the matrix, review hotspots by Canvas or prefab, Language coverage for each font, and The scan’s missing characters by font. For a TextMeshPro font, Copy for Font Asset Creator copies the missing characters for use in Font Asset Creator.
6. Find the problem in the scene
In Issues, select the German Text overflows row for MainMenu/QuitButton/Label.
- Unity selects the object. The Scene view temporarily displays and outlines its German translation. Selecting another row or leaving the checker window restores the original value.
- Detail includes Fixes: does not fit even at font size 27; does not fit wrapped. These are trials on a copy. This example needs a shorter translation or a wider button.
- Side by side displays the Canvas in en, de and ja, with the affected text outlined in red.
- Heat map outlines listed issues in the Scene view, excluding issues shown only for reference. A colored square in the classic Hierarchy marks objects with counted issues.
After fixing an issue, click ▶ Scan again. Since the last scan reports New and No longer reported issues. Review the changes: an issue may disappear because it was ignored or no longer measured.
7. Share the results
Open Export at the right of the Rows listed line.
- Export HTML… creates one offline browser report with filters and search. In the report, Select in Unity copies a selection command. Switch back to Unity with Localization Checker open to select the object.
- Export CSV… exports the listed issues as UTF-8 CSV. To export a subset, first click a count in the overview, such as German overflow issues.
In the side-by-side window, Export images… saves PNG images. Save reports outside Assets and Packages; the checker refuses export locations that Unity would import.
8. Patrol the Demo in Play mode
- In Patrols (optional), click Use this to select the Demo’s
DemoLocalizationscript as the language switch. If Unity Localization already provides one of the selected languages, this suggestion is absent. In that case, open ⚙ Settings › Patrols and selectDemo/Scripts/DemoLocalization.csas Script,SetLanguageas Switches the language, andGetLanguageas Tells the language shown. - Under ⚙ Settings › Patrols, enter
qps-plocin Pseudo-language. Keep[and]as the brackets. The Demo implements this language with accented, bracketed English strings, such as[Šţáŕţ]. - Set the Game view to 1920x1080. Dock Localization Checker beside the Game view so both remain visible.
- Enter Play mode. On the main menu, click Check page in all languages (F8). The patrol switches to de, ja and the pseudo-language, reads and captures each version, then restores the previous language.
- Navigate through Start, Inventory and Settings. On each screen, click the Localization Checker window to focus it, then press F8. Each completed page adds an Overview block with one row per language and Open screenshot. The Pseudo row reports runtime localization problems under Translation. On the quest page, the line above Accept joins “Accept” and “Daily Quest”, producing Strings joined at run time; German displays “Annehmen Tägliche Quest?”, with the verb in the wrong position. “BETA”, the version number and the language dropdown’s code produce Hard-coded at run time. On Unity 6, the inventory’s weight and build number do too.
- Leave Play mode. With domain reload enabled, entering Play mode cleared the scan results, so the window automatically scans again after you exit. The German Quit button overflow now begins superseded by the patrol’s page, because the running game also showed that issue. Completed patrol pages survive leaving Play mode; a page still being checked is discarded.
On your own project
Tell the checker where your words are
| Localization source | Setup |
|---|---|
| Unity Localization | Automatic. LocalizeStringEvent and GameObjectLocalizer bindings identify keys. The scan also applies supported per-language fonts and property changes from GameObjectLocalizer. |
| I2 Localization | Automatic. Localize components identify their terms. |
| CSV, Excel, JSON, XLIFF or PO | Add files under Translation files (CSV, Excel, JSON, XLIFF, PO). Enable Text boxes hold this table’s keys if the components contain keys. |
| Your own localization component | Under ⚙ Settings › Key bindings › Declared key fields, add the script and its string field containing the key. |
| Other cases | Select an issue for the text component and click Map a key…. |
Set Source language to the language in which the strings were originally written. The checker compares translations with that language and uses its values to match components that contain source text rather than keys.
Variable samples
Runtime placeholder values can be much longer than their names. Under Measuring, open Variable samples and provide the longest value the game may display, such as {playerName} = Commander Aurelia Vanthorne. The scan measures overflow with that value substituted.
Detail says measured with variable samples when samples were used, or holds placeholders not replaced by a sample, measured as written when samples are missing. Samples are especially useful for fixed-size buttons and nameplates.
Reading “source → translation”
For placeholder and tag issues, Detail shows the relevant source fragment, an arrow, and the translation fragment. A dash means that side has no fragment.
{playerName} → {spielerName}: the translation renamed the placeholder.</color> → <color=#FFD54F>: the translation leaves a color tag open.
The note a script references the component that drives it means code may change the displayed value at runtime. Use the patrol to check the corresponding game screen.
The patrol in Play mode
The patrol checks the running game’s UI, including strings assigned and UI created by code. It asks your localization system to switch languages, then reads the layout the game produced. It checks overflow and overlaps, and identifies the fonts used for TextMeshPro characters. It does not assign translations directly to text components.
Check page in all languages (F8)
↓ start the patrol if necessary
For each selected language:
switch through the game's localization system
wait the configured frames (120 by default)
also wait for Unity Localization's displayed strings
read the visible text components and capture the Game view
↓
Read the optional game-provided pseudo-language last, checking brackets only
↓
Restore the previous language
↓
Keep the completed page for this editor session
Show its Overview block and Issues rows
Set it up
- Language switch. Unity Localization and I2 work automatically. For a custom system, open ⚙ Settings › Patrols › Language switch for patrols (the project’s own localization system). Select the Script, a
static void Method(string code)under Switches the language, and astatic string Method()under Tells the language shown. The latter must return the current language code. Your code needs no reference to the checker; these methods are invoked by name only in Play mode. - Pseudo-language (optional). Your game must provide a language that brackets each localized string. The patrol uses those brackets to detect strings joined or written outside localization. Unity Localization uses the project’s Pseudo-Locale automatically. For I2 or a custom system, enter its code and brackets under ⚙ Settings › Patrols › Pseudo-language. Never use a real language code here. This is separate from scan Pseudo-localization, which generates estimates on UI copies.
- The Game view. Choose one of the scan Resolutions, such as
1920x1080, if patrol observations should supersede eligible scan overflow issues. Add the Game view’s size adds the current size. Keep the Game view and Localization Checker in separate tab groups so both can draw; a hidden Game view produces no screenshot.
The patrol bar
In Play mode, the patrol bar appears below the toolbar.
- Check page in all languages (F8) checks the current screen. Page names it, initially suggesting “scene: Canvas” or a UI Toolkit document. Switch identifies the localization system. Stop patrol ends the patrol.
- Outlines draws colored frames around affected text components, with a legend in the bar. Freeze game time sets
Time.timeScaleto 0 while you inspect the screen. Use variable samples asks the game to display your samples. - Expand Switch languages by hand for Previous language and Next language, also available through the arrow keys.
F8 and the arrow keys work only while Localization Checker has focus. After interacting with the game, click the checker window before using them. If a page check cannot start, the bar explains why.
Read the pages
Each completed page appears in Overview as Patrol page “Title: MainCanvas” · checked …, with one row per language and Open screenshot. Placeholders and Rich text tags show a dash because the patrol does not read translation tables. Translation also shows a dash except in the Pseudo row. In Issues, patrol rows include their page name; Side by side displays that page’s language screenshots.
Completed pages remain for the current editor session, including across domain reloads and after leaving Play mode. They are not saved as project assets. Stopping a check or leaving Play mode before it finishes discards only the unfinished page. Clear patrol results in the ⋮ menu removes the saved session pages and their screenshots.
Superseded by the patrol
A completed page can supersede scan overflow and missing-glyph issues for the same component and language. Superseded issues remain listed for reference, with Detail beginning superseded by the patrol’s page.
Overflow issues require an exact match of resolution and displayed string. Manual part 1 explains the full matching rules. With domain reload enabled, the window automatically rescans after Play mode so you can compare the retained pages with new scan results.
Phones in the Device Simulator
Switch the Game view to Simulator, select a device, enter Play mode and check the page. Measurements and screenshots use the simulated screen’s pixel dimensions. After rotating the device, use a different Page name, such as Title (landscape), to keep both orientations.
When it did not work
| Symptom | Cause and action |
|---|---|
| Not captured: most likely the Game view did not draw | The Game view was hidden behind another tab. Dock Localization Checker beside it, then check again. |
| No scan issues are superseded | Scan again after Play mode. Confirm that the Game view size matches a scan Resolutions entry and that the game displayed exactly the string measured by the scan. |
| A screenshot shows the previous language | The UI updated after the wait expired. Increase Page check: frames to wait after each switch, for example to 600, and check again. |
| It replaced the page of the same name. | The entered name matched a completed page. Use distinct names to retain both. |
| The pseudo-language … was not checked | Read the accompanying reason. Unity Localization’s Pseudo-Locale must end with its Encapsulator. A manually entered code must identify a pseudo-language implemented by your game’s language switch. |
Support
These contact details also appear under Window > ★ Localization Checker > About.
- Email: support@localizationchecker.com
- Online support: https://localizationchecker.com
- Online documentation: https://localizationchecker.com/docs/