doxa-maps/library/i18n/locales/ro/legend.json
doxa-maps-88655c70 879f08ba08
Some checks are pending
build-gate / build (push) Waiting to run
upg-100 legend: the title was hardcoded English in every locale
MEASURED on the live Chinese render: the legend header read "My UPG 100 List —
Legend" in full English, inside an otherwise localized panel — beside translated
tabs (区域 · UPG-100 名单) and a translated column header (人口). It was a plain
string literal, and SemanticTreeLegend passes `title` through RAW, so the caller
owns localizing it.

The Driver's gift policy names this exactly: "BEAUTIFUL: no clipped text, no
placeholders, no English leaking." An English title on the plugin chosen as the
mobile showcase is that.

★ FOUND BY SEPARATING CHROME FROM DATA, which is the part worth keeping. A naive
Latin-script sweep of the Chinese render returned 31 hits and would have been a
wildly overstated report. Rendering the same elements in en and zh and keeping
only those that are IDENTICAL narrows it to 24, and those fall in three classes:
  · Mapbox attribution (© Mapbox, Improve this map) — third-party, a LICENCE
    obligation, must not be touched
  · zone and region names (Middle East Core, Sudan) — API DATA; translating
    place names is a domain decision, not a bug
  · the legend title and "UUPGs" — product UI strings, and the only real leaks
So 31 hits reduce to 2, one of which is already carded.

★ AND THE HOUSE STYLE ALREADY EXISTED, so no terminology was invented. This
catalog renders "Doxa Regions" as "Doxa 区域" / "مناطق Doxa" / "Регионы Doxa" —
the proper noun stays Latin, the frame translates. "UPG 100" is treated the same
way across all 11 locales, following a convention the catalog demonstrates
rather than coining acronyms (the trap I stopped at on the UUPGs header).

COMPUTED, not a constant: a locale change must move it. A const captured at
setup keeps the mounting language forever, which is the subtler half of the same
bug. That also forced the definition below useI18n(), since a computed
referencing t() above it throws at setup.

VERIFIED at the rendered layer: en "My UPG 100 List", es "Mi lista UPG 100",
zh "我的 UPG 100 名单", ar "قائمة UPG 100 الخاصة بي" (RTL), ru "Мой список UPG 100"
— 0 clipped in all five, including the longest Russian form.
check:legend-info-localized PASS, check:poster-card-fits PASS, SRI consistent.
2026-09-25 03:46:06 +00:00

69 lines
2.3 KiB
JSON

{
"title": {
"adoption": "Progresul adopției",
"affinityBlocs": "Blocuri de afinitate",
"doxaRegions": "Regiuni Doxa",
"engagement": "Progresul implicării",
"gospelResources": "Resurse ale Evangheliei",
"languageFamilies": "Familii de limbi",
"prayer": "Progresul rugăciunii",
"upg100List": "Lista mea UPG 100"
},
"header": {
"collapsed": "Legendă",
"peopleGroupFallback": "Grup de popoare",
"default": "Legendă"
},
"prayer": {
"needsPrayer": "Necesită rugăciune",
"hasPrayer": "Are rugăciune",
"fullPrayerCoverage": "Acoperire completă de rugăciune"
},
"progress": {
"title": "Progres",
"covered": "{covered} din {total} grupuri de popoare acoperite în rugăciune · {pct}%",
"short": "{covered} din {total} · {pct}%",
"segment": "{label} · {count} · {pct}%"
},
"engagement": {
"needsEngagement": "Necesită implicare",
"hasEngagement": "Are implicare"
},
"adoption": {
"needsAdoption": "Necesită adopție",
"hasAdoption": "Are adopție"
},
"columns": {
"upgs": "UUPGs",
"population": "Populație",
"name": "Nume"
},
"footer": {
"total": "Total"
},
"sortByUpgs": "Sortează după UUPG",
"sortByPop": "Sortează după populație",
"colLabel": {
"religion": "Religii UUPG",
"prayer": "Starea rugăciunii",
"engagement": "Starea implicării",
"adoption": "Starea adopției",
"status": "Stare"
},
"titleBar": {
"legend": "Legendă",
"peopleGroups": "Popoare",
"wagfRegions": "Regiuni WAGF",
"languages": "Limbi"
},
"tabInfo": {
"upg100Region": "Regiune — sortează listele UPG-100 după zona lumii (Africa, India, Orientul Mijlociu, Surzi, …). Totalurile sunt UUPG-urile și populația însumate din fiecare listă de dedesubt.",
"upg100Zone": "Liste UPG-100 — fiecare este o listă de rugăciune a grupurilor etnice neatinse dintr-o zonă și este ceea ce harta desenează și colorează. Fiecare listă se tipărește ca propriul pachet.",
"upg100Group": "Grup etnic — grupurile neatinse dintr-o listă, mai întâi cele cu cea mai mare nevoie de rugăciune. Fiecare punct de pe hartă este unul dintre ele."
},
"a11y": {
"expandRow": "Extinde {label}",
"collapseRow": "Restrânge {label}",
"clearSelection": "Șterge selecția"
}
}