Fix missing and malformed translations across all languages - #11913
Open
leriomaggio wants to merge 5 commits into
Open
leriomaggio wants to merge 5 commits into
leriomaggio wants to merge 5 commits into
Conversation
Twenty-three keys reached en-US without ever being copied into the other nine language files. Switching to any non-English locale threw MissingResourceException on every lookup and dumped a stack trace, once per screen that asked for them. ko-KR was also missing lblAllowedAdditionalColors, and zh-CN advReputation. Most of the keys belong to the networked draft and limited lobby.
These 44 keys were in it-IT already, but holding the English string: the networked draft setup dialogs, the draft overlay, and the draft log. The Italian follows the terms the file already uses elsewhere, busta for a booster and scelta for a pick, and keeps Draft, Sealed, Limited, Host and pool untranslated the way Italian players say them. Values only. No keys added, removed or reordered.
Doubles every lone apostrophe in all ten files, en-US included, since it is the bundle every other locale falls back to. Pairs that were already escaped are left as they are. Values only: no keys added, removed or reordered, and no text changed beyond the apostrophes.
A sweep of every value through MessageFormat found three that could not
work as written:
fr-FR lblGuideTipsSet had its line-continuation backslash mid-sentence
instead of at the end of the line, so the string was truncated and its
last line was parsed as a key of its own.
ko-KR lblContainsXCopiesCard used {X}, which is not a valid argument
index, so the lookup threw and Korean users silently got the English
string.
de-DE lblLogPlayerChosenModeForCard opened its first placeholder with a
square bracket, [0}, so the game log showed that instead of the player
name.
Also stop Localizer printing a stack trace for every lookup of a bad key.
Report each problem once per language instead, separating a missing key
from a malformed message pattern, and clear the silent flag at the start
of getMessage: it was reset only on the success path, so an early return
left it set and muted every later warning.
441 values in it-IT still held the English text: preferences, the yield and auto-pass settings, the game log, dice and contraption prompts, the sleeve selector, network setup, and the Adventure mode summaries. Card types now use the official Italian terms, Artefatto, Incantesimo, Istantaneo, Stregoneria, Leggendario, Neve. Format and mode names, creature types and words Italian shares with English are deliberately left as they are, as are the comparison operators and the deck-import syntax examples. Values only. No keys added, removed or reordered, and the placeholder arity of every line matches en-US.
leriomaggio
force-pushed
the
fix/missing-translations
branch
from
September 15, 2026 06:07
6c355b2 to
3bc78b2
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.
Switching Forge to any non-English language currently floods the log with stack traces, and several strings cannot render as written. This fixes the translation data and the logging that buried the problem.
Issue
Twenty-three keys existed in
en-US.propertiesand were missing in other languages, so every lookup threwMissingResourceException.ko-KRwas also missinglblAllowedAdditionalColors, andzh-CNadvReputation. The English fallback kept the UI correct, so the visible damage was log noise: a full stack trace per lookup, per screen that asked for the key.Separately,
Localizerruns every value throughMessageFormat, where a lone apostrophe opens a quoted section. 810 values across all ten files were affected. Most simply lost the apostrophe, so Italian showed labilità and leffetto. In 76 of them a{0}fell inside the quoted section and was never substituted, so dialogs printed the literal placeholder where a card name, deck name or host address belonged. An Italian player overwriting a deck saw{0} è già esistenterather than the deck's name.Changes in this PR
it-ITbut holding English: the draft setup dialogs, the draft overlay, and the draft log.en-USincluded since it is the bundle every locale falls back to. Pairs that were already escaped are untouched.Localizernow reports each bad key once per language on a single line instead of a stack trace per lookup, and distinguishes a missing key from a malformed pattern.Notes
Every value in all ten files was loaded and rendered through
MessageFormat. Before this branch, 78 values either threw or left a placeholder unsubstituted. Now none do, and every language file covers everyen-USkey.For the apostrophe commit specifically, each file was compared against its previous version with apostrophes stripped from both. They are byte-identical, with unchanged line counts, so nothing was reflowed, reordered or retranslated.
Notes for reviewers
The Italian is mine and I am a native speaker. The de, es, fr, pt and ru strings in commit 1 follow each file's existing vocabulary, but native corrections are very welcome.