A downloadable plugin

Buy Now$12.00 USD or more

Ship your game in one language and the layout is fine. Ship it in five and the buttons start pushing each other out of the row, a status line quietly loses half its sentence, and you hear about it from a player.

Loc Audit is a Godot 4 editor plugin that finds that damage before you ship.

Character counts don't find this

Other checkers estimate: this string is 40% longer in German, so it might not fit. That estimate is wrong in both directions, and here is why.

A Godot Control is never smaller than its own minimum size. A long translation does not spill out of a button — it makes the button bigger, and everything around it moves. Nothing is "overflowing" at any point, so looking for text that sticks out of a box finds nothing at all.

Loc Audit lays every scene out for real, in every locale, in an off-screen viewport, and measures what changed:

res://demo/main.tscn :: StartButton (Button) [de]
    grew 140x (100 -> 240) - MENU_START -> "Spiel beginnen und fortsetzen"
res://demo/main.tscn :: MenuRow/SettingsButton (Button) [de]
    grew 213x (70 -> 283) - MENU_SETTINGS -> "Einstellungen und Voreinstellungen"

The first locale in your list is the one you designed the screen in. Every other locale is compared against it, control by control.

And when a control is set to cut its text off instead of growing — clip_text, an overrun behaviour, or a LineEdit, which never grows — the words simply disappear. Those are measured against the width the control would actually need, icon and padding included:

res://demo/main.tscn :: StatusBar (Button) [de]
    text is cut off: needs 283px, has 140px - MSG_WELCOME -> "Willkommen zurueck bei dem Spiel!"

Three more things it checks

UntranslatedThe key is in your CSV, but this locale's column is empty
UnusedYour CSV carries keys nothing in the project asks for any more
UndefinedThe project asks for a key your CSV doesn't have
HardcodedA visible string assigned in GDScript that never went through tr()

Keys are found through tr(), atr(), atr_n() and both arguments of tr_n(), plus translatable properties set in scenes. Comment lines and string literals are not counted, and anything under addons/ is left alone. A node with auto translation switched off is measured by the text it really shows, not the translation it would otherwise get.

The scanner reads your files as text rather than parsing them, so it sees a key where the key is written as a literal in the call — tr("MENU_START"). One held in a constant, joined from parts, or passed through a helper of your own is not seen, and its CSV row is listed as Unused: check a key before deleting it. Hardcoded likewise finds a literal written straight onto a visible property, not one set through set_text() or a variable.

CSV and PO, both directions

Godot reads CSV. Translators use PO. Loc Audit converts both ways:

  • CSV → PO writes one locale out for a translator.
  • PO → CSV merges the file back. Your other locale columns, and the keys the translator never touched, keep their values; the file is rewritten rather than patched, so its layout comes out as the plugin writes it. A CSV it cannot read — and one with an unnamed header column or a repeated key, which a rewrite could not carry over — is left untouched rather than replaced.

Quotes, newlines, tabs and backslashes survive the round trip — with one exception that is Godot's own: its CSV importer reads a backslash followed by a b f n r t v or a quote as an escape, so a value like C:\new cannot live in a translation CSV at all. Loc Audit tells you which keys hit that. The CSV is written beside the original and swapped in only once it is written and checked, so an ordinary failure — a full disk, a file it cannot open — leaves you with the file you already had rather than half of a new one.

What's in the box

  • The plugin — one folder, addons/loc_audit/. No dependencies, no build step.
  • A demo project with one of each fault built in, so you can press all four buttons before pointing them at your own game.

The dock fills its own fields in from Project Settings → Localization, so the first button you press already has something to work on.

How it was built

Loc Audit was built with AI tools: both the plugin's code and the text on this page were written with AI assistance, directed and reviewed by a person. Every claim above is held to an automated test suite that runs on Godot 4.4 and 4.7, and the plugin is loaded and exercised in a real editor on both before release.

The licence

Use it in as many projects as you like, forever — commercial ones included, at work, and in a repository the people working on those projects can read. No per-project fee, no seat count, nothing to credit. The one thing you may not do is pass the plugin on to somebody who has not bought it. The full text is LICENSE.txt in the download.

What it does not do

  • It does not translate anything for you.
  • It does not edit your scenes. Every result is a report you act on.
  • Controls that scroll or page on purpose (TextEdit, CodeEdit, RichTextLabel, ItemList, Tree) are not measured for growth, and folders holding a .gdignore — or anything under addons/ — are not scanned or laid out.
  • A #, fuzzy entry in a PO, or one with an empty msgstr, is left out of the CSV, the way msgfmt leaves it out. A carriage return in a translation becomes a newline.
  • What is measured is the scene as the .tscn describes it. The check runs in the editor, and the editor only runs @tool scripts — so text an ordinary game script sets in _ready is not there to measure. A @tool script does run, and nodes it creates are reported by their runtime path.
  • A CSV has nowhere to keep translator comments, so a PO written from a CSV carries none. Gettext plurals keep the singular form only, and msgctxt is ignored.
  • Only text-format .tscn scenes are scanned and laid out. Binary .scn scenes, .tres resources and GDScript embedded inside a .tscn are not.
  • A hidden branch — a dialog that opens later, a tab that is not the current one — is not measured, because Godot does not lay it out.
  • The locales have to be registered under Project Settings → Localization. The dock warns about one nothing is loaded for.
  • The overflow report prints the first 400 findings of a run; the key report lists 40 per category and counts the rest.

Requirements

Checked on Godot 4.4 and 4.7 — the full test suite passes, and the plugin loads in the editor and reports the numbers above from inside it, on both. Scenes are measured with your project's theme and default font, not the editor's. The versions in between have not been tried.

Purchase

Buy Now$12.00 USD or more

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

loc_audit-0.1.0_2026-09-05_165218.zip 260 kB

Leave a comment

Log in with itch.io to leave a comment.