Commit graph

18 commits

Author SHA1 Message Date
corsacca
516620bfa9 finish ro translation 2026-09-18 20:32:35 +01:00
corsacca
86abef3420 update hi ro and ru translations 2026-09-18 19:59:44 +01:00
corsacca
57f35d12b4 add the Chinese site, terms edition and map locale from the glossary
- 300-key zh/common.json, built on 族群 / 未接触 / 已接触 / 认领 and the
  和合本 (CUNPS) wording for Revelation 5:9 and 7:9
- terms/zh.ts with all 20 entries, recording the alternatives rejected and
  why 接触 was kept where the other five languages chose an active-work word
- map locale: 民族群体 → 族群, 参与 → 接触, 亲缘板块 → 亲缘集团, and the
  legend's missing header.default; bundles rebuilt and the profile-less
  pplr-data-maps literals patched to match
- nativeName 简体中文, from the glossary record
- Romanian back to enabled: false — it was switched on with no locale file,
  and the missing common.json crashed the Nuxt build for every language
2026-09-18 16:16:46 +01:00
corsacca
55b21dcd80 Enable all languages 2026-09-18 15:50:26 +01:00
corsacca
a994baec4f read the glossary from pray.doxa.life instead of a vendored file
config/glossaries.ts was generated from the retired translation repo's DeepL
TSVs, so it had no source left and only the German, Spanish and Portuguese
rows had been hand-patched. Both it and its build script are gone.

- fetch GET /api/glossary/{lang} at runtime, cached ten minutes, serving the
  last good answer when the request fails and an empty one when it never
  succeeded. A reviewer's correction now reaches auto-translate without a
  deploy here
- carry the glossary's notes as well as its terms: register, acronym policy
  and number format, placed after the term list so a rule about inflection
  governs the pairs above it
- glossary_used on the MCP translate tool now means the locale's terminology
  was available, and reads false for a language whose glossary has not been
  started
- add /add-language and /sync-language skills for the site strings, the map
  widget locales and bundles, the /terms edition, and the CMS pages
2026-09-18 10:06:13 +01:00
corsacca
10f63df2eb align the Portuguese site with the reviewed glossary
- site locale: glossary terms plus the DeepL defects the reviewer never saw
- map legend locales and the three bundles: Não engajado/Engajado, Grupo étnico, PNANEs
- MT glossary pt rows regenerated; Portuguese /terms edition added
2026-09-17 15:38:35 +01:00
corsacca
743714b21a align the Spanish site with the reviewed glossary
- glossary terms only, on top of the human-reviewed Spanish: unengaged is
  "no comprometido", UUPG "GENANC", under-engaged "poco comprometido",
  frontier "grupo fronterizo", cross-cultural workers "obreros
  transculturales", gospel access "acceso al evangelio", champion "defensor"
- fix DeepL leftovers the reviewer never saw: "personas solteras" for
  unengaged, "Reza por ellos", "Alianza Global para los No Comprometidos",
  "DOXA Vida", "Aprobado" for adopted, "iglesia de acogida", "Si"
- add the Spanish /terms edition and register it
- update the Spanish map legend and rebuild the two active bundles; the
  legacy research bundle has no build profile, so its literals are patched
- regenerate the Spanish rows of the machine-translation glossary
2026-09-17 13:50:21 +01:00
corsacca
0418c1e8b7 fix the French name of the WAGF: Fraternité, not Association
- the /terms French edition now lists "Fraternité Mondiale des Assemblées
  de Dieu (WAGF)" and demotes "Association mondiale…" to a rejected
  alternative, with the rationale that "fraternité" renders "fellowship"
- same row in the French machine-translation glossary so auto-translated
  content uses the right name; the source TSV in the translation repo
  still needs the matching edit before the glossary is next regenerated
- the three live French CMS pages that name the WAGF (about, statement of
  faith, vision) were corrected through the CMS and are not in git
2026-09-17 13:06:45 +01:00
corsacca
873c0c9cea fix lint style errors in the language config 2026-09-17 12:20:33 +01:00
corsacca
5651aac6fd show German in the public language switcher 2026-09-17 12:19:42 +01:00
corsacca
ab1244a230 align the German site with the reviewed glossary
- glossary terms only, on top of the human-reviewed German: unengaged is
  "unberührt", UUPG "völlig unerreichte Volksgruppe (VUVG)", under-engaged
  "am wenigsten erreicht", engagement "missionarische Arbeit vor Ort",
  intercessors "Fürbitter/innen", people group "Volksgruppe" everywhere
- fix leftovers that were never translation choices: "Über Zúme", "DOXA
  Leben", "unverheiratet" for unengaged, "Gebetsberichterstattung"
- add the German /terms edition and replace the retired 24-hour prayer
  coverage entry with daily prayer in the English and French editions
- update the German map legend and rebuild the two active bundles; the
  legacy research bundle has no build profile, so its literals are patched
- regenerate the German rows of the machine-translation glossary
2026-09-17 12:16:25 +01:00
corsacca
7dfad0ee07 replace deepl with llm translation via openrouter
- translateText/translateTexts call OpenRouter chat-completions; glossary
  terms are prompt-injected from config/glossaries.ts, generated from the
  translation repo's TSVs by scripts/build-glossaries.ts
- model resolution: per-language override in config/languages.ts →
  translation.model site setting (new admin field) → TRANSLATION_MODEL env
  → anthropic/claude-opus-5, at low reasoning effort
- blank fragments are held back from the model, which drops them and breaks
  the one-translation-per-fragment count the caller maps results back on
- OpenRouter failures map to a typed error with a human-readable message;
  an unrecoverable one (no credits, bad key, rejected model) stops the run
  instead of repeating the same call for every remaining locale
- machine translations record source 'auto-translate'; 'deepl' stays
  readable for snapshots written before the switch
2026-09-07 16:30:48 +01:00
corsacca
eae6143be1
Replace country pages with region dashboards (#23)
* replace country pages with region dashboards

- move /countries to /regions, with 301 redirects from the old URLs in
  every locale
- add a region dashboard: a map of the region's countries with pins
  coloured by prayer coverage, headline figures, and prayer, adoption and
  engagement progress against the DOXA goals, plus a per-country table
- roll up progress stats per country and region in the shared summary
  and serve them from /api/regions
- frame region maps with antimeridian-aware bounds
- add Regions to the hamburger menu and translate the new strings in all
  eight locales

* put each region on the regions index in a card with a header band

The region name links to its dashboard with the site's chevron icon, and
the people-group and country counts sit centred beside it on a brand-green
header; the country list is the padded white card body.
2026-09-07 11:49:24 +01:00
corsacca
ea5406c0e9 add per-country pages with dedicated highlight map
add /countries index grouped by WAGF region and /countries/[country] pages
derive countries from prayer API (slug, count, map center/zoom) via config/countries-meta and /api/countries
prerender country routes for all locales via modules/country-routes
add CountryMap component: highlight focus country, brand-green in-country pins, muted border pins, popups
show bold green note above the map stating people-group count
lock UupgsList to a country and link card country names to country pages
add i18n keys for the new strings
2026-06-15 12:09:44 +01:00
corsacca
137c2cb26d enable /hi and /de pages 2026-05-27 11:55:23 +01:00
corsacca
05ae7dc78d Only load Latin font for Latin languages 2026-05-21 10:08:06 +01:00
corsacca
b2c7b22aa1 phase 6 2026-04-21 15:39:53 +01:00
corsacca
d21f4e82c0 phase 2 2026-04-21 13:27:38 +01:00