You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
src/locale/locales.json carries 47 locale entries but stores them as a flat A–Z map keyed by the English display name (Afrikaans, Arabic - Egypt, …). Every UI that renders a locale list — the admin debug page's Locale tab, the System Settings locale picker, User profile language dropdown, etc. — inherits this flatness:
A non-English-speaking admin can't recognize their language. An admin in Brazil has to know that Portuguese maps to pt_BR and appears alphabetically under P — they never see Português do Brasil.
No natural grouping. All English-variants (en_AU, en_CA, en_GB, en_JM, en_US, en_ZA) and all Arabic-variants scatter through the list.
No signal of which locale is currently active.
Proposed schema additions
Add two fields to each entry in locales.json:
Field
Example
Purpose
`nativeName`
`"Português do Brasil"`, `"中文(简体)"`, `"العربية"`
Admins recognize their language in its own script even when the surrounding app chrome is in English. Biggest single UX win.
Purely additive — no existing caller needs to change. `isRTL` / feature-flag fields stay as-is.
Out of scope
Swapping the `` widgets elsewhere in the app is a separate UI pass and not required by this issue.
Sorting/weighting locales by translation completeness — separate concern tracked elsewhere.
Why now
The admin debug page was rewritten in chore(deps): bump the build-tools group across 1 directory with 2 updates #8725 (`fix/admin-debug-dashboard-ux` branch) and the Locale tab surfaces the problem clearly: scrolling 47 flat rows to confirm your OS has `pt_BR` installed is a bad experience and representative of the flatness everywhere else.
Problem
src/locale/locales.jsoncarries 47 locale entries but stores them as a flat A–Z map keyed by the English display name (Afrikaans,Arabic - Egypt, …). Every UI that renders a locale list — the admin debug page's Locale tab, the System Settings locale picker, User profile language dropdown, etc. — inherits this flatness:pt_BRand appears alphabetically under P — they never seePortuguês do Brasil.en_AU,en_CA,en_GB,en_JM,en_US,en_ZA) and all Arabic-variants scatter through the list.Proposed schema additions
Add two fields to each entry in
locales.json:Existing fields (`isRTL`, `fullCalendar`, `momentLocale`, `dataTables`, `datePicker`, `poEditor`, …) stay untouched.
```diff
"Portuguese - Brazil": {
"poEditor": "pt-BR",
"locale": "pt_BR",
"languageCode": "pt",
"countryCode": "BR",
"dataTables": "pt-BR",
…
}
```
UX changes that unlock
Debug page Locale tab (`src/admin/views/debug.php`)
` per region, each header showing `N installed / M total on server`.
Other consumers (follow-up PRs, not this issue)
Implementation sketch
One PR delivers everything on the debug page side:
Purely additive — no existing caller needs to change. `isRTL` / feature-flag fields stay as-is.
Out of scope