Wall of People Groups: the wall and its dialogs speak the reader's language
The universal-props matrix flagged the Wall as a locale BYPASS: no t() anywhere. A new wall area (library/i18n/locales/<lc>/wall.json, all 11 locales, 39 keys) now carries the header, orientation and zoom controls, the loading and offline notice, each card's prayer count and "View prayers", and both dialogs (Prayer Tools, People Group Chats), with aria-labels on the close buttons, which had none. The components use the globally injected $t (createAppI18n, globalInjection). The prayer count uses vue-i18n's plural choice in English and a neutral "label: n" form elsewhere, so no language needs plural rules. Status values from the API are data and stay as they come. Headless proof: vue-i18n against the real catalogs, 8/8 (en 0/1/4 plural, ar neutral form, ar title, de label form); check:i18n-parity PASS; the bundle builds. Library catalog change: studio lands it. needs eyes: Wall of People Groups with ?lang=ar: the header, a card's prayer line, and both dialogs.
This commit is contained in:
parent
4a16f0538b
commit
7c1c60975e
15 changed files with 491 additions and 41 deletions
41
library/i18n/locales/ar/wall.json
Normal file
41
library/i18n/locales/ar/wall.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"title": "جدار الشعوب",
|
||||
"toPortrait": "📱 التبديل إلى الوضع الطولي",
|
||||
"toLandscape": "🖼️ التبديل إلى الوضع العرضي",
|
||||
"currentLandscape": "الحالي: عرضي (4 × 3 أقدام)",
|
||||
"currentPortrait": "الحالي: طولي (3 × 4 أقدام)",
|
||||
"resetZoom": "إعادة ضبط التكبير",
|
||||
"groupsLoaded": "الشعوب المحمّلة: {n}",
|
||||
"loading": "جارٍ تحميل الشعوب…",
|
||||
"offlineTitle": "تعذّر الوصول إلى بيانات الصلاة المباشرة.",
|
||||
"offlineBody": "يقرأ الجدار شعوبه من pray.doxa.life. قد تكون غير متصل، أو قد لا تسمح الواجهة البرمجية بعنوان هذه الصفحة على خادم تطوير محلي.",
|
||||
"tryAgain": "حاول مرة أخرى",
|
||||
"prayedCount": "صلّوا: {n}",
|
||||
"viewPrayers": "عرض الصلوات",
|
||||
"prayerTools": "أدوات الصلاة",
|
||||
"close": "إغلاق",
|
||||
"unknown": "غير معروف",
|
||||
"unknownGroup": "شعب غير معروف",
|
||||
"status": "الحالة:",
|
||||
"unengaged": "غير مُبشَّر",
|
||||
"prayingNow": "هل تصلي الآن من أجل هذا الشعب؟",
|
||||
"yesPraying": "نعم، أنا أصلي",
|
||||
"thankYou": "شكرًا لصلاتك!",
|
||||
"sharePrayer": "شارك صلاتك (اختياري)",
|
||||
"prayerPlaceholder": "اكتب صلاتك هنا…",
|
||||
"sendPrayer": "إرسال الصلاة",
|
||||
"peopleGroup": "شعب",
|
||||
"chatsTitle": "محادثات الشعب",
|
||||
"id": "المعرّف:",
|
||||
"location": "الموقع:",
|
||||
"na": "غير متوفر",
|
||||
"havePrayed": "صلّوا: {n}",
|
||||
"youPrayed": "✓ لقد صلّيت!",
|
||||
"prayForGroup": "🙏 صلِّ من أجل هذا الشعب",
|
||||
"prayersComments": "الصلوات والتعليقات",
|
||||
"noComments": "لا صلوات أو تعليقات بعد. كن الأول!",
|
||||
"commentPlaceholder": "شارك صلاتك أو أفكارك…",
|
||||
"postComment": "نشر التعليق",
|
||||
"noPeopleId": "ليس لهذا الشعب معرّف PeopleID3",
|
||||
"statusUnknown": "الحالة غير معروفة"
|
||||
}
|
||||
41
library/i18n/locales/de/wall.json
Normal file
41
library/i18n/locales/de/wall.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"title": "Wand der Volksgruppen",
|
||||
"toPortrait": "📱 Hochformat",
|
||||
"toLandscape": "🖼️ Querformat",
|
||||
"currentLandscape": "Aktuell: Querformat (4 × 3 Fuß)",
|
||||
"currentPortrait": "Aktuell: Hochformat (3 × 4 Fuß)",
|
||||
"resetZoom": "Zoom zurücksetzen",
|
||||
"groupsLoaded": "Geladen: {n}",
|
||||
"loading": "Volksgruppen werden geladen…",
|
||||
"offlineTitle": "Die Live-Gebetsdaten sind nicht erreichbar.",
|
||||
"offlineBody": "Die Wand liest ihre Volksgruppen von pray.doxa.life. Vielleicht sind Sie offline, oder auf einem lokalen Entwicklungsserver lässt die API die Adresse dieser Seite nicht zu.",
|
||||
"tryAgain": "Erneut versuchen",
|
||||
"prayedCount": "Gebetet: {n}",
|
||||
"viewPrayers": "Gebete ansehen",
|
||||
"prayerTools": "Gebetswerkzeuge",
|
||||
"close": "Schließen",
|
||||
"unknown": "Unbekannt",
|
||||
"unknownGroup": "Unbekannte Volksgruppe",
|
||||
"status": "Status:",
|
||||
"unengaged": "unerreicht",
|
||||
"prayingNow": "Beten Sie gerade für diese Volksgruppe?",
|
||||
"yesPraying": "Ja, ich bete",
|
||||
"thankYou": "Danke für Ihr Gebet!",
|
||||
"sharePrayer": "Ihr Gebet teilen (optional)",
|
||||
"prayerPlaceholder": "Schreiben Sie Ihr Gebet hier…",
|
||||
"sendPrayer": "Gebet senden",
|
||||
"peopleGroup": "Volksgruppe",
|
||||
"chatsTitle": "Volksgruppen-Chats",
|
||||
"id": "ID:",
|
||||
"location": "Ort:",
|
||||
"na": "k. A.",
|
||||
"havePrayed": "Gebetet: {n}",
|
||||
"youPrayed": "✓ Sie haben gebetet!",
|
||||
"prayForGroup": "🙏 Für diese Volksgruppe beten",
|
||||
"prayersComments": "Gebete & Kommentare",
|
||||
"noComments": "Noch keine Gebete oder Kommentare. Seien Sie der Erste!",
|
||||
"commentPlaceholder": "Teilen Sie Ihr Gebet oder Ihre Gedanken…",
|
||||
"postComment": "Kommentar posten",
|
||||
"noPeopleId": "Diese Volksgruppe hat keine PeopleID3",
|
||||
"statusUnknown": "Status unbekannt"
|
||||
}
|
||||
41
library/i18n/locales/en/wall.json
Normal file
41
library/i18n/locales/en/wall.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"title": "Wall of People Groups",
|
||||
"toPortrait": "📱 Switch to Portrait",
|
||||
"toLandscape": "🖼️ Switch to Landscape",
|
||||
"currentLandscape": "Current: Landscape (4 ft × 3 ft)",
|
||||
"currentPortrait": "Current: Portrait (3 ft × 4 ft)",
|
||||
"resetZoom": "Reset Zoom",
|
||||
"groupsLoaded": "{n} Groups Loaded",
|
||||
"loading": "Loading people groups…",
|
||||
"offlineTitle": "The live prayer data could not be reached.",
|
||||
"offlineBody": "The wall reads its people groups from pray.doxa.life. You may be offline, or, on a local development server, the API may not allow this page's address.",
|
||||
"tryAgain": "Try again",
|
||||
"prayedCount": "0 prayed | {n} person prayed | {n} people prayed",
|
||||
"viewPrayers": "View prayers",
|
||||
"prayerTools": "Prayer Tools",
|
||||
"close": "Close",
|
||||
"unknown": "Unknown",
|
||||
"unknownGroup": "Unknown Group",
|
||||
"status": "Status:",
|
||||
"unengaged": "unengaged",
|
||||
"prayingNow": "Are you praying right now for this people group?",
|
||||
"yesPraying": "Yes, I'm Praying",
|
||||
"thankYou": "Thank you for praying!",
|
||||
"sharePrayer": "Share your prayer (optional)",
|
||||
"prayerPlaceholder": "Type your prayer here…",
|
||||
"sendPrayer": "Send Prayer",
|
||||
"peopleGroup": "People Group",
|
||||
"chatsTitle": "People Group Chats",
|
||||
"id": "ID:",
|
||||
"location": "Location:",
|
||||
"na": "N/A",
|
||||
"havePrayed": "no one has prayed yet | {n} person has prayed | {n} people have prayed",
|
||||
"youPrayed": "✓ You prayed!",
|
||||
"prayForGroup": "🙏 Pray for this group",
|
||||
"prayersComments": "Prayers & Comments",
|
||||
"noComments": "No prayers or comments yet. Be the first!",
|
||||
"commentPlaceholder": "Share your prayer or thoughts…",
|
||||
"postComment": "Post Comment",
|
||||
"noPeopleId": "This people group doesn't have a PeopleID3",
|
||||
"statusUnknown": "Status Unknown"
|
||||
}
|
||||
41
library/i18n/locales/es/wall.json
Normal file
41
library/i18n/locales/es/wall.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"title": "Muro de los pueblos",
|
||||
"toPortrait": "📱 Cambiar a vertical",
|
||||
"toLandscape": "🖼️ Cambiar a horizontal",
|
||||
"currentLandscape": "Actual: horizontal (4 × 3 pies)",
|
||||
"currentPortrait": "Actual: vertical (3 × 4 pies)",
|
||||
"resetZoom": "Restablecer zoom",
|
||||
"groupsLoaded": "Cargados: {n}",
|
||||
"loading": "Cargando pueblos…",
|
||||
"offlineTitle": "No se pudo acceder a los datos de oración en vivo.",
|
||||
"offlineBody": "El muro lee sus pueblos de pray.doxa.life. Puede que no tengas conexión o que, en un servidor de desarrollo local, la API no permita la dirección de esta página.",
|
||||
"tryAgain": "Reintentar",
|
||||
"prayedCount": "Oraron: {n}",
|
||||
"viewPrayers": "Ver oraciones",
|
||||
"prayerTools": "Herramientas de oración",
|
||||
"close": "Cerrar",
|
||||
"unknown": "Desconocido",
|
||||
"unknownGroup": "Pueblo desconocido",
|
||||
"status": "Estado:",
|
||||
"unengaged": "no alcanzado",
|
||||
"prayingNow": "¿Estás orando ahora por este pueblo?",
|
||||
"yesPraying": "Sí, estoy orando",
|
||||
"thankYou": "¡Gracias por orar!",
|
||||
"sharePrayer": "Comparte tu oración (opcional)",
|
||||
"prayerPlaceholder": "Escribe tu oración aquí…",
|
||||
"sendPrayer": "Enviar oración",
|
||||
"peopleGroup": "Pueblo",
|
||||
"chatsTitle": "Chats del pueblo",
|
||||
"id": "ID:",
|
||||
"location": "Ubicación:",
|
||||
"na": "N/D",
|
||||
"havePrayed": "Oraron: {n}",
|
||||
"youPrayed": "✓ ¡Oraste!",
|
||||
"prayForGroup": "🙏 Orar por este pueblo",
|
||||
"prayersComments": "Oraciones y comentarios",
|
||||
"noComments": "Aún no hay oraciones ni comentarios. ¡Sé el primero!",
|
||||
"commentPlaceholder": "Comparte tu oración o tus pensamientos…",
|
||||
"postComment": "Publicar comentario",
|
||||
"noPeopleId": "Este pueblo no tiene PeopleID3",
|
||||
"statusUnknown": "Estado desconocido"
|
||||
}
|
||||
41
library/i18n/locales/fr/wall.json
Normal file
41
library/i18n/locales/fr/wall.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"title": "Mur des peuples",
|
||||
"toPortrait": "📱 Passer en portrait",
|
||||
"toLandscape": "🖼️ Passer en paysage",
|
||||
"currentLandscape": "Actuel : paysage (4 × 3 pieds)",
|
||||
"currentPortrait": "Actuel : portrait (3 × 4 pieds)",
|
||||
"resetZoom": "Réinitialiser le zoom",
|
||||
"groupsLoaded": "Chargés : {n}",
|
||||
"loading": "Chargement des peuples…",
|
||||
"offlineTitle": "Les données de prière en direct sont inaccessibles.",
|
||||
"offlineBody": "Le mur lit ses peuples sur pray.doxa.life. Vous êtes peut-être hors ligne ou, sur un serveur de développement local, l’API n’autorise pas l’adresse de cette page.",
|
||||
"tryAgain": "Réessayer",
|
||||
"prayedCount": "Ont prié : {n}",
|
||||
"viewPrayers": "Voir les prières",
|
||||
"prayerTools": "Outils de prière",
|
||||
"close": "Fermer",
|
||||
"unknown": "Inconnu",
|
||||
"unknownGroup": "Peuple inconnu",
|
||||
"status": "Statut :",
|
||||
"unengaged": "non atteint",
|
||||
"prayingNow": "Priez-vous en ce moment pour ce peuple ?",
|
||||
"yesPraying": "Oui, je prie",
|
||||
"thankYou": "Merci de prier !",
|
||||
"sharePrayer": "Partagez votre prière (facultatif)",
|
||||
"prayerPlaceholder": "Écrivez votre prière ici…",
|
||||
"sendPrayer": "Envoyer la prière",
|
||||
"peopleGroup": "Peuple",
|
||||
"chatsTitle": "Discussions du peuple",
|
||||
"id": "ID :",
|
||||
"location": "Lieu :",
|
||||
"na": "N/D",
|
||||
"havePrayed": "Ont prié : {n}",
|
||||
"youPrayed": "✓ Vous avez prié !",
|
||||
"prayForGroup": "🙏 Prier pour ce peuple",
|
||||
"prayersComments": "Prières et commentaires",
|
||||
"noComments": "Aucune prière ni commentaire pour l’instant. Soyez le premier !",
|
||||
"commentPlaceholder": "Partagez votre prière ou vos pensées…",
|
||||
"postComment": "Publier le commentaire",
|
||||
"noPeopleId": "Ce peuple n’a pas de PeopleID3",
|
||||
"statusUnknown": "Statut inconnu"
|
||||
}
|
||||
41
library/i18n/locales/hi/wall.json
Normal file
41
library/i18n/locales/hi/wall.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"title": "जनसमूहों की दीवार",
|
||||
"toPortrait": "📱 खड़े रूप में बदलें",
|
||||
"toLandscape": "🖼️ आड़े रूप में बदलें",
|
||||
"currentLandscape": "वर्तमान: आड़ा (4 × 3 फ़ुट)",
|
||||
"currentPortrait": "वर्तमान: खड़ा (3 × 4 फ़ुट)",
|
||||
"resetZoom": "ज़ूम रीसेट करें",
|
||||
"groupsLoaded": "लोड हुए: {n}",
|
||||
"loading": "जनसमूह लोड हो रहे हैं…",
|
||||
"offlineTitle": "लाइव प्रार्थना डेटा तक नहीं पहुँचा जा सका।",
|
||||
"offlineBody": "दीवार अपने जनसमूह pray.doxa.life से पढ़ती है। हो सकता है आप ऑफ़लाइन हों, या स्थानीय डेवलपमेंट सर्वर पर API इस पेज के पते की अनुमति न दे।",
|
||||
"tryAgain": "फिर से कोशिश करें",
|
||||
"prayedCount": "प्रार्थना की: {n}",
|
||||
"viewPrayers": "प्रार्थनाएँ देखें",
|
||||
"prayerTools": "प्रार्थना उपकरण",
|
||||
"close": "बंद करें",
|
||||
"unknown": "अज्ञात",
|
||||
"unknownGroup": "अज्ञात जनसमूह",
|
||||
"status": "स्थिति:",
|
||||
"unengaged": "अपहुँचा",
|
||||
"prayingNow": "क्या आप अभी इस जनसमूह के लिए प्रार्थना कर रहे हैं?",
|
||||
"yesPraying": "हाँ, मैं प्रार्थना कर रहा हूँ",
|
||||
"thankYou": "प्रार्थना के लिए धन्यवाद!",
|
||||
"sharePrayer": "अपनी प्रार्थना साझा करें (वैकल्पिक)",
|
||||
"prayerPlaceholder": "अपनी प्रार्थना यहाँ लिखें…",
|
||||
"sendPrayer": "प्रार्थना भेजें",
|
||||
"peopleGroup": "जनसमूह",
|
||||
"chatsTitle": "जनसमूह चर्चा",
|
||||
"id": "ID:",
|
||||
"location": "स्थान:",
|
||||
"na": "उपलब्ध नहीं",
|
||||
"havePrayed": "प्रार्थना की: {n}",
|
||||
"youPrayed": "✓ आपने प्रार्थना की!",
|
||||
"prayForGroup": "🙏 इस जनसमूह के लिए प्रार्थना करें",
|
||||
"prayersComments": "प्रार्थनाएँ और टिप्पणियाँ",
|
||||
"noComments": "अभी कोई प्रार्थना या टिप्पणी नहीं। पहले बनें!",
|
||||
"commentPlaceholder": "अपनी प्रार्थना या विचार साझा करें…",
|
||||
"postComment": "टिप्पणी पोस्ट करें",
|
||||
"noPeopleId": "इस जनसमूह के पास PeopleID3 नहीं है",
|
||||
"statusUnknown": "स्थिति अज्ञात"
|
||||
}
|
||||
41
library/i18n/locales/it/wall.json
Normal file
41
library/i18n/locales/it/wall.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"title": "Muro dei popoli",
|
||||
"toPortrait": "📱 Passa a verticale",
|
||||
"toLandscape": "🖼️ Passa a orizzontale",
|
||||
"currentLandscape": "Attuale: orizzontale (4 × 3 piedi)",
|
||||
"currentPortrait": "Attuale: verticale (3 × 4 piedi)",
|
||||
"resetZoom": "Reimposta zoom",
|
||||
"groupsLoaded": "Caricati: {n}",
|
||||
"loading": "Caricamento dei popoli…",
|
||||
"offlineTitle": "Impossibile raggiungere i dati di preghiera in tempo reale.",
|
||||
"offlineBody": "Il muro legge i suoi popoli da pray.doxa.life. Potresti essere offline oppure, su un server di sviluppo locale, l’API potrebbe non consentire l’indirizzo di questa pagina.",
|
||||
"tryAgain": "Riprova",
|
||||
"prayedCount": "Hanno pregato: {n}",
|
||||
"viewPrayers": "Vedi preghiere",
|
||||
"prayerTools": "Strumenti di preghiera",
|
||||
"close": "Chiudi",
|
||||
"unknown": "Sconosciuto",
|
||||
"unknownGroup": "Popolo sconosciuto",
|
||||
"status": "Stato:",
|
||||
"unengaged": "non raggiunto",
|
||||
"prayingNow": "Stai pregando ora per questo popolo?",
|
||||
"yesPraying": "Sì, sto pregando",
|
||||
"thankYou": "Grazie per la preghiera!",
|
||||
"sharePrayer": "Condividi la tua preghiera (facoltativo)",
|
||||
"prayerPlaceholder": "Scrivi qui la tua preghiera…",
|
||||
"sendPrayer": "Invia preghiera",
|
||||
"peopleGroup": "Popolo",
|
||||
"chatsTitle": "Chat del popolo",
|
||||
"id": "ID:",
|
||||
"location": "Luogo:",
|
||||
"na": "N/D",
|
||||
"havePrayed": "Hanno pregato: {n}",
|
||||
"youPrayed": "✓ Hai pregato!",
|
||||
"prayForGroup": "🙏 Prega per questo popolo",
|
||||
"prayersComments": "Preghiere e commenti",
|
||||
"noComments": "Ancora nessuna preghiera o commento. Sii il primo!",
|
||||
"commentPlaceholder": "Condividi la tua preghiera o i tuoi pensieri…",
|
||||
"postComment": "Pubblica commento",
|
||||
"noPeopleId": "Questo popolo non ha un PeopleID3",
|
||||
"statusUnknown": "Stato sconosciuto"
|
||||
}
|
||||
41
library/i18n/locales/pt/wall.json
Normal file
41
library/i18n/locales/pt/wall.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"title": "Mural dos povos",
|
||||
"toPortrait": "📱 Mudar para retrato",
|
||||
"toLandscape": "🖼️ Mudar para paisagem",
|
||||
"currentLandscape": "Atual: paisagem (4 × 3 pés)",
|
||||
"currentPortrait": "Atual: retrato (3 × 4 pés)",
|
||||
"resetZoom": "Repor zoom",
|
||||
"groupsLoaded": "Carregados: {n}",
|
||||
"loading": "A carregar povos…",
|
||||
"offlineTitle": "Não foi possível aceder aos dados de oração em direto.",
|
||||
"offlineBody": "O mural lê os seus povos de pray.doxa.life. Pode estar offline ou, num servidor de desenvolvimento local, a API pode não permitir o endereço desta página.",
|
||||
"tryAgain": "Tentar novamente",
|
||||
"prayedCount": "Oraram: {n}",
|
||||
"viewPrayers": "Ver orações",
|
||||
"prayerTools": "Ferramentas de oração",
|
||||
"close": "Fechar",
|
||||
"unknown": "Desconhecido",
|
||||
"unknownGroup": "Povo desconhecido",
|
||||
"status": "Estado:",
|
||||
"unengaged": "não alcançado",
|
||||
"prayingNow": "Está a orar agora por este povo?",
|
||||
"yesPraying": "Sim, estou a orar",
|
||||
"thankYou": "Obrigado por orar!",
|
||||
"sharePrayer": "Partilhe a sua oração (opcional)",
|
||||
"prayerPlaceholder": "Escreva a sua oração aqui…",
|
||||
"sendPrayer": "Enviar oração",
|
||||
"peopleGroup": "Povo",
|
||||
"chatsTitle": "Conversas do povo",
|
||||
"id": "ID:",
|
||||
"location": "Local:",
|
||||
"na": "N/D",
|
||||
"havePrayed": "Oraram: {n}",
|
||||
"youPrayed": "✓ Orou!",
|
||||
"prayForGroup": "🙏 Orar por este povo",
|
||||
"prayersComments": "Orações e comentários",
|
||||
"noComments": "Ainda não há orações nem comentários. Seja o primeiro!",
|
||||
"commentPlaceholder": "Partilhe a sua oração ou pensamentos…",
|
||||
"postComment": "Publicar comentário",
|
||||
"noPeopleId": "Este povo não tem PeopleID3",
|
||||
"statusUnknown": "Estado desconhecido"
|
||||
}
|
||||
41
library/i18n/locales/ro/wall.json
Normal file
41
library/i18n/locales/ro/wall.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"title": "Zidul popoarelor",
|
||||
"toPortrait": "📱 Treci la portret",
|
||||
"toLandscape": "🖼️ Treci la peisaj",
|
||||
"currentLandscape": "Actual: peisaj (4 × 3 picioare)",
|
||||
"currentPortrait": "Actual: portret (3 × 4 picioare)",
|
||||
"resetZoom": "Resetează zoomul",
|
||||
"groupsLoaded": "Încărcate: {n}",
|
||||
"loading": "Se încarcă popoarele…",
|
||||
"offlineTitle": "Datele de rugăciune în timp real nu pot fi accesate.",
|
||||
"offlineBody": "Zidul își citește popoarele de pe pray.doxa.life. Poate sunteți offline sau, pe un server de dezvoltare local, API-ul nu permite adresa acestei pagini.",
|
||||
"tryAgain": "Încearcă din nou",
|
||||
"prayedCount": "Au rugat: {n}",
|
||||
"viewPrayers": "Vezi rugăciunile",
|
||||
"prayerTools": "Instrumente de rugăciune",
|
||||
"close": "Închide",
|
||||
"unknown": "Necunoscut",
|
||||
"unknownGroup": "Popor necunoscut",
|
||||
"status": "Stare:",
|
||||
"unengaged": "neatins",
|
||||
"prayingNow": "Vă rugați acum pentru acest popor?",
|
||||
"yesPraying": "Da, mă rog",
|
||||
"thankYou": "Mulțumim că vă rugați!",
|
||||
"sharePrayer": "Împărtășiți rugăciunea (opțional)",
|
||||
"prayerPlaceholder": "Scrieți rugăciunea aici…",
|
||||
"sendPrayer": "Trimite rugăciunea",
|
||||
"peopleGroup": "Popor",
|
||||
"chatsTitle": "Conversațiile poporului",
|
||||
"id": "ID:",
|
||||
"location": "Locație:",
|
||||
"na": "N/A",
|
||||
"havePrayed": "Au rugat: {n}",
|
||||
"youPrayed": "✓ V-ați rugat!",
|
||||
"prayForGroup": "🙏 Roagă-te pentru acest popor",
|
||||
"prayersComments": "Rugăciuni și comentarii",
|
||||
"noComments": "Încă nu există rugăciuni sau comentarii. Fiți primul!",
|
||||
"commentPlaceholder": "Împărtășiți rugăciunea sau gândurile…",
|
||||
"postComment": "Publică comentariul",
|
||||
"noPeopleId": "Acest popor nu are PeopleID3",
|
||||
"statusUnknown": "Stare necunoscută"
|
||||
}
|
||||
41
library/i18n/locales/ru/wall.json
Normal file
41
library/i18n/locales/ru/wall.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"title": "Стена народов",
|
||||
"toPortrait": "📱 Портретный вид",
|
||||
"toLandscape": "🖼️ Альбомный вид",
|
||||
"currentLandscape": "Сейчас: альбомный (4 × 3 фута)",
|
||||
"currentPortrait": "Сейчас: портретный (3 × 4 фута)",
|
||||
"resetZoom": "Сбросить масштаб",
|
||||
"groupsLoaded": "Загружено: {n}",
|
||||
"loading": "Загрузка народов…",
|
||||
"offlineTitle": "Не удалось получить данные о молитвах.",
|
||||
"offlineBody": "Стена берёт народы с pray.doxa.life. Возможно, нет подключения, или на локальном сервере разработки API не разрешает адрес этой страницы.",
|
||||
"tryAgain": "Повторить",
|
||||
"prayedCount": "Помолились: {n}",
|
||||
"viewPrayers": "Смотреть молитвы",
|
||||
"prayerTools": "Молитвенные инструменты",
|
||||
"close": "Закрыть",
|
||||
"unknown": "Неизвестно",
|
||||
"unknownGroup": "Неизвестный народ",
|
||||
"status": "Статус:",
|
||||
"unengaged": "неохваченный",
|
||||
"prayingNow": "Вы сейчас молитесь за этот народ?",
|
||||
"yesPraying": "Да, молюсь",
|
||||
"thankYou": "Спасибо за молитву!",
|
||||
"sharePrayer": "Поделитесь молитвой (необязательно)",
|
||||
"prayerPlaceholder": "Напишите молитву здесь…",
|
||||
"sendPrayer": "Отправить молитву",
|
||||
"peopleGroup": "Народ",
|
||||
"chatsTitle": "Беседы о народе",
|
||||
"id": "ID:",
|
||||
"location": "Место:",
|
||||
"na": "нет данных",
|
||||
"havePrayed": "Помолились: {n}",
|
||||
"youPrayed": "✓ Вы помолились!",
|
||||
"prayForGroup": "🙏 Помолиться за этот народ",
|
||||
"prayersComments": "Молитвы и комментарии",
|
||||
"noComments": "Пока нет молитв и комментариев. Будьте первым!",
|
||||
"commentPlaceholder": "Поделитесь молитвой или мыслями…",
|
||||
"postComment": "Опубликовать",
|
||||
"noPeopleId": "У этого народа нет PeopleID3",
|
||||
"statusUnknown": "Статус неизвестен"
|
||||
}
|
||||
41
library/i18n/locales/zh/wall.json
Normal file
41
library/i18n/locales/zh/wall.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"title": "族群祷告墙",
|
||||
"toPortrait": "📱 切换为纵向",
|
||||
"toLandscape": "🖼️ 切换为横向",
|
||||
"currentLandscape": "当前:横向(4 × 3 英尺)",
|
||||
"currentPortrait": "当前:纵向(3 × 4 英尺)",
|
||||
"resetZoom": "重置缩放",
|
||||
"groupsLoaded": "已加载:{n}",
|
||||
"loading": "正在加载族群…",
|
||||
"offlineTitle": "无法获取实时祷告数据。",
|
||||
"offlineBody": "祷告墙从 pray.doxa.life 读取族群。你可能已离线,或在本地开发服务器上 API 不允许此页面的地址。",
|
||||
"tryAgain": "重试",
|
||||
"prayedCount": "已祷告:{n}",
|
||||
"viewPrayers": "查看祷告",
|
||||
"prayerTools": "祷告工具",
|
||||
"close": "关闭",
|
||||
"unknown": "未知",
|
||||
"unknownGroup": "未知族群",
|
||||
"status": "状态:",
|
||||
"unengaged": "未得之民",
|
||||
"prayingNow": "你现在正在为这个族群祷告吗?",
|
||||
"yesPraying": "是的,我在祷告",
|
||||
"thankYou": "感谢你的祷告!",
|
||||
"sharePrayer": "分享你的祷告(可选)",
|
||||
"prayerPlaceholder": "在此输入你的祷告…",
|
||||
"sendPrayer": "发送祷告",
|
||||
"peopleGroup": "族群",
|
||||
"chatsTitle": "族群交流",
|
||||
"id": "ID:",
|
||||
"location": "位置:",
|
||||
"na": "无",
|
||||
"havePrayed": "已祷告:{n}",
|
||||
"youPrayed": "✓ 你已祷告!",
|
||||
"prayForGroup": "🙏 为这个族群祷告",
|
||||
"prayersComments": "祷告与评论",
|
||||
"noComments": "还没有祷告或评论,来做第一个吧!",
|
||||
"commentPlaceholder": "分享你的祷告或想法…",
|
||||
"postComment": "发表评论",
|
||||
"noPeopleId": "该族群没有 PeopleID3",
|
||||
"statusUnknown": "状态未知"
|
||||
}
|
||||
|
|
@ -3,37 +3,37 @@
|
|||
<div class="dialog-container" @click.stop>
|
||||
<!-- Dialog Header -->
|
||||
<div class="dialog-header">
|
||||
<h2>People Group Chats</h2>
|
||||
<button class="close-btn" @click="closeDialog">✕</button>
|
||||
<h2>{{ $t('wall.chatsTitle') }}</h2>
|
||||
<button class="close-btn" :aria-label="$t('wall.close')" @click="closeDialog">✕</button>
|
||||
</div>
|
||||
|
||||
<!-- People Group Image (Instagram style) -->
|
||||
<div class="group-image-container">
|
||||
<img
|
||||
:src="getImageUrl()"
|
||||
:alt="group?.name || 'People Group'"
|
||||
:alt="group?.name || $t('wall.peopleGroup')"
|
||||
class="group-image"
|
||||
@error="handleImageError"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="group-name-dialog">{{ group?.name || 'Unknown Group' }}</div>
|
||||
<div class="group-name-dialog">{{ group?.name || $t('wall.unknownGroup') }}</div>
|
||||
|
||||
<!-- People Group Info -->
|
||||
<div class="dialog-content">
|
||||
<div class="group-info">
|
||||
<div class="info-row">
|
||||
<strong>Status:</strong> {{ group?.status || 'Unknown' }}
|
||||
<strong>{{ $t('wall.status') }}</strong> {{ group?.status || $t('wall.unknown') }}
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<strong>ID:</strong> {{ group?.ID || 'N/A' }}
|
||||
<strong>{{ $t('wall.id') }}</strong> {{ group?.ID || $t('wall.na') }}
|
||||
</div>
|
||||
<div class="info-row" v-if="group?.lat && group?.lng">
|
||||
<strong>Location:</strong> {{ group.lat }}, {{ group.lng }}
|
||||
<strong>{{ $t('wall.location') }}</strong> {{ group.lat }}, {{ group.lng }}
|
||||
</div>
|
||||
<div class="info-row prayer-stat">
|
||||
<span class="heart-icon">❤️</span>
|
||||
<strong>{{ prayerCount }}</strong> {{ prayerCount === 1 ? 'person has' : 'people have' }} prayed
|
||||
{{ $t('wall.havePrayed', { n: prayerCount }, prayerCount) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -44,13 +44,13 @@
|
|||
@click="addPrayer"
|
||||
:class="{ active: justPrayed }"
|
||||
>
|
||||
{{ justPrayed ? '✓ You prayed!' : '🙏 Pray for this group' }}
|
||||
{{ justPrayed ? $t('wall.youPrayed') : $t('wall.prayForGroup') }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Comments Section -->
|
||||
<div class="comments-section">
|
||||
<h3>Prayers & Comments</h3>
|
||||
<h3>{{ $t('wall.prayersComments') }}</h3>
|
||||
|
||||
<!-- Comment List -->
|
||||
<div class="comments-list">
|
||||
|
|
@ -58,7 +58,7 @@
|
|||
v-if="comments.length === 0"
|
||||
class="no-comments"
|
||||
>
|
||||
No prayers or comments yet. Be the first!
|
||||
{{ $t('wall.noComments') }}
|
||||
</div>
|
||||
|
||||
<div
|
||||
|
|
@ -78,7 +78,7 @@
|
|||
<div class="add-comment">
|
||||
<textarea
|
||||
v-model="newComment"
|
||||
placeholder="Share your prayer or thoughts..."
|
||||
:placeholder="$t('wall.commentPlaceholder')"
|
||||
rows="3"
|
||||
maxlength="500"
|
||||
></textarea>
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
:disabled="!newComment.trim()"
|
||||
class="submit-btn"
|
||||
>
|
||||
Post Comment
|
||||
{{ $t('wall.postComment') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -13,13 +13,13 @@
|
|||
rel="noopener noreferrer"
|
||||
class="group-name-link"
|
||||
>
|
||||
{{ group.name || group.post_title || 'Unknown Group' }}
|
||||
{{ group.name || group.post_title || $t('wall.unknownGroup') }}
|
||||
</a>
|
||||
<span v-else class="group-name-no-link" title="This people group doesn't have a PeopleID3">
|
||||
{{ group.name || group.post_title || 'Unknown Group' }}
|
||||
<span v-else class="group-name-no-link" :title="$t('wall.noPeopleId')">
|
||||
{{ group.name || group.post_title || $t('wall.unknownGroup') }}
|
||||
</span>
|
||||
</h3>
|
||||
<span class="group-status">{{ group.status || 'Status Unknown' }}</span>
|
||||
<span class="group-status">{{ group.status || $t('wall.statusUnknown') }}</span>
|
||||
</div>
|
||||
|
||||
<!-- Image Placeholder -->
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
<template>
|
||||
<div class="wall-container">
|
||||
<div class="wall-header">
|
||||
<h1>Wall of People Groups</h1>
|
||||
<h1>{{ $t('wall.title') }}</h1>
|
||||
<div class="wall-controls">
|
||||
<button @click="toggleOrientation" class="control-btn orientation-btn">
|
||||
<span class="btn-label">{{ isLandscape ? '📱 Switch to Portrait' : '🖼️ Switch to Landscape' }}</span>
|
||||
<span class="current-mode">Current: {{ isLandscape ? 'Landscape (4ft×3ft)' : 'Portrait (3ft×4ft)' }}</span>
|
||||
<span class="btn-label">{{ isLandscape ? $t('wall.toPortrait') : $t('wall.toLandscape') }}</span>
|
||||
<span class="current-mode">{{ isLandscape ? $t('wall.currentLandscape') : $t('wall.currentPortrait') }}</span>
|
||||
</button>
|
||||
<button @click="resetZoom" class="control-btn">Reset Zoom</button>
|
||||
<span class="group-count">{{ totalGroups }} Groups Loaded</span>
|
||||
<button @click="resetZoom" class="control-btn">{{ $t('wall.resetZoom') }}</button>
|
||||
<span class="group-count">{{ $t('wall.groupsLoaded', { n: totalGroups }) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -16,17 +16,16 @@
|
|||
|
||||
<div v-if="loading" class="loading-overlay">
|
||||
<div class="spinner"></div>
|
||||
<p>Loading people groups...</p>
|
||||
<p>{{ $t('wall.loading') }}</p>
|
||||
</div>
|
||||
|
||||
<!-- OFFLINE / BLOCKED: the live API could not be reached. Measured on a local dev server,
|
||||
where pray.doxa.life refuses a 127.0.0.1 origin (CORS): the wall used to sit at
|
||||
"0 Groups Loaded" with nothing saying why. Say what failed and offer a retry. -->
|
||||
<div v-else-if="loadError && totalGroups === 0" class="wall-offline" role="status">
|
||||
<p class="wall-offline-title">The live prayer data could not be reached.</p>
|
||||
<p>The wall reads its people groups from pray.doxa.life. You may be offline, or, on a
|
||||
local development server, the API may not allow this page's address.</p>
|
||||
<button type="button" class="control-btn" @click="fetchData">Try again</button>
|
||||
<p class="wall-offline-title">{{ $t('wall.offlineTitle') }}</p>
|
||||
<p>{{ $t('wall.offlineBody') }}</p>
|
||||
<button type="button" class="control-btn" @click="fetchData">{{ $t('wall.tryAgain') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -449,8 +448,8 @@ export default {
|
|||
const apiCount = Number(d.peoplePraying || 0);
|
||||
const localCount = this.$store?.prayers?.[d.ID] || 0;
|
||||
const count = apiCount + localCount;
|
||||
if (count === 0) return '0 prayed';
|
||||
return `${count} ${count === 1 ? 'person' : 'people'} prayed`;
|
||||
// plural choice in English; a neutral "label: n" form in the other locales (wall.json)
|
||||
return this.$t('wall.prayedCount', { n: count }, count);
|
||||
});
|
||||
|
||||
// Add "View prayers" button
|
||||
|
|
@ -465,7 +464,7 @@ export default {
|
|||
.attr('class', 'view-comments-text')
|
||||
.style('user-select', 'none')
|
||||
.style('pointer-events', 'all')
|
||||
.text('View prayers')
|
||||
.text(this.$t('wall.viewPrayers'))
|
||||
.on('click', (event, d) => {
|
||||
event.stopPropagation();
|
||||
this.openComments(d);
|
||||
|
|
|
|||
|
|
@ -2,48 +2,48 @@
|
|||
<div v-if="isOpen" class="dialog-overlay" @click.self="closeDialog">
|
||||
<div class="dialog-container prayer-dialog">
|
||||
<div class="dialog-header">
|
||||
<h2>Prayer Tools</h2>
|
||||
<button @click="closeDialog" class="close-btn">×</button>
|
||||
<h2>{{ $t('wall.prayerTools') }}</h2>
|
||||
<button @click="closeDialog" class="close-btn" :aria-label="$t('wall.close')">×</button>
|
||||
</div>
|
||||
|
||||
<div class="group-image-container">
|
||||
<img
|
||||
:src="getImageUrl()"
|
||||
:alt="group?.name || 'People Group'"
|
||||
:alt="group?.name || $t('wall.peopleGroup')"
|
||||
@error="handleImageError"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="group-name-dialog">
|
||||
{{ group?.name || 'Unknown' }}
|
||||
{{ group?.name || $t('wall.unknown') }}
|
||||
</div>
|
||||
|
||||
<div class="dialog-content">
|
||||
<div class="group-info">
|
||||
<div class="info-row">
|
||||
<strong>Status:</strong> {{ group?.status || 'unengaged' }}
|
||||
<strong>{{ $t('wall.status') }}</strong> {{ group?.status || $t('wall.unengaged') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="!hasPrayed" class="prayer-prompt">
|
||||
<h3>Are you praying right now for this people group?</h3>
|
||||
<h3>{{ $t('wall.prayingNow') }}</h3>
|
||||
<button @click="confirmPrayer" class="prayer-confirm-btn">
|
||||
<i class="far fa-heart"></i>
|
||||
Yes, I'm Praying
|
||||
{{ $t('wall.yesPraying') }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div v-else class="prayer-confirmed">
|
||||
<div class="confirmed-message">
|
||||
<i class="fas fa-heart" style="color: #ed4956;"></i>
|
||||
<span>Thank you for praying!</span>
|
||||
<span>{{ $t('wall.thankYou') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="prayer-input-section">
|
||||
<h4>Share your prayer (optional)</h4>
|
||||
<h4>{{ $t('wall.sharePrayer') }}</h4>
|
||||
<textarea
|
||||
v-model="prayerText"
|
||||
placeholder="Type your prayer here..."
|
||||
:placeholder="$t('wall.prayerPlaceholder')"
|
||||
rows="4"
|
||||
></textarea>
|
||||
<button
|
||||
|
|
@ -51,7 +51,7 @@
|
|||
:disabled="!prayerText.trim()"
|
||||
class="send-prayer-btn"
|
||||
>
|
||||
Send Prayer
|
||||
{{ $t('wall.sendPrayer') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Reference in a new issue