diff --git a/data/tables/key-cities.json b/data/tables/key-cities.json index 6c49b3ca2..f2056703f 100644 --- a/data/tables/key-cities.json +++ b/data/tables/key-cities.json @@ -2,7 +2,7 @@ "meta": { "title": "Key Cities / Location Clusters", "grain": "one row per ~25km location cluster", - "caveat": "A cluster is people-group CENTROIDS, not a settlement. place_name comes from a cited gazetteer (Nominatim/OSM, ODbL); an unnamed row is honest, not missing.", + "caveat": "A cluster is people-group PINS (each marks a people group, not a town), not a settlement. place_name comes from a cited gazetteer (Nominatim/OSM, ODbL); an unnamed row is honest, not missing.", "internet_caveat": "Internet figures are NATIONAL. Per-city connectivity is not publicly available at this scale." }, "columns": [ diff --git a/data/tables/languages-per-city.json b/data/tables/languages-per-city.json index 959ce058f..b6d9c2386 100644 --- a/data/tables/languages-per-city.json +++ b/data/tables/languages-per-city.json @@ -3,7 +3,7 @@ "title": "Languages per City x Resources", "grain": "one row per location cluster x language spoken there", "why": "399 of 1,646 clusters are multi-language — a city-level bridge can exist that a country average hides.", - "place_caveat": "A location is a cluster of people-group centroids within ~25km, NOT a municipal boundary. An empty place_name is an unnamed cluster, never an invented one.", + "place_caveat": "A location is a cluster of people-group pins within ~25km, NOT a municipal boundary. An empty place_name is an unnamed cluster, never an invented one.", "resolution_caveat": "resolved:false means the language LABEL did not match an ISO 639-3 record here — its resource status is UNKNOWN, not absent.", "pools_caveat": "Resource status is from eBible + JESUS Film only. GRN and FCBH audio are key-blocked." }, diff --git a/internal/check-approx-pin-note.mjs b/internal/check-approx-pin-note.mjs index 007a5a18f..7a8bb48f4 100644 --- a/internal/check-approx-pin-note.mjs +++ b/internal/check-approx-pin-note.mjs @@ -74,4 +74,4 @@ try { check('Arabic joins the names with و, never an English comma inside Arabic prose', /Koraga وMaila/.test(ar2) && !/Koraga, Maila/.test(ar2), ar2) } finally { await server.close() } if (bad) { console.log(`APPROX-PIN-NOTE: FAIL — ${bad} case(s).`); process.exit(1) } -console.log('APPROX-PIN-NOTE: PASS — pins say they are localities, and name the groups that share a point.') +console.log('APPROX-PIN-NOTE: PASS — pins say what they are, and name the groups that share a point.') diff --git a/library/components/legends/ApproxPinNote.vue b/library/components/legends/ApproxPinNote.vue index 910a9b353..4537d41f1 100644 --- a/library/components/legends/ApproxPinNote.vue +++ b/library/components/legends/ApproxPinNote.vue @@ -22,7 +22,7 @@ const props = defineProps({ // the English below renders, with the same placeholders filled. const APPROX_FALLBACK = { 'pins.approximate': 'The dot marks a people group, not a town or a boundary.', - 'pins.sharedPoint': 'It sits on the same point as {names} — {n} groups share this coordinate, so the position tells you the locality and not which group is where.', + 'pins.sharedPoint': 'It sits on the same point as {names} — {n} groups share this dot.', } // C4: the guard is library/composables/useOptionalT.js now. The fallback MAP stays exactly as it was, // passed in, so a bare host renders the same English it rendered before. diff --git a/library/i18n/locales/ar/keyCities.json b/library/i18n/locales/ar/keyCities.json index f0af154d1..9325e1eeb 100644 --- a/library/i18n/locales/ar/keyCities.json +++ b/library/i18n/locales/ar/keyCities.json @@ -6,7 +6,7 @@ "multi": "متعدد الشعوب", "single": "شعب واحد" }, - "note": "النقطة عنقود من مراكز الشعوب ضمن نحو 25 كم، وليست حدودًا بلدية. النقاط المُسمّاة مأخوذة من معجم جغرافي موثّق.", + "note": "النقطة عنقود من نقاط الشعوب ضمن نحو 25 كم، وليست حدودًا بلدية. النقاط المُسمّاة مأخوذة من معجم جغرافي موثّق.", "unnamed": "موقع بلا اسم — {lat}، {lng}", "close": "إغلاق", "country": "الدولة", @@ -17,7 +17,7 @@ "unknown": "غير معروف", "pgHere": "الشعوب هنا", "languages": "اللغات", - "sheetNote": "عنقود من مراكز الشعوب ضمن نحو 25 كم، وليس حدودًا بلدية. النقاط المُسمّاة مأخوذة من معجم جغرافي موثّق (Nominatim/OSM)؛ والنقاط بلا اسم تُظهر الإحداثيات بدل اسم مختلَق.", + "sheetNote": "عنقود من نقاط الشعوب ضمن نحو 25 كم، وليس حدودًا بلدية. النقاط المُسمّاة مأخوذة من معجم جغرافي موثّق (Nominatim/OSM)؛ والنقاط بلا اسم تُظهر الإحداثيات بدل اسم مختلَق.", "national": "أرقام الإنترنت وطنية.", "engineMissing": "تعذّر تحميل محرك الخريطة." }, @@ -33,7 +33,7 @@ "peopleGroups": "الشعوب: {n}", "caveat": { "rowLead": "ما الذي يمثّله الصف.", - "row": "عنقود من مراكز الشعوب ضمن نحو 25 كم، وليس حدودًا بلدية. تدل النقاط على مكان تمركز الشعب، لا على مستوطنة، لذلك لا تُسمّى العناقيد بالاستنتاج أبدًا: حُدِّدت المراكز متعددة الشعوب وعددها {n} عبر {source} (ODbL، مع ذكر المصدر في كل صف)، وتبقى البقية بلا اسم بدل التخمين.", + "row": "عنقود من نقاط الشعوب ضمن نحو 25 كم، وليس حدودًا بلدية. تمثّل كل نقطة شعبًا، لا بلدة، لذلك لا تُسمّى العناقيد بالاستنتاج أبدًا: حُدِّدت المراكز متعددة الشعوب وعددها {n} عبر {source} (ODbL، مع ذكر المصدر في كل صف)، وتبقى البقية بلا اسم بدل التخمين.", "internet": "تُعرض كسياق: بيانات الاتصال لكل مدينة غير متاحة للعموم بهذا المستوى، ولا يجوز قراءة الرقم الوطني على أنه قياس للمدينة.", "scope": "تحمل هذه الصفحة مواقع الشعوب وبيانات الاتصال فقط — لا بيانات عن كنائس أو مؤمنين أو أماكن اجتماع، وذلك عن قصد." }, diff --git a/library/i18n/locales/ar/pins.json b/library/i18n/locales/ar/pins.json index 4b838b32d..321071e5c 100644 --- a/library/i18n/locales/ar/pins.json +++ b/library/i18n/locales/ar/pins.json @@ -1,4 +1,4 @@ { "approximate": "تمثّل النقطة شعبًا، لا بلدة ولا حدودًا.", - "sharedPoint": "تقع في النقطة نفسها مع {names} — {n} مجموعات تتشارك هذا الإحداثي، لذا يدل الموقع على المنطقة لا على مكان كل مجموعة." + "sharedPoint": "تقع في النقطة نفسها مع {names} — {n} مجموعات تتشارك هذه النقطة." } diff --git a/library/i18n/locales/de/keyCities.json b/library/i18n/locales/de/keyCities.json index 9e0235d97..3850c7628 100644 --- a/library/i18n/locales/de/keyCities.json +++ b/library/i18n/locales/de/keyCities.json @@ -6,7 +6,7 @@ "multi": "mehrere Gruppen", "single": "eine Gruppe" }, - "note": "Ein Punkt ist ein Cluster von Volksgruppen-Mittelpunkten im Umkreis von ~25 km, keine Gemeindegrenze. Benannte Punkte stammen aus einem belegten Ortsverzeichnis.", + "note": "Ein Punkt ist ein Cluster von Volksgruppen-Punkten im Umkreis von ~25 km, keine Gemeindegrenze. Benannte Punkte stammen aus einem belegten Ortsverzeichnis.", "unnamed": "unbenannter Ort — {lat}, {lng}", "close": "Schließen", "country": "Land", @@ -17,7 +17,7 @@ "unknown": "unbekannt", "pgHere": "Volksgruppen hier", "languages": "Sprachen", - "sheetNote": "Ein Cluster von Volksgruppen-Mittelpunkten im Umkreis von ~25 km, keine Gemeindegrenze. Benannte Punkte stammen aus einem belegten Ortsverzeichnis (Nominatim/OSM); unbenannte zeigen Koordinaten statt eines erfundenen Ortsnamens.", + "sheetNote": "Ein Cluster von Volksgruppen-Punkten im Umkreis von ~25 km, keine Gemeindegrenze. Benannte Punkte stammen aus einem belegten Ortsverzeichnis (Nominatim/OSM); unbenannte zeigen Koordinaten statt eines erfundenen Ortsnamens.", "national": "Internetzahlen sind NATIONAL.", "engineMissing": "Die Karten-Engine konnte nicht geladen werden." }, @@ -33,7 +33,7 @@ "peopleGroups": "Volksgruppen: {n}", "caveat": { "rowLead": "Was eine Zeile ist.", - "row": "Ein Cluster von Volksgruppen-Mittelpunkten im Umkreis von ~25 km, keine Gemeindegrenze. Die Punkte markieren, wo eine Volksgruppe ihren Mittelpunkt hat, nicht eine Siedlung, daher werden Cluster nie durch Schlussfolgerung benannt: Die {n} Zentren mit mehreren Volksgruppen wurden über {source} bestimmt (ODbL, pro Zeile zitiert), der Rest bleibt unbenannt, statt geraten zu werden.", + "row": "Ein Cluster von Volksgruppen-Punkten im Umkreis von ~25 km, keine Gemeindegrenze. Jeder Punkt steht für eine Volksgruppe, nicht für einen Ort, daher werden Cluster nie durch Schlussfolgerung benannt: Die {n} Zentren mit mehreren Volksgruppen wurden über {source} bestimmt (ODbL, pro Zeile zitiert), der Rest bleibt unbenannt, statt geraten zu werden.", "internet": "Sie dienen als Kontext: Konnektivität pro Stadt ist in diesem Maßstab nicht öffentlich verfügbar, und eine nationale Zahl darf nicht als Messung für eine Stadt gelesen werden.", "scope": "Diese Seite enthält nur Standorte von Volksgruppen und Konnektivität — bewusst keine Daten zu Gemeinden, Gläubigen oder Treffpunkten." }, diff --git a/library/i18n/locales/de/pins.json b/library/i18n/locales/de/pins.json index ae7ab87d0..0ac336d06 100644 --- a/library/i18n/locales/de/pins.json +++ b/library/i18n/locales/de/pins.json @@ -1,4 +1,4 @@ { "approximate": "Der Punkt steht für ein Volk, nicht für eine Stadt oder eine Grenze.", - "sharedPoint": "Er liegt auf demselben Punkt wie {names} — {n} Gruppen teilen sich diese Koordinate; die Position nennt also die Gegend, nicht wo welche Gruppe lebt." + "sharedPoint": "Er liegt auf demselben Punkt wie {names} — {n} Gruppen teilen sich diesen Punkt." } diff --git a/library/i18n/locales/en/keyCities.json b/library/i18n/locales/en/keyCities.json index 40973395b..b62019f98 100644 --- a/library/i18n/locales/en/keyCities.json +++ b/library/i18n/locales/en/keyCities.json @@ -6,7 +6,7 @@ "multi": "multi-group", "single": "single group" }, - "note": "A point is a cluster of people-group centroids within ~25 km, not a municipal boundary. Named points come from a cited gazetteer.", + "note": "A point is a cluster of people-group pins within ~25 km, not a municipal boundary. Named points come from a cited gazetteer.", "unnamed": "unnamed location — {lat}, {lng}", "close": "Close", "country": "Country", @@ -17,7 +17,7 @@ "unknown": "unknown", "pgHere": "People groups here", "languages": "Languages", - "sheetNote": "A cluster of people-group centroids within ~25 km, not a municipal boundary. Named points come from a cited gazetteer (Nominatim/OSM); unnamed ones show coordinates rather than an invented place name.", + "sheetNote": "A cluster of people-group pins within ~25 km, not a municipal boundary. Named points come from a cited gazetteer (Nominatim/OSM); unnamed ones show coordinates rather than an invented place name.", "national": "Internet figures are NATIONAL.", "engineMissing": "The map engine could not be loaded." }, @@ -33,7 +33,7 @@ "peopleGroups": "people groups: {n}", "caveat": { "rowLead": "What a row is.", - "row": "A cluster of people-group centroids within ~25 km, not a municipal boundary. Pins mark where a people group is centred, not a settlement, so clusters are never named by inference: the {n} multi-group centres were resolved by {source} (ODbL, cited per row), and the rest stay unnamed rather than guessed.", + "row": "A cluster of people-group pins within ~25 km, not a municipal boundary. Each pin marks a people group, not a town, so clusters are never named by inference: the {n} multi-group centres were resolved by {source} (ODbL, cited per row), and the rest stay unnamed rather than guessed.", "internet": "They are shown as context: per-city connectivity is not publicly available at this scale, and a national figure must not be read as a city measurement.", "scope": "This page carries people-group locations and connectivity only — no church, believer or meeting-point data, by design." }, diff --git a/library/i18n/locales/en/pins.json b/library/i18n/locales/en/pins.json index 4cd15d86f..7aa956b29 100644 --- a/library/i18n/locales/en/pins.json +++ b/library/i18n/locales/en/pins.json @@ -1,4 +1,4 @@ { "approximate": "The dot marks a people group, not a town or a boundary.", - "sharedPoint": "It sits on the same point as {names} — {n} groups share this coordinate, so the position tells you the locality and not which group is where." + "sharedPoint": "It sits on the same point as {names} — {n} groups share this dot." } diff --git a/library/i18n/locales/es/keyCities.json b/library/i18n/locales/es/keyCities.json index 893364287..384e18d25 100644 --- a/library/i18n/locales/es/keyCities.json +++ b/library/i18n/locales/es/keyCities.json @@ -6,7 +6,7 @@ "multi": "varios pueblos", "single": "un pueblo" }, - "note": "Un punto es un grupo de centroides de pueblos en ~25 km, no un límite municipal. Los puntos con nombre provienen de un nomenclátor citado.", + "note": "Un punto es un grupo de marcadores de pueblos en ~25 km, no un límite municipal. Los puntos con nombre provienen de un nomenclátor citado.", "unnamed": "lugar sin nombre — {lat}, {lng}", "close": "Cerrar", "country": "País", @@ -17,7 +17,7 @@ "unknown": "desconocido", "pgHere": "Pueblos aquí", "languages": "Idiomas", - "sheetNote": "Un grupo de centroides de pueblos en ~25 km, no un límite municipal. Los puntos con nombre provienen de un nomenclátor citado (Nominatim/OSM); los sin nombre muestran coordenadas en lugar de un nombre inventado.", + "sheetNote": "Un grupo de marcadores de pueblos en ~25 km, no un límite municipal. Los puntos con nombre provienen de un nomenclátor citado (Nominatim/OSM); los sin nombre muestran coordenadas en lugar de un nombre inventado.", "national": "Las cifras de internet son NACIONALES.", "engineMissing": "No se pudo cargar el motor del mapa." }, @@ -33,7 +33,7 @@ "peopleGroups": "pueblos: {n}", "caveat": { "rowLead": "Qué es una fila.", - "row": "Un grupo de centroides de pueblos en ~25 km, no un límite municipal. Los puntos marcan dónde se centra un pueblo, no un asentamiento, así que los grupos nunca se nombran por deducción: los {n} centros con varios pueblos se identificaron con {source} (ODbL, citado en cada fila) y el resto queda sin nombre en lugar de adivinarlo.", + "row": "Un grupo de marcadores de pueblos en ~25 km, no un límite municipal. Cada marcador representa un pueblo, no una ciudad, así que los grupos nunca se nombran por deducción: los {n} centros con varios pueblos se identificaron con {source} (ODbL, citado en cada fila) y el resto queda sin nombre en lugar de adivinarlo.", "internet": "Se muestran como contexto: la conectividad por ciudad no está disponible públicamente a esta escala, y una cifra nacional no debe leerse como una medición de la ciudad.", "scope": "Esta página contiene solo ubicaciones de pueblos y conectividad; a propósito, no hay datos de iglesias, creyentes ni lugares de reunión." }, diff --git a/library/i18n/locales/es/pins.json b/library/i18n/locales/es/pins.json index 9b8ac3248..0ec49efa0 100644 --- a/library/i18n/locales/es/pins.json +++ b/library/i18n/locales/es/pins.json @@ -1,4 +1,4 @@ { "approximate": "El punto representa un pueblo, no una ciudad ni una frontera.", - "sharedPoint": "Está en el mismo punto que {names}: {n} grupos comparten esta coordenada, así que la posición indica la zona y no dónde está cada grupo." + "sharedPoint": "Está en el mismo punto que {names}: {n} grupos comparten este punto." } diff --git a/library/i18n/locales/fr/keyCities.json b/library/i18n/locales/fr/keyCities.json index d5c0963e3..2bde6b534 100644 --- a/library/i18n/locales/fr/keyCities.json +++ b/library/i18n/locales/fr/keyCities.json @@ -6,7 +6,7 @@ "multi": "plusieurs peuples", "single": "un seul peuple" }, - "note": "Un point est un regroupement de centroïdes de peuples dans un rayon d’environ 25 km, pas une limite municipale. Les points nommés proviennent d’un répertoire géographique cité.", + "note": "Un point est un regroupement de repères de peuples dans un rayon d’environ 25 km, pas une limite municipale. Les points nommés proviennent d’un répertoire géographique cité.", "unnamed": "lieu sans nom — {lat}, {lng}", "close": "Fermer", "country": "Pays", @@ -17,7 +17,7 @@ "unknown": "inconnu", "pgHere": "Peuples ici", "languages": "Langues", - "sheetNote": "Un regroupement de centroïdes de peuples dans un rayon d’environ 25 km, pas une limite municipale. Les points nommés proviennent d’un répertoire géographique cité (Nominatim/OSM) ; les points sans nom affichent des coordonnées plutôt qu’un nom inventé.", + "sheetNote": "Un regroupement de repères de peuples dans un rayon d’environ 25 km, pas une limite municipale. Les points nommés proviennent d’un répertoire géographique cité (Nominatim/OSM) ; les points sans nom affichent des coordonnées plutôt qu’un nom inventé.", "national": "Les chiffres Internet sont NATIONAUX.", "engineMissing": "Le moteur de carte n’a pas pu être chargé." }, @@ -33,7 +33,7 @@ "peopleGroups": "peuples : {n}", "caveat": { "rowLead": "Ce qu’est une ligne.", - "row": "Un regroupement de centroïdes de peuples dans un rayon d’environ 25 km, pas une limite municipale. Les points indiquent où un peuple est centré, pas une localité, donc les regroupements ne sont jamais nommés par déduction : les {n} centres à plusieurs peuples ont été identifiés avec {source} (ODbL, cité à chaque ligne) et les autres restent sans nom plutôt que devinés.", + "row": "Un regroupement de repères de peuples dans un rayon d’environ 25 km, pas une limite municipale. Chaque repère représente un peuple, pas une ville, donc les regroupements ne sont jamais nommés par déduction : les {n} centres à plusieurs peuples ont été identifiés avec {source} (ODbL, cité à chaque ligne) et les autres restent sans nom plutôt que devinés.", "internet": "Ils sont donnés comme contexte : la connectivité par ville n’est pas publique à cette échelle, et un chiffre national ne doit pas être lu comme une mesure de la ville.", "scope": "Cette page ne contient que les emplacements des peuples et la connectivité — aucune donnée sur les églises, les croyants ou les lieux de réunion, à dessein." }, diff --git a/library/i18n/locales/fr/pins.json b/library/i18n/locales/fr/pins.json index b14b116b8..ef8dbd33b 100644 --- a/library/i18n/locales/fr/pins.json +++ b/library/i18n/locales/fr/pins.json @@ -1,4 +1,4 @@ { "approximate": "Le point représente un peuple, pas une ville ni une frontière.", - "sharedPoint": "Il se trouve au même point que {names} — {n} groupes partagent cette coordonnée : la position indique la région, pas où se trouve chaque groupe." + "sharedPoint": "Il se trouve au même point que {names} — {n} groupes partagent ce point." } diff --git a/library/i18n/locales/hi/keyCities.json b/library/i18n/locales/hi/keyCities.json index 821a331eb..1d2152cc2 100644 --- a/library/i18n/locales/hi/keyCities.json +++ b/library/i18n/locales/hi/keyCities.json @@ -6,7 +6,7 @@ "multi": "कई जनसमूह", "single": "एक जनसमूह" }, - "note": "एक बिंदु लगभग 25 किमी के भीतर जनसमूह केंद्रों का समूह है, नगरपालिका सीमा नहीं। नामित बिंदु एक उद्धृत भौगोलिक सूची से लिए गए हैं।", + "note": "एक बिंदु लगभग 25 किमी के भीतर जनसमूह बिंदुओं का समूह है, नगरपालिका सीमा नहीं। नामित बिंदु एक उद्धृत भौगोलिक सूची से लिए गए हैं।", "unnamed": "बिना नाम का स्थान — {lat}, {lng}", "close": "बंद करें", "country": "देश", @@ -17,7 +17,7 @@ "unknown": "अज्ञात", "pgHere": "यहाँ के जनसमूह", "languages": "भाषाएँ", - "sheetNote": "लगभग 25 किमी के भीतर जनसमूह केंद्रों का समूह, नगरपालिका सीमा नहीं। नामित बिंदु एक उद्धृत भौगोलिक सूची (Nominatim/OSM) से हैं; बिना नाम वाले बिंदु गढ़े हुए नाम के बजाय निर्देशांक दिखाते हैं।", + "sheetNote": "लगभग 25 किमी के भीतर जनसमूह बिंदुओं का समूह, नगरपालिका सीमा नहीं। नामित बिंदु एक उद्धृत भौगोलिक सूची (Nominatim/OSM) से हैं; बिना नाम वाले बिंदु गढ़े हुए नाम के बजाय निर्देशांक दिखाते हैं।", "national": "इंटरनेट के आँकड़े राष्ट्रीय हैं।", "engineMissing": "नक्शे का इंजन लोड नहीं हो सका।" }, @@ -33,7 +33,7 @@ "peopleGroups": "जनसमूह: {n}", "caveat": { "rowLead": "एक पंक्ति क्या है।", - "row": "लगभग 25 किमी के भीतर जनसमूह केंद्रों का समूह, नगरपालिका सीमा नहीं। बिंदु दिखाते हैं कि कोई जनसमूह कहाँ केंद्रित है, कोई बस्ती नहीं, इसलिए समूहों का नाम कभी अनुमान से नहीं रखा जाता: कई जनसमूहों वाले {n} केंद्र {source} (ODbL, हर पंक्ति में उद्धृत) से पहचाने गए, और बाकी अनुमान के बजाय बिना नाम के रहते हैं।", + "row": "लगभग 25 किमी के भीतर जनसमूह बिंदुओं का समूह, नगरपालिका सीमा नहीं। हर बिंदु एक जनसमूह को दर्शाता है, किसी कस्बे को नहीं, इसलिए समूहों का नाम कभी अनुमान से नहीं रखा जाता: कई जनसमूहों वाले {n} केंद्र {source} (ODbL, हर पंक्ति में उद्धृत) से पहचाने गए, और बाकी अनुमान के बजाय बिना नाम के रहते हैं।", "internet": "इन्हें संदर्भ के रूप में दिखाया गया है: इस स्तर पर शहर-वार कनेक्टिविटी सार्वजनिक रूप से उपलब्ध नहीं है, और राष्ट्रीय आँकड़े को शहर का माप नहीं समझना चाहिए।", "scope": "इस पृष्ठ पर केवल जनसमूहों के स्थान और कनेक्टिविटी है — जानबूझकर कलीसिया, विश्वासियों या मिलने के स्थानों का कोई डेटा नहीं।" }, diff --git a/library/i18n/locales/hi/pins.json b/library/i18n/locales/hi/pins.json index acda46aa5..f82cd4ec4 100644 --- a/library/i18n/locales/hi/pins.json +++ b/library/i18n/locales/hi/pins.json @@ -1,4 +1,4 @@ { "approximate": "बिंदु एक जन-समूह को दर्शाता है, किसी शहर या सीमा को नहीं।", - "sharedPoint": "यह {names} के साथ एक ही बिंदु पर है — {n} समूह यह निर्देशांक साझा करते हैं, इसलिए स्थान क्षेत्र बताता है, यह नहीं कि कौन-सा समूह कहाँ है।" + "sharedPoint": "यह {names} के साथ एक ही बिंदु पर है — {n} समूह यह बिंदु साझा करते हैं।" } diff --git a/library/i18n/locales/it/keyCities.json b/library/i18n/locales/it/keyCities.json index a64f5defa..daa1d55b5 100644 --- a/library/i18n/locales/it/keyCities.json +++ b/library/i18n/locales/it/keyCities.json @@ -6,7 +6,7 @@ "multi": "più popoli", "single": "un solo popolo" }, - "note": "Un punto è un raggruppamento di centroidi di popoli entro ~25 km, non un confine comunale. I punti con nome provengono da un gazetteer citato.", + "note": "Un punto è un raggruppamento di segnaposto di popoli entro ~25 km, non un confine comunale. I punti con nome provengono da un gazetteer citato.", "unnamed": "luogo senza nome — {lat}, {lng}", "close": "Chiudi", "country": "Paese", @@ -17,7 +17,7 @@ "unknown": "sconosciuto", "pgHere": "Popoli qui", "languages": "Lingue", - "sheetNote": "Un raggruppamento di centroidi di popoli entro ~25 km, non un confine comunale. I punti con nome provengono da un gazetteer citato (Nominatim/OSM); quelli senza nome mostrano le coordinate invece di un nome inventato.", + "sheetNote": "Un raggruppamento di segnaposto di popoli entro ~25 km, non un confine comunale. I punti con nome provengono da un gazetteer citato (Nominatim/OSM); quelli senza nome mostrano le coordinate invece di un nome inventato.", "national": "I dati su Internet sono NAZIONALI.", "engineMissing": "Impossibile caricare il motore della mappa." }, @@ -33,7 +33,7 @@ "peopleGroups": "popoli: {n}", "caveat": { "rowLead": "Che cos’è una riga.", - "row": "Un raggruppamento di centroidi di popoli entro ~25 km, non un confine comunale. I punti indicano dove si concentra un popolo, non un insediamento, quindi i raggruppamenti non vengono mai nominati per deduzione: i {n} centri con più popoli sono stati identificati con {source} (ODbL, citato in ogni riga) e gli altri restano senza nome invece di essere indovinati.", + "row": "Un raggruppamento di segnaposto di popoli entro ~25 km, non un confine comunale. Ogni segnaposto rappresenta un popolo, non una città, quindi i raggruppamenti non vengono mai nominati per deduzione: i {n} centri con più popoli sono stati identificati con {source} (ODbL, citato in ogni riga) e gli altri restano senza nome invece di essere indovinati.", "internet": "Sono mostrati come contesto: la connettività per città non è pubblicamente disponibile a questa scala, e un dato nazionale non va letto come una misura della città.", "scope": "Questa pagina contiene solo le posizioni dei popoli e la connettività — nessun dato su chiese, credenti o luoghi di incontro, per scelta." }, diff --git a/library/i18n/locales/it/pins.json b/library/i18n/locales/it/pins.json index 22cf09b21..e563d9cb2 100644 --- a/library/i18n/locales/it/pins.json +++ b/library/i18n/locales/it/pins.json @@ -1,4 +1,4 @@ { "approximate": "Il punto rappresenta un popolo, non una città né un confine.", - "sharedPoint": "Si trova nello stesso punto di {names} — {n} gruppi condividono questa coordinata, quindi la posizione indica la zona e non dove si trova ciascun gruppo." + "sharedPoint": "Si trova nello stesso punto di {names} — {n} gruppi condividono questo punto." } diff --git a/library/i18n/locales/pt/keyCities.json b/library/i18n/locales/pt/keyCities.json index 15c4a25f7..cb9945086 100644 --- a/library/i18n/locales/pt/keyCities.json +++ b/library/i18n/locales/pt/keyCities.json @@ -6,7 +6,7 @@ "multi": "vários povos", "single": "um povo" }, - "note": "Um ponto é um agrupamento de centroides de povos num raio de ~25 km, não um limite municipal. Os pontos com nome vêm de um gazetteer citado.", + "note": "Um ponto é um agrupamento de marcadores de povos num raio de ~25 km, não um limite municipal. Os pontos com nome vêm de um gazetteer citado.", "unnamed": "local sem nome — {lat}, {lng}", "close": "Fechar", "country": "País", @@ -17,7 +17,7 @@ "unknown": "desconhecido", "pgHere": "Povos aqui", "languages": "Idiomas", - "sheetNote": "Um agrupamento de centroides de povos num raio de ~25 km, não um limite municipal. Os pontos com nome vêm de um gazetteer citado (Nominatim/OSM); os sem nome mostram coordenadas em vez de um nome inventado.", + "sheetNote": "Um agrupamento de marcadores de povos num raio de ~25 km, não um limite municipal. Os pontos com nome vêm de um gazetteer citado (Nominatim/OSM); os sem nome mostram coordenadas em vez de um nome inventado.", "national": "Os números de internet são NACIONAIS.", "engineMissing": "Não foi possível carregar o motor do mapa." }, @@ -33,7 +33,7 @@ "peopleGroups": "povos: {n}", "caveat": { "rowLead": "O que é uma linha.", - "row": "Um agrupamento de centroides de povos num raio de ~25 km, não um limite municipal. Os pontos marcam onde um povo se concentra, não um povoado, por isso os agrupamentos nunca são nomeados por dedução: os {n} centros com vários povos foram identificados com {source} (ODbL, citado em cada linha) e os restantes ficam sem nome em vez de adivinhados.", + "row": "Um agrupamento de marcadores de povos num raio de ~25 km, não um limite municipal. Cada marcador representa um povo, não uma cidade, por isso os agrupamentos nunca são nomeados por dedução: os {n} centros com vários povos foram identificados com {source} (ODbL, citado em cada linha) e os restantes ficam sem nome em vez de adivinhados.", "internet": "São mostrados como contexto: a conectividade por cidade não está disponível publicamente nesta escala, e um número nacional não deve ser lido como uma medição da cidade.", "scope": "Esta página contém apenas localizações de povos e conectividade — por opção, nenhum dado sobre igrejas, crentes ou locais de reunião." }, diff --git a/library/i18n/locales/pt/pins.json b/library/i18n/locales/pt/pins.json index e5504e345..8c75aa490 100644 --- a/library/i18n/locales/pt/pins.json +++ b/library/i18n/locales/pt/pins.json @@ -1,4 +1,4 @@ { "approximate": "O ponto representa um povo, não uma cidade nem uma fronteira.", - "sharedPoint": "Está no mesmo ponto que {names} — {n} grupos partilham esta coordenada, por isso a posição indica a região e não onde está cada grupo." + "sharedPoint": "Está no mesmo ponto que {names} — {n} grupos partilham este ponto." } diff --git a/library/i18n/locales/ro/keyCities.json b/library/i18n/locales/ro/keyCities.json index c90a3074d..c76f4889a 100644 --- a/library/i18n/locales/ro/keyCities.json +++ b/library/i18n/locales/ro/keyCities.json @@ -6,7 +6,7 @@ "multi": "mai multe popoare", "single": "un singur popor" }, - "note": "Un punct este un grup de centroizi ai popoarelor pe o rază de ~25 km, nu o limită municipală. Punctele numite provin dintr-un gazetteer citat.", + "note": "Un punct este un grup de marcaje ale popoarelor pe o rază de ~25 km, nu o limită municipală. Punctele numite provin dintr-un gazetteer citat.", "unnamed": "loc fără nume — {lat}, {lng}", "close": "Închide", "country": "Țară", @@ -17,7 +17,7 @@ "unknown": "necunoscut", "pgHere": "Popoare aici", "languages": "Limbi", - "sheetNote": "Un grup de centroizi ai popoarelor pe o rază de ~25 km, nu o limită municipală. Punctele numite provin dintr-un gazetteer citat (Nominatim/OSM); cele fără nume arată coordonate în loc de un nume inventat.", + "sheetNote": "Un grup de marcaje ale popoarelor pe o rază de ~25 km, nu o limită municipală. Punctele numite provin dintr-un gazetteer citat (Nominatim/OSM); cele fără nume arată coordonate în loc de un nume inventat.", "national": "Cifrele de internet sunt NAȚIONALE.", "engineMissing": "Motorul hărții nu a putut fi încărcat." }, @@ -33,7 +33,7 @@ "peopleGroups": "popoare: {n}", "caveat": { "rowLead": "Ce este un rând.", - "row": "Un grup de centroizi ai popoarelor pe o rază de ~25 km, nu o limită municipală. Punctele arată unde este centrat un popor, nu o așezare, așa că grupurile nu sunt numite niciodată prin deducție: cele {n} centre cu mai multe popoare au fost identificate prin {source} (ODbL, citat pe fiecare rând), iar restul rămân fără nume în loc să fie ghicite.", + "row": "Un grup de marcaje ale popoarelor pe o rază de ~25 km, nu o limită municipală. Fiecare marcaj reprezintă un popor, nu un oraș, așa că grupurile nu sunt numite niciodată prin deducție: cele {n} centre cu mai multe popoare au fost identificate prin {source} (ODbL, citat pe fiecare rând), iar restul rămân fără nume în loc să fie ghicite.", "internet": "Sunt afișate drept context: conectivitatea pe oraș nu este disponibilă public la această scară, iar o cifră națională nu trebuie citită ca măsurătoare a orașului.", "scope": "Această pagină conține doar locațiile popoarelor și conectivitatea — intenționat, fără date despre biserici, credincioși sau locuri de întâlnire." }, diff --git a/library/i18n/locales/ro/pins.json b/library/i18n/locales/ro/pins.json index 0667bd112..ab03c776c 100644 --- a/library/i18n/locales/ro/pins.json +++ b/library/i18n/locales/ro/pins.json @@ -1,4 +1,4 @@ { "approximate": "Punctul reprezintă un popor, nu un oraș sau o graniță.", - "sharedPoint": "Se află în același punct cu {names} — {n} grupuri împart această coordonată, deci poziția arată zona, nu unde se află fiecare grup." + "sharedPoint": "Se află în același punct cu {names} — {n} grupuri împart acest punct." } diff --git a/library/i18n/locales/ru/keyCities.json b/library/i18n/locales/ru/keyCities.json index a8dcf1dc8..270a2a66a 100644 --- a/library/i18n/locales/ru/keyCities.json +++ b/library/i18n/locales/ru/keyCities.json @@ -6,7 +6,7 @@ "multi": "несколько народов", "single": "один народ" }, - "note": "Точка — это скопление центров народов в радиусе ~25 км, а не граница муниципалитета. Названия точек взяты из цитируемого справочника.", + "note": "Точка — это скопление меток народов в радиусе ~25 км, а не граница муниципалитета. Названия точек взяты из цитируемого справочника.", "unnamed": "место без названия — {lat}, {lng}", "close": "Закрыть", "country": "Страна", @@ -17,7 +17,7 @@ "unknown": "неизвестно", "pgHere": "Народы здесь", "languages": "Языки", - "sheetNote": "Скопление центров народов в радиусе ~25 км, а не граница муниципалитета. Названия точек взяты из цитируемого справочника (Nominatim/OSM); у точек без названия показаны координаты, а не выдуманное название.", + "sheetNote": "Скопление меток народов в радиусе ~25 км, а не граница муниципалитета. Названия точек взяты из цитируемого справочника (Nominatim/OSM); у точек без названия показаны координаты, а не выдуманное название.", "national": "Данные об интернете — НАЦИОНАЛЬНЫЕ.", "engineMissing": "Не удалось загрузить движок карты." }, @@ -33,7 +33,7 @@ "peopleGroups": "народов: {n}", "caveat": { "rowLead": "Что такое строка.", - "row": "Скопление центров народов в радиусе ~25 км, а не граница муниципалитета. Точки показывают, где сосредоточен народ, а не поселение, поэтому скопления никогда не называются по догадке: {n} центров с несколькими народами определены через {source} (ODbL, источник в каждой строке), а остальные остаются без названия, а не угаданы.", + "row": "Скопление меток народов в радиусе ~25 км, а не граница муниципалитета. Каждая метка обозначает народ, а не город, поэтому скопления никогда не называются по догадке: {n} центров с несколькими народами определены через {source} (ODbL, источник в каждой строке), а остальные остаются без названия, а не угаданы.", "internet": "Они даны как контекст: данные о подключении по городам на этом уровне публично недоступны, и национальный показатель нельзя читать как измерение для города.", "scope": "На этой странице только местоположения народов и данные о подключении — намеренно никаких данных о церквях, верующих или местах встреч." }, diff --git a/library/i18n/locales/ru/pins.json b/library/i18n/locales/ru/pins.json index 4f685dfce..6ae3f2454 100644 --- a/library/i18n/locales/ru/pins.json +++ b/library/i18n/locales/ru/pins.json @@ -1,4 +1,4 @@ { "approximate": "Точка обозначает народ, а не город и не границу.", - "sharedPoint": "Она совпадает с точкой {names} — {n} групп делят эту координату, поэтому положение указывает местность, а не где какая группа." + "sharedPoint": "Она совпадает с точкой {names} — {n} групп делят эту точку." } diff --git a/library/i18n/locales/zh/keyCities.json b/library/i18n/locales/zh/keyCities.json index eefd7aceb..3f860ae23 100644 --- a/library/i18n/locales/zh/keyCities.json +++ b/library/i18n/locales/zh/keyCities.json @@ -6,7 +6,7 @@ "multi": "多个族群", "single": "单一族群" }, - "note": "一个点是约 25 公里内族群中心点的聚合,并非市级边界。已命名的点来自有出处的地名录。", + "note": "一个点是约 25 公里内族群标记点的聚合,并非市级边界。已命名的点来自有出处的地名录。", "unnamed": "未命名地点 — {lat},{lng}", "close": "关闭", "country": "国家", @@ -17,7 +17,7 @@ "unknown": "未知", "pgHere": "此处的族群", "languages": "语言", - "sheetNote": "约 25 公里内族群中心点的聚合,并非市级边界。已命名的点来自有出处的地名录(Nominatim/OSM);未命名的点显示坐标,而不是编造的地名。", + "sheetNote": "约 25 公里内族群标记点的聚合,并非市级边界。已命名的点来自有出处的地名录(Nominatim/OSM);未命名的点显示坐标,而不是编造的地名。", "national": "互联网数据为全国数据。", "engineMissing": "无法加载地图引擎。" }, @@ -33,7 +33,7 @@ "peopleGroups": "族群:{n}", "caveat": { "rowLead": "每一行代表什么。", - "row": "约 25 公里内族群中心点的聚合,并非市级边界。点标示的是族群的中心位置,而非居民点,因此聚合从不靠推断命名:{n} 个多族群中心通过 {source}(ODbL,每行注明出处)确定,其余的保持未命名,而不是猜测。", + "row": "约 25 公里内族群标记点的聚合,并非市级边界。每个标记点代表一个族群,而不是城镇,因此聚合从不靠推断命名:{n} 个多族群中心通过 {source}(ODbL,每行注明出处)确定,其余的保持未命名,而不是猜测。", "internet": "仅作背景参考:在此尺度上没有公开的城市级联网数据,全国数据不能当作城市的测量值。", "scope": "本页只包含族群位置和联网情况——刻意不含任何教会、信徒或聚会地点的数据。" }, diff --git a/library/i18n/locales/zh/pins.json b/library/i18n/locales/zh/pins.json index 2ecf22779..10a142296 100644 --- a/library/i18n/locales/zh/pins.json +++ b/library/i18n/locales/zh/pins.json @@ -1,4 +1,4 @@ { "approximate": "此点代表一个民族,而非某个城镇或边界。", - "sharedPoint": "它与 {names} 位于同一点 — {n} 个群体共用此坐标,因此位置只表示所在地区,而非各群体的具体位置。" + "sharedPoint": "它与 {names} 位于同一点 — {n} 个群体共用这个点。" } diff --git a/library/scripts/posters/generate.mjs b/library/scripts/posters/generate.mjs index 2891d2c65..880c740a8 100644 --- a/library/scripts/posters/generate.mjs +++ b/library/scripts/posters/generate.mjs @@ -164,7 +164,7 @@ const records = await loadRecords(); // Run FORMAT=3x4 separately for the oversize tier. // ── CITY MODE (CITIES=1) ───────────────────────────────────────────────────── // One sheet per NAMED POPULATION CENTRE — the Key City Posters app. -// A "city" here is a cluster of people-group centroids within ~25km that holds +// A "city" here is a cluster of people-group pins within ~25km that holds // MORE THAN ONE group, named by a CITED gazetteer (Nominatim/OSM). Unnamed and // single-group clusters are excluded: a poster titled "unnamed location" is not a // poster, and naming one by inference would fabricate a placename. diff --git a/library/scripts/research/build-tabulator-tables.mjs b/library/scripts/research/build-tabulator-tables.mjs index 69cdbe5fc..b0cdc6494 100644 --- a/library/scripts/research/build-tabulator-tables.mjs +++ b/library/scripts/research/build-tabulator-tables.mjs @@ -336,7 +336,7 @@ if (has('city-candidates.json')) { ], { title: 'Key Cities / Location Clusters', grain: 'one row per ~25km location cluster', - caveat: 'A cluster is people-group CENTROIDS, not a settlement. place_name comes from a cited gazetteer (Nominatim/OSM, ODbL); an unnamed row is honest, not missing.', + caveat: 'A cluster is people-group PINS (each marks a people group, not a town), not a settlement. place_name comes from a cited gazetteer (Nominatim/OSM, ODbL); an unnamed row is honest, not missing.', internet_caveat: 'Internet figures are NATIONAL. Per-city connectivity is not publicly available at this scale.', }, (r) => { const namedRows = r.filter((x) => x.named); @@ -729,7 +729,7 @@ if (has('city-candidates.json') && has('language-resources.json')) { title: 'Languages per City x Resources', grain: 'one row per location cluster x language spoken there', why: '399 of 1,646 clusters are multi-language — a city-level bridge can exist that a country average hides.', - place_caveat: 'A location is a cluster of people-group centroids within ~25km, NOT a municipal boundary. An empty place_name is an unnamed cluster, never an invented one.', + place_caveat: 'A location is a cluster of people-group pins within ~25km, NOT a municipal boundary. An empty place_name is an unnamed cluster, never an invented one.', resolution_caveat: 'resolved:false means the language LABEL did not match an ISO 639-3 record here — its resource status is UNKNOWN, not absent.', pools_caveat: 'Resource status is from eBible + JESUS Film only. GRN and FCBH audio are key-blocked.', }, (r) => { diff --git a/library/scripts/research/derive-city-candidates.mjs b/library/scripts/research/derive-city-candidates.mjs index 028375939..ca8179f70 100644 --- a/library/scripts/research/derive-city-candidates.mjs +++ b/library/scripts/research/derive-city-candidates.mjs @@ -100,7 +100,7 @@ for (const [key, members] of cells) { provenance: { derived_from: 'doxa people-group records (lat/lng centroids)', method: `~25km cell aggregation (quarter-degree), cell=${key}`, - caveat: 'NOT a settlement. A cluster of people-group centroids; place_name is unresolved.', + caveat: 'NOT a settlement. A cluster of people-group pins; place_name is unresolved.', derived_on: '2026-08-01', }, }); diff --git a/library/scripts/research/name-clusters.mjs b/library/scripts/research/name-clusters.mjs index 00526fd04..50a7ff4fc 100644 --- a/library/scripts/research/name-clusters.mjs +++ b/library/scripts/research/name-clusters.mjs @@ -5,8 +5,8 @@ // ALL=1 node name-clusters.mjs # all 1,646 (slow: ~28 min at 1 req/s) // // ═══ WHY A GAZETTEER AND NOT CLUSTERING ═════════════════════════════════════ -// derive-city-candidates.mjs deliberately emits place_name:null. Pins are -// people-group CENTROIDS, not settlements, so inferring a placename from pin +// derive-city-candidates.mjs deliberately emits place_name:null. Each pin marks +// a people group, not a settlement, so inferring a placename from pin // geometry would MANUFACTURE it — and a fabricated placename in a // persecution-sensitive dataset is the dangerous kind of wrong. Naming must come // from a source that can be cited per row. This is that step. diff --git a/library/scripts/research/out/tables/key-cities.json b/library/scripts/research/out/tables/key-cities.json index 6c49b3ca2..f2056703f 100644 --- a/library/scripts/research/out/tables/key-cities.json +++ b/library/scripts/research/out/tables/key-cities.json @@ -2,7 +2,7 @@ "meta": { "title": "Key Cities / Location Clusters", "grain": "one row per ~25km location cluster", - "caveat": "A cluster is people-group CENTROIDS, not a settlement. place_name comes from a cited gazetteer (Nominatim/OSM, ODbL); an unnamed row is honest, not missing.", + "caveat": "A cluster is people-group PINS (each marks a people group, not a town), not a settlement. place_name comes from a cited gazetteer (Nominatim/OSM, ODbL); an unnamed row is honest, not missing.", "internet_caveat": "Internet figures are NATIONAL. Per-city connectivity is not publicly available at this scale." }, "columns": [ diff --git a/library/scripts/research/out/tables/languages-per-city.json b/library/scripts/research/out/tables/languages-per-city.json index 959ce058f..b6d9c2386 100644 --- a/library/scripts/research/out/tables/languages-per-city.json +++ b/library/scripts/research/out/tables/languages-per-city.json @@ -3,7 +3,7 @@ "title": "Languages per City x Resources", "grain": "one row per location cluster x language spoken there", "why": "399 of 1,646 clusters are multi-language — a city-level bridge can exist that a country average hides.", - "place_caveat": "A location is a cluster of people-group centroids within ~25km, NOT a municipal boundary. An empty place_name is an unnamed cluster, never an invented one.", + "place_caveat": "A location is a cluster of people-group pins within ~25km, NOT a municipal boundary. An empty place_name is an unnamed cluster, never an invented one.", "resolution_caveat": "resolved:false means the language LABEL did not match an ISO 639-3 record here — its resource status is UNKNOWN, not absent.", "pools_caveat": "Resource status is from eBible + JESUS Film only. GRN and FCBH audio are key-blocked." }, diff --git a/plugin-designs/cities-internet/data/tables/key-cities.json b/plugin-designs/cities-internet/data/tables/key-cities.json index 6c49b3ca2..f2056703f 100644 --- a/plugin-designs/cities-internet/data/tables/key-cities.json +++ b/plugin-designs/cities-internet/data/tables/key-cities.json @@ -2,7 +2,7 @@ "meta": { "title": "Key Cities / Location Clusters", "grain": "one row per ~25km location cluster", - "caveat": "A cluster is people-group CENTROIDS, not a settlement. place_name comes from a cited gazetteer (Nominatim/OSM, ODbL); an unnamed row is honest, not missing.", + "caveat": "A cluster is people-group PINS (each marks a people group, not a town), not a settlement. place_name comes from a cited gazetteer (Nominatim/OSM, ODbL); an unnamed row is honest, not missing.", "internet_caveat": "Internet figures are NATIONAL. Per-city connectivity is not publicly available at this scale." }, "columns": [ diff --git a/plugin-designs/key-cities/cities-list.vue b/plugin-designs/key-cities/cities-list.vue index 279d1d040..afd7fa597 100644 --- a/plugin-designs/key-cities/cities-list.vue +++ b/plugin-designs/key-cities/cities-list.vue @@ -1,15 +1,15 @@