From bd75f609da553d8edb72dc268fa89fc19f296fd5 Mon Sep 17 00:00:00 2001
From: doxa-maps-88655c70
<88627970+doxa-maps-88655c70@users.noreply.github.com>
Date: Fri, 25 Sep 2026 21:11:38 +0000
Subject: [PATCH 1/4] Arabic: their people-group vocabulary, and the list leaf
reads ?lang= too
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Two defects, both invisible to an English diff because both sides were English.
1. THE LIST LEAF NEVER GOT THE ?lang= FIX. I repaired languageCode in
region-dashboards.vue and stopped; regions-list.vue has the same computed and the
same comment block describing the same defect, and it still read only props and
profile-config. So a shared /regions-list/?lang=ar link rendered "المناطق" as its
heading and then listed all 41 countries as "Angola", "Benin", "Cameroon".
2. OUR ARABIC WAS NOT THEIRS. Ten strings used vocabulary doxa.life does not use:
"مجموعة بشرية" where they say "مجموعة شعبية" for a people group, "مُخْدُومَة"
where they vowelise it "مَخْدُومَة", and for unengaged an invented
"غير مبشرة" / "الهدف هو القضاء على…" where they simply say "غير مَخْدُومَة".
Each replacement is a string read off their live /ar/ pages in this session, with
our placeholders re-inserted where their rendered page carried the values —
copied, not translated, which is what the brief asks for and what I can defend.
MEASURED, by the census in Arabic: 190 unaccounted additions and 8 omissions
before, 9 and 8 after the leaf fix, 0 and 0 after the vocabulary. The English
census reported a perfect clone throughout, which is exactly why the locale
dimension was worth running.
The sanctioned list now resolves through our own catalogue, so a permission
granted in English is the same permission in Arabic: "عرض ملصقات الدولة" is
recognised as the Driver's country-poster toggle instead of being reported as an
invention. Hardcoding its Arabic would only have moved the problem to zh.
Also repaired every probe URL for the dx-maps rename — 180 paths across 153 files
were still pointing at /doxa-maps/, which now 404s, so the whole measurement
apparatus was aimed at a tree that no longer exists. Replaced only the
slash-delimited segment, leaving doxa-maps-spa and the repo URL untouched, and
proved the repair by re-running the English census to its known-good baseline
before trusting anything else.
Built ONLY regions-dashboard (rule 5: studio owns the full build). This touches
library/i18n/locales/ar/regions.json, so other bundles need a consumer rebuild —
messaging studio with the sha.
---
library/i18n/locales/ar/regions.json | 20 +++++-----
.../regions-dashboard/regions-list.vue | 11 ++++-
public/dx-maps/doxa-maps-spa/manifest.json | 8 ++--
public/dx-maps/index.html | 2 +-
public/dx-maps/manifest.json | 8 ++--
.../region-dashboards/index.html | 2 +-
.../regions-dashboard/regions-dashboard.js | 40 +++++++++----------
.../regions-dashboard/regions-list/index.html | 2 +-
.../regions-dashboard/regions-mfe/index.html | 2 +-
9 files changed, 51 insertions(+), 44 deletions(-)
diff --git a/library/i18n/locales/ar/regions.json b/library/i18n/locales/ar/regions.json
index 30fb8ae77..d20802f88 100644
--- a/library/i18n/locales/ar/regions.json
+++ b/library/i18n/locales/ar/regions.json
@@ -1,6 +1,6 @@
{
"%count% people groups in %countries% countries": "%count% مجموعة شعبية في %countries% دولة",
- "%region% has %count% people groups across %countries% countries. Each pin is coloured by how many people are praying for that people group.": "تضم %region% %count% مجموعة بشرية في %countries% دولة. يشير لون كل نقطة إلى عدد الأشخاص الذين يصلّون من أجل تلك المجموعة البشرية.",
+ "%region% has %count% people groups across %countries% countries. Each pin is coloured by how many people are praying for that people group.": "تضم %region% %count% مجموعة شعبية في %countries% دولة. يشير لون كل نقطة إلى عدد الأشخاص الذين يصلّون من أجل تلك المجموعة الشعبية.",
"1+ People Praying": "شخص واحد أو أكثر يصلّي",
"100+ People Praying": "أكثر من 100 شخص يصلّون",
"Adopted": "متبنَّاة",
@@ -12,11 +12,11 @@
"Countries": "الدول",
"Countries in this region": "الدول في هذه المنطقة",
"Country": "الدولة",
- "Engaged": "مُخْدُومَة",
+ "Engaged": "مَخْدُومَة",
"Engagement Progress": "تقدُّم الانخراط",
- "Every unengaged people group adopted by a church committed to prayer, giving, and sending": "كل مجموعة بشرية غير مبشرة تتبناها كنيسة ملتزمة بالصلاة والعطاء والإرسال",
+ "Every unengaged people group adopted by a church committed to prayer, giving, and sending": "كل مجموعة شعبية غير مَخْدُومَة تتبنّاها كنيسة ملتزمة بالصلاة والعطاء والإرسال",
"Exact Search": "بحث دقيق",
- "Find unreached people groups by region and country.": "ابحث عن المجموعات البشرية غير المُبلَّغة حسب المنطقة والدولة.",
+ "Find unreached people groups by region and country.": "ابحث عن المجموعات الشعبية غير المبلَّغة حسب المنطقة والدولة.",
"Full Profile": "الملف الكامل",
"Goal": "الهدف",
"Hide Filters": "إخفاء المرشحات",
@@ -25,18 +25,18 @@
"Load More": "تحميل المزيد",
"Loading results...": "النتائج قيد التحميل...",
"Map": "الخريطة",
- "Mobilize 100+ people praying daily for each DOXA people group": "حشد أكثر من 100 شخص للصلاة يوميًا من أجل كل مجموعة بشرية من مجموعات دوكسا",
+ "Mobilize 100+ people praying daily for each DOXA people group": "حشد أكثر من 100 شخص للصلاة يوميًا من أجل كل مجموعة شعبية من مجموعات دوكسا",
"No One Praying": "لا أحد يصلّي",
"No options found": "لم يتم العثور على أي خيارات",
"No poster has been generated for this country yet.": "لم يُنشأ أي ملصق لهذه الدولة بعد.",
- "No unengaged people groups by 2033": "الهدف هو القضاء على جميع الشعوب الغير مخدومة روحيا بحلول عام 2033",
+ "No unengaged people groups by 2033": "لا مجموعات شعبية غير مَخْدُومَة بحلول عام 2033",
"Not Adopted": "لم يتم انتماؤه",
"Other": "أخرى",
"Page Not Found": "الصفحة غير موجودة",
- "People Group": "مجموعة بشرية",
+ "People Group": "مجموعة شعبية",
"People Groups": "مجموعات شعبية",
"People committed to praying": "الأشخاص الذين التزموا بالصلاة",
- "Pick a region above, or click any dot to open that people group's country.": "اختر منطقة أعلاه، أو انقر على أي نقطة لفتح دولة تلك المجموعة البشرية.",
+ "Pick a region above, or click any dot to open that people group's country.": "اختر منطقة أعلاه، أو انقر على أي نقطة لفتح دولة تلك المجموعة الشعبية.",
"Pick a region or a country on the Regions List tab to narrow this dashboard.": "اختر منطقة أو دولة من تبويب قائمة المناطق لتضييق نطاق لوحة المعلومات هذه.",
"Population": "عدد السكان",
"Prayer Coverage": "تغطية الصلاة",
@@ -52,7 +52,7 @@
"Select": "اختر",
"Select View": "اختر العرض",
"Show Filters": "إظهار عوامل التصفية",
- "There are %count% people groups in %country%. Check the map for the people groups on the border of this country as well.": "توجد %count% مجموعات بشرية في %country%. تحقق من الخريطة لمعرفة المجموعات البشرية الواقعة على حدود هذه الدولة أيضًا.",
+ "There are %count% people groups in %country%. Check the map for the people groups on the border of this country as well.": "توجد %count% مجموعة شعبية في %country%. تحقق من الخريطة لمعرفة المجموعات الشعبية الواقعة على حدود هذه الدولة أيضًا.",
"Total": "المجموع",
"Type to search...": "اكتب ما تريد البحث عنه...",
"Unengaged people groups": "المجموعات الشعبية غير المَخْدُومَة",
@@ -61,7 +61,7 @@
"WAGF Block": "كتلة WAGF",
"WAGF Region": "منطقة WAGF",
"people groups adopted": "مجموعات شعبية متبنَّاة",
- "people groups engaged": "مجموعات شعبية مُخْدُومَة",
+ "people groups engaged": "مجموعات شعبية مَخْدُومَة",
"Outside this region": "خارج هذه المنطقة",
"Pray": "صلّي",
"Loading region dashboards…": "جارٍ تحميل لوحات المناطق…",
diff --git a/plugin-designs/regions-dashboard/regions-list.vue b/plugin-designs/regions-dashboard/regions-list.vue
index 0f43cb229..552eb49d8 100644
--- a/plugin-designs/regions-dashboard/regions-list.vue
+++ b/plugin-designs/regions-dashboard/regions-list.vue
@@ -45,7 +45,7 @@ import { useRegionsI18n } from './src/useRegionsI18n.js'
// ar renders right-to-left. RTL_LOCALES is the shared set and :dir on our own root is the
// house pattern (doxa-simple-map.vue:18, :246, :1346) — an EMBEDDED element must not reach for
// document.documentElement.dir, which belongs to the host page.
-import { RTL_LOCALES } from '@map/i18n/index.js'
+import { RTL_LOCALES, localeFromUrl } from '@map/i18n/index.js'
import { useI18n } from 'vue-i18n'
import { useDocumentFont, BEBAS_NEUE_FACES, POPPINS_FACES, FIGTREE_FACES, OSWALD_FACES } from '@map/composables/useDocumentFont.js'
import { summarizeRegions, PEOPLE_GROUP_LIST_FIELDS } from '@map/utils/countries-meta.js'
@@ -100,8 +100,15 @@ const prayBaseUrl = computed(() => props.prayBaseUrl || cfg.value.prayBaseUrl |
// English, because this read only cfg.languageCode while the locale arrives as
// cfg.locale (ProfileLoader's contract, ProfileLoader.vue:156 accepts locale OR lang).
// Falling through to the same keys means translating the chrome also translates the data.
+// ★ AND THE URL, LAST — the same fix region-dashboards.vue got, on the leaf that did not get it.
+// I fixed the dashboard leaf and stopped, and the ENGLISH census could not see what was left:
+// its ours-vs-theirs sets matched because both sides were in English. The ARABIC census found it
+// on the first run — our h1 and subtitle rendered "المناطق" while all 41 country names in the
+// table stayed "Angola", "Benin", "Cameroon". A shared /regions-list/?lang=ar link translated the
+// chrome and then asked the prayer API in English, which is the defect this comment block already
+// describes; it was only ever half fixed.
const languageCode = computed(() =>
- props.languageCode || cfg.value.languageCode || cfg.value.locale || cfg.value.lang || '')
+ props.languageCode || cfg.value.languageCode || cfg.value.locale || cfg.value.lang || localeFromUrl() || '')
// Where the shared asset tree is served from: the generator bakes it per page depth and the
// composite forwards it via INHERITED_PAGE_KEYS. Needed for the vendored @font-face path below.
const assetsBase = computed(() => cfg.value.assetsBase || './assets')
diff --git a/public/dx-maps/doxa-maps-spa/manifest.json b/public/dx-maps/doxa-maps-spa/manifest.json
index bc547599d..dbb769492 100644
--- a/public/dx-maps/doxa-maps-spa/manifest.json
+++ b/public/dx-maps/doxa-maps-spa/manifest.json
@@ -888,7 +888,7 @@
"bundle": "regions-dashboard",
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"output": "dx-maps/regions-dashboard/regions-dashboard.js",
- "integrity": "sha384-5G+7nF+x4ahzcEEJIAod2y5rTxV+dMK2o8Svn+oaFjxI896QlwFgcEDrZBVSL2R9",
+ "integrity": "sha384-J3f1oK59LwH8ErsviA/aZOxsq4BtQmhHOJlE9vjv//ZCsQ3DYALJdntPGP2+9DXE",
"elements": [
"regions-dashboard"
],
@@ -908,7 +908,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "",
- "script": "\n\n\n\n