Problem
Since the flag/name resolution fix (branch fix/team-name-localization, commit 682765e), the four British home nations are correctly not mapped to GB anymore — England no longer shows as "United Kingdom" / "Vereinigtes Königreich" with the Union Jack. However, their team names now always display in the spelling stored by the data adapter (typically English):
| Team |
German UI shows |
should be |
French UI shows |
should be |
| England |
England |
England ✓ |
England |
Angleterre |
| Scotland |
Scotland |
Schottland |
Scotland |
Écosse |
| Wales |
Wales |
Wales ✓ |
Wales |
Pays de Galles |
| Northern Ireland |
Northern Ireland |
Nordirland |
Northern Ireland |
Irlande du Nord |
All other national teams localize automatically via TeamNameLocalizer::localize() → PHP intl (Locale::getDisplayRegion()).
Analysis: why ICU/CLDR can't cover this
The home nations have no ISO 3166-1 country code — they exist only as ISO 3166-2 subdivisions (GB-ENG, GB-SCT, GB-WLS, GB-NIR). The localization data exists upstream but is lost in the pipeline:
- CLDR does ship localized subdivision names (
common/subdivisions/<lang>.xml: gbeng → "England"/"Angleterre"/…).
- ICU does not compile
subdivisions/*.xml into its standard data. Verified empirically: the ICUDATA-region bundle contains only a Countries table; Countries->get('gbeng') returns NULL.
- PHP intl has no API for subdivision names anyway (
Locale, ResourceBundle only reach ISO 3166-1 territories).
Naive attempts are worse than useless — ICU parses the subdivision part as a locale variant and silently returns the wrong answer:
Locale::getDisplayRegion('-GB-ENG', 'de') // → "Vereinigtes Königreich" (!)
This is exactly the bug the original fix removed, so an ICU-based "solution" would silently reintroduce it.
Proposed resolutions
| # |
Approach |
Effort |
Trade-offs |
| 1 |
Module message catalog: route the 4 names through Yii::t('KickoffModule.base', …), add 4 keys to messages/{en,de,fr}/base.php |
~30 lines |
Uses existing i18n infrastructure; translators maintain it like any other string; new UI languages fall back to English names (same as all module strings). A working implementation was prototyped and can be restored. |
| 2 |
Bundle CLDR's subdivisions/*.xml (or a generated PHP extract) and resolve at runtime |
high |
Full language coverage, but heavy machinery and an update obligation for a closed set of 4 strings |
| 3 |
Add symfony/intl or similar dependency |
medium |
Does not expose subdivision names either — dead end; also conflicts with the project's no-new-dependencies preference |
| 4 |
Accept English names (status quo) |
none |
"England"/"Wales" are identical in German; only Scotland and Northern Ireland differ noticeably |
Recommendation
Option 1 — the set is fixed and tiny (England won't be renamed), which is exactly what a static translation catalog is for. ICU's strength (dynamic coverage of all territories × all languages) doesn't apply to a closed set of four.
Context
- Follow-up to the FIFA-code resolution fix on
fix/team-name-localization (682765e)
- Related: the bundled-Twemoji branch renders the ENG/SCO/WAL tag-sequence flags (
fix/flag-emoji-fallback-chrome-issue)
- Affected display locations: match cards, leaderboards, tip popups, admin Teams page — everything using
Team::getDisplayName()
Problem
Since the flag/name resolution fix (branch
fix/team-name-localization, commit682765e), the four British home nations are correctly not mapped toGBanymore — England no longer shows as "United Kingdom" / "Vereinigtes Königreich" with the Union Jack. However, their team names now always display in the spelling stored by the data adapter (typically English):All other national teams localize automatically via
TeamNameLocalizer::localize()→ PHP intl (Locale::getDisplayRegion()).Analysis: why ICU/CLDR can't cover this
The home nations have no ISO 3166-1 country code — they exist only as ISO 3166-2 subdivisions (
GB-ENG,GB-SCT,GB-WLS,GB-NIR). The localization data exists upstream but is lost in the pipeline:common/subdivisions/<lang>.xml:gbeng→ "England"/"Angleterre"/…).subdivisions/*.xmlinto its standard data. Verified empirically: theICUDATA-regionbundle contains only aCountriestable;Countries->get('gbeng')returnsNULL.Locale,ResourceBundleonly reach ISO 3166-1 territories).Naive attempts are worse than useless — ICU parses the subdivision part as a locale variant and silently returns the wrong answer:
This is exactly the bug the original fix removed, so an ICU-based "solution" would silently reintroduce it.
Proposed resolutions
Yii::t('KickoffModule.base', …), add 4 keys tomessages/{en,de,fr}/base.phpsubdivisions/*.xml(or a generated PHP extract) and resolve at runtimesymfony/intlor similar dependencyRecommendation
Option 1 — the set is fixed and tiny (England won't be renamed), which is exactly what a static translation catalog is for. ICU's strength (dynamic coverage of all territories × all languages) doesn't apply to a closed set of four.
Context
fix/team-name-localization(682765e)fix/flag-emoji-fallback-chrome-issue)Team::getDisplayName()