FrovixAI-UniversalModLocalizer icon

UniversalModLocalizer

A scoped Valheim mod localization system for exporting, importing, applying, and syncing translations for installed BepInEx mods.

CHANGELOG

Changelog

0.1.13

  • Fixed a performance issue where AggressiveExportMode also affected normal gameplay runtime UI text patches.
  • Runtime UI translation now tries fast global/unique matches before doing any component-owner lookup.
  • Added a bounded runtime translation cache to avoid repeating expensive misses or repeated UI text translations.
  • Added EnableScopedRuntimeComponentLookup = false by default for smoother gameplay. Enable it only if duplicate hardcoded UI strings require owner-specific runtime matching.
  • Deep export still uses aggressive component-owner lookup, so export coverage is preserved while normal gameplay stays lighter.

0.1.12

  • Refreshed the Thunderstore package metadata for r2modman visibility checks.
  • Updated the BepInExPack Valheim dependency from denikson-BepInExPack_Valheim-5.4.2350 to the newer denikson-BepInExPack_Valheim-5.4.2351.
  • Rebuilt the package with the corrected 0.1.12 manifest and matching plugin version.

0.1.11

  • Added vanilla token preservation through BepInEx/config/UniversalModLocalizer/vanilla_tokens.txt.
  • Vanilla Valheim tokens such as $item_hammer, $item_club, $piece_fire, and common captions are no longer imported, exported, or globally overridden by mod translation files.
  • This keeps original Valheim localization in control when mods reuse base-game items, pieces, creatures, captions, or UI tokens.

0.1.10

  • Removed BepInEx config text from export scans; new exports no longer create _config.json files.
  • Skips token passthrough entries such as "$item_hammer": "$item_hammer" during export and import so native Valheim/mod localization can handle them.
  • Cleaned the active Polish import/export files by archiving generated config exports and removing self-token overrides.

0.1.9

  • Fixed import JSON files failing to load when edited text contained common invalid escapes such as \_, \<, or \~.
  • Added tolerant import parsing for over-escaped quotes and simple missing commas between key/value entries.
  • Repaired the current Polish import set so all 119 JSON files validate before game launch.

0.1.8

  • Export files are now merged instead of overwritten.
  • Existing key/value pairs are preserved when running uml deep and uml scan one after another.
  • New export runs only add missing keys; empty existing values may be filled from the latest detected source text.
  • If an existing export file cannot be parsed, a timestamped .bak-* copy is created before regenerating it.

0.1.7

  • Reworked uml deep into a faster PrefabLocalizer-style visible-content export path.
  • Deep export now focuses on mod localization files, ObjectDB items, status effects, ZNetScene prefabs, hammer/PieceTable build pieces, creatures, and targeted loaded UI text.
  • Regular uml scan still includes BepInEx config metadata; uml deep skips config metadata to avoid huge slow exports dominated by settings text.
  • Added ObjectDB PieceTable scanning so hammer build-menu pieces are exported from the same practical source the game uses.
  • Replaced broad loaded GameObject field scanning with targeted TMP_Text and Unity UI Text scanning.
  • Unresolved prefab owners remain in diagnostics, but are not exported as translation files unless ExportUnresolvedPrefabs is explicitly enabled.
  • Added start/end scan log messages with duration.

0.1.6

  • Added a tolerant fallback parser for malformed .json localization files that are actually loose "key": "value" dictionaries without valid JSON commas.
  • Fixed OdinArchitect-style translation files being skipped with After parsing a value an unexpected character was encountered.
  • Such files are imported as loose-json records instead of causing a warning and being ignored.

0.1.5

  • Added AggressiveExportMode, enabled by default, for stronger manual export scans.
  • Added uml deep, an aggressive export command that also writes unresolved prefab strings under _unresolved_prefabs.
  • Added uml runtime on/off to enable or disable hardcoded UI string collection from the in-game console.
  • Expanded prefab export scanning to include item shared data, status effect fields, and deeper generic string fields.
  • Extended uml deep to inspect loaded Unity objects and TMP/Unity UI text components when they can be attributed to an installed mod.
  • Improved runtime/UI owner detection by checking related parent components, useful when visible text is owned by Unity/TMP but the window controller belongs to a mod.
  • Added owner recovery for previously unresolved strings by matching localization keys and source values back to installed mods.
  • Enabled component ownership fallback in the recommended config for better mod attribution during manual scans.

0.1.4

  • Enabled imported translations to override native/mod-registered localization by default. This is required for many mods that register English text as their native localization.
  • Added generic prefab component string scanning to catch more prefab, build-piece, HUD, and UI text candidates during manual exports.
  • Added safe token source resolution from Valheim's currently loaded localization dictionary, avoiding repeated noisy TranslateSingleId calls.
  • Scans localization files inside Assets/Translations folders and matches localization keys with or without a leading $.
  • Made uml reload reload the config file before reloading translation imports.
  • Added ExportGenericPrefabStrings and ResolveTokenSourcesFromCurrentLocalization config options.

0.1.3

  • Made Jotunn a required BepInEx and Thunderstore dependency.
  • Disabled unresolved-prefab export by default to avoid very large scans.
  • Disabled slow component-assembly prefab ownership fallback by default.
  • Disabled native target-language probing by default to avoid repeated Valheim localization lookups during export.
  • Reused detected English mod localization files as prefab export values when available.

0.1.2

  • Added AutoScanOnWorldLoad, disabled by default, so a full export scan only runs automatically when explicitly enabled.
  • Fixed ExportMissingTranslations being reused as an automatic scan trigger.
  • Recommended disabling runtime string collection during normal gameplay and using manual uml scan for controlled exports.

0.1.1

  • Fixed plugin discovery incorrectly marking every plugin as a technical library when installed under BepInEx/plugins.
  • Changed export files to simple JSON dictionaries: "key": "value".
  • Changed exported file names to include the mod name and category, such as ExampleMod_prefabs.json and ExampleMod_ui.json.
  • Added _unresolved_prefabs export coverage for prefab strings whose owning mod cannot be identified reliably.
  • Improved prefab token keys so description/tooltips use their real Valheim token when available.
  • Kept backward compatibility for the previous entries JSON import format.

0.1.0

  • Initial release.
  • Added plugin discovery and per-ModGUID translation isolation.
  • Added import/export folder structure.
  • Added JSON import/export schema.
  • Added localization file scanner for JSON, YAML/YML, CSV, TSV, and TXT.
  • Added prefab scanner for items, pieces, creatures, and status effects.
  • Added BepInEx config text scanner.
  • Added token, exact-string, and simple template runtime translation.
  • Added TMP_Text and UnityEngine.UI.Text runtime patches.
  • Added runtime UI string collection.
  • Added hot reload for import JSON files.
  • Added server-to-client translation sync with compression, chunking, SHA-256 checks, and cache.
  • Added uml console commands.