Merge pull request #4782 from pangeachat/reduce-course-creation-time

Reduce course creation time
This commit is contained in:
ggurdin 2025-12-03 12:30:22 -05:00 committed by GitHub
commit 5942155a53
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
68 changed files with 3238 additions and 228 deletions

View file

@ -1,6 +1,6 @@
{
"@@locale": "ar",
"@@last_modified": "2025-11-19 10:06:41.335038",
"@@last_modified": "2025-12-01 12:40:30.614200",
"about": "حول",
"@about": {
"type": "String",
@ -12048,5 +12048,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "فشل في تحميل التعليقات.",
"unreadPlus": "99+",
"highlightVocabTooltip": "قم بتمييز كلمات المفردات المستهدفة أدناه عن طريق إرسالها أو التدريب عليها في الدردشة",
"noSavedActivitiesYet": "ستظهر الأنشطة هنا بمجرد الانتهاء منها وحفظها.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "تغيير الدورة",
"changeCourseDesc": "هنا يمكنك تغيير خطة الدورة لهذه الدورة.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "تم الانتهاء من نشاط الممارسة",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "إنشاء دردشة التعريفات",
"introChatDesc": "يمكن لأي شخص في المساحة النشر.",
"announcementsChatTitle": "دردشة الإعلانات",
"announcementsChatDesc": "يمكن فقط لمسؤول المساحة النشر.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -2392,7 +2392,7 @@
"playWithAI": "Пакуль гуляйце з ШІ",
"courseStartDesc": "Pangea Bot гатовы да працы ў любы час!\n\n...але навучанне лепш з сябрамі!",
"@@locale": "be",
"@@last_modified": "2025-11-19 10:06:26.729429",
"@@last_modified": "2025-12-01 12:40:15.499665",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12930,5 +12930,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Не ўдалося загрузіць водгук.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Выдзяліце мэтавыя словы ніжэй, адпраўляючы іх або практыкуючы з імі ў чаце",
"noSavedActivitiesYet": "Дзеянні з'явяцца тут, як толькі яны будуць завершаны і захаваны.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Змяніць курс",
"changeCourseDesc": "Тут вы можаце змяніць план курса гэтага курса.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Практычная дзейнасць завершана",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Стварыць чат для ўвядзення",
"introChatDesc": "Кожны ў прасторы можа публікаваць.",
"announcementsChatTitle": "Чат аб'яў",
"announcementsChatDesc": "Толькі адміністратар прасторы можа публікаваць.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:06:57.530222",
"@@last_modified": "2025-12-01 12:40:51.296376",
"about": "সম্পর্কে",
"@about": {
"type": "String",
@ -12935,5 +12935,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "ফিডব্যাক লোড করতে ব্যর্থ।",
"unreadPlus": "৯৯+",
"highlightVocabTooltip": "নিচে লক্ষ্য vocab শব্দগুলো হাইলাইট করুন তাদের পাঠিয়ে বা চ্যাটে তাদের সাথে অনুশীলন করে",
"noSavedActivitiesYet": "কার্যক্রমগুলো এখানে প্রদর্শিত হবে একবার সেগুলো সম্পন্ন এবং সংরক্ষিত হলে।",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "কোর্স পরিবর্তন করুন",
"changeCourseDesc": "এখানে আপনি এই কোর্সের কোর্স পরিকল্পনা পরিবর্তন করতে পারেন।",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "অভ্যাস কার্যক্রম সম্পন্ন",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "পরিচয় চ্যাট তৈরি করুন",
"introChatDesc": "স্পেসের যে কেউ পোস্ট করতে পারে।",
"announcementsChatTitle": "ঘোষণার চ্যাট",
"announcementsChatDesc": "শুধুমাত্র স্পেস প্রশাসক পোস্ট করতে পারে।",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4707,7 +4707,7 @@
"joinPublicTrip": "མི་ཚེས་ལ་ལོག་འབད།",
"startOwnTrip": "ངེད་རང་གི་ལོག་ལ་སྦྱོར་བཅོས།",
"@@locale": "bo",
"@@last_modified": "2025-11-19 10:06:54.787613",
"@@last_modified": "2025-12-01 12:40:47.506429",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12672,5 +12672,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Ndaŋa tolo feedback.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Ndaŋa hightlitaŋa vocab words below by sending them or practicing with them in the chat",
"noSavedActivitiesYet": "Activities will appear here once they are completed and saved.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Bohor kurs",
"changeCourseDesc": "Dina ieu anjeun tiasa ngarobih rencana kursus ieu.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Praktik aktiviti telah diselesaikan",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Buat Obrolan Pengenalan",
"introChatDesc": "Sesiapa dalam ruang boleh menghantar.",
"announcementsChatTitle": "Obrolan Pengumuman",
"announcementsChatDesc": "Hanya admin ruang yang boleh menghantar.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:06:28.272487",
"@@last_modified": "2025-12-01 12:40:17.930439",
"about": "Quant a",
"@about": {
"type": "String",
@ -11855,5 +11855,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "No s'ha pogut carregar el feedback.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Destaca les paraules de vocabulari objectiu a continuació enviant-les o practicant-les al xat",
"noSavedActivitiesYet": "Les activitats apareixeran aquí un cop estiguin completades i desades.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Canvia el curs",
"changeCourseDesc": "Aquí pots canviar el pla del curs d'aquest curs.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Activitat de pràctica completada",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Crear xat d'introduccions",
"introChatDesc": "Qualsevol persona de l'espai pot publicar.",
"announcementsChatTitle": "Xat d'anuncis",
"announcementsChatDesc": "Només l'administrador de l'espai pot publicar.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "cs",
"@@last_modified": "2025-11-19 10:06:23.270366",
"@@last_modified": "2025-12-01 12:40:10.951068",
"about": "O aplikaci",
"@about": {
"type": "String",
@ -12438,5 +12438,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Nepodařilo se načíst zpětnou vazbu.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Zvýrazněte cílová slovíčka níže tím, že je pošlete nebo s nimi cvičíte v chatu",
"noSavedActivitiesYet": "Aktivity se zde objeví, jakmile budou dokončeny a uloženy.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Změnit kurz",
"changeCourseDesc": "Zde můžete změnit plán kurzu tohoto kurzu.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Aktivita cvičení byla dokončena",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Vytvořit chat pro úvody",
"introChatDesc": "Kdokoli ve prostoru může přispět.",
"announcementsChatTitle": "Chat pro oznámení",
"announcementsChatDesc": "Pouze administrátor prostoru může přispět.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -2411,7 +2411,7 @@
"playWithAI": "Leg med AI for nu",
"courseStartDesc": "Pangea Bot er klar til at starte når som helst!\n\n...men læring er bedre med venner!",
"@@locale": "da",
"@@last_modified": "2025-11-19 10:05:38.285183",
"@@last_modified": "2025-12-01 12:39:32.959549",
"@aboutHomeserver": {
"type": "String",
"placeholders": {
@ -12893,5 +12893,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Kunne ikke indlæse feedback.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Fremhæv målordene nedenfor ved at sende dem eller øve med dem i chatten",
"noSavedActivitiesYet": "Aktiviteter vil vises her, når de er afsluttet og gemt.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Ændre kursus",
"changeCourseDesc": "Her kan du ændre denne kursus' kursusplan.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Øvelsesaktivitet fuldført",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Opret Introduktioner Chat",
"introChatDesc": "Alle i rummet kan poste.",
"announcementsChatTitle": "Meddelelser Chat",
"announcementsChatDesc": "Kun rumadmin kan poste.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "de",
"@@last_modified": "2025-11-19 10:06:06.868954",
"@@last_modified": "2025-12-01 12:40:01.799437",
"alwaysUse24HourFormat": "true",
"@alwaysUse24HourFormat": {
"description": "Set to true to always display time of day in 24 hour format."
@ -11838,5 +11838,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Fehler beim Laden des Feedbacks.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Hebe die Zielvokabeln unten hervor, indem du sie im Chat sendest oder mit ihnen übst.",
"noSavedActivitiesYet": "Aktivitäten erscheinen hier, sobald sie abgeschlossen und gespeichert sind.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Kurs ändern",
"changeCourseDesc": "Hier können Sie den Kursplan dieses Kurses ändern.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Übungsaktivität abgeschlossen",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Erstelle Einführungs-Chat",
"introChatDesc": "Jeder im Raum kann posten.",
"announcementsChatTitle": "Ankündigungen-Chat",
"announcementsChatDesc": "Nur der Raum-Administrator kann posten.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4937,7 +4937,7 @@
"playWithAI": "Παίξτε με την Τεχνητή Νοημοσύνη προς το παρόν",
"courseStartDesc": "Ο Pangea Bot είναι έτοιμος να ξεκινήσει οποιαδήποτε στιγμή!\n\n...αλλά η μάθηση είναι καλύτερη με φίλους!",
"@@locale": "el",
"@@last_modified": "2025-11-19 10:07:05.042305",
"@@last_modified": "2025-12-01 12:41:00.324485",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12889,5 +12889,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Αποτυχία φόρτωσης ανατροφοδότησης.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Επισημάνετε τις λέξεις-στόχους παρακάτω στέλνοντάς τες ή εξασκώντας τες στη συνομιλία",
"noSavedActivitiesYet": "Οι δραστηριότητες θα εμφανιστούν εδώ μόλις ολοκληρωθούν και αποθηκευτούν.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Αλλαγή μαθήματος",
"changeCourseDesc": "Εδώ μπορείτε να αλλάξετε το σχέδιο μαθήματος αυτού του μαθήματος.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Η δραστηριότητα πρακτικής ολοκληρώθηκε",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Δημιουργία Συνομιλίας Εισαγωγών",
"introChatDesc": "Οποιοσδήποτε στον χώρο μπορεί να δημοσιεύσει.",
"announcementsChatTitle": "Συνομιλία Ανακοινώσεων",
"announcementsChatDesc": "Μόνο ο διαχειριστής του χώρου μπορεί να δημοσιεύσει.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -5334,5 +5334,13 @@
"type": "int"
}
}
}
},
"noSavedActivitiesYet": "Activities will appear here once they are completed and saved.",
"practiceActivityCompleted": "Practice activity completed",
"changeCourse": "Change course",
"changeCourseDesc": "Here you can change this course's course plan.",
"introChatTitle": "Create Introductions Chat",
"introChatDesc": "Anyone in the space can post.",
"announcementsChatTitle": "Announcements Chat",
"announcementsChatDesc": "Only space admin can post."
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:07:12.448110",
"@@last_modified": "2025-12-01 12:41:06.553946",
"about": "Prio",
"@about": {
"type": "String",
@ -12920,5 +12920,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Malsukcesis ŝarĝi la reagojn.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Emfazu la celvortojn sube per sendado aŭ praktikado kun ili en la babilejo",
"noSavedActivitiesYet": "Aktivecoj aperos ĉi tie post kiam ili estos kompletigitaj kaj konservitaj.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Ŝanĝi kurson",
"changeCourseDesc": "Ĉi tie vi povas ŝanĝi la kurplanon de ĉi tiu kurso.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Praktika aktiveco finita",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Krei Enkondukan Ĉaton",
"introChatDesc": "Ĉiu en la spaco povas afiŝi.",
"announcementsChatTitle": "Afiŝoj Ĉato",
"announcementsChatDesc": "Nur la administranto de la spaco povas afiŝi.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "es",
"@@last_modified": "2025-11-19 10:05:31.874796",
"@@last_modified": "2025-12-01 12:39:26.176542",
"about": "Acerca de",
"@about": {
"type": "String",
@ -7442,5 +7442,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Error al cargar los comentarios.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Resalta las palabras de vocabulario objetivo a continuación enviándolas o practicando con ellas en el chat",
"noSavedActivitiesYet": "Las actividades aparecerán aquí una vez que se completen y se guarden.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Cambiar curso",
"changeCourseDesc": "Aquí puedes cambiar el plan de curso de este curso.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Actividad de práctica completada",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Crear Chat de Introducciones",
"introChatDesc": "Cualquiera en el espacio puede publicar.",
"announcementsChatTitle": "Chat de Anuncios",
"announcementsChatDesc": "Solo el administrador del espacio puede publicar.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "et",
"@@last_modified": "2025-11-19 10:06:04.654636",
"@@last_modified": "2025-12-01 12:40:00.288987",
"about": "Rakenduse teave",
"@about": {
"type": "String",
@ -12102,5 +12102,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Tagasiside laadimine ebaõnnestus.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Tõsta esile sihtvokaabuli sõnad allpool, saates neid või harjutades nendega vestluses.",
"noSavedActivitiesYet": "Tegevused ilmuvad siia, kui need on lõpetatud ja salvestatud.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Muuda kursust",
"changeCourseDesc": "Siin saad muuta selle kursuse õppeplaani.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Harjutustegevus lõpetatud",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Loo tutvustuste vestlus",
"introChatDesc": "Igaüks ruumis saab postitada.",
"announcementsChatTitle": "Teadete vestlus",
"announcementsChatDesc": "Ainult ruumi administraator saab postitada.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "eu",
"@@last_modified": "2025-11-19 10:06:01.640967",
"@@last_modified": "2025-12-01 12:39:55.136173",
"about": "Honi buruz",
"@about": {
"type": "String",
@ -11831,5 +11831,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Feedback-a kargatzea huts egin du.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Azpian dauden helburu vocab hitzak nabarmentzeko, bidali edo txatean praktikatu.",
"noSavedActivitiesYet": "Jarduerak hemen agertuko dira amaitu eta gorde ondoren.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Aldatu ikasturtea",
"changeCourseDesc": "Hemen ikasturtea aldatu dezakezu ikasturte honen ikasturteen plana.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Praktika jarduera amaituta",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Sarrera Aurkezpen Txata sortu",
"introChatDesc": "Espazioan edonork postatu dezake.",
"announcementsChatTitle": "Iragarki Txata",
"announcementsChatDesc": "Espazioaren administratzaileak bakarrik postatu dezake.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:06:59.403476",
"@@last_modified": "2025-12-01 12:40:53.664453",
"repeatPassword": "تکرار رمزعبور",
"@repeatPassword": {},
"about": "درباره",
@ -12563,5 +12563,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "بارگذاری بازخورد ناموفق بود.",
"unreadPlus": "۹۹+",
"highlightVocabTooltip": "کلمات هدف را در زیر با ارسال یا تمرین کردن آنها در چت هایلایت کنید",
"noSavedActivitiesYet": "فعالیت‌ها پس از اتمام و ذخیره‌سازی در اینجا ظاهر خواهند شد.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "تغییر دوره",
"changeCourseDesc": "اینجا می‌توانید برنامه درسی این دوره را تغییر دهید.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "فعالیت تمرینی کامل شد",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "ایجاد چت معرفی",
"introChatDesc": "هر کسی در این فضا می‌تواند پست کند.",
"announcementsChatTitle": "چت اعلامیه‌ها",
"announcementsChatDesc": "فقط مدیر فضا می‌تواند پست کند.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4512,7 +4512,7 @@
"playWithAI": "Leiki tekoälyn kanssa nyt",
"courseStartDesc": "Pangea Bot on valmis milloin tahansa!\n\n...mutta oppiminen on parempaa ystävien kanssa!",
"@@locale": "fi",
"@@last_modified": "2025-11-19 10:05:35.933081",
"@@last_modified": "2025-12-01 12:39:30.795641",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12476,5 +12476,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Palaute ei latautunut.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Korosta alla olevia kohdesanastoja lähettämällä niitä tai harjoittelemalla niitä chatissa",
"noSavedActivitiesYet": "Toiminnot näkyvät täällä, kun ne on suoritettu ja tallennettu.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Vaihda kurssia",
"changeCourseDesc": "Täällä voit vaihtaa tämän kurssin kurssisuunnitelmaa.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Harjoitustoiminta suoritettu",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Luo esittelykeskustelu",
"introChatDesc": "Kuka tahansa tilassa voi julkaista.",
"announcementsChatTitle": "Ilmoitukset keskustelu",
"announcementsChatDesc": "Vain tilan ylläpitäjä voi julkaista.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -3272,7 +3272,7 @@
"selectAll": "Piliin lahat",
"deselectAll": "Huwag piliin lahat",
"@@locale": "fil",
"@@last_modified": "2025-11-19 10:06:38.816684",
"@@last_modified": "2025-12-01 12:40:26.597168",
"@setCustomPermissionLevel": {
"type": "String",
"placeholders": {}
@ -12807,5 +12807,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Nabigong i-load ang feedback.",
"unreadPlus": "99+",
"highlightVocabTooltip": "I-highlight ang mga target na salita sa bokabularyo sa ibaba sa pamamagitan ng pagpapadala sa kanila o pagsasanay gamit ang mga ito sa chat",
"noSavedActivitiesYet": "Lilitaw ang mga aktibidad dito kapag natapos at na-save na ang mga ito.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Palitan ang kurso",
"changeCourseDesc": "Dito maaari mong palitan ang plano ng kurso ng kursong ito.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Natapos ang aktibidad sa pagsasanay",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Lumikha ng Introductions Chat",
"introChatDesc": "Sinuman sa espasyo ay maaaring mag-post.",
"announcementsChatTitle": "Announcements Chat",
"announcementsChatDesc": "Tanging ang admin ng espasyo ang maaaring mag-post.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "fr",
"@@last_modified": "2025-11-19 10:07:24.904940",
"@@last_modified": "2025-12-01 12:41:17.297464",
"about": "À propos",
"@about": {
"type": "String",
@ -12155,5 +12155,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Échec du chargement des retours.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Mettez en surbrillance les mots de vocabulaire cibles ci-dessous en les envoyant ou en les pratiquant dans le chat",
"noSavedActivitiesYet": "Les activités apparaîtront ici une fois qu'elles seront terminées et enregistrées.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Changer de cours",
"changeCourseDesc": "Ici, vous pouvez changer le plan de cours de ce cours.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Activité de pratique terminée",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Créer un chat d'introduction",
"introChatDesc": "Tout le monde dans l'espace peut publier.",
"announcementsChatTitle": "Chat des annonces",
"announcementsChatDesc": "Seul l'administrateur de l'espace peut publier.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4998,7 +4998,7 @@
"playWithAI": "Imir le AI faoi láthair",
"courseStartDesc": "Tá Bot Pangea réidh chun dul am ar bith!\n\n...ach is fearr foghlaim le cairde!",
"@@locale": "ga",
"@@last_modified": "2025-11-19 10:07:22.635787",
"@@last_modified": "2025-12-01 12:41:14.642020",
"@customReaction": {
"type": "String",
"placeholders": {}
@ -11829,5 +11829,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Theip ar an aiseolas a luchtú.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Bain úsáid as na focail ghréasáin a bhfuiltear ag iarraidh a ghrúpáil thíos trína sheoladh nó trína chleachtadh sa chomhrá",
"noSavedActivitiesYet": "Tiocfaidh gníomhaíochtaí anseo nuair a bheidh siad críochnaithe agus sábháilte.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Athraigh cúrsa",
"changeCourseDesc": "Anseo is féidir leat plean cúrsa an chúrsa seo a athrú.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Críochnaíodh an gníomhaíocht chleachtais",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Cruthaigh Comhrá Réamhrá",
"introChatDesc": "Is féidir le haon duine sa spás post a chur.",
"announcementsChatTitle": "Comhrá Fógraí",
"announcementsChatDesc": "Ní féidir ach le hoifigeach spáis post a chur.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "gl",
"@@last_modified": "2025-11-19 10:05:33.443954",
"@@last_modified": "2025-12-01 12:39:28.351166",
"about": "Acerca de",
"@about": {
"type": "String",
@ -11828,5 +11828,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Fallou ao cargar a retroalimentación.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Destaca as palabras de vocabulario obxectivo abaixo enviándoas ou practicando con elas no chat",
"noSavedActivitiesYet": "As actividades aparecerán aquí unha vez que se completen e se gardan.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Cambiar curso",
"changeCourseDesc": "Aquí podes cambiar o plan de curso deste curso.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Actividade de práctica completada",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Crear Chat de Presentación",
"introChatDesc": "Qualquera no espazo pode publicar.",
"announcementsChatTitle": "Chat de Anuncios",
"announcementsChatDesc": "Sólo o administrador do espazo pode publicar.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:05:51.297421",
"@@last_modified": "2025-12-01 12:39:50.470332",
"about": "אודות",
"@about": {
"type": "String",
@ -12880,5 +12880,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "לא הצלחנו לטעון משוב.",
"unreadPlus": "99+",
"highlightVocabTooltip": "הדגש את המילים היעד למטה על ידי שליחתם או תרגול איתן בצ'אט",
"noSavedActivitiesYet": "פעילויות יופיעו כאן ברגע שיסיימו וישמרו.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "שנה קורס",
"changeCourseDesc": "כאן אתה יכול לשנות את תוכנית הקורס של קורס זה.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "פעילות תרגול הושלמה",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "צור צ'אט היכרות",
"introChatDesc": "כל אחד במרחב יכול לפרסם.",
"announcementsChatTitle": "צ'אט הודעות",
"announcementsChatDesc": "רק מנהל המרחב יכול לפרסם.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4964,7 +4964,7 @@
"playWithAI": "अभी के लिए एआई के साथ खेलें",
"courseStartDesc": "पैंजिया बॉट कभी भी जाने के लिए तैयार है!\n\n...लेकिन दोस्तों के साथ सीखना बेहतर है!",
"@@locale": "hi",
"@@last_modified": "2025-11-19 10:07:10.242188",
"@@last_modified": "2025-12-01 12:41:04.318728",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12916,5 +12916,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "फीडबैक लोड करने में विफल।",
"unreadPlus": "99+",
"highlightVocabTooltip": "नीचे लक्षित शब्दों को हाइलाइट करें, उन्हें चैट में भेजकर या उनके साथ अभ्यास करके।",
"noSavedActivitiesYet": "गतिविधियाँ यहाँ तब दिखाई देंगी जब वे पूरी हो जाएँगी और सहेजी जाएँगी।",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "कोर्स बदलें",
"changeCourseDesc": "यहाँ आप इस कोर्स की कोर्स योजना बदल सकते हैं।",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "अभ्यास गतिविधि पूरी हुई",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "परिचय चैट बनाएं",
"introChatDesc": "इस स्थान में कोई भी पोस्ट कर सकता है।",
"announcementsChatTitle": "घोषणाएँ चैट",
"announcementsChatDesc": "केवल स्थान प्रशासक पोस्ट कर सकता है।",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "hr",
"@@last_modified": "2025-11-19 10:05:49.974610",
"@@last_modified": "2025-12-01 12:39:46.878014",
"about": "Informacije",
"@about": {
"type": "String",
@ -12203,5 +12203,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Nije moguće učitati povratne informacije.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Istaknite ciljne riječi ispod tako da ih pošaljete ili vježbate s njima u chatu",
"noSavedActivitiesYet": "Aktivnosti će se ovdje pojaviti kada budu dovršene i spremljene.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Promijeni tečaj",
"changeCourseDesc": "Ovdje možete promijeniti plan tečaja ovog tečaja.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Aktivnost vježbanja završena",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Kreiraj chat za uvod",
"introChatDesc": "Svako u prostoru može objavljivati.",
"announcementsChatTitle": "Chat za obavijesti",
"announcementsChatDesc": "Samo administrator prostora može objavljivati.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "hu",
"@@last_modified": "2025-11-19 10:05:41.188788",
"@@last_modified": "2025-12-01 12:39:34.911828",
"about": "Névjegy",
"@about": {
"type": "String",
@ -11832,5 +11832,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "A visszajelzés betöltése nem sikerült.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Emeld ki a cél szókincset alább azáltal, hogy elküldöd őket vagy gyakorolsz velük a csevegésben.",
"noSavedActivitiesYet": "A tevékenységek itt fognak megjelenni, miután befejezték és elmentették őket.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Tanfolyam módosítása",
"changeCourseDesc": "Itt módosíthatja ennek a tanfolyamnak a tantervét.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Gyakorló tevékenység befejezve",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Bevezető Beszélgetés Létrehozása",
"introChatDesc": "A térben bárki posztolhat.",
"announcementsChatTitle": "Közlemények Beszélgetés",
"announcementsChatDesc": "Csak a tér adminisztrátora posztolhat.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -2439,7 +2439,7 @@
"playWithAI": "Joca con le IA pro ora",
"courseStartDesc": "Pangea Bot es preste a comenzar a qualunque momento!\n\n...ma apprender es melior con amicos!",
"@@locale": "ia",
"@@last_modified": "2025-11-19 10:05:56.215123",
"@@last_modified": "2025-12-01 12:39:51.766931",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12909,5 +12909,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Nuk e ngarkoi feedback-un.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Thekso fjalët e synuara të vocab-it më poshtë duke i dërguar ato ose duke praktikuar me to në bisedë",
"noSavedActivitiesYet": "Aktivitetet do të shfaqen këtu sapo të përfundojnë dhe të ruhen.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Cambiá el curso",
"changeCourseDesc": "Aquí podés cambiar el plan de curso de este curso.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Praktiko aktivita finita",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Crea Chat de Introducciones",
"introChatDesc": "Cualquiera en el espacio puede publicar.",
"announcementsChatTitle": "Chat de Anuncios",
"announcementsChatDesc": "Solo el administrador del espacio puede publicar.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:05:43.101922",
"@@last_modified": "2025-12-01 12:39:37.053489",
"setAsCanonicalAlias": "Atur sebagai alias utama",
"@setAsCanonicalAlias": {
"type": "String",
@ -11822,5 +11822,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Gagal memuat umpan balik.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Sorot kata-kata kosakata target di bawah ini dengan mengirimkannya atau berlatih dengan mereka di obrolan",
"noSavedActivitiesYet": "Kegiatan akan muncul di sini setelah mereka diselesaikan dan disimpan.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Ubah kursus",
"changeCourseDesc": "Di sini Anda dapat mengubah rencana kursus ini.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Aktivitas latihan selesai",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Buat Obrolan Perkenalan",
"introChatDesc": "Siapa pun di ruang ini dapat memposting.",
"announcementsChatTitle": "Obrolan Pengumuman",
"announcementsChatDesc": "Hanya admin ruang yang dapat memposting.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4853,7 +4853,7 @@
"playWithAI": "Joca con AI pro ora",
"courseStartDesc": "Pangea Bot es preste a partir a qualunque momento!\n\n...ma apprender es melior con amicos!",
"@@locale": "ie",
"@@last_modified": "2025-11-19 10:05:48.013254",
"@@last_modified": "2025-12-01 12:39:45.041098",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12805,5 +12805,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Níl an t-eolas ar fáil.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Bain úsáid as na focail ghréasáin atá mar sprioc thíos trína sheoladh nó trína chleachtadh sa chomhrá",
"noSavedActivitiesYet": "Tiocfaidh gníomhaíochtaí anseo nuair a bheidh siad críochnaithe agus sábháilte.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Cuir in ionad an chúrsa",
"changeCourseDesc": "Anseo is féidir leat plean cúrsa an chúrsa seo a athrú.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Praktiko aktivita kompletita",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Cruthaigh Comhrá Réamhrá",
"introChatDesc": "Is féidir le haon duine sa spás post a chur.",
"announcementsChatTitle": "Comhrá Fógraí",
"announcementsChatDesc": "Ní féidir ach le h-ardán an spáis post a chur.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:06:20.176972",
"@@last_modified": "2025-12-01 12:40:06.959287",
"about": "Informazioni",
"@about": {
"type": "String",
@ -11834,5 +11834,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Impossibile caricare il feedback.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Evidenzia le parole di vocabolario target qui sotto inviandole o praticandole nella chat",
"noSavedActivitiesYet": "Le attività appariranno qui una volta completate e salvate.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Cambia corso",
"changeCourseDesc": "Qui puoi cambiare il piano del corso di questo corso.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Attività di pratica completata",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Crea Chat di Introduzioni",
"introChatDesc": "Chiunque nello spazio può postare.",
"announcementsChatTitle": "Chat degli Annunci",
"announcementsChatDesc": "Solo l'amministratore dello spazio può postare.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "ja",
"@@last_modified": "2025-11-19 10:07:08.492783",
"@@last_modified": "2025-12-01 12:41:02.154964",
"about": "このアプリについて",
"@about": {
"type": "String",
@ -12621,5 +12621,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "フィードバックの読み込みに失敗しました。",
"unreadPlus": "99+",
"highlightVocabTooltip": "チャットで送信したり練習したりすることで、下のターゲット語彙をハイライトします。",
"noSavedActivitiesYet": "アクティビティは、完了して保存されるとここに表示されます。",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "コースを変更",
"changeCourseDesc": "ここでこのコースのコースプランを変更できます。",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "練習活動が完了しました",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "紹介チャットを作成",
"introChatDesc": "スペース内の誰でも投稿できます。",
"announcementsChatTitle": "お知らせチャット",
"announcementsChatDesc": "スペースの管理者のみが投稿できます。",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -3075,7 +3075,7 @@
"playWithAI": "ამ დროისთვის ითამაშეთ AI-თან",
"courseStartDesc": "Pangea Bot მზადაა ნებისმიერ დროს გასასვლელად!\n\n...მაგრამ სწავლა უკეთესია მეგობრებთან ერთად!",
"@@locale": "ka",
"@@last_modified": "2025-11-19 10:07:17.607554",
"@@last_modified": "2025-12-01 12:41:10.546351",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12861,5 +12861,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "უკვე ვერ ჩაიწერა უკუკავშირი.",
"unreadPlus": "99+",
"highlightVocabTooltip": "გამოაჩინე მიზნობრივი სიტყვები ქვემოთ, მათი გაგზავნით ან ჩატში ვარჯიშით",
"noSavedActivitiesYet": "აქტივობები აქ გამოჩნდება, როგორც კი ისინი დასრულდება და შენახული იქნება.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "კურსის შეცვლა",
"changeCourseDesc": "აქ შეგიძლიათ შეცვალოთ ამ კურსის კურსის გეგმა.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "პრაქტიკის აქტივობა დასრულდა",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "შექმენით გაცნობის ჩატი",
"introChatDesc": "ყოველთვის სივრცეში შეუძლია პოსტი.",
"announcementsChatTitle": "განცხადებების ჩატი",
"announcementsChatDesc": "მხოლოდ სივრცის ადმინისტრატორი შეუძლია პოსტი.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:05:24.832279",
"@@last_modified": "2025-12-01 12:39:24.159740",
"about": "소개",
"@about": {
"type": "String",
@ -11939,5 +11939,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "피드백을 불러오는 데 실패했습니다.",
"unreadPlus": "99+",
"highlightVocabTooltip": "아래의 목표 어휘 단어를 강조 표시하려면 채팅에서 보내거나 연습하세요.",
"noSavedActivitiesYet": "활동이 완료되고 저장되면 여기에 나타납니다.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "강좌 변경",
"changeCourseDesc": "여기에서 이 강좌의 강좌 계획을 변경할 수 있습니다.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "연습 활동이 완료되었습니다",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "소개 채팅 만들기",
"introChatDesc": "공간의 누구나 게시할 수 있습니다.",
"announcementsChatTitle": "공지사항 채팅",
"announcementsChatDesc": "오직 공간 관리자만 게시할 수 있습니다.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4342,7 +4342,7 @@
"playWithAI": "Žaiskite su dirbtiniu intelektu dabar",
"courseStartDesc": "Pangea botas pasiruošęs bet kada pradėti!\n\n...bet mokymasis yra geresnis su draugais!",
"@@locale": "lt",
"@@last_modified": "2025-11-19 10:06:46.685695",
"@@last_modified": "2025-12-01 12:40:39.006993",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12636,5 +12636,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Nepavyko įkelti atsiliepimų.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Išryškinkite tikslinius žodžius žemiau, juos siųsdami arba praktikuodami pokalbyje",
"noSavedActivitiesYet": "Veiklos pasirodys čia, kai bus užbaigtos ir išsaugotos.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Pakeisti kursą",
"changeCourseDesc": "Čia galite pakeisti šio kurso planą.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Praktikos veikla baigta",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Sukurti Įžangų Pokalbį",
"introChatDesc": "Bet kas erdvėje gali skelbti.",
"announcementsChatTitle": "Pranešimų Pokalbis",
"announcementsChatDesc": "Tik erdvės administratorius gali skelbti.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4958,7 +4958,7 @@
"playWithAI": "Tagad spēlējiet ar AI",
"courseStartDesc": "Pangea bots ir gatavs jebkurā laikā!\n\n...bet mācīties ir labāk ar draugiem!",
"@@locale": "lv",
"@@last_modified": "2025-11-19 10:06:40.043224",
"@@last_modified": "2025-12-01 12:40:28.664355",
"analyticsInactiveTitle": "Pieprasījumi neaktīviem lietotājiem nevar tikt nosūtīti",
"analyticsInactiveDesc": "Neaktīvi lietotāji, kuri nav pieteikušies kopš šīs funkcijas ieviešanas, neredzēs jūsu pieprasījumu.\n\nPieprasījuma poga parādīsies, kad viņi atgriezīsies. Jūs varat atkārtoti nosūtīt pieprasījumu vēlāk, noklikšķinot uz pieprasījuma pogas viņu vārdā, kad tā būs pieejama.",
"accessRequestedTitle": "Pieprasījums piekļūt analītikai",
@ -11817,5 +11817,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Neizdevās ielādēt atsauksmes.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Izceliet mērķa vārdu vārdnīcu zemāk, tos nosūtot vai praktizējot čatā.",
"noSavedActivitiesYet": "Aktivitātes parādīsies šeit, kad tās tiks pabeigtas un saglabātas.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Mainīt kursu",
"changeCourseDesc": "Šeit jūs varat mainīt šī kursa kursa plānu.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Prakses aktivitāte pabeigta",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Izveidot Ievada Čatu",
"introChatDesc": "Ikviens telpā var publicēt.",
"announcementsChatTitle": "Paziņojumu Čats",
"announcementsChatDesc": "Tikai telpas administrators var publicēt.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:06:25.294989",
"@@last_modified": "2025-12-01 12:40:12.703108",
"about": "Om",
"@about": {
"type": "String",
@ -12924,5 +12924,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Kunne ikke laste tilbakemelding.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Fremhev målordene nedenfor ved å sende dem eller øve med dem i chatten",
"noSavedActivitiesYet": "Aktiviteter vil vises her når de er fullført og lagret.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Endre kurs",
"changeCourseDesc": "Her kan du endre kursplanen for dette kurset.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Øvingsaktivitet fullført",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Opprett Introduksjoner Chat",
"introChatDesc": "Alle i rommet kan legge ut.",
"announcementsChatTitle": "Kunngjøringer Chat",
"announcementsChatDesc": "Bare romadministratoren kan legge ut.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:06:52.228480",
"@@last_modified": "2025-12-01 12:40:45.776161",
"about": "Over ons",
"@about": {
"type": "String",
@ -11831,5 +11831,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Kon feedback niet laden.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Markeer doelwoordenschat hieronder door ze te verzenden of ermee te oefenen in de chat",
"noSavedActivitiesYet": "Activiteiten verschijnen hier zodra ze zijn voltooid en opgeslagen.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Wijzig cursus",
"changeCourseDesc": "Hier kunt u het cursusplan van deze cursus wijzigen.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Oefenactiviteit voltooid",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Maak Introductie Chat",
"introChatDesc": "Iedereen in de ruimte kan berichten plaatsen.",
"announcementsChatTitle": "Aankondigingen Chat",
"announcementsChatDesc": "Alleen de ruimtebeheerder kan berichten plaatsen.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "pl",
"@@last_modified": "2025-11-19 10:07:01.450034",
"@@last_modified": "2025-12-01 12:40:55.496589",
"about": "O aplikacji",
"@about": {
"type": "String",
@ -11831,5 +11831,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Nie udało się załadować opinii.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Podświetl docelowe słowa słownictwa poniżej, wysyłając je lub ćwicząc z nimi na czacie",
"noSavedActivitiesYet": "Aktywności pojawią się tutaj, gdy zostaną ukończone i zapisane.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Zmień kurs",
"changeCourseDesc": "Tutaj możesz zmienić plan kursu tego kursu.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Aktywność praktyczna zakończona",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Utwórz czat wprowadzający",
"introChatDesc": "Każdy w przestrzeni może publikować.",
"announcementsChatTitle": "Czat ogłoszeń",
"announcementsChatDesc": "Tylko administrator przestrzeni może publikować.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:06:02.778781",
"@@last_modified": "2025-12-01 12:39:56.923773",
"copiedToClipboard": "Copiada para a área de transferência",
"@copiedToClipboard": {
"type": "String",
@ -12931,5 +12931,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Falha ao carregar feedback.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Destaque as palavras de vocabulário-alvo abaixo enviando-as ou praticando com elas no chat",
"noSavedActivitiesYet": "As atividades aparecerão aqui assim que forem concluídas e salvas.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Mudar curso",
"changeCourseDesc": "Aqui você pode mudar o plano de curso deste curso.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Atividade de prática concluída",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Criar Chat de Apresentações",
"introChatDesc": "Qualquer pessoa no espaço pode postar.",
"announcementsChatTitle": "Chat de Anúncios",
"announcementsChatDesc": "Apenas o administrador do espaço pode postar.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:05:59.697842",
"@@last_modified": "2025-12-01 12:39:53.340170",
"about": "Sobre",
"@about": {
"type": "String",
@ -12189,5 +12189,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Falha ao carregar feedback.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Destaque as palavras de vocabulário-alvo abaixo enviando-as ou praticando com elas no chat",
"noSavedActivitiesYet": "As atividades aparecerão aqui assim que forem concluídas e salvas.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Mudar curso",
"changeCourseDesc": "Aqui você pode mudar o plano de curso deste curso.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Atividade de prática concluída",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Criar Chat de Apresentações",
"introChatDesc": "Qualquer pessoa no espaço pode postar.",
"announcementsChatTitle": "Chat de Anúncios",
"announcementsChatDesc": "Apenas o administrador do espaço pode postar.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -3816,7 +3816,7 @@
"selectAll": "Selecionar tudo",
"deselectAll": "Desmarcar tudo",
"@@locale": "pt_PT",
"@@last_modified": "2025-11-19 10:06:34.617095",
"@@last_modified": "2025-12-01 12:40:21.887443",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12860,5 +12860,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Falha ao carregar feedback.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Destaque as palavras de vocabulário-alvo abaixo enviando-as ou praticando com elas no chat",
"noSavedActivitiesYet": "As atividades aparecerão aqui assim que forem concluídas e salvas.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Mudar curso",
"changeCourseDesc": "Aqui você pode mudar o plano de curso deste curso.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Atividade de prática concluída",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Criar Chat de Apresentações",
"introChatDesc": "Qualquer pessoa no espaço pode postar.",
"announcementsChatTitle": "Chat de Anúncios",
"announcementsChatDesc": "Apenas o administrador do espaço pode postar.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:05:44.760968",
"@@last_modified": "2025-12-01 12:39:39.618148",
"about": "Despre",
"@about": {
"type": "String",
@ -12566,5 +12566,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Încărcarea feedback-ului a eșuat.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Subliniază cuvintele țintă din vocabular de mai jos trimițându-le sau exersându-le în chat",
"noSavedActivitiesYet": "Activitățile vor apărea aici odată ce sunt finalizate și salvate.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Schimbă cursul",
"changeCourseDesc": "Aici poți schimba planul de curs al acestui curs.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Activitate de practică finalizată",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Creează chat de introduceri",
"introChatDesc": "Oricine din spațiu poate posta.",
"announcementsChatTitle": "Chat de anunțuri",
"announcementsChatDesc": "Numai administratorul spațiului poate posta.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "ru",
"@@last_modified": "2025-11-19 10:07:15.570964",
"@@last_modified": "2025-12-01 12:41:08.695760",
"about": "О проекте",
"@about": {
"type": "String",
@ -11936,5 +11936,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Не удалось загрузить отзывы.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Выделите целевые слова словаря ниже, отправив их или практикуя с ними в чате",
"noSavedActivitiesYet": "Здесь появятся активности, как только они будут завершены и сохранены.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Изменить курс",
"changeCourseDesc": "Здесь вы можете изменить план курса этого курса.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Практическое задание завершено",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Создать чат для представлений",
"introChatDesc": "Любой в пространстве может публиковать.",
"announcementsChatTitle": "Чат объявлений",
"announcementsChatDesc": "Только администратор пространства может публиковать.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "sk",
"@@last_modified": "2025-11-19 10:05:46.486562",
"@@last_modified": "2025-12-01 12:39:42.579953",
"about": "O aplikácii",
"@about": {
"type": "String",
@ -12915,5 +12915,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Nepodarilo sa načítať spätnú väzbu.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Zvýraznite cieľové slovíčka nižšie ich odoslaním alebo cvičením s nimi v chate",
"noSavedActivitiesYet": "Aktivity sa tu objavia, keď budú dokončené a uložené.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Zmeniť kurz",
"changeCourseDesc": "Tu môžete zmeniť plán kurzu tohto kurzu.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Aktivita cvičenia dokončená",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Vytvoriť chat o predstaveniach",
"introChatDesc": "Ktokoľvek v priestore môže prispieť.",
"announcementsChatTitle": "Chat o oznámeniach",
"announcementsChatDesc": "Iba administrátor priestoru môže prispieť.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -2945,7 +2945,7 @@
"playWithAI": "Za zdaj igrajte z AI-jem",
"courseStartDesc": "Pangea Bot je pripravljen kadarkoli!\n\n...ampak je bolje učiti se s prijatelji!",
"@@locale": "sl",
"@@last_modified": "2025-11-19 10:06:09.338917",
"@@last_modified": "2025-12-01 12:40:03.273120",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12912,5 +12912,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Nalaganje povratnih informacij ni uspelo.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Označite ciljne besede spodaj tako, da jih pošljete ali vadite z njimi v klepetu",
"noSavedActivitiesYet": "Aktivnosti se bodo prikazale tukaj, ko bodo zaključene in shranjene.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Spremeni tečaj",
"changeCourseDesc": "Tukaj lahko spremenite načrt tečaja.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Aktivnost vadbe zaključena",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Ustvari klepet za uvod",
"introChatDesc": "Kdor koli v prostoru lahko objavi.",
"announcementsChatTitle": "Klepet za obvestila",
"announcementsChatDesc": "Samo skrbnik prostora lahko objavi.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:07:20.801798",
"@@last_modified": "2025-12-01 12:41:13.018500",
"about": "О програму",
"@about": {
"type": "String",
@ -12933,5 +12933,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Nije uspelo učitavanje povratnih informacija.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Istaknite ciljne reči rečnika ispod tako što ćete ih poslati ili vežbati u čatu",
"noSavedActivitiesYet": "Aktivnosti će se ovde pojaviti kada budu završene i sačuvane.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Promeni kurs",
"changeCourseDesc": "Ovde možete promeniti plan kursa ovog kursa.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Aktivnost vežbanja je završena",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Kreiraj chat za uvod",
"introChatDesc": "Svako u prostoru može da objavljuje.",
"announcementsChatTitle": "Chat za obaveštenja",
"announcementsChatDesc": "Samo administrator prostora može da objavljuje.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:07:03.292476",
"@@last_modified": "2025-12-01 12:40:57.541160",
"about": "Om",
"@about": {
"type": "String",
@ -12309,5 +12309,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Misslyckades med att ladda feedback.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Markera målvokabulärord nedan genom att skicka dem eller öva med dem i chatten",
"noSavedActivitiesYet": "Aktiviteter kommer att visas här när de är slutförda och sparade.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Ändra kurs",
"changeCourseDesc": "Här kan du ändra kursplanen för denna kurs.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Övningsaktivitet slutförd",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Skapa Introduktionschatt",
"introChatDesc": "Alla i rummet kan posta.",
"announcementsChatTitle": "Meddelanden Chatt",
"announcementsChatDesc": "Endast rumsadministratören kan posta.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:06:50.799508",
"@@last_modified": "2025-12-01 12:40:43.100129",
"acceptedTheInvitation": "👍 {username} அழைப்பை ஏற்றுக்கொண்டது",
"@acceptedTheInvitation": {
"type": "String",
@ -12055,5 +12055,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "பின்னூட்டத்தை ஏற்ற முடியவில்லை.",
"unreadPlus": "99+",
"highlightVocabTooltip": "சாட் மூலம் அனுப்புவதன் மூலம் அல்லது அவற்றுடன் பயிற்சி செய்வதன் மூலம் கீழே உள்ள இலக்கு சொற்களை வண்ணமயமாக்கவும்",
"noSavedActivitiesYet": "செயல்பாடுகள் முடிக்கப்பட்டு சேமிக்கப்பட்ட பிறகு இங்கே தோன்றும்.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "பாடத்தை மாற்றவும்",
"changeCourseDesc": "இங்கு நீங்கள் இந்த பாடத்தின் பாட திட்டத்தை மாற்றலாம்.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "பயிற்சி செயல்பாடு முடிந்தது",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "அறிமுக உரையாடல் உருவாக்கவும்",
"introChatDesc": "இடத்தில் உள்ள யாரும் பதிவேற்றலாம்.",
"announcementsChatTitle": "அறிக்கைகள் உரையாடல்",
"announcementsChatDesc": "மட்டுமல்லாமல் இட நிர்வாகி பதிவேற்றலாம்.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -2401,7 +2401,7 @@
"playWithAI": "ఇప్పుడే AI తో ఆడండి",
"courseStartDesc": "పాంజియా బాట్ ఎప్పుడైనా సిద్ధంగా ఉంటుంది!\n\n...కానీ స్నేహితులతో నేర్చుకోవడం మెరుగైనది!",
"@@locale": "te",
"@@last_modified": "2025-11-19 10:06:45.064200",
"@@last_modified": "2025-12-01 12:40:34.812634",
"@setCustomPermissionLevel": {
"type": "String",
"placeholders": {}
@ -12920,5 +12920,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "ఫీడ్‌బ్యాక్‌ను లోడ్ చేయడంలో విఫలమైంది.",
"unreadPlus": "99+",
"highlightVocabTooltip": "చాట్‌లో వాటిని పంపడం లేదా వాటితో ప్రాక్టీస్ చేయడం ద్వారా కింద లక్ష్య పదజాల పదాలను హైలైట్ చేయండి",
"noSavedActivitiesYet": "చర్యలు పూర్తి చేసి సేవ్ చేసిన తర్వాత ఇక్కడ కనిపిస్తాయి.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "కోర్సు మార్చండి",
"changeCourseDesc": "ఇక్కడ మీరు ఈ కోర్సు యొక్క కోర్సు ప్రణాళికను మార్చవచ్చు.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "అభ్యాస కార్యకలాపం పూర్తయింది",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "పరిచయాల చాట్ సృష్టించండి",
"introChatDesc": "ఈ స్థలంలో ఎవ్వరైనా పోస్ట్ చేయవచ్చు.",
"announcementsChatTitle": "ప్రకటనల చాట్",
"announcementsChatDesc": "కేవలం స్థల నిర్వాహకుడు మాత్రమే పోస్ట్ చేయవచ్చు.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4937,7 +4937,7 @@
"playWithAI": "เล่นกับ AI ชั่วคราว",
"courseStartDesc": "Pangea Bot พร้อมที่จะเริ่มต้นได้ทุกเมื่อ!\n\n...แต่การเรียนรู้ดีกว่ากับเพื่อน!",
"@@locale": "th",
"@@last_modified": "2025-11-19 10:06:33.387069",
"@@last_modified": "2025-12-01 12:40:19.963556",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -12889,5 +12889,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "ไม่สามารถโหลดข้อเสนอแนะได้",
"unreadPlus": "99+",
"highlightVocabTooltip": "เน้นคำศัพท์เป้าหมายด้านล่างโดยการส่งหรือฝึกฝนกับพวกเขาในแชท",
"noSavedActivitiesYet": "กิจกรรมจะปรากฏที่นี่เมื่อเสร็จสิ้นและบันทึกแล้ว",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "เปลี่ยนหลักสูตร",
"changeCourseDesc": "ที่นี่คุณสามารถเปลี่ยนแผนการสอนของหลักสูตรนี้ได้",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "กิจกรรมการฝึกซ้อมเสร็จสิ้น",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "สร้างแชทแนะนำ",
"introChatDesc": "ใครก็ได้ในพื้นที่สามารถโพสต์ได้。",
"announcementsChatTitle": "แชทประกาศ",
"announcementsChatDesc": "เฉพาะผู้ดูแลพื้นที่เท่านั้นที่สามารถโพสต์ได้.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "tr",
"@@last_modified": "2025-11-19 10:06:43.229771",
"@@last_modified": "2025-12-01 12:40:32.542590",
"about": "Hakkında",
"@about": {
"type": "String",
@ -12053,5 +12053,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Geri bildirimi yüklemek başarısız oldu.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Aşağıdaki hedef kelime kelimeleri vurgulamak için bunları sohbet içinde göndererek veya pratik yaparak vurgulayın.",
"noSavedActivitiesYet": "Aktiviteler tamamlandığında ve kaydedildiğinde burada görünecektir.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Ders değiştir",
"changeCourseDesc": "Burada bu dersin ders planını değiştirebilirsiniz.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Pratik etkinliği tamamlandı",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Tanıtım Sohbeti Oluştur",
"introChatDesc": "Mekandaki herkes paylaşımda bulunabilir.",
"announcementsChatTitle": "Duyurular Sohbeti",
"announcementsChatDesc": "Sadece mekan yöneticisi paylaşımda bulunabilir.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "uk",
"@@last_modified": "2025-11-19 10:06:21.916637",
"@@last_modified": "2025-12-01 12:40:09.213073",
"about": "Про застосунок",
"@about": {
"type": "String",
@ -11825,5 +11825,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Не вдалося завантажити відгук.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Виділіть цільові слова словникового запасу нижче, надіславши їх або практикуючи з ними в чаті",
"noSavedActivitiesYet": "Активності з'являться тут, як тільки вони будуть завершені та збережені.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Змінити курс",
"changeCourseDesc": "Тут ви можете змінити план курсу цього курсу.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Практична діяльність завершена",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Створити чат для знайомств",
"introChatDesc": "Будь-хто в просторі може публікувати.",
"announcementsChatTitle": "Чат оголошень",
"announcementsChatDesc": "Тільки адміністратор простору може публікувати.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:06:48.931764",
"@@last_modified": "2025-12-01 12:40:41.049624",
"about": "Giới thiệu",
"@about": {
"type": "String",
@ -5772,5 +5772,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "Không thể tải phản hồi.",
"unreadPlus": "99+",
"highlightVocabTooltip": "Đánh dấu các từ vựng mục tiêu bên dưới bằng cách gửi chúng hoặc thực hành với chúng trong trò chuyện",
"noSavedActivitiesYet": "Các hoạt động sẽ xuất hiện ở đây khi chúng được hoàn thành và lưu lại.",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "Thay đổi khóa học",
"changeCourseDesc": "Tại đây bạn có thể thay đổi kế hoạch khóa học của khóa học này.",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "Hoạt động thực hành đã hoàn thành",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "Tạo trò chuyện giới thiệu",
"introChatDesc": "Bất kỳ ai trong không gian đều có thể đăng bài.",
"announcementsChatTitle": "Trò chuyện thông báo",
"announcementsChatDesc": "Chỉ quản trị viên không gian mới có thể đăng bài.",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -2341,7 +2341,7 @@
"selectAll": "全選",
"deselectAll": "取消全選",
"@@locale": "yue",
"@@last_modified": "2025-11-19 10:06:11.264487",
"@@last_modified": "2025-12-01 12:40:05.012948",
"@ignoreUser": {
"type": "String",
"placeholders": {}
@ -12922,5 +12922,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "無法加載反饋。",
"unreadPlus": "99+",
"highlightVocabTooltip": "通過在聊天中發送或練習以下目標詞彙來突出顯示它們",
"noSavedActivitiesYet": "活動完成並保存後將會出現在這裡。",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "更改課程",
"changeCourseDesc": "在這裡你可以更改這個課程的課程計劃。",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "練習活動已完成",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "創建介紹聊天",
"introChatDesc": "任何人在這個空間都可以發帖。",
"announcementsChatTitle": "公告聊天",
"announcementsChatDesc": "只有空間管理員可以發帖。",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "zh",
"@@last_modified": "2025-11-19 10:06:55.893202",
"@@last_modified": "2025-12-01 12:40:49.294875",
"about": "关于",
"@about": {
"type": "String",
@ -11822,5 +11822,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "加载反馈失败。",
"unreadPlus": "99+",
"highlightVocabTooltip": "通过在聊天中发送或练习下面的目标词汇来突出显示它们",
"noSavedActivitiesYet": "活动完成并保存后将出现在这里。",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "更改课程",
"changeCourseDesc": "在这里您可以更改此课程的课程计划。",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "练习活动已完成",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "创建介绍聊天",
"introChatDesc": "空间中的任何人都可以发布。",
"announcementsChatTitle": "公告聊天",
"announcementsChatDesc": "只有空间管理员可以发布。",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2025-11-19 10:06:36.975533",
"@@last_modified": "2025-12-01 12:40:24.165409",
"about": "關於",
"@about": {
"type": "String",
@ -11829,5 +11829,60 @@
"@teacherModeDesc": {
"type": "String",
"placeholders": {}
},
"failedToLoadFeedback": "無法加載反饋。",
"unreadPlus": "99+",
"highlightVocabTooltip": "通過在聊天中發送或練習以下目標詞彙來突出顯示它們",
"noSavedActivitiesYet": "活動完成並保存後將顯示在這裡。",
"@failedToLoadFeedback": {
"type": "String",
"placeholders": {}
},
"@unreadPlus": {
"type": "String",
"placeholders": {}
},
"@highlightVocabTooltip": {
"type": "String",
"placeholders": {}
},
"@noSavedActivitiesYet": {
"type": "String",
"placeholders": {}
},
"changeCourse": "更改課程",
"changeCourseDesc": "在這裡您可以更改此課程的課程計劃。",
"@changeCourse": {
"type": "String",
"placeholders": {}
},
"@changeCourseDesc": {
"type": "String",
"placeholders": {}
},
"practiceActivityCompleted": "練習活動已完成",
"@practiceActivityCompleted": {
"type": "String",
"placeholders": {}
},
"introChatTitle": "創建介紹聊天",
"introChatDesc": "空間中的任何人都可以發帖。",
"announcementsChatTitle": "公告聊天",
"announcementsChatDesc": "只有空間管理員可以發帖。",
"@introChatTitle": {
"type": "String",
"placeholders": {}
},
"@introChatDesc": {
"type": "String",
"placeholders": {}
},
"@announcementsChatTitle": {
"type": "String",
"placeholders": {}
},
"@announcementsChatDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -197,8 +197,6 @@ class NewGroupController extends State<NewGroup> {
// context.pop<String>(spaceId);
final spaceId = await Matrix.of(context).client.createPangeaSpace(
name: nameController.text,
introChatName: L10n.of(context).introductions,
announcementsChatName: L10n.of(context).announcements,
visibility: sdk.Visibility.private,
joinRules: sdk.JoinRules.knock,
avatarUrl: avatarUrl.toString(),

View file

@ -14,6 +14,7 @@ import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart
import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart';
import 'package:fluffychat/pangea/common/utils/error_handler.dart';
import 'package:fluffychat/pangea/course_chats/course_chats_view.dart';
import 'package:fluffychat/pangea/course_chats/course_default_chats_enum.dart';
import 'package:fluffychat/pangea/course_chats/extended_space_rooms_chunk.dart';
import 'package:fluffychat/pangea/course_plans/course_activities/activity_summaries_provider.dart';
import 'package:fluffychat/pangea/course_plans/courses/course_plan_builder.dart';
@ -616,6 +617,42 @@ class CourseChatsController extends State<CourseChats>
return 0;
}
bool showDefaultChatCreation(CourseDefaultChatsEnum type) {
if (room == null || !room!.isRoomAdmin) return false;
return !room!.dismissedDefaultChat(type) && !room!.hasDefaultChat(type);
}
Future<void> dismissDefaultChatCreation(
CourseDefaultChatsEnum type,
) async {
if (room == null) {
throw Exception("Room is null");
}
final settings = switch (type) {
CourseDefaultChatsEnum.introductions =>
room!.courseChatsSettings.copyWith(dismissedIntroChat: true),
CourseDefaultChatsEnum.announcements =>
room!.courseChatsSettings.copyWith(dismissedAnnouncementsChat: true),
};
await room!.setCourseChatsSettings(settings);
}
Future<void> createDefaultChat(
CourseDefaultChatsEnum type,
) async {
if (room == null) {
throw Exception("Room is null");
}
final roomId = await room!.addDefaultChat(
type: type,
name: type.title(L10n.of(context)),
);
context.go('/rooms/spaces/${widget.roomId}/$roomId');
}
@override
Widget build(BuildContext context) => CourseChatsView(this);
}

View file

@ -0,0 +1,31 @@
class CourseChatsSettingsModel {
final bool dismissedIntroChat;
final bool dismissedAnnouncementsChat;
const CourseChatsSettingsModel({
this.dismissedIntroChat = false,
this.dismissedAnnouncementsChat = false,
});
Map<String, dynamic> toJson() => {
'dismissed_intro_chat': dismissedIntroChat,
'dismissed_announcements_chat': dismissedAnnouncementsChat,
};
factory CourseChatsSettingsModel.fromJson(Map<String, dynamic> json) {
return CourseChatsSettingsModel(
dismissedIntroChat: json['dismissed_intro_chat'] ?? false,
dismissedAnnouncementsChat: json['dismissed_announcements_chat'] ?? false,
);
}
CourseChatsSettingsModel copyWith({
bool? dismissedIntroChat,
bool? dismissedAnnouncementsChat,
}) =>
CourseChatsSettingsModel(
dismissedIntroChat: dismissedIntroChat ?? this.dismissedIntroChat,
dismissedAnnouncementsChat:
dismissedAnnouncementsChat ?? this.dismissedAnnouncementsChat,
);
}

View file

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:matrix/matrix.dart' as sdk;
import 'package:matrix/matrix.dart';
@ -12,10 +13,12 @@ import 'package:fluffychat/pangea/analytics_summary/learning_progress_indicators
import 'package:fluffychat/pangea/chat_settings/widgets/chat_context_menu_action.dart';
import 'package:fluffychat/pangea/course_chats/activity_template_chat_list_item.dart';
import 'package:fluffychat/pangea/course_chats/course_chats_page.dart';
import 'package:fluffychat/pangea/course_chats/course_default_chats_enum.dart';
import 'package:fluffychat/pangea/course_chats/unjoined_chat_list_item.dart';
import 'package:fluffychat/pangea/space_analytics/analytics_request_indicator.dart';
import 'package:fluffychat/pangea/spaces/widgets/knocking_users_indicator.dart';
import 'package:fluffychat/utils/stream_extension.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
class CourseChatsView extends StatelessWidget {
final CourseChatsController controller;
@ -62,7 +65,7 @@ class CourseChatsView extends StatelessWidget {
joinedSessions.length +
discoveredGroupChats.length +
discoveredSessions.length +
7,
9,
itemBuilder: (context, i) {
// courses chats title
if (i == 0) {
@ -101,6 +104,22 @@ class CourseChatsView extends StatelessWidget {
}
i--;
if (i == 0) {
return _DefaultChatCreationTile(
type: CourseDefaultChatsEnum.introductions,
controller: controller,
);
}
i--;
if (i == 0) {
return _DefaultChatCreationTile(
type: CourseDefaultChatsEnum.announcements,
controller: controller,
);
}
i--;
// joined group chats
if (i < joinedChats.length) {
final joinedRoom = joinedChats[i];
@ -239,3 +258,38 @@ class CourseChatsView extends StatelessWidget {
);
}
}
class _DefaultChatCreationTile extends StatelessWidget {
final CourseDefaultChatsEnum type;
final CourseChatsController controller;
const _DefaultChatCreationTile({
required this.type,
required this.controller,
});
@override
Widget build(BuildContext context) {
if (!controller.showDefaultChatCreation(type)) {
return const SizedBox();
}
final l10n = L10n.of(context);
return ListTile(
leading: const Icon(Symbols.chat_add_on),
title: Text(type.creationTitle(l10n)),
subtitle: Text(type.creationDesc(l10n)),
trailing: IconButton(
icon: const Icon(Icons.close),
onPressed: () => showFutureLoadingDialog(
context: context,
future: () => controller.dismissDefaultChatCreation(type),
),
),
onTap: () => showFutureLoadingDialog(
context: context,
future: () => controller.createDefaultChat(type),
),
);
}
}

View file

@ -0,0 +1,29 @@
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pangea/spaces/constants/space_constants.dart';
enum CourseDefaultChatsEnum {
introductions,
announcements;
String get alias => switch (this) {
CourseDefaultChatsEnum.introductions =>
SpaceConstants.introductionChatAlias,
CourseDefaultChatsEnum.announcements =>
SpaceConstants.announcementsChatAlias,
};
String title(L10n l10n) => switch (this) {
CourseDefaultChatsEnum.introductions => l10n.introductions,
CourseDefaultChatsEnum.announcements => l10n.announcements,
};
String creationTitle(L10n l10n) => switch (this) {
CourseDefaultChatsEnum.introductions => l10n.introChatTitle,
CourseDefaultChatsEnum.announcements => l10n.announcementsChatTitle,
};
String creationDesc(L10n l10n) => switch (this) {
CourseDefaultChatsEnum.introductions => l10n.introChatDesc,
CourseDefaultChatsEnum.announcements => l10n.announcementsChatDesc,
};
}

View file

@ -11,6 +11,8 @@ import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pangea/bot/utils/bot_name.dart';
import 'package:fluffychat/pangea/course_creation/course_info_chip_widget.dart';
import 'package:fluffychat/pangea/course_plans/courses/course_plan_builder.dart';
import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extension.dart';
import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
@ -49,7 +51,17 @@ class CourseInvitePageController extends State<CourseInvitePage>
if (widget.courseCreationCompleter == null) {
throw Exception("No course creation completer provided");
}
return widget.courseCreationCompleter!.future;
final spaceId = await widget.courseCreationCompleter!.future;
final room = Matrix.of(context).client.getRoomById(spaceId);
if (room == null || room.coursePlan == null) {
await Matrix.of(context).client.onRoomState.stream.firstWhere((event) {
return event.roomId == spaceId &&
event.state.type == PangeaEventTypes.coursePlan;
}).timeout(
const Duration(seconds: 10),
);
}
return spaceId;
}
@override

View file

@ -99,8 +99,6 @@ class SelectedCourseController extends State<SelectedCourse>
.createPangeaSpace(
name: course.title,
topic: course.description,
introChatName: L10n.of(context).introductions,
announcementsChatName: L10n.of(context).announcements,
visibility: sdk.Visibility.private,
joinRules: sdk.JoinRules.knock,
initialState: [

View file

@ -1,3 +1,5 @@
import 'dart:math';
import 'package:matrix/matrix.dart' as sdk;
import 'package:matrix/matrix.dart';
@ -7,10 +9,13 @@ import 'package:fluffychat/pangea/activity_sessions/activity_roles_model.dart';
import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart';
import 'package:fluffychat/pangea/chat/constants/default_power_level.dart';
import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart';
import 'package:fluffychat/pangea/course_chats/course_chats_settings_model.dart';
import 'package:fluffychat/pangea/course_chats/course_default_chats_enum.dart';
import 'package:fluffychat/pangea/course_plans/courses/course_plan_event.dart';
import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart';
import 'package:fluffychat/pangea/extensions/join_rule_extension.dart';
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
import 'package:fluffychat/pangea/spaces/constants/space_constants.dart';
extension CoursePlanRoomExtension on Room {
CoursePlanEvent? get coursePlan {
@ -119,4 +124,81 @@ extension CoursePlanRoomExtension on Room {
},
);
}
CourseChatsSettingsModel get courseChatsSettings {
final event = getState(PangeaEventTypes.courseChatList);
if (event == null) {
return const CourseChatsSettingsModel();
}
return CourseChatsSettingsModel.fromJson(event.content);
}
Future<void> setCourseChatsSettings(
CourseChatsSettingsModel settings,
) async {
await client.setRoomStateWithKey(
id,
PangeaEventTypes.courseChatList,
"",
settings.toJson(),
);
}
bool hasDefaultChat(CourseDefaultChatsEnum type) => pangeaSpaceChildren.any(
(r) => r.canonicalAlias.localpart?.startsWith(type.alias) == true,
);
bool dismissedDefaultChat(CourseDefaultChatsEnum type) {
switch (type) {
case CourseDefaultChatsEnum.introductions:
return courseChatsSettings.dismissedIntroChat;
case CourseDefaultChatsEnum.announcements:
return courseChatsSettings.dismissedAnnouncementsChat;
}
}
Future<String> addDefaultChat({
required CourseDefaultChatsEnum type,
required String name,
}) async {
final random = Random();
final String uploadURL = switch (type) {
CourseDefaultChatsEnum.introductions => SpaceConstants
.introChatIcons[random.nextInt(SpaceConstants.introChatIcons.length)],
CourseDefaultChatsEnum.announcements =>
SpaceConstants.announcementChatIcons[
random.nextInt(SpaceConstants.announcementChatIcons.length)],
};
final resp = await client.createRoom(
preset: CreateRoomPreset.publicChat,
visibility: Visibility.private,
name: name,
roomAliasName: "${type.alias}_${id.localpart}",
initialState: [
StateEvent(
type: EventTypes.RoomAvatar,
content: {'url': uploadURL},
),
RoomDefaults.defaultPowerLevels(client.userID!),
await client.pangeaJoinRules(
'knock_restricted',
allow: [
{
"type": "m.room_membership",
"room_id": id,
}
],
),
],
);
final room = client.getRoomById(resp);
if (room == null) {
await client.waitForRoomInSync(resp, join: true);
}
await addToSpace(resp);
return resp;
}
}

View file

@ -53,4 +53,5 @@ class PangeaEventTypes {
static const coursePlan = "pangea.course_plan";
static const courseUser = "p.course_user";
static const teacherMode = "pangea.teacher_mode";
static const courseChatList = "pangea.course_chat_list";
}

View file

@ -21,6 +21,14 @@ extension ChildrenAndParentsRoomExtension on Room {
)
.toList();
List<Room> get pangeaSpaceChildren => client.rooms
.where(
(r) => spaceChildren.any(
(child) => r.id == child.roomId,
),
)
.toList();
/// Wrapper around call to setSpaceChild with added functionality
/// to prevent adding one room to multiple spaces, and resets the
/// subspace's JoinRules and Visibility to defaults.

View file

@ -8,20 +8,6 @@ extension RoomInformationRoomExtension on Room {
return creationEvent?.originServerTs;
}
bool isFirstOrSecondChild(String roomId) {
return isSpace &&
(spaceChildren.any((room) => room.roomId == roomId) ||
spaceChildren
.where((sc) => sc.roomId != null)
.map((sc) => client.getRoomById(sc.roomId!))
.any(
(room) =>
room != null &&
room.isSpace &&
room.spaceChildren.any((room) => room.roomId == roomId),
));
}
Future<bool> get botIsInRoom async {
final List<User> participants = await requestParticipants();
return participants.any(

View file

@ -1,19 +1,11 @@
import 'dart:math';
import 'package:http/http.dart' as http;
import 'package:matrix/matrix.dart';
import 'package:fluffychat/pangea/chat/constants/default_power_level.dart';
import 'package:fluffychat/pangea/common/utils/error_handler.dart';
import 'package:fluffychat/pangea/extensions/join_rule_extension.dart';
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
import 'package:fluffychat/pangea/spaces/constants/space_constants.dart';
extension SpacesClientExtension on Client {
Future<String> createPangeaSpace({
required String name,
required String introChatName,
required String announcementsChatName,
String? topic,
Visibility visibility = Visibility.private,
JoinRules joinRules = JoinRules.public,
@ -44,152 +36,10 @@ extension SpacesClientExtension on Client {
],
);
final space = await _waitForRoom(roomId);
if (space == null) return roomId;
if (getRoomById(roomId) == null) {
await waitForRoomInSync(roomId, join: true);
}
await _addDefaultSpaceChats(
space: space,
introductionsName: introChatName,
announcementsName: announcementsChatName,
);
return roomId;
}
Future<Room?> _waitForRoom(String roomId) async {
final room = getRoomById(roomId);
if (room != null) return room;
await waitForRoomInSync(roomId, join: true).timeout(
const Duration(seconds: 15),
onTimeout: () {
throw Exception('Timeout fetching room after creation');
},
);
return getRoomById(roomId);
}
Future<void> _addDefaultSpaceChats({
required Room space,
String introductionsName = "Introductions",
String announcementsName = "Announcements",
}) async {
Uri? introChatUploadURL;
Uri? announcementsChatUploadURL;
try {
final random = Random();
final introChatIconURL = SpaceConstants
.introChatIcons[random.nextInt(SpaceConstants.introChatIcons.length)];
final announcementsChatIconURL = SpaceConstants.announcementChatIcons[
random.nextInt(SpaceConstants.announcementChatIcons.length)];
final introResponse = await http.get(Uri.parse(introChatIconURL));
final introChatIcon = introResponse.bodyBytes;
final intoChatIconFilename = Uri.encodeComponent(
Uri.parse(introChatIconURL).pathSegments.last,
);
introChatUploadURL = await uploadContent(
introChatIcon,
filename: intoChatIconFilename,
);
final announcementsResponse =
await http.get(Uri.parse(announcementsChatIconURL));
final announcementsChatIcon = announcementsResponse.bodyBytes;
final announcementsChatIconFilename = Uri.encodeComponent(
Uri.parse(announcementsChatIconURL).pathSegments.last,
);
announcementsChatUploadURL = await uploadContent(
announcementsChatIcon,
filename: announcementsChatIconFilename,
);
} catch (e, s) {
ErrorHandler.logError(
e: "Failed to upload space chat icons",
s: s,
data: {
"error": e,
"spaceId": space.id,
},
);
}
final introChatFuture = createRoom(
preset: CreateRoomPreset.publicChat,
visibility: Visibility.private,
name: introductionsName,
roomAliasName:
"${SpaceConstants.introductionChatAlias}_${space.id.localpart}",
initialState: [
if (introChatUploadURL != null)
StateEvent(
type: EventTypes.RoomAvatar,
content: {'url': introChatUploadURL.toString()},
),
RoomDefaults.defaultPowerLevels(userID!),
await pangeaJoinRules(
'knock_restricted',
allow: [
{
"type": "m.room_membership",
"room_id": space.id,
}
],
),
],
);
final announcementsChatFuture = createRoom(
preset: CreateRoomPreset.publicChat,
visibility: Visibility.private,
name: announcementsName,
roomAliasName:
"${SpaceConstants.announcementsChatAlias}_${space.id.localpart}",
initialState: [
if (announcementsChatUploadURL != null)
StateEvent(
type: EventTypes.RoomAvatar,
content: {'url': announcementsChatUploadURL.toString()},
),
RoomDefaults.restrictedPowerLevels(userID!),
await pangeaJoinRules(
'knock_restricted',
allow: [
{
"type": "m.room_membership",
"room_id": space.id,
}
],
),
],
);
final List<String> roomIds = await Future.wait([
introChatFuture,
announcementsChatFuture,
]);
if (roomIds.length != 2) {
throw Exception('Failed to create default space chats');
}
for (final roomId in roomIds) {
final room = getRoomById(roomId);
if (room == null) {
await waitForRoomInSync(roomId, join: true);
}
}
final addIntroChatFuture = space.addToSpace(
roomIds[0],
);
final addAnnouncementsChatFuture = space.addToSpace(
roomIds[1],
);
await Future.wait([
addIntroChatFuture,
addAnnouncementsChatFuture,
]);
}
}

View file

@ -151,6 +151,7 @@ abstract class ClientManager {
PangeaEventTypes.coursePlan,
PangeaEventTypes.courseUser,
PangeaEventTypes.teacherMode,
PangeaEventTypes.courseChatList,
// Pangea#
},
logLevel: kReleaseMode ? Level.warning : Level.verbose,

View file

@ -6,7 +6,7 @@ description: Learn a language while texting your friends.
# Pangea#
publish_to: none
# On version bump also increase the build number for F-Droid
version: 4.1.15+10
version: 4.1.15+11
environment:
sdk: ">=3.0.0 <4.0.0"