Skip to content

Localization

gokuthug1 edited this page Oct 5, 2026 · 1 revision

Localization

GokuTrap's interface is translated into 35 locales.

Available languages

ar, bg, bs, cs, da, de, en-US, es-ES, fa, fi, fil, fr, hr, hu, id, it, ja, ko, lt, lv, ms, nl, pl, pt-BR, ro, ru, sv-SE, th, tr, uk, vi, zh-Hans-CN, zh-Hant-HK, zh-Hant-TW — plus the neutral base Strings.resx.

Changing language

Set it in Appearance#Language. A relaunch is required.

Fallback behaviour

If a string has no translation for your selected locale, GokuTrap shows the English text. It does not show a resource key or an empty control.

This is the most likely reason part of the interface is still English after you switch: that particular string has not been translated into your language yet.

Current gap The strings added for the tools in Feature-Tools-Overview are English-only. In every other locale those specific tools fall back to English until someone translates them. The rest of the interface is unaffected.

How strings are stored

Translations live in .resx resource files in the repository:

GokuTrap/Resources/Strings.resx        <- neutral base (English)
GokuTrap/Resources/Strings.de.resx     <- German
GokuTrap/Resources/Strings.ja.resx     <- Japanese
...

Each entry is keyed by a dotted name, for example Menu.Appearance.Title or Features_SaiyanTitle.

There are two access patterns, and both must be used correctly when adding strings:

Pattern Used by Key form
Generated accessor Existing UI code and XAML Strings.Menu_Appearance_Title, which maps to resource key Menu.Appearance.Title
FeatureText.Get(...) The feature tools FeatureText.Get("SaiyanTitle"), which resolves Features_SaiyanTitle and falls back to the key itself if absent

The underscore form used in code is a property name; the dotted form is the actual resource key. Getting this wrong produces an empty label rather than a compile error, which is why the automated checks verify that every referenced string resolves. See Verification-Harness.

Adding a translation

  1. Find the key in GokuTrap/Resources/Strings.resx.

  2. Copy the <value> into the same key in your locale's file.

  3. Keep placeholders such as {0} and {1} — they are substituted at runtime.

  4. Preserve any XML escaping.

  5. Build and run the checks:

    dotnet build GokuTrap.sln -c Release
    dotnet run --project tests/GokuTrap.FeatureChecks -c Release -- .
  6. Open a pull request. See Contributing.

Placeholders

Some strings contain placeholders that carry real meaning:

Placeholder Example message
{0} "Applied {0}. Changes saved; restart Roblox to use them."
{1}, {2} Bootstrapper download status: package name, downloaded size, total size

Translate the surrounding text; leave the placeholders exactly as they are. Removing one produces a message with a literal {0} in it.

Interface language versus Roblox language

These are separate:

Reporting a translation problem

Open an issue with the key name, your locale, and what you expected. Translation problems in the feature tools are expected right now — see the gap noted above.

Clone this wiki locally