From f5a28a3dae0ce0156afb07c276af9f2599920921 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Mon, 1 Dec 2025 12:41:59 -0500 Subject: [PATCH 1/3] resolve merge conflicts --- lib/l10n/intl_ar.arb | 57 ++++++- lib/l10n/intl_be.arb | 57 ++++++- lib/l10n/intl_bn.arb | 57 ++++++- lib/l10n/intl_bo.arb | 57 ++++++- lib/l10n/intl_ca.arb | 57 ++++++- lib/l10n/intl_cs.arb | 57 ++++++- lib/l10n/intl_da.arb | 57 ++++++- lib/l10n/intl_de.arb | 57 ++++++- lib/l10n/intl_el.arb | 57 ++++++- lib/l10n/intl_en.arb | 10 +- lib/l10n/intl_eo.arb | 57 ++++++- lib/l10n/intl_es.arb | 57 ++++++- lib/l10n/intl_et.arb | 57 ++++++- lib/l10n/intl_eu.arb | 57 ++++++- lib/l10n/intl_fa.arb | 57 ++++++- lib/l10n/intl_fi.arb | 57 ++++++- lib/l10n/intl_fil.arb | 57 ++++++- lib/l10n/intl_fr.arb | 57 ++++++- lib/l10n/intl_ga.arb | 57 ++++++- lib/l10n/intl_gl.arb | 57 ++++++- lib/l10n/intl_he.arb | 57 ++++++- lib/l10n/intl_hi.arb | 57 ++++++- lib/l10n/intl_hr.arb | 57 ++++++- lib/l10n/intl_hu.arb | 57 ++++++- lib/l10n/intl_ia.arb | 57 ++++++- lib/l10n/intl_id.arb | 57 ++++++- lib/l10n/intl_ie.arb | 57 ++++++- lib/l10n/intl_it.arb | 57 ++++++- lib/l10n/intl_ja.arb | 57 ++++++- lib/l10n/intl_ka.arb | 57 ++++++- lib/l10n/intl_ko.arb | 57 ++++++- lib/l10n/intl_lt.arb | 57 ++++++- lib/l10n/intl_lv.arb | 57 ++++++- lib/l10n/intl_nb.arb | 57 ++++++- lib/l10n/intl_nl.arb | 57 ++++++- lib/l10n/intl_pl.arb | 57 ++++++- lib/l10n/intl_pt.arb | 57 ++++++- lib/l10n/intl_pt_BR.arb | 57 ++++++- lib/l10n/intl_pt_PT.arb | 57 ++++++- lib/l10n/intl_ro.arb | 57 ++++++- lib/l10n/intl_ru.arb | 57 ++++++- lib/l10n/intl_sk.arb | 57 ++++++- lib/l10n/intl_sl.arb | 57 ++++++- lib/l10n/intl_sr.arb | 57 ++++++- lib/l10n/intl_sv.arb | 57 ++++++- lib/l10n/intl_ta.arb | 57 ++++++- lib/l10n/intl_te.arb | 57 ++++++- lib/l10n/intl_th.arb | 57 ++++++- lib/l10n/intl_tr.arb | 57 ++++++- lib/l10n/intl_uk.arb | 57 ++++++- lib/l10n/intl_vi.arb | 57 ++++++- lib/l10n/intl_yue.arb | 57 ++++++- lib/l10n/intl_zh.arb | 57 ++++++- lib/l10n/intl_zh_Hant.arb | 57 ++++++- lib/pages/new_group/new_group.dart | 2 - .../course_chats/course_chats_page.dart | 37 +++++ .../course_chats_settings_model.dart | 31 ++++ .../course_chats/course_chats_view.dart | 56 ++++++- .../course_default_chats_enum.dart | 29 ++++ .../course_creation/selected_course_page.dart | 2 - .../courses/course_plan_room_extension.dart | 82 +++++++++ .../events/constants/pangea_event_types.dart | 1 + .../room_children_and_parents_extension.dart | 8 + .../room_information_extension.dart | 14 -- .../spaces/utils/client_spaces_extension.dart | 155 ------------------ lib/utils/client_manager.dart | 1 + 66 files changed, 3221 insertions(+), 228 deletions(-) create mode 100644 lib/pangea/course_chats/course_chats_settings_model.dart create mode 100644 lib/pangea/course_chats/course_default_chats_enum.dart diff --git a/lib/l10n/intl_ar.arb b/lib/l10n/intl_ar.arb index 423ba4c17..611a3a379 100644 --- a/lib/l10n/intl_ar.arb +++ b/lib/l10n/intl_ar.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_be.arb b/lib/l10n/intl_be.arb index 405127496..c7e6833ea 100644 --- a/lib/l10n/intl_be.arb +++ b/lib/l10n/intl_be.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bn.arb b/lib/l10n/intl_bn.arb index 7cab38093..029f850d7 100644 --- a/lib/l10n/intl_bn.arb +++ b/lib/l10n/intl_bn.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bo.arb b/lib/l10n/intl_bo.arb index 4ca856e89..fa62d290d 100644 --- a/lib/l10n/intl_bo.arb +++ b/lib/l10n/intl_bo.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ca.arb b/lib/l10n/intl_ca.arb index 75b6191a9..a74ce22fc 100644 --- a/lib/l10n/intl_ca.arb +++ b/lib/l10n/intl_ca.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index b3f2521e5..f29ad07df 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_da.arb b/lib/l10n/intl_da.arb index 301b24d67..2c93fbf46 100644 --- a/lib/l10n/intl_da.arb +++ b/lib/l10n/intl_da.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index ba5aa56b9..7a43c2fd2 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_el.arb b/lib/l10n/intl_el.arb index 1d1f241d0..87f8537a6 100644 --- a/lib/l10n/intl_el.arb +++ b/lib/l10n/intl_el.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index bac03b3e2..b311c882a 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -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." } diff --git a/lib/l10n/intl_eo.arb b/lib/l10n/intl_eo.arb index eb44a6511..dccc9356a 100644 --- a/lib/l10n/intl_eo.arb +++ b/lib/l10n/intl_eo.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index bb1f6427b..00d1fbb84 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_et.arb b/lib/l10n/intl_et.arb index 1b9967838..6ddd271ae 100644 --- a/lib/l10n/intl_et.arb +++ b/lib/l10n/intl_et.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_eu.arb b/lib/l10n/intl_eu.arb index 0bff2c7b0..ec36f11f8 100644 --- a/lib/l10n/intl_eu.arb +++ b/lib/l10n/intl_eu.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fa.arb b/lib/l10n/intl_fa.arb index 446a100e3..aec3112bb 100644 --- a/lib/l10n/intl_fa.arb +++ b/lib/l10n/intl_fa.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fi.arb b/lib/l10n/intl_fi.arb index 003a5b2d6..10b3517e0 100644 --- a/lib/l10n/intl_fi.arb +++ b/lib/l10n/intl_fi.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fil.arb b/lib/l10n/intl_fil.arb index db22e7d00..32d7a0cb4 100644 --- a/lib/l10n/intl_fil.arb +++ b/lib/l10n/intl_fil.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index dab28c42f..644d821ea 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index 461106e7f..7c9dc5e5d 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index 2e78bfebc..389ac6fcf 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_he.arb b/lib/l10n/intl_he.arb index 1b50830d1..e4e2b0262 100644 --- a/lib/l10n/intl_he.arb +++ b/lib/l10n/intl_he.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hi.arb b/lib/l10n/intl_hi.arb index 6e0f0d616..9cadca1a7 100644 --- a/lib/l10n/intl_hi.arb +++ b/lib/l10n/intl_hi.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hr.arb b/lib/l10n/intl_hr.arb index 471c996c5..457185251 100644 --- a/lib/l10n/intl_hr.arb +++ b/lib/l10n/intl_hr.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hu.arb b/lib/l10n/intl_hu.arb index dccb37979..7088a16d0 100644 --- a/lib/l10n/intl_hu.arb +++ b/lib/l10n/intl_hu.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ia.arb b/lib/l10n/intl_ia.arb index 57741107b..0036250ee 100644 --- a/lib/l10n/intl_ia.arb +++ b/lib/l10n/intl_ia.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_id.arb b/lib/l10n/intl_id.arb index 7abf71cba..b3c44bc1d 100644 --- a/lib/l10n/intl_id.arb +++ b/lib/l10n/intl_id.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ie.arb b/lib/l10n/intl_ie.arb index bdc9b46e1..8669770fa 100644 --- a/lib/l10n/intl_ie.arb +++ b/lib/l10n/intl_ie.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index c0565c15c..9bf4ae559 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb index 5ae5ff970..17fb70c5c 100644 --- a/lib/l10n/intl_ja.arb +++ b/lib/l10n/intl_ja.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ka.arb b/lib/l10n/intl_ka.arb index c245e989d..f0df2994a 100644 --- a/lib/l10n/intl_ka.arb +++ b/lib/l10n/intl_ka.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ko.arb b/lib/l10n/intl_ko.arb index 8493d3200..c59c83cb1 100644 --- a/lib/l10n/intl_ko.arb +++ b/lib/l10n/intl_ko.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lt.arb b/lib/l10n/intl_lt.arb index cce4ab91e..f1a300637 100644 --- a/lib/l10n/intl_lt.arb +++ b/lib/l10n/intl_lt.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lv.arb b/lib/l10n/intl_lv.arb index 925de1c3c..70c216b28 100644 --- a/lib/l10n/intl_lv.arb +++ b/lib/l10n/intl_lv.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nb.arb b/lib/l10n/intl_nb.arb index 4dc170944..92abc5d57 100644 --- a/lib/l10n/intl_nb.arb +++ b/lib/l10n/intl_nb.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index a61e0b162..801843e7e 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index 75b997285..f0dcffaa1 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 93622eb33..4ecbfe722 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt_BR.arb b/lib/l10n/intl_pt_BR.arb index 10a9735f2..b27c26dbb 100644 --- a/lib/l10n/intl_pt_BR.arb +++ b/lib/l10n/intl_pt_BR.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt_PT.arb b/lib/l10n/intl_pt_PT.arb index 87d584243..6e7febc3c 100644 --- a/lib/l10n/intl_pt_PT.arb +++ b/lib/l10n/intl_pt_PT.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ro.arb b/lib/l10n/intl_ro.arb index 275fd7a1b..ae06b6424 100644 --- a/lib/l10n/intl_ro.arb +++ b/lib/l10n/intl_ro.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index 769ee2780..f7649bf35 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sk.arb b/lib/l10n/intl_sk.arb index 7cb7db073..375b9c14e 100644 --- a/lib/l10n/intl_sk.arb +++ b/lib/l10n/intl_sk.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sl.arb b/lib/l10n/intl_sl.arb index fe8941872..0e9776a29 100644 --- a/lib/l10n/intl_sl.arb +++ b/lib/l10n/intl_sl.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sr.arb b/lib/l10n/intl_sr.arb index 930ee21a0..57c10d96b 100644 --- a/lib/l10n/intl_sr.arb +++ b/lib/l10n/intl_sr.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sv.arb b/lib/l10n/intl_sv.arb index 2f56aba62..cb7196523 100644 --- a/lib/l10n/intl_sv.arb +++ b/lib/l10n/intl_sv.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ta.arb b/lib/l10n/intl_ta.arb index 6548ab80a..ca7cd4165 100644 --- a/lib/l10n/intl_ta.arb +++ b/lib/l10n/intl_ta.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_te.arb b/lib/l10n/intl_te.arb index 0431adea4..f069fb577 100644 --- a/lib/l10n/intl_te.arb +++ b/lib/l10n/intl_te.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_th.arb b/lib/l10n/intl_th.arb index c1bfc2439..7f452a197 100644 --- a/lib/l10n/intl_th.arb +++ b/lib/l10n/intl_th.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb index 514efe6b9..00479d20d 100644 --- a/lib/l10n/intl_tr.arb +++ b/lib/l10n/intl_tr.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_uk.arb b/lib/l10n/intl_uk.arb index 2f7d4d834..b5b25a501 100644 --- a/lib/l10n/intl_uk.arb +++ b/lib/l10n/intl_uk.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_vi.arb b/lib/l10n/intl_vi.arb index 21d12475c..7548bcd25 100644 --- a/lib/l10n/intl_vi.arb +++ b/lib/l10n/intl_vi.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_yue.arb b/lib/l10n/intl_yue.arb index 3a45af6d0..e91a629c6 100644 --- a/lib/l10n/intl_yue.arb +++ b/lib/l10n/intl_yue.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index 50d4e3a7b..a4c0ac449 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_zh_Hant.arb b/lib/l10n/intl_zh_Hant.arb index 6535e9920..1f99b84dd 100644 --- a/lib/l10n/intl_zh_Hant.arb +++ b/lib/l10n/intl_zh_Hant.arb @@ -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": {} } } \ No newline at end of file diff --git a/lib/pages/new_group/new_group.dart b/lib/pages/new_group/new_group.dart index b6fd12393..d2dace989 100644 --- a/lib/pages/new_group/new_group.dart +++ b/lib/pages/new_group/new_group.dart @@ -197,8 +197,6 @@ class NewGroupController extends State { // context.pop(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(), diff --git a/lib/pangea/course_chats/course_chats_page.dart b/lib/pangea/course_chats/course_chats_page.dart index 13a644763..1c9af4e2f 100644 --- a/lib/pangea/course_chats/course_chats_page.dart +++ b/lib/pangea/course_chats/course_chats_page.dart @@ -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 return 0; } + bool showDefaultChatCreation(CourseDefaultChatsEnum type) { + if (room == null || !room!.isRoomAdmin) return false; + return !room!.dismissedDefaultChat(type) && !room!.hasDefaultChat(type); + } + + Future 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 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); } diff --git a/lib/pangea/course_chats/course_chats_settings_model.dart b/lib/pangea/course_chats/course_chats_settings_model.dart new file mode 100644 index 000000000..a05af31c6 --- /dev/null +++ b/lib/pangea/course_chats/course_chats_settings_model.dart @@ -0,0 +1,31 @@ +class CourseChatsSettingsModel { + final bool dismissedIntroChat; + final bool dismissedAnnouncementsChat; + + const CourseChatsSettingsModel({ + this.dismissedIntroChat = false, + this.dismissedAnnouncementsChat = false, + }); + + Map toJson() => { + 'dismissed_intro_chat': dismissedIntroChat, + 'dismissed_announcements_chat': dismissedAnnouncementsChat, + }; + + factory CourseChatsSettingsModel.fromJson(Map 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, + ); +} diff --git a/lib/pangea/course_chats/course_chats_view.dart b/lib/pangea/course_chats/course_chats_view.dart index 99f077c15..751bc2bc4 100644 --- a/lib/pangea/course_chats/course_chats_view.dart +++ b/lib/pangea/course_chats/course_chats_view.dart @@ -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), + ), + ); + } +} diff --git a/lib/pangea/course_chats/course_default_chats_enum.dart b/lib/pangea/course_chats/course_default_chats_enum.dart new file mode 100644 index 000000000..7392d2e57 --- /dev/null +++ b/lib/pangea/course_chats/course_default_chats_enum.dart @@ -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, + }; +} diff --git a/lib/pangea/course_creation/selected_course_page.dart b/lib/pangea/course_creation/selected_course_page.dart index d3adfd5f5..54fd2eca4 100644 --- a/lib/pangea/course_creation/selected_course_page.dart +++ b/lib/pangea/course_creation/selected_course_page.dart @@ -99,8 +99,6 @@ class SelectedCourseController extends State .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: [ diff --git a/lib/pangea/course_plans/courses/course_plan_room_extension.dart b/lib/pangea/course_plans/courses/course_plan_room_extension.dart index 7a8c4a97d..e9d78c2b5 100644 --- a/lib/pangea/course_plans/courses/course_plan_room_extension.dart +++ b/lib/pangea/course_plans/courses/course_plan_room_extension.dart @@ -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 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 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; + } } diff --git a/lib/pangea/events/constants/pangea_event_types.dart b/lib/pangea/events/constants/pangea_event_types.dart index 6fda7935c..dbcc7ad7e 100644 --- a/lib/pangea/events/constants/pangea_event_types.dart +++ b/lib/pangea/events/constants/pangea_event_types.dart @@ -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"; } diff --git a/lib/pangea/extensions/room_children_and_parents_extension.dart b/lib/pangea/extensions/room_children_and_parents_extension.dart index 4b090fa4a..b79828301 100644 --- a/lib/pangea/extensions/room_children_and_parents_extension.dart +++ b/lib/pangea/extensions/room_children_and_parents_extension.dart @@ -21,6 +21,14 @@ extension ChildrenAndParentsRoomExtension on Room { ) .toList(); + List 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. diff --git a/lib/pangea/extensions/room_information_extension.dart b/lib/pangea/extensions/room_information_extension.dart index 7bd3747a2..e0ba4f362 100644 --- a/lib/pangea/extensions/room_information_extension.dart +++ b/lib/pangea/extensions/room_information_extension.dart @@ -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 get botIsInRoom async { final List participants = await requestParticipants(); return participants.any( diff --git a/lib/pangea/spaces/utils/client_spaces_extension.dart b/lib/pangea/spaces/utils/client_spaces_extension.dart index 2a353dacd..99fed4451 100644 --- a/lib/pangea/spaces/utils/client_spaces_extension.dart +++ b/lib/pangea/spaces/utils/client_spaces_extension.dart @@ -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 createPangeaSpace({ required String name, - required String introChatName, - required String announcementsChatName, String? topic, Visibility visibility = Visibility.private, JoinRules joinRules = JoinRules.public, @@ -43,153 +35,6 @@ extension SpacesClientExtension on Client { if (initialState != null) ...initialState, ], ); - - final space = await _waitForRoom(roomId); - if (space == null) return roomId; - - await _addDefaultSpaceChats( - space: space, - introductionsName: introChatName, - announcementsName: announcementsChatName, - ); return roomId; } - - Future _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 _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 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, - ]); - } } diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart index ba0870606..3fc7e5b35 100644 --- a/lib/utils/client_manager.dart +++ b/lib/utils/client_manager.dart @@ -151,6 +151,7 @@ abstract class ClientManager { PangeaEventTypes.coursePlan, PangeaEventTypes.courseUser, PangeaEventTypes.teacherMode, + PangeaEventTypes.courseChatList, // Pangea# }, logLevel: kReleaseMode ? Level.warning : Level.verbose, From 14216e8c721c92500cbb569703331ff79f79aa26 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 2 Dec 2025 16:35:57 -0500 Subject: [PATCH 2/3] fix: on course creation, wait for course plan state event to sync --- lib/pangea/course_creation/course_invite_page.dart | 14 +++++++++++++- .../spaces/utils/client_spaces_extension.dart | 5 +++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/pangea/course_creation/course_invite_page.dart b/lib/pangea/course_creation/course_invite_page.dart index eeacef626..3ce10702b 100644 --- a/lib/pangea/course_creation/course_invite_page.dart +++ b/lib/pangea/course_creation/course_invite_page.dart @@ -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 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 diff --git a/lib/pangea/spaces/utils/client_spaces_extension.dart b/lib/pangea/spaces/utils/client_spaces_extension.dart index 99fed4451..d72c85a58 100644 --- a/lib/pangea/spaces/utils/client_spaces_extension.dart +++ b/lib/pangea/spaces/utils/client_spaces_extension.dart @@ -35,6 +35,11 @@ extension SpacesClientExtension on Client { if (initialState != null) ...initialState, ], ); + + if (getRoomById(roomId) == null) { + await waitForRoomInSync(roomId, join: true); + } + return roomId; } } From 0f983b693ead21cac2d96e691c16a702f5f109a4 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 3 Dec 2025 12:28:38 -0500 Subject: [PATCH 3/3] build: bump version number --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 2dd3cc8b5..a30f8a93d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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"