The legend's region sections, its Deaf row and its one-country zones, the wall's card names, the print progress and error messages, the map's status badge and the Population column all rendered English in every locale. None of them was visible to check:hardcoded-english: they were single words, .js modules, Error() arguments, library components or number formatting. - Legend: region rows through one REGION_KEY table shared with the wall (poster.region_*, new region_deaf); zones through zoneTitle (tier A by country, the Deaf row by its bloc name); node ids stay English-derived. - Wall: card labels through zoneTitle, so the Show-on-map name, alt text, tooltip, HUD title and printed title agree with the legend and packet. - Errors a reader sees are keyedError(key, English, params); errorText(e, t) shows them translated, and an unkeyed error still shows its own message. Developer detail for a failed data load goes to the console; the badge says upgMap.mapDataFailed. - Population: Intl compact notation in the app's locale, same precision. - Country Posters: the unsupported card's reason is messages.countryPosterTooMany, not the data file's English note. - Strings only the UPG-100 map shows move to a new upgMap area, so other bundles do not carry them (country-posters 1,490,907 bytes). - check:hardcoded-english judges keyedError's English as a fallback (quiet when the key resolves everywhere, a finding when it does not); check:label-key-coverage follows REGION_KEY to legend-tree.js and covers the legend's table and its regionFor producer. Both self-tests two-sided.
45 lines
2.9 KiB
JSON
45 lines
2.9 KiB
JSON
{
|
||
"menuComingSoon": "Menu coming soon",
|
||
"pinHint": {
|
||
"tapDot": "Tap a coloured dot — someone still needs prayer"
|
||
},
|
||
"upg100WallHeading": "My UPG 100 List — Prayer Lists & Posters",
|
||
"upg100WallTag": "Prayer Mobilization",
|
||
"upg100WallIntroA": "How would you feed a crowd of five thousand? Jesus sat them down in groups of fifty and a hundred, and the impossible became shareable (Luke 9:14). We did the same with the 2,106 unreached people groups: 27 lists of about fifty to a hundred. Each list prints as a prayer packet and a poster, so 27 disciples, churches or local leaders can each carry one — praying for them ",
|
||
"upg100WallIntroEmph": "by their people group name",
|
||
"upg100WallIntroB": ".",
|
||
"loadingNamed": "Loading {name}…",
|
||
"couldNotLoadNamed": "Could not load {name}.",
|
||
"engineMissing": "The {engine} map engine did not load.",
|
||
"packetFailed": "Packet failed: {reason}",
|
||
"selectionPacketFailed": "Selection packet failed: {reason}",
|
||
"posterOneTerritory": "Poster prints one territory at a time — {count} selected.",
|
||
"selectionPosterFailed": "Selection poster failed: {reason}",
|
||
"mapUnavailable": "Map unavailable",
|
||
"copied": "Copied!",
|
||
"copyFailed": "Copy failed — press Ctrl/Cmd-C",
|
||
"engineNotLoaded": "map engine not loaded",
|
||
"engineNotLoadedDetail": "The {engine} map engine did not load. The list and legend are unaffected.",
|
||
"viewLoadFailed": "This view couldn't load.",
|
||
"retry": "Retry",
|
||
"noMapboxToken": "No Mapbox token",
|
||
"noMapboxTokenDetail": "No Mapbox token configured. The list and legend are unaffected.",
|
||
"loadingBoundaries": "Loading boundaries…",
|
||
"fetchingUupgs": "Fetching {n} UUPGs…",
|
||
"mapStatusCounts": "Areas: {polys} · zones: {zones}/{total} · pins: {pins}",
|
||
"tapTerritoriesHint": "Tap territories on the map or legend rows to add · tap again to remove",
|
||
"territoriesSelected": "Territories: {count}",
|
||
"bandInRange": "✓ 50–100 band",
|
||
"bandOutOfRange": "band 50–100",
|
||
"mapContextLost": "This map was unloaded to free graphics memory.",
|
||
"nOfTotal": "{n} of {total}",
|
||
"mapInitFailed": "Map failed to initialize — check token and container",
|
||
"countryWallIntroA": "One poster per country, ready to pray, print, and put on a wall — praying for them ",
|
||
"countryWallIntroB": ". Regions and countries are ordered by how many unengaged people groups they hold, so the greatest need leads.",
|
||
"countryWallSoon": "Coming soon — a prayer list will be generated for each country, naming every unengaged people group within it.",
|
||
"countryWallHeading": "Country Posters — Prayer Lists & Posters",
|
||
"largerScreenNotice": "This experimental map is built for larger screens. It opens here, but parts of it may not fit or work well on a phone.",
|
||
"desktopOnlyNotice": "{label} only supports desktop — open this page on a desktop to use it.",
|
||
"noticeDismiss": "Dismiss",
|
||
"countryPosterTooMany": "Too many people groups to fit on one poster legibly — a solution is in progress."
|
||
}
|