In Studio, when a LocalScript creates or updates a LocalizationTable in LocalizationService in a non-published local place file, text objects that are already created do not update with the new localization. Toggling AutoLocalize fixes this for already-displayed text. Newly-created text objects are localized correctly. Existing but hidden text objects display incorrectly once made visible if they existed before the LocalizationTable was modified.
I do not know if this can occur on published games.
LocalizationFailRepro.rbxl (60.5 KB)
System Information
CPU: 12th Gen Intel(R) Core™ i7-12700H
Memory: 32.0 GB
GPU 0: Intel(R) Iris(R) Xe Graphics
GPU 1: NVIDIA GeForce RTX 3050 Laptop GPU
Expected behavior
I expect the existing text objects to correctly display localized text after LocalizationTables are created or modified locally.
Additional Context
I anticipate being asked why we even do this, and why we don’t use built-in localization tooling such as cloud localization. (for what it’s worth, I primarily expect this from community members, not staff, and I want to preempt any needless discussion!)
In Adopt Me! we create nearly all of our LocalizationTables with LocalScripts.
We do this because:
- we have our own localization pipeline that uses a third-party localization platform
- we support live localization updates in our localization pipeline (i.e. currently-playing players see translation changes while they play, when a change is made in our third-party tool’s website)
- we need our localization to work on all games/universes, because we run QA tests on 20+ separate “universes” from production.
- we send minimal localization data to the client
- we send the client only their selected language
- when translations change, we send only a patch of what changed
- relying on built-in LocalizationTable replication is not feasible for us because it causes 8+ second freezes on update even when split into many pieces
- the total size of all of our translations is over 8 MB
- we support some live localization tools for our localization team, including the ability to hide all translated strings so untranslated ones stick out
- we support some additional features that depend on dynamic generation of tables or depend on source locale → source locale translations