Skip to content

Localization Audit Feature#39

Merged
zompi2 merged 9 commits into
zompi2:experimentsfrom
Crezetique:feature/localization-audit
May 19, 2026
Merged

Localization Audit Feature#39
zompi2 merged 9 commits into
zompi2:experimentsfrom
Crezetique:feature/localization-audit

Conversation

@Crezetique
Copy link
Copy Markdown
Collaborator

@Crezetique Crezetique commented May 19, 2026

Problem

  • Tedious to find existing FText parameters that require localization.
  • Tedious to vet whether localizations have been set up correctly. Especially when localization key organization structure requires a change, breaking existing localizations.
  • Existing solution to have UE's Localization Dash to search all localizable FText is less than ideal.

These problems are further exasterbated by having localization done later in a project development cycle.

Solution

  • A localization auditing tool with the ability to vet multiple assets at the same time, returning a detailed report on FText parameters found within an asset.

How To Use

Triggering a Localization Audit

  • Within Content Browser / Drawer
    • Localization Audit option can be found within an asset Context Menu in the Content Browser.
    • You can highlight multiple files to be audited at the same time.
  • Within Editor Asset Window
    • Localization Audit option can be found within an editor window main menu, under Tools.
  • Both above options can be triggered by configurable hotkey, Ctrl + Alt + L by default.
image image

Localization Audit Widget

  • Issue Reporting - The Localization Audit tests each FText entry for an assortment of problems:
    • None
    • Empty Value
      • No FText value set. This may be intentional for state or function processing purposes, recommends toggling localize bool.
    • String Table Missing Key
      • String Table is set, but an invalid key is selected.
    • Not Yet Localized
      • Unable to fetch a localization string. (Value and Key do not match)
    • Invalid Localization
      • The localization key does not return a valid localization string.
  • Reaudit Assets allows you to quickly iterate fixes on the current list of asset(s).
  • Reimport CSV will reimport localization CSVs defined within the ELT Tool Widget.
  • Filter options
    • Hide Valid Localization: Hide FText entries that passed the audit
    • Hide Empty: Hide FText entries that are empty.
  • Sort by clicking on table header row.
  • Quick Action based on Context Type
    • Class Variable: Open Asset
    • Function Variable: Jump to Function
    • Node Parameter: Jump to Node
    • Widget Component: Open File
  • Copy to Clipboard by clicking on each table cell. Useful for copying Values to input on a separate localization sheet.
image

Compatibility

  • Tested on UE 5.7
  • Compilation Build tests not yet done

Simplified Changelog

  • Implemented Audit Main Class (ELTEditorAuditor)
  • Implemented Audit Widget (ELTEditorAuditWidget)
  • Implemented Audit Types (ELTEditorAuditTypes)
  • Updated ELTEditorCommands to include Audit commands.
  • Updated EasyLocalizationToolEditorModule to include Audit menu bar and context menu functionality.
  • Updated ELTEditor, RefreshAvailableLangs() was updated to support both ELT Tool and Audit Widgets.

Considerations

  • Note that the audit function is attached to all assets with no filtering, regardless of whether they inherently have FText in them. The scope to handle any filtering would be unnecessary, and custom classes needs to be handled.
  • In my changes, I reference the existing widget as "Tool Widget" versus the new "Audit Widget". The Tool Widget is currently referred to as "Editor Widget" in most files. A light refactor to update comments to change naming conventions might be warranted.
  • I'm a bit confused with the implementation of creation/deletion processes in ELTEditor, from what I'm guessing this was due to the deprecated use of UMG which required world context, and that needs to be managed on level change?

Crezetique and others added 8 commits May 16, 2026 02:42
…lder versions of UE.

- Replaced FillContentWidth() with .FillWidth(1.0f), as the former is not supported in older versions.
- Nested various content in SBox as SVerticalBox and SHorizontalBox does not support .MinHeight() in older versions.
Fixed message dialog call for older engine versions

Co-authored-by: Ryan Lim <crezetique@gmail.com>
- Fixed GitHub auto commit being incorrectly done.
- Fixed Key Column index not correctly defined.
- Fixed StringTable package load causing assertion.
(squashed for publish)
- Implemented Audit Main Class (ELTEditorAuditor)
- Implemented Audit Widget (ELTEditorAuditWidget)
- Implemented Audit Types (ELTEditorAuditTypes)
- Updated ELTEditorCommands to include Audit commands.
- Updated EasyLocalizationToolEditorModule to include Audit menu bar and context menu functionality.
- Updated ELTEditor, RefreshAvailableLangs() was updated to support both ELT Tool and Audit Widgets.
@Crezetique
Copy link
Copy Markdown
Collaborator Author

@zompi2 Soooooo, you're prooobably gonna start really hating me hahaha.

In line with my previous quality of life PR - I started working on another pain point I was having, one thing led to another and it became a whole thing 🫠. Decided to fully polish it for everyone to use.

This PR is definitely too big for a merge with the other, so we can focus on #38 first?

@zompi2
Copy link
Copy Markdown
Owner

zompi2 commented May 19, 2026

This is way too much for me to actually review and test in a reasonable time.

I've made a new branch for it: https://github.com/zompi2/UE4EasyLocalizationTool/tree/experiments
Please, make PRs there and there I will gladly approve them.

Please fix the copyright notes at the beginning of new files, as I am not responsible for those and I can't give anybody guarantee it's working.

Thank you <3

I'm a bit confused with the implementation of creation/deletion processes in ELTEditor, from what I'm guessing this was due to the deprecated use of UMG which required world context, and that needs to be managed on level change?

Do you mean what happens in ChangeTabWorld? That was quite long time ago, but if I remember correctly it was because the widget in nomad tab wasn't correctly transported when changing a Level in the Editor while it was opened. I don't know if it's still needed (it was needed in UE4.27) but it works ;)

- Updated Copyright for audit related files.
- Updated audit completion message dialog to change icon depending on issue count.
@Crezetique Crezetique changed the base branch from main to experiments May 19, 2026 18:31
@Crezetique
Copy link
Copy Markdown
Collaborator Author

This is way too much for me to actually review and test in a reasonable time.

No worries! I don't expect you to do so quickly at all :)

I've made a new branch for it: https://github.com/zompi2/UE4EasyLocalizationTool/tree/experiments
Please, make PRs there and there I will gladly approve them.

Updated the PR to direct towards it.

Please fix the copyright notes at the beginning of new files, as I am not responsible for those and I can't give anybody guarantee it's working.

Gladly! Updated.

Do you mean what happens in ChangeTabWorld? That was quite long time ago, but if I remember correctly it was because the widget in nomad tab wasn't correctly transported when changing a Level in the Editor while it was opened. I don't know if it's still needed (it was needed in UE4.27) but it works ;)

Indeed, my implementation didn't require anything world related and works from my testing.

@zompi2 zompi2 merged commit 1fcc456 into zompi2:experiments May 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants