diff --git a/library/i18n/locales/ar/gospel.json b/library/i18n/locales/ar/gospel.json index 36e5737f7..e1e103a8c 100644 --- a/library/i18n/locales/ar/gospel.json +++ b/library/i18n/locales/ar/gospel.json @@ -333,7 +333,9 @@ "c2Unit": "أشخاص في الشعوب التي هذه لغتها الأساسية — لا المتحدثين بها عمومًا", "c3Title": "البلدان الأكثر لغاتٍ غير مخدومة", "c3Sub": "البلدان الـ{n} الأكثر لغاتٍ لم يُعثر لها على شيء. طول العمود هو كل لغة موجودة في ذلك البلد.", - "c3Unit": "لغات موجودة في البلد (اللغة العابرة للحدود تُحتسب في كل بلد)" + "c3Unit": "لغات موجودة في البلد (اللغة العابرة للحدود تُحتسب في كل بلد)", + "noneHero": "{noScripture} في {nNone} لغة من أصل {nLang} — وهي لغات {popNone} نسمة.", + "noneHeroFound": "لا يوجد كتاب مقدس ولا فيلم في المجموعات التي جرى فحصها" }, "filter": { "showingOnly": "يُعرض فقط: {what}.", diff --git a/library/i18n/locales/de/gospel.json b/library/i18n/locales/de/gospel.json index 9c2976ebd..0586d7dea 100644 --- a/library/i18n/locales/de/gospel.json +++ b/library/i18n/locales/de/gospel.json @@ -333,7 +333,9 @@ "c2Unit": "Menschen in den Volksgruppen, deren PRIMÄRE Sprache dies ist — nicht Sprecher der Sprache", "c3Title": "Länder mit den meisten unversorgten Sprachen", "c3Sub": "Die {n} Länder mit den meisten Sprachen, für die nichts gefunden wurde. Die Balkenlänge ist jede im Land vorhandene Sprache.", - "c3Unit": "im Land vorhandene Sprachen (eine grenzüberschreitende Sprache zählt in jedem Land)" + "c3Unit": "im Land vorhandene Sprachen (eine grenzüberschreitende Sprache zählt in jedem Land)", + "noneHero": "{nNone} von {nLang} Sprachen haben {noScripture} — die Sprachen von {popNone} Menschen.", + "noneHeroFound": "keine Bibel und keinen Film in den geprüften Beständen" }, "filter": { "showingOnly": "Nur {what} werden angezeigt.", diff --git a/library/i18n/locales/en/gospel.json b/library/i18n/locales/en/gospel.json index c36a5f2be..4226db1c8 100644 --- a/library/i18n/locales/en/gospel.json +++ b/library/i18n/locales/en/gospel.json @@ -333,7 +333,9 @@ "c2Unit": "people in the people groups whose PRIMARY language this is — not speakers of the language", "c3Title": "Countries with the most unserved languages", "c3Sub": "The {n} countries with the most languages that have nothing found. Bar length is every language present in that country.", - "c3Unit": "languages present in the country (a cross-border language counts in each)" + "c3Unit": "languages present in the country (a cross-border language counts in each)", + "noneHero": "{nNone} of {nLang} languages have {noScripture} — the languages of {popNone} people.", + "noneHeroFound": "no scripture and no film found in the pools checked" }, "filter": { "showingOnly": "Showing only {what}.", diff --git a/library/i18n/locales/es/gospel.json b/library/i18n/locales/es/gospel.json index 1fb4ba9af..6e3b57880 100644 --- a/library/i18n/locales/es/gospel.json +++ b/library/i18n/locales/es/gospel.json @@ -333,7 +333,9 @@ "c2Unit": "personas en las etnias cuya lengua PRINCIPAL es esta — no hablantes de la lengua", "c3Title": "Países con más lenguas desatendidas", "c3Sub": "Los {n} países con más lenguas sin nada encontrado. La longitud de la barra es cada lengua presente en ese país.", - "c3Unit": "lenguas presentes en el país (una lengua transfronteriza cuenta en cada uno)" + "c3Unit": "lenguas presentes en el país (una lengua transfronteriza cuenta en cada uno)", + "noneHero": "{nNone} de {nLang} lenguas tienen {noScripture}: las lenguas de {popNone} personas.", + "noneHeroFound": "ni Escritura ni película en los repositorios consultados" }, "filter": { "showingOnly": "Solo se muestran {what}.", diff --git a/library/i18n/locales/fr/gospel.json b/library/i18n/locales/fr/gospel.json index 3f4f79f6b..981b3a81d 100644 --- a/library/i18n/locales/fr/gospel.json +++ b/library/i18n/locales/fr/gospel.json @@ -333,7 +333,9 @@ "c2Unit": "personnes dans les peuples dont c'est la langue PRINCIPALE — non les locuteurs de la langue", "c3Title": "Pays comptant le plus de langues non desservies", "c3Sub": "Les {n} pays comptant le plus de langues sans rien de trouvé. La longueur de la barre correspond à chaque langue présente dans ce pays.", - "c3Unit": "langues présentes dans le pays (une langue transfrontalière compte dans chacun)" + "c3Unit": "langues présentes dans le pays (une langue transfrontalière compte dans chacun)", + "noneHero": "{nNone} langues sur {nLang} ont {noScripture} — les langues de {popNone} personnes.", + "noneHeroFound": "ni Écriture ni film dans les fonds consultés" }, "filter": { "showingOnly": "Affichage limité aux {what}.", diff --git a/library/i18n/locales/hi/gospel.json b/library/i18n/locales/hi/gospel.json index e454fb34a..8b552ef1d 100644 --- a/library/i18n/locales/hi/gospel.json +++ b/library/i18n/locales/hi/gospel.json @@ -333,7 +333,9 @@ "c2Unit": "उन जनसमूहों के लोग जिनकी मुख्य भाषा यही है — भाषा के सभी वक्ता नहीं", "c3Title": "सबसे अधिक असेवित भाषाओं वाले देश", "c3Sub": "{n} देश जिनमें सबसे अधिक भाषाओं के लिए कुछ नहीं मिला। बार की लंबाई उस देश में मौजूद हर भाषा है।", - "c3Unit": "देश में मौजूद भाषाएँ (सीमा-पार भाषा हर देश में गिनी जाती है)" + "c3Unit": "देश में मौजूद भाषाएँ (सीमा-पार भाषा हर देश में गिनी जाती है)", + "noneHero": "{nLang} में से {nNone} भाषाओं में {noScripture} — ये {popNone} लोगों की भाषाएँ हैं।", + "noneHeroFound": "जाँचे गए स्रोतों में न पवित्रशास्त्र मिला, न फ़िल्म" }, "filter": { "showingOnly": "केवल {what} दिखाए जा रहे हैं।", diff --git a/library/i18n/locales/it/gospel.json b/library/i18n/locales/it/gospel.json index a918de5d4..485d64233 100644 --- a/library/i18n/locales/it/gospel.json +++ b/library/i18n/locales/it/gospel.json @@ -333,7 +333,9 @@ "c2Unit": "persone nei gruppi la cui lingua PRINCIPALE è questa — non i parlanti della lingua", "c3Title": "Paesi con più lingue non servite", "c3Sub": "I {n} paesi con più lingue per cui non è stato trovato nulla. La lunghezza della barra è ogni lingua presente in quel paese.", - "c3Unit": "lingue presenti nel paese (una lingua transfrontaliera conta in ciascuno)" + "c3Unit": "lingue presenti nel paese (una lingua transfrontaliera conta in ciascuno)", + "noneHero": "{nNone} lingue su {nLang} hanno {noScripture} — le lingue di {popNone} persone.", + "noneHeroFound": "nessuna Scrittura e nessun film nei repertori consultati" }, "filter": { "showingOnly": "Sono mostrati solo {what}.", diff --git a/library/i18n/locales/pt/gospel.json b/library/i18n/locales/pt/gospel.json index 9416a6f47..21a1eca0a 100644 --- a/library/i18n/locales/pt/gospel.json +++ b/library/i18n/locales/pt/gospel.json @@ -333,7 +333,9 @@ "c2Unit": "pessoas nas etnias cuja língua PRINCIPAL é esta — não falantes da língua", "c3Title": "Países com mais línguas desatendidas", "c3Sub": "Os {n} países com mais línguas sem nada encontrado. O comprimento da barra é cada língua presente nesse país.", - "c3Unit": "línguas presentes no país (uma língua transfronteiriça conta em cada um)" + "c3Unit": "línguas presentes no país (uma língua transfronteiriça conta em cada um)", + "noneHero": "{nNone} de {nLang} línguas têm {noScripture} — as línguas de {popNone} pessoas.", + "noneHeroFound": "nenhuma Escritura e nenhum filme nos acervos consultados" }, "filter": { "showingOnly": "Mostrando apenas {what}.", diff --git a/library/i18n/locales/ro/gospel.json b/library/i18n/locales/ro/gospel.json index 51ccd9aeb..68c663835 100644 --- a/library/i18n/locales/ro/gospel.json +++ b/library/i18n/locales/ro/gospel.json @@ -333,7 +333,9 @@ "c2Unit": "persoane din grupurile a căror limbă PRINCIPALĂ este aceasta — nu vorbitorii limbii", "c3Title": "Țări cu cele mai multe limbi neservite", "c3Sub": "Cele {n} țări cu cele mai multe limbi pentru care nu s-a găsit nimic. Lungimea barei este fiecare limbă prezentă în acea țară.", - "c3Unit": "limbi prezente în țară (o limbă transfrontalieră se numără în fiecare)" + "c3Unit": "limbi prezente în țară (o limbă transfrontalieră se numără în fiecare)", + "noneHero": "{nNone} din {nLang} limbi au {noScripture} — limbile a {popNone} de oameni.", + "noneHeroFound": "nicio Scriptură și niciun film în colecțiile verificate" }, "filter": { "showingOnly": "Se afișează doar {what}.", diff --git a/library/i18n/locales/ru/gospel.json b/library/i18n/locales/ru/gospel.json index b79562c69..e53c111ae 100644 --- a/library/i18n/locales/ru/gospel.json +++ b/library/i18n/locales/ru/gospel.json @@ -333,7 +333,9 @@ "c2Unit": "люди в народах, для которых это ОСНОВНОЙ язык, — не все говорящие на нём", "c3Title": "Страны с наибольшим числом неохваченных языков", "c3Sub": "{n} стран с наибольшим числом языков, для которых ничего не найдено. Длина столбца — каждый язык, присутствующий в этой стране.", - "c3Unit": "языки, присутствующие в стране (трансграничный язык считается в каждой)" + "c3Unit": "языки, присутствующие в стране (трансграничный язык считается в каждой)", + "noneHero": "{noScripture} — у {nNone} из {nLang} языков, языков {popNone} человек.", + "noneHeroFound": "ни Писания, ни фильма в проверенных источниках" }, "filter": { "showingOnly": "Показаны только {what}.", diff --git a/library/i18n/locales/zh/gospel.json b/library/i18n/locales/zh/gospel.json index 30da46ddc..3f2ba7abc 100644 --- a/library/i18n/locales/zh/gospel.json +++ b/library/i18n/locales/zh/gospel.json @@ -333,7 +333,9 @@ "c2Unit": "以该语言为主要语言的族群人口 — 不是该语言的全部使用者", "c3Title": "未得服事语言最多的国家", "c3Sub": "一无所获语言最多的 {n} 个国家。条形长度为该国存在的全部语言。", - "c3Unit": "该国存在的语言(跨境语言在每个国家各计一次)" + "c3Unit": "该国存在的语言(跨境语言在每个国家各计一次)", + "noneHero": "{nLang} 种语言中有 {nNone} 种{noScripture}——这是 {popNone} 人的语言。", + "noneHeroFound": "在已查询的资源库中既无圣经也无影片" }, "filter": { "showingOnly": "仅显示{what}。", diff --git a/plugin-designs/gospel-resources/charts.vue b/plugin-designs/gospel-resources/charts.vue index 0b83e610b..2d13cf213 100644 --- a/plugin-designs/gospel-resources/charts.vue +++ b/plugin-designs/gospel-resources/charts.vue @@ -46,6 +46,8 @@ * inlining it into the IIFE would block first paint for every profile in the bundle). */ import { useOptionalT } from '@map/composables/useOptionalT.js' +import { sentenceParts, strong, ltr, keep } from '@map/composables/useSentence.js' +import { h } from 'vue' import { computed, inject, ref, watch } from 'vue' import BarChart from '@map/components/charts/BarChart.vue' import { useShadowStyles } from '@map/composables/useShadowStyles.js' @@ -67,6 +69,22 @@ import { useShadowStyles } from '@map/composables/useShadowStyles.js' // with English as the last resort. tStatic resolves 'gospel.' against the same catalogue. const tr = useOptionalT('gospel') +// ★ THE HERO SENTENCE, ONE KEY. Each COUNT arrives already formatted and already pluralised from its +// own key: vue-i18n resolves one plural form per key, so a sentence carrying three counts cannot +// pluralise them from its own message. keep() hands the placeholders back to t() intact — without it +// the lookup BLANKS them and the sentence renders with no values at all, in every locale at once. +const heroSentence = computed(() => { + const msg = tr('gospel.charts.noneHero', keep('nNone', 'nLang', 'noScripture', 'popNone')) + return h('span', sentenceParts(msg, { + nNone: strong(fmt(nNone.value)), + nLang: fmt(nLang.value), + // The phrase is quoted from English sources and must not reverse inside an Arabic sentence, so it + // keeps its own dir. Passed in as a VALUE: a translator never has to reproduce the markup. + noScripture: ltr(tr('gospel.charts.noneHeroFound', 'no scripture and no film found in the pools checked'), true), + popNone: strong(fmt(popNone.value)), + })) +}) + const profileConfig = inject('profileConfig', ref(null)) const isDark = computed(() => profileConfig.value?.isDark === true) @@ -465,9 +483,13 @@ useShadowStyles( group that speaks it — so the language is the unit of the gap.

-
- {{ fmt(nNone) }} of {{ fmt(nLang) }} languages have no scripture and no film - found in the pools checked — the languages of {{ fmt(popNone) }} people. + +