Skip to content

Add French, Spanish (ES/MX), Portuguese and Italian translations - #14

Merged
chrisdfennell merged 1 commit into
mainfrom
feature/more-locales
Jul 27, 2026
Merged

chrisdfennell merged 1 commit into
mainfrom
feature/more-locales

Conversation

@chrisdfennell

Copy link
Copy Markdown
Owner

Five more locales, taking StatPanel from one translation to six. Each is complete against the current 452-key set.

Locale Language Coverage
frFR French 452/452
esES Spanish (Spain) 452/452
esMX Spanish (Latin America) 452/452
ptBR Portuguese (Brazil) 452/452
itIT Italian 452/452

All six (including the existing deDE) pass tools/locale-lint.ps1 with no errors — no orphaned keys, no format-specifier mismatches, no duplicates, every file registered in the TOC with a matching SP.Locale argument.

esMX is derived, not copied

esMX.lua is generated from esES.lua with the header and locale argument swapped. The two Blizzard localizations differ in scattered vocabulary rather than in structure, and deriving it means the key set cannot silently drift out of step with esES. Genuine regional overrides can be appended below the shared block.

These have not been reviewed by native speakers

Terminology follows each client's own wording where it exists — Maîtrise/Polyvalence, Maestría/Versatilidad, Maestria/Versatilidade, Maestria/Versatilità — but I can't vouch for tone across 2,260 strings.

Every file says so in its header and points at the issue tracker, so a wrong string reads as an invitation to correct it rather than as authoritative. Locales/README.md says the same thing.

If long-term translation quality matters, the better answer is CurseForge's localization system: the packager already supports @localization@ substitution and the project already has X-Curse-Project-ID, so real players could correct these in place. Happy to wire that up separately.

Why no Russian, Korean or Chinese

Fonts\FRIZQT__.TTF is hardcoded in ten places across Options.lua, Widgets.lua and Media.lua — whose comment claims "Blizzard ships these with every client and locale." Those clients use locale-specific font files, so a translation would likely render as empty boxes rather than text.

I have not been able to verify this without those clients, so it's a strong suspicion rather than a confirmed finding. Either way it needs resolving before those locales are worth adding — a translation nobody can read is worse than English.

Still open

  • string.format("%.2f") always emits 10.65; French, Spanish, Portuguese and Italian all use a decimal comma. The token examples in these files say 10.65 to match what the code actually renders, rather than promising a comma it won't produce.
  • %-12s in the gear report pads by bytes, so accented slot names skew that column.

Five more locales, each complete against the current 452-key set and each
verified by tools/locale-lint.ps1: no orphaned keys, no format-specifier
mismatches, no duplicates, all registered in the TOC.

esMX is derived from esES rather than hand-copied. The two Blizzard
localizations differ in scattered vocabulary rather than in structure, and
deriving it means the key set cannot silently drift out of step with esES;
genuine regional overrides can be appended below the shared block.

None of these has been reviewed by a native speaker. Terminology follows
each client's own wording where it exists, and every file says so in its
header and points at the issue tracker, so a wrong string reads as an
invitation to correct it rather than as authoritative.

Russian, Korean and both Chinese locales are deliberately left out. The
addon hardcodes Fonts\FRIZQT__.TTF in ten places and Blizzard ships
locale-specific fonts for those clients, so a translation would likely
render as empty boxes. A translation nobody can read is worse than
English, so that has to be fixed first.
@chrisdfennell
chrisdfennell merged commit ced4c66 into main Jul 27, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant