diff --git a/library/i18n/locales/ar/pplr.json b/library/i18n/locales/ar/pplr.json index 6d413ea7a..aefa0ba9d 100644 --- a/library/i18n/locales/ar/pplr.json +++ b/library/i18n/locales/ar/pplr.json @@ -32,5 +32,61 @@ "readyPins": "جاهز · دبابيس الشعوب في الدول: {pins} · انقر أي دبوس", "readyLanguage": "جاهز · الدبابيس: {pins} · تغطية العائلات {coverage}% · أعلى 25 = {top}%", "readyReligion": "الدبابيس: {pins} · الأكثر شيوعًا: {religion} ({count})" + }, + "ui": { + "chooseView": "اختر عرضًا", + "search": "ابحث بالشعب أو المكان أو اللغة أو الدين…", + "baseMap": "الخريطة الأساسية", + "dataSources": "مصادر البيانات", + "legend": "مفتاح الخريطة", + "openLegend": "افتح مفتاح الخريطة", + "clearSelectionEsc": "إلغاء التحديد (Esc)", + "closeEsc": "إغلاق (Esc)", + "close": "إغلاق", + "retry": "أعد المحاولة", + "loadingMap": "جارٍ تحميل الخريطة", + "flyToPin": "انتقل إلى الدبوس", + "primaryReligion": "الدين الرئيسي", + "ropHierarchy": "تسلسل ROP الهرمي" + }, + "pill": { + "religion": "توزيع الأديان · انقر دبوسًا للتفاصيل", + "ropTree": "تسلسل ROP الهرمي · الكتلة ← المجموعة ← الشعب ← PGIC", + "languageFamilies": "العائلات العرقية اللغوية (PPLR) · انقر دبوسًا للتفاصيل", + "sunburst": "تسلسل ROP الهرمي · الكتلة ← مجموعة الشعوب · مرّر للتكبير", + "pins": "كل دبابيس الشعوب في الدول · انقر لمعرّفات الأنظمة", + "coverage": "تغطية الترجمة · التظليل = متوسط اللغات المعبّأة لكل دولة · انقر دبوسًا أو دولة", + "rosetta": "جدول معرّفات الأنظمة · اللون = المعرّفات الموجودة · ★ = صف نموذجي" + }, + "legendTitle": { + "avgLocales": "متوسط اللغات / {n}", + "idCoverage": "تغطية المعرّفات" + }, + "rosetta": { + "legend": { + "all": "JP + IMB + WCD، الثلاثة", + "imbOnly": "IMB فقط", + "jpOnly": "JP فقط", + "neither": "لا هذا ولا ذاك" + }, + "samplePg": "★ شعب نموذجي", + "missingIds": "لم تُربط بعد في PPLR: {ids}. الصف الفارغ نقص في البيانات وليس خطأ." + }, + "popup": { + "noName": "(بلا اسم)", + "country": "الدولة", + "religion": "الدين", + "language": "اللغة", + "family": "العائلة", + "affinityBloc": "الكتلة", + "cluster": "المجموعة", + "peopleCluster": "مجموعة الشعوب", + "peopleGroup": "الشعب", + "pgCount": "الشعوب", + "avgLocalesFilled": "متوسط اللغات المعبّأة", + "iso3Country": "رمز الدولة ISO-3" + }, + "card": { + "nameInLocales": "الاسم في {n} لغة" } } diff --git a/library/i18n/locales/de/pplr.json b/library/i18n/locales/de/pplr.json index 095803fca..59574c246 100644 --- a/library/i18n/locales/de/pplr.json +++ b/library/i18n/locales/de/pplr.json @@ -32,5 +32,61 @@ "readyPins": "Bereit · Pins: {pins} · einen Pin anklicken", "readyLanguage": "Bereit · Pins: {pins} · Familienabdeckung {coverage} % · Top 25 = {top} %", "readyReligion": "Pins: {pins} · am häufigsten: {religion} ({count})" + }, + "ui": { + "chooseView": "Ansicht wählen", + "search": "Nach Volk, Ort, Sprache, Religion suchen…", + "baseMap": "Grundkarte", + "dataSources": "Datenquellen", + "legend": "Legende", + "openLegend": "Legende öffnen", + "clearSelectionEsc": "Auswahl aufheben (Esc)", + "closeEsc": "Schließen (Esc)", + "close": "Schließen", + "retry": "Erneut versuchen", + "loadingMap": "Karte wird geladen", + "flyToPin": "Zum Pin fliegen", + "primaryReligion": "Hauptreligion", + "ropHierarchy": "ROP-Hierarchie" + }, + "pill": { + "religion": "Verteilung der Religionen · Pin anklicken für Details", + "ropTree": "ROP-Hierarchie · Affinitätsblock → Cluster → Volk → PGIC", + "languageFamilies": "Ethnolinguistische Familien (PPLR) · Pin anklicken für Details", + "sunburst": "ROP-Hierarchie · Affinitätsblock → Volkscluster · scrollen zum Zoomen", + "pins": "Alle Volksgruppen-Pins je Land · anklicken für systemübergreifende IDs", + "coverage": "Übersetzungsabdeckung · Färbung = durchschnittlich gefüllte Sprachen je Land · Pin oder Land anklicken", + "rosetta": "ID-Rosetta · Farbe = vorhandene IDs · ★ = Beispielzeile" + }, + "legendTitle": { + "avgLocales": "Durchschnitt Sprachen / {n}", + "idCoverage": "ID-Abdeckung" + }, + "rosetta": { + "legend": { + "all": "JP + IMB + WCD, alle drei", + "imbOnly": "Nur IMB", + "jpOnly": "Nur JP", + "neither": "keins von beiden" + }, + "samplePg": "★ Beispiel-Volk", + "missingIds": "In PPLR noch nicht zugeordnet: {ids}. Eine leere Zeile ist eine Datenlücke, kein Fehler." + }, + "popup": { + "noName": "(ohne Namen)", + "country": "Land", + "religion": "Religion", + "language": "Sprache", + "family": "Familie", + "affinityBloc": "Affinitätsblock", + "cluster": "Cluster", + "peopleCluster": "Volkscluster", + "peopleGroup": "Volk", + "pgCount": "Völker", + "avgLocalesFilled": "Durchschnittlich gefüllte Sprachen", + "iso3Country": "ISO-3-Land" + }, + "card": { + "nameInLocales": "Name in {n} Sprachen" } } diff --git a/library/i18n/locales/en/pplr.json b/library/i18n/locales/en/pplr.json index 75b7eb4e4..21f093b0c 100644 --- a/library/i18n/locales/en/pplr.json +++ b/library/i18n/locales/en/pplr.json @@ -32,5 +32,61 @@ "readyPins": "Ready · {pins} PG-in-country pins · click any pin", "readyLanguage": "Ready · {pins} pins · {coverage}% family coverage · top-25 = {top}%", "readyReligion": "{pins} pins · {religion} most common ({count})" + }, + "ui": { + "chooseView": "Choose a view", + "search": "Search by people, place, language, religion…", + "baseMap": "Base map", + "dataSources": "Data sources", + "legend": "Legend", + "openLegend": "Open legend", + "clearSelectionEsc": "Clear selection (Esc)", + "closeEsc": "Close (Esc)", + "close": "Close", + "retry": "Retry", + "loadingMap": "Loading map", + "flyToPin": "Fly to pin", + "primaryReligion": "Primary religion", + "ropHierarchy": "ROP hierarchy" + }, + "pill": { + "religion": "Religion distribution · click a pin for detail", + "ropTree": "ROP hierarchy · Affinity Bloc → Cluster → People Group → PGIC", + "languageFamilies": "Ethnolinguistic families (PPLR) · click a pin for detail", + "sunburst": "ROP hierarchy · Affinity Bloc → People Cluster · scroll to zoom", + "pins": "All people-group-in-country pins · click for cross-system IDs", + "coverage": "Translation coverage · shading = average locales filled per country · click a pin or a country", + "rosetta": "Cross-system ID Rosetta · colour = which IDs exist · ★ = sample row" + }, + "legendTitle": { + "avgLocales": "Average locales / {n}", + "idCoverage": "ID coverage" + }, + "rosetta": { + "legend": { + "all": "JP + IMB + WCD, all three", + "imbOnly": "IMB only", + "jpOnly": "JP only", + "neither": "neither" + }, + "samplePg": "★ sample people group", + "missingIds": "Not yet cross-mapped in PPLR: {ids}. An empty row is a data gap, not an error." + }, + "popup": { + "noName": "(no name)", + "country": "Country", + "religion": "Religion", + "language": "Language", + "family": "Family", + "affinityBloc": "Affinity Bloc", + "cluster": "Cluster", + "peopleCluster": "People cluster", + "peopleGroup": "People group", + "pgCount": "People groups", + "avgLocalesFilled": "Average locales filled", + "iso3Country": "ISO-3 country" + }, + "card": { + "nameInLocales": "Name in {n} locales" } } diff --git a/library/i18n/locales/es/pplr.json b/library/i18n/locales/es/pplr.json index 4c01ffd43..d2b41931d 100644 --- a/library/i18n/locales/es/pplr.json +++ b/library/i18n/locales/es/pplr.json @@ -32,5 +32,61 @@ "readyPins": "Listo · pines: {pins} · haz clic en un pin", "readyLanguage": "Listo · pines: {pins} · cobertura de familias {coverage} % · top 25 = {top} %", "readyReligion": "Pines: {pins} · más común: {religion} ({count})" + }, + "ui": { + "chooseView": "Elige una vista", + "search": "Buscar por pueblo, lugar, idioma, religión…", + "baseMap": "Mapa base", + "dataSources": "Fuentes de datos", + "legend": "Leyenda", + "openLegend": "Abrir la leyenda", + "clearSelectionEsc": "Borrar la selección (Esc)", + "closeEsc": "Cerrar (Esc)", + "close": "Cerrar", + "retry": "Reintentar", + "loadingMap": "Cargando el mapa", + "flyToPin": "Ir al pin", + "primaryReligion": "Religión principal", + "ropHierarchy": "Jerarquía ROP" + }, + "pill": { + "religion": "Distribución de religiones · haz clic en un pin para ver detalles", + "ropTree": "Jerarquía ROP · bloque de afinidad → clúster → pueblo → PGIC", + "languageFamilies": "Familias etnolingüísticas (PPLR) · haz clic en un pin para ver detalles", + "sunburst": "Jerarquía ROP · bloque de afinidad → clúster de pueblos · desplázate para ampliar", + "pins": "Todos los pines de pueblos por país · haz clic para ver los identificadores de cada sistema", + "coverage": "Cobertura de traducción · sombreado = promedio de idiomas completados por país · haz clic en un pin o un país", + "rosetta": "Rosetta de identificadores · color = identificadores existentes · ★ = fila de ejemplo" + }, + "legendTitle": { + "avgLocales": "Promedio de idiomas / {n}", + "idCoverage": "Cobertura de identificadores" + }, + "rosetta": { + "legend": { + "all": "JP + IMB + WCD, los tres", + "imbOnly": "Solo IMB", + "jpOnly": "Solo JP", + "neither": "ninguno" + }, + "samplePg": "★ pueblo de ejemplo", + "missingIds": "Aún sin vincular en PPLR: {ids}. Una fila vacía es un hueco en los datos, no un error." + }, + "popup": { + "noName": "(sin nombre)", + "country": "País", + "religion": "Religión", + "language": "Idioma", + "family": "Familia", + "affinityBloc": "Bloque de afinidad", + "cluster": "Clúster", + "peopleCluster": "Clúster de pueblos", + "peopleGroup": "Pueblo", + "pgCount": "Pueblos", + "avgLocalesFilled": "Promedio de idiomas completados", + "iso3Country": "País ISO-3" + }, + "card": { + "nameInLocales": "Nombre en {n} idiomas" } } diff --git a/library/i18n/locales/fr/pplr.json b/library/i18n/locales/fr/pplr.json index a58199afd..595d650fc 100644 --- a/library/i18n/locales/fr/pplr.json +++ b/library/i18n/locales/fr/pplr.json @@ -32,5 +32,61 @@ "readyPins": "Prêt · épingles : {pins} · cliquez sur une épingle", "readyLanguage": "Prêt · épingles : {pins} · couverture des familles {coverage} % · top 25 = {top} %", "readyReligion": "Épingles : {pins} · la plus fréquente : {religion} ({count})" + }, + "ui": { + "chooseView": "Choisir une vue", + "search": "Rechercher par peuple, lieu, langue, religion…", + "baseMap": "Fond de carte", + "dataSources": "Sources des données", + "legend": "Légende", + "openLegend": "Ouvrir la légende", + "clearSelectionEsc": "Effacer la sélection (Échap)", + "closeEsc": "Fermer (Échap)", + "close": "Fermer", + "retry": "Réessayer", + "loadingMap": "Chargement de la carte", + "flyToPin": "Aller à l’épingle", + "primaryReligion": "Religion principale", + "ropHierarchy": "Hiérarchie ROP" + }, + "pill": { + "religion": "Répartition des religions · cliquez sur une épingle pour le détail", + "ropTree": "Hiérarchie ROP · bloc d’affinité → grappe → peuple → PGIC", + "languageFamilies": "Familles ethnolinguistiques (PPLR) · cliquez sur une épingle pour le détail", + "sunburst": "Hiérarchie ROP · bloc d’affinité → grappe de peuples · faites défiler pour zoomer", + "pins": "Toutes les épingles peuple-pays · cliquez pour les identifiants des systèmes", + "coverage": "Couverture de traduction · teinte = moyenne des langues renseignées par pays · cliquez sur une épingle ou un pays", + "rosetta": "Rosetta des identifiants · couleur = identifiants présents · ★ = ligne d’exemple" + }, + "legendTitle": { + "avgLocales": "Moyenne des langues / {n}", + "idCoverage": "Couverture des identifiants" + }, + "rosetta": { + "legend": { + "all": "JP + IMB + WCD, les trois", + "imbOnly": "IMB seulement", + "jpOnly": "JP seulement", + "neither": "aucun des deux" + }, + "samplePg": "★ peuple d’exemple", + "missingIds": "Pas encore mis en correspondance dans PPLR : {ids}. Une ligne vide est une lacune des données, pas une erreur." + }, + "popup": { + "noName": "(sans nom)", + "country": "Pays", + "religion": "Religion", + "language": "Langue", + "family": "Famille", + "affinityBloc": "Bloc d’affinité", + "cluster": "Grappe", + "peopleCluster": "Grappe de peuples", + "peopleGroup": "Peuple", + "pgCount": "Peuples", + "avgLocalesFilled": "Moyenne des langues renseignées", + "iso3Country": "Pays ISO-3" + }, + "card": { + "nameInLocales": "Nom dans {n} langues" } } diff --git a/library/i18n/locales/hi/pplr.json b/library/i18n/locales/hi/pplr.json index c00988366..ad22ca0ab 100644 --- a/library/i18n/locales/hi/pplr.json +++ b/library/i18n/locales/hi/pplr.json @@ -32,5 +32,61 @@ "readyPins": "तैयार · पिन: {pins} · किसी पिन पर क्लिक करें", "readyLanguage": "तैयार · पिन: {pins} · परिवार कवरेज {coverage}% · शीर्ष 25 = {top}%", "readyReligion": "पिन: {pins} · सबसे आम: {religion} ({count})" + }, + "ui": { + "chooseView": "दृश्य चुनें", + "search": "जनसमूह, स्थान, भाषा, धर्म से खोजें…", + "baseMap": "आधार मानचित्र", + "dataSources": "डेटा स्रोत", + "legend": "सूचकांक", + "openLegend": "सूचकांक खोलें", + "clearSelectionEsc": "चयन हटाएँ (Esc)", + "closeEsc": "बंद करें (Esc)", + "close": "बंद करें", + "retry": "फिर से कोशिश करें", + "loadingMap": "मानचित्र लोड हो रहा है", + "flyToPin": "पिन पर जाएँ", + "primaryReligion": "प्रमुख धर्म", + "ropHierarchy": "ROP पदानुक्रम" + }, + "pill": { + "religion": "धर्मों का वितरण · विवरण के लिए किसी पिन पर क्लिक करें", + "ropTree": "ROP पदानुक्रम · सम्बद्धता खंड → क्लस्टर → जनसमूह → PGIC", + "languageFamilies": "नृजातीय-भाषाई परिवार (PPLR) · विवरण के लिए किसी पिन पर क्लिक करें", + "sunburst": "ROP पदानुक्रम · सम्बद्धता खंड → जनसमूह क्लस्टर · ज़ूम के लिए स्क्रॉल करें", + "pins": "देश-वार सभी जनसमूह पिन · प्रणालियों की पहचान-संख्याओं के लिए क्लिक करें", + "coverage": "अनुवाद कवरेज · रंग = प्रति देश भरी गई भाषाओं का औसत · किसी पिन या देश पर क्लिक करें", + "rosetta": "पहचान-संख्या रोसेटा · रंग = कौन-सी पहचान-संख्याएँ हैं · ★ = नमूना पंक्ति" + }, + "legendTitle": { + "avgLocales": "भाषाओं का औसत / {n}", + "idCoverage": "पहचान-संख्या कवरेज" + }, + "rosetta": { + "legend": { + "all": "JP + IMB + WCD, तीनों", + "imbOnly": "केवल IMB", + "jpOnly": "केवल JP", + "neither": "दोनों में से कोई नहीं" + }, + "samplePg": "★ नमूना जनसमूह", + "missingIds": "PPLR में अभी मिलान नहीं हुआ: {ids}। खाली पंक्ति डेटा की कमी है, त्रुटि नहीं।" + }, + "popup": { + "noName": "(कोई नाम नहीं)", + "country": "देश", + "religion": "धर्म", + "language": "भाषा", + "family": "परिवार", + "affinityBloc": "सम्बद्धता खंड", + "cluster": "क्लस्टर", + "peopleCluster": "जनसमूह क्लस्टर", + "peopleGroup": "जनसमूह", + "pgCount": "जनसमूह", + "avgLocalesFilled": "भरी गई भाषाओं का औसत", + "iso3Country": "ISO-3 देश" + }, + "card": { + "nameInLocales": "{n} भाषाओं में नाम" } } diff --git a/library/i18n/locales/it/pplr.json b/library/i18n/locales/it/pplr.json index 733724be9..f650e4542 100644 --- a/library/i18n/locales/it/pplr.json +++ b/library/i18n/locales/it/pplr.json @@ -32,5 +32,61 @@ "readyPins": "Pronto · segnaposto: {pins} · clicca un segnaposto", "readyLanguage": "Pronto · segnaposto: {pins} · copertura famiglie {coverage}% · top 25 = {top}%", "readyReligion": "Segnaposto: {pins} · più comune: {religion} ({count})" + }, + "ui": { + "chooseView": "Scegli una vista", + "search": "Cerca per popolo, luogo, lingua, religione…", + "baseMap": "Mappa di base", + "dataSources": "Fonti dei dati", + "legend": "Legenda", + "openLegend": "Apri la legenda", + "clearSelectionEsc": "Cancella la selezione (Esc)", + "closeEsc": "Chiudi (Esc)", + "close": "Chiudi", + "retry": "Riprova", + "loadingMap": "Caricamento della mappa", + "flyToPin": "Vai al segnaposto", + "primaryReligion": "Religione principale", + "ropHierarchy": "Gerarchia ROP" + }, + "pill": { + "religion": "Distribuzione delle religioni · clicca un segnaposto per i dettagli", + "ropTree": "Gerarchia ROP · blocco di affinità → cluster → popolo → PGIC", + "languageFamilies": "Famiglie etnolinguistiche (PPLR) · clicca un segnaposto per i dettagli", + "sunburst": "Gerarchia ROP · blocco di affinità → cluster di popoli · scorri per ingrandire", + "pins": "Tutti i segnaposto popolo-paese · clicca per gli identificativi dei sistemi", + "coverage": "Copertura delle traduzioni · colore = media delle lingue compilate per paese · clicca un segnaposto o un paese", + "rosetta": "Rosetta degli identificativi · colore = identificativi presenti · ★ = riga di esempio" + }, + "legendTitle": { + "avgLocales": "Media delle lingue / {n}", + "idCoverage": "Copertura degli identificativi" + }, + "rosetta": { + "legend": { + "all": "JP + IMB + WCD, tutti e tre", + "imbOnly": "Solo IMB", + "jpOnly": "Solo JP", + "neither": "nessuno dei due" + }, + "samplePg": "★ popolo di esempio", + "missingIds": "Non ancora collegati in PPLR: {ids}. Una riga vuota è una lacuna nei dati, non un errore." + }, + "popup": { + "noName": "(senza nome)", + "country": "Paese", + "religion": "Religione", + "language": "Lingua", + "family": "Famiglia", + "affinityBloc": "Blocco di affinità", + "cluster": "Cluster", + "peopleCluster": "Cluster di popoli", + "peopleGroup": "Popolo", + "pgCount": "Popoli", + "avgLocalesFilled": "Media delle lingue compilate", + "iso3Country": "Paese ISO-3" + }, + "card": { + "nameInLocales": "Nome in {n} lingue" } } diff --git a/library/i18n/locales/pt/pplr.json b/library/i18n/locales/pt/pplr.json index 131e62d93..68c219455 100644 --- a/library/i18n/locales/pt/pplr.json +++ b/library/i18n/locales/pt/pplr.json @@ -32,5 +32,61 @@ "readyPins": "Pronto · marcadores: {pins} · clique num marcador", "readyLanguage": "Pronto · marcadores: {pins} · cobertura de famílias {coverage}% · top 25 = {top}%", "readyReligion": "Marcadores: {pins} · mais comum: {religion} ({count})" + }, + "ui": { + "chooseView": "Escolha uma vista", + "search": "Pesquisar por povo, lugar, idioma, religião…", + "baseMap": "Mapa base", + "dataSources": "Fontes de dados", + "legend": "Legenda", + "openLegend": "Abrir a legenda", + "clearSelectionEsc": "Limpar a seleção (Esc)", + "closeEsc": "Fechar (Esc)", + "close": "Fechar", + "retry": "Tentar novamente", + "loadingMap": "A carregar o mapa", + "flyToPin": "Ir para o marcador", + "primaryReligion": "Religião principal", + "ropHierarchy": "Hierarquia ROP" + }, + "pill": { + "religion": "Distribuição das religiões · clique num marcador para ver detalhes", + "ropTree": "Hierarquia ROP · bloco de afinidade → agrupamento → povo → PGIC", + "languageFamilies": "Famílias etnolinguísticas (PPLR) · clique num marcador para ver detalhes", + "sunburst": "Hierarquia ROP · bloco de afinidade → agrupamento de povos · role para ampliar", + "pins": "Todos os marcadores povo-país · clique para ver os identificadores dos sistemas", + "coverage": "Cobertura de tradução · cor = média de idiomas preenchidos por país · clique num marcador ou num país", + "rosetta": "Rosetta de identificadores · cor = identificadores existentes · ★ = linha de exemplo" + }, + "legendTitle": { + "avgLocales": "Média de idiomas / {n}", + "idCoverage": "Cobertura de identificadores" + }, + "rosetta": { + "legend": { + "all": "JP + IMB + WCD, os três", + "imbOnly": "Apenas IMB", + "jpOnly": "Apenas JP", + "neither": "nenhum" + }, + "samplePg": "★ povo de exemplo", + "missingIds": "Ainda não correspondidos no PPLR: {ids}. Uma linha vazia é uma lacuna nos dados, não um erro." + }, + "popup": { + "noName": "(sem nome)", + "country": "País", + "religion": "Religião", + "language": "Idioma", + "family": "Família", + "affinityBloc": "Bloco de afinidade", + "cluster": "Agrupamento", + "peopleCluster": "Agrupamento de povos", + "peopleGroup": "Povo", + "pgCount": "Povos", + "avgLocalesFilled": "Média de idiomas preenchidos", + "iso3Country": "País ISO-3" + }, + "card": { + "nameInLocales": "Nome em {n} idiomas" } } diff --git a/library/i18n/locales/ro/pplr.json b/library/i18n/locales/ro/pplr.json index 1bcb2b729..1caa6957d 100644 --- a/library/i18n/locales/ro/pplr.json +++ b/library/i18n/locales/ro/pplr.json @@ -32,5 +32,61 @@ "readyPins": "Gata · repere: {pins} · dați clic pe un reper", "readyLanguage": "Gata · repere: {pins} · acoperirea familiilor {coverage}% · top 25 = {top}%", "readyReligion": "Repere: {pins} · cea mai frecventă: {religion} ({count})" + }, + "ui": { + "chooseView": "Alegeți o vedere", + "search": "Căutați după popor, loc, limbă, religie…", + "baseMap": "Hartă de bază", + "dataSources": "Surse de date", + "legend": "Legendă", + "openLegend": "Deschide legenda", + "clearSelectionEsc": "Șterge selecția (Esc)", + "closeEsc": "Închide (Esc)", + "close": "Închide", + "retry": "Reîncercați", + "loadingMap": "Se încarcă harta", + "flyToPin": "Mergi la reper", + "primaryReligion": "Religia principală", + "ropHierarchy": "Ierarhia ROP" + }, + "pill": { + "religion": "Distribuția religiilor · dați clic pe un reper pentru detalii", + "ropTree": "Ierarhia ROP · bloc de afinitate → grup → popor → PGIC", + "languageFamilies": "Familii etnolingvistice (PPLR) · dați clic pe un reper pentru detalii", + "sunburst": "Ierarhia ROP · bloc de afinitate → grup de popoare · derulați pentru zoom", + "pins": "Toate reperele popor-țară · dați clic pentru identificatorii sistemelor", + "coverage": "Acoperirea traducerilor · nuanța = media limbilor completate pe țară · dați clic pe un reper sau pe o țară", + "rosetta": "Rosetta identificatorilor · culoare = identificatorii existenți · ★ = rând de exemplu" + }, + "legendTitle": { + "avgLocales": "Media limbilor / {n}", + "idCoverage": "Acoperirea identificatorilor" + }, + "rosetta": { + "legend": { + "all": "JP + IMB + WCD, toate trei", + "imbOnly": "Doar IMB", + "jpOnly": "Doar JP", + "neither": "niciunul" + }, + "samplePg": "★ popor de exemplu", + "missingIds": "Încă neasociate în PPLR: {ids}. Un rând gol este o lipsă de date, nu o eroare." + }, + "popup": { + "noName": "(fără nume)", + "country": "Țară", + "religion": "Religie", + "language": "Limbă", + "family": "Familie", + "affinityBloc": "Bloc de afinitate", + "cluster": "Grup", + "peopleCluster": "Grup de popoare", + "peopleGroup": "Popor", + "pgCount": "Popoare", + "avgLocalesFilled": "Media limbilor completate", + "iso3Country": "Țară ISO-3" + }, + "card": { + "nameInLocales": "Numele în {n} limbi" } } diff --git a/library/i18n/locales/ru/pplr.json b/library/i18n/locales/ru/pplr.json index 30269e0e0..8f1e50618 100644 --- a/library/i18n/locales/ru/pplr.json +++ b/library/i18n/locales/ru/pplr.json @@ -32,5 +32,61 @@ "readyPins": "Готово · меток: {pins} · нажмите на метку", "readyLanguage": "Готово · меток: {pins} · покрытие семей {coverage}% · топ-25 = {top}%", "readyReligion": "Меток: {pins} · чаще всего: {religion} ({count})" + }, + "ui": { + "chooseView": "Выберите вид", + "search": "Поиск по народу, месту, языку, религии…", + "baseMap": "Базовая карта", + "dataSources": "Источники данных", + "legend": "Легенда", + "openLegend": "Открыть легенду", + "clearSelectionEsc": "Снять выделение (Esc)", + "closeEsc": "Закрыть (Esc)", + "close": "Закрыть", + "retry": "Повторить", + "loadingMap": "Загрузка карты", + "flyToPin": "Перейти к метке", + "primaryReligion": "Основная религия", + "ropHierarchy": "Иерархия ROP" + }, + "pill": { + "religion": "Распределение религий · нажмите на метку, чтобы узнать подробности", + "ropTree": "Иерархия ROP · блок родства → кластер → народ → PGIC", + "languageFamilies": "Этнолингвистические семьи (PPLR) · нажмите на метку, чтобы узнать подробности", + "sunburst": "Иерархия ROP · блок родства → кластер народов · прокрутите для масштаба", + "pins": "Все метки «народ в стране» · нажмите, чтобы увидеть идентификаторы систем", + "coverage": "Покрытие переводов · заливка = среднее число заполненных языков по стране · нажмите на метку или страну", + "rosetta": "Розетта идентификаторов · цвет = какие идентификаторы есть · ★ = пример" + }, + "legendTitle": { + "avgLocales": "Среднее число языков / {n}", + "idCoverage": "Покрытие идентификаторов" + }, + "rosetta": { + "legend": { + "all": "JP + IMB + WCD, все три", + "imbOnly": "Только IMB", + "jpOnly": "Только JP", + "neither": "ни того, ни другого" + }, + "samplePg": "★ пример народа", + "missingIds": "Ещё не сопоставлено в PPLR: {ids}. Пустая строка — пробел в данных, а не ошибка." + }, + "popup": { + "noName": "(без названия)", + "country": "Страна", + "religion": "Религия", + "language": "Язык", + "family": "Семья", + "affinityBloc": "Блок родства", + "cluster": "Кластер", + "peopleCluster": "Кластер народов", + "peopleGroup": "Народ", + "pgCount": "Народы", + "avgLocalesFilled": "Среднее число заполненных языков", + "iso3Country": "Страна ISO-3" + }, + "card": { + "nameInLocales": "Название на {n} языках" } } diff --git a/library/i18n/locales/zh/pplr.json b/library/i18n/locales/zh/pplr.json index 7d373ee84..51f3c9fde 100644 --- a/library/i18n/locales/zh/pplr.json +++ b/library/i18n/locales/zh/pplr.json @@ -32,5 +32,61 @@ "readyPins": "就绪 · 族群标记:{pins} · 点击任一标记", "readyLanguage": "就绪 · 标记:{pins} · 语系覆盖率 {coverage}% · 前 25 = {top}%", "readyReligion": "标记:{pins} · 最常见:{religion}({count})" + }, + "ui": { + "chooseView": "选择视图", + "search": "按族群、地点、语言、宗教搜索…", + "baseMap": "底图", + "dataSources": "数据来源", + "legend": "图例", + "openLegend": "打开图例", + "clearSelectionEsc": "清除选择 (Esc)", + "closeEsc": "关闭 (Esc)", + "close": "关闭", + "retry": "重试", + "loadingMap": "正在加载地图", + "flyToPin": "飞到标记", + "primaryReligion": "主要宗教", + "ropHierarchy": "ROP 层级" + }, + "pill": { + "religion": "宗教分布 · 点击标记查看详情", + "ropTree": "ROP 层级 · 亲缘区块 → 民族群 → 族群 → PGIC", + "languageFamilies": "民族语言语系 (PPLR) · 点击标记查看详情", + "sunburst": "ROP 层级 · 亲缘区块 → 民族群 · 滚动缩放", + "pins": "全部国家内族群标记 · 点击查看跨系统 ID", + "coverage": "翻译覆盖率 · 着色 = 各国平均已填语种数 · 点击标记或国家", + "rosetta": "跨系统 ID 对照 · 颜色 = 已有哪些 ID · ★ = 示例行" + }, + "legendTitle": { + "avgLocales": "平均语种数 / {n}", + "idCoverage": "ID 覆盖" + }, + "rosetta": { + "legend": { + "all": "JP + IMB + WCD 三者俱全", + "imbOnly": "仅 IMB", + "jpOnly": "仅 JP", + "neither": "两者皆无" + }, + "samplePg": "★ 示例族群", + "missingIds": "PPLR 尚未对应:{ids}。空行是数据缺口,不是错误。" + }, + "popup": { + "noName": "(无名称)", + "country": "国家", + "religion": "宗教", + "language": "语言", + "family": "语系", + "affinityBloc": "亲缘区块", + "cluster": "民族群", + "peopleCluster": "民族群", + "peopleGroup": "族群", + "pgCount": "族群数", + "avgLocalesFilled": "平均已填语种数", + "iso3Country": "ISO-3 国家" + }, + "card": { + "nameInLocales": "{n} 种语言中的名称" } } diff --git a/plugin-designs/pplr-data-maps/pplr-data-maps.vue b/plugin-designs/pplr-data-maps/pplr-data-maps.vue index 55a19fb6e..0e9cef1ed 100644 --- a/plugin-designs/pplr-data-maps/pplr-data-maps.vue +++ b/plugin-designs/pplr-data-maps/pplr-data-maps.vue @@ -74,7 +74,7 @@ useShadowStyles(
PPLR data maps -
+
diff --git a/plugin-designs/pplr-data-maps/src/components/DataSourcesDropdown.vue b/plugin-designs/pplr-data-maps/src/components/DataSourcesDropdown.vue index e3a28c67b..29c1b93a6 100644 --- a/plugin-designs/pplr-data-maps/src/components/DataSourcesDropdown.vue +++ b/plugin-designs/pplr-data-maps/src/components/DataSourcesDropdown.vue @@ -9,6 +9,7 @@ * component into its toolbar. */ import { ref } from 'vue' +import { usePplrT } from '../composables/usePplrT.js' defineProps({ /** Array of { label, url, fields[] } */ @@ -16,19 +17,20 @@ defineProps({ }) const open = ref(false) +const t = usePplrT() function toggle() { open.value = !open.value } diff --git a/plugin-designs/pplr-data-maps/src/components/LoadingGlobe.vue b/plugin-designs/pplr-data-maps/src/components/LoadingGlobe.vue index cd1aa82ab..f24d1796f 100644 --- a/plugin-designs/pplr-data-maps/src/components/LoadingGlobe.vue +++ b/plugin-designs/pplr-data-maps/src/components/LoadingGlobe.vue @@ -12,12 +12,14 @@ * */ import { ref, onMounted, onBeforeUnmount, watch } from 'vue' +import { usePplrT } from '../composables/usePplrT.js' const props = defineProps({ - label: { type: String, default: 'Loading map' }, + label: { type: String, default: '' }, // empty = the translated "Loading map" stuckAfterMs:{ type: Number, default: 30000 }, }) const emit = defineEmits(['retry']) +const t = usePplrT() const stuck = ref(false) let stuckTimer = null @@ -56,13 +58,13 @@ function onRetry() { - {{ label }} + {{ label || t('pplr.ui.loadingMap') }}
diff --git a/plugin-designs/pplr-data-maps/src/components/PinDetailCard.vue b/plugin-designs/pplr-data-maps/src/components/PinDetailCard.vue index 22fe53fb6..106907fb7 100644 --- a/plugin-designs/pplr-data-maps/src/components/PinDetailCard.vue +++ b/plugin-designs/pplr-data-maps/src/components/PinDetailCard.vue @@ -19,6 +19,7 @@ import { computed, ref, watch, onMounted, onBeforeUnmount } from 'vue' import { useInstance } from '../composables/usePplrInstance.js' import { LOCALES, LOCALE_NAMES } from '../utils/pplrMap.js' import { loadNames } from '../utils/pplrData.js' +import { usePplrT } from '../composables/usePplrT.js' const props = defineProps({ /** Optional override — usually read from instance.pinDetail */ @@ -30,6 +31,7 @@ const props = defineProps({ const emit = defineEmits(['close', 'locate']) const instance = useInstance() +const tr = usePplrT() // not `t`: the names table below is already called t const pinData = computed(() => props.pin || instance?.pinDetail.value || null) // All 17 locale names for this PG (n_en, n_hi, n_bn, …). Per user 2026-05-02: @@ -59,12 +61,12 @@ const fields = computed(() => { const dash = v => (v == null || v === 'None' || v === '' || v === '*') ? '—' : v // Curated field order — most identifying first, registry IDs last return [ - { label: 'Country', value: dash(p.country), mono: false }, - { label: 'Religion', value: dash(p.religion), mono: false }, - { label: 'Language', value: dash(p.language), mono: false }, - { label: 'ISO-3 Country', value: dash(p.iso3), mono: true, hidden: !p.iso3 }, - { label: 'Affinity Bloc', value: dash(p.rop1), mono: true, hidden: !p.rop1 }, - { label: 'People Cluster', value: dash(p.rop2), mono: true, hidden: !p.rop2 }, + { label: tr('pplr.popup.country'), value: dash(p.country), mono: false }, + { label: tr('pplr.popup.religion'), value: dash(p.religion), mono: false }, + { label: tr('pplr.popup.language'), value: dash(p.language), mono: false }, + { label: tr('pplr.popup.iso3Country'), value: dash(p.iso3), mono: true, hidden: !p.iso3 }, + { label: tr('pplr.popup.affinityBloc'), value: dash(p.rop1), mono: true, hidden: !p.rop1 }, + { label: tr('pplr.popup.peopleCluster'), value: dash(p.rop2), mono: true, hidden: !p.rop2 }, { label: 'ROP25', value: dash(p.rop3), mono: true, hidden: !p.rop3 }, { label: 'PGIC GeoID', value: dash(p.rop25), mono: true, hidden: !p.rop25 }, { label: 'PEID', value: dash(p.peid), mono: true, hidden: !p.peid }, @@ -98,8 +100,8 @@ onBeforeUnmount(() => document.removeEventListener('keydown', onKey))
- People Group -
- Name in 17 locales + {{ tr('pplr.card.nameInLocales', { n: locales.length }) }}
{{ loc.name }} {{ loc.code }} @@ -134,9 +136,9 @@ onBeforeUnmount(() => document.removeEventListener('keydown', onKey)) - Fly to pin + {{ tr('pplr.ui.flyToPin') }} - +
diff --git a/plugin-designs/pplr-data-maps/src/components/SemanticTreeLegend.vue b/plugin-designs/pplr-data-maps/src/components/SemanticTreeLegend.vue index db1eae8ca..32fb1440a 100644 --- a/plugin-designs/pplr-data-maps/src/components/SemanticTreeLegend.vue +++ b/plugin-designs/pplr-data-maps/src/components/SemanticTreeLegend.vue @@ -34,6 +34,7 @@ const A11Y_EN = { 'legend.loadingRows': 'Loading {label}…', 'legend.loadingData': 'Loading data…', 'legend.noDataAtThisLevel': 'No data at this level', 'legend.showingTop': 'Showing top {n} of {m}', 'legend.useGeocoderHint': 'use the geocoder above to find the rest', + 'legend.sortByPop': 'Sort by Population', } const fillA11y = (str, p) => String(str).replace(/\{(\w+)\}/g, (m, k) => (p && k in p ? p[k] : m)) let ta = (key, p) => fillA11y(A11Y_EN[key] ?? key, p) @@ -441,7 +442,7 @@ function rowClasses(row) {