Skip to content

feat(l10n): add Portuguese (Brazil) and French (Canada) - #8

Merged
glenntosco merged 10 commits into
mainfrom
claude/project-thread-5e0lug-localization
Oct 24, 2026
Merged

glenntosco merged 10 commits into
mainfrom
claude/project-thread-5e0lug-localization

Conversation

@glenntosco

Copy link
Copy Markdown
Collaborator

Requested by Glenn · project thread

What changed and why

Assessment item 11. Stacks on #7 (deployment) → #6 → #5. Merge in order.

Adds Brazilian Portuguese and Canadian French next to English/Spanish, covering every string on the stack (2,058 keys, including the printer-status, print-station and policy/update strings from #5–#7).

  • New Strings.pt-BR.resx and Strings.fr-CA.resx. Placeholders, access keys and technical tokens (ZPL commands, GS1 AIs, extensions, "Rotula") kept. French follows OQLF usage ("courriel", "NIP", no-break space before : ; ! ? and inside « »).
  • Loc.SupportedLanguages = en, es, pt-BR, fr-CA as full culture names; LanguageCode returns the culture name. Per-key English fallback and culture-based formatting unchanged.
  • First run maps Windows: pt-* → pt-BR, fr-* → fr-CA, es-* → es, else en. Saved en / es / auto keep their meaning.
  • View > Language lists "Português (Brasil)" and "Français (Canada)"; the feat: enterprise deployment (machine-wide MSI, policies, opt-in update check, winget) #7 language policy locks them too. The Language policy (reader, ADMX/ADML, docs/deployment.md) accepts pt-BR and fr-CA, matched case-insensitively to the canonical name.
  • Fixed sample-text detection in Fields "use here", which compared two-letter codes with the language list.
  • Installer offers Brazilian Portuguese and French; SatelliteResourceLanguages updated.
  • README (en/es), CONTRIBUTING (every new string needs en, es, pt-BR and fr-CA), the PR checklist, CHANGELOG, decisions.

How it was tested

  • Parity tests now cover every Strings.*.resx against English (same keys, placeholders, access keys, no empty values, French typography), and the resx files on disk must match Loc.SupportedLanguages. Every hard-coded {"en","es"} loop in the tests now goes through SupportedLanguages, so later features need all four languages automatically.
  • Loc tests: OS mapping, explicit choice, saved settings, per-language resources, decimal comma, live switching. View-model, settings and policy tests for the new languages.
  • Solution builds with 0 warnings; a verify script (keys, placeholders, access keys, typography) reports 0 problems. Tests run on Windows CI.

Checklist

  • Build passes; tests run on Windows CI
  • New behavior has tests
  • New text exists in all four resx files
  • No network calls or telemetry; light theme only
  • No new dependencies
  • CHANGELOG.md updated
  • Hygiene check passes

Notes

  • A native-speaker review of both languages before release is worth doing; nothing here was reviewed by one.
  • The MCP server stays English-only (it embeds Strings.en).
  • Three en/es strings still name a printer vendor (Print.Error.ConnectionRefused, Print.Field.Port, Start.Subtitle); the pt/fr versions leave it out. Worth fixing in en/es separately.
  • The supplies importer recognises only English/Spanish column headers, so pt/fr users are told to name the column "Part number".
  • Not done: pt-BR/fr ADML folders (Group Policy falls back to en-US), winget pt/fr locale manifests, an MSI UI language. The Inno installer change was not compiled (no ISCC here).

Generated by Claude Code

…I runner

postgres.exe exits at once when the account has administrative rights,
which is the case on the GitHub Windows runner, so Start-TestServers failed
with "The server stopped right after starting". pg_ctl starts the server
with those rights removed. Start/timeout errors now also print the last
lines of the server log, since Stop-TestServers deletes it in CI.

Claude-Session: https://claude.ai/code/session_01M3Pqt8Ubw3fJwBV3ztYKQV
The gate reads the first coverage.cobertura.xml under coverage/raw, and the
folders are random GUIDs. Rotula.Data.Packs.Tests also produced a report,
with Rotula.Core almost uncovered, so the gate failed whenever that one
sorted first (0.54% on PR #4). Drop its coverlet.collector, the same as
Rotula.Data.Integration already does.

Claude-Session: https://claude.ai/code/session_01M3Pqt8Ubw3fJwBV3ztYKQV
Every key of Strings.en.resx, with the same placeholders, access keys
and technical tokens (ZPL commands, GS1 AIs, extensions, product name).
Every key of Strings.en.resx, following OQLF usage: courriel, and a
non-breaking space before : ; ! ? and inside guillemets. Placeholders,
access keys and technical tokens are kept as in English.
Loc.SupportedLanguages now lists en, es, pt-BR and fr-CA by full culture
name, and LanguageCode returns that name. On first run any Portuguese
desktop gets pt-BR, any French one fr-CA, Spanish es and the rest
English; saved en/es settings keep their meaning. View > Language lists
each language in its own name.

The parity tests now check every Strings.*.resx against English (keys,
placeholders, access keys, no empty value, French typography), and the
key-coverage tests run over Loc.SupportedLanguages instead of en/es.
README (en/es), CONTRIBUTING, the PR checklist, the changelog and the
design decisions now say every new string needs en, es, pt-BR and
fr-CA. The installer offers Brazilian Portuguese and French.
pt-BR and fr-CA for the 137 keys the printer status check, the print
station and the managed settings / update check added.
The Language policy reads every shipped language case-insensitively and
hands on the canonical culture name; the ADMX enum, both ADML files and
docs/deployment.md list all four. The managed lock covers the new menu
entries, and the tests of the earlier branches that looped over en/es
now use Loc.SupportedLanguages.
…utral status test

Archivo and Ayuda both took Alt+A, so Alt+A never reached Help. Help is now
Ay_uda (Alt+U). The printer-status text test now accepts the French « » quotes.
@glenntosco
glenntosco changed the base branch from claude/project-thread-5e0lug-deployment to main October 24, 2026 14:31
@glenntosco
glenntosco merged commit 6923b1f into main Oct 24, 2026
6 checks passed
glenntosco added a commit that referenced this pull request Oct 27, 2026
feat(l10n): add Portuguese (Brazil) and French (Canada)
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.

2 participants