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] 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" + "script": "\n\n\n\n" } }, { @@ -922,7 +922,7 @@ "scriptUrl": "./regions-dashboard/regions-dashboard.js", "embed": { "iframe": "", - "script": "\n\n" + "script": "\n\n" } }, { @@ -936,7 +936,7 @@ "scriptUrl": "./regions-dashboard/regions-dashboard.js", "embed": { "iframe": "", - "script": "\n\n\n\n" + "script": "\n\n\n\n" } } ] diff --git a/public/dx-maps/index.html b/public/dx-maps/index.html index 979d49c5b..f50a3e199 100644 --- a/public/dx-maps/index.html +++ b/public/dx-maps/index.html @@ -14,6 +14,6 @@ - + diff --git a/public/dx-maps/manifest.json b/public/dx-maps/manifest.json index bc547599d..dbb769492 100644 --- a/public/dx-maps/manifest.json +++ b/public/dx-maps/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" + "script": "\n\n\n\n" } }, { @@ -922,7 +922,7 @@ "scriptUrl": "./regions-dashboard/regions-dashboard.js", "embed": { "iframe": "", - "script": "\n\n" + "script": "\n\n" } }, { @@ -936,7 +936,7 @@ "scriptUrl": "./regions-dashboard/regions-dashboard.js", "embed": { "iframe": "", - "script": "\n\n\n\n" + "script": "\n\n\n\n" } } ] diff --git a/public/dx-maps/regions-dashboard/region-dashboards/index.html b/public/dx-maps/regions-dashboard/region-dashboards/index.html index 3a1f06138..394cebb16 100644 --- a/public/dx-maps/regions-dashboard/region-dashboards/index.html +++ b/public/dx-maps/regions-dashboard/region-dashboards/index.html @@ -29,7 +29,7 @@ - + - + - +