From 126ee066195e5ffdee0e6499562015c22736c243 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Tue, 29 Sep 2026 04:22:24 +0000 Subject: [PATCH] Translate the research map's legend tab explanations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The legend gives each tab a small "i" button explaining what that tier means — what an Affinity Block is, how a people group differs from a people group in a country. SemanticTreeLegend already read that text from legend.tabInfo. behind a te() guard, and not one of the ten keys the research map needs had ever been written. The tab chips were translated in all eleven locales and the explanations beside them were not, so the reader least able to guess what "PGIC" means was the one reader who got it in English. The keys are written for all eleven locales, following the terminology each catalogue already uses for these same tiers — People Group as Volksgruppe, Peuple, Pueblo, 民族, Народ, जनसमूह — with WAGF and UPG left untransliterated as the corpus leaves them. The reader-facing text drops the source field names and row counts that the English carried; those are notes for whoever maintains the tables, so they stay in the source as a comment. With the keys in place the English in the tab tables can never render, and a second copy of a string drifts from the catalogue without anyone noticing, so it is removed. `info: true` stays because the legend gates the "i" button on that field being set — dropping it would have removed the affordance instead of translating it — and tabInfo now treats only a string as a fallback, so the flag cannot reach the popover as the word "true". Verified every changed tab renders a real label and a real explanation in all eleven locales. check:i18n-parity, check:i18n-never-translated and check:i18n-treeshake pass; hardcoded-english 205 -> 190. --- .../components/legends/SemanticTreeLegend.vue | 6 ++- library/i18n/locales/ar/legend.json | 13 ++++-- library/i18n/locales/de/legend.json | 13 ++++-- library/i18n/locales/en/legend.json | 13 ++++-- library/i18n/locales/es/legend.json | 13 ++++-- library/i18n/locales/fr/legend.json | 13 ++++-- library/i18n/locales/hi/legend.json | 13 ++++-- library/i18n/locales/it/legend.json | 13 ++++-- library/i18n/locales/pt/legend.json | 13 ++++-- library/i18n/locales/ro/legend.json | 13 ++++-- library/i18n/locales/ru/legend.json | 13 ++++-- library/i18n/locales/zh/legend.json | 13 ++++-- .../doxa-research-map/research-map.vue | 45 ++++++++++--------- 13 files changed, 140 insertions(+), 54 deletions(-) diff --git a/library/components/legends/SemanticTreeLegend.vue b/library/components/legends/SemanticTreeLegend.vue index ec315d13a..715f99847 100644 --- a/library/components/legends/SemanticTreeLegend.vue +++ b/library/components/legends/SemanticTreeLegend.vue @@ -76,7 +76,11 @@ function tabLabel(tab) { // blank. PER KEY, so a half-finished translation shows its finished entries. function tabInfo(tab) { const key = 'legend.tabInfo.' + (tab?.i18nKey || tab?.id) - return tab && te(key) ? t(key) : (tab?.info ?? '') + if (tab && te(key)) return t(key) + // `info` doubles as a FLAG on tabs whose text has moved into the catalogue (`info: true` marks + // "this tab has an explanation" for the button's v-if). Only a string is a fallback; anything + // else would otherwise render as the word "true" in the popover. + return typeof tab?.info === 'string' ? tab.info : '' } const props = defineProps({ diff --git a/library/i18n/locales/ar/legend.json b/library/i18n/locales/ar/legend.json index 0af31a079..7828b20c9 100644 --- a/library/i18n/locales/ar/legend.json +++ b/library/i18n/locales/ar/legend.json @@ -61,9 +61,16 @@ "upg100Region": "المنطقة — ترتّب قوائم UPG-100 حسب منطقة العالم (أفريقيا، الهند، الشرق الأوسط، الصمّ، …). الأعداد هي مجموع UUPG والسكان لكل قائمة تحتها.", "upg100Zone": "قوائم UPG-100 — كل واحدة هي قائمة صلاة للشعوب غير الموصول إليها في منطقة ما، وهي ما ترسمه الخريطة وتلوّنه. تُطبع كل قائمة ككُتيّب خاص بها.", "upg100Group": "مجموعة شعبية — المجموعات غير الموصول إليها داخل القائمة، الأكثر حاجة للصلاة أولاً. كل نقطة على الخريطة هي واحدة منها.", - "region": "منطقة كبرى في WAGF (مثل «آسيا» و«أفريقيا»). مميّزة بلون على الخريطة.", - "block": "كتلة WAGF — التقسيم التنظيمي الفرعي داخل كل منطقة (مثل «جنوب شرق آسيا» و«غرب أفريقيا»).", - "country": "الدول منفردةً، مرتّبة داخل كتلتها بحسب حجم السكان غير المبلَّغين." + "family": "عائلة اللغة — مجموعة لغات منحدرة من أصل مشترك (مثل الهندية الأوروبية، الأفروآسيوية).", + "language": "اللغة — نظام تواصل يستخدمه شعب ما (مثل العربية، البنغالية، الهندية).", + "dialect": "اللهجة/التنوع — صورة إقليمية أو اجتماعية للغة (مثل العربية السودانية؛ لغة الإشارة الباكستانية).", + "bloc": "كتلة التقارب — أوسع تجميع، بحسب القرابة الثقافية واللغوية والجغرافية (مثل الشعوب الملايوية، شعوب جنوب آسيا، الصمّ، العالم العربي).", + "cluster": "المجموعة — تجميع أدقّ داخل الكتلة (مثل بورنيو-كاليمانتان ضمن الشعوب الملايوية). تُوسم الصفوف بـ «(مجموعة)» لتمييزها عن الشعوب.", + "group": "الشعب — هوية إثنية لغوية قائمة بذاتها، مستقلة عن الدولة. تُوسم الصفوف بـ «(شعب)». وقد يعيش الشعب الواحد في دول كثيرة (الصمّ مثلًا في أكثر من مئة دولة).", + "pgic": "الشعب في الدولة — صف لكل شعب في كل دولة يعيش فيها (مثل «أباي سونغاي، ماليزيا»). تُوسم الصفوف بـ «(شعب في دولة)».", + "region": "منطقة WAGF — المنطقة الكبرى التي تنتمي إليها الدولة (مثل آسيا، أفريقيا). لكل منها لون خاص على الخريطة.", + "block": "كتلة WAGF — التجميع الفرعي داخل المنطقة (مثل جنوب شرق آسيا، غرب أفريقيا).", + "country": "الدولة — الدول منفردة، مرتّبة حسب عدد السكان غير الموصول إليهم داخل كتلتها." }, "a11y": { "expandRow": "توسيع {label}", diff --git a/library/i18n/locales/de/legend.json b/library/i18n/locales/de/legend.json index b37cdc4f7..8915cf4d6 100644 --- a/library/i18n/locales/de/legend.json +++ b/library/i18n/locales/de/legend.json @@ -61,9 +61,16 @@ "upg100Region": "Region — sortiert die UPG-100-Listen nach Weltgegend (Afrika, Indien, Naher Osten, Gehörlose, …). Die Zahlen sind die UUPGs und die Bevölkerung aller darunterliegenden Listen zusammen.", "upg100Zone": "UPG-100-Listen — jede ist eine Gebetsliste der unerreichten Volksgruppen eines Gebiets und das, was die Karte zeichnet und einfärbt. Jede Liste wird als eigenes Heft gedruckt.", "upg100Group": "Volksgruppe — die einzelnen unerreichten Gruppen innerhalb einer Liste, größter Gebetsbedarf zuerst. Jeder Kartenpunkt ist eine davon.", - "region": "WAGF-Großregion (z. B. „Asien“, „Afrika“). Auf der Karte farbig markiert.", - "block": "WAGF-Block — die organisatorische Untergruppe innerhalb jeder Region (z. B. „Südostasien“, „Westafrika“).", - "country": "Einzelne Länder, innerhalb ihres Blocks nach der Größe der unerreichten Bevölkerung geordnet." + "family": "Sprachfamilie — eine Gruppe von Sprachen gemeinsamen Ursprungs (z. B. indogermanisch, afroasiatisch).", + "language": "Sprache — ein Verständigungssystem, das eine Volksgruppe verwendet (z. B. Arabisch, Bengalisch, Hindi).", + "dialect": "Dialekt/Varietät — eine regionale oder soziale Form einer Sprache (z. B. sudanesisches Arabisch; pakistanische Gebärdensprache).", + "bloc": "Affinitätsblock — die weiteste Gruppierung, nach kultureller, sprachlicher und geografischer Verwandtschaft (z. B. malaiische Völker, südasiatische Völker, Gehörlose, arabische Welt).", + "cluster": "Cluster — eine feinere Gruppierung innerhalb eines Blocks (z. B. Borneo-Kalimantan bei den malaiischen Völkern). Zeilen sind mit „(Cluster)“ gekennzeichnet, um sie von Volksgruppen zu unterscheiden.", + "group": "Volksgruppe — eine ethnolinguistische Identität für sich, unabhängig vom Land. Zeilen sind mit „(VG)“ gekennzeichnet. Eine Gruppe kann in vielen Ländern leben (Gehörlose etwa in über hundert).", + "pgic": "Volksgruppe im Land — eine Zeile je Volksgruppe und Land, in dem sie lebt (z. B. „Abai Sungai, Malaysia“). Zeilen sind mit „(VGL)“ gekennzeichnet.", + "region": "WAGF-Region — die Großregion, zu der ein Land gehört (z. B. Asien, Afrika). Jede hat auf der Karte ihre eigene Farbe.", + "block": "WAGF-Block — die Untergruppe innerhalb einer Region (z. B. Südostasien, Westafrika).", + "country": "Land — einzelne Länder, geordnet nach unerreichter Bevölkerung innerhalb ihres Blocks." }, "a11y": { "expandRow": "{label} ausklappen", diff --git a/library/i18n/locales/en/legend.json b/library/i18n/locales/en/legend.json index ed03027a3..8d1a3c280 100644 --- a/library/i18n/locales/en/legend.json +++ b/library/i18n/locales/en/legend.json @@ -61,9 +61,16 @@ "upg100Region": "Region — sort the UPG-100 lists by world area (Africa, India, Middle East, Deaf, …). Counts are the UUPGs and population summed across every list beneath it.", "upg100Zone": "UPG-100 Lists — each one is a prayer list of the unreached people groups in an area, and is what the map paints and colours. Every list prints as its own packet.", "upg100Group": "People Group — the individual unreached groups inside a list, largest prayer need first. Each map dot is one of these.", - "region": "WAGF macro-region (e.g. \"Asia\", \"Africa\"). Color-coded on the map.", - "block": "WAGF bloc — the organizational sub-grouping within each region (e.g. \"South East Asia\", \"West Africa\").", - "country": "Individual countries, listed by unreached-population size within their bloc." + "family": "Lang Family — a group of languages descended from a common ancestor (e.g. Indo-European, Afro-Asiatic).", + "language": "Language — a system of communication used by a people (e.g. Arabic, Bengali, Hindi).", + "dialect": "Dialect/Variety — a regional or social form of a language (e.g. Arabic, Sudanese; Pakistan Sign Language).", + "bloc": "Affinity Block — the broadest grouping, by cultural, linguistic and geographic kinship (e.g. Malay Peoples, South Asian Peoples, Deaf, Arab World).", + "cluster": "Cluster — a finer grouping inside a block (e.g. Borneo-Kalimantan within Malay Peoples). Rows are marked “(Cluster)” to tell them from people groups.", + "group": "People Group — an ethnolinguistic identity on its own terms, independent of country. Rows are marked “(PG)”. One group may live in many countries (the Deaf, for example, in over a hundred).", + "pgic": "PG in Country — one row for each people group in each country it lives in (e.g. “Abai Sungai, Malaysia”). Rows are marked “(PGIC)”.", + "region": "WAGF Region — the macro-region a country belongs to (e.g. Asia, Africa). Each has its own colour on the map.", + "block": "WAGF Bloc — the sub-grouping inside a region (e.g. South East Asia, West Africa).", + "country": "Country — individual countries, ordered by unreached population within their bloc." }, "a11y": { "expandRow": "Expand {label}", diff --git a/library/i18n/locales/es/legend.json b/library/i18n/locales/es/legend.json index 65f06474d..43c3fdb41 100644 --- a/library/i18n/locales/es/legend.json +++ b/library/i18n/locales/es/legend.json @@ -61,9 +61,16 @@ "upg100Region": "Región — ordena las listas UPG-100 por área mundial (África, India, Oriente Medio, Sordos, …). Los totales son los UUPG y la población sumados de todas las listas que contiene.", "upg100Zone": "Listas UPG-100 — cada una es una lista de oración de los grupos étnicos no alcanzados de un área, y es lo que el mapa pinta y colorea. Cada lista se imprime como su propio paquete.", "upg100Group": "Grupo étnico — los grupos no alcanzados dentro de una lista, primero los de mayor necesidad de oración. Cada punto del mapa es uno de ellos.", - "region": "Macrorregión WAGF (p. ej., «Asia», «África»). Con color propio en el mapa.", - "block": "Bloque WAGF: la subdivisión organizativa dentro de cada región (p. ej., «Sudeste Asiático», «África Occidental»).", - "country": "Países individuales, ordenados dentro de su bloque según el tamaño de su población no alcanzada." + "family": "Familia lingüística — un conjunto de lenguas procedentes de un antepasado común (p. ej. indoeuropea, afroasiática).", + "language": "Idioma — un sistema de comunicación que usa un pueblo (p. ej. árabe, bengalí, hindi).", + "dialect": "Dialecto/Variedad — una forma regional o social de una lengua (p. ej. árabe sudanés; lengua de señas pakistaní).", + "bloc": "Bloque de afinidad — la agrupación más amplia, por parentesco cultural, lingüístico y geográfico (p. ej. pueblos malayos, pueblos del sur de Asia, sordos, mundo árabe).", + "cluster": "Clúster — una agrupación más fina dentro de un bloque (p. ej. Borneo-Kalimantan entre los pueblos malayos). Las filas llevan «(clúster)» para distinguirlas de los pueblos.", + "group": "Pueblo — una identidad etnolingüística en sí misma, independiente del país. Las filas llevan «(pueblo)». Un mismo pueblo puede vivir en muchos países (los sordos, por ejemplo, en más de cien).", + "pgic": "Pueblo en país — una fila por cada pueblo en cada país donde vive (p. ej. «Abai Sungai, Malasia»). Las filas llevan «(pueblo en país)».", + "region": "Región WAGF — la macrorregión a la que pertenece un país (p. ej. Asia, África). Cada una tiene su color en el mapa.", + "block": "Bloque WAGF — la subdivisión dentro de una región (p. ej. Sudeste Asiático, África Occidental).", + "country": "País — los países uno a uno, ordenados por población no alcanzada dentro de su bloque." }, "a11y": { "expandRow": "Expandir {label}", diff --git a/library/i18n/locales/fr/legend.json b/library/i18n/locales/fr/legend.json index cda3ac0c4..a20e90204 100644 --- a/library/i18n/locales/fr/legend.json +++ b/library/i18n/locales/fr/legend.json @@ -61,9 +61,16 @@ "upg100Region": "Région — trie les listes UPG-100 par zone du monde (Afrique, Inde, Moyen-Orient, Sourds, …). Les totaux sont les UUPG et la population additionnés sur toutes les listes qu’elle contient.", "upg100Zone": "Listes UPG-100 — chacune est une liste de prière des groupes de peuples non atteints d’une zone, et c’est ce que la carte dessine et colore. Chaque liste s’imprime comme son propre livret.", "upg100Group": "Groupe de peuples — les groupes non atteints au sein d’une liste, les plus grands besoins de prière en premier. Chaque point de la carte en est un.", - "region": "Macro-région WAGF (p. ex. « Asie », « Afrique »). Colorée sur la carte.", - "block": "Bloc WAGF — le sous-groupe organisationnel de chaque région (p. ex. « Asie du Sud-Est », « Afrique de l’Ouest »).", - "country": "Pays, classés au sein de leur bloc selon la taille de leur population non atteinte." + "family": "Famille linguistique — un ensemble de langues issues d’un ancêtre commun (p. ex. indo-européen, afro-asiatique).", + "language": "Langue — un système de communication employé par un peuple (p. ex. arabe, bengali, hindi).", + "dialect": "Dialecte/Variété — une forme régionale ou sociale d’une langue (p. ex. arabe soudanais ; langue des signes pakistanaise).", + "bloc": "Bloc d’affinité — le regroupement le plus large, selon la parenté culturelle, linguistique et géographique (p. ex. peuples malais, peuples d’Asie du Sud, Sourds, monde arabe).", + "cluster": "Grappe — un regroupement plus fin à l’intérieur d’un bloc (p. ex. Bornéo-Kalimantan parmi les peuples malais). Les lignes portent « (grappe) » pour les distinguer des peuples.", + "group": "Peuple — une identité ethnolinguistique en elle-même, indépendante du pays. Les lignes portent « (peuple) ». Un même peuple peut vivre dans de nombreux pays (les Sourds, par exemple, dans plus de cent).", + "pgic": "Peuple dans le pays — une ligne par peuple et par pays où il vit (p. ex. « Abai Sungai, Malaisie »). Les lignes portent « (peuple dans le pays) ».", + "region": "Région WAGF — la macro-région dont relève un pays (p. ex. Asie, Afrique). Chacune a sa couleur sur la carte.", + "block": "Bloc WAGF — le sous-ensemble à l’intérieur d’une région (p. ex. Asie du Sud-Est, Afrique de l’Ouest).", + "country": "Pays — les pays un à un, classés par population non atteinte au sein de leur bloc." }, "a11y": { "expandRow": "Développer {label}", diff --git a/library/i18n/locales/hi/legend.json b/library/i18n/locales/hi/legend.json index b07b80544..1ee8a4fd4 100644 --- a/library/i18n/locales/hi/legend.json +++ b/library/i18n/locales/hi/legend.json @@ -61,9 +61,16 @@ "upg100Region": "क्षेत्र — UPG-100 सूचियों को विश्व क्षेत्र के अनुसार क्रमित करता है (अफ़्रीका, भारत, मध्य पूर्व, बधिर, …)। संख्याएँ उसके नीचे की हर सूची के UUPG और जनसंख्या का योग हैं।", "upg100Zone": "UPG-100 सूचियाँ — हर एक किसी क्षेत्र के अनपहुँचे जनसमूहों की प्रार्थना सूची है, और यही मानचित्र बनाता और रंगता है। हर सूची अपने अलग पैकेट के रूप में छपती है।", "upg100Group": "जनसमूह — किसी सूची के भीतर के अलग-अलग अनपहुँचे समूह, सबसे बड़ी प्रार्थना आवश्यकता पहले। मानचित्र का हर बिंदु इनमें से एक है।", - "region": "WAGF महाक्षेत्र (जैसे \"एशिया\", \"अफ़्रीका\")। मानचित्र पर रंग से चिह्नित।", - "block": "WAGF ब्लॉक — हर क्षेत्र के भीतर संगठनात्मक उप-समूह (जैसे \"दक्षिण-पूर्व एशिया\", \"पश्चिम अफ़्रीका\")।", - "country": "अलग-अलग देश, अपने ब्लॉक के भीतर अनपहुँची आबादी के आकार के क्रम में।" + "family": "भाषा परिवार — एक साझा पूर्वज से निकली भाषाओं का समूह (जैसे भारोपीय, अफ़्रो-एशियाई)।", + "language": "भाषा — किसी जनसमूह द्वारा प्रयुक्त संप्रेषण की प्रणाली (जैसे अरबी, बांग्ला, हिन्दी)।", + "dialect": "बोली/रूप — किसी भाषा का क्षेत्रीय या सामाजिक रूप (जैसे सूडानी अरबी; पाकिस्तानी सांकेतिक भाषा)।", + "bloc": "समानता समूह — सबसे व्यापक वर्गीकरण, सांस्कृतिक, भाषाई और भौगोलिक निकटता के आधार पर (जैसे मलय जन, दक्षिण एशियाई जन, बधिर, अरब जगत)।", + "cluster": "क्लस्टर — समूह के भीतर अधिक सूक्ष्म वर्गीकरण (जैसे मलय जन के भीतर बोर्नियो-कालीमंतान)। पंक्तियों पर «(क्लस्टर)» अंकित है, ताकि उन्हें जनसमूहों से अलग पहचाना जा सके।", + "group": "जनसमूह — देश से स्वतंत्र, अपने आप में एक नृजातीय-भाषाई पहचान। पंक्तियों पर «(जनसमूह)» अंकित है। एक ही जनसमूह कई देशों में रह सकता है (जैसे बधिर, सौ से अधिक देशों में)।", + "pgic": "देश में जनसमूह — प्रत्येक जनसमूह के लिए, वह जिस-जिस देश में रहता है, एक पंक्ति (जैसे «अबाई सुंगाई, मलेशिया»)। पंक्तियों पर «(देश में जनसमूह)» अंकित है।", + "region": "WAGF क्षेत्र — वह वृहत् क्षेत्र जिससे कोई देश संबंधित है (जैसे एशिया, अफ़्रीका)। मानचित्र पर हर एक का अपना रंग है।", + "block": "WAGF ब्लॉक — क्षेत्र के भीतर का उप-वर्ग (जैसे दक्षिण-पूर्व एशिया, पश्चिम अफ़्रीका)।", + "country": "देश — अलग-अलग देश, अपने ब्लॉक के भीतर अनछुई जनसंख्या के क्रम में।" }, "a11y": { "expandRow": "{label} का विस्तार करें", diff --git a/library/i18n/locales/it/legend.json b/library/i18n/locales/it/legend.json index a007972ee..953e8cd01 100644 --- a/library/i18n/locales/it/legend.json +++ b/library/i18n/locales/it/legend.json @@ -61,9 +61,16 @@ "upg100Region": "Regione — ordina le liste UPG-100 per area del mondo (Africa, India, Medio Oriente, Sordi, …). I totali sono gli UUPG e la popolazione sommati di ogni lista sottostante.", "upg100Zone": "Liste UPG-100 — ognuna è una lista di preghiera dei gruppi etnici non raggiunti di un’area, ed è ciò che la mappa disegna e colora. Ogni lista si stampa come il proprio fascicolo.", "upg100Group": "Gruppo etnico — i singoli gruppi non raggiunti dentro una lista, prima quelli con maggiore bisogno di preghiera. Ogni punto della mappa è uno di questi.", - "region": "Macroregione WAGF (ad es. «Asia», «Africa»). Colorata sulla mappa.", - "block": "Blocco WAGF — il sottogruppo organizzativo all’interno di ogni regione (ad es. «Sud-est asiatico», «Africa occidentale»).", - "country": "Singoli paesi, ordinati all’interno del loro blocco per dimensione della popolazione non raggiunta." + "family": "Famiglia ling. — un insieme di lingue discese da un antenato comune (p. es. indoeuropea, afroasiatica).", + "language": "Lingua — un sistema di comunicazione usato da un popolo (p. es. arabo, bengalese, hindi).", + "dialect": "Dialetto/Variante — una forma regionale o sociale di una lingua (p. es. arabo sudanese; lingua dei segni pakistana).", + "bloc": "Blocco di affinità — il raggruppamento più ampio, per affinità culturale, linguistica e geografica (p. es. popoli malesi, popoli dell’Asia meridionale, sordi, mondo arabo).", + "cluster": "Cluster — un raggruppamento più fine all’interno di un blocco (p. es. Borneo-Kalimantan tra i popoli malesi). Le righe recano «(cluster)» per distinguerle dai popoli.", + "group": "Popolo — un’identità etnolinguistica in sé, indipendente dal paese. Le righe recano «(popolo)». Uno stesso popolo può vivere in molti paesi (i sordi, per esempio, in più di cento).", + "pgic": "Popolo nel paese — una riga per ogni popolo in ciascun paese in cui vive (p. es. «Abai Sungai, Malesia»). Le righe recano «(popolo nel paese)».", + "region": "Regione WAGF — la macroregione cui appartiene un paese (p. es. Asia, Africa). Ciascuna ha il proprio colore sulla mappa.", + "block": "Blocco WAGF — la suddivisione all’interno di una regione (p. es. Sud-est asiatico, Africa occidentale).", + "country": "Paese — i singoli paesi, ordinati per popolazione non raggiunta all’interno del loro blocco." }, "a11y": { "expandRow": "Espandi {label}", diff --git a/library/i18n/locales/pt/legend.json b/library/i18n/locales/pt/legend.json index 7270137ed..aed4987c4 100644 --- a/library/i18n/locales/pt/legend.json +++ b/library/i18n/locales/pt/legend.json @@ -61,9 +61,16 @@ "upg100Region": "Região — ordena as listas UPG-100 por área do mundo (África, Índia, Oriente Médio, Surdos, …). Os totais são os UUPG e a população somados de todas as listas abaixo dela.", "upg100Zone": "Listas UPG-100 — cada uma é uma lista de oração dos grupos étnicos não alcançados de uma área, e é o que o mapa pinta e colore. Cada lista é impressa como seu próprio pacote.", "upg100Group": "Grupo étnico — os grupos não alcançados dentro de uma lista, primeiro os de maior necessidade de oração. Cada ponto do mapa é um deles.", - "region": "Macrorregião WAGF (ex.: “Ásia”, “África”). Com cor própria no mapa.", - "block": "Bloco WAGF — a subdivisão organizacional dentro de cada região (ex.: “Sudeste Asiático”, “África Ocidental”).", - "country": "Países individuais, ordenados dentro do seu bloco pelo tamanho da população não alcançada." + "family": "Família linguística — um conjunto de línguas descendentes de um ancestral comum (p. ex. indo-europeia, afro-asiática).", + "language": "Idioma — um sistema de comunicação usado por um povo (p. ex. árabe, bengali, híndi).", + "dialect": "Dialeto/Variedade — uma forma regional ou social de uma língua (p. ex. árabe sudanês; língua gestual paquistanesa).", + "bloc": "Bloco de afinidade — o agrupamento mais amplo, por parentesco cultural, linguístico e geográfico (p. ex. povos malaios, povos do Sul da Ásia, surdos, mundo árabe).", + "cluster": "Agrupamento — um agrupamento mais fino dentro de um bloco (p. ex. Bornéu-Kalimantan entre os povos malaios). As linhas levam «(agrupamento)» para as distinguir dos povos.", + "group": "Povo — uma identidade etnolinguística em si mesma, independente do país. As linhas levam «(povo)». Um mesmo povo pode viver em muitos países (os surdos, por exemplo, em mais de cem).", + "pgic": "Povo no país — uma linha por cada povo em cada país onde vive (p. ex. «Abai Sungai, Malásia»). As linhas levam «(povo no país)».", + "region": "Região WAGF — a macrorregião a que pertence um país (p. ex. Ásia, África). Cada uma tem a sua cor no mapa.", + "block": "Bloco WAGF — a subdivisão dentro de uma região (p. ex. Sudeste Asiático, África Ocidental).", + "country": "País — os países um a um, ordenados por população não alcançada dentro do seu bloco." }, "a11y": { "expandRow": "Expandir {label}", diff --git a/library/i18n/locales/ro/legend.json b/library/i18n/locales/ro/legend.json index ed15f9328..8c2da93aa 100644 --- a/library/i18n/locales/ro/legend.json +++ b/library/i18n/locales/ro/legend.json @@ -61,9 +61,16 @@ "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.", - "region": "Macroregiune WAGF (de ex. „Asia”, „Africa”). Colorată pe hartă.", - "block": "Bloc WAGF — subgruparea organizatorică din fiecare regiune (de ex. „Asia de Sud-Est”, „Africa de Vest”).", - "country": "Țări individuale, ordonate în cadrul blocului lor după mărimea populației neatinse." + "family": "Familie de limbi — un grup de limbi provenite dintr-un strămoș comun (de ex. indo-europeană, afro-asiatică).", + "language": "Limbă — un sistem de comunicare folosit de un popor (de ex. arabă, bengaleză, hindi).", + "dialect": "Dialect/Variantă — o formă regională sau socială a unei limbi (de ex. araba sudaneză; limbajul semnelor pakistanez).", + "bloc": "Bloc de afinitate — cea mai largă grupare, după înrudirea culturală, lingvistică și geografică (de ex. popoarele malaieze, popoarele din Asia de Sud, surzii, lumea arabă).", + "cluster": "Grup — o grupare mai fină în interiorul unui bloc (de ex. Borneo-Kalimantan între popoarele malaieze). Rândurile poartă „(grup)”, spre a le deosebi de popoare.", + "group": "Popor — o identitate etnolingvistică în sine, independentă de țară. Rândurile poartă „(popor)”. Același popor poate trăi în multe țări (surzii, de pildă, în peste o sută).", + "pgic": "Popor în țară — câte un rând pentru fiecare popor din fiecare țară în care trăiește (de ex. „Abai Sungai, Malaysia”). Rândurile poartă „(popor în țară)”.", + "region": "Regiune WAGF — macroregiunea de care ține o țară (de ex. Asia, Africa). Fiecare are culoarea ei pe hartă.", + "block": "Bloc WAGF — subdiviziunea din interiorul unei regiuni (de ex. Asia de Sud-Est, Africa de Vest).", + "country": "Țară — țările una câte una, ordonate după populația neatinsă din blocul lor." }, "a11y": { "expandRow": "Extinde {label}", diff --git a/library/i18n/locales/ru/legend.json b/library/i18n/locales/ru/legend.json index 61974fcab..5193355d6 100644 --- a/library/i18n/locales/ru/legend.json +++ b/library/i18n/locales/ru/legend.json @@ -61,9 +61,16 @@ "upg100Region": "Регион — сортирует списки UPG-100 по частям света (Африка, Индия, Ближний Восток, Глухие, …). Числа — это UUPG и население, просуммированные по всем спискам внутри.", "upg100Zone": "Списки UPG-100 — каждый представляет собой молитвенный список непросвещённых народов области и именно он отображается и раскрашивается на карте. Каждый список печатается отдельным буклетом.", "upg100Group": "Народ — отдельные непросвещённые народы внутри списка, сначала с наибольшей нуждой в молитве. Каждая точка на карте — один из них.", - "region": "Макрорегион WAGF (например, «Азия», «Африка»). Выделен цветом на карте.", - "block": "Блок WAGF — организационная подгруппа внутри каждого региона (например, «Юго-Восточная Азия», «Западная Африка»).", - "country": "Отдельные страны, упорядоченные внутри блока по численности неохваченного населения." + "family": "Языковая семья — группа языков, восходящих к общему предку (например, индоевропейская, афразийская).", + "language": "Язык — система общения, которой пользуется народ (например, арабский, бенгальский, хинди).", + "dialect": "Диалект/вариант — областная или социальная форма языка (например, суданский арабский; пакистанский жестовый язык).", + "bloc": "Блок родства — самое широкое объединение, по культурному, языковому и географическому родству (например, малайские народы, народы Южной Азии, глухие, арабский мир).", + "cluster": "Кластер — более дробное объединение внутри блока (например, Борнео-Калимантан среди малайских народов). Строки помечены «(кластер)», чтобы отличать их от народов.", + "group": "Народ — этноязыковая общность сама по себе, независимо от страны. Строки помечены «(народ)». Один народ может жить во многих странах (глухие, например, более чем в ста).", + "pgic": "Народ в стране — по строке на каждый народ в каждой стране его проживания (например, «Абай-Сунгай, Малайзия»). Строки помечены «(народ в стране)».", + "region": "Регион WAGF — макрорегион, к которому относится страна (например, Азия, Африка). У каждого свой цвет на карте.", + "block": "Блок WAGF — подгруппа внутри региона (например, Юго-Восточная Азия, Западная Африка).", + "country": "Страна — отдельные страны, упорядоченные по непросвещённому населению внутри своего блока." }, "a11y": { "expandRow": "Развернуть {label}", diff --git a/library/i18n/locales/zh/legend.json b/library/i18n/locales/zh/legend.json index f94053cd4..6b6d1ae21 100644 --- a/library/i18n/locales/zh/legend.json +++ b/library/i18n/locales/zh/legend.json @@ -61,9 +61,16 @@ "upg100Region": "区域 — 按世界区域排列 UPG-100 名单(非洲、印度、中东、聋人……)。数字是其下每份名单的 UUPG 与人口总和。", "upg100Zone": "UPG-100 名单 — 每一份都是某地区未得之民的祷告名单,也是地图所绘制和上色的内容。每份名单印成独立的祷告册。", "upg100Group": "族群 — 名单内各个未得之民群体,祷告需要最大的排在前面。地图上每个点就是其中之一。", - "region": "WAGF 大区(如“亚洲”“非洲”)。在地图上以颜色区分。", - "block": "WAGF 板块——每个区域内的组织分组(如“东南亚”“西非”)。", - "country": "各个国家,在所属板块内按未得人口规模排序。" + "family": "语系 —— 源自同一祖语的一组语言(如印欧语系、亚非语系)。", + "language": "语言 —— 一个民族所使用的交流系统(如阿拉伯语、孟加拉语、印地语)。", + "dialect": "方言/变体 —— 一种语言的地区性或社会性形式(如苏丹阿拉伯语;巴基斯坦手语)。", + "bloc": "亲缘板块 —— 最宽泛的分组,按文化、语言与地理上的亲缘关系划分(如马来诸族、南亚诸族、聋人、阿拉伯世界)。", + "cluster": "民族群 —— 板块之下更细的分组(如马来诸族中的婆罗洲-加里曼丹)。各行标有「(民族群)」,以与民族相区别。", + "group": "民族 —— 独立于国界的族群语言身份。各行标有「(民族)」。同一民族可分布于多国(例如聋人分布于一百多个国家)。", + "pgic": "国内民族 —— 每个民族在其所居各国各占一行(如「阿拜松盖,马来西亚」)。各行标有「(国内民族)」。", + "region": "WAGF 区域 —— 国家所属的大区(如亚洲、非洲)。地图上各有其颜色。", + "block": "WAGF 板块 —— 区域之下的次级分组(如东南亚、西非)。", + "country": "国家 —— 各个国家,按其板块内未得之民人口排列。" }, "a11y": { "expandRow": "展开{label}", diff --git a/plugin-designs/doxa-research-map/research-map.vue b/plugin-designs/doxa-research-map/research-map.vue index fc8507341..a4600421f 100644 --- a/plugin-designs/doxa-research-map/research-map.vue +++ b/plugin-designs/doxa-research-map/research-map.vue @@ -991,26 +991,34 @@ watch(activeLegendType, (t) => { // the langTree directly here instead of routing through LegendDesktop. const _langPgRef = { get value() { return mapData.normalizedPeopleGroups.value || [] } } const { langTree } = useLanguageFamilyLegendData(_langPgRef) +// ★ THE TAB TEXT LIVES IN THE CATALOGUE, NOT HERE. SemanticTreeLegend renders these through +// tabLabel()/tabInfo(), which read `tabs.` and `legend.tabInfo.` behind a te() guard. The +// labels resolved in all eleven locales, but not one legend.tabInfo key existed — so every +// non-English reader got a translated tab chip beside an English explanation of what that chip +// means, which is the one sentence a reader who does not read English cannot do without. The keys +// are now written, so the English explanations are gone from here rather than kept as fallbacks +// that can never fire: a second copy of a string drifts from the catalogue silently. +// +// `info: true` still marks WHICH tabs carry an explanation — the legend gates the little "i" button +// on that flag, so dropping the field outright would remove the affordance instead of translating it. const LANG_TABS = [ - { id: 'family', label: 'Lang Family', - info: 'A language family is a group of languages descended from a common ancestor (e.g. Indo-European, Afro-Asiatic).' }, - { id: 'language', label: 'Language', - info: 'A language is a system of communication used by a people (e.g. Arabic, Bengali, Hindi).' }, - { id: 'dialect', label: 'Dialect/Variety', - info: 'A dialect/variety is a regional or social form of a language (e.g. Arabic, Sudanese; Pakistan Sign Language).' }, + { id: 'family', info: true }, + { id: 'language', info: true }, + { id: 'dialect', info: true }, ] // Affinity-block tab — mirrors PPLR's pplr-rop-tree.vue hierarchy (Affinity Block → Cluster → PG). const { affinityTree } = useAffinityBlockLegendData(_langPgRef) +// The source fields behind each tier, kept here because the reader-facing text in the catalogue +// deliberately drops them: bloc = rop1 (16 blocks); cluster = imb_reg_of_people_2, ROP 2 (194); +// group = imb_reg_of_people_25, ROP 2.5 (1,736 PGs, 131 of them in more than one country); +// pgic = imb_reg_of_people_3 + country_code (2,106 rows). Row suffixes "(Cluster)"/"(PG)"/"(PGIC)" +// come from the legend data, not from these labels. const AFFINITY_TABS = [ - { id: 'bloc', label: 'Affinity Block', - info: 'Affinity Block (field: rop1) — broadest grouping by cultural/linguistic/geographic kinship. 16 blocks total. Examples: Malay Peoples, South Asian Peoples, Deaf, Arab World.' }, - { id: 'cluster', label: 'Cluster', - info: 'Cluster (field: imb_reg_of_people_2, ROP 2) — finer-grained grouping inside a bloc. 194 clusters total. Suffix "(Cluster)" appears on each row to distinguish from PG/PGIC. Example: Borneo-Kalimantan within Malay Peoples.' }, - { id: 'group', label: 'People Group', - info: 'People Group (field: imb_reg_of_people_25, ROP 2.5) — abstract ethnolinguistic identity, country-agnostic. Suffix "(PG)" on each row. 1,736 PGs total; 131 of them have rows in multiple countries (e.g. Deaf in 123 countries). Example: Abai Sungai (PG) is one ROP25 code regardless of where its people live.' }, - { id: 'pgic', label: 'PG in Country', - info: 'PGIC = People Group In Country (field: imb_reg_of_people_3 + country_code) — one row per (people group, country) pair. Suffix "(PGIC)" on each row. 2,106 rows total. Example: "Abai Sungai, Malaysia (PGIC)" is the Abai Sungai PG specifically as it exists in Malaysia.' }, + { id: 'bloc', info: true }, + { id: 'cluster', info: true }, + { id: 'group', info: true }, + { id: 'pgic', info: true }, ] // WAGF Regions tab — Region → Block → Country (3-tier). Each region has a unique color; @@ -1018,12 +1026,9 @@ const AFFINITY_TABS = [ // highlights the matching country polygons on the map. const { regionsTree } = useWagfRegionsLegendData(_langPgRef) const REGIONS_TABS = [ - { id: 'region', label: 'WAGF Region', - info: 'WAGF macro-region (e.g. "Asia", "Africa"). Color-coded on the map.' }, - { id: 'block', label: 'WAGF Bloc', - info: 'WAGF bloc — the organizational sub-grouping within each region (e.g. "South East Asia", "West Africa").' }, - { id: 'country', label: 'Country', - info: 'Individual countries, listed by unreached-population size within their bloc.' }, + { id: 'region', info: true }, + { id: 'block', info: true }, + { id: 'country', info: true }, ] // Flat legend data for prayer/adoption/engagement/religion tabs — converted to