fix(i18n): localize raw ids, enums and literals in in-game selection lists - #674
Merged
Merged
Conversation
…lists (#672) Several selection lists showed English on a German client because their strings never reached the Localizer: - Tech tab category sidebar: raw blueprints.json categories (ShipExpansion, Suit, ...) -> new ui.tech.cat_* keys via a new IdLabel(prefix, id) helper that falls back to the raw id for unknown values - Map tab list + detail: raw NetBody.Kind/Status enum names -> ui.map.kind_* and ui.map.status_* keys - Mission creation: Mine/Collect/Deliver cycler + objective rows localized via ui.missions.objtype_* (PmTypes stays the wire value) - Story log: [vega]/[sps]/... tags -> lore.cat.* keys in the story pack's own locale files - Crafting detail: "Max" button -> ui.craft.max - Settings: quality preset enum (Potato/Low/Medium/High) -> ui.settings.preset.* keys - Arcade: bilingual "no record yet" literal -> ui.arcade.no_record - Server: Ruin A / Guardian Core POI names localized per session locale (poi.ruin, poi.guardian_core), matching the existing poi.treasure pattern - Dead Desc() guard fixed (s == key never matches "[key]" misses -> use Localizer.Has), inert ?? fallbacks on the achievement templates removed - VendorTradeUI.ItemName now parses composite item keys (dye/glow/shape) like the crafting menu Co-Authored-By: Claude Fable 5 <[email protected]>
marceld23
force-pushed
the
fix/ingame-menu-untranslated-lists
branch
from
August 2, 2026 21:25
9d99cbd to
06e82c4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
closes #672
Playing in German, several selection lists in the in-game (Tab) menu and the Esc settings still showed English. The en/de locale tables were already key-complete — these strings simply never went through the Localizer (raw data ids, enum names, hardcoded literals).
Changes
Client
CraftingTechShipUI.IdLabel(prefix, id): resolvesprefix + id.ToLowerInvariant()and falls back to the raw id when no key exists, so future data/enum values degrade to today's behaviour instead of showing a bracketed key.blueprints.jsoncategories →ui.tech.cat_*(9 keys).NetBody.Kind/Statusenum names →ui.map.kind_*/ui.map.status_*(8 keys).Mine/Collect/Delivercycler + objective rows →ui.missions.objtype_*;PmTypesstays the wire value (NetMissionObjective.Type).[vega]/[sps]/… tags →lore.cat.*keys in the story pack's own locale files (data/stories/vega_protocol/locales/).Maxbutton →ui.craft.max.Potato/Low/Medium/High) →ui.settings.preset.*.Game.German ? "noch kein Rekord" : "no record yet"→ui.arcade.no_record(also fixes the Italian locale silently getting English here).Desc()guard was dead (s == keycan never matchLocalizer.Get's[key]miss format) → now usesLocalizer.Has; removed the inert?? "{done}/{total}"fallbacks on the achievement templates.VendorTradeUI.ItemNamenow parses composite item keys (dye/glow/shape suffixes) like the crafting menu, so a market recipe over a modified item can never render a bracketed key.Server
Ruin A…andGuardian CorePOI names are now localized per session locale (poi.ruinwith a{0}letter placeholder,poi.guardian_core= „Wächterkern", consistent with the story's German terminology), matching the existingpoi.treasurepattern.Verification
dotnet build BlocksBeyondTheStars.CI.slnf -c Release -warnaserror— 0 warnings / 0 errors.BlocksBeyondTheStars.Client.dll; no generated files left to commit.🤖 Generated with Claude Code